From 4ced0863dbb09d081782600c456d55f4fd8e37fc Mon Sep 17 00:00:00 2001 From: Christoph Thelen <christoph.thelen@mni.thm.de> Date: Wed, 30 Oct 2013 12:55:05 +0100 Subject: [PATCH] Create question variants, added several question filter functions --- .../LecturerQuestionController.java | 29 ++++++++- .../java/de/thm/arsnova/dao/CouchDBDao.java | 35 ++++++++++ .../java/de/thm/arsnova/dao/IDatabaseDao.java | 10 +++ .../de/thm/arsnova/entities/Question.java | 9 +++ .../arsnova/services/IQuestionService.java | 10 +++ .../thm/arsnova/services/QuestionService.java | 64 +++++++++++++++---- .../webapp/WEB-INF/spring/spring-main.xml | 4 +- .../de/thm/arsnova/dao/StubDatabaseDao.java | 30 +++++++++ 8 files changed, 172 insertions(+), 19 deletions(-) diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java index 5042f201..04102ddd 100644 --- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java @@ -156,8 +156,22 @@ public class LecturerQuestionController extends AbstractController { @RequestMapping(value = { "/" }, method = RequestMethod.DELETE) @ResponseBody - public final void deleteSkillQuestions(@RequestParam final String sessionkey, final HttpServletResponse response) { - this.questionService.deleteAllQuestions(sessionkey); + public final void deleteSkillQuestions( + @RequestParam final String sessionkey, + @RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureQuestionsOnly, + @RequestParam(value = "flashcardsonly", defaultValue = "false") final boolean flashcardsOnly, + @RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationQuestionsOnly, + final HttpServletResponse response + ) { + if (lectureQuestionsOnly) { + this.questionService.deleteLectureQuestions(sessionkey); + } else if (flashcardsOnly) { + this.questionService.deleteFlashcards(sessionkey); + } else if (preparationQuestionsOnly) { + this.questionService.deletePreparationQuestions(sessionkey); + } else { + this.questionService.deleteAllQuestions(sessionkey); + } } @RequestMapping(value = "/count", method = RequestMethod.GET) @@ -194,9 +208,18 @@ public class LecturerQuestionController extends AbstractController { @ResponseBody public final List<String> getUnAnsweredSkillQuestionIds( @RequestParam final String sessionkey, + @RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureQuestionsOnly, + @RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationQuestionsOnly, final HttpServletResponse response ) { - List<String> answers = questionService.getUnAnsweredQuestionIds(sessionkey); + List<String> answers; + if (lectureQuestionsOnly) { + answers = questionService.getUnAnsweredLectureQuestionIds(sessionkey); + } else if (preparationQuestionsOnly) { + answers = questionService.getUnAnsweredPreparationQuestionIds(sessionkey); + } else { + answers = questionService.getUnAnsweredQuestionIds(sessionkey); + } if (answers == null || answers.isEmpty()) { throw new NoContentException(); } diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index e612893e..58f5ba49 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -262,6 +262,7 @@ public class CouchDBDao implements IDatabaseDao { Document q = new Document(); q.put("type", "skill_question"); q.put("questionType", question.getQuestionType()); + q.put("questionVariant", question.getQuestionVariant()); q.put("sessionId", session.get_id()); q.put("subject", question.getSubject()); q.put("text", question.getText()); @@ -457,6 +458,10 @@ public class CouchDBDao implements IDatabaseDao { @Override public final void deleteAllQuestionsWithAnswers(Session session) { NovaView view = new NovaView("skill_question/by_session"); + deleteAllQuestionDocumentsWithAnswers(session, view); + } + + private void deleteAllQuestionDocumentsWithAnswers(Session session, NovaView view) { view.setStartKeyArray(session.get_id()); view.setEndKey(session.get_id(), "{}"); ViewResults results = this.getDatabase().view(view); @@ -1217,4 +1222,34 @@ public class CouchDBDao implements IDatabaseDao { } return results.getJSONArray("rows").optJSONObject(0).optInt("value"); } + + @Override + public void deleteAllLectureQuestionsWithAnswers(Session session) { + NovaView view = new NovaView("skill_question/lecture_question_by_session"); + deleteAllQuestionDocumentsWithAnswers(session, view); + } + + @Override + public void deleteAllFlashcardsWithAnswers(Session session) { + NovaView view = new NovaView("skill_question/flashcard_by_session"); + deleteAllQuestionDocumentsWithAnswers(session, view); + } + + @Override + public void deleteAllPreparationQuestionsWithAnswers(Session session) { + NovaView view = new NovaView("skill_question/preparation_question_by_session"); + deleteAllQuestionDocumentsWithAnswers(session, view); + } + + @Override + public List<String> getUnAnsweredLectureQuestionIds(Session session, User user) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List<String> getUnAnsweredPreparationQuestionIds(Session session, User user) { + // TODO Auto-generated method stub + 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 897e09ee..56490bb4 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -145,4 +145,14 @@ public interface IDatabaseDao { int countLectureQuestionAnswers(Session session); int countPreparationQuestionAnswers(Session session); + + void deleteAllLectureQuestionsWithAnswers(Session session); + + void deleteAllFlashcardsWithAnswers(Session session); + + void deleteAllPreparationQuestionsWithAnswers(Session session); + + List<String> getUnAnsweredLectureQuestionIds(Session session, User user); + + List<String> getUnAnsweredPreparationQuestionIds(Session session, User user); } diff --git a/src/main/java/de/thm/arsnova/entities/Question.java b/src/main/java/de/thm/arsnova/entities/Question.java index de56243c..33c2e59a 100644 --- a/src/main/java/de/thm/arsnova/entities/Question.java +++ b/src/main/java/de/thm/arsnova/entities/Question.java @@ -24,6 +24,7 @@ public class Question { private String type; private String questionType; + private String questionVariant; private String subject; private String text; private boolean active; @@ -59,6 +60,14 @@ public class Question { this.questionType = questionType; } + public final String getQuestionVariant() { + return questionVariant; + } + + public final void setQuestionVariant(final String questionVariant) { + this.questionVariant = questionVariant; + } + public final String getSubject() { return subject; } diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java index 33239d8e..da43d6a3 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -95,4 +95,14 @@ public interface IQuestionService { int countPreparationQuestionAnswers(String sessionkey); + void deleteLectureQuestions(String sessionkey); + + void deleteFlashcards(String sessionkey); + + void deletePreparationQuestions(String sessionkey); + + List<String> getUnAnsweredLectureQuestionIds(String sessionkey); + + List<String> getUnAnsweredPreparationQuestionIds(String sessionkey); + } diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index 2162802b..04bf16eb 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -116,10 +116,7 @@ public class QuestionService implements IQuestionService { @Override @Authenticated public List<String> getQuestionIds(String sessionKey) { - User user = userService.getCurrentUser(); - if (user == null) { - throw new UnauthorizedException(); - } + User user = getCurrentUser(); Session session = databaseDao.getSessionFromKeyword(sessionKey); if (session == null) { throw new NotFoundException(); @@ -146,12 +143,17 @@ public class QuestionService implements IQuestionService { @Override @Authenticated public void deleteAllQuestions(String sessionKeyword) { + Session session = getSessionWithAuthCheck(sessionKeyword); + databaseDao.deleteAllQuestionsWithAnswers(session); + } + + private Session getSessionWithAuthCheck(String sessionKeyword) { User user = userService.getCurrentUser(); Session session = databaseDao.getSession(sessionKeyword); if (user == null || session == null || !session.isCreator(user)) { throw new UnauthorizedException(); } - databaseDao.deleteAllQuestionsWithAnswers(session); + return session; } @Override @@ -188,15 +190,17 @@ public class QuestionService implements IQuestionService { @Override @Authenticated public List<String> getUnAnsweredQuestionIds(String sessionKey) { + User user = getCurrentUser(); + Session session = getSession(sessionKey); + return databaseDao.getUnAnsweredQuestionIds(session, user); + } + + private User getCurrentUser() { User user = userService.getCurrentUser(); if (user == null) { throw new UnauthorizedException(); } - Session session = databaseDao.getSessionFromKeyword(sessionKey); - if (session == null) { - throw new NotFoundException(); - } - return databaseDao.getUnAnsweredQuestionIds(session, user); + return user; } @Override @@ -337,10 +341,7 @@ public class QuestionService implements IQuestionService { @Override @Authenticated public Answer saveAnswer(Answer answer) { - User user = userService.getCurrentUser(); - if (user == null) { - throw new UnauthorizedException(); - } + User user = getCurrentUser(); Question question = this.getQuestion(answer.getQuestionId()); if (question == null) { throw new NotFoundException(); @@ -445,4 +446,39 @@ public class QuestionService implements IQuestionService { public int countPreparationQuestionAnswers(String sessionkey) { return databaseDao.countPreparationQuestionAnswers(getSession(sessionkey)); } + + @Override + @Authenticated + public void deleteLectureQuestions(String sessionkey) { + Session session = getSessionWithAuthCheck(sessionkey); + databaseDao.deleteAllLectureQuestionsWithAnswers(session); + } + + @Override + @Authenticated + public void deleteFlashcards(String sessionkey) { + Session session = getSessionWithAuthCheck(sessionkey); + databaseDao.deleteAllFlashcardsWithAnswers(session); + } + + @Override + @Authenticated + public void deletePreparationQuestions(String sessionkey) { + Session session = getSessionWithAuthCheck(sessionkey); + databaseDao.deleteAllPreparationQuestionsWithAnswers(session); + } + + @Override + public List<String> getUnAnsweredLectureQuestionIds(String sessionkey) { + User user = getCurrentUser(); + Session session = getSession(sessionkey); + return databaseDao.getUnAnsweredLectureQuestionIds(session, user); + } + + @Override + public List<String> getUnAnsweredPreparationQuestionIds(String sessionkey) { + User user = getCurrentUser(); + Session session = getSession(sessionkey); + return databaseDao.getUnAnsweredPreparationQuestionIds(session, user); + } } diff --git a/src/main/webapp/WEB-INF/spring/spring-main.xml b/src/main/webapp/WEB-INF/spring/spring-main.xml index b8d4d669..9d40e5a7 100644 --- a/src/main/webapp/WEB-INF/spring/spring-main.xml +++ b/src/main/webapp/WEB-INF/spring/spring-main.xml @@ -54,11 +54,11 @@ <!-- Example of connector client configuration --> <!-- Uncomment bean definition to activate connector --> - <bean id="connectorClient" scope="singleton" class="de.thm.arsnova.connector.client.ConnectorClientImpl"> + <!-- bean id="connectorClient" scope="singleton" class="de.thm.arsnova.connector.client.ConnectorClientImpl"> <property name="serviceLocation" value="${connector.uri}"></property> <property name="username" value="${connector.username}"></property> <property name="password" value="${connector.password}"></property> - </bean> + </bean --> <http:access-control allow-origin="*" allow-methods="GET" /> </beans> diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index c5c5cdc6..140f36b3 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -451,4 +451,34 @@ public class StubDatabaseDao implements IDatabaseDao { // TODO Auto-generated method stub return 0; } + + @Override + public void deleteAllLectureQuestionsWithAnswers(Session session) { + // TODO Auto-generated method stub + + } + + @Override + public void deleteAllFlashcardsWithAnswers(Session session) { + // TODO Auto-generated method stub + + } + + @Override + public void deleteAllPreparationQuestionsWithAnswers(Session session) { + // TODO Auto-generated method stub + + } + + @Override + public List<String> getUnAnsweredLectureQuestionIds(Session session, User user) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List<String> getUnAnsweredPreparationQuestionIds(Session session, User user) { + // TODO Auto-generated method stub + return null; + } } -- GitLab