[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