diff --git a/src/main/java/de/thm/arsnova/controller/QuestionController.java b/src/main/java/de/thm/arsnova/controller/QuestionController.java index f2d1baade8533e2374c55eca5b25891a654c7be9..3f7b63a05c4243c2a766f63491a2ea096069fc4d 100644 --- a/src/main/java/de/thm/arsnova/controller/QuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/QuestionController.java @@ -219,5 +219,16 @@ public class QuestionController extends AbstractController { ) { return questionService.getAnswerCount(sessionKey, questionId); } + + @RequestMapping(value = "/session/{sessionKey}/question/{questionId}/freetextanswers", method = RequestMethod.GET) + @ResponseBody + public final List<Answer> getFreetextAnswers( + @PathVariable final String sessionKey, + @PathVariable final String questionId, + final HttpServletResponse response + ) { + return questionService.getFreetextAnswers(sessionKey, questionId); + } + } diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 21a51dd306ba975345a5afe1bfed62277f443854..9a5c3336617a5d807170c89b82c5a470194748a2 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -792,4 +792,34 @@ public class CouchDBDao implements IDatabaseDao { } return 0; } + + @Override + public List<Answer> getFreetextAnswers(String sessionKey, String questionId) { + Session s = this.getSessionFromKeyword(sessionKey); + if (s == null) { + throw new NotFoundException(); + } + + try { + View view = new View("skill_question/freetext_answers"); + view.setKey(URLEncoder.encode("\"" + questionId + "\"", "UTF-8")); + ViewResults results = this.getDatabase().view(view); + if (results.getResults().isEmpty()) { + throw new NotFoundException(); + } + List<Answer> answers = new ArrayList<Answer>(); + for (Document d : results.getResults()) { + Answer a = (Answer) JSONObject.toBean(d.getJSONObject().getJSONObject("value"), Answer.class); + a.setSessionId(s.get_id()); + a.setQuestionId(questionId); + answers.add(a); + } + return answers; + + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error while retrieving freetext answers", e); + } + + return null; + } } diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 524a8d98ac560bbb8b26e2e4636cd3b53886a1ec..7c7aeeb3e37529b675af2a491d936d9b3238703c 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -70,4 +70,6 @@ public interface IDatabaseDao { List<Answer> getAnswers(String sessionKey, String questionId); int getAnswerCount(String sessionKey, String questionId); + + List<Answer> getFreetextAnswers(String sessionKey, String questionId); } diff --git a/src/main/java/de/thm/arsnova/entities/Answer.java b/src/main/java/de/thm/arsnova/entities/Answer.java index 3a3ef5d4581c88fd2e984068e8a6a06898f6f8dd..4159ea62f2faaa1ca71d818a798c59988d4bc991 100644 --- a/src/main/java/de/thm/arsnova/entities/Answer.java +++ b/src/main/java/de/thm/arsnova/entities/Answer.java @@ -11,6 +11,7 @@ public class Answer { private String answerText; private String answerSubject; private String user; + private long timestamp; private int answerCount; public Answer() { @@ -65,6 +66,15 @@ public class Answer { this.answerText = answerText; } + public final String getText() { + return answerText; + } + + public final void setText(final String answerText) { + this.answerText = answerText; + } + + public final String getAnswerSubject() { return answerSubject; } @@ -72,6 +82,14 @@ public class Answer { public final void setAnswerSubject(final String answerSubject) { this.answerSubject = answerSubject; } + + public final String getSubject() { + return answerSubject; + } + + public final void setSubject(final String answerSubject) { + this.answerSubject = answerSubject; + } public final String getUser() { return user; @@ -81,6 +99,14 @@ public class Answer { this.user = user; } + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + public final int getAnswerCount() { return answerCount; } diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java index ebc3704b9b510f42725c142ce107a5eaeb08aae6..a6977fe0ff1e41cf04722f3b91e6f4c5a953596d 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -44,4 +44,6 @@ public interface IQuestionService { List<Answer> getAnswers(String sessionKey, String questionId); int getAnswerCount(String sessionKey, String questionId); + + List<Answer> getFreetextAnswers(String sessionKey, 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 7572c77f447130853ecc604ccc3e1470681a6632..e8677527457f0d1a10796bdf18b9ae987c0da40c 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -112,4 +112,10 @@ public class QuestionService implements IQuestionService { public int getAnswerCount(String sessionKey, String questionId) { return databaseDao.getAnswerCount(sessionKey, questionId); } + + @Override + @Authenticated + public List<Answer> getFreetextAnswers(String sessionKey, String questionId) { + return databaseDao.getFreetextAnswers(sessionKey, questionId); + } } diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index c2e8a13d18d1bf631516789bb254cc0cd83f23c7..033548ecf0c36093ce88ca9888dd34c6ebbb5988 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -218,4 +218,10 @@ public class StubDatabaseDao implements IDatabaseDao { return 0; } + @Override + public List<Answer> getFreetextAnswers(String sessionKey, String questionId) { + // TODO Auto-generated method stub + return null; + } + }