[jboss-svn-commits] JBL Code SVN: r29006 - in labs/jbossrules/trunk/drools-repository/src: main/java/org/drools/repository/security and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Aug 21 03:19:27 EDT 2009
Author: michael.neale at jboss.com
Date: 2009-08-21 03:19:26 -0400 (Fri, 21 Aug 2009)
New Revision: 29006
Added:
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/UserInfo.java
labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/UserInfoTest.java
Modified:
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/security/PermissionManagerTest.java
Log:
GUVNOR-434 inbox feature back end
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/UserInfo.java 2009-08-21 07:19:26 UTC (rev 29006)
@@ -0,0 +1,72 @@
+package org.drools.repository;
+
+import org.drools.repository.security.PermissionManager;
+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;
+
+/**
+ * Manage access to misc. user info that we might want to store.
+ * @author Michael Neale
+ */
+public class UserInfo {
+ Node userInfoNode;
+ //private RulesRepository repository;
+ //String userName;
+
+ public UserInfo(RulesRepository repo) throws RepositoryException {
+ init(repo, repo.getSession().getUserID());
+ }
+
+ void init(RulesRepository repo, String userName) throws RepositoryException {
+ this.userInfoNode = getUserInfoNode(userName, repo);
+ }
+
+ public void setProperty(String fileName, String propertyName, Val value) throws RepositoryException {
+ Node inboxNode = getNode(userInfoNode, fileName, "nt:file");
+ if (inboxNode.hasNode("jcr:content")) {
+ inboxNode.getNode("jcr:content").setProperty(propertyName, value.value);
+ } else {
+ 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");
+ if (inboxNode.hasNode("jcr:content")) {
+ return new Val(inboxNode.getNode("jcr:content").getProperty(propertyName).getString());
+ } else {
+ return new Val("");
+ }
+
+ }
+
+
+ public static class Val {
+ String value;
+ public Val(String s) {
+ this.value = s;
+ }
+ }
+
+ /**
+ * Do something for each user.
+ * @param c
+ */
+ public 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 interface Command {
+ public void process(Node userNode) throws RepositoryException;
+ }
+
+}
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 2009-08-21 04:32:26 UTC (rev 29005)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/security/PermissionManager.java 2009-08-21 07:19:26 UTC (rev 29006)
@@ -61,15 +61,36 @@
}
}
+
+
+
private Node getUserPermissionNode(String userName)
throws RepositoryException {
- Node root = this.repository.getSession().getRootNode().getNode(RulesRepository.RULES_REPOSITORY_NAME);
- Node permsNode = getNode(getNode(getNode(root, "user_info", "nt:folder"), userName, "nt:folder"), "permissions", "nt:file");
+ Node permsNode = getNode(getUserInfoNode(userName, repository), "permissions", "nt:file");
return permsNode;
}
+ /** get the specified user info node (it is an nt:folder type) */
+ public static Node getUserInfoNode(String userName, RulesRepository repo) throws RepositoryException {
+ Node root = getRootNode(repo);
+ return getNode(getUsersRootNode(root), userName, "nt:folder");
+ }
+ /** The root node of the repository */
+ public static Node getRootNode(RulesRepository repo) throws RepositoryException {
+ return repo.getSession().getRootNode().getNode(RulesRepository.RULES_REPOSITORY_NAME);
+ }
+
/**
+ * Get the top node for "user_info"
+ * @throws RepositoryException
+ */
+ public static Node getUsersRootNode(Node root) throws RepositoryException {
+ return getNode(root, "user_info", "nt:folder");
+ }
+
+
+ /**
* obtain a mapping of permissions for a given user.
* @throws RepositoryException
*/
@@ -115,7 +136,7 @@
/**
* Gets or creates a node.
*/
- private Node getNode(Node node, String name, String nodeType) throws RepositoryException {
+ public static Node getNode(Node node, String name, String nodeType) throws RepositoryException {
Node permsNode;
if (!node.hasNode(name)) {
permsNode = node.addNode(name, nodeType);
@@ -136,8 +157,8 @@
public Map<String, List<String>> listUsers() {
try {
Map<String, List<String>> listing = new HashMap<String, List<String>>();
- Node root = this.repository.getSession().getRootNode().getNode(RulesRepository.RULES_REPOSITORY_NAME);
- Node usersNode = getNode(root, "user_info", "nt:folder");
+ Node root = getRootNode(this.repository);
+ Node usersNode = getUsersRootNode(root);
NodeIterator users = usersNode.getNodes();
while (users.hasNext()) {
Node userNode = (Node) users.next();
@@ -165,9 +186,9 @@
return permTypes;
}
- void deleteAllPermissions() throws RepositoryException {
- Node root = this.repository.getSession().getRootNode().getNode(RulesRepository.RULES_REPOSITORY_NAME);
- getNode(root, "user_info", "nt:folder").remove();
+ void deleteAllUsers() throws RepositoryException {
+ Node root = getRootNode(this.repository);
+ getUsersRootNode(root).remove();
}
public void removeUserPermissions(String userName) {
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/UserInfoTest.java 2009-08-21 07:19:26 UTC (rev 29006)
@@ -0,0 +1,103 @@
+package org.drools.repository;
+
+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;
+import java.util.ArrayList;
+
+/**
+ * @author Michael Neale
+ */
+public class UserInfoTest extends TestCase {
+ public void testPersistence() throws Exception {
+ RulesRepository repo = RepositorySessionUtil.getRepository();
+ PermissionManager pm = new PermissionManager(repo);
+ Map<String, List<String>> perms = new HashMap<String, List<String>>() {{
+ put("package.admin", new ArrayList<String>() {{add("1234567890");}});
+ put("package.developer", new ArrayList<String>() {{add("1"); add("2");}});
+ put("analyst", new ArrayList<String>() {{add("HR");}});
+ put("admin", new ArrayList<String>());
+ }};
+ pm.updateUserPermissions("wankle", perms);
+ Map<String, List<String>> perms_ = pm.retrieveUserPermissions("wankle");
+
+
+ UserInfo info = new UserInfo(repo);
+ info.setProperty("inbox", "something", new UserInfo.Val("boo"));
+
+ assertEquals("boo", info.getProperty("inbox", "something").value);
+ info.setProperty("inbox", "something", new UserInfo.Val("boo2"));
+
+ assertEquals("boo2", info.getProperty("inbox", "something").value);
+
+ info.setProperty("inbox", "another", new UserInfo.Val("boo"));
+ assertEquals("boo", info.getProperty("inbox", "another").value);
+
+
+ info = new UserInfo(repo);
+ info.init(repo, "wankle");
+ info.setProperty("inbox", "something", new UserInfo.Val("boo"));
+
+ assertEquals("boo", info.getProperty("inbox", "something").value);
+ info.setProperty("inbox", "something", new UserInfo.Val("boo2"));
+
+ assertEquals("boo2", info.getProperty("inbox", "something").value);
+
+ info.setProperty("inbox", "another", new UserInfo.Val("boo"));
+ assertEquals("boo", info.getProperty("inbox", "another").value);
+
+ assertEquals(perms_.size(), pm.retrieveUserPermissions("wankle").size());
+
+
+ pm.updateUserPermissions("wankle", perms_);
+ info = new UserInfo(repo);
+ assertEquals("boo", info.getProperty("inbox", "another").value);
+
+ pm.removeUserPermissions("wankle");
+ info = new UserInfo(repo);
+ assertEquals("boo", info.getProperty("inbox", "another").value);
+
+
+ info = new UserInfo(repo);
+ info.init(repo, "meee");
+ info.setProperty("inbox", "whee", new UserInfo.Val("boo"));
+
+ assertEquals("boo", info.getProperty("inbox", "whee").value);
+
+
+ info = new UserInfo(repo);
+ assertEquals("boo", info.getProperty("inbox", "another").value);
+
+
+
+
+ }
+
+ public void testIterateOverUsers() throws Exception {
+ RulesRepository repo = RepositorySessionUtil.getRepository();
+
+
+
+ final List<String> names = new ArrayList<String>();
+
+ 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());
+ }
+ });
+
+ assertTrue(names.size() > 0) ;
+ assertTrue(names.contains("michael"));
+
+
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/security/PermissionManagerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/security/PermissionManagerTest.java 2009-08-21 04:32:26 UTC (rev 29005)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/security/PermissionManagerTest.java 2009-08-21 07:19:26 UTC (rev 29006)
@@ -92,7 +92,7 @@
public void testListingUsers() throws Exception {
PermissionManager pm = new PermissionManager(RepositorySessionUtil.getRepository());
- pm.deleteAllPermissions();
+ pm.deleteAllUsers();
Map<String, List<String>> perms = new HashMap<String, List<String>>() {{
put("package.admin", new ArrayList<String>() {{add("1234567890");}});
More information about the jboss-svn-commits
mailing list