From 6a7b0b5c004f329cccc5fcaae82ea08a24fd1fd0 Mon Sep 17 00:00:00 2001 From: Christoph Thelen <christoph.thelen@mni.thm.de> Date: Wed, 8 Oct 2014 11:56:01 +0200 Subject: [PATCH] Clean up 'logged_in' document to remove non-existent sessions --- .../java/de/thm/arsnova/dao/CouchDBDao.java | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 9b5ebce30..f1314d9ac 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -880,25 +880,52 @@ public class CouchDBDao implements IDatabaseDao { // Not all users have visited sessions if (d.getJSONObject().optJSONArray("value") != null) { @SuppressWarnings("unchecked") - final - Collection<Session> visitedSessions = JSONArray.toCollection( - d.getJSONObject().getJSONArray("value"), - Session.class - ); + final Collection<Session> visitedSessions = JSONArray.toCollection( + d.getJSONObject().getJSONArray("value"), + Session.class + ); allSessions.addAll(visitedSessions); } } // Do these sessions still exist? final List<Session> result = new ArrayList<Session>(); + final List<Session> deletedSessions = new ArrayList<Session>(); for (final Session s : allSessions) { try { final Session session = getSessionFromKeyword(s.getKeyword()); if (session != null) { result.add(session); + } else { + deletedSessions.add(s); } } catch (final NotFoundException e) { - // TODO Remove non existant session + deletedSessions.add(s); + } + } + if (deletedSessions.isEmpty()) { + return result; + } + // Update document to remove sessions that don't exist anymore + try { + List<VisitedSession> visitedSessions = new ArrayList<VisitedSession>(); + for (final Session s : result) { + visitedSessions.add(new VisitedSession(s)); } + final LoggedIn loggedIn = new LoggedIn(); + final Document loggedInDocument = getDatabase().getDocument(sessions.getResults().get(0).getString("id")); + loggedIn.setSessionId(loggedInDocument.getString("sessionId")); + loggedIn.setUser(user.getUsername()); + loggedIn.setTimestamp(loggedInDocument.getLong("timestamp")); + loggedIn.setType(loggedInDocument.getString("type")); + loggedIn.setVisitedSessions(visitedSessions); + loggedIn.set_id(loggedInDocument.getId()); + loggedIn.set_rev(loggedInDocument.getRev()); + + final JSONObject json = JSONObject.fromObject(loggedIn); + final Document doc = new Document(json); + getDatabase().saveDocument(doc); + } catch (IOException e) { + LOGGER.error("Could not clean up logged_in document of {}", user.getUsername()); } return result; } -- GitLab