From 1a565bbce46c8b6d819492dd04b50f5b34207659 Mon Sep 17 00:00:00 2001 From: agrt56 <andreas.gaertner@mni.thm.de> Date: Fri, 23 Jan 2015 21:55:05 +0100 Subject: [PATCH] Added abstention count retrieval (by question) and added abstention count to NewAnswerEvent websocket broadcast. Task #14471 --- .../LecturerQuestionController.java | 11 +++++++++ .../java/de/thm/arsnova/dao/CouchDBDao.java | 4 +++- .../java/de/thm/arsnova/dao/IDatabaseDao.java | 2 ++ .../arsnova/services/IQuestionService.java | 4 +++- .../thm/arsnova/services/QuestionService.java | 23 ++++++++++++++++--- .../arsnova/socket/ARSnovaSocketIOServer.java | 2 +- 6 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java index f1b1c5be..3e4f7b3d 100644 --- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java @@ -18,6 +18,7 @@ package de.thm.arsnova.controller; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import javax.servlet.http.HttpServletResponse; @@ -377,6 +378,16 @@ public class LecturerQuestionController extends AbstractController { return questionService.getAnswerCount(questionId); } + @RequestMapping(value = "/{questionId}/answerandabstentioncount", method = RequestMethod.GET) + public final List<Integer> getAnswerAndAbstentionCount(@PathVariable final String questionId) { + List<Integer> list = Arrays.asList( + questionService.getAnswerCount(questionId), + questionService.getAbstentionAnswerCount(questionId) + ); + + return list; + } + @RequestMapping(value = "/{questionId}/freetextanswer/", method = RequestMethod.GET) public final List<Answer> getFreetextAnswers(@PathVariable final String questionId) { return questionService.getFreetextAnswers(questionId); diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index d3666f3d..01482c04 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -735,7 +735,8 @@ public class CouchDBDao implements IDatabaseDao { return answers; } - private int getAbstentionAnswerCount(final String questionId) { + @Override + public int getAbstentionAnswerCount(final String questionId) { final NovaView view = new NovaView("skill_question/count_abstention_answers_by_question"); view.setKey(questionId); view.setGroup(true); @@ -756,6 +757,7 @@ public class CouchDBDao implements IDatabaseDao { if (results.getResults().size() == 0) { return 0; } + return results.getJSONArray("rows").optJSONObject(0).optInt("value"); } diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index e0814aba..5849001b 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -71,6 +71,8 @@ public interface IDatabaseDao { List<Answer> getAnswers(String questionId, int piRound); int getAnswerCount(Question question, int piRound); + + int getAbstentionAnswerCount(String questionId); List<Answer> getFreetextAnswers(String questionId); diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java index a0e05fa6..a79438cc 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -91,7 +91,7 @@ public interface IQuestionService { int getPreparationQuestionCount(String sessionkey); - SimpleEntry<String,Integer> getAnswerCountByQuestion(String questionid); + SimpleEntry<String, List<Integer>> getAnswerAndAbstentionCountByQuestion(String questionid); int countLectureQuestionAnswers(String sessionkey); @@ -126,4 +126,6 @@ public interface IQuestionService { void deleteAllPreparationAnswers(String sessionkey); void deleteAllLectureAnswers(String sessionkey); + + int getAbstentionAnswerCount(String questionId); } diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index 8aa9991c..1f689b9c 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -19,6 +19,7 @@ package de.thm.arsnova.services; import java.util.AbstractMap; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -269,8 +270,20 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis if (question == null) { return 0; } + return databaseDao.getAnswerCount(question, question.getPiRound()); } + + @Override + @PreAuthorize("isAuthenticated()") + public int getAbstentionAnswerCount(final String questionId) { + final Question question = getQuestion(questionId); + if (question == null) { + return 0; + } + + return databaseDao.getAbstentionAnswerCount(questionId); + } @Override @PreAuthorize("isAuthenticated()") @@ -503,9 +516,13 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis @Override @PreAuthorize("isAuthenticated()") - public SimpleEntry<String,Integer> getAnswerCountByQuestion(final String questionid) { - final int questioncount = getAnswerCount(questionid); - return new AbstractMap.SimpleEntry<String, Integer>(questionid, questioncount); + 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 diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java index f8a8dcc2..c925e80d 100644 --- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java +++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java @@ -420,7 +420,7 @@ public class ARSnovaSocketIOServer implements ApplicationListener<NovaEvent>, No public void visit(NewAnswerEvent event) { final String sessionKey = event.getSession().getKeyword(); this.reportAnswersToLecturerQuestionAvailable(event.getSession(), new Question(event.getQuestion())); - broadcastInSession(sessionKey, "countQuestionAnswersByQuestion", questionService.getAnswerCountByQuestion(event.getQuestion().get_id())); + broadcastInSession(sessionKey, "countQuestionAnswersByQuestion", questionService.getAnswerAndAbstentionCountByQuestion(event.getQuestion().get_id())); broadcastInSession(sessionKey, "countLectureQuestionAnswers", questionService.countLectureQuestionAnswersInternal(sessionKey)); broadcastInSession(sessionKey, "countPreparationQuestionAnswers", questionService.countPreparationQuestionAnswersInternal(sessionKey)); sendToUser(event.getUser(), "unansweredLecturerQuestions", questionService.getUnAnsweredLectureQuestionIds(sessionKey, event.getUser())); -- GitLab