From 3fd3b41f27c8065475ebfc9033876fe24c64df5b Mon Sep 17 00:00:00 2001
From: agrt56 <andreas.gaertner@mni.thm.de>
Date: Sun, 25 Jan 2015 13:38:29 +0100
Subject: [PATCH] Added numUnredInterposed to SessionInfo and SessionInfo
 retrieval in databaseDao. Task #14478

---
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 33 ++++++++++++++-----
 .../de/thm/arsnova/entities/SessionInfo.java  |  9 +++++
 2 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 01482c04..9d86d34b 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -155,18 +155,22 @@ public class CouchDBDao implements IDatabaseDao {
 	private List<SessionInfo> getInfosForSessions(final List<Session> sessions) {
 		final ExtendedView questionCountView = new ExtendedView("skill_question/count_by_session");
 		final ExtendedView answerCountView = new ExtendedView("skill_question/count_answers_by_session");
-		final ExtendedView interposedCountView = new ExtendedView("interposed_question/count_by_session_reading");
+		final ExtendedView interposedCountView = new ExtendedView("interposed_question/count_by_session");
+		final ExtendedView unredInterposedCountView = new ExtendedView("interposed_question/count_by_session_reading");
+		
+		interposedCountView.setSessionIdKeys(sessions);
+		interposedCountView.setGroup(true);
 		questionCountView.setSessionIdKeys(sessions);
 		questionCountView.setGroup(true);
 		answerCountView.setSessionIdKeys(sessions);
 		answerCountView.setGroup(true);
-		List<String> interposedQueryKeys = new ArrayList<String>();
+		List<String> unredInterposedQueryKeys = new ArrayList<String>();
 		for (Session s : sessions) {
-			interposedQueryKeys.add("[\"" + s.get_id() + "\",\"unread\"]");
+			unredInterposedQueryKeys.add("[\"" + s.get_id() + "\",\"unread\"]");
 		}
-		interposedCountView.setKeys(interposedQueryKeys);
-		interposedCountView.setGroup(true);
-		return getSessionInfoData(sessions, questionCountView, answerCountView, interposedCountView);
+		unredInterposedCountView.setKeys(unredInterposedQueryKeys);
+		unredInterposedCountView.setGroup(true);
+		return getSessionInfoData(sessions, questionCountView, answerCountView, interposedCountView, unredInterposedCountView);
 	}
 
 	private List<SessionInfo> getInfosForVisitedSessions(final List<Session> sessions, final User user) {
@@ -245,10 +249,12 @@ public class CouchDBDao implements IDatabaseDao {
 	private List<SessionInfo> getSessionInfoData(final List<Session> sessions,
 			final ExtendedView questionCountView,
 			final ExtendedView answerCountView,
-			final ExtendedView interposedCountView) {
+			final ExtendedView interposedCountView, 
+			final ExtendedView unredInterposedCountView) {
 		final ViewResults questionCountViewResults = getDatabase().view(questionCountView);
 		final ViewResults answerCountViewResults = getDatabase().view(answerCountView);
 		final ViewResults interposedCountViewResults = getDatabase().view(interposedCountView);
+		final ViewResults unredInterposedCountViewResults = getDatabase().view(unredInterposedCountView);
 
 		Map<String, Integer> questionCountMap = new HashMap<String, Integer>();
 		for (final Document d : questionCountViewResults.getResults()) {
@@ -260,13 +266,19 @@ public class CouchDBDao implements IDatabaseDao {
 		}
 		Map<String, Integer> interposedCountMap = new HashMap<String, Integer>();
 		for (final Document d : interposedCountViewResults.getResults()) {
-			interposedCountMap.put(d.getJSONArray("key").getString(0), d.getInt("value"));
+			interposedCountMap.put(d.getString("key"), d.getInt("value"));
 		}
+		Map<String, Integer> unredInterposedCountMap = new HashMap<String, Integer>();
+		for (final Document d : unredInterposedCountViewResults.getResults()) {
+			unredInterposedCountMap.put(d.getJSONArray("key").getString(0), d.getInt("value"));
+		}
+		
 		List<SessionInfo> sessionInfos = new ArrayList<SessionInfo>();
 		for (Session session : sessions) {
 			int numQuestions = 0;
 			int numAnswers = 0;
 			int numInterposed = 0;
+			int numUnredInterposed = 0;
 			if (questionCountMap.containsKey(session.get_id())) {
 				numQuestions = questionCountMap.get(session.get_id());
 			}
@@ -276,10 +288,15 @@ public class CouchDBDao implements IDatabaseDao {
 			if (interposedCountMap.containsKey(session.get_id())) {
 				numInterposed = interposedCountMap.get(session.get_id());
 			}
+			if (unredInterposedCountMap.containsKey(session.get_id())) {
+				numUnredInterposed = unredInterposedCountMap.get(session.get_id());
+			}
+			
 			SessionInfo info = new SessionInfo(session);
 			info.setNumQuestions(numQuestions);
 			info.setNumAnswers(numAnswers);
 			info.setNumInterposed(numInterposed);
+			info.setNumUnredInterposed(numUnredInterposed);
 			sessionInfos.add(info);
 		}
 		return sessionInfos;
diff --git a/src/main/java/de/thm/arsnova/entities/SessionInfo.java b/src/main/java/de/thm/arsnova/entities/SessionInfo.java
index 8910586d..671211fa 100644
--- a/src/main/java/de/thm/arsnova/entities/SessionInfo.java
+++ b/src/main/java/de/thm/arsnova/entities/SessionInfo.java
@@ -32,6 +32,7 @@ public class SessionInfo {
 	private int numQuestions;
 	private int numAnswers;
 	private int numInterposed;
+	private int numUnredInterposed;
 	private int numUnanswered;
 
 	public SessionInfo(Session session) {
@@ -130,4 +131,12 @@ public class SessionInfo {
 	public void setCreationTime(long creationTime) {
 		this.creationTime = creationTime;
 	}
+
+	public int getNumUnredInterposed() {
+		return numUnredInterposed;
+	}
+
+	public void setNumUnredInterposed(int numUnredInterposed) {
+		this.numUnredInterposed = numUnredInterposed;
+	}
 }
-- 
GitLab