From 58bff39cf5b02436f613c8991c62d64544d81d06 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de> Date: Wed, 4 Jun 2014 10:07:00 +0200 Subject: [PATCH] Cutting dependency between SessionController and UserService --- .../arsnova/controller/CourseController.java | 3 +-- .../controller/FoodVoteController.java | 5 ++-- .../arsnova/controller/SessionController.java | 18 ++++--------- .../thm/arsnova/services/ISessionService.java | 11 ++++---- .../de/thm/arsnova/services/IUserService.java | 2 -- .../thm/arsnova/services/SessionService.java | 25 +++++++++++-------- .../de/thm/arsnova/services/UserService.java | 5 ---- .../services/UserSessionServiceImpl.java | 8 ------ .../arsnova/socket/ARSnovaSocketIOServer.java | 4 +-- .../arsnova/services/SessionServiceTest.java | 6 ++--- 10 files changed, 34 insertions(+), 53 deletions(-) diff --git a/src/main/java/de/thm/arsnova/controller/CourseController.java b/src/main/java/de/thm/arsnova/controller/CourseController.java index b6178e36..ff424e7a 100644 --- a/src/main/java/de/thm/arsnova/controller/CourseController.java +++ b/src/main/java/de/thm/arsnova/controller/CourseController.java @@ -43,8 +43,7 @@ import de.thm.arsnova.services.IUserService; @RestController public class CourseController extends AbstractController { - public static final Logger LOGGER = LoggerFactory - .getLogger(CourseController.class); + public static final Logger LOGGER = LoggerFactory.getLogger(CourseController.class); @Autowired(required = false) private ConnectorClient connectorClient; diff --git a/src/main/java/de/thm/arsnova/controller/FoodVoteController.java b/src/main/java/de/thm/arsnova/controller/FoodVoteController.java index f6c9e95a..abd82427 100644 --- a/src/main/java/de/thm/arsnova/controller/FoodVoteController.java +++ b/src/main/java/de/thm/arsnova/controller/FoodVoteController.java @@ -39,8 +39,7 @@ import de.thm.arsnova.services.IFoodService; @RequestMapping("/canteen/menu/vote") public class FoodVoteController extends AbstractController { - public static final Logger LOGGER = LoggerFactory - .getLogger(FoodVoteController.class); + public static final Logger LOGGER = LoggerFactory.getLogger(FoodVoteController.class); @Autowired private IFoodService foodService; @@ -50,7 +49,7 @@ public class FoodVoteController extends AbstractController { @RequestBody final Object menu, final HttpServletResponse response ) { - String menustring = JSONObject.fromObject(menu).getString("menu"); + final String menustring = JSONObject.fromObject(menu).getString("menu"); foodService.vote(menustring); } diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 6552d397..cdf7a7f7 100644 --- a/src/main/java/de/thm/arsnova/controller/SessionController.java +++ b/src/main/java/de/thm/arsnova/controller/SessionController.java @@ -39,9 +39,7 @@ import org.springframework.web.bind.annotation.RestController; import de.thm.arsnova.connector.model.Course; import de.thm.arsnova.entities.LoggedIn; import de.thm.arsnova.entities.Session; -import de.thm.arsnova.entities.User; import de.thm.arsnova.services.ISessionService; -import de.thm.arsnova.services.IUserService; import de.thm.arsnova.services.SessionService.SessionNameComperator; import de.thm.arsnova.services.SessionService.SessionShortNameComperator; import de.thm.arsnova.web.DeprecatedApi; @@ -55,9 +53,6 @@ public class SessionController extends AbstractController { @Autowired private ISessionService sessionService; - @Autowired - private IUserService userService; - @RequestMapping(value = "/{sessionkey}", method = RequestMethod.GET) public final Session joinSession(@PathVariable final String sessionkey) { return sessionService.joinSession(sessionkey); @@ -65,22 +60,20 @@ public class SessionController extends AbstractController { @RequestMapping(value = "/{sessionkey}", method = RequestMethod.DELETE) public final void deleteSession(@PathVariable final String sessionkey) { - final User user = userService.getCurrentUser(); - sessionService.deleteSession(sessionkey, user); + sessionService.deleteSession(sessionkey); } @DeprecatedApi @RequestMapping(value = "/{sessionkey}/online", method = RequestMethod.POST) @ResponseStatus(HttpStatus.CREATED) public final LoggedIn registerAsOnlineUser(@PathVariable final String sessionkey) { - final User user = userService.getCurrentUser(); - return sessionService.registerAsOnlineUser(user, sessionkey); + return sessionService.registerAsOnlineUser(sessionkey); } @DeprecatedApi @RequestMapping(value = "/{sessionkey}/activeusercount", method = RequestMethod.GET) public final int countActiveUsers(@PathVariable final String sessionkey) { - return userService.getUsersInSessionCount(sessionkey); + return sessionService.activeUsers(sessionkey); } @RequestMapping(value = "/", method = RequestMethod.POST) @@ -123,14 +116,13 @@ public class SessionController extends AbstractController { @RequestParam(value = "sortby", defaultValue = "name") final String sortby, final HttpServletResponse response ) { - final User user = userService.getCurrentUser(); List<Session> sessions = null; /* TODO implement all parameter combinations, implement use of user parameter */ if (ownedOnly && !visitedOnly) { - sessions = sessionService.getMySessions(user); + sessions = sessionService.getMySessions(); } else if (visitedOnly && !ownedOnly) { - sessions = sessionService.getMyVisitedSessions(userService.getCurrentUser()); + sessions = sessionService.getMyVisitedSessions(); } else { response.setStatus(HttpStatus.NOT_IMPLEMENTED.value()); return null; diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index 611f3ce9..e9b4c543 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -25,7 +25,6 @@ import java.util.UUID; import de.thm.arsnova.connector.model.Course; import de.thm.arsnova.entities.LoggedIn; import de.thm.arsnova.entities.Session; -import de.thm.arsnova.entities.User; public interface ISessionService { Session joinSession(String keyword); @@ -36,21 +35,23 @@ public interface ISessionService { String generateKeyword(); - List<Session> getMySessions(User user); + List<Session> getMySessions(); - List<Session> getMyVisitedSessions(User currentUser); + List<Session> getMyVisitedSessions(); - LoggedIn registerAsOnlineUser(User user, String sessionkey); + LoggedIn registerAsOnlineUser(String sessionkey); int countSessions(List<Course> courses); + int activeUsers(String sessionkey); + Session setActive(String sessionkey, Boolean lock); Session joinSession(String keyword, UUID socketId); Session updateSession(String sessionkey, Session session); - void deleteSession(String sessionkey, User user); + void deleteSession(String sessionkey); int getLearningProgress(String sessionkey); diff --git a/src/main/java/de/thm/arsnova/services/IUserService.java b/src/main/java/de/thm/arsnova/services/IUserService.java index 9016b6e5..8716c3eb 100644 --- a/src/main/java/de/thm/arsnova/services/IUserService.java +++ b/src/main/java/de/thm/arsnova/services/IUserService.java @@ -48,8 +48,6 @@ public interface IUserService { void removeUserFromSessionBySocketId(UUID socketId); - int getUsersInSessionCount(String keyword); - void removeUserFromMaps(User user); int loggedInUsers(); diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index 5b6deb1c..755858ef 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -140,14 +140,14 @@ public class SessionService implements ISessionService { @Override @PreAuthorize("isAuthenticated()") - public final List<Session> getMySessions(final User user) { - final List<Session> mySessions = databaseDao.getMySessions(user); + public final List<Session> getMySessions() { + final List<Session> mySessions = databaseDao.getMySessions(userService.getCurrentUser()); if (connectorClient == null) { return mySessions; } final List<Session> courseSessions = databaseDao.getCourseSessions( - connectorClient.getCourses(user.getUsername()).getCourse() + connectorClient.getCourses(userService.getCurrentUser().getUsername()).getCourse() ); final Map<String, Session> allAvailableSessions = new HashMap<String, Session>(); @@ -163,8 +163,8 @@ public class SessionService implements ISessionService { @Override @PreAuthorize("isAuthenticated()") - public final List<Session> getMyVisitedSessions(final User user) { - return databaseDao.getMyVisitedSessions(user); + public final List<Session> getMyVisitedSessions() { + return databaseDao.getMyVisitedSessions(userService.getCurrentUser()); } @Override @@ -200,18 +200,18 @@ public class SessionService implements ISessionService { @Override @PreAuthorize("isAuthenticated()") - public final LoggedIn registerAsOnlineUser(final User user, final String sessionkey) { + public final LoggedIn registerAsOnlineUser(final String sessionkey) { /* HTTP polling solution (legacy) */ final Session session = this.joinSession(sessionkey); if (session == null) { throw new NotFoundException(); } - if (session.getCreator().equals(user.getUsername())) { + if (session.getCreator().equals(userService.getCurrentUser().getUsername())) { databaseDao.updateSessionOwnerActivity(session); } - return databaseDao.registerAsOnlineUser(user, session); + return databaseDao.registerAsOnlineUser(userService.getCurrentUser(), session); } @Override @@ -223,6 +223,11 @@ public class SessionService implements ISessionService { return sessions.size(); } + @Override + public int activeUsers(final String sessionkey) { + return userService.getUsersInSession(sessionkey).size(); + } + @Override public Session setActive(final String sessionkey, final Boolean lock) { final Session session = databaseDao.getSessionFromKeyword(sessionkey); @@ -241,9 +246,9 @@ public class SessionService implements ISessionService { @Override @PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'owner')") - public void deleteSession(final String sessionkey, final User user) { + public void deleteSession(final String sessionkey) { final Session session = databaseDao.getSession(sessionkey); - for (final Question q : databaseDao.getSkillQuestions(user, session)) { + for (final Question q : databaseDao.getSkillQuestions(userService.getCurrentUser(), session)) { databaseDao.deleteQuestionWithAnswers(q); } databaseDao.deleteSession(session); diff --git a/src/main/java/de/thm/arsnova/services/UserService.java b/src/main/java/de/thm/arsnova/services/UserService.java index f45ed6d9..96785274 100644 --- a/src/main/java/de/thm/arsnova/services/UserService.java +++ b/src/main/java/de/thm/arsnova/services/UserService.java @@ -174,11 +174,6 @@ public class UserService implements IUserService { return result; } - @Override - public int getUsersInSessionCount(final String keyword) { - return getUsersInSession(keyword).size(); - } - @Override @Transactional(isolation = Isolation.READ_COMMITTED) public void addCurrentUserToSessionMap(final String keyword) { diff --git a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java b/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java index b08c58cf..ac52d270 100644 --- a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java +++ b/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java @@ -3,8 +3,6 @@ package de.thm.arsnova.services; import java.io.Serializable; import java.util.UUID; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.ScopedProxyMode; import org.springframework.stereotype.Component; @@ -17,8 +15,6 @@ import de.thm.arsnova.entities.User; public class UserSessionServiceImpl implements UserSessionService, Serializable { private static final long serialVersionUID = 1L; - private static final Logger LOGGER = LoggerFactory.getLogger(UserSessionServiceImpl.class); - private User user; private Session session; private UUID socketId; @@ -55,10 +51,6 @@ public class UserSessionServiceImpl implements UserSessionService, Serializable return socketId; } - private boolean hasConnectedWebSocket() { - return getSocketId() != null; - } - @Override public boolean inSession() { return isAuthenticated() diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java index 9090447a..389b03ea 100644 --- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java +++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java @@ -242,7 +242,7 @@ public class ARSnovaSocketIOServer { * @param client */ public void reportSessionDataToClient(final String sessionKey, final SocketIOClient client) { - client.sendEvent("activeUserCountData", userService.getUsersInSessionCount(sessionKey)); + client.sendEvent("activeUserCountData", sessionService.activeUsers(sessionKey)); final de.thm.arsnova.entities.Feedback fb = feedbackService.getFeedback(sessionKey); client.sendEvent("feedbackData", fb.getValues()); } @@ -281,7 +281,7 @@ public class ARSnovaSocketIOServer { public void reportActiveUserCountForSession(final String sessionKey) { /* This check is needed as long as the HTTP polling solution is active simultaneously. */ - final int count = userService.getUsersInSessionCount(sessionKey); + final int count = sessionService.activeUsers(sessionKey); if (count == lastActiveUserCount) { return; } diff --git a/src/test/java/de/thm/arsnova/services/SessionServiceTest.java b/src/test/java/de/thm/arsnova/services/SessionServiceTest.java index eb74960a..9a269403 100644 --- a/src/test/java/de/thm/arsnova/services/SessionServiceTest.java +++ b/src/test/java/de/thm/arsnova/services/SessionServiceTest.java @@ -177,7 +177,7 @@ public class SessionServiceTest { when(mockDatabase.getSession(anyString())).thenReturn(session); ReflectionTestUtils.setField(getTargetObject(sessionService), "databaseDao", mockDatabase); - sessionService.deleteSession(session.getKeyword(), userService.getCurrentUser()); + sessionService.deleteSession(session.getKeyword()); verify(mockDatabase).deleteQuestionWithAnswers(q1); verify(mockDatabase).deleteQuestionWithAnswers(q2); @@ -190,13 +190,13 @@ public class SessionServiceTest { @Test(expected = AuthenticationCredentialsNotFoundException.class) public void testShouldNotDeleteSessionIfUnauthorized() { setAuthenticated(false, "nobody"); - sessionService.deleteSession("12345678", userService.getCurrentUser()); + sessionService.deleteSession("12345678"); } @Test(expected = ForbiddenException.class) public void testShouldNotDeleteSessionIfNotOwner() { setAuthenticated(true, "anybody"); - sessionService.deleteSession("12345678", userService.getCurrentUser()); + sessionService.deleteSession("12345678"); } @Test -- GitLab