Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 49736 invoked from network); 17 Nov 2008 20:39:18 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 17 Nov 2008 20:39:18 -0000 Received: (qmail 27969 invoked by uid 500); 17 Nov 2008 20:39:19 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 27945 invoked by uid 500); 17 Nov 2008 20:39:19 -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 27868 invoked by uid 99); 17 Nov 2008 20:39:18 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 17 Nov 2008 12:39:18 -0800 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; Mon, 17 Nov 2008 20:38:04 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 18870238898F; Mon, 17 Nov 2008 12:38:19 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r718371 - in /jackrabbit/trunk/jackrabbit-ocm/src: main/java/org/apache/jackrabbit/ocm/query/impl/QueryImpl.java test/java/org/apache/jackrabbit/ocm/manager/query/DigesterSimpleQueryTest.java Date: Mon, 17 Nov 2008 20:38:18 -0000 To: commits@jackrabbit.apache.org From: clombart@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20081117203819.18870238898F@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: clombart Date: Mon Nov 17 12:38:18 2008 New Revision: 718371 URL: http://svn.apache.org/viewvc?rev=718371&view=rev Log: patch for JCR-1853 provided by Shrirang Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/QueryImpl.java jackrabbit/trunk/jackrabbit-ocm/src/test/java/org/apache/jackrabbit/ocm/manager/query/DigesterSimpleQueryTest.java Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/QueryImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/QueryImpl.java?rev=718371&r1=718370&r2=718371&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/QueryImpl.java (original) +++ jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/QueryImpl.java Mon Nov 17 12:38:18 2008 @@ -38,7 +38,9 @@ ClassDescriptor classDescriptor; - private ArrayList orderByExpressions = new ArrayList(); + private final static String ORDER_BY_STRING = "order by "; + + private String jcrExpression = ""; /** * Constructor @@ -70,7 +72,9 @@ public void addOrderByDescending(String fieldNameAttribute) { - orderByExpressions.add("@" + this.getJcrFieldName(fieldNameAttribute) + " descending"); + //Changes made to maintain the query state updated with every addition + //@author Shrirang Edgaonkar + addExpression("@" + this.getJcrFieldName(fieldNameAttribute) + " descending"); } /** @@ -79,31 +83,39 @@ */ public void addOrderByAscending(String fieldNameAttribute) { - orderByExpressions.add("@" + this.getJcrFieldName(fieldNameAttribute) + " ascending"); + addExpression("@" + this.getJcrFieldName(fieldNameAttribute) + " ascending"); } + public void addJCRExpression(String jcrExpression) { + addExpression(jcrExpression); + } + + + private void addExpression(String jcrExpression) { + //@author Shrirang Edgaonkar + // First time comma is not required + if(this.jcrExpression.equals("")) + { + this.jcrExpression += jcrExpression ; + }else + this.jcrExpression += (" , " + jcrExpression) ; + } + + + public String getOrderByExpression() { - - if (orderByExpressions.size() == 0) - { - return ""; - } - - String orderByExpression = "order by "; - Iterator iterator = orderByExpressions.iterator(); - int count=1; - while (iterator.hasNext()) - { - if (count > 1) - { - orderByExpression += " , "; - } - orderByExpression+= (String) iterator.next(); - count++; + if(jcrExpression.equals("")) + return ""; + else + { + //@author Shrirang Edgaonkar + //Ensure that the OrderBy string is added only once + if(this.jcrExpression.contains(ORDER_BY_STRING)) + return this.jcrExpression; + else + return (ORDER_BY_STRING + this.jcrExpression); } - - return orderByExpression; } Modified: jackrabbit/trunk/jackrabbit-ocm/src/test/java/org/apache/jackrabbit/ocm/manager/query/DigesterSimpleQueryTest.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/test/java/org/apache/jackrabbit/ocm/manager/query/DigesterSimpleQueryTest.java?rev=718371&r1=718370&r2=718371&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-ocm/src/test/java/org/apache/jackrabbit/ocm/manager/query/DigesterSimpleQueryTest.java (original) +++ jackrabbit/trunk/jackrabbit-ocm/src/test/java/org/apache/jackrabbit/ocm/manager/query/DigesterSimpleQueryTest.java Mon Nov 17 12:38:18 2008 @@ -18,23 +18,24 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Iterator; import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.query.QueryResult; import junit.framework.Test; import junit.framework.TestSuite; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.jackrabbit.ocm.RepositoryLifecycleTestSetup; import org.apache.jackrabbit.ocm.DigesterTestBase; +import org.apache.jackrabbit.ocm.RepositoryLifecycleTestSetup; import org.apache.jackrabbit.ocm.exception.JcrMappingException; import org.apache.jackrabbit.ocm.manager.ObjectContentManager; import org.apache.jackrabbit.ocm.query.Filter; import org.apache.jackrabbit.ocm.query.Query; import org.apache.jackrabbit.ocm.query.QueryManager; +import org.apache.jackrabbit.ocm.query.impl.QueryImpl; import org.apache.jackrabbit.ocm.testmodel.Page; import org.apache.jackrabbit.ocm.testmodel.Paragraph; @@ -86,6 +87,7 @@ filter.addEqualTo("text", "Para 1"); Query query = queryManager.createQuery(filter); + ObjectContentManager ocm = this.getObjectContentManager(); Paragraph paragraph = (Paragraph) ocm.getObject(query); @@ -280,11 +282,80 @@ assertTrue("Invalid paragraph found", this.containsText(paragraphs,"Para 2")); assertTrue("Invalid paragraph found", this.containsText(paragraphs,"Para 3")); - } catch (Exception e) { - e.printStackTrace(); - fail("Exception occurs during the unit test : " + e); - } - + } catch (Exception e) { + e.printStackTrace(); + fail("Exception occurs during the unit test : " + e); + } + + } + + + + public void testGetObjectOrderByWithUpdatableJCRExpression() { + + try { + + // Build the Query Object + QueryManager queryManager = this.getQueryManager(); + Filter filter = queryManager.createFilter(Paragraph.class); + filter.addLike("text", "Para%"); + filter.setScope("/test/"); + + Query query = queryManager.createQuery(filter); + query.addOrderByDescending("text"); + + String strQueryBuilderStringWithDescending = ((QueryImpl)query).getOrderByExpression(); + + ObjectContentManager ocm = this.getObjectContentManager(); + Collection result = ocm.getObjects(query); + assertEquals("Invalid number of objects - should be = 3", 3, result.size()); + + //Text is Descending + Paragraph[] paragraphs = (Paragraph[]) result.toArray(new Paragraph[result.size()]); + Iterator iterator = result.iterator(); + Paragraph para = (Paragraph)iterator.next(); + assertEquals("Para 3",para.getText()); + para = (Paragraph)iterator.next(); + assertEquals("Para 2",para.getText()); + para = (Paragraph)iterator.next(); + assertEquals("Para 1",para.getText()); + + //Text is Ascending + query = queryManager.createQuery(filter); + query.addOrderByAscending("text"); + + ocm = this.getObjectContentManager(); + result = ocm.getObjects(query); + assertEquals("Invalid number of objects - should be = 3", 3, result.size()); + iterator = result.iterator(); + para = (Paragraph)iterator.next(); + assertEquals("Para 1",para.getText()); + para = (Paragraph)iterator.next(); + assertEquals("Para 2",para.getText()); + para = (Paragraph)iterator.next(); + assertEquals("Para 3",para.getText()); + + //Text is Descending + query = queryManager.createQuery(filter); + ((QueryImpl)query).addJCRExpression(strQueryBuilderStringWithDescending); + ocm = this.getObjectContentManager(); + result = ocm.getObjects(query); + assertEquals("Invalid number of objects - should be = 3", 3, result.size()); + iterator = result.iterator(); + para = (Paragraph)iterator.next(); + assertEquals("Para 3",para.getText()); + para = (Paragraph)iterator.next(); + assertEquals("Para 2",para.getText()); + para = (Paragraph)iterator.next(); + assertEquals("Para 1",para.getText()); + + + } catch (Exception e) { + e.printStackTrace(); + fail("Exception occurs during the unit test : " + e); + } + + } public void testGetObjectsByClassNameAndPath() {