[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