From ff7993d81bf5c26e673df3eff35cca48911560c4 Mon Sep 17 00:00:00 2001
From: Christoph Thelen <christoph.thelen@mni.thm.de>
Date: Mon, 29 Jul 2013 18:14:49 +0200
Subject: [PATCH] Fixed #6619: Added method to delete all questions of session

---
 .../controller/LecturerQuestionController.java |  6 ++++++
 .../java/de/thm/arsnova/dao/CouchDBDao.java    | 18 ++++++++++++++++++
 .../java/de/thm/arsnova/dao/IDatabaseDao.java  |  2 ++
 .../thm/arsnova/services/IQuestionService.java |  2 ++
 .../thm/arsnova/services/QuestionService.java  | 11 +++++++++++
 .../de/thm/arsnova/dao/StubDatabaseDao.java    |  6 ++++++
 6 files changed, 45 insertions(+)

diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
index 2866b4b99..fec00c97a 100644
--- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
@@ -146,6 +146,12 @@ public class LecturerQuestionController extends AbstractController {
 		return questions;
 	}
 
+	@RequestMapping(value = { "/" }, method = RequestMethod.DELETE)
+	@ResponseBody
+	public final void deleteSkillQuestions(@RequestParam final String sessionkey, final HttpServletResponse response) {
+		this.questionService.deleteAllQuestions(sessionkey);
+	}
+
 	@RequestMapping(value = "/count", method = RequestMethod.GET)
 	@ResponseBody
 	public final int getSkillQuestionCount(@RequestParam final String sessionkey, final HttpServletResponse response) {
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index ef39d4e71..a5c7aa57e 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -781,6 +781,24 @@ public class CouchDBDao implements IDatabaseDao {
 			LOGGER.error("IOException: Could not delete question {}", question.get_id());
 		}
 	}
+	
+	@Override
+	public final void deleteAllQuestionsWithAnswers(Session session) {
+		try {
+			View view = new View("skill_question/by_session");
+			view.setStartKey("[" + URLEncoder.encode("\"" + session.get_id() + "\"", "UTF-8") + "]");
+			view.setEndKey("[" + URLEncoder.encode("\"" + session.get_id() + "\", {}", "UTF-8") + "]");
+			ViewResults results = this.getDatabase().view(view);
+			
+			for (Document d : results.getResults()) {
+				Question q = new Question();
+				q.set_id(d.getId());
+				this.deleteQuestionWithAnswers(q);
+			}
+		} catch (IOException e) {
+			LOGGER.error("IOException: Could not delete questions for session {}", session.getKeyword());
+		}
+	}
 
 	private void deleteDocument(final String documentId) throws IOException {
 		Document d = this.getDatabase().getDocument(documentId);
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 4d9e600e5..73c786ee9 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -69,6 +69,8 @@ public interface IDatabaseDao {
 
 	void deleteQuestionWithAnswers(Question question);
 
+	void deleteAllQuestionsWithAnswers(Session session);
+
 	List<String> getUnAnsweredQuestionIds(Session session, User user);
 
 	Answer getMyAnswer(String questionId, int piRound);
diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index 389e1442a..4f04a0c73 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -41,6 +41,8 @@ public interface IQuestionService {
 
 	void deleteQuestion(String questionId);
 
+	void deleteAllQuestions(String sessionKeyword);
+
 	List<String> getUnAnsweredQuestionIds(String sessionKey);
 
 	Answer getMyAnswer(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 89601b04f..1f9d70e87 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -148,6 +148,17 @@ public class QuestionService implements IQuestionService {
 		databaseDao.deleteQuestionWithAnswers(question);
 	}
 
+	@Override
+	@Authenticated
+	public void deleteAllQuestions(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);
+	}
+
 	@Override
 	@Authenticated
 	public void deleteInterposedQuestion(String questionId) {
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index ffc536497..bbf6a89ad 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -439,4 +439,10 @@ public class StubDatabaseDao implements IDatabaseDao {
 	public void deleteSession(Session session) {
 		// TODO Auto-generated method stub
 	}
+
+	@Override
+	public void deleteAllQuestionsWithAnswers(Session session) {
+		// TODO Auto-generated method stub
+		
+	}
 }
-- 
GitLab