You are viewing a plain text version of this content. The canonical link for it is here.
Posted to graffito-commits@incubator.apache.org by cl...@apache.org on 2005/09/27 18:43:47 UTC
svn commit: r292016 - in /incubator/graffito/trunk/jcr-mapping/src:
java/org/apache/portals/graffito/jcr/persistence/impl/
java/org/apache/portals/graffito/jcr/query/
java/org/apache/portals/graffito/jcr/query/impl/
test/org/apache/portals/graffito/jcr...
Author: clombart
Date: Tue Sep 27 11:43:34 2005
New Revision: 292016
URL: http://svn.apache.org/viewcvs?rev=292016&view=rev
Log:
Still working on the query service
Modified:
incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerImpl.java
incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/Query.java
incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/QueryManager.java
incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/FilterImpl.java
incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/QueryImpl.java
incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/QueryManagerImpl.java
incubator/graffito/trunk/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerQueryTest.java
incubator/graffito/trunk/jcr-mapping/src/test/org/apache/portals/graffito/jcr/query/impl/QueryManagerTest.java
Modified: incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerImpl.java?rev=292016&r1=292015&r2=292016&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerImpl.java (original)
+++ incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerImpl.java Tue Sep 27 11:43:34 2005
@@ -33,6 +33,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.portals.graffito.jcr.exception.JcrMappingException;
import org.apache.portals.graffito.jcr.mapper.Mapper;
+import org.apache.portals.graffito.jcr.mapper.impl.DigesterMapperImpl;
import org.apache.portals.graffito.jcr.persistence.CustomNodeTypeCreator;
import org.apache.portals.graffito.jcr.persistence.PersistenceManager;
import org.apache.portals.graffito.jcr.persistence.atomictypeconverter.AtomicTypeConverterFactory;
@@ -73,6 +74,7 @@
*/
private AtomicTypeConverterFactory atomicTypeConverterFactory;
+
/**
* Object Converter
*/
@@ -212,6 +214,9 @@
{
String jcrExpression = this.queryManager.buildJCRExpression(query);
+ log.debug("Get Object with expression : " + jcrExpression);
+
+
javax.jcr.query.Query jcrQuery = session.getWorkspace().getQueryManager().createQuery(jcrExpression, javax.jcr.query.Query.XPATH);
QueryResult queryResult = jcrQuery.execute();
NodeIterator nodeIterator = queryResult.getNodes();
Modified: incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/Query.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/Query.java?rev=292016&r1=292015&r2=292016&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/Query.java (original)
+++ incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/Query.java Tue Sep 27 11:43:34 2005
@@ -30,5 +30,9 @@
public void setFilter(Filter filter);
public Filter getFilter();
+
+ public void addOrderByAscending(String fieldNameAttribute);
+
+ public void addOrderByDescending(String fieldNameAttribute);
}
Modified: incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/QueryManager.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/QueryManager.java?rev=292016&r1=292015&r2=292016&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/QueryManager.java (original)
+++ incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/QueryManager.java Tue Sep 27 11:43:34 2005
@@ -30,7 +30,7 @@
{
public Filter createFilter(Class classQuery) throws JcrMappingException;
- public Query createQuery(Filter filter);
+ public Query createQuery(Filter filter) throws JcrMappingException;
public String buildJCRExpression(Query query) throws JcrMappingException;
Modified: incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/FilterImpl.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/FilterImpl.java?rev=292016&r1=292015&r2=292016&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/FilterImpl.java (original)
+++ incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/FilterImpl.java Tue Sep 27 11:43:34 2005
@@ -17,13 +17,20 @@
package org.apache.portals.graffito.jcr.query.impl;
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Collection;
+import java.util.Date;
import java.util.Iterator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.portals.graffito.jcr.exception.JcrMappingException;
import org.apache.portals.graffito.jcr.mapper.Mapper;
import org.apache.portals.graffito.jcr.mapper.model.ClassDescriptor;
+import org.apache.portals.graffito.jcr.persistence.impl.PersistenceManagerImpl;
import org.apache.portals.graffito.jcr.query.Filter;
/**
@@ -45,6 +52,7 @@
private String orJcrExpression;
+ private final static Log log = LogFactory.getLog(FilterImpl.class);
public FilterImpl(Mapper mapper, Class clazz) throws JcrMappingException
{
@@ -95,7 +103,7 @@
public void addBetween(String fieldAttributeName, Object value1, Object value2)
{
String jcrExpression = "( @" + this.getJcrFieldName(fieldAttributeName) + " >= " + this.getStringValue(value1) +
- " and " + this.getJcrFieldName(fieldAttributeName) + " <= " + this.getStringValue(value2) + ")";
+ " and @" + this.getJcrFieldName(fieldAttributeName) + " <= " + this.getStringValue(value2) + ")";
jcrExpressions.add(jcrExpression) ;
}
@@ -199,7 +207,12 @@
private String getJcrFieldName(String fieldAttribute)
{
- return classDescriptor.getJcrName(fieldAttribute);
+ String jcrFieldName = classDescriptor.getJcrName(fieldAttribute);
+ if (jcrFieldName == null)
+ {
+ log.error("Impossible to find the jcrFieldName for the attribute :" + fieldAttribute);
+ }
+ return jcrFieldName;
}
@@ -211,7 +224,30 @@
}
else
{
- return value.toString();
+
+ if (value instanceof Boolean)
+ {
+
+ return ((Boolean) value).booleanValue() ? "true()" : "false()";
+ }
+ else
+ {
+ if ((value instanceof Calendar))
+ {
+ //||(value instanceof Date)
+ Calendar calendar = (Calendar) value;
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T00:00:00.000+01:00'");
+ //'1976-01-01T00:00:00.000+01:00'
+ formatter.setCalendar(calendar);
+
+ String formattedString = " TIMESTAMP '" + formatter.format(calendar.getTime()) + "'";
+ return formattedString;
+ }
+ else
+ {
+ return value.toString();
+ }
+ }
}
}
@@ -233,7 +269,7 @@
int count = 1;
String jcrExp = "";
- jcrExp += "[";
+
Iterator criteriaIterator = jcrExpressions.iterator();
while (criteriaIterator.hasNext())
{
@@ -245,7 +281,7 @@
count++;
}
- jcrExp += "]";
+
return jcrExp;
Modified: incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/QueryImpl.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/QueryImpl.java?rev=292016&r1=292015&r2=292016&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/QueryImpl.java (original)
+++ incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/QueryImpl.java Tue Sep 27 11:43:34 2005
@@ -17,6 +17,13 @@
package org.apache.portals.graffito.jcr.query.impl;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.portals.graffito.jcr.exception.JcrMappingException;
+import org.apache.portals.graffito.jcr.mapper.Mapper;
+import org.apache.portals.graffito.jcr.mapper.model.ClassDescriptor;
import org.apache.portals.graffito.jcr.query.Filter;
import org.apache.portals.graffito.jcr.query.Query;
@@ -30,11 +37,19 @@
{
private Filter filter;
+
+ private Mapper mapper;
+
+ ClassDescriptor classDescriptor;
+
+ private ArrayList orderByExpressions = new ArrayList();
- public QueryImpl(Filter filter)
+ public QueryImpl(Filter filter, Mapper mapper) throws JcrMappingException
{
this.filter = filter;
+ this.mapper = mapper;
+ classDescriptor = mapper.getClassDescriptor(filter.getFilterClass());
}
/**
@@ -51,6 +66,48 @@
public Filter getFilter()
{
return this.filter;
+ }
+
+ public void addOrderByDescending(String fieldNameAttribute)
+ {
+ orderByExpressions.add("@" + this.getJcrFieldName(fieldNameAttribute) + " descending");
+ }
+
+ public void addOrderByAscending(String fieldNameAttribute)
+ {
+ orderByExpressions.add("@" + this.getJcrFieldName(fieldNameAttribute) + " ascending");
+ }
+
+ 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++;
+ }
+
+ return orderByExpression;
+ }
+
+
+ private String getJcrFieldName(String fieldAttribute)
+ {
+
+ return classDescriptor.getJcrName(fieldAttribute);
+
}
}
Modified: incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/QueryManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/QueryManagerImpl.java?rev=292016&r1=292015&r2=292016&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/QueryManagerImpl.java (original)
+++ incubator/graffito/trunk/jcr-mapping/src/java/org/apache/portals/graffito/jcr/query/impl/QueryManagerImpl.java Tue Sep 27 11:43:34 2005
@@ -25,10 +25,10 @@
return new FilterImpl(mapper, classQuery);
}
- public Query createQuery(Filter filter)
+ public Query createQuery(Filter filter) throws JcrMappingException
{
- return new QueryImpl(filter);
+ return new QueryImpl(filter, mapper);
}
public String buildJCRExpression(Query query) throws JcrMappingException
@@ -45,10 +45,13 @@
}
// Add node type
- jcrExp += "//element(*, " + this.getNodeType(filter) + ")";
+ jcrExp += "//element(*, " + this.getNodeType(filter) + ") ";
// Add filter criteria
- jcrExp += ((FilterImpl)filter).getJcrExpression();
+ jcrExp += "[" + ((FilterImpl)filter).getJcrExpression() + "]";
+
+ // Add order by
+ jcrExp += ((QueryImpl)query).getOrderByExpression();
return jcrExp;
Modified: incubator/graffito/trunk/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerQueryTest.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerQueryTest.java?rev=292016&r1=292015&r2=292016&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerQueryTest.java (original)
+++ incubator/graffito/trunk/jcr-mapping/src/test/org/apache/portals/graffito/jcr/persistence/impl/PersistenceManagerQueryTest.java Tue Sep 27 11:43:34 2005
@@ -60,7 +60,11 @@
}
- public void testGetObjects()
+ /**
+ * Test equalTo
+ *
+ */
+ public void testGetObjectsEqualsTo()
{
try
@@ -79,6 +83,8 @@
PersistenceManager persistenceManager = this.getPersistenceManager();
Collection result = persistenceManager.getObjects(query);
assertTrue("Invalid number of objects - should be = 1", result.size() == 1);
+ Paragraph paragraph = (Paragraph) result.iterator().next();
+ assertTrue("Invalid paragraph found" , paragraph.getText().equals("Para 1"));
}
catch (Exception e)
@@ -88,6 +94,123 @@
}
}
+
+ /**
+ * Test the like "like" expression
+ */
+ public void testGetObjectsLike()
+ {
+
+ try
+ {
+
+ importData();
+
+ // 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);
+
+ PersistenceManager persistenceManager = this.getPersistenceManager();
+ Collection result = persistenceManager.getObjects(query);
+ assertTrue("Invalid number of objects - should be = 3", result.size() == 3);
+
+ Paragraph[] paragraphs = (Paragraph[]) result.toArray(new Paragraph[result.size()]);
+ assertTrue("Invalid paragraph found", paragraphs[0].getText().equals("Para 1"));
+ assertTrue("Invalid paragraph found", paragraphs[1].getText().equals("Para 2"));
+ assertTrue("Invalid paragraph found", paragraphs[2].getText().equals("Para 3"));
+
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("Exception occurs during the unit test : " + e);
+ }
+
+ }
+
+
+ /**
+ * Build an or expression between 2 filters
+ *
+ */
+ public void testGetObjectsOr()
+ {
+
+ try
+ {
+
+ importData();
+
+ // Build the Query Object
+ QueryManager queryManager = this.getQueryManager();
+ Filter filter1 = queryManager.createFilter(Paragraph.class);
+ filter1.addEqualTo("text", "Para 1");
+ filter1.setScope("/test");
+
+ Filter filter2 = queryManager.createFilter(Paragraph.class);
+ filter2.addEqualTo("text", "Para 2");
+
+ filter1.addOrFilter(filter2);
+
+ Query query = queryManager.createQuery(filter1);
+
+ PersistenceManager persistenceManager = this.getPersistenceManager();
+ Collection result = persistenceManager.getObjects(query);
+ assertTrue("Invalid number of objects - should be = 2", result.size() == 2);
+
+ Paragraph[] paragraphs = (Paragraph[]) result.toArray(new Paragraph[result.size()]);
+ assertTrue("Invalid paragraph found", paragraphs[0].getText().equals("Para 1"));
+ assertTrue("Invalid paragraph found", paragraphs[1].getText().equals("Para 2"));
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("Exception occurs during the unit test : " + e);
+ }
+
+ }
+
+ public void testGetObjectOrderBy()
+ {
+
+ try
+ {
+
+ importData();
+
+ // 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");
+
+ PersistenceManager persistenceManager = this.getPersistenceManager();
+ Collection result = persistenceManager.getObjects(query);
+ assertTrue("Invalid number of objects - should be = 3", result.size() == 3);
+
+ Paragraph[] paragraphs = (Paragraph[]) result.toArray(new Paragraph[result.size()]);
+ assertTrue("Invalid paragraph found", paragraphs[0].getText().equals("Para 3"));
+ assertTrue("Invalid paragraph found", paragraphs[1].getText().equals("Para 2"));
+ assertTrue("Invalid paragraph found", paragraphs[2].getText().equals("Para 1"));
+
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("Exception occurs during the unit test : " + e);
+ }
+
+ }
private void importData() throws JcrMappingException
{
@@ -105,6 +228,7 @@
paragraphs.add(new Paragraph("Para 1"));
paragraphs.add(new Paragraph("Para 2"));
paragraphs.add(new Paragraph("Para 3"));
+ paragraphs.add(new Paragraph("Another Para "));
page.setParagraphs(paragraphs);
getPersistenceManager().insert("/test", page);
Modified: incubator/graffito/trunk/jcr-mapping/src/test/org/apache/portals/graffito/jcr/query/impl/QueryManagerTest.java
URL: http://svn.apache.org/viewcvs/incubator/graffito/trunk/jcr-mapping/src/test/org/apache/portals/graffito/jcr/query/impl/QueryManagerTest.java?rev=292016&r1=292015&r2=292016&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr-mapping/src/test/org/apache/portals/graffito/jcr/query/impl/QueryManagerTest.java (original)
+++ incubator/graffito/trunk/jcr-mapping/src/test/org/apache/portals/graffito/jcr/query/impl/QueryManagerTest.java Tue Sep 27 11:43:34 2005
@@ -71,7 +71,7 @@
Query query = queryManager.createQuery(filter);
String jcrExpression = queryManager.buildJCRExpression(query);
assertNotNull("jcrExpression is null", jcrExpression);
- assertTrue("Invalid JcrExpression", jcrExpression.equals("/jcr:root/test//element(*, graffito:C)[@graffito:name = 'a test value' and @graffito:id = 1]"));
+ assertTrue("Invalid JcrExpression", jcrExpression.equals("/jcr:root/test//element(*, graffito:C) [@graffito:name = 'a test value' and @graffito:id = 1]"));
@@ -97,7 +97,7 @@
Query query = queryManager.createQuery(filter);
String jcrExpression = queryManager.buildJCRExpression(query);
assertNotNull("jcrExpression is null", jcrExpression);
- assertTrue("Invalid JcrExpression", jcrExpression.equals("//element(*, graffito:C)[@graffito:name = 'a test value' and @graffito:id = 1]"));
+ assertTrue("Invalid JcrExpression", jcrExpression.equals("//element(*, graffito:C) [@graffito:name = 'a test value' and @graffito:id = 1]"));