From aaf3db969f1db8925aab07e480a4070c8f224de6 Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Sun, 18 Feb 2018 11:30:40 +0100
Subject: [PATCH] Fix migration and handling of of Room Settings

---
 .../entities/migration/FromV2Migrator.java    |  5 +++--
 .../entities/migration/ToV2Migrator.java      | 21 +++++++++++++------
 .../entities/migration/v2/RoomFeature.java    | 16 +++++++-------
 .../thm/arsnova/services/RoomServiceImpl.java |  2 ++
 .../websocket/ArsnovaSocketioServerImpl.java  |  6 +++++-
 5 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java b/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
index 0b48b6891..f46a1ddf1 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
@@ -164,10 +164,11 @@ public class FromV2Migrator {
 	public de.thm.arsnova.entities.Room.Settings migrate(final RoomFeature feature) {
 		de.thm.arsnova.entities.Room.Settings settings = new de.thm.arsnova.entities.Room.Settings();
 		if (feature != null) {
-			settings.setCommentsEnabled(feature.isInterposed() || feature.isInterposedFeedback() || feature.isTotal());
+			settings.setCommentsEnabled(feature.isInterposed() || feature.isInterposedFeedback()
+					|| feature.isTwitterWall() || feature.isTotal());
 			settings.setQuestionsEnabled(feature.isLecture() || feature.isJitt() || feature.isClicker() || feature.isTotal());
 			settings.setSlidesEnabled(feature.isSlides() || feature.isTotal());
-			settings.setFlashcardsEnabled(feature.isFlashcard() || feature.isFlashcardFeature() || feature.isTotal());
+			settings.setFlashcardsEnabled(feature.isFlashcardFeature() || feature.isFlashcard() || feature.isTotal());
 			settings.setQuickSurveyEnabled(feature.isLiveClicker());
 			settings.setQuickFeedbackEnabled(feature.isFeedback() || feature.isLiveFeedback() || feature.isTotal());
 			settings.setMultipleRoundsEnabled(feature.isPi() || feature.isClicker() || feature.isTotal());
diff --git a/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java b/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java
index 59d3469f4..7154b6cad 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java
@@ -81,6 +81,7 @@ public class ToV2Migrator {
 			to.setPpFaculty(from.getAuthor().getOrganizationUnit());
 			to.setPpLogo(from.getAuthor().getOrganizationLogo());
 		}
+		to.setFeatures(migrate(from.getSettings()));
 
 		return to;
 	}
@@ -91,23 +92,30 @@ public class ToV2Migrator {
 
 	public RoomFeature migrate(final de.thm.arsnova.entities.Room.Settings settings) {
 		RoomFeature feature = new RoomFeature();
+
+		/* Features */
 		feature.setInterposed(settings.isCommentsEnabled());
 		feature.setLecture(settings.isQuestionsEnabled());
 		feature.setJitt(settings.isQuestionsEnabled());
 		feature.setSlides(settings.isSlidesEnabled());
-		feature.setFlashcard(settings.isFlashcardsEnabled());
-		feature.setFeedback(settings.isQuickSurveyEnabled());
+		feature.setFlashcardFeature(settings.isFlashcardsEnabled());
+		feature.setFeedback(settings.isQuickFeedbackEnabled());
 		feature.setPi(settings.isMultipleRoundsEnabled() || settings.isTimerEnabled());
 		feature.setLearningProgress(settings.isScoreEnabled());
 
+		/* Use cases */
 		int count = 0;
 		/* Single-feature use cases can be migrated */
 		if (settings.isCommentsEnabled()) {
-			feature.setTwitterWall(true);
+			feature.setInterposedFeedback(true);
 			count++;
 		}
 		if (settings.isFlashcardsEnabled()) {
-			feature.setFlashcardFeature(true);
+			feature.setFlashcard(true);
+			count++;
+		}
+		if (settings.isQuickFeedbackEnabled()) {
+			feature.setLiveFeedback(true);
 			count++;
 		}
 		if (settings.isQuickSurveyEnabled()) {
@@ -134,8 +142,9 @@ public class ToV2Migrator {
 
 		if (count != 1) {
 			/* Reset single-feature use-cases since multiple features were detected */
-			feature.setTwitterWall(false);
-			feature.setFlashcardFeature(false);
+			feature.setInterposedFeedback(false);
+			feature.setFlashcard(false);
+			feature.setLiveFeedback(false);
 			feature.setLiveClicker(false);
 
 			if (count == 7) {
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java b/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
index bee794c7f..aed77c9e5 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
@@ -30,7 +30,7 @@ import java.io.Serializable;
 @ApiModel(value = "RoomFeature", description = "Room (Session) Feature entity - Represents feature/use case settings of a Room")
 public class RoomFeature implements Serializable {
 
-	private boolean custom = true;
+	private boolean custom = false;
 	private boolean clicker = false;
 	private boolean peerGrading = false;
 	private boolean twitterWall = false;
@@ -40,13 +40,13 @@ public class RoomFeature implements Serializable {
 	private boolean flashcard = false;
 	private boolean total = false;
 
-	private boolean jitt = true;
-	private boolean lecture = true;
-	private boolean feedback = true;
-	private boolean interposed = true;
-	private boolean pi = true;
-	private boolean learningProgress = true;
-	private boolean flashcardFeature = true;
+	private boolean jitt = false;
+	private boolean lecture = false;
+	private boolean feedback = false;
+	private boolean interposed = false;
+	private boolean pi = false;
+	private boolean learningProgress = false;
+	private boolean flashcardFeature = false;
 	private boolean slides = false;
 
 	public RoomFeature(RoomFeature features) {
diff --git a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
index 355d62a0d..897832607 100644
--- a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
@@ -389,6 +389,8 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 		room.setOwnerId(existingRoom.getOwnerId());
 		handleLogo(room);
 		update(existingRoom, room);
+		/* TODO: only publish event when feedback has changed */
+		this.publisher.publishEvent(new FeatureChangeEvent(this, room));
 
 		return room;
 	}
diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
index da44fdc88..31f7d3d52 100644
--- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
+++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
@@ -31,6 +31,7 @@ import com.corundumstudio.socketio.protocol.PacketType;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.Comment;
 import de.thm.arsnova.entities.ScoreOptions;
+import de.thm.arsnova.entities.migration.ToV2Migrator;
 import de.thm.arsnova.events.*;
 import de.thm.arsnova.exceptions.NoContentException;
 import de.thm.arsnova.exceptions.NotFoundException;
@@ -83,6 +84,9 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	@Autowired
 	private CommentService commentService;
 
+	@Autowired
+	private ToV2Migrator toV2Migrator;
+
 	private static final Logger logger = LoggerFactory.getLogger(ArsnovaSocketioServerImpl.class);
 
 	private int portNumber;
@@ -606,7 +610,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	public void visit(FeatureChangeEvent event) {
 		final String roomId = event.getRoom().getId();
 		final de.thm.arsnova.entities.Room.Settings settings = event.getRoom().getSettings();
-		broadcastInRoom(roomId, "featureChange", settings);
+		broadcastInRoom(roomId, "featureChange", toV2Migrator.migrate(settings));
 
 		if (settings.isFlashcardsEnabled()) {
 			broadcastInRoom(roomId, "countFlashcards", contentService.countFlashcardsForUserInternal(roomId));
-- 
GitLab