From 4188742aa2b8812fe9bbb4b0dc91a4665d666990 Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <daniel.gerhardt@mni.thm.de>
Date: Mon, 18 Feb 2013 10:31:57 +0100
Subject: [PATCH] Changed user parameter type in getMyVisitedSessions from
 String to User. API changes: - /session/visitedsessions =>
 /session/?filter=visited - /session/mysessions => /session/?filter=owned
 Added changed routes to LegacyController.

---
 .../arsnova/controller/LegacyController.java  | 33 ++++++++++---
 .../arsnova/controller/SessionController.java | 47 +++++++++++--------
 .../java/de/thm/arsnova/dao/CouchDBDao.java   |  6 +--
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  2 +-
 .../thm/arsnova/services/ISessionService.java |  2 +-
 .../thm/arsnova/services/SessionService.java  |  4 +-
 6 files changed, 60 insertions(+), 34 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/controller/LegacyController.java b/src/main/java/de/thm/arsnova/controller/LegacyController.java
index 6950c2cd3..5a7a9b8ec 100644
--- a/src/main/java/de/thm/arsnova/controller/LegacyController.java
+++ b/src/main/java/de/thm/arsnova/controller/LegacyController.java
@@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 
 @Controller
 public class LegacyController extends AbstractController {
@@ -33,6 +34,24 @@ public class LegacyController extends AbstractController {
 
 	/* specific routes */
 
+	@RequestMapping(value = "/session/mysessions", method = RequestMethod.GET)
+	public final String redirectSessionMy(
+			final HttpServletResponse response
+	) {
+		response.addHeader("X-Deprecated-API", "1");
+		
+		return "forward:/session/?filter=owned";
+	}
+
+	@RequestMapping(value = "/session/visitedsessions", method = RequestMethod.GET)
+	public final String redirectSessionVisited(
+			final HttpServletResponse response
+	) {
+		response.addHeader("X-Deprecated-API", "1");
+		
+		return "forward:/session/?filter=visited";
+	}
+
 	@RequestMapping(value = "/session/{sessionKey}/question")
 	public final String redirectQuestionByLecturer(
 			@PathVariable final String sessionKey,
@@ -42,7 +61,7 @@ public class LegacyController extends AbstractController {
 		return String.format("forward:/question/bylecturer/?sessionkey=%s", sessionKey);
 	}
 
-	@RequestMapping(value = "/session/{sessionKey}/skillquestions")
+	@RequestMapping(value = "/session/{sessionKey}/skillquestions", method = RequestMethod.GET)
 	public final String redirectQuestionByLecturerList(
 			@PathVariable final String sessionKey,
 			final HttpServletResponse response
@@ -51,7 +70,7 @@ public class LegacyController extends AbstractController {
 		return String.format("forward:/question/bylecturer/list?sessionkey=%s", sessionKey);
 	}
 
-	@RequestMapping(value = "/session/{sessionKey}/skillquestioncount")
+	@RequestMapping(value = "/session/{sessionKey}/skillquestioncount", method = RequestMethod.GET)
 	public final String redirectQuestionByLecturerCount(
 			@PathVariable final String sessionKey,
 			final HttpServletResponse response
@@ -60,7 +79,7 @@ public class LegacyController extends AbstractController {
 		return String.format("forward:/question/bylecturer/count?sessionkey=%s", sessionKey);
 	}
 
-	@RequestMapping(value = "/session/{sessionKey}/answercount")
+	@RequestMapping(value = "/session/{sessionKey}/answercount", method = RequestMethod.GET)
 	public final String redirectQuestionByLecturerAnswerCount(
 			@PathVariable final String sessionKey,
 			final HttpServletResponse response
@@ -69,7 +88,7 @@ public class LegacyController extends AbstractController {
 		return String.format("forward:/question/bylecturer/answercount?sessionkey=%s", sessionKey);
 	}
 
-	@RequestMapping(value = "/session/{sessionKey}/unanswered")
+	@RequestMapping(value = "/session/{sessionKey}/unanswered", method = RequestMethod.GET)
 	public final String redirectQuestionByLecturerUnnsweredCount(
 			@PathVariable final String sessionKey,
 			final HttpServletResponse response
@@ -78,7 +97,7 @@ public class LegacyController extends AbstractController {
 		return String.format("forward:/question/bylecturer/answercount?sessionkey=%s", sessionKey);
 	}
 
-	@RequestMapping(value = "/session/{sessionKey}/myanswers")
+	@RequestMapping(value = "/session/{sessionKey}/myanswers", method = RequestMethod.GET)
 	public final String redirectQuestionByLecturerMyAnswers(
 			@PathVariable final String sessionKey,
 			final HttpServletResponse response
@@ -96,7 +115,7 @@ public class LegacyController extends AbstractController {
 		return String.format("forward:/question/byaudience/?sessionkey=%s", sessionKey);
 	}
 
-	@RequestMapping(value = "/session/{sessionKey}/interposedcount")
+	@RequestMapping(value = "/session/{sessionKey}/interposedcount", method = RequestMethod.GET)
 	public final String redirectQuestionByAudienceCount(
 			@PathVariable final String sessionKey,
 			final HttpServletResponse response
@@ -105,7 +124,7 @@ public class LegacyController extends AbstractController {
 		return String.format("forward:/question/byaudience/count?sessionkey=%s", sessionKey);
 	}
 
-	@RequestMapping(value = "/session/{sessionKey}/interposedreadingcount")
+	@RequestMapping(value = "/session/{sessionKey}/interposedreadingcount", method = RequestMethod.GET)
 	public final String redirectQuestionByAudienceReadCount(
 			@PathVariable final String sessionKey,
 			final HttpServletResponse response
diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index 641d6c21d..5120bd8ef 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -31,6 +31,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
@@ -43,6 +44,7 @@ import de.thm.arsnova.services.ISessionService;
 import de.thm.arsnova.services.IUserService;
 
 @Controller
+@RequestMapping("/session")
 public class SessionController extends AbstractController {
 
 	public static final Logger LOGGER = LoggerFactory.getLogger(SessionController.class);
@@ -53,13 +55,13 @@ public class SessionController extends AbstractController {
 	@Autowired
 	private IUserService userService;
 
-	@RequestMapping(value = "/session/{sessionkey}", method = RequestMethod.GET)
+	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.GET)
 	@ResponseBody
 	public final Session joinSession(@PathVariable final String sessionkey) {
 		return sessionService.joinSession(sessionkey);
 	}
 
-	@RequestMapping(value = "/session/{sessionkey}/online", method = RequestMethod.POST)
+	@RequestMapping(value = "/{sessionkey}/online", method = RequestMethod.POST)
 	@ResponseBody
 	@ResponseStatus(HttpStatus.CREATED)
 	public final LoggedIn registerAsOnlineUser(
@@ -75,7 +77,7 @@ public class SessionController extends AbstractController {
 		throw new RuntimeException();
 	}
 
-	@RequestMapping(value = "/session/{sessionkey}/activeusercount", method = RequestMethod.GET)
+	@RequestMapping(value = "/{sessionkey}/activeusercount", method = RequestMethod.GET)
 	@ResponseBody
 	public final int countActiveUsers(
 			@PathVariable final String sessionkey,
@@ -84,7 +86,7 @@ public class SessionController extends AbstractController {
 		return sessionService.countActiveUsers(sessionkey);
 	}
 
-	@RequestMapping(value = "/session", method = RequestMethod.POST)
+	@RequestMapping(value = "/", method = RequestMethod.POST)
 	@ResponseBody
 	@ResponseStatus(HttpStatus.CREATED)
 	public final Session postNewSession(@RequestBody final Session session, final HttpServletResponse response) {
@@ -97,27 +99,32 @@ public class SessionController extends AbstractController {
 		return null;
 	}
 
-	@RequestMapping(value = { "/mySessions", "/session/mysessions" }, method = RequestMethod.GET)
+	@RequestMapping(value = "/", method = RequestMethod.GET)
 	@ResponseBody
-	public final List<Session> getMySession(final HttpServletResponse response) {
-		String username = userService.getCurrentUser().getUsername();
-		if (username == null) {
-			throw new NotFoundException();
+	public final List<Session> getSessions(
+			@RequestParam final String filter,
+			final HttpServletResponse response
+	) {
+		User user = userService.getCurrentUser();
+		List<Session> sessions = null;
+		
+		/* TODO: Could @Authorized annotation be used instead of this check? */
+		if (null == user) {
+			response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+			
+			return null;
 		}
-		List<Session> sessions = sessionService.getMySessions(username);
-		if (sessions == null || sessions.isEmpty()) {
-			throw new NotFoundException();
+		
+		if ("owned".equals(filter)) {
+			sessions = sessionService.getMySessions(user);
+		} else if ("visited".equals(filter)) {
+			sessions = sessionService.getMyVisitedSessions(userService.getCurrentUser());
 		}
-		return sessions;
-	}
-
-	@RequestMapping(value = "/session/visitedsessions", method = RequestMethod.GET)
-	@ResponseBody
-	public final List<Session> getMyVisitedSession(final HttpServletResponse response) {
-		List<Session> sessions = sessionService.getMyVisitedSessions(userService.getCurrentUser());
+		
 		if (sessions == null || sessions.isEmpty()) {
-			throw new NoContentException();
+			response.setStatus(HttpServletResponse.SC_NO_CONTENT);
 		}
+		
 		return sessions;
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 45319bdda..cbefa4fc1 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -180,11 +180,11 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final List<Session> getMySessions(final String username) {
+	public final List<Session> getMySessions(final User user) {
 		try {
 			View view = new View("session/by_creator");
-			view.setStartKey("[" + URLEncoder.encode("\"" + username + "\"", "UTF-8") + "]");
-			view.setEndKey("[" + URLEncoder.encode("\"" + username + "\",{}", "UTF-8") + "]");
+			view.setStartKey("[" + URLEncoder.encode("\"" + user.getUsername() + "\"", "UTF-8") + "]");
+			view.setEndKey("[" + URLEncoder.encode("\"" + user.getUsername() + "\",{}", "UTF-8") + "]");
 
 			ViewResults sessions = this.getDatabase().view(view);
 
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 2617f6921..5df29213d 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -39,7 +39,7 @@ public interface IDatabaseDao {
 
 	Session getSession(String keyword);
 
-	List<Session> getMySessions(String username);
+	List<Session> getMySessions(User user);
 
 	Session saveSession(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 7175464fa..e1ad7d3cb 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -34,7 +34,7 @@ public interface ISessionService {
 
 	String generateKeyword();
 
-	List<Session> getMySessions(String username);
+	List<Session> getMySessions(User user);
 
 	List<Session> getMyVisitedSessions(User currentUser);
 
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index 23f6f881b..d74f164f3 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -53,8 +53,8 @@ public class SessionService implements ISessionService {
 	}
 
 	@Override
-	public final List<Session> getMySessions(final String username) {
-		return databaseDao.getMySessions(username);
+	public final List<Session> getMySessions(final User user) {
+		return databaseDao.getMySessions(user);
 	}
 
 	@Override
-- 
GitLab