[jboss-svn-commits] JBL Code SVN: r29130 - in labs/jbossrules/trunk/drools-guvnor/src: test/java/org/drools/guvnor/server/repository and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Sep 1 02:35:46 EDT 2009
Author: michael.neale at jboss.com
Date: 2009-09-01 02:35:45 -0400 (Tue, 01 Sep 2009)
New Revision: 29130
Added:
labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/UserInboxTest.java
Modified:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/UserInbox.java
Log:
GUVNOR-447 Inbox feature
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/UserInbox.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/UserInbox.java 2009-09-01 06:33:59 UTC (rev 29129)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/UserInbox.java 2009-09-01 06:35:45 UTC (rev 29130)
@@ -5,58 +5,103 @@
import javax.jcr.RepositoryException;
import java.util.List;
+import java.util.ArrayList;
+import com.thoughtworks.xstream.XStream;
+
/**
- *
* This manages the users "inbox".
* @author Michael Neale
*/
public class UserInbox {
- private RulesRepository repository;
+ static final int MAX_RECENT_EDITED = 100;
- public UserInbox(RulesRepository repo) {
- this.repository = repo;
+ private static final String INBOX = "inbox";
+ private static final String RECENT_EDITED = "recentEdited";
+ private static final String RECENT_VIEWED = "recentViewed";
+
+ private UserInfo userInfo;
+
+
+ public UserInbox(RulesRepository repo) throws RepositoryException {
+ this.userInfo = new UserInfo(repo);
}
/**
* This should be called when the user edits or comments on an asset.
- * @throws RepositoryException
+ * Simply adds to the list...
*/
public void addToRecentEdited(String assetId, String note) throws RepositoryException {
- UserInfo ui = new UserInfo(repository);
- //List<InboxEntry> entries = readEntries(ui.getProperty("inbox", "recentEdited"));
-
+ addToInbox(RECENT_EDITED, assetId, note);
}
-
- public void addToRecentOpened(String assetId, String note) {
+
+ public void addToRecentOpened(String assetId, String note) throws RepositoryException {
+ addToInbox(RECENT_VIEWED, assetId, note);
}
- /**
- * This is called when someone else updated something that was recently edited by a given user.
- * @param assetId
- * @param note
- */
- public void addToUpdated(String assetId, String note) {}
+ private void addToInbox(String boxName, String assetId, String note) throws RepositoryException {
+ assert boxName.equals(RECENT_EDITED) || boxName.equals(RECENT_VIEWED);
+ List<InboxEntry> entries = readEntries(userInfo.getProperty(INBOX, boxName));
+ if (entries.size() >= MAX_RECENT_EDITED) {
+ entries.remove(0);
+ entries.add(new InboxEntry(assetId, note));
+ } else {
+ entries.add(new InboxEntry(assetId, note));
+ }
+ userInfo.setProperty(INBOX, boxName, new UserInfo.Val(writeEntries(entries)));
- public InboxEntry[] loadRecentEdited() {
- return null;
}
- public InboxEntry[] loadRecentOpened() {
- return null;
+ private String writeEntries(List<InboxEntry> entries) {
+ return getXStream().toXML(entries);
}
- public InboxEntry[] loadUpdated() {
- return null;
+ private List<InboxEntry> readEntries(UserInfo.Val property) {
+ if (!(property.value == null || property.value.equals(""))) {
+ return (List<InboxEntry>) getXStream().fromXML(property.value);
+ } else {
+ return new ArrayList<InboxEntry>();
+ }
}
+ private XStream getXStream() {
+ XStream xs = new XStream();
+ xs.alias("inbox-entries", List.class);
+ xs.alias("entry", InboxEntry.class);
+ return xs;
+ }
+
+ public List<InboxEntry> loadRecentEdited() throws RepositoryException {
+ return readEntries(userInfo.getProperty(INBOX, RECENT_EDITED));
+ }
+
+ public List<InboxEntry> loadRecentOpened() throws RepositoryException {
+ return readEntries(userInfo.getProperty(INBOX, RECENT_VIEWED));
+ }
+
+ public void clearAll() throws RepositoryException {
+ userInfo.setProperty(INBOX, RECENT_EDITED, new UserInfo.Val(""));
+ userInfo.setProperty(INBOX, RECENT_VIEWED, new UserInfo.Val(""));
+ }
+
+
+
+ /**
+ * And entry in an inbox.
+ */
public static class InboxEntry {
+ public InboxEntry() {}
+ public InboxEntry(String assetId, String note) {
+ this.assetUUID = assetId;
+ this.note = note;
+ this.timestamp = System.currentTimeMillis();
+ }
public String assetUUID;
public String note;
public long timestamp;
Added: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/UserInboxTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/UserInboxTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/UserInboxTest.java 2009-09-01 06:35:45 UTC (rev 29130)
@@ -0,0 +1,76 @@
+package org.drools.guvnor.server.repository;
+
+import org.drools.repository.RulesRepository;
+import org.drools.guvnor.server.util.TestEnvironmentSessionHelper;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Michael Neale
+ */
+public class UserInboxTest extends TestCase {
+
+ public void testInboxen() throws Exception {
+ RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
+ UserInbox inb = new UserInbox(repo);
+ inb.clearAll();
+ inb.addToRecentEdited("ABC", "This is a note");
+ Thread.sleep(100);
+ inb.addToRecentEdited("QED", "Here we go...");
+ repo.save();
+
+ List<UserInbox.InboxEntry> entries = inb.loadRecentEdited();
+ assertEquals(2, entries.size());
+
+ UserInbox.InboxEntry e1 = entries.get(0);
+ assertEquals("ABC", e1.assetUUID);
+ assertEquals("This is a note", e1.note);
+
+ UserInbox.InboxEntry e2 = entries.get(1);
+ assertEquals("QED", e2.assetUUID);
+ assertTrue(e2.timestamp > e1.timestamp);
+
+ inb.clearAll();
+
+ for (int i = 0; i < UserInbox.MAX_RECENT_EDITED; i++) {
+ inb.addToRecentEdited("X" + i, "NOTE" + i);
+ }
+
+ assertEquals("X0", inb.loadRecentEdited().get(0).assetUUID);
+
+ inb.addToRecentEdited("Y1", "NOTE");
+
+ List<UserInbox.InboxEntry> res = inb.loadRecentEdited();
+ assertEquals("X1", inb.loadRecentEdited().get(0).assetUUID);
+ assertEquals("Y1", res.get(res.size() - 1 ).assetUUID);
+
+ assertTrue(res.get(res.size() - 2 ).assetUUID.startsWith("X"));
+
+ inb.addToRecentEdited("Y2", "NOTE");
+
+ res = inb.loadRecentEdited();
+ assertEquals("X2", inb.loadRecentEdited().get(0).assetUUID);
+ assertEquals("Y2", res.get(res.size() - 1 ).assetUUID);
+ assertEquals("Y1", res.get(res.size() - 2 ).assetUUID);
+
+
+
+ }
+
+ public void testRead() throws Exception {
+ RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
+ UserInbox inb = new UserInbox(repo);
+ inb.clearAll();
+ inb.addToRecentOpened("QED", "hey");
+ inb.addToRecentEdited("ABC", "This is a note");
+
+ List<UserInbox.InboxEntry> es =inb.loadRecentOpened();
+ assertEquals(1, es.size());
+ assertEquals("QED", es.get(0).assetUUID);
+
+
+ }
+
+}
More information about the jboss-svn-commits
mailing list