[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