From 1cd4807beed5fec71760a4193d9d4b7971879158 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=20K=C3=A4sler?= <tom.kaesler@mni.thm.de>
Date: Tue, 17 Mar 2015 16:47:40 +0100
Subject: [PATCH] #15391 add null-query to not get nullpointerexception and
 rework getQuestionBySortOrder and some minor bugs

---
 .../java/de/thm/arsnova/dao/CouchDBDao.java   |  8 ++--
 .../thm/arsnova/services/QuestionService.java | 44 +++++++++++++------
 2 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 46d51d4d..4663c229 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -1943,7 +1943,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		Set<String> uniqueSubjects = new HashSet();
 		
 		for (final Document d : results.getResults()) {
-			uniqueSubjects.add(d.getJSONObject().getJSONArray("value").getString(0));
+			uniqueSubjects.add(d.getString("value"));
 		}
 		
 		List<String> uniqueSubjectsList = new ArrayList(uniqueSubjects);
@@ -1961,17 +1961,17 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			viewString = "skill_question/preparation_question_ids_by_session_and_subject";
 		}
 		NovaView view = new NovaView(viewString);
-		view.setKey(session.get_id());
+		view.setKey(session.get_id(), subject);
 		ViewResults results = this.getDatabase().view(view);
 
-		if (results.getResults().isEmpty()) {
+		if (results.getJSONArray("rows").optJSONObject(0) == null) {
 			return null;
 		}
 		
 		List<String> qids = new ArrayList();
 		
 		for (final Document d : results.getResults()) {
-			final String s = d.getJSONObject().getJSONArray("value").getString(0);
+			final String s = d.getString("value");
 			qids.add(s);
 			/*final Answer a = new Answer();
 			a.setAnswerCount(d.getInt("value"));
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index 6fdd0d0f..f75086ac 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -839,20 +839,30 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
         return sortOrder;
     }
     
-    public List<Question> getQuestionsBySortOrder(SortOrder sortOrder, boolean onlyActive) {
-        List<Question> questions = new ArrayList<Question>();
-        List<String> questionIds = sortOrder.getSortOrder();
-        for (String t : questionIds) {
-            Question tempQuestion = getQuestion(t);
-            if (onlyActive) {
-                if (tempQuestion.isActive()) {
-                    questions.add(tempQuestion);
-                }
-            }
-            else {
-                questions.add(tempQuestion);
-            }
-        }
+    public List<Question> getQuestionsBySortOrder(SortOrder subjectSortOrder, boolean onlyActive) {
+		if (subjectSortOrder.getSortOrder() == null) {
+			return null;
+		}
+		if (subjectSortOrder.getSortOrder().isEmpty()) {
+			return null;
+		}
+		List<Question> questions = new ArrayList<Question>();
+		List<String> subjects = subjectSortOrder.getSortOrder();
+		for (String sub : subjects) {
+			SortOrder questionSortOrder = databaseDao.getSortOrder(subjectSortOrder.getSessionId(), subjectSortOrder.getQuestionVariant(), sub);
+			List<String> questionIds = questionSortOrder.getSortOrder();
+			for (String t : questionIds) {
+				Question tempQuestion = getQuestion(t);
+				if (onlyActive) {
+					if (tempQuestion.isActive()) {
+						questions.add(tempQuestion);
+					}
+				}
+				else {
+					questions.add(tempQuestion);
+				}
+			}
+		}
         return questions;
     }
 	
@@ -884,6 +894,12 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 	}
                                    
     public SortOrder alphabeticalSort(SortOrder sortOrder){
+		if (sortOrder.getSortOrder() == null) {
+			return null;
+		}
+		if (sortOrder.getSortOrder().isEmpty()) {
+			return null;
+		}
 		if ("".equals(sortOrder.getSubject())) {
 			List<String> subjects = sortOrder.getSortOrder();
 			Collections.sort(subjects);
-- 
GitLab