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/11 15:17:39 UTC

svn commit: r1033947 - 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 11 14:17:39 2010
New Revision: 1033947

URL: http://svn.apache.org/viewvc?rev=1033947&view=rev
Log:
JCR-2800: Implement search facility for users and groups
enhanced selector mechanism
work in progress

Modified:
    jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/QueryBuilder.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryBuilder.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java

Modified: jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/QueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/QueryBuilder.java?rev=1033947&r1=1033946&r2=1033947&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/QueryBuilder.java (original)
+++ jackrabbit/trunk/jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/QueryBuilder.java Thu Nov 11 14:17:39 2010
@@ -46,11 +46,6 @@ public interface QueryBuilder<T> {
     }
 
     /**
-     * The selectors for a query. 
-     */
-    enum Selector { AUTHORIZABLE, USER, GROUP }
-
-    /**
      * Relational operators for comparing a property to a value. Correspond
      * to the general comparison operators as define in JSR-170.
      * The {@link #EX} tests for existence of a property.   
@@ -76,11 +71,12 @@ public interface QueryBuilder<T> {
     }
 
     /**
-     * Set the selector for the query.
+     * Set the selector for the query. The selector determines whether the query
+     * returns all {@link Authorizable}s or just {@link User}s respectively {@link Group}s. 
      *
-     * @param selector  One of {@link Selector#AUTHORIZABLE}, {@link Selector#USER} or {@link Selector#GROUP} 
+     * @param selector  The selector for the query
      */
-    void setSelector(Selector selector);
+    void setSelector(Class<? extends Authorizable> selector);
 
     /**
      * Set the scope for the query. If set, the query will only return members of a specific group.

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryBuilder.java?rev=1033947&r1=1033946&r2=1033947&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryBuilder.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryBuilder.java Thu Nov 11 14:17:39 2010
@@ -17,6 +17,7 @@
 
 package org.apache.jackrabbit.core.security.user;
 
+import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.QueryBuilder;
 
 import javax.jcr.RepositoryException;
@@ -40,7 +41,7 @@ public class XPathQueryBuilder implement
         void visit(OrCondition condition) throws RepositoryException;
     }
 
-    private Selector selector = Selector.AUTHORIZABLE;
+    private Class<? extends Authorizable> selector = Authorizable.class;
     private String groupName;
     private boolean declaredMembersOnly;
     private Condition condition;
@@ -50,7 +51,7 @@ public class XPathQueryBuilder implement
     private long offset;
     private long maxCount = -1;
 
-    Selector getSelector() {
+    Class<? extends Authorizable> getSelector() {
         return selector;
     }
 
@@ -88,7 +89,7 @@ public class XPathQueryBuilder implement
     
     //------------------------------------------< QueryBuilder >---
 
-    public void setSelector(Selector selector) {
+    public void setSelector(Class<? extends Authorizable> selector) {
         this.selector = selector;
     }
 

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java?rev=1033947&r1=1033946&r2=1033947&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java Thu Nov 11 14:17:39 2010
@@ -21,7 +21,7 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.QueryBuilder.Direction;
 import org.apache.jackrabbit.api.security.user.QueryBuilder.RelationOp;
-import org.apache.jackrabbit.api.security.user.QueryBuilder.Selector;
+import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.core.NodeImpl;
 import org.apache.jackrabbit.core.SessionImpl;
 import org.apache.jackrabbit.core.security.user.XPathQueryBuilder.Condition;
@@ -32,7 +32,10 @@ import org.apache.jackrabbit.spi.commons
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.jcr.*;
+import javax.jcr.Node;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
 import javax.jcr.query.Query;
 import javax.jcr.query.QueryManager;
 import java.util.Iterator;
@@ -173,19 +176,15 @@ public class XPathQueryEvaluator impleme
 
     //------------------------------------------< private >---
 
-    private String getNtName(Selector selector) throws RepositoryException {
-        switch (selector) {
-            case AUTHORIZABLE:
-                return session.getJCRName(UserConstants.NT_REP_AUTHORIZABLE);
-
-            case USER:
-                return session.getJCRName(UserConstants.NT_REP_USER);
-
-            case GROUP:
-                return session.getJCRName(UserConstants.NT_REP_GROUP);
-
-            default:
-                throw new RepositoryException("Invalid selector: " + selector);
+    private String getNtName(Class<? extends Authorizable> selector) throws RepositoryException {
+        if (User.class.isAssignableFrom(selector)) {
+            return session.getJCRName(UserConstants.NT_REP_USER);
+        }
+        else if (Group.class.isAssignableFrom(selector)) {
+            return session.getJCRName(UserConstants.NT_REP_GROUP);
+        }
+        else {
+            return session.getJCRName(UserConstants.NT_REP_AUTHORIZABLE);
         }
     }
 

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java?rev=1033947&r1=1033946&r2=1033947&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java Thu Nov 11 14:17:39 2010
@@ -19,7 +19,6 @@ package org.apache.jackrabbit.api.securi
 
 import org.apache.jackrabbit.api.security.user.QueryBuilder.Direction;
 import org.apache.jackrabbit.api.security.user.QueryBuilder.RelationOp;
-import org.apache.jackrabbit.api.security.user.QueryBuilder.Selector;
 import org.apache.jackrabbit.spi.commons.iterator.Iterators;
 import org.apache.jackrabbit.spi.commons.iterator.Predicate;
 
@@ -185,30 +184,27 @@ public class UserManagerSearchTest exten
     }
 
     public void testSelector() throws RepositoryException {
-        for (final Selector s : Selector.values()) {
+        List<Class<? extends Authorizable>> selectors = new ArrayList<Class<? extends Authorizable>>();
+        selectors.add(Authorizable.class);
+        selectors.add(Group.class);
+        selectors.add(User.class);
+
+        for (final Class<? extends Authorizable> s : selectors) {
             Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() {
                 public <T> void build(QueryBuilder<T> builder) {
                     builder.setSelector(s);
                 }
             });
 
-            switch (s) {
-                case AUTHORIZABLE:
-                    assertContainsAll(result, authorizables.iterator());
-                    break;
-
-                case USER:
-                    assertContainsAll(result, users.iterator());
-                    break;
-
-                case GROUP:
-                    assertContainsAll(result, groups.iterator());
-                    break;
-
-                default:
-                    fail("Fall through in switch");
+            if (User.class.isAssignableFrom(s)) {
+                assertContainsAll(result, users.iterator());
+            }
+            else if (Group.class.isAssignableFrom(s)) {
+                assertContainsAll(result, groups.iterator());
+            }
+            else {
+                assertContainsAll(result, authorizables.iterator());
             }
-
         }
     }
 
@@ -254,7 +250,7 @@ public class UserManagerSearchTest exten
             Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() {
                 public <T> void build(QueryBuilder<T> builder) {
                     try {
-                        builder.setSelector(Selector.USER);
+                        builder.setSelector(User.class);
                         builder.setScope(g.getID(), false);
                     } catch (RepositoryException e) {
                         fail(e.getMessage());
@@ -278,7 +274,7 @@ public class UserManagerSearchTest exten
             Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() {
                 public <T> void build(QueryBuilder<T> builder) {
                     try {
-                        builder.setSelector(Selector.GROUP);
+                        builder.setSelector(Group.class);
                         builder.setScope(g.getID(), true);
                     } catch (RepositoryException e) {
                         fail(e.getMessage());