From 6255056713efd6221881bf924f6b9cd836296958 Mon Sep 17 00:00:00 2001 From: Axel <wiepke@uni-potsdam.de> Date: Fri, 17 Aug 2018 13:25:27 +0200 Subject: [PATCH] fix: communication to db for workrating works. does not work for quizzes and contributionRating yet --- .../gf/interfaces/IPeerAssessment.java | 7 ++-- .../service/AssessmentDBCommunication.java | 40 +++++++++++++----- .../controller/service/FBAssessement.java | 3 +- .../controller/service/PeerAssessment.java | 17 ++++++-- .../service/PeerAssessmentDummy.java | 10 ++--- .../assessment/controller/view/QuizView.java | 8 +++- .../main/webapp/assets/js/finalAssessment.js | 9 ++-- .../src/main/webapp/assets/js/takeQuiz.js | 42 +++++++++++++++++-- .../gf/interfaces/ActivityFlowTest.java | 8 ++-- 9 files changed, 107 insertions(+), 37 deletions(-) diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java index 18a02b75..e7e0bb8e 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java @@ -4,6 +4,7 @@ import unipotsdam.gf.modules.assessment.QuizAnswer; import unipotsdam.gf.modules.assessment.controller.model.*; import java.util.ArrayList; +import java.util.List; import java.util.Map; /** @@ -77,10 +78,10 @@ public interface IPeerAssessment { /** * - * @param studentAndQuiz - * @param quizAnswer + * @param questions + * @param student */ - void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer); + void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student); void deleteQuiz(String quizId); Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method); 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 01c47b2a..fe67cd81 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 @@ -86,6 +86,21 @@ class AssessmentDBCommunication { return result; } + void writeAnsweredQuiz(StudentIdentifier student, Map<String, Boolean> questions) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + for (String question: questions.keySet()){ + String mysqlRequest = "INSERT INTO `answeredquiz`(`projectId`, `studentId`, `question`, `correct`) VALUES (?,?,?,?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest, + student.getProjectId(), + student.getStudentId(), + question, + questions.get(question) + ); + } + connect.close(); + } + void writeWorkRatingToDB(StudentIdentifier student, String fromStudent, Map<String, Integer> workRating) { MysqlConnect connect = new MysqlConnect(); connect.connect(); @@ -96,7 +111,7 @@ class AssessmentDBCommunication { "`communication`, " + "`autonomous`" + ") VALUES (?,?,?,?,?,?,?,?)"; - connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId(), fromStudent, + connect.issueInsertOrDeleteStatement(mysqlRequest, student.getProjectId(), student.getStudentId(), fromStudent, workRating.get("responsibility"), workRating.get("partOfWork"), workRating.get("cooperation"), @@ -114,7 +129,7 @@ class AssessmentDBCommunication { "`eJournal`, " + "`research`" + ") VALUES (?,?,?,?,?,?)"; - connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId(), fromStudent, + connect.issueInsertOrDeleteStatement(mysqlRequest, student.getProjectId(), student.getStudentId(), fromStudent, contributionRating.get("Dossier"), contributionRating.get("eJournal"), contributionRating.get("research") @@ -126,7 +141,7 @@ class AssessmentDBCommunication { MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "INSERT INTO `grades`(`projectId`, `studentId`, `grade`) VALUES (?,?,?)"; - connect.issueSelectStatement(mysqlRequest, + connect.issueInsertOrDeleteStatement(mysqlRequest, grade.getStudentIdentifier().getProjectId(), grade.getStudentIdentifier().getStudentId(), grade.getGrade() @@ -134,17 +149,20 @@ class AssessmentDBCommunication { connect.close(); } - void writeAnsweredQuiz(StudentIdentifier student, String question, Boolean correct) { + public Map<String, Boolean> getAnswers(String projectId, String question) { MysqlConnect connect = new MysqlConnect(); connect.connect(); - String mysqlRequest = "INSERT INTO `answeredquiz`(`projectId`, `studentId`, `question`, `correct`) VALUES (?,?,?,?)"; - connect.issueSelectStatement(mysqlRequest, - student.getProjectId(), - student.getStudentId(), - question, - correct - ); + Map<String, Boolean> result = new HashMap<>(); + String mysqlRequest = "SELECT * FROM `quiz` WHERE `projectId`=? AND `question`=?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, projectId, question); + boolean next = vereinfachtesResultSet.next(); + while (next) { + result.put(vereinfachtesResultSet.getString("answer"), vereinfachtesResultSet.getBoolean("correct")); + next = vereinfachtesResultSet.next(); + } connect.close(); + 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 e0947560..a9955e9a 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 @@ -4,6 +4,7 @@ import unipotsdam.gf.modules.assessment.QuizAnswer; import unipotsdam.gf.modules.assessment.controller.model.*; import java.util.ArrayList; +import java.util.List; import java.util.Map; /** @@ -60,7 +61,7 @@ public class FBAssessement extends AssessmentDAO { } @Override - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { + public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) { } 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 a63bc805..c2e08f29 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 @@ -202,13 +202,24 @@ public class PeerAssessment implements IPeerAssessment { public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId) { for (PeerRating peer: peerRatings){ StudentIdentifier student = new StudentIdentifier(projectId, peer.getToPeer()); - //new AssessmentDBCommunication().writeWorkRatingToDB(student, peerRatings.get(1).getFromPeer(), peerRatings.get(1).getWorkRating()); + new AssessmentDBCommunication().writeWorkRatingToDB(student, peerRatings.get(1).getFromPeer(), peerRatings.get(1).getWorkRating()); } } @Override - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { - + public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) { + for (String question: questions.keySet()){ + Map<String, Boolean> whatAreAnswers = new AssessmentDBCommunication().getAnswers(student.getProjectId(), question); + Map<String, Boolean> wasQuestionAnsweredCorrectly = new HashMap<>(); + Boolean correct = true; + for (String studentAnswer: questions.get(question)){ + if (!whatAreAnswers.get(studentAnswer)){ + correct=false; + } + } + wasQuestionAnsweredCorrectly.put(question, correct); + new AssessmentDBCommunication().writeAnsweredQuiz(student, wasQuestionAnsweredCorrectly); + } } private Comparator<Map<String, Double>> byMean = (o1, o2) -> { 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 812eab9a..5b105a94 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 @@ -66,7 +66,7 @@ public class PeerAssessmentDummy implements IPeerAssessment { } @Override - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { + public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) { NotImplementedLogger.logAssignment(Assignee.AXEL, IPeerAssessment.class); } @@ -124,23 +124,23 @@ public class PeerAssessmentDummy implements IPeerAssessment { quiz2.add(1); quiz2.add(0); quiz2.add(0); - Map work = new HashMap<String, Double>(); + Map<String, Double> 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<String, Double>(); + Map<String, Double> work2 = new HashMap<>(); 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>(); + Map<String, Double> contribution1 = new HashMap<>(); contribution1.put("Dossier", 4.); contribution1.put("eJournal", 2.); contribution1.put("research", 4.); - Map contribution2 = new HashMap<String, Double>(); + Map<String, Double> contribution2 = new HashMap<>(); contribution2.put("Dossier", 2.); contribution2.put("eJournal", 3.); contribution2.put("research", 4.); 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 e47cdc1a..7ba24ad1 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 @@ -46,8 +46,12 @@ public class QuizView { peer.postPeerRating(peerRatings, projectId); } - public void answerQuiz(StudentAndQuiz studentAndQuiz, QuizAnswer quizAnswer) { - + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("/quizAnswer/projectId/{projectId}/studentId/{studentId}/") + public void answerQuiz(Map<String, List<String>> questions, @PathParam("projectId") String projectId, @PathParam("studentId") String studentId) { + StudentIdentifier student = new StudentIdentifier(projectId, studentId); + peer.answerQuiz(questions, student); } @POST diff --git a/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js b/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js index 664e145a..593c2369 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js @@ -9,14 +9,14 @@ $(document).ready(function() { }); function assessPeer(){ + var peerStudents =$('.peerStudent'); ///////initialize variables/////// - var dataP = []; - var workRating = {}; + var dataP = new Array(peerStudents.size()); var rateThis = ['responsibility','partOfWork','cooperation','communication','autonomous']; ///////read values from html/////// - var peerStudents =$('.peerStudent'); for (var peer=0; peer< peerStudents.length; peer++){ + var workRating = {}; var peerRating = { "fromPeer": $('#user').html().trim(), "toPeer": peerStudents[peer].id, @@ -33,9 +33,8 @@ function assessPeer(){ } } peerRating.workRating = workRating; - workRating=[]; //////write values in Post-Variable - dataP.push(peerRating); + dataP[peer]=peerRating; } var projectId=$('#projectId').html().trim(); $.ajax({ diff --git a/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js b/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js index 1a8afcfa..cd0184d4 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js @@ -29,6 +29,7 @@ $(document).ready(function () { }; var projectId = document.getElementById('projectId').innerText.trim(); + var studentId = document.getElementById('user').innerText.trim(); $.ajax({ url: '../rest/assessments/project/'+projectId+'/quiz/', type: 'GET', @@ -40,7 +41,7 @@ $(document).ready(function () { var colspan = answers.length; var trQuestion = document.createElement('TR'); var tdQuestion = '<td colspan="' + colspan + '"' + - 'data-toggle="collapse" href="#'+question+'" aria-expanded="false" aria-controls="'+question+'">' + + ' data-toggle="collapse" href="#'+question+'" aria-expanded="false" aria-controls="'+question+'">' + '' + data[quiz].question + '</td>'; trQuestion.innerHTML = tdQuestion; var trAnswers = document.createElement('TR'); @@ -64,12 +65,12 @@ $(document).ready(function () { table.appendChild(trAnswers); } }, - error: function (a, b, c) { + error: function (a) { alert('Fehler ' + a); } }); $("#submitQuiz").on("click", function () { - document.location="rateContribution.jsp?token="+getUserTokenFromUrl()+'&projectId='+$('#projectId').html().trim(); + safeQuizAnswers(); }); }); @@ -82,4 +83,39 @@ function shuffle(a) { a[j] = x; } return a; +} + +function safeQuizAnswers(){ //todo: just written before going home. not tested yet, wont work + var quizzes = $('.quiz'); + ///////initialize variables/////// + var dataP = new Array(quizzes.size()); + + ///////read values from html/////// + for (var quiz=0; quiz<quizzes.size(); quiz++){ + var answerList = []; + $(quizzes[quiz]+":input:checkbox[name=type]:checked").each(function(){ + answerList.push($(this).val()); + }); + var question = quizzes[quiz].id; + var quizAnswers={question: answerList}; + //////write values in Post-Variable + dataP[quiz]=quizAnswers; + } + var projectId=$('#projectId').html().trim(); + var studentId=$('#user').html().trim(); + $.ajax({ + url:'../rest/assessments/quizAnswer/projectId/'+projectId+'/studentId/'+studentId, + type: 'POST', + headers: { + "Content-Type": "application/json", + "Cache-Control": "no-cache" + }, + data: JSON.stringify(dataP), + success: function(){ + location.href="takeQuiz.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim(); + }, + error: function(a,b,c){ + + } + }); } \ No newline at end of file diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java index 65248217..1bd1d7a2 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java @@ -171,10 +171,10 @@ public class ActivityFlowTest { // create quiz TODO@Axel this should be a quiz dependend on the student for easier initialization and // de-coupling - StudentAndQuiz studentAndQuiz = factory.manufacturePojo(StudentAndQuiz.class); - QuizAnswer quizAnswer = factory.manufacturePojo(QuizAnswer.class); - iPeerAssessment.createQuiz(studentAndQuiz); - iPeerAssessment.answerQuiz(studentAndQuiz, quizAnswer); + //StudentAndQuiz studentAndQuiz = factory.manufacturePojo(StudentAndQuiz.class); + //QuizAnswer quizAnswer = factory.manufacturePojo(QuizAnswer.class); + //iPeerAssessment.createQuiz(studentAndQuiz); + //iPeerAssessment.answerQuiz(studentAndQuiz, quizAnswer); // finales Portfolio zusammenstellen java.util.List<Journal> journalEntries = new ArrayList<Journal>(); -- GitLab