From 2c2e7a91c87667110016865922648c9220e92cff Mon Sep 17 00:00:00 2001
From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de>
Date: Mon, 10 Sep 2012 14:18:41 +0200
Subject: [PATCH] Task #3842: Check if session key is allready present in
 CouchDB

This method uses transaction level READ_COMMITTED.
---
 .../java/de/thm/arsnova/services/ISessionService.java |  1 +
 .../java/de/thm/arsnova/services/SessionService.java  | 11 +++++++++++
 2 files changed, 12 insertions(+)

diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index 9f3bb394..2d6cf3bb 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -27,5 +27,6 @@ public interface ISessionService {
 	public Session getSession(String keyword);
 	public Feedback getFeedback(String keyword);
 	public boolean postFeedback(String keyword, int value);
+	public boolean sessionKeyAvailable(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 23969d71..68daacad 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -31,6 +31,8 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.core.userdetails.User;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
 
 import com.fourspaces.couchdb.Database;
 import com.fourspaces.couchdb.Document;
@@ -160,6 +162,15 @@ public class SessionService implements ISessionService {
 		return true;
 	}
 
+	@Override
+	@Transactional(isolation=Isolation.READ_COMMITTED)
+	public boolean sessionKeyAvailable(String keyword) {
+		View view = new View("session/by_keyword");
+		ViewResults results = database.view(view);
+		
+		return ! results.containsKey(keyword);
+	}
+	
 	private String getSessionId(String keyword) {
 		View view = new View("session/by_keyword");
 		view.setKey(URLEncoder.encode("\"" + keyword + "\""));
-- 
GitLab