From ccb13325468c1064d652ebdff3521eeaaa6a594f Mon Sep 17 00:00:00 2001
From: Daniel Knapp <daniel.knapp@thm.de>
Date: Wed, 6 Mar 2013 13:38:51 +0100
Subject: [PATCH] lock/unlock session methods added

---
 .../thm/arsnova/controller/SessionController.java | 15 +++++++++++++++
 src/main/java/de/thm/arsnova/dao/CouchDBDao.java  | 14 ++++++++++++++
 .../java/de/thm/arsnova/dao/IDatabaseDao.java     |  2 ++
 .../de/thm/arsnova/services/ISessionService.java  |  2 ++
 .../de/thm/arsnova/services/SessionService.java   |  6 ++++++
 5 files changed, 39 insertions(+)

diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index 4e437984..e68886e9 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -39,6 +39,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 
 import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.LoggedIn;
+import de.thm.arsnova.entities.Question;
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.services.ISessionService;
@@ -159,6 +160,20 @@ public class SessionController extends AbstractController {
 
 		return sessions;
 	}
+	
+	@RequestMapping(value = "/{sessionkey}/lock", method = RequestMethod.POST)
+	@ResponseBody
+	public final Session lockSession(
+			@PathVariable final String sessionkey,
+			@RequestParam(required = false) final Boolean lock,
+			final HttpServletResponse response
+	) {
+		if (lock != null) {
+			return this.sessionService.setActive(sessionkey, lock);
+		}
+		response.setStatus(HttpStatus.NOT_FOUND.value());
+		return null;
+	}
 
 	/* internal redirections */
 
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index b3e53fea..3f7b6a49 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -1421,4 +1421,18 @@ public class CouchDBDao implements IDatabaseDao {
 			return query.toString();
 		}
 	}
+
+	@Override
+	public Session lockSession(Session session, Boolean lock) {
+		try {
+			Document s = this.database.getDocument(session.get_id());
+			s.put("active", lock);
+			this.database.saveDocument(s);
+			session.set_rev(s.getRev());
+			return session;
+		} catch (IOException e) {
+			LOGGER.error("Could not lock session {}", session);
+		}
+		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 1968ce84..9b4905f0 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 {
 	void deleteInterposedQuestion(InterposedQuestion question);
 
 	List<Session> getCourseSessions(List<Course> courses);
+
+	Session lockSession(Session session, Boolean lock);
 }
diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index 17ebdef3..acea01b7 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -44,4 +44,6 @@ public interface ISessionService {
 	int countActiveUsers(String sessionkey);
 
 	int countSessions(List<Course> courses);
+
+	Session setActive(String sessionkey, Boolean lock);
 }
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index d6153358..a568c205 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -183,4 +183,10 @@ public class SessionService implements ISessionService {
 		}
 		return sessions.size();
 	}
+
+	@Override
+	public Session setActive(String sessionkey, Boolean lock) {
+		Session session = databaseDao.getSessionFromKeyword(sessionkey);
+		return databaseDao.lockSession(session, lock);
+	}
 }
-- 
GitLab