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