From a9d3fd94c5a2929bf7fdf469c0ee9457ede94a45 Mon Sep 17 00:00:00 2001 From: Christoph Thelen <christoph.thelen@mni.thm.de> Date: Mon, 23 Mar 2015 13:47:17 +0100 Subject: [PATCH] Store enabled features in session document --- .../arsnova/controller/SessionController.java | 18 +++++ .../java/de/thm/arsnova/dao/CouchDBDao.java | 2 + .../java/de/thm/arsnova/entities/Session.java | 10 +++ .../thm/arsnova/entities/SessionFeature.java | 81 +++++++++++++++++++ .../thm/arsnova/services/ISessionService.java | 5 ++ .../thm/arsnova/services/SessionService.java | 19 ++++- 6 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/thm/arsnova/entities/SessionFeature.java diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 893bd56b7..c1e5b78fd 100644 --- a/src/main/java/de/thm/arsnova/controller/SessionController.java +++ b/src/main/java/de/thm/arsnova/controller/SessionController.java @@ -38,6 +38,7 @@ import org.springframework.web.bind.annotation.RestController; import de.thm.arsnova.connector.model.Course; import de.thm.arsnova.entities.Session; +import de.thm.arsnova.entities.SessionFeature; import de.thm.arsnova.entities.SessionInfo; import de.thm.arsnova.entities.transport.ImportExportSession; import de.thm.arsnova.entities.transport.LearningProgressValues; @@ -248,6 +249,23 @@ public class SessionController extends AbstractController { return sessionService.getMyLearningProgress(sessionkey, progressType); } + @RequestMapping(value = "/{sessionkey}/features", method = RequestMethod.GET) + public SessionFeature sessionFeatures( + @PathVariable final String sessionkey, + final HttpServletResponse response + ) { + return sessionService.getSessionFeatures(sessionkey); + } + + @RequestMapping(value = "/{sessionkey}/features", method = RequestMethod.PATCH) + public SessionFeature changeSessionFeatures( + @PathVariable final String sessionkey, + @RequestBody final SessionFeature features, + final HttpServletResponse response + ) { + return sessionService.changeSessionFeatures(sessionkey, features); + } + /* internal redirections */ @RequestMapping(value = "/{sessionKey}/lecturerquestion") diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index e8be244c4..df2febfa3 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -447,6 +447,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware sessionDocument.put("ppFaculty", session.getPpFaculty()); sessionDocument.put("ppLevel", session.getPpLevel()); sessionDocument.put("sessionType", session.getSessionType()); + sessionDocument.put("features", JSONObject.fromObject(session.getFeatures())); try { database.saveDocument(sessionDocument); } catch (final IOException e) { @@ -1380,6 +1381,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware s.put("shortName", session.getShortName()); s.put("active", session.isActive()); s.put("learningProgressType", session.getLearningProgressType()); + s.put("features", JSONObject.fromObject(session.getFeatures())); database.saveDocument(s); session.set_rev(s.getRev()); diff --git a/src/main/java/de/thm/arsnova/entities/Session.java b/src/main/java/de/thm/arsnova/entities/Session.java index 6a4f17f91..80311ff8a 100644 --- a/src/main/java/de/thm/arsnova/entities/Session.java +++ b/src/main/java/de/thm/arsnova/entities/Session.java @@ -38,6 +38,7 @@ public class Session implements Serializable { private List<String> _conflicts; private long creationTime; private String learningProgressType = "questions"; + private SessionFeature features; private String ppAuthorName; private String ppAuthorMail; @@ -71,6 +72,7 @@ public class Session implements Serializable { copy.courseId = original.courseId; copy.creationTime = original.creationTime; copy.learningProgressType = original.learningProgressType; + copy.features = new SessionFeature(original.features); // public pool copy.ppAuthorName = original.ppAuthorName; copy.ppAuthorMail = original.ppAuthorMail; @@ -209,6 +211,14 @@ public class Session implements Serializable { this.learningProgressType = learningProgressType; } + public SessionFeature getFeatures() { + return features; + } + + public void setFeatures(SessionFeature features) { + this.features = features; + } + public String getPpAuthorName() { return ppAuthorName; } diff --git a/src/main/java/de/thm/arsnova/entities/SessionFeature.java b/src/main/java/de/thm/arsnova/entities/SessionFeature.java new file mode 100644 index 000000000..8cbaff516 --- /dev/null +++ b/src/main/java/de/thm/arsnova/entities/SessionFeature.java @@ -0,0 +1,81 @@ +/* + * This file is part of ARSnova Backend. + * Copyright (C) 2012-2015 The ARSnova Team + * + * ARSnova Backend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ARSnova Backend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +package de.thm.arsnova.entities; + +public class SessionFeature { + + private boolean jitt; + private boolean feedback; + private boolean interposed; + private boolean pi; + private boolean learningProgress; + + public SessionFeature(SessionFeature features) { + this(); + if (features != null) { + this.jitt = features.jitt; + this.feedback = features.feedback; + this.interposed = features.interposed; + this.pi = features.pi; + this.learningProgress = features.learningProgress; + } + } + + public SessionFeature() {} + + public boolean isJitt() { + return jitt; + } + + public void setJitt(boolean jitt) { + this.jitt = jitt; + } + + public boolean isFeedback() { + return feedback; + } + + public void setFeedback(boolean feedback) { + this.feedback = feedback; + } + + public boolean isInterposed() { + return interposed; + } + + public void setInterposed(boolean interposed) { + this.interposed = interposed; + } + + public boolean isPi() { + return pi; + } + + public void setPi(boolean pi) { + this.pi = pi; + } + + public boolean isLearningProgress() { + return learningProgress; + } + + public void setLearningProgress(boolean learningProgress) { + this.learningProgress = learningProgress; + } + +} diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index 1661b0e11..64c3a8663 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -22,6 +22,7 @@ import java.util.UUID; import de.thm.arsnova.connector.model.Course; import de.thm.arsnova.entities.Session; +import de.thm.arsnova.entities.SessionFeature; import de.thm.arsnova.entities.SessionInfo; import de.thm.arsnova.entities.User; import de.thm.arsnova.entities.transport.ImportExportSession; @@ -69,4 +70,8 @@ public interface ISessionService { List<SessionInfo> getMyVisitedSessionsInfo(); SessionInfo importSession(ImportExportSession session); + + SessionFeature getSessionFeatures(String sessionkey); + + SessionFeature changeSessionFeatures(String sessionkey, SessionFeature features); } diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index 2f8211bd5..2926e8cf2 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -18,7 +18,6 @@ package de.thm.arsnova.services; import java.io.Serializable; -import java.util.AbstractMap.SimpleEntry; import java.util.Comparator; import java.util.List; import java.util.UUID; @@ -39,6 +38,7 @@ import de.thm.arsnova.dao.IDatabaseDao; import de.thm.arsnova.domain.ILearningProgressFactory; import de.thm.arsnova.domain.LearningProgress; import de.thm.arsnova.entities.Session; +import de.thm.arsnova.entities.SessionFeature; import de.thm.arsnova.entities.SessionInfo; import de.thm.arsnova.entities.User; import de.thm.arsnova.entities.transport.ImportExportSession; @@ -48,6 +48,7 @@ import de.thm.arsnova.exceptions.BadRequestException; import de.thm.arsnova.exceptions.ForbiddenException; import de.thm.arsnova.exceptions.NotFoundException; import de.thm.arsnova.exceptions.RequestEntityTooLargeException; +import de.thm.arsnova.exceptions.UnauthorizedException; @Service public class SessionService implements ISessionService, ApplicationEventPublisherAware { @@ -341,4 +342,20 @@ public class SessionService implements ISessionService, ApplicationEventPublishe public void setApplicationEventPublisher(ApplicationEventPublisher publisher) { this.publisher = publisher; } + + @Override + public SessionFeature getSessionFeatures(String sessionkey) { + return databaseDao.getSessionFromKeyword(sessionkey).getFeatures(); + } + + @Override + public SessionFeature changeSessionFeatures(String sessionkey, SessionFeature features) { + final Session session = databaseDao.getSessionFromKeyword(sessionkey); + final User user = userService.getCurrentUser(); + if (!session.isCreator(user)) { + throw new UnauthorizedException(); + } + session.setFeatures(features); + return databaseDao.updateSession(session).getFeatures(); + } } -- GitLab