From 32fcbc5697305ee2a7840d1c8d3d11a22e67bd3e Mon Sep 17 00:00:00 2001
From: Daniel Vogel <daniel.vogel@mni.thm.de>
Date: Mon, 12 Jan 2015 00:18:19 +0100
Subject: [PATCH] Get public pool sessions as grouped map

---
 .../arsnova/controller/SessionController.java |  5 ++--
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 25 ++++++++++---------
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  4 ++-
 .../thm/arsnova/services/ISessionService.java |  4 ++-
 .../thm/arsnova/services/SessionService.java  |  4 ++-
 .../de/thm/arsnova/dao/StubDatabaseDao.java   |  2 +-
 6 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index 9b647c513..d09640cdb 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -22,6 +22,7 @@ import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import javax.servlet.http.HttpServletResponse;
 
@@ -192,10 +193,10 @@ public class SessionController extends AbstractController {
 	
 
 	@RequestMapping(value = "/public_pool", method = RequestMethod.GET)
-	public final List<Session> getPublicPoolSessions(
+	public final Map<String, ArrayList<Session>> getPublicPoolSessions(
 			final HttpServletResponse response
 			) {
-		List<Session> sessions;
+		Map<String, ArrayList<Session>> sessions;
 		sessions = sessionService.getPublicPoolSessions();
 
 		if (sessions == null || sessions.isEmpty()) {
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 032e013eb..171c39d6a 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -130,22 +130,22 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 	
 	@Override
-	public final List<Session> getPublicPoolSessions() {
+	public final Map<String, ArrayList<Session>> getPublicPoolSessions() {
+		Map<String, ArrayList<Session>> sessionMap = new HashMap<String, ArrayList<Session>>();
 		final NovaView view = new NovaView("session/public_pool_by_id");
-
+		view.setGroup(true);
 		final ViewResults sessions = getDatabase().view(view);
 
-		final List<Session> result = new ArrayList<Session>();
-		
-		for (final Document d : sessions.getResults()) {
-			final Session session = (Session) JSONObject.toBean(
-					d.getJSONObject().getJSONObject("value"),
-					Session.class
-					);
-			//session.set_id(d.getId());
-			result.add(session);
+		//final List<Session> result = new ArrayList<Session>();
+		Collection<Session> result = null;
+		for (Document d : sessions.getResults()) {
+			final JSONArray jsonSessions = d.getJSONObject().getJSONArray("value");
+			
+			sessionMap.put(
+					d.getJSONObject().getString("key"),
+					new ArrayList(JSONArray.toCollection(jsonSessions, Session.class)));
 		}
-		return result;
+		return sessionMap;
 	}
 	
 	@Override
@@ -337,6 +337,7 @@ public class CouchDBDao implements IDatabaseDao {
 	@Override
 	public final Session saveSession(final User user, final Session session) {
 		final Document sessionDocument = new Document();
+
 		sessionDocument.put("type", "session");
 		sessionDocument.put("name", session.getName());
 		sessionDocument.put("shortName", session.getShortName());
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 54083b3b2..bfb1502a7 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -20,7 +20,9 @@
 package de.thm.arsnova.dao;
 
 import java.util.AbstractMap.SimpleEntry;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.Answer;
@@ -40,7 +42,7 @@ public interface IDatabaseDao {
 
 	List<Session> getMySessions(User user);
 	
-	List<Session> getPublicPoolSessions();
+	Map<String, ArrayList<Session>> getPublicPoolSessions();
 
 	Session saveSession(User user, Session session);
 
diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index 700e36786..1cf5b978b 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -20,7 +20,9 @@
 package de.thm.arsnova.services;
 
 import java.util.AbstractMap.SimpleEntry;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
 import de.thm.arsnova.connector.model.Course;
@@ -38,7 +40,7 @@ public interface ISessionService {
 
 	List<Session> getMySessions();
 	
-	List<Session> getPublicPoolSessions();
+	Map<String, ArrayList<Session>> getPublicPoolSessions();
 
 	List<Session> getMyVisitedSessions();
 
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index f3ee451ae..1f87b7db8 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -21,8 +21,10 @@ package de.thm.arsnova.services;
 
 import java.io.Serializable;
 import java.util.AbstractMap.SimpleEntry;
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -156,7 +158,7 @@ public class SessionService implements ISessionService {
 	
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public final List<Session> getPublicPoolSessions() {
+	public final Map<String, ArrayList<Session>> getPublicPoolSessions() {
 		return databaseDao.getPublicPoolSessions();
 	}
 
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index eec8823cd..08349c919 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -195,7 +195,7 @@ public class StubDatabaseDao implements IDatabaseDao {
 	}
 	
 	@Override
-	public List<Session> getPublicPoolSessions() {
+	public Map<String, ArrayList<Session>> getPublicPoolSessions() {
 		// TODO Auto-generated method stub
 		return null;
 	}
-- 
GitLab