From 49569a793e2171b8d227c21709f081172aa3b6f0 Mon Sep 17 00:00:00 2001
From: Felix Schmidt <felix.schmidt@mni.thm.de>
Date: Thu, 15 Jan 2015 17:08:44 +0100
Subject: [PATCH] Implemented methods to get public pool sessions for the
 current user.

---
 .../arsnova/controller/SessionController.java |  6 ++++-
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 22 +++++++++++++++++++
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  2 ++
 .../thm/arsnova/services/ISessionService.java |  2 ++
 .../thm/arsnova/services/SessionService.java  |  6 +++++
 .../de/thm/arsnova/dao/StubDatabaseDao.java   |  6 +++++
 6 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index 92d64fb2b..c0bb0e8d0 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -194,10 +194,14 @@ public class SessionController extends AbstractController {
 
 	@RequestMapping(value = "/publicpool", method = RequestMethod.GET)
 	public final List<Session> getPublicPoolSessions(
+			@RequestParam(value = "myonly", defaultValue = "false") final boolean myOnly,
 			final HttpServletResponse response
 			) {
 		List<Session> sessions;
-		sessions = sessionService.getPublicPoolSessions();
+		if (!myOnly)
+			sessions = sessionService.getPublicPoolSessions();
+		else
+			sessions = sessionService.getMyPublicPoolSessions();
 
 		if (sessions == null || sessions.isEmpty()) {
 			response.setStatus(HttpServletResponse.SC_NO_CONTENT);
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 8e6a06161..25e78b55b 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -148,6 +148,28 @@ public class CouchDBDao implements IDatabaseDao {
 		return result;
 	}
 	
+	@Override
+	public final List<Session> getMyPublicPoolSessions(final User user) {
+		final NovaView view = new NovaView("session/public_pool_by_creator");
+		view.setStartKeyArray(user.getUsername());
+		view.setEndKeyArray(user.getUsername(), "{}");
+		
+		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.setCreator(d.getJSONObject().getJSONArray("key").getString(0));
+			session.setName(d.getJSONObject().getJSONArray("key").getString(1));
+			session.set_id(d.getId());
+			result.add(session);
+		}
+		return result;
+	}
+	
 	@Override
 	public final List<SessionInfo> getMySessionsInfo(final User user) {
 		final List<Session> sessions = this.getMySessions(user);
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index b0cada556..37081dc92 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -43,6 +43,8 @@ public interface IDatabaseDao {
 	List<Session> getMySessions(User user);
 	
 	List<Session> getPublicPoolSessions();
+	
+	List<Session> getMyPublicPoolSessions(User user);
 
 	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 37672066a..108a8ff90 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -41,6 +41,8 @@ public interface ISessionService {
 	List<Session> getMySessions();
 	
 	List<Session> getPublicPoolSessions();
+	
+	List<Session> getMyPublicPoolSessions();
 
 	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 7d749784e..dd02f5303 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -172,6 +172,12 @@ public class SessionService implements ISessionService {
 	public final List<Session> getPublicPoolSessions() {
 		return databaseDao.getPublicPoolSessions();
 	}
+	
+	@Override
+	@PreAuthorize("isAuthenticated()")
+	public final List<Session> getMyPublicPoolSessions() {
+		return databaseDao.getMyPublicPoolSessions(userService.getCurrentUser());
+	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index eec8823cd..cd89e6a55 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -199,6 +199,12 @@ public class StubDatabaseDao implements IDatabaseDao {
 		// TODO Auto-generated method stub
 		return null;
 	}
+	
+	@Override
+	public List<Session> getMyPublicPoolSessions(User user) {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
 	@Override
 	public LoggedIn registerAsOnlineUser(User u, Session s) {
-- 
GitLab