From fd0a48b913a07e6a6d1bde08fa3c453f1ee95155 Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Tue, 5 Sep 2017 14:58:20 +0200
Subject: [PATCH] Refactor API/entities for comments

---
 .../arsnova/controller/CommentController.java |   6 +-
 .../java/de/thm/arsnova/entities/Comment.java | 109 +++++---------
 .../entities/migration/V2Migrator.java        |  17 +++
 .../entities/migration/v2/Comment.java        | 134 ++++++++++++++++++
 .../v2}/CommentReadingCount.java              |   2 +-
 .../CouchDbTypeFieldConverter.java            |   2 +-
 .../transport/ImportExportSession.java        |   2 +-
 .../arsnova/events/DeleteCommentEvent.java    |   2 +-
 .../thm/arsnova/events/NewCommentEvent.java   |   2 +-
 .../persistance/CommentRepository.java        |   4 +-
 .../couchdb/CouchDbCommentRepository.java     |   4 +-
 .../couchdb/CouchDbSessionRepository.java     |   2 +-
 .../ApplicationPermissionEvaluator.java       |   2 +-
 .../thm/arsnova/services/CommentService.java  |   4 +-
 .../arsnova/services/CommentServiceImpl.java  |   4 +-
 .../websocket/ArsnovaSocketioServerImpl.java  |   2 +-
 16 files changed, 208 insertions(+), 90 deletions(-)
 create mode 100644 src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java
 rename src/main/java/de/thm/arsnova/entities/{ => migration/v2}/CommentReadingCount.java (97%)

diff --git a/src/main/java/de/thm/arsnova/controller/CommentController.java b/src/main/java/de/thm/arsnova/controller/CommentController.java
index b074df1c4..33e0d2e94 100644
--- a/src/main/java/de/thm/arsnova/controller/CommentController.java
+++ b/src/main/java/de/thm/arsnova/controller/CommentController.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.controller;
 
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.CommentReadingCount;
+import de.thm.arsnova.entities.migration.v2.Comment;
+import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
 import de.thm.arsnova.exceptions.BadRequestException;
 import de.thm.arsnova.services.CommentService;
 import de.thm.arsnova.web.DeprecatedApi;
@@ -93,7 +93,7 @@ public class CommentController extends PaginationController {
 	@ResponseStatus(HttpStatus.CREATED)
 	public void postInterposedQuestion(
 			@ApiParam(value = "Session-Key from current session", required = true) @RequestParam final String sessionkey,
-			@ApiParam(value = "the body from the new comment", required = true) @RequestBody final de.thm.arsnova.entities.Comment comment
+			@ApiParam(value = "the body from the new comment", required = true) @RequestBody final Comment comment
 			) {
 		if (commentService.save(comment)) {
 			return;
diff --git a/src/main/java/de/thm/arsnova/entities/Comment.java b/src/main/java/de/thm/arsnova/entities/Comment.java
index 4d69e84cd..4d692bce7 100644
--- a/src/main/java/de/thm/arsnova/entities/Comment.java
+++ b/src/main/java/de/thm/arsnova/entities/Comment.java
@@ -1,132 +1,99 @@
-/*
- * This file is part of ARSnova Backend.
- * Copyright (C) 2012-2018 The ARSnova Team and Contributors
- *
- * 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;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import de.thm.arsnova.entities.serialization.View;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
 
-/**
- * A question the user is asking the teacher. Also known as comment, feedback or audience question.
- */
-@ApiModel(value = "comment", description = "the comment entity")
 public class Comment implements Entity {
 	private String id;
 	private String rev;
-	private String subject;
-	private String text;
-	/* FIXME sessionId actually is used to hold the sessionKey.
-	 * This really needs to be changed because it leads to a lot
-	 * of confusion. It can not be easily changed without a lot of
-	 * refactoring since the client application depends on the
-	 * current naming */
 	private String sessionId;
+	private String creatorId;
+	private String subject;
+	private String body;
 	private long timestamp;
 	private boolean read;
-	private String creator;
 
+	@Override
 	@JsonView({View.Persistence.class, View.Public.class})
 	public String getId() {
 		return id;
 	}
 
+	@Override
 	@JsonView({View.Persistence.class, View.Public.class})
 	public void setId(final String id) {
 		this.id = id;
 	}
 
+	@Override
+	@JsonView({View.Persistence.class, View.Public.class})
+	public String getRevision() {
+		return rev;
+	}
+
+	@Override
 	@JsonView({View.Persistence.class, View.Public.class})
 	public void setRevision(final String rev) {
 		this.rev = rev;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public String getRevision() {
-		return rev;
+	public String getSessionId() {
+		return sessionId;
 	}
 
-	@ApiModelProperty(required = true, value = "is read")
-	@JsonView({View.Persistence.class, View.Public.class})
-	public boolean isRead() {
-		return read;
+	@JsonView(View.Persistence.class)
+	public void setSessionId(final String sessionId) {
+		this.sessionId = sessionId;
 	}
 
-	@JsonView({View.Persistence.class, View.Public.class})
-	public void setRead(boolean read) {
-		this.read = read;
+	@JsonView(View.Persistence.class)
+	public String getCreatorId() {
+		return creatorId;
+	}
+
+	@JsonView(View.Persistence.class)
+	public void setCreatorId(final String creatorId) {
+		this.creatorId = creatorId;
 	}
 
-	@ApiModelProperty(required = true, value = "the subject")
 	@JsonView({View.Persistence.class, View.Public.class})
 	public String getSubject() {
 		return subject;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public void setSubject(String subject) {
+	public void setSubject(final String subject) {
 		this.subject = subject;
 	}
 
-	@ApiModelProperty(required = true, value = "the Text")
 	@JsonView({View.Persistence.class, View.Public.class})
-	public String getText() {
-		return text;
+	public String getBody() {
+		return body;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public void setText(String text) {
-		this.text = text;
-	}
-
-	@ApiModelProperty(required = true, value = "ID of the session, the comment is assigned to")
-	@JsonView(View.Persistence.class)
-	public String getSessionId() {
-		return sessionId;
+	public void setBody(final String body) {
+		this.body = body;
 	}
 
-	@JsonView({View.Persistence.class, View.Public.class})
-	public void setSessionId(String sessionId) {
-		this.sessionId = sessionId;
-	}
-
-	@ApiModelProperty(required = true, value = "creation date timestamp")
 	@JsonView({View.Persistence.class, View.Public.class})
 	public long getTimestamp() {
 		return timestamp;
 	}
 
-	@JsonView({View.Persistence.class, View.Public.class})
-	public void setTimestamp(long timestamp) {
-		this.timestamp = timestamp;
-	}
-
 	@JsonView(View.Persistence.class)
-	public String getCreator() {
-		return creator;
+	public void setTimestamp(final long timestamp) {
+		this.timestamp = timestamp;
 	}
 
-	@JsonView(View.Persistence.class)
-	public void setCreator(String creator) {
-		this.creator = creator;
+	@JsonView({View.Persistence.class, View.Public.class})
+	public boolean isRead() {
+		return read;
 	}
 
-	public boolean isCreator(User user) {
-		return user.getUsername().equals(creator);
+	@JsonView({View.Persistence.class, View.Public.class})
+	public void setRead(final boolean read) {
+		this.read = read;
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/entities/migration/V2Migrator.java b/src/main/java/de/thm/arsnova/entities/migration/V2Migrator.java
index 93b6aa898..f12beab19 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/V2Migrator.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/V2Migrator.java
@@ -7,6 +7,7 @@ import de.thm.arsnova.entities.Entity;
 import de.thm.arsnova.entities.TextAnswer;
 import de.thm.arsnova.entities.migration.v2.Answer;
 import de.thm.arsnova.entities.migration.v2.AnswerOption;
+import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.migration.v2.Content;
 import de.thm.arsnova.entities.migration.v2.Session;
 
@@ -103,4 +104,20 @@ public class V2Migrator {
 
 		return to;
 	}
+
+	public de.thm.arsnova.entities.Comment migrate(final Comment from, final DbUser creator) {
+		if (!creator.getUsername().equals(from.getCreator())) {
+			throw new IllegalArgumentException("Username of creator object does not match comment creator.");
+		}
+		final de.thm.arsnova.entities.Comment to = new de.thm.arsnova.entities.Comment();
+		copyCommonProperties(from, to);
+		to.setSessionId(from.getSessionId());
+		to.setCreatorId(creator.getId());
+		to.setSubject(from.getSubject());
+		to.setBody(from.getText());
+		to.setTimestamp(from.getTimestamp());
+		to.setRead(from.isRead());
+
+		return to;
+	}
 }
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java
new file mode 100644
index 000000000..f0ea862d6
--- /dev/null
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java
@@ -0,0 +1,134 @@
+/*
+ * This file is part of ARSnova Backend.
+ * Copyright (C) 2012-2017 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.migration.v2;
+
+import com.fasterxml.jackson.annotation.JsonView;
+import de.thm.arsnova.entities.Entity;
+import de.thm.arsnova.entities.User;
+import de.thm.arsnova.entities.serialization.View;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * A question the user is asking the teacher. Also known as comment, feedback or audience question.
+ */
+@ApiModel(value = "comment", description = "the comment entity")
+public class Comment implements Entity {
+	private String id;
+	private String rev;
+	private String subject;
+	private String text;
+	/* FIXME sessionId actually is used to hold the sessionKey.
+	 * This really needs to be changed because it leads to a lot
+	 * of confusion. It can not be easily changed without a lot of
+	 * refactoring since the client application depends on the
+	 * current naming */
+	private String sessionId;
+	private long timestamp;
+	private boolean read;
+	private String creator;
+
+	@JsonView({View.Persistence.class, View.Public.class})
+	public String getId() {
+		return id;
+	}
+
+	@JsonView({View.Persistence.class, View.Public.class})
+	public void setId(final String id) {
+		this.id = id;
+	}
+
+	@JsonView({View.Persistence.class, View.Public.class})
+	public void setRevision(final String rev) {
+		this.rev = rev;
+	}
+
+	@JsonView({View.Persistence.class, View.Public.class})
+	public String getRevision() {
+		return rev;
+	}
+
+	@ApiModelProperty(required = true, value = "is read")
+	@JsonView({View.Persistence.class, View.Public.class})
+	public boolean isRead() {
+		return read;
+	}
+
+	@JsonView({View.Persistence.class, View.Public.class})
+	public void setRead(boolean read) {
+		this.read = read;
+	}
+
+	@ApiModelProperty(required = true, value = "the subject")
+	@JsonView({View.Persistence.class, View.Public.class})
+	public String getSubject() {
+		return subject;
+	}
+
+	@JsonView({View.Persistence.class, View.Public.class})
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+
+	@ApiModelProperty(required = true, value = "the Text")
+	@JsonView({View.Persistence.class, View.Public.class})
+	public String getText() {
+		return text;
+	}
+
+	@JsonView({View.Persistence.class, View.Public.class})
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	@ApiModelProperty(required = true, value = "ID of the session, the comment is assigned to")
+	@JsonView(View.Persistence.class)
+	public String getSessionId() {
+		return sessionId;
+	}
+
+	@JsonView({View.Persistence.class, View.Public.class})
+	public void setSessionId(String sessionId) {
+		this.sessionId = sessionId;
+	}
+
+	@ApiModelProperty(required = true, value = "creation date timestamp")
+	@JsonView({View.Persistence.class, View.Public.class})
+	public long getTimestamp() {
+		return timestamp;
+	}
+
+	@JsonView({View.Persistence.class, View.Public.class})
+	public void setTimestamp(long timestamp) {
+		this.timestamp = timestamp;
+	}
+
+	@JsonView(View.Persistence.class)
+	public String getCreator() {
+		return creator;
+	}
+
+	@JsonView(View.Persistence.class)
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public boolean isCreator(User user) {
+		return user.getUsername().equals(creator);
+	}
+}
diff --git a/src/main/java/de/thm/arsnova/entities/CommentReadingCount.java b/src/main/java/de/thm/arsnova/entities/migration/v2/CommentReadingCount.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/entities/CommentReadingCount.java
rename to src/main/java/de/thm/arsnova/entities/migration/v2/CommentReadingCount.java
index 169b687aa..ef6d4daf5 100644
--- a/src/main/java/de/thm/arsnova/entities/CommentReadingCount.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/CommentReadingCount.java
@@ -15,7 +15,7 @@
  * 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;
+package de.thm.arsnova.entities.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import de.thm.arsnova.entities.serialization.View;
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java
index 69c7ae0f6..1844741bd 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java
+++ b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java
@@ -21,7 +21,7 @@ import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 import com.fasterxml.jackson.databind.util.Converter;
 import de.thm.arsnova.entities.migration.v2.Answer;
-import de.thm.arsnova.entities.Comment;
+import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.DbUser;
 import de.thm.arsnova.entities.Entity;
 import de.thm.arsnova.entities.LogEntry;
diff --git a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
index 3d4e8cccf..88555f38a 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
+++ b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
@@ -19,7 +19,7 @@ package de.thm.arsnova.entities.transport;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import de.thm.arsnova.entities.migration.v2.Answer;
-import de.thm.arsnova.entities.Comment;
+import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.migration.v2.Content;
 import de.thm.arsnova.entities.Motd;
 import de.thm.arsnova.entities.migration.v2.Session;
diff --git a/src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java b/src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java
index 6689ca226..44a5cb644 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java
+++ b/src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.Comment;
+import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.migration.v2.Session;
 
 /**
diff --git a/src/main/java/de/thm/arsnova/events/NewCommentEvent.java b/src/main/java/de/thm/arsnova/events/NewCommentEvent.java
index 5d5c57ff7..345b54c3a 100644
--- a/src/main/java/de/thm/arsnova/events/NewCommentEvent.java
+++ b/src/main/java/de/thm/arsnova/events/NewCommentEvent.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.Comment;
+import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.migration.v2.Session;
 
 /**
diff --git a/src/main/java/de/thm/arsnova/persistance/CommentRepository.java b/src/main/java/de/thm/arsnova/persistance/CommentRepository.java
index 6e97fb98a..8efb72401 100644
--- a/src/main/java/de/thm/arsnova/persistance/CommentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/CommentRepository.java
@@ -1,7 +1,7 @@
 package de.thm.arsnova.persistance;
 
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.CommentReadingCount;
+import de.thm.arsnova.entities.migration.v2.Comment;
+import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
 import de.thm.arsnova.entities.User;
 import org.springframework.data.repository.CrudRepository;
 
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java
index 6276c44fb..f8b878d79 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java
@@ -1,8 +1,8 @@
 package de.thm.arsnova.persistance.couchdb;
 
 import com.fasterxml.jackson.databind.JsonNode;
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.CommentReadingCount;
+import de.thm.arsnova.entities.migration.v2.Comment;
+import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.persistance.CommentRepository;
 import de.thm.arsnova.persistance.LogEntryRepository;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionRepository.java
index 0d55949d1..678027b29 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionRepository.java
@@ -18,7 +18,7 @@
 package de.thm.arsnova.persistance.couchdb;
 
 import de.thm.arsnova.connector.model.Course;
-import de.thm.arsnova.entities.Comment;
+import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.LoggedIn;
 import de.thm.arsnova.entities.migration.v2.Session;
 import de.thm.arsnova.entities.migration.v2.SessionInfo;
diff --git a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
index ce58a7803..e6640a2d7 100644
--- a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
+++ b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.security;
 
-import de.thm.arsnova.entities.Comment;
+import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.migration.v2.Content;
 import de.thm.arsnova.entities.migration.v2.Session;
 import de.thm.arsnova.entities.User;
diff --git a/src/main/java/de/thm/arsnova/services/CommentService.java b/src/main/java/de/thm/arsnova/services/CommentService.java
index 4713dfb8d..1525981ec 100644
--- a/src/main/java/de/thm/arsnova/services/CommentService.java
+++ b/src/main/java/de/thm/arsnova/services/CommentService.java
@@ -1,7 +1,7 @@
 package de.thm.arsnova.services;
 
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.CommentReadingCount;
+import de.thm.arsnova.entities.migration.v2.Comment;
+import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
 import de.thm.arsnova.entities.User;
 
 import java.util.List;
diff --git a/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java b/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
index 4678aff6e..c0fd1fbc0 100644
--- a/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
@@ -1,7 +1,7 @@
 package de.thm.arsnova.services;
 
-import de.thm.arsnova.entities.Comment;
-import de.thm.arsnova.entities.CommentReadingCount;
+import de.thm.arsnova.entities.migration.v2.Comment;
+import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
 import de.thm.arsnova.entities.migration.v2.Session;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.events.DeleteCommentEvent;
diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
index a343a7230..00e52aa8f 100644
--- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
+++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
@@ -28,7 +28,7 @@ import com.corundumstudio.socketio.listener.DataListener;
 import com.corundumstudio.socketio.listener.DisconnectListener;
 import com.corundumstudio.socketio.protocol.Packet;
 import com.corundumstudio.socketio.protocol.PacketType;
-import de.thm.arsnova.entities.Comment;
+import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.ScoreOptions;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.entities.migration.v2.SessionFeature;
-- 
GitLab