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