diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java index e587817757e2ac520295cf8e444ae30e54e58a0f..a117805e8460eb08fa89a48794e2cd3f5f966575 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java @@ -84,5 +84,5 @@ public interface IPeerAssessment { void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer); void deleteQuiz(String quizId); - Map<String, Double> calculateAssessment(String projectId, String method); + Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Categories.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Categories.java new file mode 100644 index 0000000000000000000000000000000000000000..2937b2e3766b6fc3a15fd4595e2878d540dea5cd --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Categories.java @@ -0,0 +1,24 @@ +package unipotsdam.gf.modules.assessment.controller.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Categories { + public static final List<String> workRatingCategories = Collections.unmodifiableList( + new ArrayList<String>() {{ + add("responsibility"); + add("partOfWork"); + add("cooperation"); + add("communication"); + add("autonomous"); + }} + ); + public static final List<String> contributionRatingCategories = Collections.unmodifiableList( + new ArrayList<String>() {{ + add("Dossier"); + add("eJournal"); + add("research"); + }} + ); +} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java index abf5251d0a4c559a89a133daafe46dc78dcd0a82..891a69b0c9227ce992e7c31bb774209683ce68ae 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java @@ -1,22 +1,22 @@ package unipotsdam.gf.modules.assessment.controller.model; import java.util.Arrays; -import java.util.HashMap; +import java.util.List; import java.util.Map; public class Performance { private StudentIdentifier studentIdentifier; - private int[] quizAnswer; - private String feedback; + private List<Integer> quizAnswer; private Map workRating; + private Map contributionRating; public Performance(){} - public Performance(StudentIdentifier student, int[] quiz, String feedback, Map workRating) { + public Performance(StudentIdentifier student, List<Integer> quiz, Map contributionRating, Map workRating) { this.studentIdentifier = student; this.quizAnswer = quiz; - this.feedback=feedback; this.workRating=workRating; + this.contributionRating=contributionRating; } @@ -27,21 +27,17 @@ public class Performance { public void setStudentIdentifier(StudentIdentifier studentIdentifier) { this.studentIdentifier = studentIdentifier; } + public Map getContributionRating() { return contributionRating; } - public int[] getQuizAnswer() { - return quizAnswer; - } + public void setContributionRating(Map contributionRating) { this.contributionRating = contributionRating; } - public void setQuizAnswer(int[] quizAnswer) { - this.quizAnswer = quizAnswer; - } - public String getFeedback() { - return feedback; + public List<Integer> getQuizAnswer() { + return quizAnswer; } - public void setFeedback(String feedback) { - this.feedback = feedback; + public void setQuizAnswer(List<Integer> quizAnswer) { + this.quizAnswer = quizAnswer; } public Map getWorkRating() { @@ -57,8 +53,8 @@ public class Performance { public String toString() { return "Performance{" + "studentIdentifier=" + studentIdentifier + - ", quizAnswer=" + Arrays.toString(quizAnswer) + - ", feedback='" + feedback + '\'' + + ", quizAnswer=" + quizAnswer + + ", contributionRating='" + contributionRating + '\'' + ", workRating=" + workRating + '}'; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/cheatCheckerMethods.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/cheatCheckerMethods.java new file mode 100644 index 0000000000000000000000000000000000000000..ff2d1bdc4eef24c126ac98ffa789fd32ee658154 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/cheatCheckerMethods.java @@ -0,0 +1,17 @@ +package unipotsdam.gf.modules.assessment.controller.model; + +public enum cheatCheckerMethods { + variance("variance"), + median("median"), + none(""); + + private final String text; + + cheatCheckerMethods(final String text){ + this.text = text; + } + @Override + public String toString(){ + return text; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java index ca0d2ce966512127b0e198906c5761334b305b91..f0596581579b62a00fe8d21b0e9e67e86ce96120 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java @@ -2,70 +2,85 @@ package unipotsdam.gf.modules.assessment.controller.service; import unipotsdam.gf.core.database.mysql.MysqlConnect; import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet; -import unipotsdam.gf.modules.assessment.controller.model.Assessment; -import unipotsdam.gf.modules.assessment.controller.model.Performance; -import unipotsdam.gf.modules.assessment.controller.model.Quiz; -import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; +import unipotsdam.gf.modules.assessment.controller.model.*; import javax.annotation.ManagedBean; import javax.annotation.Resource; import javax.inject.Singleton; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; @ManagedBean @Resource @Singleton -public class AssessmentDBCommunication { - public Map getWorkRating(StudentIdentifier student) { +class AssessmentDBCommunication { + ArrayList<Map<String, Double>> getWorkRating(StudentIdentifier student) { + ArrayList<Map<String, Double>> result = new ArrayList<>(); MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "SELECT * FROM `workrating` WHERE `projectId`=? AND `studentId`=?"; VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId()); boolean next = vereinfachtesResultSet.next(); - Map workRating = new HashMap(); - workRating.put("responsibility", 4); - return workRating; + while (next) { + Map workRating = new HashMap(); + for (String category: Categories.workRatingCategories){ + workRating.put(category, (double) vereinfachtesResultSet.getInt(category)); + } + result.add(workRating); + next = vereinfachtesResultSet.next(); + } + return result; } - public Assessment getAssessment(StudentIdentifier student){ + List<String> getStudents(String projectID){ + List<String> result = new ArrayList<>(); MysqlConnect connect = new MysqlConnect(); connect.connect(); - String mysqlRequest = "SELECT * FROM `workrating` WHERE `projectId`=? AND `studentId`=?"; + String mysqlRequest = "SELECT * FROM `projectuser` WHERE `projectId`=?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, projectID); + boolean next = vereinfachtesResultSet.next(); + while (next) { + result.add(vereinfachtesResultSet.getString("userID")); + next = vereinfachtesResultSet.next(); + } + return result; + } + + ArrayList<Map<String, Double>> getContributionRating(StudentIdentifier student) { + ArrayList<Map<String, Double>> result = new ArrayList<>(); + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM `contributionrating` WHERE `projectId`=? AND `studentId`=?"; VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId()); boolean next = vereinfachtesResultSet.next(); - String question = ""; - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); - String answer; - Boolean correct; - String mcType = ""; while (next) { - mcType = vereinfachtesResultSet.getString("mcType"); - question = vereinfachtesResultSet.getString("question"); - answer = vereinfachtesResultSet.getString("answer"); - correct = vereinfachtesResultSet.getBoolean("correct"); - if (correct){ - correctAnswers.add(answer); - }else{ - incorrectAnswers.add(answer); + Map<String, Double> contributionRating = new HashMap<>(); + for (String category: Categories.contributionRatingCategories){ + contributionRating.put(category, (double) vereinfachtesResultSet.getInt(category)); } + result.add(contributionRating); next = vereinfachtesResultSet.next(); } - Performance performance=null; - Assessment assessment = new Assessment(student, performance); - connect.close(); - return assessment; + return result; } - public void deleteQuiz(String quizId) { + ArrayList<Integer> getAnsweredQuizzes(StudentIdentifier student) { + ArrayList<Integer> result = new ArrayList<>(); MysqlConnect connect = new MysqlConnect(); connect.connect(); - String mysqlRequest = "DELETE FROM quiz where question = (?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, quizId); - connect.close(); + String mysqlRequest = "SELECT * FROM `answeredquiz` WHERE `projectId`=? AND `studentId`=?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId()); + boolean next = vereinfachtesResultSet.next(); + while (next) { + result.add(vereinfachtesResultSet.getInt("correct")); + next = vereinfachtesResultSet.next(); + } + return result; } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java index ca3c82dc4acc198e83d88446f952bd7559a99f2b..9f01ce655bce329dda89c93b75f081eeb7c7dcf2 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java @@ -70,7 +70,7 @@ public class FBAssessement extends AssessmentDAO { } @Override - public Map<String, Double> calculateAssessment(String projectId, String method) { + public Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method) { return null; } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java index 0abcace8bd73264eae5718f2768651eb0b6cfa73..7e1ece5fff42dae1492de31ba3516cf641d73ea2 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java @@ -24,7 +24,7 @@ public class PeerAssessment implements IPeerAssessment { @Override public Assessment getAssessmentDataFromDB(StudentIdentifier student) { - return new AssessmentDBCommunication().getAssessment(student); + return null; } @Override @@ -40,20 +40,41 @@ public class PeerAssessment implements IPeerAssessment { @Override public Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance) { Map<StudentIdentifier, Double> quizMean = new HashMap<>(quizGrade(totalPerformance)); - Map<StudentIdentifier, Double> workRateMean = new HashMap<>(workRateGrade(totalPerformance)); + Map<StudentIdentifier, Map<String, Double>> workRating = new HashMap<>(); + Map<StudentIdentifier, Map<String, Double>> contributionRating = new HashMap<>(); + for (Performance performance : totalPerformance) { + workRating.put(performance.getStudentIdentifier(), performance.getWorkRating()); + contributionRating.put(performance.getStudentIdentifier(), performance.getContributionRating()); + } + Map<StudentIdentifier, Double> workRateMean = new HashMap<>(mapToGrade(workRating)); + Map<StudentIdentifier, Double> contributionMean = new HashMap<>(mapToGrade(contributionRating)); Map<StudentIdentifier, Double> result = new HashMap<>(); - Grading[] grading = new Grading[totalPerformance.size()]; for (StudentIdentifier student : quizMean.keySet()) { - double grade = (quizMean.get(student) + workRateMean.get(student)) / 2.0; + double grade = (quizMean.get(student) + workRateMean.get(student) + contributionMean.get(student)) * 100 / 3. ; result.put(student, grade); } return result; } @Override - public Map<String, Double> calculateAssessment(String projectId, String method) { - - return null; + public Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method) { + ArrayList<Performance> totalPerformance = new ArrayList<>(); + //get all students in projectID from DB + List<String> students = new AssessmentDBCommunication().getStudents(projectId); + //for each student + for (String student : students) { + Performance performance = new Performance(); + StudentIdentifier studentIdentifier = new StudentIdentifier(projectId, student); + List<Integer> answeredQuizzes = new AssessmentDBCommunication().getAnsweredQuizzes(studentIdentifier); + ArrayList<Map<String, Double>> workRating = new AssessmentDBCommunication().getWorkRating(studentIdentifier); + ArrayList<Map<String, Double>> contributionRating = new AssessmentDBCommunication().getContributionRating(studentIdentifier); + performance.setStudentIdentifier(studentIdentifier); + performance.setQuizAnswer(answeredQuizzes); + performance.setWorkRating(cheatChecker(workRating, cheatCheckerMethods.variance)); + performance.setContributionRating(cheatChecker(contributionRating, cheatCheckerMethods.variance)); + totalPerformance.add(performance); + } + return calculateAssessment(totalPerformance); } private Map<StudentIdentifier, Double> quizGrade(ArrayList<Performance> totalPerformance) { @@ -61,10 +82,10 @@ public class PeerAssessment implements IPeerAssessment { Map<StudentIdentifier, Double> grading = new HashMap<>(); for (int i = 0; i < totalPerformance.size(); i++) { - for (int j = 0; j < totalPerformance.get(i).getQuizAnswer().length; j++) { - allAssessments[i] += totalPerformance.get(i).getQuizAnswer()[j]; + for (Integer quiz : totalPerformance.get(i).getQuizAnswer()) { + allAssessments[i] += quiz; } - allAssessments[i] = 6.0 - 5.0 * allAssessments[i] / totalPerformance.get(i).getQuizAnswer().length; + allAssessments[i] = allAssessments[i] / totalPerformance.get(i).getQuizAnswer().size(); } for (int i = 0; i < totalPerformance.size(); i++) { grading.put(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]); @@ -72,52 +93,52 @@ public class PeerAssessment implements IPeerAssessment { return grading; } - private Map<StudentIdentifier, Double> workRateGrade(ArrayList<Performance> totalPerformance) { - double[] allAssessments = new double[totalPerformance.size()]; + private Map<StudentIdentifier, Double> mapToGrade(Map<StudentIdentifier, Map<String, Double>> ratings) { + Double allAssessments; Map<StudentIdentifier, Double> grading = new HashMap<>(); - for (int i = 0; i < totalPerformance.size(); i++) { - Map workRating = totalPerformance.get(i).getWorkRating(); - Iterator it = workRating.entrySet().iterator(); - int size = 0; - while (it.hasNext()) { - HashMap.Entry pair = (HashMap.Entry) it.next(); - Double rating = (Double) pair.getValue(); - allAssessments[i] += rating; - it.remove(); // avoids a ConcurrentModificationException - size++; + for (StudentIdentifier student : ratings.keySet()) { + if (ratings.get(student) != null){ + allAssessments = sumOfDimensions(ratings.get(student)); + Double countDimensions = (double) ratings.get(student).size(); + grading.put(student, (allAssessments-1) / (countDimensions * 4)); + } + else { + grading.put(student, 0.); } - allAssessments[i] = 6 - allAssessments[i] / size; } - for (int i = 0; i < totalPerformance.size(); i++) { - grading.put(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]); + return grading; + } + private Double sumOfDimensions(Map rating) { + Double sumOfDimensions = 0.; + for (Object o : rating.entrySet()) { + HashMap.Entry pair = (HashMap.Entry) o; + Double markForDimension = (Double) pair.getValue(); + sumOfDimensions += markForDimension; } - return grading; + return sumOfDimensions; } private Map<String, Double> meanOfWorkRatings(ArrayList<Map<String, Double>> workRatings) { - HashMap<String, Double> mean = new HashMap(); - double size = (double) workRatings.size(); - Iterator it = workRatings.get(0).entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); + HashMap<String, Double> mean = new HashMap<>(); + Double size = (double) workRatings.size(); + for (Object o : workRatings.get(0).entrySet()) { + Map.Entry pair = (Map.Entry) o; mean.put((String) pair.getKey(), 0.0); - it.remove(); // avoids a ConcurrentModificationException } - for (int i = 0; i < workRatings.size(); i++) { - it = workRatings.get(i).entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - mean.put((String) pair.getKey(), (Double) pair.getValue() / size + mean.get(pair.getKey())); + for (Map<String, Double> rating : workRatings) { + for (Object o : rating.entrySet()) { + Map.Entry pair = (Map.Entry) o; + Double value = (double) pair.getValue(); + mean.put((String) pair.getKey(), value / size + mean.get(pair.getKey())); } } return mean; } - public ArrayList<Map<String, Double>> cheatChecker(ArrayList<Map<String, Double>> workRatings, String method) { + private Map<String, Double> cheatChecker(ArrayList<Map<String, Double>> workRatings, cheatCheckerMethods method) { ArrayList<Map<String, Double>> oneExcludedMeans = new ArrayList<>(); - ArrayList<Map<String, Double>> result = new ArrayList<>(); - Double threshold = 0.4; + Map<String, Double> result; if (workRatings.size() > 1) { for (Map rating : workRatings) { ArrayList<Map<String, Double>> possiblyCheating = new ArrayList<>(workRatings); @@ -125,36 +146,43 @@ public class PeerAssessment implements IPeerAssessment { oneExcludedMeans.add(meanOfWorkRatings(possiblyCheating)); } } else { + if (workRatings.size() <1){ + return null; + } oneExcludedMeans.add(meanOfWorkRatings(workRatings)); } - if (method.equals("median")) { + if (method.equals(cheatCheckerMethods.median)) { workRatings.sort(byMean); - result.add(workRatings.get(workRatings.size() / 2)); //in favor of student - } - if (method.equals("variance")) { - Map<String, Double> meanWorkRating = new HashMap<>(meanOfWorkRatings(oneExcludedMeans)); - ArrayList<Map<String, Double>> elementwiseDeviation = new ArrayList<>(); - for (Map<String, Double> rating: oneExcludedMeans){ - HashMap<String, Double> shuttle = new HashMap<>(); - for (String key: rating.keySet()){ - Double value = (rating.get(key)-meanWorkRating.get(key))*(rating.get(key)-meanWorkRating.get(key)); - shuttle.put(key, value); - } - elementwiseDeviation.add(shuttle); - } - Double deviationOld=0.; - Integer key=0; - for (Integer i=0; i<elementwiseDeviation.size(); i++){ - Double deviationNew=0.; - for (Double devi: elementwiseDeviation.get(i).values()){ - deviationNew += devi; + result = workRatings.get(workRatings.size() / 2); //in favor of student + } else { + if (method.equals(cheatCheckerMethods.variance)) { + Map<String, Double> meanWorkRating = new HashMap<>(meanOfWorkRatings(oneExcludedMeans)); + ArrayList<Map<String, Double>> elementwiseDeviation = new ArrayList<>(); + for (Map<String, Double> rating : oneExcludedMeans) { + HashMap<String, Double> shuttle = new HashMap<>(); + for (String key : rating.keySet()) { + Double value = (rating.get(key) - meanWorkRating.get(key)) * (rating.get(key) - meanWorkRating.get(key)); + shuttle.put(key, value); + } + elementwiseDeviation.add(shuttle); } - if (deviationNew>deviationOld){ - deviationOld=deviationNew; - key = i; + Double deviationOld = 0.; + Integer key = 0; + for (Integer i = 0; i < elementwiseDeviation.size(); i++) { + Double deviationNew = 0.; + for (Double devi : elementwiseDeviation.get(i).values()) { + deviationNew += devi; + } + if (deviationNew > deviationOld) { + deviationOld = deviationNew; + key = i; + } } + result = oneExcludedMeans.get(key); //gets set of rates with highest deviation in data + //so without the cheater + } else { //without cheatChecking + result = meanOfWorkRatings(workRatings); } - result.add(oneExcludedMeans.get(key)); //gets set of rates with smallest deviation in data } return result; } @@ -180,7 +208,7 @@ public class PeerAssessment implements IPeerAssessment { } - Comparator<Map<String, Double>> byMean = (o1, o2) -> { + private Comparator<Map<String, Double>> byMean = (o1, o2) -> { Double sumOfO1 = 0.; Double sumOfO2 = 0.; for (String key : o1.keySet()) { diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java index 7ad879368708fe30d9def371edd2f26babc542a9..c5949b5040e16b436bffebbaaa70204b778cd057 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java @@ -15,8 +15,8 @@ public class PeerAssessmentDummy implements IPeerAssessment { @Override public Quiz getQuiz(String projectId, String quizId, String author) { - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); + ArrayList<String> correctAnswers = new ArrayList<>(); + ArrayList<String> incorrectAnswers = new ArrayList<>(); Quiz sampleQuiz; if (quizId.equals("2")) { correctAnswers.add("42"); @@ -39,9 +39,9 @@ public class PeerAssessmentDummy implements IPeerAssessment { } public ArrayList<Quiz> getQuiz(String projectId) { - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); - ArrayList<Quiz> sampleQuiz = new ArrayList<Quiz>(); + ArrayList<String> correctAnswers = new ArrayList<>(); + ArrayList<String> incorrectAnswers = new ArrayList<>(); + ArrayList<Quiz> sampleQuiz = new ArrayList<>(); correctAnswers.add("42"); correctAnswers.add("" + projectId + " 24"); incorrectAnswers.add("a god created creature"); @@ -76,17 +76,23 @@ public class PeerAssessmentDummy implements IPeerAssessment { } @Override - public Map<String, Double> calculateAssessment(String projectId, String method) { + public Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method) { return null; } @Override public Assessment getAssessmentDataFromDB(StudentIdentifier student) { - int[] quizAnswer = {1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1}; + List<Integer> quizAnswer = new ArrayList<>(); + quizAnswer.add(0); + quizAnswer.add(1); + quizAnswer.add(1); + quizAnswer.add(1); + quizAnswer.add(0); + quizAnswer.add(0); Map workRating = new HashMap<>(); - Performance performance = new Performance(student, quizAnswer, "what a nice guy", workRating); - Assessment assessment = new Assessment(student, performance); - return assessment; + Map contributionRating = new HashMap<>(); + Performance performance = new Performance(student, quizAnswer, contributionRating, workRating); + return new Assessment(student, performance); } @Override @@ -103,25 +109,44 @@ public class PeerAssessmentDummy implements IPeerAssessment { public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) { StudentIdentifier student1 = new StudentIdentifier("gemeinsamForschen", "Haralf"); StudentIdentifier student2 = new StudentIdentifier("gemeinsamForschen", "Regine"); - ArrayList<Performance> performances = new ArrayList<Performance>(); - int[] quiz = {1, 0, 1, 0, 0, 0, 1}; - int[] quiz2 = {0, 1, 0, 1, 1, 1, 0}; - Map work = new HashMap(); - work.put("responsibility", 1); - work.put("partOfWork", 1); - work.put("cooperation", 1); - work.put("communication", 1); - work.put("autonomous", 1); - Map work2 = new HashMap(); - work2.put("responsibility", 3); - work2.put("partOfWork", 4); - work2.put("cooperation", 5); - work2.put("communication", 3); - work2.put("autonomous", 4); - - Performance performance = new Performance(student1, quiz, "toller dude", work); + ArrayList<Performance> performances = new ArrayList<>(); + List<Integer> quiz = new ArrayList<>(); + quiz.add(0); + quiz.add(1); + quiz.add(1); + quiz.add(1); + quiz.add(0); + quiz.add(0); + List<Integer> quiz2 = new ArrayList<>(); + quiz2.add(0); + quiz2.add(1); + quiz2.add(1); + quiz2.add(1); + quiz2.add(0); + quiz2.add(0); + Map work = new HashMap<String, Double>(); + work.put("responsibility", 1.); + work.put("partOfWork", 1.); + work.put("cooperation", 1.); + work.put("communication", 1.); + work.put("autonomous", 1.); + Map work2 = new HashMap<String, Double>(); + work2.put("responsibility", 3.); + work2.put("partOfWork", 4.); + work2.put("cooperation", 5.); + work2.put("communication", 3.); + work2.put("autonomous", 4.); + Map contribution1 = new HashMap<String, Double>(); + contribution1.put("Dossier", 4.); + contribution1.put("eJournal", 2.); + contribution1.put("research", 4.); + Map contribution2 = new HashMap<String, Double>(); + contribution2.put("Dossier", 2.); + contribution2.put("eJournal", 3.); + contribution2.put("research", 4.); + Performance performance = new Performance(student1, quiz, contribution1, work); performances.add(performance); - Performance performance2 = new Performance(student2, quiz2, "passt schon", work2); + Performance performance2 = new Performance(student2, quiz2, contribution2, work2); performances.add(performance2); return performances; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java index 49867e1df50e81195f5065e1f994e3cf4640203a..a2aecdb7a9d6247fd2a7afa530ca79ffcfbdd016 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java @@ -13,7 +13,7 @@ import java.util.ArrayList; @Resource @Singleton public class QuizDBCommunication { - public Quiz getQuizByProjectQuizId(String projectId, String quizId, String author){ + Quiz getQuizByProjectQuizId(String projectId, String quizId, String author){ MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "SELECT * FROM `quiz` WHERE `projectId`=? AND `question`=? AND `author`=?"; @@ -21,8 +21,8 @@ public class QuizDBCommunication { connect.issueSelectStatement(mysqlRequest, projectId,quizId,author); boolean next = vereinfachtesResultSet.next(); String question = ""; - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); + ArrayList<String> correctAnswers = new ArrayList<>(); + ArrayList<String> incorrectAnswers = new ArrayList<>(); String answer; Boolean correct; String mcType = ""; @@ -43,22 +43,22 @@ public class QuizDBCommunication { return quiz; } - public ArrayList<Quiz> getQuizByProjectId(String projectId) { + ArrayList<Quiz> getQuizByProjectId(String projectId) { MysqlConnect connect = new MysqlConnect(); - ArrayList<Quiz> result= new ArrayList<Quiz>(); + ArrayList<Quiz> result= new ArrayList<>(); connect.connect(); String mysqlRequest = "SELECT * FROM quiz where projectId= ?"; VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(mysqlRequest, projectId); boolean next = vereinfachtesResultSet.next(); - String question = ""; - ArrayList<String> correctAnswers = new ArrayList<String>(); - ArrayList<String> incorrectAnswers = new ArrayList<String>(); + String question; + ArrayList<String> correctAnswers = new ArrayList<>(); + ArrayList<String> incorrectAnswers = new ArrayList<>(); String answer; String oldQuestion=""; Boolean correct; String mcType = ""; - Quiz quiz =null; + Quiz quiz; while (next) { mcType = vereinfachtesResultSet.getString("mcType"); question = vereinfachtesResultSet.getString("question"); @@ -73,9 +73,8 @@ public class QuizDBCommunication { }else{ quiz = new Quiz(mcType,oldQuestion, correctAnswers, incorrectAnswers); result.add(quiz); - quiz=null; - correctAnswers=new ArrayList<String>(); - incorrectAnswers=new ArrayList<String>(); + correctAnswers=new ArrayList<>(); + incorrectAnswers=new ArrayList<>(); if (correct){ correctAnswers.add(answer); }else{ @@ -107,8 +106,8 @@ public class QuizDBCommunication { String answer; boolean correct; ArrayList<String> correctAnswers = quiz.getCorrectAnswers(); - for (int i=0; i<correctAnswers.size(); i++) { - answer = correctAnswers.get(i); + for (String correctAnswer : correctAnswers) { + answer = correctAnswer; mcType = quiz.getType(); question = quiz.getQuestion(); correct = true; @@ -116,8 +115,8 @@ public class QuizDBCommunication { connect.issueInsertOrDeleteStatement(mysqlRequest, author, projectId, question, mcType, answer, correct); } ArrayList<String> incorrectAnswers = quiz.getIncorrectAnswers(); - for (int i=0; i<incorrectAnswers.size(); i++) { - answer = incorrectAnswers.get(i); + for (String incorrectAnswer : incorrectAnswers) { + answer = incorrectAnswer; mcType = quiz.getType(); question = quiz.getQuestion(); correct = false; diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java index abe7f48e6c1d4c4e71b250da574a6db7c266b2ba..486618bf184f07dec9ed995e1d81b17744b7d028 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java @@ -109,11 +109,11 @@ public class QuizView implements IPeerAssessment { } ////////////////////////funktioniert primitiv/////////todo: nicht als jersey zu nutzen/////////////////////////////// - @POST + @GET @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Path("/calculate/projectId/{projectId}/cheatChecker/{method}") - public Map<String, Double> calculateAssessment(@PathParam("projectId") String projectId, @PathParam("method") String method) { + public Map<StudentIdentifier, Double> calculateAssessment(@PathParam("projectId") String projectId, @PathParam("method") String method) { return peer.calculateAssessment(projectId, method); } @@ -147,26 +147,41 @@ public class QuizView implements IPeerAssessment { public List<Performance> getTotalAssessment() { List<Performance> result = new ArrayList<>(); StudentIdentifier student = new StudentIdentifier("projekt","student"); - int[] quiz = {1,0,1,1,1,0}; - Map work = new HashMap<String, Integer>(); - work.put("responsibility", 1); - work.put("partOfWork", 1); - work.put("cooperation", 1); - work.put("communication", 1); - work.put("autonomous", 1); - Map work2 = new HashMap<String, Integer>(); - work2.put("responsibility", 3); - work2.put("partOfWork", 4); - work2.put("cooperation", 5); - work2.put("communication", 3); - work2.put("autonomous", 4); + List<Integer> quiz = new ArrayList<>(); + quiz.add(1); + quiz.add(0); + quiz.add(1); + quiz.add(0); + quiz.add(1); + quiz.add(0); + quiz.add(1); + Map work = new HashMap<String, Double>(); + work.put("responsibility", 1.); + work.put("partOfWork", 1.); + work.put("cooperation", 1.); + work.put("communication", 1.); + work.put("autonomous", 1.); + Map work2 = new HashMap<String, Double>(); + work2.put("responsibility", 3.); + work2.put("partOfWork", 4.); + work2.put("cooperation", 5.); + work2.put("communication", 3.); + work2.put("autonomous", 4.); + Map contribution1 = new HashMap<String, Double>(); + contribution1.put("Dossier", 4.); + contribution1.put("eJournal", 2.); + contribution1.put("research", 4.); + Map contribution2 = new HashMap<String, Double>(); + contribution2.put("Dossier", 2.); + contribution2.put("eJournal", 3.); + contribution2.put("research", 4.); Performance pf = new Performance(); - pf.setFeedback("ein toller typ"); + pf.setContributionRating(contribution1); pf.setQuizAnswer(quiz); pf.setStudentIdentifier(student); pf.setWorkRating(work); Performance pf2 = new Performance(); - pf2.setFeedback("feini feini"); + pf2.setContributionRating(contribution2); pf2.setQuizAnswer(quiz); pf2.setStudentIdentifier(student); pf2.setWorkRating(work2); diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/peerassessment/HashMapTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/peerassessment/HashMapTest.java index 122265a3408608786679ca870754a28258470cf3..1252c6ae0db6e157e1808d3a697f212fda240bfc 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/peerassessment/HashMapTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/peerassessment/HashMapTest.java @@ -179,26 +179,41 @@ public class HashMapTest { public void test1() { ArrayList<Performance> result = new ArrayList<>(); StudentIdentifier student = new StudentIdentifier("projekt", "student"); - int[] quiz = {1, 0, 1, 1, 1, 0}; - Map work = new HashMap<String, Integer>(); - work.put("responsibility", 1); - work.put("partOfWork", 1); - work.put("cooperation", 1); - work.put("communication", 1); - work.put("autonomous", 1); - Map work2 = new HashMap<String, Integer>(); - work2.put("responsibility", 3); - work2.put("partOfWork", 4); - work2.put("cooperation", 5); - work2.put("communication", 3); - work2.put("autonomous", 4); + List<Integer> quiz = new ArrayList<>(); + quiz.add(1); + quiz.add(0); + quiz.add(1); + quiz.add(0); + quiz.add(1); + quiz.add(0); + quiz.add(1); + Map work = new HashMap<String, Double>(); + work.put("responsibility", 1.); + work.put("partOfWork", 1.); + work.put("cooperation", 1.); + work.put("communication", 1.); + work.put("autonomous", 1.); + Map work2 = new HashMap<String, Double>(); + work2.put("responsibility", 3.); + work2.put("partOfWork", 4.); + work2.put("cooperation", 5.); + work2.put("communication", 3.); + work2.put("autonomous", 4.); + Map contribution1 = new HashMap<String, Double>(); + contribution1.put("Dossier", 4.); + contribution1.put("eJournal", 2.); + contribution1.put("research", 4.); + Map contribution2 = new HashMap<String, Double>(); + contribution2.put("Dossier", 2.); + contribution2.put("eJournal", 3.); + contribution2.put("research", 4.); Performance pf = new Performance(); - pf.setFeedback("ein toller typ"); + pf.setContributionRating(contribution1); pf.setQuizAnswer(quiz); pf.setStudentIdentifier(student); pf.setWorkRating(work); Performance pf2 = new Performance(); - pf2.setFeedback("feini feini"); + pf2.setContributionRating(contribution2); pf2.setQuizAnswer(quiz); pf2.setStudentIdentifier(student); pf2.setWorkRating(work2);