From 3e3ee959f295ecd13f0c0c9c1cb4c437f1ffec19 Mon Sep 17 00:00:00 2001
From: agrt56 <andreas.gaertner@mni.thm.de>
Date: Mon, 4 May 2015 13:21:31 +0200
Subject: [PATCH] Task #15781: Change unanswered question retain from couchdb.

---
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 45 +++++++++++--------
 1 file changed, 27 insertions(+), 18 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index dfa373f5c..8570890e2 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -1582,30 +1582,16 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 	@Override
 	public List<String> getUnAnsweredLectureQuestionIds(final Session session, final User user) {
-		final NovaView view = new NovaView("answer/variant_by_user");
+		final NovaView view = new NovaView("answer/variant_by_user_and_piround");
 		view.setKey(user.getUsername(), session.get_id(), "lecture");
-		return collectUnansweredQuestionIds(getLectureQuestionIds(session), view);
-	}
-
-	private List<String> getLectureQuestionIds(final Session session) {
-		NovaView view = new NovaView("skill_question/lecture_question_ids_by_session_for_all");
-		view.setStartKeyArray(session.get_id());
-		view.setEndKeyArray(session.get_id(), "{}");
-		return collectQuestionIds(view);
+		return collectUnansweredQuestionIdsByPiRound(getLectureQuestionsForUsers(session), view);
 	}
 
 	@Override
 	public List<String> getUnAnsweredPreparationQuestionIds(final Session session, final User user) {
-		final NovaView view = new NovaView("answer/variant_by_user");
+		final NovaView view = new NovaView("answer/variant_by_user_and_piround");
 		view.setKey(user.getUsername(), session.get_id(), "preparation");
-		return collectUnansweredQuestionIds(getPreparationQuestionIds(session), view);
-	}
-
-	private List<String> getPreparationQuestionIds(final Session session) {
-		NovaView view = new NovaView("skill_question/preparation_question_ids_by_session_for_all");
-		view.setStartKeyArray(session.get_id());
-		view.setEndKeyArray(session.get_id(), "{}");
-		return collectQuestionIds(view);
+		return collectUnansweredQuestionIdsByPiRound(getPreparationQuestionsForUsers(session), view);
 	}
 
 	private List<String> collectUnansweredQuestionIds(
@@ -1628,6 +1614,29 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		return unanswered;
 	}
 
+	private List<String> collectUnansweredQuestionIdsByPiRound(
+			final List<Question> questions,
+			final NovaView view
+			) {
+		final ViewResults answeredQuestions = getDatabase().view(view);
+
+		final Map<String, Integer> answered = new HashMap<String, Integer>();
+		for (final Document d : answeredQuestions.getResults()) {
+			answered.put(d.getJSONArray("value").getString(0), d.getJSONArray("value").getInt(1));
+		}
+
+		final List<String> unanswered = new ArrayList<String>();
+
+		for (final Question question : questions) {
+			if (!answered.containsKey(question.get_id()) || 
+				(answered.containsKey(question.get_id()) && answered.get(question.get_id()) != question.getPiRound())) {
+				unanswered.add(question.get_id());
+			}
+		}
+
+		return unanswered;
+	}
+
 	private List<String> collectQuestionIds(final NovaView view) {
 		final ViewResults results = getDatabase().view(view);
 		if (results.getResults().size() == 0) {
-- 
GitLab