From b4d78532fe64a87fe38a73475d32794edfee029b Mon Sep 17 00:00:00 2001 From: Julian Hochstetter <julian.hochstetter@mni.thm.de> Date: Tue, 16 Oct 2012 12:43:46 +0200 Subject: [PATCH] Task #4028: /getSkillQuestions/{session} returns a list of questions --- .../de/thm/arsnova/SessionController.java | 15 +++++++ .../java/de/thm/arsnova/dao/CouchDBDao.java | 40 +++++++++++++++++++ .../java/de/thm/arsnova/dao/IDatabaseDao.java | 1 + .../thm/arsnova/services/ISessionService.java | 2 +- .../thm/arsnova/services/SessionService.java | 5 +++ .../thm/arsnova/socket/message/Question.java | 30 +++++++++++++- 6 files changed, 91 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/thm/arsnova/SessionController.java b/src/main/java/de/thm/arsnova/SessionController.java index e283957c7..f92414b73 100644 --- a/src/main/java/de/thm/arsnova/SessionController.java +++ b/src/main/java/de/thm/arsnova/SessionController.java @@ -42,6 +42,7 @@ import de.thm.arsnova.entities.User; import de.thm.arsnova.services.ISessionService; import de.thm.arsnova.services.IUserService; import de.thm.arsnova.socket.ARSnovaSocketIOServer; +import de.thm.arsnova.socket.message.Question; @Controller public class SessionController { @@ -108,6 +109,20 @@ public class SessionController { return sessions; } + @RequestMapping(value="/getSkillQuestions/{sessionkey}", method=RequestMethod.GET) + @ResponseBody + public List<Question> getSkillQuestions(@PathVariable String sessionkey, HttpServletResponse response) { + List<Question> questions = sessionService.getSkillQuestions(sessionkey); + if(questions == null || questions.isEmpty()) { + response.setStatus(HttpStatus.NOT_FOUND.value()); + return null; + } + logger.info(questions.toString()); + return questions; + } + + + @RequestMapping(value="/socketurl", method=RequestMethod.GET) @ResponseBody public String getSocketUrl() { diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index d90ee94aa..0436f11b2 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -30,9 +30,16 @@ import java.util.List; import java.util.Map; import java.util.Set; +import net.sf.ezmorph.Morpher; +import net.sf.ezmorph.MorpherRegistry; +import net.sf.ezmorph.bean.BeanMorpher; +import net.sf.ezmorph.bean.MorphDynaBean; import net.sf.json.JSONException; import net.sf.json.JSONObject; +import net.sf.json.util.JSONUtils; +import org.apache.commons.beanutils.DynaBean; +import org.apache.commons.beanutils.DynaClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -53,6 +60,7 @@ import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; import de.thm.arsnova.services.ISessionService; import de.thm.arsnova.services.IUserService; +import de.thm.arsnova.socket.message.PossibleAnswer; import de.thm.arsnova.socket.message.Question; @Component @@ -177,6 +185,38 @@ public class CouchDBDao implements IDatabaseDao { } } + @Override + public List<Question> getSkillQuestions(String session) { + try { + View view = new View("skill_question/by_session"); + view.setStartKey("[" + URLEncoder.encode("\"" + session + "\"", "UTF-8") + "]"); + view.setEndKey("[" + URLEncoder.encode("\"" + session + "\",{}", "UTF-8") + "]"); + + ViewResults questions = this.getDatabase().view(view); + + List<Question> result = new ArrayList<Question>(); + logger.info(questions.toString()); + MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry(); + Morpher dynaMorpher = new BeanMorpher(PossibleAnswer.class, morpherRegistry); + morpherRegistry.registerMorpher(dynaMorpher); + for (Document d : questions.getResults()) { + Question q = (Question) JSONObject.toBean(d.getJSONObject().getJSONObject("value"), Question.class); + List<PossibleAnswer> answers = new ArrayList<PossibleAnswer>(); + for(Object answer : q.getPossibleAnswers()) { + PossibleAnswer a = (PossibleAnswer) morpherRegistry.morph(PossibleAnswer.class, answer); + answers.add(a); + } + q.setPossibleAnswers(answers); + result.add(q); + } + + return result; + } catch (UnsupportedEncodingException e) { + return null; + } + } + + @Override public Session getSessionFromKeyword(String keyword) { try { diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index d42be57a1..eed604f2c 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -37,4 +37,5 @@ public interface IDatabaseDao { public boolean sessionKeyAvailable(String keyword); public boolean saveQuestion(Session session, Question question); + List<Question> getSkillQuestions(String session); } \ 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 12382d6c8..c367f3756 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -26,7 +26,6 @@ import java.util.Set; import de.thm.arsnova.entities.Feedback; import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; - import de.thm.arsnova.socket.message.Question; @@ -46,4 +45,5 @@ public interface ISessionService { public List<Session> getMySessions(String username); public boolean saveQuestion(Question question); + public List<Question> getSkillQuestions(String sessionkey); } \ 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 9a5c774c4..628590cca 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -76,6 +76,11 @@ public class SessionService implements ISessionService { return databaseDao.getMySessions(username); } + @Override + public List<Question> getSkillQuestions(String sessionkey) { + return databaseDao.getSkillQuestions(sessionkey); + } + @Override public Session saveSession(Session session) { return databaseDao.saveSession(session); diff --git a/src/main/java/de/thm/arsnova/socket/message/Question.java b/src/main/java/de/thm/arsnova/socket/message/Question.java index e271fcc43..5f68be3d7 100644 --- a/src/main/java/de/thm/arsnova/socket/message/Question.java +++ b/src/main/java/de/thm/arsnova/socket/message/Question.java @@ -22,6 +22,7 @@ import java.util.List; public class Question { + private String type; private String questionType; private String subject; private String text; @@ -30,6 +31,16 @@ public class Question { private List<PossibleAnswer> possibleAnswers; private boolean noCorrect; private String session; + private int number; + + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } public String getQuestionType() { return questionType; @@ -87,6 +98,14 @@ public class Question { this.noCorrect = noCorrect; } + public String getSessionId() { + return session; + } + + public void setSessionId(String session) { + this.session = session; + } + public String getSession() { return session; } @@ -95,8 +114,17 @@ public class Question { this.session = session; } + public int getNumber() { + return number; + } + + public void setNumber(int number) { + this.number = number; + } + @Override public String toString() { - return "Question type '" + this.questionType + "': " + this.subject + ";\n" + this.text; + return "Question type '" + this.questionType + "': " + this.subject + ";\n" + this.text + + this.possibleAnswers; } } -- GitLab