[jboss-svn-commits] JBL Code SVN: r21147 - in labs/jbossrules/trunk/drools-repository/src: main/java/org/drools/repository/remoteapi and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 21 20:56:29 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-07-21 20:56:28 -0400 (Mon, 21 Jul 2008)
New Revision: 21147

Added:
   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
Modified:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/remoteapi/RestAPI.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/CategoryItemTest.java
   labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/remoteapi/RestAPITest.java
Log:
added permission manager + some fixes for rest API and versions and archiving

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2008-07-21 19:07:51 UTC (rev 21146)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2008-07-22 00:56:28 UTC (rev 21147)
@@ -98,6 +98,7 @@
      */
     public final static String  RULES_REPOSITORY_NAME = "drools:repository";
 
+
     private Session             session;
 
     static boolean initialized = false;
@@ -168,7 +169,7 @@
         this.session.logout();
     }
 
-    private Node getAreaNode(String areaName) throws RulesRepositoryException {
+    public Node getAreaNode(String areaName) throws RulesRepositoryException {
         Node folderNode = null;
         int tries = 0;
         while ( folderNode == null && tries < 2 ) {

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/remoteapi/RestAPI.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/remoteapi/RestAPI.java	2008-07-21 19:07:51 UTC (rev 21146)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/remoteapi/RestAPI.java	2008-07-22 00:56:28 UTC (rev 21147)
@@ -97,12 +97,18 @@
 				String version = v[1];
 				String assetName = AssetItem.getAssetNameFromFileName(v[0])[0];
 				AssetItem asset = pkg.loadAsset(assetName);
+				if (asset.isArchived()) {
+					Text r = new Text();
+					r.data = "";
+					return r;
+				}
 				if (version.equals("all")) {
 					AssetHistoryIterator it =  asset.getHistory();
 					StringBuilder buf = new StringBuilder();
 					while(it.hasNext()) {
 
 						AssetItem h = it.next();
+
 						if (h.getVersionNumber() != 0) {
 							String checkinComment = h.getCheckinComment();
 							//String lastMo ... hmm what is needed?
@@ -176,12 +182,14 @@
 
 		while (it.hasNext()) {
 			AssetItem a = it.next();
-			Calendar lastMod = a.getLastModified();
-			if (lastMod == null) {
-				lastMod = a.getCreatedDate();
+			if (!a.isArchived()) {
+				Calendar lastMod = a.getLastModified();
+				if (lastMod == null) {
+					lastMod = a.getCreatedDate();
+				}
+				sb.append(a.getName() + "." + a.getFormat() + "=" + sdf.format(lastMod.getTime()) + "," + a.getVersionNumber());
+				sb.append('\n');
 			}
-			sb.append(a.getName() + "." + a.getFormat() + "=" + sdf.format(lastMod.getTime()) + "," + a.getVersionNumber());
-			sb.append('\n');
 		}
 
 		Text r = new Response.Text();

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/security/PermissionManager.java	2008-07-22 00:56:28 UTC (rev 21147)
@@ -0,0 +1,99 @@
+package org.drools.repository.security;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+
+import org.drools.repository.RulesRepository;
+
+/**
+ * Deals with storing permissions for data and so on.
+ * @author Michael Neale
+ */
+public class PermissionManager {
+
+    private RulesRepository repository;
+
+    public PermissionManager(RulesRepository repo) {
+        this.repository = repo;
+    }
+
+    /**
+     * Save the users permissions.
+     * @param userName = obviously, the user name.
+     * @param perms - a map of the role type to the targets that it applies to.
+     * eg: package.admin => PACKAGE UUID
+     * analyst => category path
+     * ADMIN => empty (no list needed for admin)
+     * @throws RepositoryException
+     */
+    public void updateUserPermissions(String userName, Map<String, List<String>> perms) throws RepositoryException {
+    	Node permsNode = getUserPermissionNode(userName);
+    	for (Iterator<String> iterator = perms.keySet().iterator(); iterator.hasNext();) {
+			String perm = iterator.next();
+			List<String> targets = perms.get(perm);
+			if (targets == null) targets = new ArrayList<String>();
+			permsNode.setProperty(perm, targets.toArray(new String[targets.size()]));
+		}
+    	this.repository.save();
+    }
+
+	private Node getUserPermissionNode(String userName)
+			throws RepositoryException {
+		Node root = this.repository.getSession().getRootNode();
+    	Node permsNode = getNode(getNode(getNode(root, "user_info"), userName), "permissions");
+		return permsNode;
+	}
+
+
+    /**
+     * obtain a mapping of permissions for a given user.
+     * @throws RepositoryException
+     */
+    public Map<String, List<String>> retrieveUserPermissions(String userName) throws RepositoryException {
+    	Node permsNode = getUserPermissionNode(userName);
+    	PropertyIterator it = permsNode.getProperties();
+    	Map<String, List<String>> result = new HashMap<String, List<String>>(10);
+    	while (it.hasNext()) {
+    		Property p = (Property) it.next();
+    		String name = p.getName();
+    		if (!name.startsWith("jcr")) {
+	    		Value[] vs = p.getValues();
+	    		List<String> perms = new ArrayList<String>();
+	    		for (int i = 0; i < vs.length; i++) {
+					perms.add(vs[i].getString());
+				}
+	    		result.put(name, perms);
+    		}
+    	}
+    	return result;
+    }
+
+    /**
+     * Gets or creates a node.
+     */
+	private Node getNode(Node node, String name) throws RepositoryException {
+		Node permsNode;
+		if (!node.hasNode(name)) {
+    		permsNode = node.addNode(name);
+    	} else {
+    		permsNode = node.getNode(name);
+    	}
+		return permsNode;
+	}
+
+
+
+
+
+
+}


Property changes on: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/security/PermissionManager.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/CategoryItemTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/CategoryItemTest.java	2008-07-21 19:07:51 UTC (rev 21146)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/CategoryItemTest.java	2008-07-22 00:56:28 UTC (rev 21147)
@@ -12,36 +12,37 @@
 
 public class CategoryItemTest extends TestCase {
 
-    
-    
-    public void testTagItem() {
-        
+
+
+    public void testTagItem() throws Exception {
+
             final CategoryItem root = getRepo().loadCategory( "/" );
-            
+
             root.addCategory( "TestTag", "nothing to see" );
-            
-            
+
+
+
             CategoryItem tagItem1 = getRepo().loadCategory("TestTag");
             assertNotNull(tagItem1);
-            assertEquals("TestTag", tagItem1.getName());                        
-            
+            assertEquals("TestTag", tagItem1.getName());
+
             CategoryItem tagItem2 = getRepo().loadCategory("TestTag");
             assertNotNull(tagItem2);
             assertEquals("TestTag", tagItem2.getName());
             assertEquals(tagItem1, tagItem2);
-            
+
             List originalCats = getRepo().loadCategory( "/" ).getChildTags(); //listCategoryNames();
-            assertTrue(originalCats.size() > 0);            
-            
+            assertTrue(originalCats.size() > 0);
+
             CategoryItem rootCat = (CategoryItem) originalCats.get( 0 );
             assertNotNull(rootCat.getName());
             assertNotNull(rootCat.getFullPath());
-            
+
             root.addCategory( "FootestTagItem", "nothing" );
-            
+
             List cats = root.getChildTags();
-            assertEquals(originalCats.size() + 1, cats.size());            
-            
+            assertEquals(originalCats.size() + 1, cats.size());
+
             boolean found = false;
             for ( Iterator iter = cats.iterator(); iter.hasNext(); ) {
                 CategoryItem element = (CategoryItem) iter.next();
@@ -49,27 +50,27 @@
                     found = true; break;
                 }
             }
-            
+
             assertTrue(found);
-    
-    }    
-    
+
+    }
+
     public void testCreateCateories() throws Exception {
         RulesRepository repo = getRepo();
-        
+
         //load the root
         CategoryItem root = repo.loadCategory( "/" );
-        
+
         CategoryItem item = root.addCategory("testCreateCategories", "this is a top level one");
         assertEquals("testCreateCategories", item.getName());
         assertEquals("testCreateCategories", item.getFullPath());
-        
+
         item = repo.loadCategory( "testCreateCategories" );
         assertEquals("testCreateCategories", item.getName());
-        
+
         item.remove();
         repo.save();
-        
+
         try {
             repo.loadCategory( "testCreateCategories" );
             fail("this should not exist");
@@ -77,103 +78,103 @@
             assertNotNull(e.getCause());
         }
     }
-    
-    public void testGetChildTags() {        
+
+    public void testGetChildTags() {
             CategoryItem tagItem1 = getRepo().loadCategory("TestTag");
             assertNotNull(tagItem1);
-            assertEquals("TestTag", tagItem1.getName());                        
-            
+            assertEquals("TestTag", tagItem1.getName());
+
             List childTags = tagItem1.getChildTags();
             assertNotNull(childTags);
-            assertEquals(0, childTags.size());            
+            assertEquals(0, childTags.size());
 
-            tagItem1.addCategory( "TestChildTag1", "description" );            
-            
+            tagItem1.addCategory( "TestChildTag1", "description" );
+
             childTags = tagItem1.getChildTags();
             assertNotNull(childTags);
             assertEquals(1, childTags.size());
             assertEquals("TestChildTag1", ((CategoryItem)childTags.get(0)).getName());
-            
+
             tagItem1.addCategory( "AnotherChild", "ignore me" );
-            
+
             childTags = tagItem1.getChildTags();
             assertNotNull(childTags);
             assertEquals(2, childTags.size());
     }
-    
+
     public void testGetChildTag() {
             CategoryItem root = getRepo().loadCategory( "/" );
             CategoryItem tagItem1 = root.addCategory("testGetChildTag", "yeah");
             assertNotNull(tagItem1);
-            assertEquals("testGetChildTag", tagItem1.getName());                        
-            
+            assertEquals("testGetChildTag", tagItem1.getName());
+
             //test that child is added if not already in existence
             List childTags = tagItem1.getChildTags();
             assertNotNull(childTags);
             assertEquals(0, childTags.size());
-            
+
             CategoryItem childTagItem1 = tagItem1.addCategory("TestChildTag1", "woo");
             assertNotNull(childTagItem1);
             assertEquals("TestChildTag1", childTagItem1.getName());
-                        
+
             //test that if already there, it is returned
             CategoryItem childTagItem2 = getRepo().loadCategory( "testGetChildTag/TestChildTag1");
             assertNotNull(childTagItem2);
             assertEquals("TestChildTag1", childTagItem2.getName());
             assertEquals(childTagItem1, childTagItem2);
     }
-    
+
     public void testGetFullPath() {
-        
+
             CategoryItem root = getRepo().loadCategory( "/" );
-        
+
             CategoryItem tagItem1 = root.addCategory("testGetFullPath", "foo");
             assertNotNull(tagItem1);
-            assertEquals("testGetFullPath", tagItem1.getFullPath());                        
-                                    
+            assertEquals("testGetFullPath", tagItem1.getFullPath());
+
             CategoryItem childTagItem1 = tagItem1.addCategory("TestChildTag1", "foo");
             assertNotNull(childTagItem1);
             assertEquals("testGetFullPath/TestChildTag1", childTagItem1.getFullPath());
-                        
+
             CategoryItem childTagItem2 = childTagItem1.addCategory("TestChildTag2", "wee");
             assertNotNull(childTagItem2);
             assertEquals("testGetFullPath/TestChildTag1/TestChildTag2", childTagItem2.getFullPath());
-            
-            
 
+
+
     }
-    
+
     public void testRemoveCategoryUneeded() {
         RulesRepository repo = getRepo();
         repo.loadCategory( "/" ).addCategory( "testRemoveCat", "a" );
         AssetItem as = repo.loadDefaultPackage().addAsset( "testRemoveCategory", "a", "testRemoveCat", "drl" );
         as.checkin( "a" );
         as.updateCategoryList( new String[] {} );
-        
+
         as.checkin( "a" );
-        
+
         as = repo.loadDefaultPackage().loadAsset( "testRemoveCategory" );
         assertEquals(0, as.getCategories().size());
-        
-        
+
+
         repo.loadCategory( "testRemoveCat" ).remove();
         repo.save();
-        
+
     }
-    
-    
+
+
     public void testRemoveCategoryLinkedWithArchived() {
         RulesRepository repo = getRepo();
         repo.loadCategory( "/" ).addCategory( "testRemoveCategoryWithArchivedCat", "a" );
         AssetItem as = repo.loadDefaultPackage().addAsset( "testRemoveCategoryWithArchivedAsset", "a", "testRemoveCategoryWithArchivedCat", "drl" );
         as.checkin( "a" );
-        
-        as.archiveItem(true);     
-        
+
+        as.archiveItem(true);
+
         repo.loadCategory( "testRemoveCategoryWithArchivedCat" ).remove();
-        repo.save();       
-        
-//        as.remove();   
+        repo.save();
+
+//        as.remove();
     }
 
     private RulesRepository getRepo() {

Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/remoteapi/RestAPITest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/remoteapi/RestAPITest.java	2008-07-21 19:07:51 UTC (rev 21146)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/remoteapi/RestAPITest.java	2008-07-22 00:56:28 UTC (rev 21147)
@@ -171,6 +171,9 @@
 		d = new String(out.toByteArray());
 		assertEquals("this is content", d);
 
+
+
+
 		res = api.get("packages");
 		res = api.get("packages?version=all");
 
@@ -182,6 +185,53 @@
 
 	}
 
+	public void testVersionHistoryAndArchived() throws Exception {
+		RulesRepository repo = RepositorySessionUtil.getRepository();
+		PackageItem pkg = repo.createPackage("testVersionHistoryAndArchived", "");
+		repo.save();
+
+
+		AssetItem asset1 = pkg.addAsset("asset1", "");
+		asset1.updateContent("this is content");
+		asset1.updateFormat("drl");
+		asset1.checkin("This is something");
+
+		AssetItem asset2 = pkg.addAsset("asset2", "");
+		asset2.updateContent("this is content");
+		asset2.updateFormat("drl");
+		asset2.checkin("This is another");
+
+		assertEquals(1, asset1.getVersionNumber());
+
+		RestAPI api = new RestAPI(repo);
+		Text res = (Text) api.get("packages/testVersionHistoryAndArchived");
+		System.err.println(res.data);
+		assertTrue(res.data.indexOf("asset2.drl") > -1);
+
+		asset2.archiveItem(true);
+		asset2.checkin("");
+
+		res = (Text) api.get("packages/testVersionHistoryAndArchived");
+		assertEquals(-1, res.data.indexOf("asset2.drl"));
+
+
+		Response resp = api.get("packages/testVersionHistoryAndArchived/asset1.drl?version=all");
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+		res.writeData(out);
+		String d = new String(out.toByteArray());
+		assertNotNull(d);
+
+		resp = api.get("packages/testVersionHistoryAndArchived/asset2.drl?version=all");
+		out = new ByteArrayOutputStream();
+
+		resp.writeData(out);
+		d = new String(out.toByteArray());
+		assertEquals("", d);
+
+
+	}
+
 	public void testPost() throws Exception {
 		RulesRepository repo = RepositorySessionUtil.getRepository();
 		PackageItem pkg = repo.createPackage("testRestPost", "");

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/security/PermissionManagerTest.java	2008-07-22 00:56:28 UTC (rev 21147)
@@ -0,0 +1,62 @@
+package org.drools.repository.security;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.repository.RepositorySessionUtil;
+
+import junit.framework.TestCase;
+
+public class PermissionManagerTest extends TestCase {
+
+	public void testLoadSave() throws Exception {
+		PermissionManager pm = new PermissionManager(RepositorySessionUtil.getRepository());
+		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");
+		assertEquals(perms.size(), perms_.size());
+
+		perms_ = pm.retrieveUserPermissions("wankle");
+		assertEquals(perms.size(), perms_.size());
+
+		List<String> padmin = perms_.get("package.admin");
+		assertEquals(1, padmin.size());
+		assertEquals("1234567890", padmin.get(0));
+
+		List<String> pdev = perms_.get("package.developer");
+		assertEquals(2, pdev.size());
+
+		perms = new HashMap<String, List<String>>() {{
+			put("admin", null);
+		}};
+		pm.updateUserPermissions("wankle2", perms);
+
+		perms_ = pm.retrieveUserPermissions("wankle2");
+		List<String> aperms = perms_.get("admin");
+		assertEquals(0, aperms.size());
+
+		perms_ = pm.retrieveUserPermissions("wankle");
+
+		padmin = perms_.get("package.admin");
+		assertEquals(1, padmin.size());
+		assertEquals("1234567890", padmin.get(0));
+
+	}
+
+	public void testNilUser() throws Exception {
+		PermissionManager pm = new PermissionManager(RepositorySessionUtil.getRepository());
+		Map<String, List<String>> perms_ = pm.retrieveUserPermissions("nobody");
+		assertEquals(0, perms_.size());
+
+		perms_ = pm.retrieveUserPermissions("nobody");
+		assertEquals(0, perms_.size());
+	}
+}


Property changes on: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/security/PermissionManagerTest.java
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list