[jboss-svn-commits] JBL Code SVN: r32767 - in labs/jbossrules/trunk: drools-guvnor and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 6 10:05:35 EDT 2010


Author: jervisliu
Date: 2010-05-06 10:05:33 -0400 (Thu, 06 May 2010)
New Revision: 32767

Modified:
   labs/jbossrules/trunk/drools-guvnor/pom.xml
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/MailboxService.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/ServiceImplementationTest.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/MailboxServiceTest.java
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/UserInboxTest.java
   labs/jbossrules/trunk/drools-repository/pom.xml
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/UserInfo.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/security/PermissionManager.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/UserInfoTest.java
   labs/jbossrules/trunk/pom.xml
Log:
GUVNOR-534: Refactor Guvnor module to not have dependency on JCR directly. 

Modified: labs/jbossrules/trunk/drools-guvnor/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/pom.xml	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/drools-guvnor/pom.xml	2010-05-06 14:05:33 UTC (rev 32767)
@@ -183,12 +183,7 @@
          <artifactId>wsdl4j</artifactId>
          <version>1.6.2</version>
       </dependency>
-      <!--REVISIT: Should not depend on JCR directly. Refactor MailboxService.java to hide this dependency 
-    in drools-repository module-->
-      <dependency>
-         <groupId>javax.jcr</groupId>
-         <artifactId>jcr</artifactId>
-      </dependency>
+
       <!--REVISIT: This lib is needed by org.apache.util.Base64 in org.drools.guvnor.server.files.RepositoryServlet-->
       <dependency>
          <groupId>apache-slide</groupId>
@@ -226,10 +221,6 @@
          <artifactId>gwtext</artifactId>
       </dependency>
       <dependency>
-         <groupId>com.thoughtworks.xstream</groupId>
-         <artifactId>xstream</artifactId>
-      </dependency>
-      <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
       </dependency>

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/MailboxService.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/MailboxService.java	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/MailboxService.java	2010-05-06 14:05:33 UTC (rev 32767)
@@ -3,22 +3,10 @@
 import org.drools.repository.RulesRepository;
 import org.drools.repository.AssetItem;
 import org.drools.repository.UserInfo;
-import org.drools.guvnor.server.ServiceImplementation;
-import org.drools.guvnor.server.util.TestEnvironmentSessionHelper;
+import org.drools.repository.UserInfo.InboxEntry;
 import org.drools.guvnor.server.util.LoggingHelper;
-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 org.jboss.seam.Component;
-import org.jboss.seam.contexts.Contexts;
 import org.apache.log4j.Logger;
 
-import javax.jcr.RepositoryException;
-import javax.jcr.Node;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ExecutorService;
 import java.util.*;
@@ -71,22 +59,22 @@
 
     /** Process any waiting messages */
     void processOutgoing()  {
-        try {
-            log.info("Processing outgoing messages");
+             log.info("Processing outgoing messages");
             if (repository != null) {
                 UserInbox mailman = new UserInbox(repository, MAILMAN);
-                final List<UserInbox.InboxEntry> es  = mailman.loadIncoming();
+                final List<UserInfo.InboxEntry> es  = mailman.loadIncoming();
                 log.debug("Outgoing messages size " + es.size());
                 //wipe out inbox for mailman here...
                 UserInfo.eachUser(this.repository, new UserInfo.Command() {
-                    public void process(final Node userNode) throws RepositoryException {
+                    public void process(final String toUser) {
 
-                        String toUser = userNode.getName();
+                        //String toUser = userNode.getName();
                         log.debug("Processing any inbound messages for " + toUser);
                         if (toUser.equals(MAILMAN)) return;
-                        UserInbox inbox = new UserInbox(repository, userNode.getName());
+                        UserInbox inbox = new UserInbox(repository, toUser);
                         Set<String> recentEdited = makeSetOf(inbox.loadRecentEdited());
-                        for (UserInbox.InboxEntry e : es) {
+                        for (UserInfo.InboxEntry e : es) {
+                        	//the user who edited the item wont receive a message in inbox. 
                             if (!e.from.equals(toUser) && recentEdited.contains(e.assetUUID)) {
                                 inbox.addToIncoming(e.assetUUID, e.note, e.from);
                             }
@@ -96,15 +84,12 @@
                 mailman.clearIncoming();
                 repository.save();
             }
-        } catch (RepositoryException e) {
-            log.error(e);
-        }
 
     }
 
-    private Set<String> makeSetOf(List<UserInbox.InboxEntry> inboxEntries) {
+    private Set<String> makeSetOf(List<InboxEntry> inboxEntries) {
         Set<String> entries = new HashSet<String>();
-        for(UserInbox.InboxEntry e : inboxEntries) {
+        for(InboxEntry e : inboxEntries) {
             entries.add(e.assetUUID);
         }
         return entries;
@@ -120,16 +105,13 @@
         final String from = item.getRulesRepository().getSession().getUserID();
         executor.execute(new Runnable() {
             public void run() {
-                try {
-                    //write the message to the admins outbox
-                    UserInbox inbox = new UserInbox(repository, MAILMAN);
-                    inbox.addToIncoming(id, name, from);
-                    processOutgoing();
-                } catch (RepositoryException e) {
-                    log.error(e);
-                }
-                repository.save();
-            }
+				// write the message to the admins outbox
+				UserInbox inbox = new UserInbox(repository, MAILMAN);
+				inbox.addToIncoming(id, name, from);
+				processOutgoing();
+
+				repository.save();
+			}
         });
     }
 

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	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/repository/UserInbox.java	2010-05-06 14:05:33 UTC (rev 32767)
@@ -3,27 +3,20 @@
 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 org.drools.repository.UserInfo.InboxEntry;
 import static org.drools.guvnor.client.common.Inbox.*;
 import org.drools.guvnor.client.common.AssetFormats;
 import org.drools.guvnor.client.rpc.TableDataResult;
 import org.drools.guvnor.client.rpc.TableDataRow;
 
-import javax.jcr.RepositoryException;
 import java.util.List;
-import java.util.ArrayList;
 import java.util.Iterator;
 
-import com.thoughtworks.xstream.XStream;
-
 /**
  * This manages the users "inbox".
  * @author Michael Neale
  */
 public class UserInbox {
-
-    private static final Logger log                               = LoggingHelper.getLogger( UserInbox.class );
     static final int MAX_RECENT_EDITED = 200;
 
     private static final String INBOX = "inbox";
@@ -35,14 +28,14 @@
     /**
      * Create an inbox for the given user name (id)
      */
-    public UserInbox(RulesRepository repo, String userName) throws RepositoryException {
+    public UserInbox(RulesRepository repo, String userName) {
         this.userInfo = new UserInfo(repo, userName);
     }
 
     /**
      * Create an inbox for the current sessions user id.
      */
-    public UserInbox(RulesRepository repo) throws RepositoryException {
+    public UserInbox(RulesRepository repo) {
         this.userInfo = new UserInfo(repo);
     }
 
@@ -50,24 +43,23 @@
      * This should be called when the user edits or comments on an asset.
      * Simply adds to the list...
      */
-    public void addToRecentEdited(String assetId, String note) throws RepositoryException {
+    public void addToRecentEdited(String assetId, String note) {
         addToInbox(RECENT_EDITED, assetId, note, "self");
     }
 
 
-    public void addToRecentOpened(String assetId, String note) throws RepositoryException {
+    public void addToRecentOpened(String assetId, String note) {
         addToInbox(RECENT_VIEWED, assetId, note, "self");
     }
 
-    public void addToIncoming(String assetId, String note, String userFrom) throws RepositoryException {
+    public void addToIncoming(String assetId, String note, String userFrom) {
         addToInbox(INCOMING, assetId, note, userFrom);
     }
 
 
-    private void addToInbox(String boxName, String assetId, String note, String userFrom) throws RepositoryException {
+    private void addToInbox(String boxName, String assetId, String note, String userFrom) {
         assert boxName.equals(RECENT_EDITED) || boxName.equals(RECENT_VIEWED) || boxName.equals(INCOMING);
-        List<InboxEntry> entries =  removeAnyExisting(assetId, readEntries(userInfo.getProperty(INBOX, boxName)));
-        
+        List<InboxEntry> entries =  removeAnyExisting(assetId, userInfo.readEntries(INBOX, boxName));     
 
         if (entries.size() >= MAX_RECENT_EDITED) {
             entries.remove(0);
@@ -75,9 +67,7 @@
         } else {
             entries.add(new InboxEntry(assetId, note, userFrom));
         }
-        userInfo.setProperty(INBOX, boxName, new UserInfo.Val(writeEntries(entries)));
-
-
+        userInfo.writeEntries(INBOX, boxName, entries);
     }
 
     private List<InboxEntry> removeAnyExisting(String assetId, List<InboxEntry> inboxEntries) {
@@ -92,73 +82,32 @@
         return inboxEntries;
     }
 
-    private String writeEntries(List<InboxEntry> entries) {
-        return getXStream().toXML(entries);
+    public List<InboxEntry> loadRecentEdited() {
+        return userInfo.readEntries(INBOX, RECENT_EDITED);
     }
 
-    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>();
-        }
+    public List<InboxEntry> loadRecentOpened() {
+        return userInfo.readEntries(INBOX, RECENT_VIEWED);
     }
 
-
-    private XStream getXStream() {
-        XStream xs = new XStream();
-        xs.alias("inbox-entries", List.class);
-        xs.alias("entry", InboxEntry.class);
-        return xs;
+    public List<InboxEntry> loadIncoming() {
+        return userInfo.readEntries(INBOX, INCOMING);
     }
 
-
-
-    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 List<InboxEntry> loadIncoming() throws RepositoryException {
-        return readEntries(userInfo.getProperty(INBOX, INCOMING));
-    }
-
     /**
      * Wipe them out, all of them.
      */
-    public void clearAll() throws RepositoryException {
-        userInfo.setProperty(INBOX, RECENT_EDITED, new UserInfo.Val(""));
-        userInfo.setProperty(INBOX, RECENT_VIEWED, new UserInfo.Val(""));
-        userInfo.setProperty(INBOX, INCOMING, new UserInfo.Val(""));
+    public void clearAll() {
+        userInfo.clear(INBOX, RECENT_EDITED);
+        userInfo.clear(INBOX, RECENT_VIEWED);
+        userInfo.clear(INBOX, INCOMING);
     }
 
-    public void clearIncoming() throws RepositoryException {
-        userInfo.setProperty(INBOX, INCOMING, new UserInfo.Val(""));
+    public void clearIncoming() {
+        userInfo.clear(INBOX, INCOMING);
     }
 
 
-    /**
-     * And entry in an inbox.
-     */
-    public static class InboxEntry {
-        public String from;
-
-        public InboxEntry() {}
-        public InboxEntry(String assetId, String note, String userFrom) {
-            this.assetUUID = assetId;
-            this.note = note;
-            this.timestamp = System.currentTimeMillis();
-            this.from = userFrom;
-        }
-        public String assetUUID;
-        public String note;
-        public long timestamp;
-    }
-
-
     public static TableDataResult toTable(List<InboxEntry> entries, boolean showFrom) {
         TableDataResult res = new TableDataResult();
         res.currentPosition = 0;
@@ -190,32 +139,24 @@
      * Helper method to log the opening. Will remove any inbox items that have the same id.
      */
     public static void recordOpeningEvent(AssetItem item) {
-        try {
-            UserInbox ib = new UserInbox(item.getRulesRepository());
-            ib.addToRecentOpened(item.getUUID(), item.getName());
-            List<InboxEntry> unreadIncoming = ib.removeAnyExisting(item.getUUID(), ib.loadIncoming());
-            ib.userInfo.setProperty(INBOX, INCOMING, new UserInfo.Val(ib.writeEntries(unreadIncoming)));
+		UserInbox ib = new UserInbox(item.getRulesRepository());
+		ib.addToRecentOpened(item.getUUID(), item.getName());
+		List<InboxEntry> unreadIncoming = ib.removeAnyExisting(item.getUUID(),
+				ib.loadIncoming());
+		ib.userInfo.writeEntries(INBOX, INCOMING, unreadIncoming);
 
-            ib.save();
-        } catch (RepositoryException e) {
-            log.error(e);
-        }
-    }
+		ib.save();
+	}
 
     /** Helper method to note the event */
     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);
-        }
+		UserInbox ib = new UserInbox(item.getRulesRepository());
+		ib.addToRecentEdited(item.getUUID(), item.getName());
+		ib.save();
+	}
 
-    }
 
-
-    void save() throws RepositoryException {
+    void save() {
         userInfo.save();
     }
 

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2010-05-06 14:05:33 UTC (rev 32767)
@@ -91,6 +91,7 @@
 import org.drools.repository.RulesRepository;
 import org.drools.repository.RulesRepositoryException;
 import org.drools.repository.StateItem;
+import org.drools.repository.UserInfo.InboxEntry;
 import org.drools.rule.Package;
 import org.drools.type.DateFormatsImpl;
 import org.jboss.seam.contexts.Contexts;
@@ -723,7 +724,7 @@
 
         impl.checkinVersion( ass );
 
-        List<UserInbox.InboxEntry> es = ib.loadRecentEdited();
+        List<InboxEntry> es = ib.loadRecentEdited();
         assertEquals( 1,
                       es.size() );
         assertEquals( ass.uuid,
@@ -803,7 +804,7 @@
         ServiceImplementation serv = getService();
 
         UserInbox ib = new UserInbox( serv.repository );
-        List<UserInbox.InboxEntry> inbox = ib.loadRecentEdited();
+        List<InboxEntry> inbox = ib.loadRecentEdited();
 
         serv.listPackages();
 

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/MailboxServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/MailboxServiceTest.java	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/MailboxServiceTest.java	2010-05-06 14:05:33 UTC (rev 32767)
@@ -3,6 +3,7 @@
 import junit.framework.TestCase;
 import org.drools.repository.RulesRepository;
 import org.drools.repository.AssetItem;
+import org.drools.repository.UserInfo.InboxEntry;
 import org.drools.guvnor.server.util.TestEnvironmentSessionHelper;
 
 import java.util.List;
@@ -36,7 +37,7 @@
 
         Thread.sleep(300);
         
-        List<UserInbox.InboxEntry> es = ib.loadIncoming();
+        List<InboxEntry> es = ib.loadIncoming();
         assertEquals(1, es.size());
         assertEquals(asset.getUUID(), es.get(0).assetUUID);
 

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	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/repository/UserInboxTest.java	2010-05-06 14:05:33 UTC (rev 32767)
@@ -2,12 +2,10 @@
 
 import org.drools.repository.RulesRepository;
 import org.drools.repository.AssetItem;
+import org.drools.repository.UserInfo.InboxEntry;
 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;
 
@@ -25,14 +23,14 @@
         inb.addToRecentEdited("QED", "Here we go...");
         repo.save();
 
-        List<UserInbox.InboxEntry> entries = inb.loadRecentEdited();
+        List<InboxEntry> entries = inb.loadRecentEdited();
         assertEquals(2, entries.size());
 
-        UserInbox.InboxEntry e1 = entries.get(0);
+        InboxEntry e1 = entries.get(0);
         assertEquals("ABC", e1.assetUUID);
         assertEquals("This is a note", e1.note);
 
-        UserInbox.InboxEntry e2 = entries.get(1);
+        InboxEntry e2 = entries.get(1);
         assertEquals("QED", e2.assetUUID);
         assertTrue(e2.timestamp > e1.timestamp);
 
@@ -47,7 +45,7 @@
 
         inb.addToRecentEdited("Y1", "NOTE");
 
-        List<UserInbox.InboxEntry> res = inb.loadRecentEdited();
+        List<InboxEntry> res = inb.loadRecentEdited();
         assertEquals("X1", inb.loadRecentEdited().get(0).assetUUID);
         assertEquals("Y1", res.get(res.size() - 1 ).assetUUID);
 
@@ -71,7 +69,7 @@
         inb.addToRecentOpened("QED", "hey");
         inb.addToRecentEdited("ABC", "This is a note");
 
-        List<UserInbox.InboxEntry> es =inb.loadRecentOpened();
+        List<InboxEntry> es =inb.loadRecentOpened();
         assertEquals(1, es.size());
         assertEquals("QED", es.get(0).assetUUID);
 
@@ -87,12 +85,12 @@
             inb.addToRecentOpened("A" + i, "NOTE");
         }
 
-        List<UserInbox.InboxEntry> res = inb.loadRecentOpened();
+        List<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);
+        InboxEntry firstOld = inb.loadRecentOpened().get(0);
         assertEquals("A0", firstOld.assetUUID);
 
 
@@ -100,11 +98,11 @@
         //shouldn't add another one... 
         inb.addToRecentOpened("A0", "hey22");
 
-        List<UserInbox.InboxEntry> finalList = inb.loadRecentOpened();
+        List<InboxEntry> finalList = inb.loadRecentOpened();
         assertEquals(res.size() + 1, finalList.size());
         assertEquals("A1", finalList.get(0).assetUUID);
 
-        UserInbox.InboxEntry lastEntry = finalList.get(finalList.size() - 1);
+        InboxEntry lastEntry = finalList.get(finalList.size() - 1);
         assertEquals("A0", lastEntry.assetUUID);
 
         assertTrue(lastEntry.timestamp > firstOld.timestamp);
@@ -119,7 +117,7 @@
         AssetItem asset = repo.loadDefaultPackage().addAsset("InBoxTestHelper", "hey");
         UserInbox.recordOpeningEvent(asset);
 
-        List<UserInbox.InboxEntry> es = ib.loadRecentOpened();
+        List<InboxEntry> es = ib.loadRecentOpened();
         assertEquals(1, es.size());
         assertEquals(asset.getUUID(), es.get(0).assetUUID);
         assertEquals("InBoxTestHelper", es.get(0).note);
@@ -139,7 +137,7 @@
         ib.addToIncoming(asset.getUUID(), "hey", "mic");
         ib.addToIncoming("YYY", "hey2", "mic");
 
-        List<UserInbox.InboxEntry> es = ib.loadIncoming();
+        List<InboxEntry> es = ib.loadIncoming();
         assertEquals(2, es.size());
         assertEquals(asset.getUUID(), es.get(0).assetUUID);
         assertEquals("YYY", es.get(1).assetUUID);

Modified: labs/jbossrules/trunk/drools-repository/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-repository/pom.xml	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/drools-repository/pom.xml	2010-05-06 14:05:33 UTC (rev 32767)
@@ -43,6 +43,7 @@
       <dependency>
          <groupId>javax.jcr</groupId>
          <artifactId>jcr</artifactId>
+         <version>1.0</version>
       </dependency>
       <dependency>
          <groupId>org.tmatesoft</groupId>
@@ -65,6 +66,10 @@
          <groupId>org.hsqldb</groupId>
          <artifactId>hsqldb</artifactId>
       </dependency>
+      <dependency>
+         <groupId>com.thoughtworks.xstream</groupId>
+         <artifactId>xstream</artifactId>
+      </dependency>      
       <!-- Logging -->
       <!-- TODO JBRULES-1254 remove the above, and replace by these:
         <dependency>

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/UserInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/UserInfo.java	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/UserInfo.java	2010-05-06 14:05:33 UTC (rev 32767)
@@ -1,49 +1,123 @@
 package org.drools.repository;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.drools.repository.security.PermissionManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.thoughtworks.xstream.XStream;
+
 import static org.drools.repository.security.PermissionManager.getNode;
 import static org.drools.repository.security.PermissionManager.getUserInfoNode;
 
-import javax.jcr.Value;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.NodeIterator;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.AccessDeniedException;
-import javax.jcr.ItemExistsException;
-import javax.jcr.version.VersionException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.lock.LockException;
 
+
 /**
  * Manage access to misc. user info that we might want to store. 
  * @author Michael Neale
  */
 public class UserInfo {
+    private static final Logger log                   = LoggerFactory.getLogger( UserInfo.class );
+
     Node userInfoNode;
 
     /**
      * Use the current sessions userName to get to the info node.
      */
-    public UserInfo(RulesRepository repo) throws RepositoryException {
-        init(repo, repo.getSession().getUserID());
-    }
+    public UserInfo(RulesRepository repo) throws RulesRepositoryException {
+		try {
+			init(repo, repo.getSession().getUserID());
+		} catch (RepositoryException e) {
+			log.error("Unable to init UserInfo", e);
+			throw new RulesRepositoryException(e);
+		}
+	}
 
-
     UserInfo() {}
 
     /**
      * Use the given userName to select the node.
      */
-    public UserInfo(RulesRepository repo, String userName) throws RepositoryException {
-        init(repo, userName);
-    }
+    public UserInfo(RulesRepository repo, String userName)
+			throws RulesRepositoryException {
+		try {
+			init(repo, userName);
+		} catch (RepositoryException e) {
+			log.error("Unable to init UserInfo", e);
+			throw new RulesRepositoryException(e);
+		}
+	}
 
     void init(RulesRepository repo, String userName) throws RepositoryException {
         this.userInfoNode = getUserInfoNode(userName, repo);
     }
 
+    public List<InboxEntry> readEntries(String fileName, String propertyName)
+			throws RulesRepositoryException {
+		try {
+			Val property = getProperty(fileName, propertyName);
+			if (!(property.value == null || property.value.equals(""))) {
+				return (List<InboxEntry>) getXStream().fromXML(property.value);
+			} else {
+				return new ArrayList<InboxEntry>();
+			}
+		} catch (RepositoryException e) {
+			log.error("Unable to readEntries", e);
+			throw new RulesRepositoryException(e);
+		}
+	}
+    
+    public void writeEntries(String fileName, String boxName,
+			List<InboxEntry> entries) throws RulesRepositoryException {
+		try {
+			String entry = getXStream().toXML(entries);
+
+			setProperty(fileName, boxName, new UserInfo.Val(entry));
+		} catch (RepositoryException e) {
+			log.error("Unable to writeEntries", e);
+			throw new RulesRepositoryException(e);
+		}
+	}   
+    
+    public void clear(String fileName, String boxName) {
+		try {
+			setProperty(fileName, boxName, new UserInfo.Val(""));
+		} catch (RepositoryException e) {
+			log.error("Unable to clear", e);
+			throw new RulesRepositoryException(e);
+		}
+	}
+    
+    /**
+     * And entry in an inbox.
+     */
+    public static class InboxEntry {
+        public String from;
+
+        public InboxEntry() {}
+        public InboxEntry(String assetId, String note, String userFrom) {
+            this.assetUUID = assetId;
+            this.note = note;
+            this.timestamp = System.currentTimeMillis();
+            this.from = userFrom;
+        }
+        public String assetUUID;
+        public String note;
+        public long timestamp;
+    }    
+
+    private XStream getXStream() {
+        XStream xs = new XStream();
+        xs.alias("inbox-entries", List.class);
+        xs.alias("entry", InboxEntry.class);
+        return xs;
+    }
+    
     public void setProperty(String fileName, String propertyName, Val value) throws RepositoryException {
         Node inboxNode = getNode(userInfoNode, fileName, "nt:file");
         if (inboxNode.hasNode("jcr:content")) {
@@ -52,7 +126,7 @@
             inboxNode.addNode("jcr:content", "nt:unstructured").setProperty(propertyName, value.value);
         }
     }
-
+   
     public Val getProperty(String fileName, String propertyName) throws RepositoryException {
         Node inboxNode = getNode(userInfoNode, fileName, "nt:file");
 
@@ -66,10 +140,8 @@
             inboxNode.addNode("jcr:content", "nt:unstructured"); //needed to make it consistent on save
             return new Val("");
         }
-
     }
 
-
     public static class Val {
         public String value;
         public Val(String s) {
@@ -81,27 +153,38 @@
      * Do something for each user.
      * @param c
      */
-    public static void eachUser(RulesRepository repository, Command c) throws RepositoryException {
-        NodeIterator nit = PermissionManager.getUsersRootNode(PermissionManager.getRootNode(repository)).getNodes();
-        while (nit.hasNext()) {
-            c.process(nit.nextNode());
-        }
-    }
+    public static void eachUser(RulesRepository repository, Command c)
+			throws RulesRepositoryException {
+		try {
 
+			NodeIterator nit = PermissionManager.getUsersRootNode(
+					PermissionManager.getRootNode(repository)).getNodes();
+			while (nit.hasNext()) {
+				c.process(nit.nextNode().getName());
+			}
+		} catch (RepositoryException e) {
+			log.error("Unable to eachUser", e);
+			throw new RulesRepositoryException(e);
+		}
+	}
 
     public static interface Command {
-        public void process(Node userNode) throws RepositoryException;
+        public void process(String toUser) throws RulesRepositoryException;
     }
 
-
     /**
      * Persists the change (if not in a transaction of course, if in a transaction, it will wait until the boundary is hit,
      * as per JCR standard.
      * @throws RepositoryException
      */
-    public void save() throws RepositoryException {
-         userInfoNode.getParent().getParent().save();
-         //userInfoNode.getParent().save();
-    }
+    public void save() throws RulesRepositoryException {
+		try {
+			userInfoNode.getParent().getParent().save();
+			// userInfoNode.getParent().save();
+		} catch (RepositoryException e) {
+			log.error("Unable to save", e);
+			throw new RulesRepositoryException(e);
+		}
+	}
 
 }

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/security/PermissionManager.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/security/PermissionManager.java	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/security/PermissionManager.java	2010-05-06 14:05:33 UTC (rev 32767)
@@ -5,13 +5,11 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.Property;
 import javax.jcr.PropertyIterator;
-import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/UserInfoTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/UserInfoTest.java	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/UserInfoTest.java	2010-05-06 14:05:33 UTC (rev 32767)
@@ -3,8 +3,6 @@
 import junit.framework.TestCase;
 import org.drools.repository.security.PermissionManager;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
 import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
@@ -95,10 +93,6 @@
 
 
         assertEquals("", info.getProperty("inbox", "qanno").value);
-
-
-
-
     }
 
     public void testIterateOverUsers() throws Exception {
@@ -109,16 +103,14 @@
         UserInfo uf = new UserInfo(repo);
         uf.init(repo, "michael");
         uf.setProperty("random", "property", new UserInfo.Val("hi"));
-        uf.eachUser(repo, new UserInfo.Command() {
-            public void process(Node userNode) throws RepositoryException {
-                names.add(userNode.getName());
+        UserInfo.eachUser(repo, new UserInfo.Command() {
+            public void process(String toUser) {
+                names.add(toUser);
             }
         });
 
         assertTrue(names.size() > 0) ;
         assertTrue(names.contains("michael"));
-
-
     }
 
 }

Modified: labs/jbossrules/trunk/pom.xml
===================================================================
--- labs/jbossrules/trunk/pom.xml	2010-05-06 12:03:38 UTC (rev 32766)
+++ labs/jbossrules/trunk/pom.xml	2010-05-06 14:05:33 UTC (rev 32767)
@@ -1309,11 +1309,11 @@
                </exclusion>
             </exclusions>
          </dependency>
-         <dependency>
+         <!--dependency>
             <groupId>javax.jcr</groupId>
             <artifactId>jcr</artifactId>
             <version>1.0</version>
-         </dependency>
+         </dependency-->
          <dependency>
             <groupId>org.tmatesoft</groupId>
             <artifactId>svnkit</artifactId>



More information about the jboss-svn-commits mailing list