From 2c1bd1515f78b1e71699ecfed712d2060a2ade27 Mon Sep 17 00:00:00 2001
From: Christoph Thelen <christoph.thelen@mni.thm.de>
Date: Wed, 18 Dec 2013 11:57:17 +0100
Subject: [PATCH] Delete all interposed questions with one request

---
 .../controller/AudienceQuestionController.java |  1 +
 .../arsnova/controller/LegacyController.java   | 16 ++++++++++++++++
 .../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 ++++++
 7 files changed, 56 insertions(+)

diff --git a/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java b/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java
index d390d7a5f..5b606d54e 100644
--- a/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java
@@ -117,4 +117,5 @@ public class AudienceQuestionController extends AbstractController {
 	) {
 		questionService.deleteInterposedQuestion(questionId);
 	}
+
 }
diff --git a/src/main/java/de/thm/arsnova/controller/LegacyController.java b/src/main/java/de/thm/arsnova/controller/LegacyController.java
index 8f2c5b7a0..83c049dad 100644
--- a/src/main/java/de/thm/arsnova/controller/LegacyController.java
+++ b/src/main/java/de/thm/arsnova/controller/LegacyController.java
@@ -22,16 +22,23 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import de.thm.arsnova.services.IQuestionService;
 
 @Controller
 public class LegacyController extends AbstractController {
 
 	public static final Logger LOGGER = LoggerFactory.getLogger(LegacyController.class);
 
+	@Autowired
+	private IQuestionService questionService;
+
 	/* specific routes */
 
 	@RequestMapping(value = "/session/mysessions", method = RequestMethod.GET)
@@ -115,6 +122,15 @@ public class LegacyController extends AbstractController {
 		return String.format("forward:/audiencequestion/?sessionkey=%s", sessionKey);
 	}
 
+	@RequestMapping(value = "/session/{sessionKey}/interposed", method = RequestMethod.DELETE)
+	@ResponseBody
+	public final void deleteAllInterposedQuestions(
+			@PathVariable final String sessionKey,
+			final HttpServletResponse response
+	) {
+		questionService.deleteAllInterposedQuestions(sessionKey);
+	}
+
 	@RequestMapping(value = "/session/{sessionKey}/interposedcount", method = RequestMethod.GET)
 	public final String redirectQuestionByAudienceCount(
 			@PathVariable final String sessionKey,
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 9df14c785..f1be1d0aa 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -1164,4 +1164,22 @@ public class CouchDBDao implements IDatabaseDao {
 			LOGGER.error("Could not delete session {}", session);
 		}
 	}
+
+	@Override
+	public void deleteAllInterposedQuestions(Session session) {
+		NovaView view = new NovaView("interposed_question/by_session");
+		view.setKey(session.get_id());
+		ViewResults questions = this.getDatabase().view(view);
+		if (questions == null || questions.isEmpty()) {
+			return;
+		}
+		for (Document document : questions.getResults()) {
+			try {
+				this.deleteDocument(document.getId());
+			} catch (IOException e) {
+				LOGGER.error("Could not delete all interposed questions {}", session);
+			}
+		}
+		
+	}
 }
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 2827c41b0..d4e60807b 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -131,4 +131,6 @@ public interface IDatabaseDao {
 	Session updateSession(Session session);
 
 	void deleteSession(Session session);
+
+	void deleteAllInterposedQuestions(Session session);
 }
diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index 4f04a0c73..c1ff4f9e4 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -79,4 +79,6 @@ public interface IQuestionService {
 
 	void deleteInterposedQuestion(String questionId);
 
+	void deleteAllInterposedQuestions(String sessionKeyword);
+
 }
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index f6f51d6d7..a7755c960 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -180,6 +180,17 @@ public class QuestionService implements IQuestionService {
 		}
 		databaseDao.deleteInterposedQuestion(question);
 	}
+	
+	@Override
+	@Authenticated
+	public void deleteAllInterposedQuestions(String sessionKeyword) {
+		User user = userService.getCurrentUser();
+		Session session = databaseDao.getSessionFromKeyword(sessionKeyword);
+		if (user == null || session == null || ! session.isCreator(user)) {
+			throw new UnauthorizedException();
+		}
+		databaseDao.deleteAllInterposedQuestions(session);
+	}
 
 	@Override
 	@Authenticated
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index 8bef8eb9b..ecb8038f9 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -409,4 +409,10 @@ public class StubDatabaseDao implements IDatabaseDao {
 		// TODO Auto-generated method stub
 		
 	}
+
+	@Override
+	public void deleteAllInterposedQuestions(Session session) {
+		// TODO Auto-generated method stub
+		
+	}
 }
-- 
GitLab