You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by cl...@apache.org on 2008/11/11 23:58:04 UTC
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/
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 {