diff --git a/src/main/java/de/thm/arsnova/SessionController.java b/src/main/java/de/thm/arsnova/SessionController.java index e283957c726c5b3914364e6e4c57145cd1c38747..f92414b7356e86243955d40069477492cf06a67c 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 d90ee94aa953c9c9ace690fcd0bacdfa85ec13f2..0436f11b2fd1d19080ceabbb47c1ee45ae0cd02b 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 d42be57a1466b3d4c6543fe0db95163764f0a3ce..eed604f2c602c8ecfc3c3f9ac510f8448e2e9948 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 12382d6c8463886e77225794fd3517d0edd48a81..c367f37560c1cdf8f478d50cb6870004354d7bff 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 9a5c774c4a18d178649433bac4ff35e62ee918ea..628590cca68458f304da8a3906f3b4adc40a1196 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 e271fcc43f742acc63da1f60599ea06fb1a00815..5f68be3d7c64cce1a4ab1a2b8ba7270d0182c764 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; } }