Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 19596 invoked from network); 11 Nov 2008 22:59:03 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 11 Nov 2008 22:59:03 -0000 Received: (qmail 96178 invoked by uid 500); 11 Nov 2008 22:59:05 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 96153 invoked by uid 500); 11 Nov 2008 22:59:04 -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 96132 invoked by uid 99); 11 Nov 2008 22:59:04 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 11 Nov 2008 14:59:04 -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; Tue, 11 Nov 2008 22:57:53 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id C5DC3238895D; Tue, 11 Nov 2008 14:58:06 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r713214 - in /jackrabbit/trunk/jackrabbit-ocm/src: main/java/org/apache/jackrabbit/ocm/query/ main/java/org/apache/jackrabbit/ocm/query/impl/ test/java/org/apache/jackrabbit/ocm/manager/query/ Date: Tue, 11 Nov 2008 22:58:04 -0000 To: commits@jackrabbit.apache.org From: clombart@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20081111225806.C5DC3238895D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: clombart Date: Tue Nov 11 14:58:03 2008 New Revision: 713214 URL: http://svn.apache.org/viewvc?rev=713214&view=rev Log: Patch for JCR-1844 (Convenience method to Or multiple values with a single filter) provided by Shrirang. Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/Filter.java jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/FilterImpl.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/Filter.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/Filter.java?rev=713214&r1=713213&r2=713214&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/Filter.java (original) +++ jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/Filter.java Tue Nov 11 14:58:03 2008 @@ -17,7 +17,6 @@ package org.apache.jackrabbit.ocm.query; - /** * * JCR Filter interface. @@ -79,7 +78,7 @@ Filter addGreaterThan(String arg0, Object arg1); Filter addLessOrEqualThan(String arg0, Object arg1); - + Filter addLessThan(String arg0, Object arg1); Filter addLike(String arg0, Object arg1); @@ -89,15 +88,17 @@ Filter addNotNull(String arg0); Filter addIsNull(String arg0); - + + Filter addOrFilter(String fieldAttributeName, String[] valueList); + Filter addOrFilter(Filter arg0); Filter addAndFilter(Filter filter); - + Filter addJCRExpression(String jcrExpression); - + Class getFilterClass(); Object clone(); - + } Modified: jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/FilterImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/FilterImpl.java?rev=713214&r1=713213&r2=713214&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/FilterImpl.java (original) +++ jackrabbit/trunk/jackrabbit-ocm/src/main/java/org/apache/jackrabbit/ocm/query/impl/FilterImpl.java Tue Nov 11 14:58:03 2008 @@ -18,6 +18,7 @@ package org.apache.jackrabbit.ocm.query.impl; + import java.util.Map; import javax.jcr.ValueFactory; @@ -224,6 +225,18 @@ return this; } + public Filter addOrFilter(String fieldAttributeName, String[] valueList) { + String jcrExpression = ""; + for(Object object: valueList){ + jcrExpression = "@" + this.getJcrFieldName(fieldAttributeName) + " = " + + this.getStringValue(fieldAttributeName, object); + orExpression(jcrExpression); + } + addExpression(jcrExpression); + return this; + } + + /** * @see org.apache.jackrabbit.ocm.query.Filter#addOrFilter(org.apache.jackrabbit.ocm.query.Filter) */ @@ -269,6 +282,13 @@ return this; } + public Filter orJCRExpression(String jcrExpression) { + orExpression(jcrExpression); + + return this; + } + + private String getJcrFieldName(String fieldAttribute) { String jcrFieldName = classDescriptor.getJcrName(fieldAttribute); if (jcrFieldName == null) { @@ -318,6 +338,15 @@ this.jcrExpression += jcrExpression ; } + private void orExpression(String jcrExpression) { + + if (this.jcrExpression.length() >0) { + this.jcrExpression += " or "; + } + this.jcrExpression += jcrExpression ; + } + + public String toString() { return getJcrExpression(); } 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=713214&r1=713213&r2=713214&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 Tue Nov 11 14:58:03 2008 @@ -195,6 +195,69 @@ } + /** + * Build an or expression within a single filter + * @author Shrirang Edgaonkar + */ + public void testGetObjectsOrForSingleFilter() { + + try { + + // Build the Query Object + QueryManager queryManager = this.getQueryManager(); + Filter filter1 = queryManager.createFilter(Paragraph.class); + filter1.addOrFilter("text", new String[]{"Para 1","Para 2"}); + filter1.setScope("/test/"); + + Query query = queryManager.createQuery(filter1); + + ObjectContentManager ocm = this.getObjectContentManager(); + Collection result = ocm.getObjects(query); + assertEquals("Invalid number of objects - should be = 2", 2, result.size()); + + Paragraph[] paragraphs = (Paragraph[]) result.toArray(new Paragraph[result.size()]); + assertTrue("Invalid paragraph found", this.containsText(paragraphs,"Para 1")); + assertTrue("Invalid paragraph found", this.containsText(paragraphs,"Para 2")); + + } catch (Exception e) { + e.printStackTrace(); + fail("Exception occurs during the unit test : " + e); + } + + } + + /** + * Build an or expression within a single filter + * @author Shrirang Edgaonkar + */ + public void testGetObjectsOrWithAndForSingleFilter() { + + try { + + // Build the Query Object + QueryManager queryManager = this.getQueryManager(); + Filter filter1 = queryManager.createFilter(Paragraph.class); + filter1.addOrFilter("text", new String[]{"Para 1","Another Para "}).addLike("text", "Para%"); + filter1.setScope("/test/"); + + Query query = queryManager.createQuery(filter1); + + ObjectContentManager ocm = this.getObjectContentManager(); + Collection result = ocm.getObjects(query); + assertEquals("Invalid number of objects - should be = 1", 1, result.size()); + + Paragraph[] paragraphs = (Paragraph[]) result.toArray(new Paragraph[result.size()]); + assertTrue("Invalid paragraph found", this.containsText(paragraphs,"Para 1")); + //assertTrue("Invalid paragraph found", this.containsText(paragraphs,"Para 2")); + + } catch (Exception e) { + e.printStackTrace(); + fail("Exception occurs during the unit test : " + e); + } + + } + + public void testGetObjectOrderBy() { try {