From 23aaff00d871dc3e9be776142df94e9e0fc72266 Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <daniel.gerhardt@mni.thm.de>
Date: Fri, 8 Mar 2013 19:57:22 +0100
Subject: [PATCH] Added method to retrieve inactive users from CouchDB.

---
 .../java/de/thm/arsnova/dao/CouchDBDao.java   | 26 ++++++++++++++++++-
 .../java/de/thm/arsnova/dao/IDatabaseDao.java |  2 ++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 3f7b6a492..8264cf7c5 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -1370,7 +1370,31 @@ public class CouchDBDao implements IDatabaseDao {
 		}
 		return result;
 	}
-	
+
+	@Override
+	public final List<String> getInactiveUsers(int timeDifference) {
+		try {
+			long inactiveBeforeTimestamp = new Date().getTime() - timeDifference * 1000;
+
+			View view = new View("logged_in/by_and_only_timestamp_and_username");
+			view.setEndKey("[" + URLEncoder.encode(String.valueOf(inactiveBeforeTimestamp) + ",{}", "UTF-8") + "]");
+			LOGGER.debug("View: {}", view.getFullName());
+			ViewResults results = this.getDatabase().view(view);
+			LOGGER.debug("Result count: {}", String.valueOf(results.size()));
+
+			List<String> result = new ArrayList<String>();
+			for (Document d : results.getResults()) {
+				LOGGER.debug("key: {}", d.getString("key"));
+				result.add(d.getJSONObject().getJSONArray("key").getString(1));
+			}
+
+			return result;
+		} catch (UnsupportedEncodingException e) {
+			LOGGER.error("Error while retrieving inactive users", e);
+		}
+		return null;
+	}
+
 	private class ExtendedView extends View {
 
 		private String keys;
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 9b4905f0f..88af93db8 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -133,4 +133,6 @@ public interface IDatabaseDao {
 	List<Session> getCourseSessions(List<Course> courses);
 
 	Session lockSession(Session session, Boolean lock);
+
+	List<String> getInactiveUsers(int timeDifference);
 }
-- 
GitLab