You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2010/11/04 19:07:28 UTC

svn commit: r1031115 - in /jackrabbit/trunk: jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/...

Author: mduerig
Date: Thu Nov  4 18:07:28 2010
New Revision: 1031115

URL: http://svn.apache.org/viewvc?rev=1031115&view=rev
Log:
JCR-2804: Add isDeclaredMember() method to Group

Modified:
    jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/Group.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java

Modified: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/Group.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/Group.java?rev=1031115&r1=1031114&r2=1031115&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/Group.java (original)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/Group.java Thu Nov  4 18:07:28 2010
@@ -40,6 +40,14 @@ public interface Group extends Authoriza
     Iterator<Authorizable> getMembers() throws RepositoryException;
 
     /**
+     * Test whether an {@link Authorizable} is a declared member of this group.
+     * @param authorizable  The <code>Authorizable</code> to test.
+     * @return  <code>true</code> if the Authorizable to test is a direct member
+     * @throws RepositoryException  If an error occurs.
+     */
+    boolean isDeclaredMember(Authorizable authorizable) throws RepositoryException;
+    
+    /**
      * @param authorizable The <code>Authorizable</code> to test.
      * @return true if the Authorizable to test is a direct or indirect member
      * of this Group.

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java?rev=1031115&r1=1031114&r2=1031115&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java Thu Nov  4 18:07:28 2010
@@ -104,6 +104,16 @@ class GroupImpl extends AuthorizableImpl
         return getMembers(true, UserManager.SEARCH_TYPE_AUTHORIZABLE);
     }
 
+    public boolean isDeclaredMember(Authorizable authorizable) throws RepositoryException {
+        if (authorizable == null || !(authorizable instanceof AuthorizableImpl)
+                || getNode().isSame(((AuthorizableImpl) authorizable).getNode())) {
+            return false;
+        }
+        else {
+            return getMembershipProvider(getNode()).hasMember((AuthorizableImpl) authorizable);
+        }
+    }
+
     /**
      * @see Group#isMember(Authorizable)
      */
@@ -330,6 +340,7 @@ class GroupImpl extends AuthorizableImpl
         boolean addMember(AuthorizableImpl authorizable) throws RepositoryException;
         boolean removeMember(AuthorizableImpl authorizable) throws RepositoryException;
         Iterator<Authorizable> getMembers(boolean includeIndirect, int type) throws RepositoryException;
+        boolean hasMember(AuthorizableImpl authorizable) throws RepositoryException;
     }
 
     private class PropertyBasedMembershipProvider implements MembershipProvider {
@@ -413,6 +424,21 @@ class GroupImpl extends AuthorizableImpl
             }
         }
 
+        public boolean hasMember(AuthorizableImpl authorizable) throws RepositoryException {
+            if (node.hasProperty(P_MEMBERS)) {
+                Value[] members = node.getProperty(P_MEMBERS).getValues();
+                for (Value v : members) {
+                    if (authorizable.getNode().getIdentifier().equals(v.getString())) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+            else {
+                return false;
+            }
+        }
+
     }
 
     private class NodeBasedMembershipProvider implements MembershipProvider {
@@ -510,6 +536,16 @@ class GroupImpl extends AuthorizableImpl
             }
         }
 
+        public boolean hasMember(AuthorizableImpl authorizable) throws RepositoryException {
+            if (node.hasNode(N_MEMBERS)) {
+                PropertySequence members = getPropertySequence(node.getNode(N_MEMBERS), userManager);
+                return members.hasItem(authorizable.getID());
+            }
+            else {
+                return false;
+            }
+        }
+
     }
 
     // -----------------------------------------------------< utility >---

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java?rev=1031115&r1=1031114&r2=1031115&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java Thu Nov  4 18:07:28 2010
@@ -258,6 +258,43 @@ public class GroupTest extends AbstractU
         }
     }
 
+    public void testIsDeclaredMember() throws RepositoryException, NotExecutableException {
+        User auth = getTestUser(superuser);
+        Group newGroup1 = null;
+        Group newGroup2 = null;
+        try {
+            newGroup1 = userMgr.createGroup(getTestPrincipal());
+            newGroup2 = userMgr.createGroup(getTestPrincipal());
+            save(superuser);
+
+            assertFalse(newGroup1.isDeclaredMember(auth));
+            assertFalse(newGroup2.isDeclaredMember(auth));
+
+            assertTrue(newGroup2.addMember(auth));
+            save(superuser);
+            assertTrue(newGroup2.isDeclaredMember(auth));
+            assertTrue(newGroup2.isDeclaredMember(userMgr.getAuthorizable(auth.getID())));
+
+            assertTrue(newGroup1.addMember(newGroup2));
+            save(superuser);
+            assertTrue(newGroup1.isDeclaredMember(newGroup2));
+            assertTrue(newGroup1.isDeclaredMember(userMgr.getAuthorizable(newGroup2.getID())));
+            assertTrue(newGroup1.isMember(auth));
+            assertTrue(newGroup1.isMember(userMgr.getAuthorizable(auth.getID())));
+            assertFalse(newGroup1.isDeclaredMember(auth));
+            assertFalse(newGroup1.isDeclaredMember(userMgr.getAuthorizable(auth.getID())));
+        } finally {
+            if (newGroup1 != null) {
+                newGroup1.remove();
+                save(superuser);
+            }
+            if (newGroup2 != null) {
+                newGroup2.remove();
+                save(superuser);
+            }
+        }
+    }
+
     public void testAddMemberTwice() throws NotExecutableException, RepositoryException {
         User auth = getTestUser(superuser);
         Group newGroup = null;
@@ -532,4 +569,5 @@ public class GroupTest extends AbstractU
             assertFalse(groupId.equals(it.next().getID()));
         }
     }
+
 }
\ No newline at end of file



Re: svn commit: r1031115 - in /jackrabbit/trunk: jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/...

Posted by Felix Meschberger <fm...@adobe.com>.
Hi

Am Donnerstag, den 04.11.2010, 18:07 +0000 schrieb mduerig@apache.org: 
> Author: mduerig
> Date: Thu Nov  4 18:07:28 2010
> New Revision: 1031115
> 
> URL: http://svn.apache.org/viewvc?rev=1031115&view=rev

> /**
> +     * Test whether an {@link Authorizable} is a declared member of this group.
> +     * @param authorizable  The <code>Authorizable</code> to test.
> +     * @return  <code>true</code> if the Authorizable to test is a direct member
> +     * @throws RepositoryException  If an error occurs.
> +     */
> +    boolean isDeclaredMember(Authorizable authorizable) throws RepositoryException;

I suggest you add a @since tag to this.

Regards
Felix

> +    
> +    /**
>       * @param authorizable The <code>Authorizable</code> to test.
>       * @return true if the Authorizable to test is a direct or indirect member
>       * of this Group.
> 
> Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java?rev=1031115&r1=1031114&r2=1031115&view=diff
> ==============================================================================
> --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java (original)
> +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java Thu Nov  4 18:07:28 2010
> @@ -104,6 +104,16 @@ class GroupImpl extends AuthorizableImpl
>          return getMembers(true, UserManager.SEARCH_TYPE_AUTHORIZABLE);
>      }
>  
> +    public boolean isDeclaredMember(Authorizable authorizable) throws RepositoryException {
> +        if (authorizable == null || !(authorizable instanceof AuthorizableImpl)
> +                || getNode().isSame(((AuthorizableImpl) authorizable).getNode())) {
> +            return false;
> +        }
> +        else {
> +            return getMembershipProvider(getNode()).hasMember((AuthorizableImpl) authorizable);
> +        }
> +    }
> +
>      /**
>       * @see Group#isMember(Authorizable)
>       */
> @@ -330,6 +340,7 @@ class GroupImpl extends AuthorizableImpl
>          boolean addMember(AuthorizableImpl authorizable) throws RepositoryException;
>          boolean removeMember(AuthorizableImpl authorizable) throws RepositoryException;
>          Iterator<Authorizable> getMembers(boolean includeIndirect, int type) throws RepositoryException;
> +        boolean hasMember(AuthorizableImpl authorizable) throws RepositoryException;
>      }
>  
>      private class PropertyBasedMembershipProvider implements MembershipProvider {
> @@ -413,6 +424,21 @@ class GroupImpl extends AuthorizableImpl
>              }
>          }
>  
> +        public boolean hasMember(AuthorizableImpl authorizable) throws RepositoryException {
> +            if (node.hasProperty(P_MEMBERS)) {
> +                Value[] members = node.getProperty(P_MEMBERS).getValues();
> +                for (Value v : members) {
> +                    if (authorizable.getNode().getIdentifier().equals(v.getString())) {
> +                        return true;
> +                    }
> +                }
> +                return false;
> +            }
> +            else {
> +                return false;
> +            }
> +        }
> +
>      }
>  
>      private class NodeBasedMembershipProvider implements MembershipProvider {
> @@ -510,6 +536,16 @@ class GroupImpl extends AuthorizableImpl
>              }
>          }
>  
> +        public boolean hasMember(AuthorizableImpl authorizable) throws RepositoryException {
> +            if (node.hasNode(N_MEMBERS)) {
> +                PropertySequence members = getPropertySequence(node.getNode(N_MEMBERS), userManager);
> +                return members.hasItem(authorizable.getID());
> +            }
> +            else {
> +                return false;
> +            }
> +        }
> +
>      }
>  
>      // -----------------------------------------------------< utility >---
> 
> Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java
> URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java?rev=1031115&r1=1031114&r2=1031115&view=diff
> ==============================================================================
> --- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java (original)
> +++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java Thu Nov  4 18:07:28 2010
> @@ -258,6 +258,43 @@ public class GroupTest extends AbstractU
>          }
>      }
>  
> +    public void testIsDeclaredMember() throws RepositoryException, NotExecutableException {
> +        User auth = getTestUser(superuser);
> +        Group newGroup1 = null;
> +        Group newGroup2 = null;
> +        try {
> +            newGroup1 = userMgr.createGroup(getTestPrincipal());
> +            newGroup2 = userMgr.createGroup(getTestPrincipal());
> +            save(superuser);
> +
> +            assertFalse(newGroup1.isDeclaredMember(auth));
> +            assertFalse(newGroup2.isDeclaredMember(auth));
> +
> +            assertTrue(newGroup2.addMember(auth));
> +            save(superuser);
> +            assertTrue(newGroup2.isDeclaredMember(auth));
> +            assertTrue(newGroup2.isDeclaredMember(userMgr.getAuthorizable(auth.getID())));
> +
> +            assertTrue(newGroup1.addMember(newGroup2));
> +            save(superuser);
> +            assertTrue(newGroup1.isDeclaredMember(newGroup2));
> +            assertTrue(newGroup1.isDeclaredMember(userMgr.getAuthorizable(newGroup2.getID())));
> +            assertTrue(newGroup1.isMember(auth));
> +            assertTrue(newGroup1.isMember(userMgr.getAuthorizable(auth.getID())));
> +            assertFalse(newGroup1.isDeclaredMember(auth));
> +            assertFalse(newGroup1.isDeclaredMember(userMgr.getAuthorizable(auth.getID())));
> +        } finally {
> +            if (newGroup1 != null) {
> +                newGroup1.remove();
> +                save(superuser);
> +            }
> +            if (newGroup2 != null) {
> +                newGroup2.remove();
> +                save(superuser);
> +            }
> +        }
> +    }
> +
>      public void testAddMemberTwice() throws NotExecutableException, RepositoryException {
>          User auth = getTestUser(superuser);
>          Group newGroup = null;
> @@ -532,4 +569,5 @@ public class GroupTest extends AbstractU
>              assertFalse(groupId.equals(it.next().getID()));
>          }
>      }
> +
>  }
> \ No newline at end of file
> 
>