[jboss-svn-commits] JBL Code SVN: r29145 - in labs/jbossrules/trunk/drools-guvnor/src: main/java/org/drools/guvnor/server/repository and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 2 03:44:09 EDT 2009


Author: michael.neale at jboss.com
Date: 2009-09-02 03:44:09 -0400 (Wed, 02 Sep 2009)
New Revision: 29145

Added:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/MessageSender.java
Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/UserInbox.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/UserInboxTest.java
Log:
GUVNOR-447 Inbox feature

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2009-09-02 06:02:19 UTC (rev 29144)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2009-09-02 07:44:09 UTC (rev 29145)
@@ -32,16 +32,12 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.Arrays;
-import java.util.Timer;
-import java.util.TimerTask;
 import java.util.StringTokenizer;
 import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 
 import javax.jcr.ItemExistsException;
 import javax.jcr.RepositoryException;
-import javax.servlet.jsp.tagext.TryCatchFinally;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.util.ISO8601;
@@ -83,10 +79,9 @@
 import org.drools.guvnor.server.util.TableDisplayHandler;
 import org.drools.guvnor.server.util.VerifierRunner;
 import org.drools.guvnor.server.util.Discussion;
-import org.drools.guvnor.server.util.ClassicDRLImporter;
 import static org.drools.guvnor.server.util.ClassicDRLImporter.*;
+import org.drools.guvnor.server.repository.UserInbox;
 import org.drools.lang.descr.PackageDescr;
-import org.drools.lang.descr.RuleDescr;
 import org.drools.lang.descr.TypeDeclarationDescr;
 import org.drools.repository.AssetHistoryIterator;
 import org.drools.repository.AssetItem;
@@ -119,7 +114,6 @@
 import org.mvel2.templates.TemplateRuntime;
 
 import com.google.gwt.user.client.rpc.SerializableException;
-import EDU.oswego.cs.dl.util.concurrent.CondVar;
 
 /**
  * This is the implementation of the repository service to drive the GWT based
@@ -496,10 +490,12 @@
         }
 
         log.debug( "Package: " + pkgItem.getName() + ", asset: " + item.getName() + ". Load time taken for asset: " + (System.currentTimeMillis() - time) );
+        UserInbox.recordOpeningEvent(item);
         return asset;
 
     }
 
+
     private RuleAsset loadAsset(AssetItem item) throws SerializableException {
 
         RuleAsset asset = new RuleAsset();
@@ -514,6 +510,7 @@
                                       pkgItem,
                                       item );
 
+
         return asset;
     }
 
@@ -631,9 +628,8 @@
             this.ruleBaseCache.remove( pkg.getUUID() );
 
         }
-
         repoAsset.checkin( meta.checkinComment );
-
+        
         return repoAsset.getUUID();
     }
 

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/MessageSender.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/MessageSender.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/MessageSender.java	2009-09-02 07:44:09 UTC (rev 29145)
@@ -0,0 +1,73 @@
+package org.drools.guvnor.server.repository;
+
+import org.drools.repository.RulesRepository;
+import org.drools.repository.AssetItem;
+import org.drools.repository.UserInfo;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Startup;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.Destroy;
+import org.jboss.seam.ScopeType;
+
+import javax.jcr.RepositoryException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutorService;
+
+/**
+ * Manages the "delivery" of messages to users inboxes for events.
+ * @author Michael Neale
+ */
+ at Scope(ScopeType.APPLICATION)
+ at Startup
+ at Name("MessageProcessor")
+public class MessageSender {
+
+
+    @In public BRMSRepositoryConfiguration configurator;
+
+    private static ExecutorService executor = Executors.newSingleThreadExecutor();
+    public RulesRepository repository;
+
+
+    public void recordItemUpdated(AssetItem item) {
+        final String id = item.getUUID();
+        final String name = item.getName();
+
+        executor.execute(new Runnable() {
+            public void run() {
+
+                try {
+                    //write the message to the admins outbox
+                    UserInfo queue = new UserInfo(repository);
+                    
+
+                    //at the end, schedule a mailbox sweep... (to send)
+                } catch (RepositoryException e) {
+
+                }
+
+
+
+            }
+        });
+    }
+
+
+
+    @Create public void create() {
+        this.repository = new RulesRepository(configurator.newSession("mailman"));
+        //kick off a task to deliver things here??
+
+    }
+
+
+    @Destroy public void destroy() { this.repository.logout(); }
+
+
+
+
+
+    
+}

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-02 06:02:19 UTC (rev 29144)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/UserInbox.java	2009-09-02 07:44:09 UTC (rev 29145)
@@ -2,10 +2,14 @@
 
 import org.drools.repository.RulesRepository;
 import org.drools.repository.UserInfo;
+import org.drools.repository.AssetItem;
+import org.drools.guvnor.server.util.LoggingHelper;
+import org.apache.log4j.Logger;
 
 import javax.jcr.RepositoryException;
 import java.util.List;
 import java.util.ArrayList;
+import java.util.Iterator;
 
 import com.thoughtworks.xstream.XStream;
 
@@ -15,7 +19,8 @@
  */
 public class UserInbox {
 
-    static final int MAX_RECENT_EDITED = 100;
+    private static final Logger log                               = LoggingHelper.getLogger( UserInbox.class );
+    static final int MAX_RECENT_EDITED = 200;
 
     private static final String INBOX = "inbox";
     private static final String RECENT_EDITED = "recentEdited";
@@ -44,7 +49,9 @@
 
     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));
+        List<InboxEntry> entries =  removeAnyExisting(assetId, readEntries(userInfo.getProperty(INBOX, boxName)));
+        
+
         if (entries.size() >= MAX_RECENT_EDITED) {
             entries.remove(0);
             entries.add(new InboxEntry(assetId, note));
@@ -53,8 +60,21 @@
         }
         userInfo.setProperty(INBOX, boxName, new UserInfo.Val(writeEntries(entries)));
 
+
     }
 
+    private List<InboxEntry> removeAnyExisting(String assetId, List<InboxEntry> inboxEntries) {
+        Iterator<InboxEntry> it = inboxEntries.iterator();
+        while (it.hasNext()) {
+            InboxEntry e = it.next();
+            if (e.assetUUID.equals(assetId)) {
+                it.remove();
+                return inboxEntries;
+            }
+        }
+        return inboxEntries;
+    }
+
     private String writeEntries(List<InboxEntry> entries) {
         return getXStream().toXML(entries);
     }
@@ -85,13 +105,15 @@
         return readEntries(userInfo.getProperty(INBOX, RECENT_VIEWED));
     }
 
-    public void clearAll() throws RepositoryException {
+    /**
+     * Wipe them out, all of them.
+     */
+    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.
      */
@@ -108,5 +130,33 @@
     }
 
 
+    /** Helper method to log the opening */
+    public static void recordOpeningEvent(AssetItem item) {
+        try {
+            UserInbox ib = new UserInbox(item.getRulesRepository());
+            ib.addToRecentOpened(item.getUUID(), item.getName());
+            ib.save();
+        } catch (RepositoryException e) {
+            log.error(e);
+        }
+    }
+
+    public static void recordUserEditEvent(AssetItem item) {
+        try {
+            UserInbox ib = new UserInbox(item.getRulesRepository());
+            ib.addToRecentEdited(item.getUUID(), item.getName());
+            ib.save();
+        } catch (RepositoryException e) {
+            log.error(e);
+        }
+
+    }
+
+
+    private void save() throws RepositoryException {
+        userInfo.save();
+    }
+
+
 }
 

Modified: 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	2009-09-02 06:02:19 UTC (rev 29144)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/UserInboxTest.java	2009-09-02 07:44:09 UTC (rev 29145)
@@ -1,9 +1,13 @@
 package org.drools.guvnor.server.repository;
 
 import org.drools.repository.RulesRepository;
+import org.drools.repository.AssetItem;
 import org.drools.guvnor.server.util.TestEnvironmentSessionHelper;
 
 import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
 
 import junit.framework.TestCase;
 
@@ -34,6 +38,7 @@
 
         inb.clearAll();
 
+
         for (int i = 0; i < UserInbox.MAX_RECENT_EDITED; i++) {
             inb.addToRecentEdited("X" + i, "NOTE" + i);
         }
@@ -73,4 +78,55 @@
 
     }
 
+    public void testDupes() throws Exception {
+        RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
+        UserInbox inb = new UserInbox(repo);
+        inb.clearAll();
+
+        for (int i =0; i < 120; i++) {
+            inb.addToRecentOpened("A" + i, "NOTE");
+        }
+
+        List<UserInbox.InboxEntry> res = inb.loadRecentOpened();
+        assertEquals(120, res.size());
+        inb.addToRecentOpened("XX", "hey");
+
+        assertEquals(res.size() + 1, inb.loadRecentOpened().size());
+        UserInbox.InboxEntry firstOld = inb.loadRecentOpened().get(0);
+        assertEquals("A0", firstOld.assetUUID);
+
+
+        Thread.sleep(30);
+        //shouldn't add another one... 
+        inb.addToRecentOpened("A0", "hey22");
+
+        List<UserInbox.InboxEntry> finalList = inb.loadRecentOpened();
+        assertEquals(res.size() + 1, finalList.size());
+        assertEquals("A1", finalList.get(0).assetUUID);
+
+        UserInbox.InboxEntry lastEntry = finalList.get(finalList.size() - 1);
+        assertEquals("A0", lastEntry.assetUUID);
+
+        assertTrue(lastEntry.timestamp > firstOld.timestamp);
+        
+
+    }
+
+    public void testHelper() throws Exception {
+        RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession());
+        UserInbox ib = new UserInbox(repo);
+        ib.clearAll();
+        AssetItem asset = repo.loadDefaultPackage().addAsset("InBoxTestHelper", "hey");
+        UserInbox.recordOpeningEvent(asset);
+
+        List<UserInbox.InboxEntry> es = ib.loadRecentOpened();
+        assertEquals(1, es.size());
+        assertEquals(asset.getUUID(), es.get(0).assetUUID);
+        assertEquals("InBoxTestHelper", es.get(0).note);
+    }
+
+
+
+
+
 }



More information about the jboss-svn-commits mailing list