From 03c1ff42366c645b09479d5f3f78ffc38ff61307 Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <daniel.gerhardt@mni.thm.de> Date: Thu, 21 Mar 2013 16:23:59 +0100 Subject: [PATCH] Fixed Peer Instruction implementation logic for getMyAnswers. Previously answers of the previous piRound were selected if no answer for the current piRound had been saved. --- .../thm/arsnova/services/QuestionService.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index 2ca2277b1..bd230b9e0 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -232,25 +232,26 @@ public class QuestionService implements IQuestionService { @Override @Authenticated public List<Answer> getMyAnswers(String sessionKey) { + List<Question> questions = getSkillQuestions(sessionKey); + Map<String, Question> questionIdToQuestion = new HashMap<String, Question>(); + for (Question question : questions) { + questionIdToQuestion.put(question.get_id(), question); + } + + /* filter answers by active piRound per question */ List<Answer> answers = databaseDao.getMyAnswers(sessionKey); - Map<String, Answer> questionIdToAnswer = new HashMap<String, Answer>(); + List<Answer> filteredAnswers = new ArrayList<Answer>(); for (Answer answer : answers) { - Answer mappedAnswer = questionIdToAnswer.get(answer.getQuestionId()); - if (null == mappedAnswer || answer.getPiRound() > mappedAnswer.getPiRound()) { - /* Since it is not known to which type of question the answer belongs, it - * will be assumed that all answers with subject AND text being set will be - * of the type free text. An alternative would be to fetch all questions of - * the session and check the questionType property but that approach would - * cost additional resources. */ - boolean freeText = null != answer.getAnswerSubject() && null != answer.getAnswerText(); - if (!freeText && 0 == answer.getPiRound()) { - answer.setPiRound(1); - } - questionIdToAnswer.put(answer.getQuestionId(), answer); + Question question = questionIdToQuestion.get(answer.getQuestionId()); + if (0 == answer.getPiRound() && !"freetext".equals(question.getQuestionType())) { + answer.setPiRound(1); + } + if (answer.getPiRound() == question.getPiRound()) { + filteredAnswers.add(answer); } } - return new ArrayList<Answer>(questionIdToAnswer.values()); + return filteredAnswers; } @Override -- GitLab