From 8da9a781e27dbed61d7e09516090e96250fad818 Mon Sep 17 00:00:00 2001
From: Julian Hochstetter <julian.hochstetter@mni.thm.de>
Date: Thu, 1 Nov 2012 12:19:08 +0100
Subject: [PATCH] Task #4033: countFeedbackQuestions

---
 .../controller/QuestionController.java        | 10 ++++++--
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 25 +++++++++++++++++++
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  2 ++
 .../arsnova/services/IQuestionService.java    |  2 ++
 .../thm/arsnova/services/QuestionService.java |  7 ++++++
 .../de/thm/arsnova/dao/StubDatabaseDao.java   |  6 +++++
 6 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/controller/QuestionController.java b/src/main/java/de/thm/arsnova/controller/QuestionController.java
index d1cb3a65..d6941449 100644
--- a/src/main/java/de/thm/arsnova/controller/QuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/QuestionController.java
@@ -248,7 +248,13 @@ public class QuestionController extends AbstractController {
 		return questionService.getTotalAnswerCount(sessionKey);
 	}
 	
-	
-	
+	@RequestMapping(value = "/session/{sessionKey}/interposedcount", method = RequestMethod.GET)
+	@ResponseBody
+	public final int getInterposedCount(
+			@PathVariable final String sessionKey,
+			final HttpServletResponse response
+	) {
+		return questionService.getInterposedCount(sessionKey);
+	}
 
 }
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index e3163bd7..2955b161 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -954,6 +954,31 @@ public class CouchDBDao implements IDatabaseDao {
 			View view = new View("skill_question/count_answers_by_session");
 			view.setKey(URLEncoder.encode("\"" + s.get_id() + "\"", "UTF-8"));
 			ViewResults results = this.getDatabase().view(view);
+			if(results.size() == 0) {
+				return 0;
+			}
+			return results.getJSONArray("rows").optJSONObject(0).optInt("value");
+		} catch (UnsupportedEncodingException e) {
+			LOGGER.error("Error while retrieving total answer count", e);
+		}
+		return 0;
+	}
+	
+	@Override
+	public int getInterposedCount(String sessionKey) {
+		Session s = this.getSessionFromKeyword(sessionKey);
+		if (s == null) {
+			throw new NotFoundException();
+		}
+
+		try {
+			View view = new View("interposed_question/count_by_session");
+			view.setKey(URLEncoder.encode("\"" + s.get_id() + "\"", "UTF-8"));
+			view.setGroup(true);
+			ViewResults results = this.getDatabase().view(view);
+			if(results.size() == 0 || results.getResults().size() == 0) {
+				return 0;
+			}
 			return results.getJSONArray("rows").optJSONObject(0).optInt("value");
 		} catch (UnsupportedEncodingException e) {
 			LOGGER.error("Error while retrieving total answer count", e);
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 277a29ab..ac8d9b6e 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -78,4 +78,6 @@ public interface IDatabaseDao {
 	List<Answer> getMyAnswers(String sessionKey);
 
 	int getTotalAnswerCount(String sessionKey);
+
+	int getInterposedCount(String sessionKey);
 }
diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index eb54e0ed..748d23f2 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -50,4 +50,6 @@ public interface IQuestionService {
 	List<Answer> getMytAnswers(String sessionKey);
 
 	int getTotalAnswerCount(String sessionKey);
+
+	int getInterposedCount(String sessionKey);
 }
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index f7c5e12a..172a719c 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -126,7 +126,14 @@ public class QuestionService implements IQuestionService {
 	}
 	
 	@Override
+	@Authenticated
 	public int getTotalAnswerCount(String sessionKey) {
 		return databaseDao.getTotalAnswerCount(sessionKey);
 	}
+	
+	@Override
+	@Authenticated
+	public int getInterposedCount(String sessionKey) {
+		return databaseDao.getInterposedCount(sessionKey);
+	}
 }
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index a0c6e100..b84732a5 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -251,5 +251,11 @@ public class StubDatabaseDao implements IDatabaseDao {
 		// TODO Auto-generated method stub
 		return 0;
 	}
+	
+	@Override
+	public int getInterposedCount(String sessionKey) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
 
 }
-- 
GitLab