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/10 16:46:26 UTC
svn commit: r1033535 - 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/
Author: mduerig
Date: Wed Nov 10 15:46:25 2010
New Revision: 1033535
URL: http://svn.apache.org/viewvc?rev=1033535&view=rev
Log:
JCR-2800: Implement search facility for users and groups
removed implementation details from API
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/UserManagerImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.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=1033535&r1=1033534&r2=1033535&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 Wed Nov 10 15:46:25 2010
@@ -29,47 +29,33 @@ public interface QueryBuilder<T> {
DESCENDING("descending", RelationOp.LT);
private final String direction;
- private RelationOp relOp;
+ private final RelationOp collation;
- Direction(String direction, RelationOp relOp) {
+ Direction(String direction, RelationOp collation) {
this.direction = direction;
- this.relOp = relOp;
+ this.collation = collation;
}
public String getDirection() {
return direction;
}
- public RelationOp getRelOp() {
- return relOp;
+ public RelationOp getCollation() {
+ return collation;
}
}
/**
* The selectors for a query.
*/
- enum Selector {
- AUTHORIZABLE("rep:Authorizable"),
- USER("rep:User"),
- GROUP("rep:Group");
-
- private final String ntName;
-
- Selector(String ntName) {
- this.ntName = ntName;
- }
-
- public String getNtName() {
- return ntName;
- }
- }
+ 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.
*/
- enum RelationOp {
+ enum RelationOp {
NE("!="),
EQ("="),
LT("<"),
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java?rev=1033535&r1=1033534&r2=1033535&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java Wed Nov 10 15:46:25 2010
@@ -469,7 +469,7 @@ public class UserManagerImpl extends Pro
public Iterator<Authorizable> findAuthorizables(Query query) throws RepositoryException {
XPathQueryBuilder builder = new XPathQueryBuilder();
query.build(builder);
- return new XPathQueryEvaluator(builder, this, session.getWorkspace().getQueryManager()).eval();
+ return new XPathQueryEvaluator(builder, this, session).eval();
}
/**
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=1033535&r1=1033534&r2=1033535&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 Wed Nov 10 15:46:25 2010
@@ -19,10 +19,12 @@ package org.apache.jackrabbit.core.secur
import org.apache.jackrabbit.api.security.user.Authorizable;
import org.apache.jackrabbit.api.security.user.Group;
-import org.apache.jackrabbit.core.security.user.XPathQueryBuilder.Condition;
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.core.NodeImpl;
+import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.core.security.user.XPathQueryBuilder.Condition;
import org.apache.jackrabbit.spi.commons.iterator.Iterators;
import org.apache.jackrabbit.spi.commons.iterator.Predicate;
import org.apache.jackrabbit.spi.commons.iterator.Predicates;
@@ -30,10 +32,7 @@ import org.apache.jackrabbit.spi.commons
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.jcr.Node;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
+import javax.jcr.*;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import java.util.Iterator;
@@ -47,18 +46,18 @@ public class XPathQueryEvaluator impleme
private final XPathQueryBuilder builder;
private final UserManagerImpl userManager;
- private final QueryManager queryManager;
+ private final SessionImpl session;
private final StringBuilder xPath = new StringBuilder();
- public XPathQueryEvaluator(XPathQueryBuilder builder, UserManagerImpl userManager, QueryManager queryManager) {
+ public XPathQueryEvaluator(XPathQueryBuilder builder, UserManagerImpl userManager, SessionImpl session) {
this.builder = builder;
this.userManager = userManager;
- this.queryManager = queryManager;
+ this.session = session;
}
public Iterator<Authorizable> eval() throws RepositoryException {
xPath.append("//element(*,")
- .append(builder.getSelector().getNtName())
+ .append(getNtName(builder.getSelector()))
.append(')');
Value bound = builder.getBound();
@@ -76,7 +75,7 @@ public class XPathQueryEvaluator impleme
log.warn("Ignoring bound {} since no sort order is specified");
}
else {
- Condition boundCondition = builder.property(sortCol, sortDir.getRelOp(), bound);
+ Condition boundCondition = builder.property(sortCol, sortDir.getCollation(), bound);
condition = condition == null
? boundCondition
: builder.and(condition, boundCondition);
@@ -96,6 +95,7 @@ public class XPathQueryEvaluator impleme
.append(sortDir.getDirection());
}
+ QueryManager queryManager = session.getWorkspace().getQueryManager();
Query query = queryManager.createQuery(xPath.toString(), Query.XPATH);
long maxCount = builder.getMaxCount();
if (maxCount == 0) {
@@ -121,7 +121,7 @@ public class XPathQueryEvaluator impleme
xPath.append(condition.getRelPath());
}
else {
- xPath.append(condition.getRelPath())
+ xPath.append(condition.getRelPath())
.append(condition.getOp().getOp())
.append(format(condition.getValue()));
}
@@ -129,7 +129,7 @@ public class XPathQueryEvaluator impleme
public void visit(XPathQueryBuilder.ContainsCondition condition) {
xPath.append("jcr:contains(")
- .append(condition.getRelPath())
+ .append(condition.getRelPath())
.append(",'")
.append(condition.getSearchExpr())
.append("')");
@@ -173,6 +173,22 @@ 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 static String format(Value value) throws RepositoryException {
switch (value.getType()) {
case PropertyType.STRING: