From 2f1d4eb8e94a35cae7859e40af866683176786f1 Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <daniel.gerhardt@mni.thm.de>
Date: Tue, 19 Feb 2013 17:08:27 +0100
Subject: [PATCH] API-Changes: /questionbylecturer/* =>
 [/session/{sessionKey}]/lecturerquestion/* /questionbyaudience/* =>
 [/session/{sessionKey}]/audiencequestion/*

---
 .../arsnova/controller/LegacyController.java  |  30 ++---
 .../QuestionByAudienceController.java         |   2 +-
 .../QuestionByLecturerController.java         |  19 +--
 .../arsnova/controller/SessionController.java | 108 +++++++++++++++++-
 4 files changed, 131 insertions(+), 28 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/controller/LegacyController.java b/src/main/java/de/thm/arsnova/controller/LegacyController.java
index 5a7a9b8e..fb9556aa 100644
--- a/src/main/java/de/thm/arsnova/controller/LegacyController.java
+++ b/src/main/java/de/thm/arsnova/controller/LegacyController.java
@@ -40,7 +40,7 @@ public class LegacyController extends AbstractController {
 	) {
 		response.addHeader("X-Deprecated-API", "1");
 		
-		return "forward:/session/?filter=owned";
+		return "forward:/session/?ownedonly=true";
 	}
 
 	@RequestMapping(value = "/session/visitedsessions", method = RequestMethod.GET)
@@ -49,7 +49,7 @@ public class LegacyController extends AbstractController {
 	) {
 		response.addHeader("X-Deprecated-API", "1");
 		
-		return "forward:/session/?filter=visited";
+		return "forward:/session/?visitedonly=true";
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/question")
@@ -58,7 +58,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/bylecturer/?sessionkey=%s", sessionKey);
+		return String.format("forward:/lecturerquestion/?sessionkey=%s", sessionKey);
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/skillquestions", method = RequestMethod.GET)
@@ -67,7 +67,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/bylecturer/list?sessionkey=%s", sessionKey);
+		return String.format("forward:/lecturerquestion/?sessionkey=%s", sessionKey);
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/skillquestioncount", method = RequestMethod.GET)
@@ -76,7 +76,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/bylecturer/count?sessionkey=%s", sessionKey);
+		return String.format("forward:/lecturerquestion/count?sessionkey=%s", sessionKey);
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/answercount", method = RequestMethod.GET)
@@ -85,7 +85,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/bylecturer/answercount?sessionkey=%s", sessionKey);
+		return String.format("forward:/lecturerquestion/answercount?sessionkey=%s", sessionKey);
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/unanswered", method = RequestMethod.GET)
@@ -94,7 +94,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/bylecturer/answercount?sessionkey=%s", sessionKey);
+		return String.format("forward:/lecturerquestion/answercount?sessionkey=%s", sessionKey);
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/myanswers", method = RequestMethod.GET)
@@ -103,7 +103,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/bylecturer/myanswers?sessionkey=%s", sessionKey);
+		return String.format("forward:/lecturerquestion/myanswers?sessionkey=%s", sessionKey);
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/interposed")
@@ -112,7 +112,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/byaudience/?sessionkey=%s", sessionKey);
+		return String.format("forward:/audiencequestion/?sessionkey=%s", sessionKey);
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/interposedcount", method = RequestMethod.GET)
@@ -121,7 +121,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/byaudience/count?sessionkey=%s", sessionKey);
+		return String.format("forward:/audiencequestion/count?sessionkey=%s", sessionKey);
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/interposedreadingcount", method = RequestMethod.GET)
@@ -130,7 +130,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/byaudience/readcount?sessionkey=%s", sessionKey);
+		return String.format("forward:/audiencequestion/readcount?sessionkey=%s", sessionKey);
 	}
 
 	/* generalized routes */
@@ -142,7 +142,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/bylecturer/%s?sessionkey=%s", arg1, sessionKey);
+		return String.format("forward:/lecturerquestion/%s/?sessionkey=%s", arg1, sessionKey);
 	}
 
 	@RequestMapping(
@@ -155,7 +155,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/bylecturer/%s/%s?sessionkey=%s", arg1, arg2, sessionKey);
+		return String.format("forward:/lecturerquestion/%s/%s/?sessionkey=%s", arg1, arg2, sessionKey);
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/interposed/{arg1}")
@@ -165,7 +165,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/byaudience/%s?sessionkey=%s", arg1, sessionKey);
+		return String.format("forward:/audiencequestion/%s/?sessionkey=%s", arg1, sessionKey);
 	}
 
 	@RequestMapping(value = "/session/{sessionKey}/interposed/{arg1}/{arg2}")
@@ -176,7 +176,7 @@ public class LegacyController extends AbstractController {
 			final HttpServletResponse response
 	) {
 		response.addHeader("X-Deprecated-API", "1");
-		return String.format("forward:/question/byaudience/%s/%s?sessionkey=%s", arg1, arg2, sessionKey);
+		return String.format("forward:/audiencequestion/%s/%s/?sessionkey=%s", arg1, arg2, sessionKey);
 	}
 
 }
diff --git a/src/main/java/de/thm/arsnova/controller/QuestionByAudienceController.java b/src/main/java/de/thm/arsnova/controller/QuestionByAudienceController.java
index 98eb60d9..2490a062 100644
--- a/src/main/java/de/thm/arsnova/controller/QuestionByAudienceController.java
+++ b/src/main/java/de/thm/arsnova/controller/QuestionByAudienceController.java
@@ -42,7 +42,7 @@ import de.thm.arsnova.exceptions.PreconditionFailedException;
 import de.thm.arsnova.services.IQuestionService;
 
 @Controller
-@RequestMapping("/question/byaudience")
+@RequestMapping("/audiencequestion")
 public class QuestionByAudienceController extends AbstractController {
 
 	public static final Logger LOGGER = LoggerFactory.getLogger(QuestionByAudienceController.class);
diff --git a/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java b/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java
index 31fb13df..7a6c1be4 100644
--- a/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java
+++ b/src/main/java/de/thm/arsnova/controller/QuestionByLecturerController.java
@@ -44,7 +44,7 @@ import de.thm.arsnova.exceptions.NotFoundException;
 import de.thm.arsnova.services.IQuestionService;
 
 @Controller
-@RequestMapping("/question/bylecturer")
+@RequestMapping("/lecturerquestion")
 public class QuestionByLecturerController extends AbstractController {
 
 	public static final Logger LOGGER = LoggerFactory.getLogger(QuestionByLecturerController.class);
@@ -129,7 +129,7 @@ public class QuestionByLecturerController extends AbstractController {
 	}
 
 	@RequestMapping(
-			value = { "/list" },
+			value = { "/" },
 			method = RequestMethod.GET
 	)
 	@ResponseBody
@@ -139,7 +139,9 @@ public class QuestionByLecturerController extends AbstractController {
 	) {
 		List<Question> questions = questionService.getSkillQuestions(sessionkey);
 		if (questions == null || questions.isEmpty()) {
-			throw new NotFoundException();
+			response.setStatus(HttpStatus.NO_CONTENT.value());
+			
+			return null;
 		}
 		return questions;
 	}
@@ -150,6 +152,8 @@ public class QuestionByLecturerController extends AbstractController {
 		return questionService.getSkillQuestionCount(sessionkey);
 	}
 
+	/*
+	 * TODO: is this used anywhere?
 	@RequestMapping(value = "/ids", method = RequestMethod.GET)
 	@ResponseBody
 	public final List<String> getQuestionIds(
@@ -162,6 +166,7 @@ public class QuestionByLecturerController extends AbstractController {
 		}
 		return questions;
 	}
+	*/
 
 	@RequestMapping(value = "/{questionId}", method = RequestMethod.DELETE)
 	@ResponseBody
@@ -231,7 +236,7 @@ public class QuestionByLecturerController extends AbstractController {
 	 * @throws ForbiddenException
 	 *             if not logged in
 	 */
-	@RequestMapping(value = "/{questionId}/answers", method = RequestMethod.GET)
+	@RequestMapping(value = "/{questionId}/answer/", method = RequestMethod.GET)
 	@ResponseBody
 	public final List<Answer> getAnswers(
 			@PathVariable final String questionId,
@@ -244,7 +249,7 @@ public class QuestionByLecturerController extends AbstractController {
 		return answers;
 	}
 
-	@RequestMapping(value = "/{questionId}/answer", method = RequestMethod.POST)
+	@RequestMapping(value = "/{questionId}/answer/", method = RequestMethod.POST)
 	@ResponseBody
 	public final Answer saveAnswer(
 			@PathVariable final String questionId,
@@ -275,7 +280,7 @@ public class QuestionByLecturerController extends AbstractController {
 		questionService.deleteAnswer(questionId, answerId);
 	}
 
-	@RequestMapping(value = "/{questionId}/answers", method = RequestMethod.DELETE)
+	@RequestMapping(value = "/{questionId}/answer/", method = RequestMethod.DELETE)
 	@ResponseBody
 	public final void deleteAnswers(
 			@PathVariable final String questionId,
@@ -306,7 +311,7 @@ public class QuestionByLecturerController extends AbstractController {
 		return questionService.getAnswerCount(questionId);
 	}
 
-	@RequestMapping(value = "/{questionId}/freetextanswers", method = RequestMethod.GET)
+	@RequestMapping(value = "/{questionId}/freetextanswer/", method = RequestMethod.GET)
 	@ResponseBody
 	public final List<Answer> getFreetextAnswers(
 			@PathVariable final String questionId,
diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index 5120bd8e..60ff3f7b 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -38,8 +38,6 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 import de.thm.arsnova.entities.LoggedIn;
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.User;
-import de.thm.arsnova.exceptions.NoContentException;
-import de.thm.arsnova.exceptions.NotFoundException;
 import de.thm.arsnova.services.ISessionService;
 import de.thm.arsnova.services.IUserService;
 
@@ -102,7 +100,8 @@ public class SessionController extends AbstractController {
 	@RequestMapping(value = "/", method = RequestMethod.GET)
 	@ResponseBody
 	public final List<Session> getSessions(
-			@RequestParam final String filter,
+			@RequestParam(value = "ownedonly", defaultValue = "false") final boolean ownedOnly,
+			@RequestParam(value = "visitedonly", defaultValue = "false") final boolean visitedOnly,
 			final HttpServletResponse response
 	) {
 		User user = userService.getCurrentUser();
@@ -115,10 +114,15 @@ public class SessionController extends AbstractController {
 			return null;
 		}
 		
-		if ("owned".equals(filter)) {
+		/* TODO: implement all parameter combinations, implement use of user parameter */
+		if (ownedOnly && !visitedOnly) {
 			sessions = sessionService.getMySessions(user);
-		} else if ("visited".equals(filter)) {
+		} else if (visitedOnly && !ownedOnly) {
 			sessions = sessionService.getMyVisitedSessions(userService.getCurrentUser());
+		} else {
+			response.setStatus(HttpStatus.NOT_IMPLEMENTED.value());
+			
+			return null;
 		}
 		
 		if (sessions == null || sessions.isEmpty()) {
@@ -127,4 +131,98 @@ public class SessionController extends AbstractController {
 		
 		return sessions;
 	}
+	
+	/* internal redirections */
+
+	@RequestMapping(value = "/{sessionKey}/lecturerquestion")
+	public final String redirectLecturerQuestion(
+			@PathVariable final String sessionKey,
+			final HttpServletResponse response
+	) {
+		response.addHeader("X-Forwarded", "1");
+		
+		return String.format("forward:/lecturerquestion/?sessionkey=%s", sessionKey);
+	}
+
+	@RequestMapping(value = "/{sessionKey}/lecturerquestion/{arg1}")
+	public final String redirectLecturerQuestionWithOneArgument(
+			@PathVariable final String sessionKey,
+			@PathVariable final String arg1,
+			final HttpServletResponse response
+	) {
+		response.addHeader("X-Forwarded", "1");
+		
+		return String.format("forward:/lecturerquestion/%s/?sessionkey=%s", arg1, sessionKey);
+	}
+
+	@RequestMapping(value = "/{sessionKey}/lecturerquestion/{arg1}/{arg2}")
+	public final String redirectLecturerQuestionWithTwoArguments(
+			@PathVariable final String sessionKey,
+			@PathVariable final String arg1,
+			@PathVariable final String arg2,
+			final HttpServletResponse response
+	) {
+		response.addHeader("X-Forwarded", "1");
+		
+		return String.format("forward:/lecturerquestion/%s/%s/?sessionkey=%s", arg1, arg2, sessionKey);
+	}
+
+	@RequestMapping(value = "/{sessionKey}/lecturerquestion/{arg1}/{arg2}/{arg3}")
+	public final String redirectLecturerQuestionWithThreeArguments(
+			@PathVariable final String sessionKey,
+			@PathVariable final String arg1,
+			@PathVariable final String arg2,
+			@PathVariable final String arg3,
+			final HttpServletResponse response
+	) {
+		response.addHeader("X-Forwarded", "1");
+		
+		return String.format("forward:/lecturerquestion/%s/%s/%s/?sessionkey=%s", arg1, arg2, arg3, sessionKey);
+	}
+
+	@RequestMapping(value = "/{sessionKey}/audiencequestion")
+	public final String redirectAudienceQuestion(
+			@PathVariable final String sessionKey,
+			final HttpServletResponse response
+	) {
+		response.addHeader("X-Forwarded", "1");
+		
+		return String.format("forward:/audiencequestion/?sessionkey=%s", sessionKey);
+	}
+
+	@RequestMapping(value = "/{sessionKey}/audiencequestion/{arg1}")
+	public final String redirectAudienceQuestionWithOneArgument(
+			@PathVariable final String sessionKey,
+			@PathVariable final String arg1,
+			final HttpServletResponse response
+	) {
+		response.addHeader("X-Forwarded", "1");
+		
+		return String.format("forward:/audiencequestion/%s/?sessionkey=%s", arg1, sessionKey);
+	}
+
+	@RequestMapping(value = "/{sessionKey}/audiencequestion/{arg1}/{arg2}")
+	public final String redirectAudienceQuestionWithTwoArguments(
+			@PathVariable final String sessionKey,
+			@PathVariable final String arg1,
+			@PathVariable final String arg2,
+			final HttpServletResponse response
+	) {
+		response.addHeader("X-Forwarded", "1");
+		
+		return String.format("forward:/audiencequestion/%s/%s/?sessionkey=%s", arg1, arg2, sessionKey);
+	}
+
+	@RequestMapping(value = "/{sessionKey}/audiencequestion/{arg1}/{arg2}/{arg3}")
+	public final String redirectAudienceQuestionWithThreeArguments(
+			@PathVariable final String sessionKey,
+			@PathVariable final String arg1,
+			@PathVariable final String arg2,
+			@PathVariable final String arg3,
+			final HttpServletResponse response
+	) {
+		response.addHeader("X-Forwarded", "1");
+		
+		return String.format("forward:/audiencequestion/%s/%s/%s/?sessionkey=%s", arg1, arg2, arg3, sessionKey);
+	}
 }
-- 
GitLab