From bea0ae06f019b20bd9646e41298e999f1957cb23 Mon Sep 17 00:00:00 2001
From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de>
Date: Wed, 12 Sep 2012 13:55:59 +0200
Subject: [PATCH] Task #3852: Some changes to SessionService to match auth
 changes

---
 .../thm/arsnova/services/ISessionService.java |  6 +++--
 .../thm/arsnova/services/SessionService.java  | 24 +++++++++++++++++--
 2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index bc5a680e..9dc98f08 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 e40e0d34..f3bcf269 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 + "\""));
-- 
GitLab