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