diff --git a/src/main/java/de/thm/arsnova/SessionController.java b/src/main/java/de/thm/arsnova/SessionController.java index 0142939799afad14362f748f802f59023091f579..fff51bb91fc96a7609467ea89063d410a91c478d 100644 --- a/src/main/java/de/thm/arsnova/SessionController.java +++ b/src/main/java/de/thm/arsnova/SessionController.java @@ -127,6 +127,17 @@ public class SessionController { return null; } + @RequestMapping(value="/session/{sessionkey}/question/{questionId}", method=RequestMethod.GET) + @ResponseBody + public Question getQuestion(@PathVariable String sessionkey, @PathVariable String questionId, HttpServletResponse response) { + Question question = sessionService.getQuestion(questionId); + if (question != null && question.getSession().equals(sessionkey)) { + return question; + } + + response.setStatus(HttpStatus.NOT_FOUND.value()); + return null; + } @RequestMapping(value="/session/{sessionkey}/question", method=RequestMethod.POST) @ResponseBody diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 65772653ad42fb9eb8044c2a216497a69abcbdb8..e6175ad653635c6f941608e8179111dbf86ef170 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -405,4 +405,26 @@ public class CouchDBDao implements IDatabaseDao { } return false; } + + + @Override + public Question getQuestion(String id) { + try { + View view = new View("skill_question/by_id"); + view.setKey(URLEncoder.encode("\"" + id + "\"", "UTF-8")); + ViewResults results = this.getDatabase().view(view); + + if (results.getJSONArray("rows").optJSONObject(0) == null) { + return null; + } + + return (Question) JSONObject.toBean( + results.getJSONArray("rows").optJSONObject(0).optJSONObject("value"), + Question.class + ); + } catch (IOException e) { + logger.error("Could not get question with id {}", id); + } + 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 84bd0a7b8639ea78bce800f266167ba9aeb238aa..13825abc0e762e417e8f66e996b6332ede6ad9bd 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -34,4 +34,5 @@ public interface IDatabaseDao { public boolean sessionKeyAvailable(String keyword); public boolean saveQuestion(Session session, Question question); + public Question getQuestion(String id); } \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index 0dfb1c8dee82d3eeed5f946e8fcd1be47b256d2b..83f9d40d05c721787ffd8d27ca851c755dc30e7e 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -45,4 +45,5 @@ public interface ISessionService { public void broadcastFeedbackChanges(Map<String, Set<String>> affectedUsers, Set<String> allAffectedSessions); public boolean saveQuestion(Question question); + public Question getQuestion(String id); } \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index e169cb00977e9a902561cb966d373ac97394edb6..29f2eee157588681c283dedec00181bd75dfe1eb 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -148,4 +148,9 @@ public class SessionService implements ISessionService { Session session = this.databaseDao.getSessionFromKeyword(question.getSession()); return this.databaseDao.saveQuestion(session, question); } + + @Override + public Question getQuestion(String id) { + return databaseDao.getQuestion(id); + } }