[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