Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 26263 invoked from network); 3 Dec 2010 10:33:32 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 3 Dec 2010 10:33:32 -0000 Received: (qmail 16913 invoked by uid 500); 3 Dec 2010 10:33:32 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 16809 invoked by uid 500); 3 Dec 2010 10:33:30 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 16801 invoked by uid 99); 3 Dec 2010 10:33:30 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Dec 2010 10:33:30 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Dec 2010 10:33:29 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id DFC442388906; Fri, 3 Dec 2010 10:31:56 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1041765 - in /jackrabbit/branches/2.2: ./ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java Date: Fri, 03 Dec 2010 10:31:56 -0000 To: commits@jackrabbit.apache.org From: mduerig@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101203103156.DFC442388906@eris.apache.org> Author: mduerig Date: Fri Dec 3 10:31:56 2010 New Revision: 1041765 URL: http://svn.apache.org/viewvc?rev=1041765&view=rev Log: 2.2: Merged revision 1041761 (JCR-2829) Modified: jackrabbit/branches/2.2/ (props changed) jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java Propchange: jackrabbit/branches/2.2/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Dec 3 10:31:56 2010 @@ -1 +1 @@ -/jackrabbit/trunk:1040661,1040958 +/jackrabbit/trunk:1040661,1040958,1041761 Modified: jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java?rev=1041765&r1=1041764&r2=1041765&view=diff ============================================================================== --- jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java (original) +++ jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/XPathQueryEvaluator.java Fri Dec 3 10:31:56 2010 @@ -110,11 +110,21 @@ public class XPathQueryEvaluator impleme query.setLimit(maxCount); } - if (offset > 0) { - query.setOffset(offset); + // If we are scoped to a group and have an offset, we need to skip to that offset + // here (inefficient!) otherwise we can apply the offset in the query + if (builder.getGroupName() == null) { + if (offset > 0) { + query.setOffset(offset); + } + return toAuthorizables(execute(query)); + } + else { + Iterator result = filter(toAuthorizables(execute(query)), builder.getGroupName(), builder.isDeclaredMembersOnly()); + for (int c = 0; c < offset && result.hasNext(); c++) { + result.next(); + } + return result; } - - return filter(toAuthorizables(execute(query)), builder.getGroupName(), builder.isDeclaredMembersOnly()); } //------------------------------------------< ConditionVisitor >--- @@ -300,43 +310,38 @@ public class XPathQueryEvaluator impleme boolean declaredMembersOnly) throws RepositoryException { Predicate predicate; - if (groupName == null) { - predicate = Predicates.TRUE(); + Authorizable groupAuth = userManager.getAuthorizable(groupName); + if (groupAuth == null || !groupAuth.isGroup()) { + predicate = Predicates.FALSE(); } else { - Authorizable groupAuth = userManager.getAuthorizable(groupName); - if (groupAuth == null || !groupAuth.isGroup()) { - predicate = Predicates.FALSE(); - } - else { - final Group group = (Group) groupAuth; - if (declaredMembersOnly) { - predicate = new Predicate() { - public boolean evaluate(Authorizable authorizable) { - try { - return authorizable != null && group.isDeclaredMember(authorizable); - } catch (RepositoryException e) { - log.warn("Cannot determine whether {} is member of group {}", authorizable, group); - log.debug(e.getMessage(), e); - return false; - } + final Group group = (Group) groupAuth; + if (declaredMembersOnly) { + predicate = new Predicate() { + public boolean evaluate(Authorizable authorizable) { + try { + return authorizable != null && group.isDeclaredMember(authorizable); + } catch (RepositoryException e) { + log.warn("Cannot determine whether {} is member of group {}", authorizable, group); + log.debug(e.getMessage(), e); + return false; } - }; + } + }; - } - else { - predicate = new Predicate() { - public boolean evaluate(Authorizable authorizable) { - try { - return authorizable != null && group.isMember(authorizable); - } catch (RepositoryException e) { - log.warn("Cannot determine whether {} is member of group {}", authorizable, group); - log.debug(e.getMessage(), e); - return false; - } + } + else { + predicate = new Predicate() { + public boolean evaluate(Authorizable authorizable) { + try { + return authorizable != null && group.isMember(authorizable); + } catch (RepositoryException e) { + log.warn("Cannot determine whether {} is member of group {}", authorizable, group); + log.debug(e.getMessage(), e); + return false; } - }; - } + } + }; } } Modified: jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java?rev=1041765&r1=1041764&r2=1041765&view=diff ============================================================================== --- jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java (original) +++ jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/UserManagerSearchTest.java Fri Dec 3 10:31:56 2010 @@ -702,6 +702,30 @@ public class UserManagerSearchTest exten } } + public void testScopeWithOffset() throws RepositoryException { + final int offset = 5; + final int count = 10000; + + Iterator result = userMgr.findAuthorizables(new Query() { + public void build(QueryBuilder builder) { + builder.setScope("vertebrates", false); + builder.setSortOrder("profile/@weight", Direction.ASCENDING); + builder.setLimit(offset, count); + } + }); + + Iterator expected = userMgr.findAuthorizables(new Query() { + public void build(QueryBuilder builder) { + builder.setScope("vertebrates", false); + builder.setSortOrder("profile/@weight", Direction.ASCENDING); + } + }); + + skip(expected, offset); + assertSame(expected, result, count); + assertFalse(result.hasNext()); + } + //------------------------------------------< private >--- private static void addMembers(Group group, Authorizable... authorizables) throws RepositoryException {