From a3511aede78dddd604af2be546f0eeec99dedeaa Mon Sep 17 00:00:00 2001
From: Julian Hochstetter <julian.hochstetter@mni.thm.de>
Date: Tue, 16 Oct 2012 10:42:28 +0200
Subject: [PATCH] Task #4026: getMySessions server implementation

---
 .../de/thm/arsnova/SessionController.java     | 17 +++++++++++++++++
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 19 +++++++++++++++++++
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  3 +++
 .../thm/arsnova/services/ISessionService.java |  1 +
 .../thm/arsnova/services/SessionService.java  |  4 ++++
 5 files changed, 44 insertions(+)

diff --git a/src/main/java/de/thm/arsnova/SessionController.java b/src/main/java/de/thm/arsnova/SessionController.java
index b617a3c96..e283957c7 100644
--- a/src/main/java/de/thm/arsnova/SessionController.java
+++ b/src/main/java/de/thm/arsnova/SessionController.java
@@ -18,6 +18,7 @@
  */
 package de.thm.arsnova;
 
+import java.util.List;
 import java.util.UUID;
 
 import javax.servlet.http.HttpServletResponse;
@@ -91,6 +92,22 @@ public class SessionController {
 		return null;
 	}
 	
+	@RequestMapping(value="/mySessions", method=RequestMethod.GET)
+	@ResponseBody
+	public List<Session> getMySession(HttpServletResponse response) {
+		String username = userService.getUser(SecurityContextHolder.getContext().getAuthentication()).getUsername();
+		if(username == null) {
+			response.setStatus(HttpStatus.NOT_FOUND.value());
+			return null;
+		}
+		List<Session> sessions = sessionService.getMySessions(username);
+		if (sessions == null || sessions.isEmpty()) {
+			response.setStatus(HttpStatus.NOT_FOUND.value());
+			return null;
+		}
+		return sessions;
+	}
+	
 	@RequestMapping(value="/socketurl", method=RequestMethod.GET)
 	@ResponseBody
 	public String getSocketUrl() {
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 65772653a..d90ee94aa 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -158,6 +158,25 @@ public class CouchDBDao implements IDatabaseDao {
 		return null;
 	}
 	
+	@Override
+	public List<Session> getMySessions(String username) {
+		try {
+			View view = new View("session/by_creator");
+			view.setStartKey("[" + URLEncoder.encode("\"" + username + "\"", "UTF-8") + "]");
+			view.setEndKey("[" + URLEncoder.encode("\"" + username + "\",{}", "UTF-8") + "]");
+
+			ViewResults sessions = this.getDatabase().view(view);
+	
+			List<Session> result = new ArrayList<Session>();
+			for (Document d : sessions.getResults()) {
+				result.add((Session) JSONObject.toBean(d.getJSONObject().getJSONObject("value"), Session.class));
+			}
+			return result;
+		} catch (UnsupportedEncodingException e) {
+			return null;
+		}
+	}
+	
 	@Override
 	public Session getSessionFromKeyword(String keyword) {
 		try {
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 84bd0a7b8..d42be57a1 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -19,6 +19,8 @@
 
 package de.thm.arsnova.dao;
 
+import java.util.List;
+
 import de.thm.arsnova.entities.Feedback;
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.User;
@@ -28,6 +30,7 @@ public interface IDatabaseDao {
 	public void cleanFeedbackVotes(int cleanupFeedbackDelay);
 	public Session getSessionFromKeyword(String keyword);
 	public Session getSession(String keyword);
+	public List<Session> getMySessions(String username);
 	public Session saveSession(Session session);
 	public Feedback getFeedback(String keyword);
 	public boolean saveFeedback(String keyword, int value, User user);
diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index 0dfb1c8de..12382d6c8 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -44,5 +44,6 @@ public interface ISessionService {
 	public List<String> getUsersInSession(String keyword);
 	public void broadcastFeedbackChanges(Map<String, Set<String>> affectedUsers, Set<String> allAffectedSessions);
 	
+	public List<Session> getMySessions(String username);
 	public boolean saveQuestion(Question question);
 }
\ No newline at end of file
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index e169cb009..9a5c774c4 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -71,6 +71,10 @@ public class SessionService implements ISessionService {
 	public Session getSession(String keyword) {
 		return databaseDao.getSession(keyword);
 	}
+	@Override
+	public List<Session> getMySessions(String username) {
+		return databaseDao.getMySessions(username);
+	}
 
 	@Override
 	public Session saveSession(Session session) {
-- 
GitLab