From a1018817c4314f25dbea2cbd1fc16de0a14e461d Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Sat, 11 Aug 2018 12:09:11 +0200
Subject: [PATCH] Use v3 Content for v2 -> v3 migration for Answers

---
 .../controller/v2/ContentController.java      |  6 ++--
 .../entities/migration/FromV2Migrator.java    | 25 ++++++---------
 .../migration/FromV2MigratorTest.java         | 31 ++++++++++---------
 3 files changed, 27 insertions(+), 35 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/controller/v2/ContentController.java b/src/main/java/de/thm/arsnova/controller/v2/ContentController.java
index 3cd08b75c..a0b71d115 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/ContentController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/ContentController.java
@@ -508,8 +508,7 @@ public class ContentController extends PaginationController {
 			final HttpServletResponse response
 			) {
 		final de.thm.arsnova.entities.Content content = contentService.get(contentId);
-		final Content contentV2 = toV2Migrator.migrate(content);
-		final de.thm.arsnova.entities.Answer answerV3 = fromV2Migrator.migrate(answer, contentV2);
+		final de.thm.arsnova.entities.Answer answerV3 = fromV2Migrator.migrate(answer, content);
 
 		if (answerV3 instanceof TextAnswer) {
 			return toV2Migrator.migrate((TextAnswer) answerService.saveAnswer(contentId, answerV3));
@@ -528,8 +527,7 @@ public class ContentController extends PaginationController {
 			final HttpServletResponse response
 			) {
 		final de.thm.arsnova.entities.Content content = contentService.get(contentId);
-		final Content contentV2 = toV2Migrator.migrate(content);
-		final de.thm.arsnova.entities.Answer answerV3 = fromV2Migrator.migrate(answer, contentV2);
+		final de.thm.arsnova.entities.Answer answerV3 = fromV2Migrator.migrate(answer, content);
 
 		if (answerV3 instanceof TextAnswer) {
 			return toV2Migrator.migrate((TextAnswer) answerService.updateAnswer(answerV3));
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 7456ca70b..cd5295931 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
@@ -228,23 +228,16 @@ public class FromV2Migrator {
 		return to;
 	}
 
-	public de.thm.arsnova.entities.Answer migrate(final Answer from, final Content content) {
-		switch (content.getQuestionType()) {
-			case V2_TYPE_ABCD:
-			case V2_TYPE_VOTE:
-			case V2_TYPE_SCHOOL:
-			case V2_TYPE_YESNO:
-				return migrate(from, content.getPossibleAnswers(), false);
-			case V2_TYPE_MC:
-				return migrate(from, content.getPossibleAnswers(), true);
-			case V2_TYPE_FREETEXT:
-				return migrate(from);
-			default:
-				throw new IllegalArgumentException("Unsupported content format.");
+	public de.thm.arsnova.entities.Answer migrate(final Answer from, final de.thm.arsnova.entities.Content content) {
+		if (content instanceof ChoiceQuestionContent) {
+			ChoiceQuestionContent choiceQuestionContent = (ChoiceQuestionContent) content;
+			return migrate(from, choiceQuestionContent.getOptions(), choiceQuestionContent.isMultiple());
+		} else {
+			return migrate(from);
 		}
 	}
 
-	public ChoiceAnswer migrate(final Answer from, final List<AnswerOption> options, final boolean multiple) {
+	public ChoiceAnswer migrate(final Answer from, final List<ChoiceQuestionContent.AnswerOption> options, final boolean multiple) {
 		final ChoiceAnswer to = new ChoiceAnswer();
 		copyCommonProperties(from, to);
 		to.setContentId(from.getQuestionId());
@@ -270,8 +263,8 @@ public class FromV2Migrator {
 				}
 			} else {
 				int i = 0;
-				for (AnswerOption option : options) {
-					if (option.getText().equals(from.getAnswerText())) {
+				for (ChoiceQuestionContent.AnswerOption option : options) {
+					if (option.getLabel().equals(from.getAnswerText())) {
 						selectedChoiceIndexes.add(i);
 						break;
 					}
diff --git a/src/test/java/de/thm/arsnova/entities/migration/FromV2MigratorTest.java b/src/test/java/de/thm/arsnova/entities/migration/FromV2MigratorTest.java
index e958da87a..fa1c2c82b 100644
--- a/src/test/java/de/thm/arsnova/entities/migration/FromV2MigratorTest.java
+++ b/src/test/java/de/thm/arsnova/entities/migration/FromV2MigratorTest.java
@@ -22,9 +22,9 @@ import de.thm.arsnova.config.TestAppConfig;
 import de.thm.arsnova.config.TestPersistanceConfig;
 import de.thm.arsnova.config.TestSecurityConfig;
 import de.thm.arsnova.entities.ChoiceAnswer;
+import de.thm.arsnova.entities.ChoiceQuestionContent;
+import de.thm.arsnova.entities.Content;
 import de.thm.arsnova.entities.migration.v2.Answer;
-import de.thm.arsnova.entities.migration.v2.AnswerOption;
-import de.thm.arsnova.entities.migration.v2.Content;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -49,7 +49,7 @@ public class FromV2MigratorTest {
 	private static final String ANSWER_ID = "answerId";
 	private static final String CONTENT_ID = "contentId";
 	private static final String ROOM_ID = "roomId";
-	private static final String TYPE = "mc";
+	private static final Content.Format FORMAT = Content.Format.CHOICE;
 	private static final String OPTION1_LABEL = "option1";
 	private static final String OPTION2_LABEL = "option2";
 	private static final String OPTION3_LABEL = "option3";
@@ -67,27 +67,28 @@ public class FromV2MigratorTest {
 		answerV2.setPiRound(ROUND);
 		answerV2.setAnswerText("0,1,1");
 
-		List<AnswerOption> options = new ArrayList<>();
-		AnswerOption option1 = new AnswerOption();
-		option1.setText(OPTION1_LABEL);
+		List<ChoiceQuestionContent.AnswerOption> options = new ArrayList<>();
+		ChoiceQuestionContent.AnswerOption option1 = new ChoiceQuestionContent.AnswerOption();
+		option1.setLabel(OPTION1_LABEL);
 		options.add(option1);
-		AnswerOption option2 = new AnswerOption();
-		option2.setText(OPTION2_LABEL);
+		ChoiceQuestionContent.AnswerOption option2 = new ChoiceQuestionContent.AnswerOption();
+		option2.setLabel(OPTION2_LABEL);
 		options.add(option2);
-		AnswerOption option3 = new AnswerOption();
-		option3.setText(OPTION3_LABEL);
+		ChoiceQuestionContent.AnswerOption option3 = new ChoiceQuestionContent.AnswerOption();
+		option3.setLabel(OPTION3_LABEL);
 		options.add(option3);
 
-		Content contentV2 = new Content();
-		contentV2.setQuestionType(TYPE);
-		contentV2.setSessionId(ROOM_ID);
-		contentV2.setPossibleAnswers(options);
+		ChoiceQuestionContent content = new ChoiceQuestionContent();
+		content.setFormat(FORMAT);
+		content.setRoomId(ROOM_ID);
+		content.setMultiple(true);
+		content.setOptions(options);
 
 		List<Integer> selectedChoices = new ArrayList<>();
 		selectedChoices.add(1);
 		selectedChoices.add(2);
 
-		ChoiceAnswer answerV3 = (ChoiceAnswer) fromV2Migrator.migrate(answerV2, contentV2);
+		ChoiceAnswer answerV3 = (ChoiceAnswer) fromV2Migrator.migrate(answerV2, content);
 
 		assertEquals(ANSWER_ID, answerV3.getId());
 		assertEquals(CONTENT_ID, answerV3.getContentId());
-- 
GitLab