From 7d8e00bf0c549df9f2e74ad7b2c0be04fe70436d Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Sun, 11 Feb 2018 21:54:33 +0100
Subject: [PATCH] Fix Content handling for /v2

---
 .../controller/v2/ContentController.java      | 69 +++++++++++--------
 .../couchdb/CouchDbAnswerRepository.java      |  4 +-
 .../couchdb/CouchDbContentRepository.java     |  7 +-
 .../thm/arsnova/services/ContentService.java  |  3 +-
 .../arsnova/services/ContentServiceImpl.java  | 69 +++++++++----------
 5 files changed, 80 insertions(+), 72 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 9191456fe..7c9721d54 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/ContentController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/ContentController.java
@@ -104,6 +104,8 @@ public class ContentController extends PaginationController {
 	@ResponseStatus(HttpStatus.CREATED)
 	public Content postContent(@RequestBody final Content content) {
 		de.thm.arsnova.entities.Content contentV3 = fromV2Migrator.migrate(content);
+		final String roomId = roomService.getIdByShortId(content.getSessionKeyword());
+		contentV3.setRoomId(roomId);
 		if (contentService.save(contentV3) != null) {
 			return toV2Migrator.migrate(contentV3);
 		}
@@ -132,11 +134,7 @@ public class ContentController extends PaginationController {
 			@PathVariable final String contentId,
 			@RequestBody final Content content
 			) {
-		try {
-			return toV2Migrator.migrate(contentService.update(fromV2Migrator.migrate(content)));
-		} catch (final Exception e) {
-			throw new BadRequestException();
-		}
+		return toV2Migrator.migrate(contentService.update(fromV2Migrator.migrate(content)));
 	}
 
 	@ApiOperation(value = "Start new Pi Round on content, identified by provided id, with an optional time",
@@ -203,8 +201,8 @@ public class ContentController extends PaginationController {
 	public void setVotingAdmissionForAllContents(
 			@RequestParam(value = "sessionkey") final String roomShortId,
 			@RequestParam(value = "disable", defaultValue = "false", required = false) final Boolean disableVote,
-			@RequestParam(value = "lecturequestionsonly", defaultValue = "false", required = false) final boolean lectureContentsOnly,
-			@RequestParam(value = "preparationquestionsonly", defaultValue = "false", required = false) final boolean preparationContentsOnly
+			@RequestParam(value = "lecturequestionsonly", defaultValue = "false", required = false) boolean lectureContentsOnly,
+			@RequestParam(value = "preparationquestionsonly", defaultValue = "false", required = false) boolean preparationContentsOnly
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
 		boolean disable = false;
@@ -214,6 +212,8 @@ public class ContentController extends PaginationController {
 			disable = disableVote;
 		}
 
+		/* FIXME: Content variant is ignored for now */
+		lectureContentsOnly = preparationContentsOnly = false;
 		if (lectureContentsOnly) {
 			contents = contentService.getLectureContents(roomId);
 			contentService.setVotingAdmissions(roomId, disable, contents);
@@ -221,7 +221,8 @@ public class ContentController extends PaginationController {
 			contents = contentService.getPreparationContents(roomId);
 			contentService.setVotingAdmissions(roomId, disable, contents);
 		} else {
-			contentService.setVotingAdmissionForAllContents(roomId, disable);
+			contents = contentService.getByRoomId(roomId);
+			contentService.setVotingAdmissions(roomId, disable, contents);
 		}
 	}
 
@@ -235,7 +236,7 @@ public class ContentController extends PaginationController {
 			) {
 		de.thm.arsnova.entities.Content contentV3 = fromV2Migrator.migrate(content);
 		if (publish != null) {
-			contentV3.getState().setVisible(!publish);
+			contentV3.getState().setVisible(publish);
 		}
 		contentService.update(contentV3);
 	}
@@ -246,13 +247,15 @@ public class ContentController extends PaginationController {
 	public void publishAllContents(
 			@RequestParam(value = "sessionkey") final String roomShortId,
 			@RequestParam(required = false) final Boolean publish,
-			@RequestParam(value = "lecturequestionsonly", defaultValue = "false", required = false) final boolean lectureContentsOnly,
-			@RequestParam(value = "preparationquestionsonly", defaultValue = "false", required = false) final boolean preparationContentsOnly
+			@RequestParam(value = "lecturequestionsonly", defaultValue = "false", required = false) boolean lectureContentsOnly,
+			@RequestParam(value = "preparationquestionsonly", defaultValue = "false", required = false) boolean preparationContentsOnly
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
 		boolean p = publish == null || publish;
 		List<de.thm.arsnova.entities.Content> contents;
 
+		/* FIXME: Content variant is ignored for now */
+		lectureContentsOnly = preparationContentsOnly = false;
 		if (lectureContentsOnly) {
 			contents = contentService.getLectureContents(roomId);
 			contentService.publishContents(roomId, p, contents);
@@ -300,14 +303,16 @@ public class ContentController extends PaginationController {
 	@Pagination
 	public List<Content> getContents(
 			@RequestParam(value = "sessionkey") final String roomShortId,
-			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureContentsOnly,
-			@RequestParam(value = "flashcardsonly", defaultValue = "false") final boolean flashcardsOnly,
-			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationContentsOnly,
-			@RequestParam(value = "requestImageData", defaultValue = "false") final boolean requestImageData,
+			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly,
+			@RequestParam(value = "flashcardsonly", defaultValue = "false") boolean flashcardsOnly,
+			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") boolean preparationContentsOnly,
+			@RequestParam(value = "requestImageData", defaultValue = "false") boolean requestImageData,
 			final HttpServletResponse response
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
 		List<de.thm.arsnova.entities.Content> contents;
+		/* FIXME: Content variant is ignored for now */
+		lectureContentsOnly = preparationContentsOnly = flashcardsOnly = false;
 		if (lectureContentsOnly) {
 			contents = contentService.getLectureContents(roomId);
 		} else if (flashcardsOnly) {
@@ -331,12 +336,14 @@ public class ContentController extends PaginationController {
 	@RequestMapping(value = { "/" }, method = RequestMethod.DELETE)
 	public void deleteContents(
 			@RequestParam(value = "sessionkey") final String roomShortId,
-			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureContentsOnly,
-			@RequestParam(value = "flashcardsonly", defaultValue = "false") final boolean flashcardsOnly,
-			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationContentsOnly,
+			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly,
+			@RequestParam(value = "flashcardsonly", defaultValue = "false") boolean flashcardsOnly,
+			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") boolean preparationContentsOnly,
 			final HttpServletResponse response
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
+		/* FIXME: Content variant is ignored for now */
+		lectureContentsOnly = preparationContentsOnly = flashcardsOnly = false;
 		if (lectureContentsOnly) {
 			contentService.deleteLectureContents(roomId);
 		} else if (preparationContentsOnly) {
@@ -355,12 +362,14 @@ public class ContentController extends PaginationController {
 	@RequestMapping(value = "/count", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getContentCount(
 			@RequestParam(value = "sessionkey") final String roomShortId,
-			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureContentsOnly,
-			@RequestParam(value = "flashcardsonly", defaultValue = "false") final boolean flashcardsOnly,
-			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationContentsOnly
+			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly,
+			@RequestParam(value = "flashcardsonly", defaultValue = "false") boolean flashcardsOnly,
+			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") boolean preparationContentsOnly
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
 		int count = 0;
+		/* FIXME: Content variant is ignored for now */
+		lectureContentsOnly = preparationContentsOnly = flashcardsOnly = false;
 		if (lectureContentsOnly) {
 			count = contentService.countLectureContents(roomId);
 		} else if (preparationContentsOnly) {
@@ -390,11 +399,13 @@ public class ContentController extends PaginationController {
 	@RequestMapping(value = "/unanswered", method = RequestMethod.GET)
 	public List<String> getUnAnsweredContentIds(
 			@RequestParam(value = "sessionkey") final String roomShortId,
-			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureContentsOnly,
-			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationContentsOnly
+			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly,
+			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") boolean preparationContentsOnly
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
 		List<String> answers;
+		/* FIXME: Content variant is ignored for now */
+		lectureContentsOnly = preparationContentsOnly = false;
 		if (lectureContentsOnly) {
 			answers = contentService.getUnAnsweredLectureContentIds(roomId);
 		} else if (preparationContentsOnly) {
@@ -570,11 +581,13 @@ public class ContentController extends PaginationController {
 	@RequestMapping(value = "/answers", method = RequestMethod.DELETE)
 	public void deleteAllContentsAnswers(
 			@RequestParam(value = "sessionkey") final String roomShortId,
-			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureContentsOnly,
-			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationContentsOnly,
+			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly,
+			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") boolean preparationContentsOnly,
 			final HttpServletResponse response
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
+		/* FIXME: Content variant is ignored for now */
+		lectureContentsOnly = preparationContentsOnly = false;
 		if (lectureContentsOnly) {
 			contentService.deleteAllLectureAnswers(roomId);
 		} else if (preparationContentsOnly) {
@@ -658,11 +671,13 @@ public class ContentController extends PaginationController {
 	@RequestMapping(value = "/answercount", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
 	public String getTotalAnswerCount(
 			@RequestParam(value = "sessionkey") final String roomShortId,
-			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureContentsOnly,
-			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationContentsOnly
+			@RequestParam(value = "lecturequestionsonly", defaultValue = "false") boolean lectureContentsOnly,
+			@RequestParam(value = "preparationquestionsonly", defaultValue = "false") boolean preparationContentsOnly
 			) {
 		String roomId = roomService.getIdByShortId(roomShortId);
 		int count = 0;
+		/* FIXME: Content variant is ignored for now */
+		lectureContentsOnly = preparationContentsOnly = false;
 		if (lectureContentsOnly) {
 			count = contentService.countLectureContentAnswers(roomId);
 		} else if (preparationContentsOnly) {
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java
index cd2902c42..706744fdd 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java
@@ -136,8 +136,8 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple
 						.skip(qSkip)
 						.limit(qLimit)
 						//.includeDocs(true)
-						.startKey(ComplexKey.of(contentId))
-						.endKey(ComplexKey.of(contentId, ComplexKey.emptyObject()))
+						.startKey(ComplexKey.of(contentId, ComplexKey.emptyObject()))
+						.endKey(ComplexKey.of(contentId))
 						.descending(true),
 				type);
 
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java
index bf49803be..0659b789d 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java
@@ -46,16 +46,17 @@ public class CouchDbContentRepository extends CouchDbCrudRepository<Content> imp
 
 	@Override
 	public List<Content> findByRoomIdForSpeaker(final String roomId) {
-		return findByRoomIdAndVariantAndActive(new Object[] {roomId}, roomId);
+		return findByRoomIdAndVariantAndActive(roomId);
 	}
 
 	@Override
 	public int countByRoomId(final String roomId) {
 		final ViewResult result = db.queryView(createQuery("by_roomid_group_locked")
 				.startKey(ComplexKey.of(roomId))
-				.endKey(ComplexKey.of(roomId, ComplexKey.emptyObject())));
+				.endKey(ComplexKey.of(roomId, ComplexKey.emptyObject()))
+				.reduce(true));
 
-		return result.getSize();
+		return result.isEmpty() ? 0 : result.getRows().get(0).getValueAsInt();
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/services/ContentService.java b/src/main/java/de/thm/arsnova/services/ContentService.java
index 066fbe87a..5ef3c54a8 100644
--- a/src/main/java/de/thm/arsnova/services/ContentService.java
+++ b/src/main/java/de/thm/arsnova/services/ContentService.java
@@ -23,6 +23,7 @@ import de.thm.arsnova.entities.Content;
 import de.thm.arsnova.entities.TextAnswer;
 import de.thm.arsnova.entities.UserAuthentication;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -137,6 +138,4 @@ public interface ContentService extends EntityService<Content> {
 	void setVotingAdmission(String contentId, boolean disableVoting);
 
 	void setVotingAdmissions(String roomId, boolean disableVoting, List<Content> contents);
-
-	void setVotingAdmissionForAllContents(String roomId, boolean disableVoting);
 }
diff --git a/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java b/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
index 4bf4beefc..6916a1587 100644
--- a/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
@@ -47,6 +47,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -124,7 +125,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	public Content get(final String id) {
 		try {
 			final Content content = super.get(id);
-			if (!"freetext".equals(content.getFormat()) && 0 == content.getState().getRound()) {
+			if (content.getFormat() != Content.Format.TEXT && 0 == content.getState().getRound()) {
 			/* needed for legacy questions whose piRound property has not been set */
 				content.getState().setRound(1);
 			}
@@ -140,9 +141,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@Caching(evict = {@CacheEvict(value = "contentlists", key = "#roomId"),
-			@CacheEvict(value = "lecturecontentlists", key = "#roomId", condition = "#content.getGroup().equals('lecture')"),
-			@CacheEvict(value = "preparationcontentlists", key = "#roomId", condition = "#content.getGroup().equals('preparation')"),
-			@CacheEvict(value = "flashcardcontentlists", key = "#roomId", condition = "#content.getGroup().equals('flashcard')") },
+			@CacheEvict(value = "lecturecontentlists", key = "#roomId", condition = "'lecture'.equals(#content.getGroup())"),
+			@CacheEvict(value = "preparationcontentlists", key = "#roomId", condition = "'preparation'.equals(#content.getGroup())"),
+			@CacheEvict(value = "flashcardcontentlists", key = "#roomId", condition = "'flashcard'.equals(#content.getGroup())") },
 			put = {@CachePut(value = "contents", key = "#content.id")})
 	public Content save(final String roomId, final Content content) {
 		content.setRoomId(roomId);
@@ -161,9 +162,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@PreAuthorize("isAuthenticated()")
 	@Caching(evict = {
 			@CacheEvict(value = "contentlists", allEntries = true),
-			@CacheEvict(value = "lecturecontentlists", allEntries = true, condition = "#content.getGroup().equals('lecture')"),
-			@CacheEvict(value = "preparationcontentlists", allEntries = true, condition = "#content.getGroup().equals('preparation')"),
-			@CacheEvict(value = "flashcardcontentlists", allEntries = true, condition = "#content.getGroup().equals('flashcard')") },
+			@CacheEvict(value = "lecturecontentlists", allEntries = true, condition = "'lecture'.equals(#content.getGroup())"),
+			@CacheEvict(value = "preparationcontentlists", allEntries = true, condition = "'preparation'.equals(#content.getGroup())"),
+			@CacheEvict(value = "flashcardcontentlists", allEntries = true, condition = "'flashcard'.equals(#content.getGroup())") },
 			put = {@CachePut(value = "contents", key = "#content.id")})
 	public Content update(final Content content) {
 		final UserAuthentication user = userService.getCurrentUser();
@@ -177,7 +178,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			throw new UnauthorizedException();
 		}
 
-		if ("freetext".equals(content.getFormat())) {
+		if (content.getFormat() == Content.Format.TEXT) {
 			content.getState().setRound(0);
 		} else if (content.getState().getRound() < 1 || content.getState().getRound() > 2) {
 			content.getState().setRound(oldContent.getState().getRound() > 0 ? oldContent.getState().getRound() : 1);
@@ -223,7 +224,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		final Room room = roomRepository.findOne(content.getRoomId());
 		content.setTimestamp(new Date());
 
-		if ("freetext".equals(content.getFormat())) {
+		if (content.getFormat() == Content.Format.TEXT) {
 			content.getState().setRound(0);
 		} else if (content.getState().getRound() < 1 || content.getState().getRound() > 2) {
 			content.getState().setRound(1);
@@ -256,9 +257,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			@CacheEvict("answerlists"),
 			@CacheEvict(value = "contents", key = "#contentId"),
 			@CacheEvict(value = "contentlists", allEntries = true),
-			@CacheEvict(value = "lecturecontentlists", allEntries = true /*, condition = "#content.getGroup().equals('lecture')"*/),
-			@CacheEvict(value = "preparationcontentlists", allEntries = true /*, condition = "#content.getGroup().equals('preparation')"*/),
-			@CacheEvict(value = "flashcardcontentlists", allEntries = true /*, condition = "#content.getGroup().equals('flashcard')"*/) })
+			@CacheEvict(value = "lecturecontentlists", allEntries = true /*, condition = "'lecture'.equals(#content.getGroup())"*/),
+			@CacheEvict(value = "preparationcontentlists", allEntries = true /*, condition = "'preparation'.equals(#content.getGroup())"*/),
+			@CacheEvict(value = "flashcardcontentlists", allEntries = true /*, condition = "'flashcard'.equals(#content.getGroup())"*/) })
 	public void delete(final String contentId) {
 		final Content content = contentRepository.findOne(contentId);
 		if (content == null) {
@@ -369,30 +370,22 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		if (!room.getOwnerId().equals(user.getId())) {
 			throw new UnauthorizedException();
 		}
-		for (final Content q : contents) {
-			if (!"flashcard".equals(q.getRoomId())) {
-				q.getState().setResponsesEnabled(!disableVoting);
+		/* FIXME: Filter flashcards - flashcard format not yet implemented */
+		//contents.stream().filter(c -> c.getFormat() != Format.?).collect(Collectors.toList());
+		final Map<String, Object> patches = new HashMap<>();
+		patches.put("responsesEnabled", !disableVoting);
+		try {
+			patch(contents, patches, Content::getState);
+			ArsnovaEvent event;
+			if (disableVoting) {
+				event = new LockVotesEvent(this, room, contents);
+			} else {
+				event = new UnlockVotesEvent(this, room, contents);
 			}
+			this.publisher.publishEvent(event);
+		} catch (IOException e) {
+			logger.error("Patching of contents failed", e);
 		}
-		ArsnovaEvent event;
-		if (disableVoting) {
-			event = new LockVotesEvent(this, room, contents);
-		} else {
-			event = new UnlockVotesEvent(this, room, contents);
-		}
-		this.publisher.publishEvent(event);
-	}
-
-	@Override
-	@PreAuthorize("isAuthenticated()")
-	public void setVotingAdmissionForAllContents(final String roomId, final boolean disableVoting) {
-		final UserAuthentication user = getCurrentUser();
-		final Room room = roomRepository.findOne(roomId);
-		if (!room.getOwnerId().equals(user.getId())) {
-			throw new UnauthorizedException();
-		}
-		final List<Content> contents = contentRepository.findByRoomId(room.getId());
-		setVotingAdmissionForAllContents(room.getId(), disableVoting);
 	}
 
 	private Room getRoomWithAuthCheck(final String roomId) {
@@ -529,7 +522,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			return 0;
 		}
 
-		if ("freetext".equals(content.getFormat())) {
+		if (content.getFormat() == Content.Format.TEXT) {
 			return answerRepository.countByContentId(content.getId());
 		} else {
 			return answerRepository.countByContentIdRound(content.getId(), content.getState().getRound());
@@ -600,7 +593,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 				// Room's creator. Locked Questions do not appear in this list.
 				continue;
 			}
-			if (0 == answer.getRound() && !"freetext".equals(content.getFormat())) {
+			if (0 == answer.getRound() && content.getFormat() != Content.Format.TEXT) {
 				answer.setRound(1);
 			}
 
@@ -638,7 +631,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		answer.setQuestionValue(content.calculateValue(answer));
 		*/
 
-		if ("freetext".equals(content.getFormat())) {
+		if (content.getFormat() == Content.Format.TEXT) {
 			answer.setRound(0);
 			/* FIXME: migrate
 			imageUtils.generateThumbnailImage(answer);
@@ -673,7 +666,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 		final Content content = get(answer.getContentId());
 		/* FIXME: migrate
-		if ("freetext".equals(content.getFormat())) {
+		if (content.getFormat() == Content.Format.TEXT) {
 			imageUtils.generateThumbnailImage(realAnswer);
 			content.checkTextStrictOptions(realAnswer);
 		}
-- 
GitLab