Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 39840 invoked from network); 22 Dec 2010 15:24:42 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 22 Dec 2010 15:24:42 -0000 Received: (qmail 86731 invoked by uid 500); 22 Dec 2010 15:24:42 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 86638 invoked by uid 500); 22 Dec 2010 15:24:40 -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 86631 invoked by uid 99); 22 Dec 2010 15:24:39 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 22 Dec 2010 15:24:39 +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; Wed, 22 Dec 2010 15:24:36 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id E4EBC2388903; Wed, 22 Dec 2010 15:24:14 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1051949 - 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/... Date: Wed, 22 Dec 2010 15:24:14 -0000 To: commits@jackrabbit.apache.org From: mduerig@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101222152414.E4EBC2388903@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: mduerig Date: Wed Dec 22 15:24:14 2010 New Revision: 1051949 URL: http://svn.apache.org/viewvc?rev=1051949&view=rev Log: JCR-2854: Add option to make sorting in user/group query case insensitive 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=1051949&r1=1051948&r2=1051949&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 Dec 22 15:24:14 2010 @@ -73,8 +73,22 @@ public interface QueryBuilder { * * @param propertyName The name of the property to sort on * @param direction Direction to sort. Either {@link Direction#ASCENDING} or {@link Direction#DESCENDING} + * @param ignoreCase Ignore character case in sort iff true. Note: For false + * sorting is done lexicographically even for non string properties. */ - void setSortOrder(String propertyName, Direction direction); + void setSortOrder(String propertyName, Direction direction, boolean ignoreCase); + + /** + * Set the sort order of the {@link Authorizable}s returned by the query. + * The format of the propertyName is the same as in XPath: + * @propertyName sorts on a property of the current node. + * relative/path/@propertyName sorts on a property of a + * descendant node. Character case is taken into account for the sort order. + * + * @param propertyName The name of the property to sort on + * @param direction Direction to sort. Either {@link Direction#ASCENDING} or {@link Direction#DESCENDING} + */ + void setSortOrder(String propertyName, Direction direction); /** * Set limits for the query. The limits consists of a bound and a maximal 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=1051949&r1=1051948&r2=1051949&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 Wed Dec 22 15:24:14 2010 @@ -80,6 +80,7 @@ public class XPathQueryBuilder implement private Condition condition; private String sortProperty; private Direction sortDirection = Direction.ASCENDING; + private boolean sortIgnoreCase; private Value bound; private long offset; private long maxCount = -1; @@ -108,6 +109,10 @@ public class XPathQueryBuilder implement return sortDirection; } + boolean getSortIgnoreCase() { + return sortIgnoreCase; + } + Value getBound() { return bound; } @@ -135,9 +140,14 @@ public class XPathQueryBuilder implement this.condition = condition; } - public void setSortOrder(String propertyName, Direction direction) { + public void setSortOrder(String propertyName, Direction direction, boolean ignoreCase) { sortProperty = propertyName; sortDirection = direction; + sortIgnoreCase = ignoreCase; + } + + public void setSortOrder(String propertyName, Direction direction) { + setSortOrder(propertyName, direction, false); } public void setLimit(Value bound, long maxCount) { 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=1051949&r1=1051948&r2=1051949&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 Dec 22 15:24:14 2010 @@ -93,9 +93,11 @@ public class XPathQueryEvaluator impleme } if (sortCol != null) { - xPath.append(" order by ") + boolean ignoreCase = builder.getSortIgnoreCase(); + xPath.append(" order by ") + .append(ignoreCase ? "" : "fn:lower-case(") .append(sortCol) - .append(' ') + .append(ignoreCase ? " " : ") ") .append(sortDir.getDirection()); } 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=1051949&r1=1051948&r2=1051949&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 Wed Dec 22 15:24:14 2010 @@ -154,7 +154,7 @@ public class UserManagerSearchTest exten jackrabbit, deer, opposum, kangaroo, elephant, lemur, gibbon, crocodile, turtle, lizard, salamander, goldenToad, poisonDartFrog); setProperty("color", vf.createValue("black"), blackWidow, gardenSpider, ant, fly, lizard, salamander); - setProperty("color", vf.createValue("white"), opposum, goose, pelican, dove); + setProperty("color", vf.createValue("WHITE"), opposum, goose, pelican, dove); setProperty("color", vf.createValue("gold"), goldenToad); setProperty("numberOfLegs", vf.createValue(2), kangaroo, gibbon, kestrel, goose, dove); setProperty("numberOfLegs", vf.createValue(4), jackrabbit, deer, opposum, elephant, lemur, crocodile, @@ -595,7 +595,7 @@ public class UserManagerSearchTest exten Value[] color = authorizable.getProperty("color"); assertNotNull(color); assertEquals(1, color.length); - assertTrue(prev == null || prev.compareTo(color[0].getString()) >= 0); + assertTrue(prev == null || prev.compareToIgnoreCase(color[0].getString()) >= 0); prev = color[0].getString(); } } @@ -605,7 +605,7 @@ public class UserManagerSearchTest exten public void build(QueryBuilder builder) { builder.setCondition(builder. exists("profile/@weight")); - builder.setSortOrder("profile/@weight", Direction.ASCENDING); + builder.setSortOrder("profile/@weight", Direction.ASCENDING, true); } }); @@ -677,7 +677,7 @@ public class UserManagerSearchTest exten public void build(QueryBuilder builder) { builder.setCondition(builder. eq("profile/@cute", vf.createValue(true))); - builder.setSortOrder("profile/@weight", Direction.ASCENDING); + builder.setSortOrder("profile/@weight", Direction.ASCENDING, true); builder.setLimit(vf.createValue(1000.0), count); } });