Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
543da0a
updated gitignore to frontend
tobydragon Jun 14, 2021
af25be1
first attempt at combining, but requires nested repos currently, whic…
tobydragon Jun 15, 2021
f4efd85
made directories for localData if it is not already present
tobydragon Jun 15, 2021
2ee0910
fixed typo in test filename
tobydragon Jun 15, 2021
6812a5e
initial branch-publishing commit
embieck Jun 17, 2021
f74ae83
test file created
embieck Jun 17, 2021
4cc1f07
QuestionChooserTest start w/ sample question histories formatting exa…
embieck Jun 17, 2021
ac4bd07
Merge branch 'rewrite' into questionChooserOrdered
vkumar825 Jun 21, 2021
04e9d1c
updated logic for questionhistorysummary
vkumar825 Jun 22, 2021
36cf504
question chooser test cases w/ sample data
embieck Jun 22, 2021
dcaaf63
Merge branch 'questionChooserOrdered' of https://github.com/tobydrago…
embieck Jun 22, 2021
49d46ef
added sample exemplary student data
embieck Jun 23, 2021
613058a
implementation passes tests so far
embieck Jun 25, 2021
081c410
Added default cohort; added getters and setters in chooser BOC; and u…
embieck Jun 26, 2021
a1628be
more json convertible question chooser
embieck Jun 30, 2021
a4333a3
questionChooser converts to json
embieck Jun 30, 2021
570f1a2
Merged 'questionChooserOrdered' into QHS branch
vkumar825 Jun 30, 2021
e5d1f46
passing par controller tests
embieck Jun 30, 2021
a8c2951
changed tests to work with new historysummary code
vkumar825 Jul 1, 2021
4f23d01
updated method names for questionhistorysummary
vkumar825 Jul 1, 2021
a90dd7b
Working server test w/ server obj passed in to parController
embieck Jul 1, 2021
55c5102
implemented getQuestionHistorySummary
vkumar825 Jul 1, 2021
1f9906e
broken load contexts test w/ init pc & assertJ tests
embieck Jul 2, 2021
5675f84
datasources return concept lists; chooseQ simpler passes min tests
embieck Jul 2, 2021
4459e5b
remove prints
embieck Jul 2, 2021
79d967c
student model fix; updated test student file; temp dir w/ tests
embieck Jul 2, 2021
41ce6a4
Merge branch 'removingServerInjectionDependency' into questionChooser…
embieck Jul 2, 2021
f61b693
methods renamed to resolve 404 errors
embieck Jul 3, 2021
525b861
passing isUserIdAvailable and getCohortIds tests
embieck Jul 4, 2021
b9b02a2
added dependency and removed boc cohort
embieck Jul 4, 2021
c4870ec
passing unit tests; additional use cases
embieck Jul 5, 2021
978e20d
removing print statements
embieck Jul 5, 2021
a8f1018
Merge branch 'removingServerInjectionDependency' into questionChooser…
embieck Jul 5, 2021
d28a01b
par controller test of adv behavior; boc integration issue fixed
embieck Jul 6, 2021
568fc2d
Merge branch 'questionChooserOrdered' into removingServerInjectionDep…
embieck Jul 6, 2021
26be15f
Merge remote-tracking branch 'origin/QuestionHistorySummary' into sum…
embieck Jul 6, 2021
6bf3d94
method name changes & getQHistories.values()
embieck Jul 6, 2021
28d7ac6
questionChooserBoc test cleanup
embieck Jul 7, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

### Maven spring - downloaded with initial project from Spring Intitializer - https://start.spring.io/ ###
/target/
/parui/
!.mvn/wrapper/maven-wrapper.jar

### STS ###
Expand Down
77 changes: 73 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,6 @@
<artifactId>opencsv</artifactId>
<version>4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
Expand Down Expand Up @@ -96,6 +92,17 @@
<version>2.14.1</version>
</dependency>

<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>

</dependencies>

Expand All @@ -116,6 +123,68 @@
</dependency>
</dependencies>
</plugin>

<!-- To build the react front end code -->
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.12.0</version>
<configuration>
<workingDirectory>parui</workingDirectory>
<installDirectory>target</installDirectory>
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v14.16.0</nodeVersion>
<npmVersion>6.14.11</npmVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm run build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>generate-resources</phase>
<configuration>
<target>
<copy todir="${project.build.directory}/classes/public">
<fileset dir="${project.basedir}/parui/build"/>
</copy>
<mkdir dir="${project.build.directory}/localData/student"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Expand Down
4 changes: 2 additions & 2 deletions server install steps.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ mvn test
ps -A | grep java
sudo kill PID

tar cvzf "../dataBackup/parDataBackup-2021-02-10.tar.gz" target/localData/
tar cvzf "../dataBackup/parDataBackup-2021-06-15.tar.gz" target/localData/
on local:
scp <username>@par.eastus.cloudapp.azure.com:dataBackup/parDataBackup--2021-02-10.tar.gz Downloads/
scp <username>@par.eastus.cloudapp.azure.com:dataBackup/parDataBackup--2021-06-15.tar.gz Downloads/
remote if clearing data:
rm -f target/localData/*.json
rm -f target/localData/students/*.json
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/edu/ithaca/dragon/par/ParServer.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package edu.ithaca.dragon.par;

import java.util.Collection;
import java.util.List;

import edu.ithaca.dragon.par.analysis.QuestionHistorySummary;
import edu.ithaca.dragon.par.cohort.Cohort;
import edu.ithaca.dragon.par.cohort.CohortDatasource;
import edu.ithaca.dragon.par.domain.Question;
import edu.ithaca.dragon.par.domain.DomainDatasource;
import edu.ithaca.dragon.par.student.StudentModelDatasource;
import edu.ithaca.dragon.par.student.json.QuestionHistory;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

Expand All @@ -32,6 +36,11 @@ public List<String> getCohortIds(){
return cohortDatasource.getCohortIds();
}

public QuestionHistorySummary getQuestionHistorySummary(String studentId){
logger.info("QuestionHistorySummary for:" + studentId);
return new QuestionHistorySummary(studentModelDatasource.getStudentModel(studentId).getQuestionHistories().values(), domainDatasource);
}

public void addNewUser(String studentId, String cohortId){
studentModelDatasource.createNewModelForId(studentId);
cohortDatasource.addStudentToCohort(cohortId, studentId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,18 @@
//TODO: can make these: across everyone for all types or certain type, for 1 student for all types or certain type, window size too
public class QuestionHistorySummary {
private List<String> questionIdsSeen;
private List<String> questionsRespondedTo;
private List<String> questionsCorrect;
private List<String> questionsCorrectAfterIncorrect;
private List<String> questionsIncorrect;
private List<String> questionIdsRespondedTo;
private List<String> questionIdsCorrectFirstTime;
private List<String> questionIdsCorrectAfterIncorrect;
private List<String> questionIdsIncorrect;


public QuestionHistorySummary(Collection<QuestionHistory> questionHistoryCollection, DomainDatasource domainData){
questionIdsSeen = buildQuestionIdsSeen(questionHistoryCollection);
questionsRespondedTo = checkQuestionsRespondedTo(questionHistoryCollection);
questionsCorrect = findQuestionsCorrect(questionHistoryCollection, domainData);
questionsIncorrect = findQuestionsIncorrect(questionHistoryCollection, domainData);
questionsCorrectAfterIncorrect = findQuestionsCorrectAfterIncorrect(questionHistoryCollection, domainData);
questionIdsRespondedTo = checkQuestionIdsRespondedTo(questionHistoryCollection);
questionIdsCorrectFirstTime = findQuestionIdsCorrectFirstTime(questionHistoryCollection, domainData);
questionIdsIncorrect = findQuestionIdsIncorrect(questionHistoryCollection, domainData);
questionIdsCorrectAfterIncorrect = findQuestionIdsCorrectAfterIncorrect(questionHistoryCollection, domainData);
}

public static List<String> buildQuestionIdsSeen(Collection<QuestionHistory> questionHistoryCollection){
Expand All @@ -40,7 +40,7 @@ public static List<String> buildQuestionIdsSeen(Collection<QuestionHistory> ques
return questionIdsList;
}

public static List<String> checkQuestionsRespondedTo(Collection<QuestionHistory> questionHistoryCollection){
public static List<String> checkQuestionIdsRespondedTo(Collection<QuestionHistory> questionHistoryCollection){
List<String> questionsRespondedList = new ArrayList<String>();

for(QuestionHistory questionHist : questionHistoryCollection){
Expand All @@ -51,7 +51,7 @@ public static List<String> checkQuestionsRespondedTo(Collection<QuestionHistory>
return questionsRespondedList;
}

public static List<String> findQuestionsCorrect(Collection<QuestionHistory> questionHistoryCollection, DomainDatasource domainData){
public static List<String> findQuestionIdsCorrectFirstTime(Collection<QuestionHistory> questionHistoryCollection, DomainDatasource domainData){
List<String> correctList = new ArrayList<String>();
List<QuestionHistory> historyOfQuestions = QuestionHistorySummary.findAllHistoriesWithResponses(questionHistoryCollection);

Expand All @@ -65,28 +65,35 @@ public static List<String> findQuestionsCorrect(Collection<QuestionHistory> ques
return correctList;
}

public static List<String> findQuestionsIncorrect(Collection<QuestionHistory> questionHistoryCollection, DomainDatasource domainData){
public static List<String> findQuestionIdsIncorrect(Collection<QuestionHistory> questionHistoryCollection, DomainDatasource domainData){
List<String> incorrectList = new ArrayList<String>();
List<QuestionHistory> historyOfQuestions = QuestionHistorySummary.findAllHistoriesWithResponses(questionHistoryCollection);

for (QuestionHistory questionHist : historyOfQuestions){
String correctAnswer = domainData.getQuestion(questionHist.getQuestionId()).getCorrectAnswer();
if (!questionHist.responses.iterator().next().getResponseText().equals(correctAnswer)){
boolean hasCorrectAnswer = false;

for(Response questionResponse : questionHist.responses){
String correctAnswer = domainData.getQuestion(questionHist.getQuestionId()).getCorrectAnswer();
if (questionResponse.getResponseText().equals(correctAnswer) ){
hasCorrectAnswer = true;
}
}
if (!hasCorrectAnswer){
incorrectList.add(questionHist.getQuestionId());
}
}

return incorrectList;
}


public static List<String> findQuestionsCorrectAfterIncorrect(Collection<QuestionHistory> questionHistoryCollection, DomainDatasource domainData){
public static List<String> findQuestionIdsCorrectAfterIncorrect(Collection<QuestionHistory> questionHistoryCollection, DomainDatasource domainData){
List<String> correctAfterIncorrect = new ArrayList<String>();
List<QuestionHistory> historyOfQuestions = QuestionHistorySummary.findAllHistoriesWithResponses(questionHistoryCollection);

for (QuestionHistory questionHist : historyOfQuestions){
for(Response questionResponse : questionHist.responses){
String correctAnswer = domainData.getQuestion(questionHist.getQuestionId()).getCorrectAnswer();
if (questionResponse.getResponseText().equals(correctAnswer)){
if (questionResponse.getResponseText().equals(correctAnswer) && !questionHist.responses.get(0).getResponseText().equals(correctAnswer)){
correctAfterIncorrect.add(questionHist.getQuestionId());
}
}
Expand All @@ -110,19 +117,19 @@ public List<String> getQuestionIdsSeen() {
return questionIdsSeen;
}

public List<String> getQuestionsRespondedTo() {
return questionsRespondedTo;
public List<String> getQuestionIdsRespondedTo() {
return questionIdsRespondedTo;
}

public List<String> getQuestionsCorrect() {
return questionsCorrect;
public List<String> getQuestionIdsCorrectFirstTime() {
return questionIdsCorrectFirstTime;
}

public List<String> getQuestionsIncorrect(){
return questionsIncorrect;
public List<String> getQuestionIdsIncorrect(){
return questionIdsIncorrect;
}

public List<String> getQuestionsCorrectAfterIncorrect(){
return questionsCorrectAfterIncorrect;
public List<String> getQuestionIdsCorrectAfterIncorrect(){
return questionIdsCorrectAfterIncorrect;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,10 @@
public class CreateStudentAction {
public String studentId;
public String cohortId;

public CreateStudentAction(){}
public CreateStudentAction(String studentId, String cohortId){
this.studentId = studentId;
this.cohortId = cohortId;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.ithaca.dragon.par.domain;

import java.util.List;
import java.util.Set;

public interface DomainDatasource {

Expand All @@ -11,4 +12,9 @@ public interface DomainDatasource {
*/
Question getQuestion(String id);

List<String> retrieveAllConcepts();

String retrieveConceptForAQuestion(String id);

List<Question> retrieveQuestionsByConcept(String concept);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@


import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;


public class DomainDatasourceJson implements DomainDatasource{
private final String id;
Expand Down Expand Up @@ -42,4 +46,42 @@ public Question getQuestion(String id){
}
throw new IllegalArgumentException("No question found, bad ID:" + id);
}

@Override
public List<String> retrieveAllConcepts() {
List<String> concepts = new ArrayList<>();

for(Question question:questions){
if(!concepts.contains(question.getType())){
concepts.add(question.getType());
}
}
return concepts;
}

@Override
public String retrieveConceptForAQuestion(String id) {
for (Question question: questions){
if (question.getId().equalsIgnoreCase(id)){
return question.getType();
}
}
throw new IllegalArgumentException("No question found, bad ID:" + id);
}

@Override
public List<Question> retrieveQuestionsByConcept(String concept) {
List<Question> questionList = new ArrayList<>();
for (Question question: questions){
if (question.getType().equalsIgnoreCase(concept)){
questionList.add(question);
}
}
if(questionList.size()==0){
throw new IllegalArgumentException("No questions found, bad concept: "+concept);
}
else{
return questionList;
}
}
}
Loading