From 95780f123b99ccc6e9d13d8a9b2b333fbdf057c7 Mon Sep 17 00:00:00 2001
From: agrt56 <andreas.gaertner@mni.thm.de>
Date: Sat, 2 May 2015 14:01:15 +0200
Subject: [PATCH] Fixed Task #15762: Update of answer and abstention count via
 socket.

---
 .../arsnova/services/IQuestionService.java    |  4 +--
 .../thm/arsnova/services/QuestionService.java | 29 ++++++++++---------
 .../arsnova/socket/ARSnovaSocketIOServer.java |  3 +-
 3 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index 6b5efb26c..ac81c2548 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.services;
 
-import java.util.AbstractMap.SimpleEntry;
 import java.util.List;
+import java.util.Map;
 
 import de.thm.arsnova.entities.Answer;
 import de.thm.arsnova.entities.InterposedQuestion;
@@ -104,7 +104,7 @@ public interface IQuestionService {
 
 	int getPreparationQuestionCount(String sessionkey);
 
-	SimpleEntry<String, List<Integer>> getAnswerAndAbstentionCountByQuestion(String questionid);
+	Map<String, Object> getAnswerAndAbstentionCountInternal(String questionid);
 
 	int countLectureQuestionAnswers(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 066e83095..d0648af7b 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -17,8 +17,6 @@
  */
 package de.thm.arsnova.services;
 
-import java.util.AbstractMap;
-import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -767,17 +765,6 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		return databaseDao.getPreparationQuestionCount(getSession(sessionkey));
 	}
 
-	@Override
-	@PreAuthorize("isAuthenticated()")
-	public SimpleEntry<String, List<Integer>> getAnswerAndAbstentionCountByQuestion(final String questionid) {
-		final List<Integer> countList = Arrays.asList(
-			getAnswerCount(questionid),
-			getAbstentionAnswerCount(questionid)
-		);
-
-		return new AbstractMap.SimpleEntry<String, List<Integer>>(questionid, countList);
-	}
-
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public int countLectureQuestionAnswers(final String sessionkey) {
@@ -793,6 +780,22 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		return databaseDao.countLectureQuestionAnswers(getSession(sessionkey));
 	}
 
+	@Override
+	public Map<String, Object> getAnswerAndAbstentionCountInternal(final String questionId) {
+		final Question question = getQuestion(questionId);
+		HashMap<String, Object> map = new HashMap<String, Object>();
+
+		if (question == null) {
+			return null;
+		}
+
+		map.put("_id", questionId);
+		map.put("answers", databaseDao.getAnswerCount(question, question.getPiRound()));
+		map.put("abstentions", databaseDao.getAbstentionAnswerCount(questionId));
+
+		return map;
+	}
+
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public int countPreparationQuestionAnswers(final String sessionkey) {
diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
index 613180b3c..6504f2ffb 100644
--- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
+++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
@@ -491,8 +491,9 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 	public void visit(NewAnswerEvent event) {
 		final String sessionKey = event.getSession().getKeyword();
 		this.reportAnswersToLecturerQuestionAvailable(event.getSession(), new Question(event.getQuestion()));
+		broadcastInSession(sessionKey, "countQuestionAnswersByQuestionId", questionService.getAnswerAndAbstentionCountInternal(event.getQuestion().get_id()));
+		
 		// TODO: These events are currently unused. Uncomment once the client does something with the data.
-		//broadcastInSession(sessionKey, "countQuestionAnswersByQuestion", questionService.getAnswerAndAbstentionCountByQuestion(event.getQuestion().get_id()));
 		//broadcastInSession(sessionKey, "countLectureQuestionAnswers", questionService.countLectureQuestionAnswersInternal(sessionKey));
 		//broadcastInSession(sessionKey, "countPreparationQuestionAnswers", questionService.countPreparationQuestionAnswersInternal(sessionKey));
 
-- 
GitLab