diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java index f1b1c5be7e6fc7bf62727e3a506f99ac8be34e5a..3e4f7b3d5a4d23b48b83f81e4634cbc0b0c703ea 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 d3666f3db95565eec890e1e1d7501dc5e7d20cd0..01482c042ee1014e993400a0228bc49dacfb4775 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 e0814aba8905d1f5e378f1e4aebb278abdad1bbf..5849001b4b08dcf1f2aa359b7afc3d906c996f42 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 a0e05fa64dfc902995ae4d083485c0493cc41e44..a79438cc06fb9f1e63fc01acec509a2aa914a559 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 8aa9991c017b4682855f5da6bc7c5fe1f2f8c473..1f689b9c7531ab3716b24360de19a5f371e90398 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 f8a8dcc2760bc5fe7aee23565bc4308276610c80..c925e80ddd34407ed244b67aaea67d0d5fda169f 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()));