GitLab wurde aktualisiert. Dank regelmäßiger Updates bleibt das THM GitLab sicher und Sie profitieren von den neuesten Funktionen. Vielen Dank für Ihre Geduld.

Commit a78eb7fe authored by Daniel Gerhardt's avatar Daniel Gerhardt
Browse files

Remove obsolete transport entities

With the use of JSON views they are no longer necessary.
parent e2155bb9
......@@ -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.transport.Comment;
import de.thm.arsnova.exceptions.BadRequestException;
import de.thm.arsnova.services.CommentService;
import de.thm.arsnova.web.DeprecatedApi;
......@@ -74,14 +74,14 @@ public class CommentController extends PaginationController {
@RequestMapping(value = "/", method = RequestMethod.GET)
@Pagination
public List<Comment> getInterposedQuestions(@ApiParam(value = "Session-Key from current session", required = true) @RequestParam final String sessionkey) {
return Comment.fromList(commentService.getBySessionKey(sessionkey, offset, limit));
return commentService.getBySessionKey(sessionkey, offset, limit);
}
@ApiOperation(value = "Retrieves an Comment",
nickname = "getInterposedQuestion")
@RequestMapping(value = "/{questionId}", method = RequestMethod.GET)
public Comment getInterposedQuestion(@ApiParam(value = "ID of the Comment that needs to be deleted", required = true) @PathVariable final String questionId) {
return new Comment(commentService.getAndMarkRead(questionId));
return commentService.getAndMarkRead(questionId);
}
@ApiOperation(value = "Creates a new Comment for a Session and returns the Comment's data",
......
......@@ -458,7 +458,7 @@ public class ContentController extends PaginationController {
@RequestMapping(value = "/{questionId}/answer/", method = RequestMethod.POST)
public Answer saveAnswer(
@PathVariable final String questionId,
@RequestBody final de.thm.arsnova.entities.transport.Answer answer,
@RequestBody final Answer answer,
final HttpServletResponse response
) {
return contentService.saveAnswer(questionId, answer);
......
/*
* 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.transport;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.Content;
import de.thm.arsnova.entities.User;
import de.thm.arsnova.entities.serialization.View;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
/**
* A user's answer to a question.
*/
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
@ApiModel(value = "session/answer", description = "the Answer API")
public class Answer implements Serializable {
private String answerSubject;
private String answerSubjectRaw;
private String answerText;
private String answerTextRaw;
private double freeTextScore;
private boolean successfulFreeTextAnswer;
private String answerImage;
private boolean abstention;
public Answer() {
}
public Answer(de.thm.arsnova.entities.Answer a) {
answerSubject = a.getAnswerSubject();
answerText = a.getAnswerText();
answerImage = a.getAnswerImage();
abstention = a.isAbstention();
successfulFreeTextAnswer = a.isSuccessfulFreeTextAnswer();
}
@ApiModelProperty(required = true, value = "used to display text answer")
@JsonView(View.Public.class)
public String getAnswerText() {
return answerText;
}
public void setAnswerText(String answerText) {
this.answerText = answerText;
}
@ApiModelProperty(required = true, value = "used to display subject answer")
@JsonView(View.Public.class)
public String getAnswerSubject() {
return answerSubject;
}
public void setAnswerSubject(String answerSubject) {
this.answerSubject = answerSubject;
}
@JsonView(View.Public.class)
public final String getAnswerTextRaw() {
return this.answerTextRaw;
}
public final void setAnswerTextRaw(final String answerTextRaw) {
this.answerTextRaw = answerTextRaw;
}
@JsonView(View.Public.class)
public final String getAnswerSubjectRaw() {
return this.answerSubjectRaw;
}
public final void setAnswerSubjectRaw(final String answerSubjectRaw) {
this.answerSubjectRaw = answerSubjectRaw;
}
@JsonView(View.Public.class)
public final double getFreeTextScore() {
return this.freeTextScore;
}
public final void setFreeTextScore(final double freeTextScore) {
this.freeTextScore = freeTextScore;
}
@ApiModelProperty(required = true, value = "successfulFreeTextAnswer")
public final boolean isSuccessfulFreeTextAnswer() {
return this.successfulFreeTextAnswer;
}
public final void setSuccessfulFreeTextAnswer(final boolean successfulFreeTextAnswer) {
this.successfulFreeTextAnswer = successfulFreeTextAnswer;
}
@ApiModelProperty(required = true, value = "abstention")
@JsonView(View.Public.class)
public boolean isAbstention() {
return abstention;
}
public void setAbstention(boolean abstention) {
this.abstention = abstention;
}
public de.thm.arsnova.entities.Answer generateAnswerEntity(final User user, final Content content) {
// rewrite all fields so that no manipulated data gets written
// only answerText, answerSubject, and abstention are allowed
de.thm.arsnova.entities.Answer theAnswer = new de.thm.arsnova.entities.Answer();
theAnswer.setAnswerSubject(this.getAnswerSubject());
theAnswer.setAnswerText(this.getAnswerText());
theAnswer.setAnswerTextRaw(this.getAnswerTextRaw());
theAnswer.setSessionId(content.getSessionId());
theAnswer.setUser(user.getUsername());
theAnswer.setQuestionId(content.getId());
theAnswer.setTimestamp(new Date().getTime());
theAnswer.setQuestionVariant(content.getQuestionVariant());
theAnswer.setAbstention(this.isAbstention());
// calculate score value after all properties are set
theAnswer.setQuestionValue(content.calculateValue(theAnswer));
theAnswer.setAnswerImage(this.getAnswerImage());
theAnswer.setSuccessfulFreeTextAnswer(this.isSuccessfulFreeTextAnswer());
if ("freetext".equals(content.getQuestionType())) {
theAnswer.setPiRound(0);
} else {
theAnswer.setPiRound(content.getPiRound());
}
return theAnswer;
}
@ApiModelProperty(required = true, value = "used to display image answer")
@JsonView(View.Public.class)
public String getAnswerImage() {
return answerImage;
}
public void setAnswerImage(String answerImage) {
this.answerImage = answerImage;
}
}
/*
* 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.transport;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.ArrayList;
import java.util.List;
/**
* A question a student is asking. Also known as comment, feedback or audience question.
*/
@ApiModel(value = "audiencequestion/{questionId}", description = "the comment API")
public class Comment {
private String id;
private String subject;
private String text;
private long timestamp;
private boolean read;
public static List<Comment> fromList(List<de.thm.arsnova.entities.Comment> comments) {
ArrayList<Comment> transportComments = new ArrayList<>();
for (de.thm.arsnova.entities.Comment comment : comments) {
transportComments.add(new Comment(comment));
}
return transportComments;
}
public Comment(de.thm.arsnova.entities.Comment comment) {
this.id = comment.getId();
this.subject = comment.getSubject();
this.text = comment.getText();
this.timestamp = comment.getTimestamp();
this.read = comment.isRead();
}
public Comment() { }
@ApiModelProperty(required = true, value = "used to display Id")
@JsonView(View.Public.class)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@ApiModelProperty(required = true, value = "used to display Subject")
@JsonView(View.Public.class)
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
@ApiModelProperty(required = true, value = "used to display Text")
@JsonView(View.Public.class)
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@ApiModelProperty(required = true, value = "used to display Timetamp")
@JsonView(View.Public.class)
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
@ApiModelProperty(required = true, value = "is read")
@JsonView(View.Public.class)
public boolean isRead() {
return read;
}
public void setRead(boolean read) {
this.read = read;
}
}
......@@ -18,6 +18,8 @@
package de.thm.arsnova.entities.transport;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.Answer;
import de.thm.arsnova.entities.Comment;
import de.thm.arsnova.entities.Content;
import de.thm.arsnova.entities.Motd;
import de.thm.arsnova.entities.Session;
......
/*
* 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.transport;
/**
* A session's settings regarding the calculation of the score.
*/
public class ScoreOptions {
private String sessionKeyword;
private String type;
private String questionVariant;
public String getSessionKeyword() {
return sessionKeyword;
}
public void setSessionKeyword(String sessionKeyword) {
this.sessionKeyword = sessionKeyword;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getQuestionVariant() {
return questionVariant;
}
public void setQuestionVariant(String questionVariant) {
this.questionVariant = questionVariant;
}
public de.thm.arsnova.entities.ScoreOptions toEntity() {
de.thm.arsnova.entities.ScoreOptions entity = new de.thm.arsnova.entities.ScoreOptions();
entity.setType(this.getType());
entity.setQuestionVariant(this.getQuestionVariant());
return entity;
}
}
......@@ -18,12 +18,12 @@
package de.thm.arsnova.persistance.couchdb;
import de.thm.arsnova.connector.model.Course;
import de.thm.arsnova.entities.Comment;
import de.thm.arsnova.entities.LoggedIn;
import de.thm.arsnova.entities.Session;
import de.thm.arsnova.entities.SessionInfo;
import de.thm.arsnova.entities.User;
import de.thm.arsnova.entities.VisitedSession;
import de.thm.arsnova.entities.transport.Comment;
import de.thm.arsnova.entities.transport.ImportExportSession;
import de.thm.arsnova.exceptions.NotFoundException;
import de.thm.arsnova.persistance.LogEntryRepository;
......
......@@ -78,7 +78,7 @@ public interface ContentService {
void deleteAnswers(String questionId);
Answer saveAnswer(String questionId, de.thm.arsnova.entities.transport.Answer answer);
Answer saveAnswer(String questionId, Answer answer);
Answer updateAnswer(Answer answer);
......
......@@ -712,7 +712,7 @@ public class ContentServiceImpl extends EntityService<Content> implements Conten
@Override
@PreAuthorize("isAuthenticated()")
@CacheEvict(value = "answers", key = "#contentId")
public Answer saveAnswer(final String contentId, final de.thm.arsnova.entities.transport.Answer answer) {
public Answer saveAnswer(final String contentId, final Answer answer) {
final User user = getCurrentUser();
final Content content = get(contentId);
if (content == null) {
......@@ -720,26 +720,32 @@ public class ContentServiceImpl extends EntityService<Content> implements Conten
}
final Session session = sessionRepository.findOne(content.getSessionId());
Answer theAnswer = answer.generateAnswerEntity(user, content);
theAnswer.setUser(user.getUsername());
theAnswer.setQuestionId(content.getId());
theAnswer.setSessionId(session.getId());
answer.setUser(user.getUsername());
answer.setQuestionId(content.getId());
answer.setSessionId(session.getId());
answer.setQuestionVariant(content.getQuestionVariant());
answer.setQuestionValue(content.calculateValue(answer));
answer.setTimestamp(new Date().getTime());
if ("freetext".equals(content.getQuestionType())) {
imageUtils.generateThumbnailImage(theAnswer);
answer.setPiRound(0);
imageUtils.generateThumbnailImage(answer);
if (content.isFixedAnswer() && content.getText() != null) {
theAnswer.setAnswerTextRaw(theAnswer.getAnswerText());
answer.setAnswerTextRaw(answer.getAnswerText());
if (content.isStrictMode()) {
content.checkTextStrictOptions(theAnswer);
content.checkTextStrictOptions(answer);
}
theAnswer.setQuestionValue(content.evaluateCorrectAnswerFixedText(theAnswer.getAnswerTextRaw()));
theAnswer.setSuccessfulFreeTextAnswer(content.isSuccessfulFreeTextAnswer(theAnswer.getAnswerTextRaw()));
answer.setQuestionValue(content.evaluateCorrectAnswerFixedText(answer.getAnswerTextRaw()));
answer.setSuccessfulFreeTextAnswer(content.isSuccessfulFreeTextAnswer(answer.getAnswerTextRaw()));
}
} else {
answer.setPiRound(content.getPiRound());
}
this.answerQueue.offer(new AnswerQueueElement(session, content, theAnswer, user));
this.answerQueue.offer(new AnswerQueueElement(session, content, answer, user));
return theAnswer;
return answer;
}
@Override
......
......@@ -29,8 +29,8 @@ 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.ScoreOptions;
import de.thm.arsnova.entities.User;
import de.thm.arsnova.entities.transport.ScoreOptions;
import de.thm.arsnova.events.*;
import de.thm.arsnova.exceptions.NoContentException;
import de.thm.arsnova.exceptions.NotFoundException;
......@@ -189,15 +189,16 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
}
});
/* TODO: This listener expects a Comment entity but only uses the ID. Reduce transmitted data. */
server.addEventListener(
"readInterposedQuestion",
de.thm.arsnova.entities.transport.Comment.class,
new DataListener<de.thm.arsnova.entities.transport.Comment>() {
Comment.class,
new DataListener<Comment>() {
@Override
@Timed(name = "readInterposedQuestionEvent.onData")
public void onData(
SocketIOClient client,
de.thm.arsnova.entities.transport.Comment comment,
Comment comment,
AckRequest ackRequest) {
final User user = userService.getUser2SocketId(client.getSessionId());
try {
......@@ -228,11 +229,12 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
@Timed(name = "setLearningProgressOptionsEvent.onData")
public void onData(SocketIOClient client, ScoreOptions scoreOptions, AckRequest ack) {
final User user = userService.getUser2SocketId(client.getSessionId());
final de.thm.arsnova.entities.Session session = sessionService.getInternal(scoreOptions.getSessionKeyword(), user);
final String sessionKey = userService.getSessionByUsername(user.getUsername());
final de.thm.arsnova.entities.Session session = sessionService.getInternal(sessionKey, user);
if (session.isCreator(user)) {
session.setLearningProgressOptions(scoreOptions.toEntity());
session.setLearningProgressOptions(scoreOptions);
sessionService.updateInternal(session, user);
broadcastInSession(session.getKeyword(), "learningProgressOptions", scoreOptions.toEntity());
broadcastInSession(session.getKeyword(), "learningProgressOptions", scoreOptions);
}
}
});
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment