diff --git a/src/main/java/de/thm/arsnova/controller/QuestionController.java b/src/main/java/de/thm/arsnova/controller/QuestionController.java index 184d7e88d46d518f8a62fa1aef62bfe356247bf7..db0d162015d334fa931a8bd4f79ad8f9a3805302 100644 --- a/src/main/java/de/thm/arsnova/controller/QuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/QuestionController.java @@ -92,8 +92,8 @@ public class QuestionController extends AbstractController { method=RequestMethod.GET ) @ResponseBody - public List<Question> getSkillQuestions(@PathVariable String sessionkey, @RequestParam(value="sort", required=false) String sort, HttpServletResponse response) { - List<Question> questions = sessionService.getSkillQuestions(sessionkey, sort); + public List<Question> getSkillQuestions(@PathVariable String sessionkey, HttpServletResponse response) { + List<Question> questions = sessionService.getSkillQuestions(sessionkey); if(questions == null || questions.isEmpty()) { response.setStatus(HttpStatus.NOT_FOUND.value()); return null; diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 8c7169405bc7c2d01a2446f7df111fce448b0f8f..3d45cb90fc291c79bf841c145f9c9c8dd6f8de17 100644 --- a/src/main/java/de/thm/arsnova/controller/SessionController.java +++ b/src/main/java/de/thm/arsnova/controller/SessionController.java @@ -36,6 +36,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import de.thm.arsnova.entities.Feedback; +import de.thm.arsnova.entities.Question; import de.thm.arsnova.entities.LoggedIn; import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; @@ -43,7 +45,6 @@ import de.thm.arsnova.services.ISessionService; import de.thm.arsnova.services.IUserService; import de.thm.arsnova.socket.ARSnovaSocketIOServer; - @Controller public class SessionController extends AbstractController { @@ -103,7 +104,6 @@ public class SessionController extends AbstractController { return null; } - @RequestMapping(value="/socketurl", method=RequestMethod.GET) @ResponseBody public String getSocketUrl() { @@ -130,5 +130,4 @@ public class SessionController extends AbstractController { } return sessions; } - } diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 3e65a3ed99869082b8c35601acc7d323b4ee2c30..c4fb5ae57667da5241f9d53a1c1cade49872aae9 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -197,7 +197,7 @@ public class CouchDBDao implements IDatabaseDao { } @Override - public List<Question> getSkillQuestions(String sessionKeyword, String sort) { + public List<Question> getSkillQuestions(String sessionKeyword) { Session session = this.getSessionFromKeyword(sessionKeyword); if (session == null) { return null; @@ -210,7 +210,7 @@ public class CouchDBDao implements IDatabaseDao { viewName = "skill_question/by_session"; } try { - View view = new View(viewName); + View view = new View("skill_question/by_session_sorted_by_subject_and_text"); view.setStartKey("[" + URLEncoder.encode("\"" + session.get_id() + "\"", "UTF-8") + "]"); view.setEndKey("[" + URLEncoder.encode("\"" + session.get_id() + "\",{}", "UTF-8") + "]"); diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 40dad113bd0d41b351bc8ac6398336f07340849c..ff42a9a69fad530bb623b9103babf29067fabe83 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -39,7 +39,7 @@ public interface IDatabaseDao { public boolean saveQuestion(Session session, Question question); public Question getQuestion(String id); - List<Question> getSkillQuestions(String session, String sort); + List<Question> getSkillQuestions(String session); public int getSkillQuestionCount(String sessionkey); public LoggedIn registerAsOnlineUser(User u, Session s); diff --git a/src/main/java/de/thm/arsnova/entities/User.java b/src/main/java/de/thm/arsnova/entities/User.java index 84d564ccbf201c4ab8b3e337979379c0cd633317..997b22078f2e7ddbce0fe1503b5ff181f309680d 100644 --- a/src/main/java/de/thm/arsnova/entities/User.java +++ b/src/main/java/de/thm/arsnova/entities/User.java @@ -1,5 +1,7 @@ package de.thm.arsnova.entities; +import java.io.Serializable; + import org.jasig.cas.client.authentication.AttributePrincipal; import org.scribe.up.profile.facebook.FacebookProfile; import org.scribe.up.profile.google.Google2Profile; @@ -7,8 +9,8 @@ import org.scribe.up.profile.twitter.TwitterProfile; import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -public class User { - +public class User implements Serializable { + private static final long serialVersionUID = 1L; private String username; public User(Google2Profile profile) { @@ -46,5 +48,16 @@ public class User { public String toString() { return "User, username: " + this.username; } + @Override + public int hashCode() { + return username.hashCode(); + } + + + @Override + public boolean equals(Object obj) { + User other = (User) obj; + return this.username.equals(other.username); + } } diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index 75935473a6d27a82d7d9cad611451a8d7307f223..44eafe6af711348388986ea1d1465f5a0d883083 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -47,6 +47,6 @@ public interface ISessionService { public boolean saveQuestion(Question question); public Question getQuestion(String id); public LoggedIn registerAsOnlineUser(User user, String sessionkey); - public List<Question> getSkillQuestions(String sessionkey, String sort); + public List<Question> getSkillQuestions(String sessionkey); public int getSkillQuestionCount(String sessionkey); } \ 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 1d329af295744f44043192327ed32884a17f6660..e92cce242066729b9d40b36c63855c33577383d8 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -78,8 +78,8 @@ public class SessionService implements ISessionService { } @Override - public List<Question> getSkillQuestions(String sessionkey, String sort) { - return databaseDao.getSkillQuestions(sessionkey, sort); + public List<Question> getSkillQuestions(String sessionkey) { + return databaseDao.getSkillQuestions(sessionkey); } @Override diff --git a/src/main/java/de/thm/arsnova/services/UserService.java b/src/main/java/de/thm/arsnova/services/UserService.java index 0719a767735bd84e99e5f34d8a5f3d92da866f20..76499556f76d3acc4895897f483ce8d8c9d7db1a 100644 --- a/src/main/java/de/thm/arsnova/services/UserService.java +++ b/src/main/java/de/thm/arsnova/services/UserService.java @@ -1,16 +1,28 @@ package de.thm.arsnova.services; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.OutputStream; import java.util.ArrayList; +import java.util.Hashtable; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.UUID; -import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import org.scribe.up.profile.facebook.FacebookProfile; import org.scribe.up.profile.google.Google2Profile; import org.scribe.up.profile.twitter.TwitterProfile; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.InitializingBean; import org.springframework.security.authentication.AnonymousAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.cas.authentication.CasAuthenticationToken; @@ -24,11 +36,13 @@ import com.github.leleuj.ss.oauth.client.authentication.OAuthAuthenticationToken import de.thm.arsnova.entities.User; import de.thm.arsnova.exceptions.UnauthorizedException; -public class UserService implements IUserService { +public class UserService implements IUserService, InitializingBean, DisposableBean { + public static final Logger logger = LoggerFactory.getLogger(UserService.class); + private static final ConcurrentHashMap<UUID, User> socketid2user = new ConcurrentHashMap<UUID, User>(); private static final ConcurrentHashMap<String, String> user2session = new ConcurrentHashMap<String, String>(); - + @Override public User getCurrentUser() { @@ -118,4 +132,53 @@ public class UserService implements IUserService { public String getSessionForUser(String username) { return user2session.get(username); } + + @Override + public void afterPropertiesSet() { + try { + File tmpDir = new File(System.getProperty("java.io.tmpdir")); + File store = new File(tmpDir, "arsnova.bin"); + if(!store.exists()) { + return; + } + ObjectInputStream ois = new ObjectInputStream(new FileInputStream(store)); + Hashtable<String, Map<?, ?>> map = (Hashtable<String, Map<?, ?>>) ois.readObject(); + ois.close(); + Map<UUID, User> s2u = (Map<UUID, User>) map.get("socketid2user"); + Map<String, String> u2s = (Map<String, String>) map.get("user2session"); + + logger.info("load from store: {}", map); + + socketid2user.putAll(s2u); + user2session.putAll(u2s); + + } catch (IOException e) { + logger.error("IOException during restoring UserService", e); + } catch (ClassNotFoundException e) { + logger.error("ClassNotFoundException during restoring UserService", e); + } + } + + @Override + public void destroy() { + Hashtable<String, Map<?, ?>> map = new Hashtable<String, Map<?, ?>>(); + map.put("socketid2user", socketid2user); + map.put("user2session", user2session); + + try { + File tmpDir = new File(System.getProperty("java.io.tmpdir")); + File store = new File(tmpDir, "arsnova.bin"); + if(!store.exists()) { + store.createNewFile(); + } + OutputStream file = new FileOutputStream (store); + ObjectOutputStream objOut = new ObjectOutputStream(file); + objOut.writeObject(map); + objOut.close(); + file.close(); + logger.info("saved to store: {}", map); + } catch (IOException e) { + logger.error("IOException while saving UserService", e); + } + } } diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index 13fd216408fdf2dde05295ac414498bdde5ca485..6f653b587ee5e875d86392bf70959461d3c92212 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -134,7 +134,7 @@ public class StubDatabaseDao implements IDatabaseDao { } @Override - public List<Question> getSkillQuestions(String session, String sort) { + public List<Question> getSkillQuestions(String session) { // TODO Auto-generated method stub return null; } diff --git a/src/test/java/de/thm/arsnova/services/StubUserService.java b/src/test/java/de/thm/arsnova/services/StubUserService.java index 53bbd15700fbcce37c5a0ba2100bf38f94fc81ef..52e2fd8cfcb61def3135f27595f332671bd9b3ea 100644 --- a/src/test/java/de/thm/arsnova/services/StubUserService.java +++ b/src/test/java/de/thm/arsnova/services/StubUserService.java @@ -1,15 +1,10 @@ package de.thm.arsnova.services; -import java.util.List; -import java.util.Map.Entry; -import java.util.Set; -import java.util.UUID; - import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import de.thm.arsnova.entities.User; -public class StubUserService implements IUserService { +public class StubUserService extends UserService { private User stubUser = null; @@ -29,52 +24,4 @@ public class StubUserService implements IUserService { public User getCurrentUser() { return stubUser; } - - @Override - public User getUser2SessionID(UUID sessionID) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void putUser2SessionID(UUID sessionID, User user) { - // TODO Auto-generated method stub - - } - - @Override - public void removeUser2SessionID(UUID sessionID) { - // TODO Auto-generated method stub - - } - - @Override - public Set<Entry<UUID, User>> users2Session() { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean isUserInSession(User user, String keyword) { - // TODO Auto-generated method stub - return false; - } - - @Override - public List<String> getUsersInSession(String keyword) { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getSessionForUser(String username) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void addCurrentUserToSessionMap(String keyword) { - // TODO Auto-generated method stub - - } }