From dd2edcf266d85b3a11e69d88ed4d319a8ae08b80 Mon Sep 17 00:00:00 2001
From: Julian Hochstetter <julian.hochstetter@mni.thm.de>
Date: Tue, 16 Oct 2012 20:51:33 +0200
Subject: [PATCH] Task #4029: add optional sort paramter to
 /getSkillQuestions/{sessionkey}, by default sort by subject but if
 getSkillQuestions/{sessionkey}?sort=text the result will be sorted by subject
 and text

---
 .../java/de/thm/arsnova/SessionController.java     |  5 +++--
 src/main/java/de/thm/arsnova/dao/CouchDBDao.java   | 14 +++++++++++---
 src/main/java/de/thm/arsnova/dao/IDatabaseDao.java |  2 +-
 .../de/thm/arsnova/services/ISessionService.java   |  2 +-
 .../de/thm/arsnova/services/SessionService.java    |  4 ++--
 5 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/SessionController.java b/src/main/java/de/thm/arsnova/SessionController.java
index 605753daa..11383ca6f 100644
--- a/src/main/java/de/thm/arsnova/SessionController.java
+++ b/src/main/java/de/thm/arsnova/SessionController.java
@@ -35,6 +35,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 de.thm.arsnova.entities.Session;
@@ -111,8 +112,8 @@ public class SessionController {
 	
 	@RequestMapping(value="/getSkillQuestions/{sessionkey}", method=RequestMethod.GET)
 	@ResponseBody
-	public List<Question> getSkillQuestions(@PathVariable String sessionkey, HttpServletResponse response) {
-		List<Question> questions = sessionService.getSkillQuestions(sessionkey);
+	public List<Question> getSkillQuestions(@PathVariable String sessionkey, @RequestParam(value="sort", required=false) String sort, HttpServletResponse response) {
+		List<Question> questions = sessionService.getSkillQuestions(sessionkey, sort);
 		if(questions == null || questions.isEmpty()) {
 			response.setStatus(HttpStatus.NOT_FOUND.value());
 			return null;
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 6b34e07df..da671be68 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -186,14 +186,22 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 	
 	@Override
-	public List<Question> getSkillQuestions(String session) {		
+	public List<Question> getSkillQuestions(String session, String sort) {
+		String viewName = "";
+		if(sort != null && sort.equals("text")) {
+			viewName = "skill_question/by_session_sorted_by_subject_and_text";
+		} else {
+			viewName = "skill_question/by_session";
+		}
 		try {
-			View view = new View("skill_question/by_session");
+			View view = new View(viewName);
 			view.setStartKey("[" + URLEncoder.encode("\"" + session + "\"", "UTF-8") + "]");
 			view.setEndKey("[" + URLEncoder.encode("\"" + session + "\",{}", "UTF-8") + "]");
 
 			ViewResults questions = this.getDatabase().view(view);
-	
+			if(questions == null || questions.isEmpty()) {
+				return null;
+			}
 			List<Question> result = new ArrayList<Question>();
 			
 			MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index eed604f2c..8cd6eb1e0 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -37,5 +37,5 @@ public interface IDatabaseDao {
 	public boolean sessionKeyAvailable(String keyword);
 	
 	public boolean saveQuestion(Session session, Question question);
-	List<Question> getSkillQuestions(String session);
+	List<Question> getSkillQuestions(String session, String sort);
 }
\ No newline at end of file
diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index c367f3756..d56b3051f 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -45,5 +45,5 @@ public interface ISessionService {
 	
 	public List<Session> getMySessions(String username);
 	public boolean saveQuestion(Question question);
-	public List<Question> getSkillQuestions(String sessionkey);
+	public List<Question> getSkillQuestions(String sessionkey, String sort);
 }
\ 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 628590cca..4dfaf0c2a 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -77,8 +77,8 @@ public class SessionService implements ISessionService {
 	}
 
 	@Override
-	public List<Question> getSkillQuestions(String sessionkey) {
-		return databaseDao.getSkillQuestions(sessionkey);
+	public List<Question> getSkillQuestions(String sessionkey, String sort) {
+		return databaseDao.getSkillQuestions(sessionkey, sort);
 	}
 	
 	@Override
-- 
GitLab