diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index bc5a680eec7d2d673985753600d7848edb4aa234..9dc98f082faccd9edbf349cc64bf7a2908b90503 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -20,6 +20,7 @@ package de.thm.arsnova.services; import de.thm.arsnova.entities.Feedback; import de.thm.arsnova.entities.Session; +import de.thm.arsnova.entities.User; public interface ISessionService { @@ -27,8 +28,9 @@ public interface ISessionService { public Session getSession(String keyword); public Session saveSession(Session session); public Feedback getFeedback(String keyword); - public boolean postFeedback(String keyword, int value); + public boolean postFeedback(String keyword, int value, User user); public boolean sessionKeyAvailable(String keyword); public String generateKeyword(); - + public void addUserToSessionMap(String username, String keyword); + public boolean isUserInSession(User user, String keyword); } \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index e40e0d342af577ee769db8f5732199ce7ece8d7e..f3bcf269ac51206412563c91da45735ed4d696fc 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -22,11 +22,14 @@ import java.io.IOException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; @@ -46,12 +49,17 @@ import de.thm.arsnova.entities.Session; @Service public class SessionService implements ISessionService { + @Autowired + IUserService userService; + private String databaseHost; private int databasePort; private String databaseName; private Database database; + private Map<String, String> user2session = new ConcurrentHashMap<String, String>(); + public static final Logger logger = LoggerFactory.getLogger(SessionService.class); @Value("#{props['couchdb.host']}") @@ -83,6 +91,7 @@ public class SessionService implements ISessionService { .optJSONObject("value"), Session.class); if (result.isActive() || result.getCreator().equals(this.actualUserName())) { + this.addUserToSessionMap(this.actualUserName(), keyword); return result; } @@ -162,13 +171,13 @@ public class SessionService implements ISessionService { } @Override - public boolean postFeedback(String keyword, int value) { + public boolean postFeedback(String keyword, int value, de.thm.arsnova.entities.User user) { String sessionId = this.getSessionId(keyword); if (sessionId == null) return false; Document feedback = new Document(); feedback.put("type", "understanding"); - feedback.put("user", this.actualUserName()); + feedback.put("user", user.getUsername()); feedback.put("sessionId", sessionId); feedback.put("timestamp", System.currentTimeMillis()); @@ -207,6 +216,17 @@ public class SessionService implements ISessionService { return ! results.containsKey(keyword); } + @Override + public boolean isUserInSession(de.thm.arsnova.entities.User user, String keyword) { + if (keyword == null) return false; + return (this.user2session.get(user.getUsername()).equals(keyword)); + } + + @Override + public void addUserToSessionMap(String username, String keyword) { + this.user2session.put(username, keyword); + } + private String getSessionId(String keyword) { View view = new View("session/by_keyword"); view.setKey(URLEncoder.encode("\"" + keyword + "\""));