Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • arsnova/arsnova-backend
  • pcvl72/arsnova-backend
  • tksl38/arsnova-backend
3 results
Show changes
Commits on Source (12)
Showing
with 594 additions and 566 deletions
......@@ -17,8 +17,8 @@
*/
package de.thm.arsnova.aop;
import de.thm.arsnova.entities.Session;
import de.thm.arsnova.services.UserSessionService;
import de.thm.arsnova.entities.migration.v2.Room;
import de.thm.arsnova.services.UserRoomService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
......@@ -26,23 +26,23 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
/**
* Assigns a session to the {@link de.thm.arsnova.services.UserSessionService} whenever a user joins a
* session.
* Assigns a room to the {@link UserRoomService} whenever a user joins a
* room.
*/
@Aspect
@Configurable
public class UserSessionAspect {
public class UserRoomAspect {
@Autowired
private UserSessionService userSessionService;
private UserRoomService userRoomService;
/** Sets current user and ARSnova session in session scoped UserSessionService
/** Sets current user and ARSnova room in session scoped UserRoomService
*/
@AfterReturning(
pointcut = "execution(public * de.thm.arsnova.services.SessionService.join(..)) && args(keyword)",
returning = "session"
pointcut = "execution(public * de.thm.arsnova.services.RoomService.join(..)) && args(keyword)",
returning = "room"
)
public void joinSessionAdvice(final JoinPoint jp, final String keyword, final Session session) {
userSessionService.setSession(session);
public void joinSessionAdvice(final JoinPoint jp, final String keyword, final Room room) {
userRoomService.setRoom(room);
}
}
......@@ -77,10 +77,10 @@ public class CacheBusterImpl implements CacheBuster, ArsnovaEventVisitor {
public void visit(NewFeedbackEvent event) { }
@Override
public void visit(DeleteFeedbackForSessionsEvent event) { }
public void visit(DeleteFeedbackForRoomsEvent event) { }
@Override
public void visit(StatusSessionEvent event) { }
public void visit(StatusRoomEvent event) { }
@CacheEvict(value = "statistics", allEntries = true)
@Override
......@@ -100,11 +100,11 @@ public class CacheBusterImpl implements CacheBuster, ArsnovaEventVisitor {
@CacheEvict(value = "statistics", allEntries = true)
@Override
public void visit(NewSessionEvent newSessionEvent) { }
public void visit(NewRoomEvent newSessionEvent) { }
@CacheEvict(value = "statistics", allEntries = true)
@Override
public void visit(DeleteSessionEvent deleteSessionEvent) { }
public void visit(DeleteRoomEvent deleteSessionEvent) { }
@Override
public void visit(LockVoteEvent lockVoteEvent) { }
......
......@@ -34,7 +34,7 @@ import org.springframework.stereotype.Component;
@Component
public class ScheduledCacheBuster {
@CacheEvict(value = "sessions", allEntries = true)
@CacheEvict(value = "rooms", allEntries = true)
@Scheduled(initialDelay = 1000 * 25, fixedRate = 1000 * 60 * 60 * 6)
private void clearSessionCache() { }
......
......@@ -20,6 +20,8 @@ package de.thm.arsnova.config;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import de.thm.arsnova.entities.migration.FromV2Migrator;
import de.thm.arsnova.entities.migration.ToV2Migrator;
import de.thm.arsnova.util.ImageUtils;
import de.thm.arsnova.connector.client.ConnectorClient;
import de.thm.arsnova.connector.client.ConnectorClientImpl;
......@@ -284,4 +286,14 @@ public class AppConfig extends WebMvcConfigurerAdapter {
public ImageUtils imageUtils() {
return new ImageUtils();
}
@Bean
public FromV2Migrator fromV2Migrator() {
return new FromV2Migrator();
}
@Bean
public ToV2Migrator toV2Migrator() {
return new ToV2Migrator();
}
}
......@@ -54,8 +54,8 @@ public class PersistanceConfig {
}
@Bean
public SessionRepository sessionRepository() throws Exception {
return new CouchDbSessionRepository(couchDbConnector(), false);
public RoomRepository sessionRepository() throws Exception {
return new CouchDbRoomRepository(couchDbConnector(), false);
}
@Bean
......
......@@ -18,7 +18,7 @@
package de.thm.arsnova.controller;
import de.thm.arsnova.entities.Comment;
import de.thm.arsnova.entities.CommentReadingCount;
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;
......@@ -56,7 +56,7 @@ public class CommentController extends PaginationController {
@RequestMapping(value = "/count", method = RequestMethod.GET)
@DeprecatedApi
@Deprecated
public int getInterposedCount(@ApiParam(value = "Session-Key from current session", required = true) @RequestParam final String sessionkey) {
public int getInterposedCount(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam final String sessionkey) {
return commentService.count(sessionkey);
}
......@@ -65,15 +65,15 @@ public class CommentController extends PaginationController {
@RequestMapping(value = "/readcount", method = RequestMethod.GET)
@DeprecatedApi
@Deprecated
public CommentReadingCount getUnreadInterposedCount(@ApiParam(value = "Session-Key from current session", required = true) @RequestParam("sessionkey") final String sessionkey, String user) {
public CommentReadingCount getUnreadInterposedCount(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam("sessionkey") final String sessionkey, String user) {
return commentService.countRead(sessionkey, user);
}
@ApiOperation(value = "Retrieves all Comments for a Session",
@ApiOperation(value = "Retrieves all Comments for a Room",
nickname = "getInterposedQuestions")
@RequestMapping(value = "/", method = RequestMethod.GET)
@Pagination
public List<Comment> getInterposedQuestions(@ApiParam(value = "Session-Key from current session", required = true) @RequestParam final String sessionkey) {
public List<Comment> getInterposedQuestions(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam final String sessionkey) {
return commentService.getBySessionKey(sessionkey, offset, limit);
}
......@@ -84,7 +84,7 @@ public class CommentController extends PaginationController {
return commentService.getAndMarkRead(questionId);
}
@ApiOperation(value = "Creates a new Comment for a Session and returns the Comment's data",
@ApiOperation(value = "Creates a new Comment for a Room and returns the Comment's data",
nickname = "postInterposedQuestion")
@ApiResponses(value = {
@ApiResponse(code = 400, message = HTML_STATUS_400)
......@@ -92,8 +92,8 @@ public class CommentController extends PaginationController {
@RequestMapping(value = "/", method = RequestMethod.POST)
@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 = "Room-Key from current session", required = true) @RequestParam final String sessionkey,
@ApiParam(value = "the body from the new comment", required = true) @RequestBody final Comment comment
) {
if (commentService.save(comment)) {
return;
......
......@@ -17,14 +17,16 @@
*/
package de.thm.arsnova.controller;
import de.thm.arsnova.util.PaginationListDecorator;
import de.thm.arsnova.entities.Answer;
import de.thm.arsnova.entities.Content;
import de.thm.arsnova.exceptions.BadRequestException;
import de.thm.arsnova.exceptions.ForbiddenException;
import de.thm.arsnova.exceptions.NoContentException;
import de.thm.arsnova.exceptions.NotFoundException;
import de.thm.arsnova.exceptions.NotImplementedException;
import de.thm.arsnova.services.ContentService;
import de.thm.arsnova.services.TimerService;
import de.thm.arsnova.util.PaginationListDecorator;
import de.thm.arsnova.web.DeprecatedApi;
import de.thm.arsnova.web.Pagination;
import io.swagger.annotations.Api;
......@@ -56,6 +58,9 @@ public class ContentController extends PaginationController {
@Autowired
private ContentService contentService;
@Autowired
private TimerService timerService;
@ApiOperation(value = "Get question with provided question Id",
nickname = "getQuestion")
@ApiResponses(value = {
......@@ -125,11 +130,7 @@ public class ContentController extends PaginationController {
@RequestParam(value = "fcImage", defaultValue = "false", required = false) final boolean fcImage
) {
if (fcImage) {
return contentService.getQuestionFcImage(questionId);
} else {
return contentService.getQuestionImage(questionId);
}
throw new NotImplementedException();
}
@RequestMapping(value = "/{questionId}/startnewpiround", method = RequestMethod.POST)
......@@ -139,9 +140,9 @@ public class ContentController extends PaginationController {
) {
if (time == 0) {
contentService.startNewPiRound(questionId, null);
timerService.startNewPiRound(questionId, null);
} else {
contentService.startNewPiRoundDelayed(questionId, time);
timerService.startNewPiRoundDelayed(questionId, time);
}
}
......@@ -151,7 +152,7 @@ public class ContentController extends PaginationController {
public void cancelPiRound(
@PathVariable final String questionId
) {
contentService.cancelPiRoundChange(questionId);
timerService.cancelPiRoundChange(questionId);
}
@RequestMapping(value = "/{questionId}/resetpiroundstate", method = RequestMethod.POST)
......@@ -160,7 +161,7 @@ public class ContentController extends PaginationController {
public void resetPiQuestion(
@PathVariable final String questionId
) {
contentService.resetPiRoundState(questionId);
timerService.resetPiRoundState(questionId);
}
@ApiOperation(value = "Set voting admission on question, identified by provided id",
......@@ -215,7 +216,7 @@ public class ContentController extends PaginationController {
@RequestBody final Content content
) {
if (publish != null) {
content.setActive(publish);
content.getState().setVisible(!publish);
}
contentService.update(content);
}
......@@ -252,7 +253,7 @@ public class ContentController extends PaginationController {
@RequestBody final Content content
) {
if (showStatistics != null) {
content.setShowStatistic(showStatistics);
content.getState().setResponsesVisible(showStatistics);
}
contentService.update(content);
}
......@@ -266,7 +267,7 @@ public class ContentController extends PaginationController {
@RequestBody final Content content
) {
if (showCorrectAnswer != null) {
content.setShowAnswer(showCorrectAnswer);
content.getState().setSolutionVisible(showCorrectAnswer);
}
contentService.update(content);
}
......@@ -296,8 +297,6 @@ public class ContentController extends PaginationController {
if (contents == null || contents.isEmpty()) {
response.setStatus(HttpStatus.NO_CONTENT.value());
return null;
} else if (!requestImageData) {
contents = contentService.replaceImageData(contents);
}
return new PaginationListDecorator<>(contents, offset, limit);
......@@ -485,7 +484,7 @@ public class ContentController extends PaginationController {
final HttpServletResponse response
) {
return contentService.getImage(questionId, answerId);
throw new NotImplementedException();
}
@ApiOperation(value = "Delete answer, identified by question ID and answer ID",
......
......@@ -20,7 +20,7 @@ package de.thm.arsnova.controller;
import de.thm.arsnova.connector.client.ConnectorClient;
import de.thm.arsnova.connector.model.Course;
import de.thm.arsnova.connector.model.UserRole;
import de.thm.arsnova.entities.User;
import de.thm.arsnova.entities.UserAuthentication;
import de.thm.arsnova.exceptions.NotImplementedException;
import de.thm.arsnova.exceptions.UnauthorizedException;
import de.thm.arsnova.services.UserService;
......@@ -54,7 +54,7 @@ public class CourseController extends AbstractController {
@RequestParam(value = "sortby", defaultValue = "name") final String sortby
) {
final User currentUser = userService.getCurrentUser();
final UserAuthentication currentUser = userService.getCurrentUser();
if (currentUser == null || currentUser.getUsername() == null) {
throw new UnauthorizedException();
......
......@@ -18,12 +18,12 @@
package de.thm.arsnova.controller;
import de.thm.arsnova.entities.Feedback;
import de.thm.arsnova.entities.User;
import de.thm.arsnova.entities.UserAuthentication;
import de.thm.arsnova.exceptions.NotFoundException;
import de.thm.arsnova.services.FeedbackService;
import de.thm.arsnova.services.UserService;
import de.thm.arsnova.websocket.ArsnovaSocketioServerImpl;
import de.thm.arsnova.web.DeprecatedApi;
import de.thm.arsnova.websocket.ArsnovaSocketioServerImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.PathVariable;
......@@ -94,7 +94,7 @@ public class FeedbackController extends AbstractController {
@PathVariable final String sessionkey,
@RequestBody final int value
) {
User user = userService.getCurrentUser();
UserAuthentication user = userService.getCurrentUser();
feedbackService.save(sessionkey, value, user);
Feedback feedback = feedbackService.getBySessionKey(sessionkey);
......
......@@ -18,11 +18,11 @@
package de.thm.arsnova.controller;
import de.thm.arsnova.entities.ServiceDescription;
import de.thm.arsnova.entities.Session;
import de.thm.arsnova.entities.User;
import de.thm.arsnova.entities.UserAuthentication;
import de.thm.arsnova.entities.migration.v2.Room;
import de.thm.arsnova.exceptions.UnauthorizedException;
import de.thm.arsnova.services.UserRoomService;
import de.thm.arsnova.services.UserService;
import de.thm.arsnova.services.UserSessionService;
import org.pac4j.core.context.J2EContext;
import org.pac4j.core.exception.HttpAction;
import org.pac4j.oauth.client.FacebookClient;
......@@ -145,7 +145,7 @@ public class LoginController extends AbstractController {
private UserService userService;
@Autowired
private UserSessionService userSessionService;
private UserRoomService userRoomService;
private static final Logger logger = LoggerFactory.getLogger(LoginController.class);
......@@ -161,7 +161,7 @@ public class LoginController extends AbstractController {
@RequestParam("type") final String type,
@RequestParam(value = "user", required = false) String username,
@RequestParam(required = false) final String password,
@RequestParam(value = "role", required = false) final UserSessionService.Role role,
@RequestParam(value = "role", required = false) final UserRoomService.Role role,
final HttpServletRequest request,
final HttpServletResponse response
) throws IOException {
......@@ -172,7 +172,7 @@ public class LoginController extends AbstractController {
return;
}
userSessionService.setRole(role);
userRoomService.setRole(role);
if (dbAuthEnabled && "arsnova".equals(type)) {
Authentication authRequest = new UsernamePasswordAuthenticationToken(username, password);
......@@ -304,8 +304,8 @@ public class LoginController extends AbstractController {
@RequestMapping(value = { "/auth/", "/whoami" }, method = RequestMethod.GET)
@ResponseBody
public User whoami() {
userSessionService.setUser(userService.getCurrentUser());
public UserAuthentication whoami() {
userRoomService.setUser(userService.getCurrentUser());
return userService.getCurrentUser();
}
......@@ -431,8 +431,8 @@ public class LoginController extends AbstractController {
@RequestMapping(value = { "/test/me" }, method = RequestMethod.GET)
@ResponseBody
public User me() {
final User me = userSessionService.getUser();
public UserAuthentication me() {
final UserAuthentication me = userRoomService.getUser();
if (me == null) {
throw new UnauthorizedException();
}
......@@ -441,8 +441,8 @@ public class LoginController extends AbstractController {
@RequestMapping(value = { "/test/mysession" }, method = RequestMethod.GET)
@ResponseBody
public Session mysession() {
final Session mysession = userSessionService.getSession();
public Room mysession() {
final Room mysession = userRoomService.getRoom();
if (mysession == null) {
throw new UnauthorizedException();
}
......@@ -451,8 +451,8 @@ public class LoginController extends AbstractController {
@RequestMapping(value = { "/test/myrole" }, method = RequestMethod.GET)
@ResponseBody
public UserSessionService.Role myrole() {
final UserSessionService.Role myrole = userSessionService.getRole();
public UserRoomService.Role myrole() {
final UserRoomService.Role myrole = userRoomService.getRole();
if (myrole == null) {
throw new UnauthorizedException();
}
......
......@@ -18,7 +18,6 @@
package de.thm.arsnova.controller;
import de.thm.arsnova.entities.Motd;
import de.thm.arsnova.entities.MotdList;
import de.thm.arsnova.services.MotdService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -46,7 +45,6 @@ import java.util.List;
@RequestMapping("/motd")
@Api(value = "/motd", description = "the Motd Controller API")
public class MotdController extends AbstractController {
@Autowired
private MotdService motdService;
......@@ -92,8 +90,8 @@ public class MotdController extends AbstractController {
) {
if (motd != null) {
Motd newMotd;
if ("session".equals(motd.getAudience()) && motd.getSessionkey() != null) {
newMotd = motdService.save(motd.getSessionkey(), motd);
if ("session".equals(motd.getAudience()) && motd.getSessionId() != null) {
newMotd = motdService.save(motd.getSessionId(), motd);
} else {
newMotd = motdService.save(motd);
}
......@@ -109,49 +107,26 @@ public class MotdController extends AbstractController {
}
@ApiOperation(value = "update a message of the day", nickname = "updateMotd")
@RequestMapping(value = "/{motdkey}", method = RequestMethod.PUT)
@RequestMapping(value = "/{motdId}", method = RequestMethod.PUT)
public Motd updateMotd(
@ApiParam(value = "motdkey from current motd", required = true) @PathVariable final String motdkey,
@ApiParam(value = "motdkey from current motd", required = true) @PathVariable final String motdId,
@ApiParam(value = "current motd", required = true) @RequestBody final Motd motd
) {
if ("session".equals(motd.getAudience()) && motd.getSessionkey() != null) {
return motdService.update(motd.getSessionkey(), motd);
if ("session".equals(motd.getAudience()) && motd.getSessionId() != null) {
return motdService.update(motd.getSessionId(), motd);
} else {
return motdService.update(motd);
}
}
@ApiOperation(value = "deletes a message of the day", nickname = "deleteMotd")
@RequestMapping(value = "/{motdkey}", method = RequestMethod.DELETE)
public void deleteMotd(@ApiParam(value = "Motd-key from the message that shall be deleted", required = true) @PathVariable final String motdkey) {
Motd motd = motdService.getByKey(motdkey);
@RequestMapping(value = "/{motdId}", method = RequestMethod.DELETE)
public void deleteMotd(@ApiParam(value = "Motd-key from the message that shall be deleted", required = true) @PathVariable final String motdId) {
Motd motd = motdService.get(motdId);
if ("session".equals(motd.getAudience())) {
motdService.deleteBySessionKey(motd.getSessionkey(), motd);
motdService.deleteBySessionKey(motd.getSessionId(), motd);
} else {
motdService.delete(motd);
}
}
@ApiOperation(value = "get a list of the motdkeys the current user has confirmed to be read")
@RequestMapping(value = "/userlist", method = RequestMethod.GET)
public MotdList getUserMotdList(
@ApiParam(value = "users name", required = true) @RequestParam(value = "username", defaultValue = "null", required = true) final String username) {
return motdService.getMotdListByUsername(username);
}
@ApiOperation(value = "create a list of the motdkeys the current user has confirmed to be read")
@RequestMapping(value = "/userlist", method = RequestMethod.POST)
public MotdList postUserMotdList(
@ApiParam(value = "current motdlist", required = true) @RequestBody final MotdList userMotdList
) {
return motdService.saveMotdList(userMotdList);
}
@ApiOperation(value = "update a list of the motdkeys the current user has confirmed to be read")
@RequestMapping(value = "/userlist", method = RequestMethod.PUT)
public MotdList updateUserMotdList(
@ApiParam(value = "current motdlist", required = true) @RequestBody final MotdList userMotdList
) {
return motdService.updateMotdList(userMotdList);
}
}
......@@ -18,18 +18,14 @@
package de.thm.arsnova.controller;
import de.thm.arsnova.connector.model.Course;
import de.thm.arsnova.entities.Session;
import de.thm.arsnova.entities.SessionFeature;
import de.thm.arsnova.entities.SessionInfo;
import de.thm.arsnova.entities.Room;
import de.thm.arsnova.entities.transport.ImportExportSession;
import de.thm.arsnova.entities.transport.ScoreStatistics;
import de.thm.arsnova.exceptions.UnauthorizedException;
import de.thm.arsnova.services.SessionService;
import de.thm.arsnova.services.RoomService;
import de.thm.arsnova.services.RoomServiceImpl.SessionNameComparator;
import de.thm.arsnova.services.RoomServiceImpl.SessionShortNameComparator;
import de.thm.arsnova.services.UserService;
import de.thm.arsnova.services.SessionServiceImpl.SessionInfoNameComparator;
import de.thm.arsnova.services.SessionServiceImpl.SessionInfoShortNameComparator;
import de.thm.arsnova.services.SessionServiceImpl.SessionNameComparator;
import de.thm.arsnova.services.SessionServiceImpl.SessionShortNameComparator;
import de.thm.arsnova.web.DeprecatedApi;
import de.thm.arsnova.web.Pagination;
import io.swagger.annotations.Api;
......@@ -54,14 +50,14 @@ import java.util.Collections;
import java.util.List;
/**
* Handles requests related to ARSnova sessions.
* Handles requests related to ARSnova rooms.
*/
@RestController
@RequestMapping("/session")
@Api(value = "/session", description = "the Session Controller API")
@Api(value = "/session", description = "the Room Controller API")
public class SessionController extends PaginationController {
@Autowired
private SessionService sessionService;
private RoomService roomService;
@Autowired
private UserService userService;
......@@ -71,23 +67,23 @@ public class SessionController extends PaginationController {
@DeprecatedApi
@Deprecated
@RequestMapping(value = "/{sessionkey}", method = RequestMethod.GET)
public Session joinSession(
@ApiParam(value = "Session-Key from current session", required = true) @PathVariable final String sessionkey,
public Room joinSession(
@ApiParam(value = "Room-Key from current session", required = true) @PathVariable final String sessionkey,
@ApiParam(value = "Adminflag", required = false) @RequestParam(value = "admin", defaultValue = "false") final boolean admin
) {
if (admin) {
return sessionService.getForAdmin(sessionkey);
return roomService.getForAdmin(sessionkey);
} else {
return sessionService.getByKey(sessionkey);
return roomService.getByKey(sessionkey);
}
}
@ApiOperation(value = "deletes a session",
nickname = "deleteSession")
@RequestMapping(value = "/{sessionkey}", method = RequestMethod.DELETE)
public void deleteSession(@ApiParam(value = "Session-Key from current session", required = true) @PathVariable final String sessionkey) {
Session session = sessionService.getByKey(sessionkey);
sessionService.deleteCascading(session);
public void deleteSession(@ApiParam(value = "Room-Key from current session", required = true) @PathVariable final String sessionkey) {
Room room = roomService.getByKey(sessionkey);
roomService.deleteCascading(room);
}
@ApiOperation(value = "count active users",
......@@ -95,11 +91,11 @@ public class SessionController extends PaginationController {
@DeprecatedApi
@Deprecated
@RequestMapping(value = "/{sessionkey}/activeusercount", method = RequestMethod.GET)
public int countActiveUsers(@ApiParam(value = "Session-Key from current session", required = true) @PathVariable final String sessionkey) {
return sessionService.activeUsers(sessionkey);
public int countActiveUsers(@ApiParam(value = "Room-Key from current session", required = true) @PathVariable final String sessionkey) {
return roomService.activeUsers(sessionkey);
}
@ApiOperation(value = "Creates a new Session and returns the Session's data",
@ApiOperation(value = "Creates a new Room and returns the Room's data",
nickname = "postNewSession")
@ApiResponses(value = {
@ApiResponse(code = 201, message = HTML_STATUS_201),
......@@ -107,47 +103,44 @@ public class SessionController extends PaginationController {
})
@RequestMapping(value = "/", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public Session postNewSession(@ApiParam(value = "current session", required = true) @RequestBody final Session session, final HttpServletResponse response) {
if (session != null && session.isCourseSession()) {
public Room postNewSession(@ApiParam(value = "current session", required = true) @RequestBody final Room room, final HttpServletResponse response) {
/* FIXME: migrate LMS course support
if (room != null && room.isCourseSession()) {
final List<Course> courses = new ArrayList<>();
final Course course = new Course();
course.setId(session.getCourseId());
course.setId(room.getCourseId());
courses.add(course);
final int sessionCount = sessionService.countSessionsByCourses(courses);
final int sessionCount = roomService.countSessionsByCourses(courses);
if (sessionCount > 0) {
final String appendix = " (" + (sessionCount + 1) + ")";
session.setName(session.getName() + appendix);
session.setShortName(session.getShortName() + appendix);
room.setName(room.getName() + appendix);
room.setAbbreviation(room.getAbbreviation() + appendix);
}
}
*/
final Session newSession = sessionService.save(session);
roomService.save(room);
if (newSession == null) {
response.setStatus(HttpStatus.SERVICE_UNAVAILABLE.value());
return null;
}
return newSession;
return room;
}
@ApiOperation(value = "updates a session",
nickname = "postNewSession")
@RequestMapping(value = "/{sessionkey}", method = RequestMethod.PUT)
public Session updateSession(
public Room updateSession(
@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
@ApiParam(value = "current session", required = true) @RequestBody final Session session
@ApiParam(value = "current session", required = true) @RequestBody final Room room
) {
return sessionService.update(sessionkey, session);
return roomService.update(sessionkey, room);
}
@ApiOperation(value = "change the session creator (owner)", nickname = "changeSessionCreator")
@RequestMapping(value = "/{sessionkey}/changecreator", method = RequestMethod.PUT)
public Session changeSessionCreator(
public Room changeSessionCreator(
@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
@ApiParam(value = "new session creator", required = true) @RequestBody final String newCreator
) {
return sessionService.updateCreator(sessionkey, newCreator);
return roomService.updateCreator(sessionkey, newCreator);
}
@ApiOperation(value = "Retrieves a list of Sessions",
......@@ -158,7 +151,7 @@ public class SessionController extends PaginationController {
})
@RequestMapping(value = "/", method = RequestMethod.GET)
@Pagination
public List<Session> getSessions(
public List<Room> getSessions(
@ApiParam(value = "ownedOnly", required = true) @RequestParam(value = "ownedonly", defaultValue = "false") final boolean ownedOnly,
@ApiParam(value = "visitedOnly", required = true) @RequestParam(value = "visitedonly", defaultValue = "false") final boolean visitedOnly,
@ApiParam(value = "sortby", required = true) @RequestParam(value = "sortby", defaultValue = "name") final String sortby,
......@@ -166,14 +159,14 @@ public class SessionController extends PaginationController {
"username", defaultValue = "") final String username,
final HttpServletResponse response
) {
List<Session> sessions;
List<Room> rooms;
if (!"".equals(username)) {
try {
if (ownedOnly && !visitedOnly) {
sessions = sessionService.getUserSessions(username);
rooms = roomService.getUserSessions(username);
} else if (visitedOnly && !ownedOnly) {
sessions = sessionService.getUserVisitedSessions(username);
rooms = roomService.getUserVisitedSessions(username);
} else {
response.setStatus(HttpStatus.NOT_IMPLEMENTED.value());
return null;
......@@ -185,9 +178,9 @@ public class SessionController extends PaginationController {
/* TODO implement all parameter combinations, implement use of user parameter */
try {
if (ownedOnly && !visitedOnly) {
sessions = sessionService.getMySessions(offset, limit);
rooms = roomService.getMySessions(offset, limit);
} else if (visitedOnly && !ownedOnly) {
sessions = sessionService.getMyVisitedSessions(offset, limit);
rooms = roomService.getMyVisitedSessions(offset, limit);
} else {
response.setStatus(HttpStatus.NOT_IMPLEMENTED.value());
return null;
......@@ -197,53 +190,53 @@ public class SessionController extends PaginationController {
}
}
if (sessions == null || sessions.isEmpty()) {
if (rooms == null || rooms.isEmpty()) {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
return null;
}
if ("shortname".equals(sortby)) {
Collections.sort(sessions, new SessionShortNameComparator());
Collections.sort(rooms, new SessionShortNameComparator());
} else {
Collections.sort(sessions, new SessionNameComparator());
Collections.sort(rooms, new SessionNameComparator());
}
return sessions;
return rooms;
}
/**
* Returns a list of my own sessions with only the necessary information like name, keyword, or counters.
*/
@ApiOperation(value = "Retrieves a Session",
@ApiOperation(value = "Retrieves a Room",
nickname = "getMySessions")
@ApiResponses(value = {
@ApiResponse(code = 204, message = HTML_STATUS_204)
})
@RequestMapping(value = "/", method = RequestMethod.GET, params = "statusonly=true")
@Pagination
public List<SessionInfo> getMySessions(
public List<Room> getMySessions(
@ApiParam(value = "visitedOnly", required = true) @RequestParam(value = "visitedonly", defaultValue = "false") final boolean visitedOnly,
@ApiParam(value = "sort by", required = false) @RequestParam(value = "sortby", defaultValue = "name") final String sortby,
final HttpServletResponse response
) {
List<SessionInfo> sessions;
List<Room> rooms;
if (!visitedOnly) {
sessions = sessionService.getMySessionsInfo(offset, limit);
rooms = roomService.getMySessionsInfo(offset, limit);
} else {
sessions = sessionService.getMyVisitedSessionsInfo(offset, limit);
rooms = roomService.getMyVisitedSessionsInfo(offset, limit);
}
if (sessions == null || sessions.isEmpty()) {
if (rooms == null || rooms.isEmpty()) {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
return null;
}
if ("shortname".equals(sortby)) {
Collections.sort(sessions, new SessionInfoShortNameComparator());
Collections.sort(rooms, new SessionShortNameComparator());
} else {
Collections.sort(sessions, new SessionInfoNameComparator());
Collections.sort(rooms, new SessionNameComparator());
}
return sessions;
return rooms;
}
@ApiOperation(value = "Retrieves all public pool sessions for the current user",
......@@ -252,10 +245,10 @@ public class SessionController extends PaginationController {
@ApiResponse(code = 204, message = HTML_STATUS_204)
})
@RequestMapping(value = "/publicpool", method = RequestMethod.GET, params = "statusonly=true")
public List<SessionInfo> getMyPublicPoolSessions(
public List<Room> getMyPublicPoolSessions(
final HttpServletResponse response
) {
List<SessionInfo> sessions = sessionService.getMyPublicPoolSessionsInfo();
List<Room> sessions = roomService.getMyPublicPoolSessionsInfo();
if (sessions == null || sessions.isEmpty()) {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
......@@ -271,27 +264,27 @@ public class SessionController extends PaginationController {
@ApiResponse(code = 204, message = HTML_STATUS_204)
})
@RequestMapping(value = "/publicpool", method = RequestMethod.GET)
public List<SessionInfo> getPublicPoolSessions(
public List<Room> getPublicPoolSessions(
final HttpServletResponse response
) {
List<SessionInfo> sessions = sessionService.getPublicPoolSessionsInfo();
List<Room> rooms = roomService.getPublicPoolSessionsInfo();
if (sessions == null || sessions.isEmpty()) {
if (rooms == null || rooms.isEmpty()) {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
return null;
}
return sessions;
return rooms;
}
@ApiOperation(value = "imports a session",
nickname = "importSession")
@RequestMapping(value = "/import", method = RequestMethod.POST)
public SessionInfo importSession(
public Room importSession(
@ApiParam(value = "current session", required = true) @RequestBody final ImportExportSession session,
final HttpServletResponse response
) {
return sessionService.importSession(session);
return roomService.importSession(session);
}
@ApiOperation(value = "export sessions", nickname = "exportSession")
......@@ -305,42 +298,42 @@ public class SessionController extends PaginationController {
List<ImportExportSession> sessions = new ArrayList<>();
ImportExportSession temp;
for (String key : sessionkey) {
sessionService.setActive(key, false);
temp = sessionService.exportSession(key, withAnswerStatistics, withFeedbackQuestions);
roomService.setActive(key, false);
temp = roomService.exportSession(key, withAnswerStatistics, withFeedbackQuestions);
if (temp != null) {
sessions.add(temp);
}
sessionService.setActive(key, true);
roomService.setActive(key, true);
}
return sessions;
}
@ApiOperation(value = "copy a session to the public pool if enabled")
@RequestMapping(value = "/{sessionkey}/copytopublicpool", method = RequestMethod.POST)
public SessionInfo copyToPublicPool(
public Room copyToPublicPool(
@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
@ApiParam(value = "public pool attributes for session", required = true) @RequestBody final de.thm.arsnova.entities.transport.ImportExportSession.PublicPool publicPool
) {
sessionService.setActive(sessionkey, false);
SessionInfo sessionInfo = sessionService.copySessionToPublicPool(sessionkey, publicPool);
sessionService.setActive(sessionkey, true);
return sessionInfo;
roomService.setActive(sessionkey, false);
Room roomInfo = roomService.copySessionToPublicPool(sessionkey, publicPool);
roomService.setActive(sessionkey, true);
return roomInfo;
}
@ApiOperation(value = "Locks or unlocks a Session",
@ApiOperation(value = "Locks or unlocks a Room",
nickname = "lockSession")
@ApiResponses(value = {
@ApiResponse(code = 404, message = HTML_STATUS_404)
})
@RequestMapping(value = "/{sessionkey}/lock", method = RequestMethod.POST)
public Session lockSession(
public Room lockSession(
@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
@ApiParam(value = "lock", required = true) @RequestParam(required = false) final Boolean lock,
final HttpServletResponse response
) {
if (lock != null) {
return sessionService.setActive(sessionkey, lock);
return roomService.setActive(sessionkey, lock);
}
response.setStatus(HttpStatus.NOT_FOUND.value());
return null;
......@@ -355,7 +348,7 @@ public class SessionController extends PaginationController {
@ApiParam(value = "question variant", required = false) @RequestParam(value = "questionVariant", required = false) final String questionVariant,
final HttpServletResponse response
) {
return sessionService.getLearningProgress(sessionkey, type, questionVariant);
return roomService.getLearningProgress(sessionkey, type, questionVariant);
}
@ApiOperation(value = "retrieves a value for the learning progress for the current user",
......@@ -367,28 +360,28 @@ public class SessionController extends PaginationController {
@RequestParam(value = "questionVariant", required = false) final String questionVariant,
final HttpServletResponse response
) {
return sessionService.getMyLearningProgress(sessionkey, type, questionVariant);
return roomService.getMyLearningProgress(sessionkey, type, questionVariant);
}
@ApiOperation(value = "retrieves all session features",
nickname = "getSessionFeatures")
@RequestMapping(value = "/{sessionkey}/features", method = RequestMethod.GET)
public SessionFeature getSessionFeatures(
public Room.Settings getSessionFeatures(
@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
final HttpServletResponse response
) {
return sessionService.getFeatures(sessionkey);
return roomService.getFeatures(sessionkey);
}
@RequestMapping(value = "/{sessionkey}/features", method = RequestMethod.PUT)
@ApiOperation(value = "change all session features",
nickname = "changeSessionFeatures")
public SessionFeature changeSessionFeatures(
public Room.Settings changeSessionFeatures(
@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
@ApiParam(value = "session feature", required = true) @RequestBody final SessionFeature features,
@ApiParam(value = "session feature", required = true) @RequestBody final Room.Settings features,
final HttpServletResponse response
) {
return sessionService.updateFeatures(sessionkey, features);
return roomService.updateFeatures(sessionkey, features);
}
@RequestMapping(value = "/{sessionkey}/lockfeedbackinput", method = RequestMethod.POST)
......@@ -399,7 +392,7 @@ public class SessionController extends PaginationController {
@ApiParam(value = "lock", required = true) @RequestParam(required = true) final Boolean lock,
final HttpServletResponse response
) {
return sessionService.lockFeedbackInput(sessionkey, lock);
return roomService.lockFeedbackInput(sessionkey, lock);
}
@RequestMapping(value = "/{sessionkey}/flipflashcards", method = RequestMethod.POST)
......@@ -410,7 +403,7 @@ public class SessionController extends PaginationController {
@ApiParam(value = "flip", required = true) @RequestParam(required = true) final Boolean flip,
final HttpServletResponse response
) {
return sessionService.flipFlashcards(sessionkey, flip);
return roomService.flipFlashcards(sessionkey, flip);
}
/* internal redirections */
......
......@@ -17,9 +17,9 @@
*/
package de.thm.arsnova.controller;
import de.thm.arsnova.entities.User;
import de.thm.arsnova.entities.UserAuthentication;
import de.thm.arsnova.services.UserRoomService;
import de.thm.arsnova.services.UserService;
import de.thm.arsnova.services.UserSessionService;
import de.thm.arsnova.websocket.ArsnovaSocketioServer;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -52,7 +52,7 @@ public class SocketController extends AbstractController {
private UserService userService;
@Autowired
private UserSessionService userSessionService;
private UserRoomService userRoomService;
@Autowired
private ArsnovaSocketioServer server;
......@@ -74,14 +74,14 @@ public class SocketController extends AbstractController {
response.setStatus(HttpStatus.BAD_REQUEST.value());
return;
}
User u = userService.getCurrentUser();
UserAuthentication u = userService.getCurrentUser();
if (null == u) {
logger.debug("Client {} requested to assign Websocket session but has not authenticated.", socketid);
response.setStatus(HttpStatus.FORBIDDEN.value());
return;
}
userService.putUser2SocketId(UUID.fromString(socketid), u);
userSessionService.setSocketId(UUID.fromString(socketid));
userRoomService.setSocketId(UUID.fromString(socketid));
response.setStatus(HttpStatus.NO_CONTENT.value());
}
......
......@@ -17,9 +17,9 @@
*/
package de.thm.arsnova.controller;
import de.thm.arsnova.entities.DbUser;
import de.thm.arsnova.entities.UserProfile;
import de.thm.arsnova.services.UserRoomService;
import de.thm.arsnova.services.UserService;
import de.thm.arsnova.services.UserSessionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.stereotype.Controller;
......@@ -44,7 +44,7 @@ public class UserController extends AbstractController {
private UserService userService;
@Autowired
private UserSessionService userSessionService;
private UserRoomService userRoomService;
@RequestMapping(value = "/register", method = RequestMethod.POST)
public void register(@RequestParam final String username,
......@@ -64,10 +64,10 @@ public class UserController extends AbstractController {
@PathVariable final String username,
@RequestParam final String key, final HttpServletRequest request,
final HttpServletResponse response) {
DbUser dbUser = userService.getByUsername(username);
if (null != dbUser && key.equals(dbUser.getActivationKey())) {
dbUser.setActivationKey(null);
userService.update(dbUser);
UserProfile userProfile = userService.getByUsername(username);
if (null != userProfile && key.equals(userProfile.getAccount().getActivationKey())) {
userProfile.getAccount().setActivationKey(null);
userService.update(userProfile);
return;
}
......@@ -92,15 +92,15 @@ public class UserController extends AbstractController {
@RequestParam(required = false) final String password,
final HttpServletRequest request,
final HttpServletResponse response) {
DbUser dbUser = userService.getByUsername(username);
if (null == dbUser) {
UserProfile userProfile = userService.getByUsername(username);
if (null == userProfile) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
if (null != key) {
if (!userService.resetPassword(dbUser, key, password)) {
if (!userService.resetPassword(userProfile, key, password)) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
}
} else {
......
/*
* 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;
import com.fasterxml.jackson.annotation.JsonIgnore;
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.io.Serializable;
import java.util.Date;
import java.util.Map;
/**
* Both a regular (single choice, evaluation, etc.) as well as a freetext answer.
*
* This class has additional fields to transport generated answer statistics.
*/
@ApiModel(value = "Answer", description = "the answer entity")
public class Answer implements Entity {
public abstract class Answer implements Entity {
private String id;
private String rev;
private String type;
private String sessionId;
private String questionId;
private String answerText;
private String answerTextRaw;
private String answerSubject;
private boolean successfulFreeTextAnswer;
private String questionVariant;
private int questionValue;
private int piRound;
private String user;
private long timestamp;
private boolean read;
private int answerCount = 1;
private boolean abstention;
private int abstentionCount;
@JsonIgnore
private String answerImage;
private String answerThumbnailImage;
private Date creationTimestamp;
private Date updateTimestamp;
private String contentId;
private String roomId;
private String creatorId;
private int round;
private Map<String, Map<String, ?>> extensions;
public Answer() {
this.type = "skill_question_answer";
}
@ApiModelProperty(required = true, value = "the couchDB ID")
@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;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setRevision(final String rev) {
this.rev = rev;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getRevision() {
return rev;
}
@ApiModelProperty(required = true, value = "ID of the session, the answer is assigned to")
@JsonView({View.Persistence.class, View.Public.class})
public final String getSessionId() {
return sessionId;
}
@JsonView({View.Persistence.class, View.Public.class})
public final void setSessionId(final String sessionId) {
this.sessionId = sessionId;
}
@ApiModelProperty(required = true, value = "used to display question id")
@JsonView({View.Persistence.class, View.Public.class})
public final String getQuestionId() {
return questionId;
}
@JsonView({View.Persistence.class, View.Public.class})
public final void setQuestionId(final String questionId) {
this.questionId = questionId;
}
@ApiModelProperty(required = true, value = "the answer text")
@JsonView({View.Persistence.class, View.Public.class})
public final String getAnswerText() {
return answerText;
}
@JsonView({View.Persistence.class, View.Public.class})
public final void setAnswerText(final String answerText) {
this.answerText = answerText;
}
@JsonView({View.Persistence.class, View.Public.class})
public final String getAnswerTextRaw() {
return this.answerTextRaw;
}
@JsonView({View.Persistence.class, View.Public.class})
public final void setAnswerTextRaw(final String answerTextRaw) {
this.answerTextRaw = answerTextRaw;
}
@ApiModelProperty(required = true, value = "the answer subject")
@JsonView({View.Persistence.class, View.Public.class})
public final String getAnswerSubject() {
return answerSubject;
}
@JsonView({View.Persistence.class, View.Public.class})
public final void setAnswerSubject(final String answerSubject) {
this.answerSubject = answerSubject;
}
@JsonView({View.Persistence.class, View.Public.class})
public final boolean isSuccessfulFreeTextAnswer() {
return this.successfulFreeTextAnswer;
}
@JsonView({View.Persistence.class, View.Public.class})
public final void setSuccessfulFreeTextAnswer(final boolean successfulFreeTextAnswer) {
this.successfulFreeTextAnswer = successfulFreeTextAnswer;
}
@ApiModelProperty(required = true, value = "the peer instruction round nr.")
@JsonView({View.Persistence.class, View.Public.class})
public int getPiRound() {
return piRound;
}
@Override
@JsonView({View.Persistence.class, View.Public.class})
public void setPiRound(int piRound) {
this.piRound = piRound;
public void setRevision(final String rev) {
this.rev = rev;
}
@ApiModelProperty(required = true, value = "the user")
@Override
@JsonView(View.Persistence.class)
public final String getUser() {
return user;
}
@JsonView({View.Persistence.class, View.Public.class})
public final void setUser(final String user) {
this.user = user;
public Date getCreationTimestamp() {
return creationTimestamp;
}
@ApiModelProperty(required = true, value = "the answer image")
@Override
@JsonView(View.Persistence.class)
public String getAnswerImage() {
return answerImage;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setAnswerImage(String answerImage) {
this.answerImage = answerImage;
}
@ApiModelProperty(required = true, value = "the answer thumbnail")
@JsonView({View.Persistence.class, View.Public.class})
public String getAnswerThumbnailImage() {
return answerThumbnailImage;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setAnswerThumbnailImage(String answerThumbnailImage) {
this.answerThumbnailImage = answerThumbnailImage;
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@ApiModelProperty(required = true, value = "the creation date timestamp")
@JsonView({View.Persistence.class, View.Public.class})
public long getTimestamp() {
return timestamp;
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@ApiModelProperty(required = true, value = "displays whether the answer is read")
@JsonView({View.Persistence.class, View.Public.class})
public boolean isRead() {
return read;
public String getContentId() {
return contentId;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setRead(boolean read) {
this.read = read;
}
@ApiModelProperty(required = true, value = "the number of answers given. used for statistics")
@JsonView(View.Public.class)
public final int getAnswerCount() {
return answerCount;
public void setContentId(final String contentId) {
this.contentId = contentId;
}
public final void setAnswerCount(final int answerCount) {
this.answerCount = answerCount;
}
@ApiModelProperty(required = true, value = "the abstention")
@JsonView({View.Persistence.class, View.Public.class})
public boolean isAbstention() {
return abstention;
@JsonView(View.Persistence.class)
public String getRoomId() {
return roomId;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setAbstention(boolean abstention) {
this.abstention = abstention;
@JsonView(View.Persistence.class)
public void setRoomId(String roomId) {
this.roomId = roomId;
}
@ApiModelProperty(required = true, value = "the number of abstentions given. used for statistics")
@JsonView(View.Public.class)
public int getAbstentionCount() {
return abstentionCount;
@JsonView(View.Persistence.class)
public String getCreatorId() {
return creatorId;
}
public void setAbstentionCount(int abstentionCount) {
this.abstentionCount = abstentionCount;
public void setCreatorId(final String creatorId) {
this.creatorId = creatorId;
}
@ApiModelProperty(required = true, value = "either lecture or preparation")
@JsonView({View.Persistence.class, View.Public.class})
public String getQuestionVariant() {
return questionVariant;
public int getRound() {
return round;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setQuestionVariant(String questionVariant) {
this.questionVariant = questionVariant;
public void setRound(final int round) {
this.round = round;
}
@ApiModelProperty(required = true, value = "used to display question value")
@JsonView({View.Persistence.class, View.Public.class})
public int getQuestionValue() {
return questionValue;
public Map<String, Map<String, ?>> getExtensions() {
return extensions;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setQuestionValue(int questionValue) {
this.questionValue = questionValue;
}
@Override
public final String toString() {
return "Answer type:'" + type + "'"
+ ", session: " + sessionId
+ ", question: " + questionId
+ ", subject: " + answerSubject
+ ", answerCount: " + answerCount
+ ", answer: " + answerText
+ ", user: " + user;
}
@Override
public int hashCode() {
// auto generated!
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((rev == null) ? 0 : rev.hashCode());
result = prime * result + ((answerSubject == null) ? 0 : answerSubject.hashCode());
result = prime * result + ((answerText == null) ? 0 : answerText.hashCode());
result = prime * result + piRound;
result = prime * result + ((questionId == null) ? 0 : questionId.hashCode());
result = prime * result + ((sessionId == null) ? 0 : sessionId.hashCode());
result = prime * result + (int) (timestamp ^ (timestamp >>> 32));
result = prime * result + ((user == null) ? 0 : user.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
// auto generated!
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Answer other = (Answer) obj;
if (id == null) {
if (other.id != null) {
return false;
}
} else if (!id.equals(other.id)) {
return false;
}
if (rev == null) {
if (other.rev != null) {
return false;
}
} else if (!rev.equals(other.rev)) {
return false;
}
if (answerSubject == null) {
if (other.answerSubject != null) {
return false;
}
} else if (!answerSubject.equals(other.answerSubject)) {
return false;
}
if (answerText == null) {
if (other.answerText != null) {
return false;
}
} else if (!answerText.equals(other.answerText)) {
return false;
}
if (piRound != other.piRound) {
return false;
}
if (questionId == null) {
if (other.questionId != null) {
return false;
}
} else if (!questionId.equals(other.questionId)) {
return false;
}
if (sessionId == null) {
if (other.sessionId != null) {
return false;
}
} else if (!sessionId.equals(other.sessionId)) {
return false;
}
if (timestamp != other.timestamp) {
return false;
}
if (user == null) {
if (other.user != null) {
return false;
}
} else if (!user.equals(other.user)) {
return false;
}
return true;
public void setExtensions(Map<String, Map<String, ?>> extensions) {
this.extensions = extensions;
}
}
package de.thm.arsnova.entities;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View;
import java.util.List;
public class AnswerStatistics {
public class RoundStatistics {
public class Combination {
private int[] selectedChoiceIndexes;
private int count;
}
private int round;
private int[] independentCounts;
private List<Combination> combinatedCounts;
private int abstentionCount;
@JsonView(View.Public.class)
public int getRound() {
return round;
}
public void setRound(int round) {
this.round = round;
}
@JsonView(View.Public.class)
public int[] getIndependentCounts() {
return independentCounts;
}
public void setIndependentCounts(final int[] independentCounts) {
this.independentCounts = independentCounts;
}
@JsonView(View.Public.class)
public List<Combination> getCombinatedCounts() {
return combinatedCounts;
}
public void setCombinatedCounts(List<Combination> combinatedCounts) {
this.combinatedCounts = combinatedCounts;
}
@JsonView(View.Public.class)
public int getAbstentionCount() {
return abstentionCount;
}
public void setAbstentionCount(int abstentionCount) {
this.abstentionCount = abstentionCount;
}
}
public class RoundTransition {
private int roundA;
private int roundB;
private int[] selectedChoiceIndexesA;
private int[] selectedChoiceIndexesB;
private int count;
}
private String contentId;
private List<RoundStatistics> roundStatistics;
private List<RoundTransition> roundTransitions;
@JsonView(View.Public.class)
public String getContentId() {
return contentId;
}
public void setContentId(final String contentId) {
this.contentId = contentId;
}
@JsonView(View.Public.class)
public List<RoundStatistics> getRoundStatistics() {
return roundStatistics;
}
public void setRoundStatistics(List<RoundStatistics> roundStatistics) {
this.roundStatistics = roundStatistics;
}
@JsonView(View.Public.class)
public List<RoundTransition> getRoundTransitions() {
return roundTransitions;
}
public void setRoundTransitions(List<RoundTransition> roundTransitions) {
this.roundTransitions = roundTransitions;
}
}
package de.thm.arsnova.entities;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View;
import java.util.Date;
public class Attachment implements Entity {
private String id;
private String rev;
private Date creationTimestamp;
private Date updateTimestamp;
private String mediaType;
private long size;
private String originalSourceUrl;
private String storageLocation;
@Override
@JsonView({View.Persistence.class, View.Public.class})
public String getId() {
return id;
}
@Override
@JsonView(View.Persistence.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.Public.class)
public void setRevision(final String rev) {
this.rev = rev;
}
@Override
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView({View.Persistence.class, View.Public.class})
public String getMediaType() {
return mediaType;
}
@JsonView(View.Persistence.class)
public void setMediaType(String mediaType) {
this.mediaType = mediaType;
}
@JsonView(View.Persistence.class)
public long getSize() {
return size;
}
@JsonView(View.Persistence.class)
public void setSize(long size) {
this.size = size;
}
@JsonView({View.Persistence.class, View.Public.class})
public String getOriginalSourceUrl() {
return originalSourceUrl;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setOriginalSourceUrl(String originalSourceUrl) {
this.originalSourceUrl = originalSourceUrl;
}
@JsonView(View.Persistence.class)
public String getStorageLocation() {
return storageLocation;
}
@JsonView(View.Persistence.class)
public void setStorageLocation(String storageLocation) {
this.storageLocation = storageLocation;
}
}
package de.thm.arsnova.entities;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View;
import java.util.List;
public class ChoiceAnswer extends Answer {
private List<Integer> selectedChoiceIndexes;
@JsonView({View.Persistence.class, View.Public.class})
public List<Integer> getSelectedChoiceIndexes() {
return selectedChoiceIndexes;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setSelectedChoiceIndexes(final List<Integer> selectedChoiceIndexes) {
this.selectedChoiceIndexes = selectedChoiceIndexes;
}
}
package de.thm.arsnova.entities;
import com.fasterxml.jackson.annotation.JsonView;
import de.thm.arsnova.entities.serialization.View;
import java.util.ArrayList;
import java.util.List;
public class ChoiceQuestionContent extends Content {
public class AnswerOption {
private String label;
private int points;
@JsonView({View.Persistence.class, View.Public.class})
public String getLabel() {
return label;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setLabel(String label) {
this.label = label;
}
@JsonView({View.Persistence.class, View.Public.class})
public int getPoints() {
return points;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setPoints(int points) {
this.points = points;
}
}
private List<AnswerOption> options = new ArrayList<>();
private List<Integer> correctOptionIndexes = new ArrayList<>();
private boolean multiple;
@JsonView({View.Persistence.class, View.Public.class})
public List<AnswerOption> getOptions() {
return options;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setOptions(final List<AnswerOption> options) {
this.options = options;
}
/* TODO: A new JsonView is needed here. */
@JsonView(View.Persistence.class)
public List<Integer> getCorrectOptionIndexes() {
return correctOptionIndexes;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setCorrectOptionIndexes(final List<Integer> correctOptionIndexes) {
this.correctOptionIndexes = correctOptionIndexes;
}
@JsonView({View.Persistence.class, View.Public.class})
public boolean isMultiple() {
return multiple;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setMultiple(final boolean multiple) {
this.multiple = multiple;
}
}
/*
* 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;
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")
import java.util.Date;
import java.util.Map;
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 Date creationTimestamp;
private Date updateTimestamp;
private String sessionId;
private long timestamp;
private String creatorId;
private String subject;
private String body;
private Date timestamp;
private boolean read;
private String creator;
private Map<String, Map<String, ?>> extensions;
@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;
@Override
@JsonView(View.Persistence.class)
public Date getCreationTimestamp() {
return creationTimestamp;
}
@ApiModelProperty(required = true, value = "is read")
@JsonView({View.Persistence.class, View.Public.class})
public boolean isRead() {
return read;
@Override
@JsonView(View.Persistence.class)
public void setCreationTimestamp(final Date creationTimestamp) {
this.creationTimestamp = creationTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public Date getUpdateTimestamp() {
return updateTimestamp;
}
@Override
@JsonView(View.Persistence.class)
public void setUpdateTimestamp(final Date updateTimestamp) {
this.updateTimestamp = updateTimestamp;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setRead(boolean read) {
this.read = read;
public String getSessionId() {
return sessionId;
}
@JsonView(View.Persistence.class)
public void setSessionId(final String sessionId) {
this.sessionId = sessionId;
}
@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;
public Date getTimestamp() {
return timestamp;
}
@ApiModelProperty(required = true, value = "creation date timestamp")
@JsonView({View.Persistence.class, View.Public.class})
public long getTimestamp() {
return timestamp;
@JsonView(View.Persistence.class)
public void setTimestamp(final Date timestamp) {
this.timestamp = timestamp;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
public boolean isRead() {
return read;
}
@JsonView(View.Persistence.class)
public String getCreator() {
return creator;
@JsonView({View.Persistence.class, View.Public.class})
public void setRead(final boolean read) {
this.read = read;
}
@JsonView(View.Persistence.class)
public void setCreator(String creator) {
this.creator = creator;
@JsonView({View.Persistence.class, View.Public.class})
public Map<String, Map<String, ?>> getExtensions() {
return extensions;
}
public boolean isCreator(User user) {
return user.getUsername().equals(creator);
@JsonView({View.Persistence.class, View.Public.class})
public void setExtensions(Map<String, Map<String, ?>> extensions) {
this.extensions = extensions;
}
}