|
From: <fg...@us...> - 2010-08-30 14:38:22
|
Revision: 2938
http://openutils.svn.sourceforge.net/openutils/?rev=2938&view=rev
Author: fgiust
Date: 2010-08-30 14:38:16 +0000 (Mon, 30 Aug 2010)
Log Message:
-----------
CRIT-24 don't try to detect mapped properties since this may lead to a stackoverflow
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/MappedDefaultContent.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/Content2BeanTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/MappedDefaultContent.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/MappedDefaultContent.java 2010-08-29 16:03:59 UTC (rev 2937)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/MappedDefaultContent.java 2010-08-30 14:38:16 UTC (rev 2938)
@@ -124,7 +124,7 @@
{
try
{
- return PropertyUtils.getProperty(this, (String) key);
+ return PropertyUtils.getSimpleProperty(this, (String) key);
}
catch (IllegalAccessException e)
{
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/Content2BeanTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/Content2BeanTest.java 2010-08-29 16:03:59 UTC (rev 2937)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/Content2BeanTest.java 2010-08-30 14:38:16 UTC (rev 2938)
@@ -79,11 +79,13 @@
ResultIterator<AdvancedResultItem> items = advResult.getItems();
AdvancedResultItem item = items.next();
Assert.assertEquals(item.getTitle(), "lorem ipsum");
+ Assert.assertEquals(item.getHandle(), "/contains/lorem-ipsum");
// this is also a Map!
Assert.assertEquals(((Map<String, Object>) item).get("title"), "lorem ipsum");
Assert.assertEquals(((Map<String, Object>) item).get("text"), "ohoh");
Assert.assertEquals(((Map<String, Object>) item).get("number"), "5");
+ Assert.assertEquals(((Map<String, Object>) item).get("handle"), "/contains/lorem-ipsum");
ResultIterator<Page> itemsTransformed = advResult.getItems(Page.class);
Assert.assertNotNull(itemsTransformed);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <die...@us...> - 2010-09-10 09:11:53
|
Revision: 3018
http://openutils.svn.sourceforge.net/openutils/?rev=3018&view=rev
Author: diego_schivo
Date: 2010-09-10 09:11:46 +0000 (Fri, 10 Sep 2010)
Log Message:
-----------
CRIT-26 unit test failing + fix
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java
trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java 2010-09-10 08:41:52 UTC (rev 3017)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java 2010-09-10 09:11:46 UTC (rev 3018)
@@ -91,9 +91,11 @@
}
}
q = descendantSelfAxisQuery(booleanQuery(q), new MatchAllDocsQuery());
- Occur o = (permission.getPermissions() & Permission.READ) != 0
- ? Occur.MUST
- : Occur.MUST_NOT;
+ if ((permission.getPermissions() & Permission.READ) == 0)
+ {
+ q = notQuery(q);
+ }
+ Occur o = Occur.SHOULD;
aclQueries.add(new Object[]{q, o });
}
}
@@ -120,17 +122,15 @@
// combines the original lucene query with the acl ones
if (!aclQueries.isEmpty())
{
- Query[] qs = new Query[1 + aclQueries.size()];
+ Query[] qs = new Query[aclQueries.size()];
Occur[] os = new Occur[qs.length];
- qs[0] = query;
- os[0] = Occur.MUST;
- for (int i = 1; i < qs.length; i++)
+ for (int i = 0; i < qs.length; i++)
{
- Object[] qo = aclQueries.get(i - 1);
+ Object[] qo = aclQueries.get(i);
qs[i] = (Query) qo[0];
os[i] = (Occur) qo[1];
}
- query = booleanQuery(qs, os);
+ query = booleanQuery(query, booleanQuery(qs, os));
}
return query;
Modified: trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java 2010-09-10 08:41:52 UTC (rev 3017)
+++ trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java 2010-09-10 09:11:46 UTC (rev 3018)
@@ -86,4 +86,9 @@
{
return new DescendantSelfAxisQuery(cq, sq, 1);
}
+
+ protected Query notQuery(Query cq)
+ {
+ return new NotQuery(cq);
+ }
}
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java 2010-09-10 08:41:52 UTC (rev 3017)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java 2010-09-10 09:11:46 UTC (rev 3018)
@@ -34,8 +34,10 @@
import it.openutils.mgnlutils.test.TestNgRepositoryTestcase;
import java.lang.reflect.Field;
+import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
+import java.util.List;
import java.util.Map;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResult;
@@ -50,181 +52,184 @@
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+
/**
- * Tests that this custom search index modifies the lucene query according to
- * ACL rules.
- *
+ * Tests that this custom search index modifies the lucene query according to ACL rules.
* @author dschivo
*/
@RepositoryTestConfiguration(jackrabbitRepositoryConfig = "/crit-repository/jackrabbit-acl-search-index-test-configuration.xml", repositoryConfig = "/crit-repository/test-repositories.xml", bootstrapFiles = "/crit-bootstrap/website.pets.xml")
-public class AclSearchIndexTest extends TestNgRepositoryTestcase {
+public class AclSearchIndexTest extends TestNgRepositoryTestcase
+{
- /**
- * {@inheritDoc}
- */
- @Override
- @BeforeClass
- public void setUp() throws Exception {
- super.setUp();
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @BeforeClass
+ public void setUp() throws Exception
+ {
+ super.setUp();
- // Nodes in this workspace:
- // - pets (title=Pets)
- // --- cats (title=Cats)
- // ----- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
- // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04)
- // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04)
- // ----- 13 (title=Sly, petType=cat, birthDate=2002-06-08)
- // --- dogs (title=Dogs)
- // ----- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
- // ----- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
- // ----- 10 (title=Mulligan, petType=dog, birthDate=1997-02-24)
- // ----- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
- // --- lizards (title=Lizards)
- // ----- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
- // --- snakes (title=Snakes)
- // ----- 6 (title=George, petType=snake, birthDate=2000-01-20)
- // --- birds (title=Birds)
- // ----- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
- // ----- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
- // --- hamsters (title=Hamsters)
- // ----- 2 (title=Basil, petType=hamster, birthDate=2002-08-06)
+ // Nodes in this workspace:
+ // - pets (title=Pets)
+ // --- cats (title=Cats)
+ // ----- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
+ // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04)
+ // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04)
+ // ----- 13 (title=Sly, petType=cat, birthDate=2002-06-08)
+ // --- dogs (title=Dogs)
+ // ----- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
+ // ----- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
+ // ----- 10 (title=Mulligan, petType=dog, birthDate=1997-02-24)
+ // ----- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
+ // --- lizards (title=Lizards)
+ // ----- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
+ // --- snakes (title=Snakes)
+ // ----- 6 (title=George, petType=snake, birthDate=2000-01-20)
+ // --- birds (title=Birds)
+ // ----- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
+ // ----- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
+ // --- hamsters (title=Hamsters)
+ // ----- 2 (title=Basil, petType=hamster, birthDate=2002-08-06)
- HierarchyManager hm = MgnlContext
- .getHierarchyManager(ContentRepository.WEBSITE);
- hm.save();
- }
+ HierarchyManager hm = MgnlContext.getHierarchyManager(ContentRepository.WEBSITE);
+ hm.save();
+ }
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- @Override
- protected void modifyContextesToUseRealRepository() {
- super.modifyContextesToUseRealRepository();
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void modifyContextesToUseRealRepository()
+ {
+ super.modifyContextesToUseRealRepository();
- MockWebContext mwc = (MockWebContext) MgnlContext.getInstance();
- DefaultRepositoryStrategy drs = new DefaultRepositoryStrategy(mwc);
- try {
- Field hmsField = AbstractRepositoryStrategy.class
- .getDeclaredField("hierarchyManagers");
- hmsField.setAccessible(true);
- Map hms = (Map) hmsField.get(drs);
- hms.put("website_website", MgnlContext
- .getHierarchyManager(ContentRepository.WEBSITE));
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ MockWebContext mwc = (MockWebContext) MgnlContext.getInstance();
+ DefaultRepositoryStrategy drs = new DefaultRepositoryStrategy(mwc);
+ try
+ {
+ Field hmsField = AbstractRepositoryStrategy.class.getDeclaredField("hierarchyManagers");
+ hmsField.setAccessible(true);
+ Map hms = (Map) hmsField.get(drs);
+ hms.put("website_website", MgnlContext.getHierarchyManager(ContentRepository.WEBSITE));
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
- AccessManager am = new AccessManagerImpl();
- try {
- Field amsField = DefaultRepositoryStrategy.class
- .getDeclaredField("accessManagers");
- amsField.setAccessible(true);
- Map ams = (Map) amsField.get(drs);
- ams.put("website_website", am);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- mwc.setRepositoryStrategy(drs);
- }
+ AccessManager am = new AccessManagerImpl();
+ try
+ {
+ Field amsField = DefaultRepositoryStrategy.class.getDeclaredField("accessManagers");
+ amsField.setAccessible(true);
+ Map ams = (Map) amsField.get(drs);
+ ams.put("website_website", am);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ mwc.setRepositoryStrategy(drs);
+ }
- /**
- * Tests that the execution of a query on all pets returns dogs only,
- * because of an ACL rule.
- *
- * @throws Exception
- */
- @Test
- public void testDogsOnly() throws Exception {
- // ACL rule: read permission on dogs subtree
- Permission p = new PermissionImpl();
- p.setPattern(new SimpleUrlPattern("/pets/dogs/*"));
- p.setPermissions(Permission.READ);
- MgnlContext.getAccessManager(ContentRepository.WEBSITE)
- .setPermissionList(Collections.singletonList(p));
+ /**
+ * Tests that the execution of a query on all pets returns dogs only, because of an ACL rule.
+ * @throws Exception
+ */
+ @Test
+ public void testDogsOnly() throws Exception
+ {
+ // ACL rule: read permission on dogs subtree
+ List<Permission> pList = new ArrayList<Permission>();
+ Permission p;
+ p = new PermissionImpl();
+ p.setPattern(new SimpleUrlPattern("/pets/*"));
+ p.setPermissions(Permission.NONE);
+ pList.add(p);
+ p = new PermissionImpl();
+ p.setPattern(new SimpleUrlPattern("/pets/dogs/*"));
+ p.setPermissions(Permission.READ);
+ pList.add(p);
+ MgnlContext.getAccessManager(ContentRepository.WEBSITE).setPermissionList(pList);
- Calendar begin = Calendar.getInstance();
- begin.set(1999, Calendar.JANUARY, 1);
- Calendar end = Calendar.getInstance();
- end.set(2001, Calendar.DECEMBER, 31);
+ Calendar begin = Calendar.getInstance();
+ begin.set(1999, Calendar.JANUARY, 1);
+ Calendar end = Calendar.getInstance();
+ end.set(2001, Calendar.DECEMBER, 31);
- Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.between("@birthDate", begin, end)).addOrder(
- Order.asc("@birthDate"));
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE).setBasePath(
+ "/pets").add(Restrictions.between("@birthDate", begin, end)).addOrder(Order.asc("@birthDate"));
- // Query results:
- // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
- // --- 6 (title=George, petType=snake, birthDate=2000-01-20)
- // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
- // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
- // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
- // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
- // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
- // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
- AdvancedResult result = criteria.execute();
+ // Query results:
+ // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
+ // --- 6 (title=George, petType=snake, birthDate=2000-01-20)
+ // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
+ // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
+ // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
+ // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
+ // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
+ // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
+ AdvancedResult result = criteria.execute();
- // Accessible results (dogs only):
- // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
- // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
- // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
- ResultIterator<AdvancedResultItem> iterator = result.getItems();
+ // Accessible results (dogs only):
+ // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
+ // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
+ // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
+ ResultIterator<AdvancedResultItem> iterator = result.getItems();
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getName(), "4");
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getName(), "12");
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getName(), "3");
- Assert.assertFalse(iterator.hasNext());
- }
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getName(), "4");
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getName(), "12");
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getName(), "3");
+ Assert.assertFalse(iterator.hasNext());
+ }
- /**
- * Tests that the execution of a query on all pets does not return any dog,
- * because of an ACL rule.
- *
- * @throws Exception
- */
- @Test
- public void testDogsExcluded() throws Exception {
- // ACL rule: dogs subtree is denied
- Permission p = new PermissionImpl();
- p.setPattern(new SimpleUrlPattern("/pets/dogs/*"));
- p.setPermissions(Permission.NONE);
- MgnlContext.getAccessManager(ContentRepository.WEBSITE)
- .setPermissionList(Collections.singletonList(p));
+ /**
+ * Tests that the execution of a query on all pets does not return any dog, because of an ACL rule.
+ * @throws Exception
+ */
+ @Test
+ public void testDogsExcluded() throws Exception
+ {
+ // ACL rule: dogs subtree is denied
+ Permission p = new PermissionImpl();
+ p.setPattern(new SimpleUrlPattern("/pets/dogs/*"));
+ p.setPermissions(Permission.NONE);
+ MgnlContext.getAccessManager(ContentRepository.WEBSITE).setPermissionList(Collections.singletonList(p));
- Calendar begin = Calendar.getInstance();
- begin.set(1999, Calendar.JANUARY, 1);
- Calendar end = Calendar.getInstance();
- end.set(2001, Calendar.DECEMBER, 31);
+ Calendar begin = Calendar.getInstance();
+ begin.set(1999, Calendar.JANUARY, 1);
+ Calendar end = Calendar.getInstance();
+ end.set(2001, Calendar.DECEMBER, 31);
- Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.between("@birthDate", begin, end)).addOrder(
- Order.asc("@birthDate"));
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE).setBasePath(
+ "/pets").add(Restrictions.between("@birthDate", begin, end)).addOrder(Order.asc("@birthDate"));
- AdvancedResult result = criteria.execute();
+ AdvancedResult result = criteria.execute();
- // Accessible results (dogs excluded):
- // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
- // --- 6 (title=George, petType=snake, birthDate=2000-01-20)
- // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
- // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
- // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
- ResultIterator<AdvancedResultItem> iterator = result.getItems();
+ // Accessible results (dogs excluded):
+ // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
+ // --- 6 (title=George, petType=snake, birthDate=2000-01-20)
+ // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
+ // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
+ // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
+ ResultIterator<AdvancedResultItem> iterator = result.getItems();
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getName(), "9");
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getName(), "6");
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getName(), "11");
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getName(), "1");
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getName(), "5");
- Assert.assertFalse(iterator.hasNext());
- }
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getName(), "9");
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getName(), "6");
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getName(), "11");
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getName(), "1");
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getName(), "5");
+ Assert.assertFalse(iterator.hasNext());
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <die...@us...> - 2010-09-10 11:11:43
|
Revision: 3022
http://openutils.svn.sourceforge.net/openutils/?rev=3022&view=rev
Author: diego_schivo
Date: 2010-09-10 11:11:36 +0000 (Fri, 10 Sep 2010)
Log Message:
-----------
CRIT-27 failing unit test + fix
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
Added Paths:
-----------
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java
trunk/openutils-mgnlcriteria/src/test/resources/crit-bootstrap/website.Lorem ipsum dolor sit amet.xml
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2010-09-10 10:58:43 UTC (rev 3021)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2010-09-10 11:11:36 UTC (rev 3022)
@@ -116,6 +116,10 @@
{
encodedPath.append("_x" + StringUtils.leftPad(Integer.toHexString(ch), 4, '0') + "_");
}
+ else if (ch == ' ')
+ {
+ encodedPath.append("_x0020_");
+ }
else
{
encodedPath.append(ch);
Added: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java (rev 0)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java 2010-09-10 11:11:36 UTC (rev 3022)
@@ -0,0 +1,58 @@
+package net.sourceforge.openutils.mgnlcriteria.advanced;
+
+import info.magnolia.cms.beans.config.ContentRepository;
+import info.magnolia.context.MgnlContext;
+import it.openutils.mgnlutils.test.RepositoryTestConfiguration;
+import it.openutils.mgnlutils.test.TestNgRepositoryTestcase;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResult;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResultItem;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.Criteria;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.JCRCriteriaFactory;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.ResultIterator;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Criterion;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Restrictions;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+
+/**
+ * @author dschivo
+ * @version $Id$
+ */
+@RepositoryTestConfiguration(jackrabbitRepositoryConfig = "/crit-repository/jackrabbit-test-configuration.xml", repositoryConfig = "/crit-repository/test-repositories.xml", bootstrapFiles = "/crit-bootstrap/website.Lorem ipsum dolor sit amet.xml")
+public class BasePathWithSpacesTest extends TestNgRepositoryTestcase
+{
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @BeforeClass
+ public void setUp() throws Exception
+ {
+ super.setUp();
+
+ // Nodes in this workspace:
+ // - Lorem ipsum dolor sit amet
+ // --- consectetur adipisici elit
+ MgnlContext.getHierarchyManager(ContentRepository.WEBSITE).save();
+ }
+
+ /**
+ * @throws Exception
+ */
+ @Test
+ public void test() throws Exception
+ {
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE);
+ criteria.setBasePath("/Lorem ipsum dolor sit amet");
+ criteria.add(Restrictions.eq(Criterion.JCR_PRIMARYTYPE, "mgnl:content"));
+ AdvancedResult advResult = criteria.execute();
+ ResultIterator<AdvancedResultItem> items = advResult.getItems();
+ Assert.assertTrue(items.hasNext());
+ Assert.assertEquals(items.next().getName(), "consectetur adipisici elit");
+ }
+
+}
Property changes on: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/openutils-mgnlcriteria/src/test/resources/crit-bootstrap/website.Lorem ipsum dolor sit amet.xml
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/resources/crit-bootstrap/website.Lorem ipsum dolor sit amet.xml (rev 0)
+++ trunk/openutils-mgnlcriteria/src/test/resources/crit-bootstrap/website.Lorem ipsum dolor sit amet.xml 2010-09-10 11:11:36 UTC (rev 3022)
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<sv:node sv:name="Lorem ipsum dolor sit amet" xmlns:sv="http://www.jcp.org/jcr/sv/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <sv:property sv:name="jcr:primaryType" sv:type="Name">
+ <sv:value>mgnl:content</sv:value>
+ </sv:property>
+ <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+ <sv:value>mix:lockable</sv:value>
+ </sv:property>
+ <sv:property sv:name="jcr:uuid" sv:type="String">
+ <sv:value>71653d2b-a628-4c08-b6d9-ad82873ac42e</sv:value>
+ </sv:property>
+ <sv:property sv:name="jcr:createdBy" sv:type="String">
+ <sv:value>admin</sv:value>
+ </sv:property>
+ <sv:node sv:name="MetaData">
+ <sv:property sv:name="jcr:primaryType" sv:type="Name">
+ <sv:value>mgnl:metaData</sv:value>
+ </sv:property>
+ <sv:property sv:name="jcr:createdBy" sv:type="String">
+ <sv:value>admin</sv:value>
+ </sv:property>
+ <sv:property sv:name="mgnl:authorid" sv:type="String">
+ <sv:value>superuser</sv:value>
+ </sv:property>
+ <sv:property sv:name="mgnl:creationdate" sv:type="Date">
+ <sv:value>2010-09-10T12:46:52.406+02:00</sv:value>
+ </sv:property>
+ <sv:property sv:name="mgnl:lastmodified" sv:type="Date">
+ <sv:value>2010-09-10T12:47:40.075+02:00</sv:value>
+ </sv:property>
+ <sv:property sv:name="mgnl:template" sv:type="String">
+ <sv:value>barringCategoryAdmin</sv:value>
+ </sv:property>
+ </sv:node>
+ <sv:node sv:name="consectetur adipisici elit">
+ <sv:property sv:name="jcr:primaryType" sv:type="Name">
+ <sv:value>mgnl:content</sv:value>
+ </sv:property>
+ <sv:property sv:name="jcr:mixinTypes" sv:type="Name">
+ <sv:value>mix:lockable</sv:value>
+ </sv:property>
+ <sv:property sv:name="jcr:uuid" sv:type="String">
+ <sv:value>82ba17ee-bc80-40db-a433-040a2a4ef0ed</sv:value>
+ </sv:property>
+ <sv:property sv:name="jcr:createdBy" sv:type="String">
+ <sv:value>admin</sv:value>
+ </sv:property>
+ <sv:node sv:name="MetaData">
+ <sv:property sv:name="jcr:primaryType" sv:type="Name">
+ <sv:value>mgnl:metaData</sv:value>
+ </sv:property>
+ <sv:property sv:name="jcr:createdBy" sv:type="String">
+ <sv:value>admin</sv:value>
+ </sv:property>
+ <sv:property sv:name="mgnl:authorid" sv:type="String">
+ <sv:value>superuser</sv:value>
+ </sv:property>
+ <sv:property sv:name="mgnl:creationdate" sv:type="Date">
+ <sv:value>2010-09-10T12:47:48.481+02:00</sv:value>
+ </sv:property>
+ <sv:property sv:name="mgnl:lastmodified" sv:type="Date">
+ <sv:value>2010-09-10T12:48:00.168+02:00</sv:value>
+ </sv:property>
+ <sv:property sv:name="mgnl:template" sv:type="String">
+ <sv:value>barringCategoryAdmin</sv:value>
+ </sv:property>
+ </sv:node>
+ </sv:node>
+</sv:node>
Property changes on: trunk/openutils-mgnlcriteria/src/test/resources/crit-bootstrap/website.Lorem ipsum dolor sit amet.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fg...@us...> - 2010-10-27 11:16:42
|
Revision: 3119
http://openutils.svn.sourceforge.net/openutils/?rev=3119&view=rev
Author: fgiust
Date: 2010-10-27 11:16:36 +0000 (Wed, 27 Oct 2010)
Log Message:
-----------
CRIT-29 Remove the dependency on the jcr 2.0 API jar
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/ScoreAnalizerAndSortTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java 2010-10-25 09:58:25 UTC (rev 3118)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java 2010-10-27 11:16:36 UTC (rev 3119)
@@ -24,11 +24,15 @@
import java.util.NoSuchElementException;
+import javax.jcr.ItemNotFoundException;
import javax.jcr.query.RowIterator;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResultItem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* @author dschivo
* @version $Id$
@@ -37,6 +41,11 @@
{
/**
+ * Logger.
+ */
+ private Logger log = LoggerFactory.getLogger(AccessibleResultItemResultIterator.class);
+
+ /**
* Local variable storing the next accessible result. Method hasNext() fetches it, method next() resets it.
*/
private AdvancedResultItem next;
@@ -74,9 +83,18 @@
}
catch (RuntimeException e)
{
- // if it is an access-denied exception then ignore it
- if (!(e.getCause() instanceof AccessDeniedException))
+
+ if (e.getCause() instanceof AccessDeniedException)
{
+ // if it is an access-denied exception then ignore it
+ }
+ else if (e.getCause() instanceof ItemNotFoundException)
+ {
+ // if it is an access-denied exception then ignore it
+ log.warn("Ignoring invalid node while iterating {}", e.getCause().getMessage());
+ }
+ else
+ {
throw e;
}
}
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java 2010-10-25 09:58:25 UTC (rev 3118)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java 2010-10-27 11:16:36 UTC (rev 3119)
@@ -19,7 +19,6 @@
package net.sourceforge.openutils.mgnlcriteria.advanced.impl;
-import info.magnolia.cms.core.Content;
import info.magnolia.cms.core.HierarchyManager;
import info.magnolia.cms.security.AccessDeniedException;
@@ -33,7 +32,7 @@
import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResultItem;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.beanutils.PropertyUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,69 +49,27 @@
/**
* Logger.
*/
- private Logger log = LoggerFactory.getLogger(AdvancedResultItemImpl.class);
+ private static Logger log = LoggerFactory.getLogger(AdvancedResultItemImpl.class);
- private final static Method JCR_ROW_GETNODE;
-
- private final static Method JCR_ROW_GETSCORE;
-
- static
+ private static Item getJCRNode(Row row) throws RepositoryException
{
- Method jcrRowGetNode = null;
+
try
{
- jcrRowGetNode = Row.class.getDeclaredMethod("getNode", (Class[]) null);
+ return (Item) PropertyUtils.getProperty(row, "node");
}
- catch (SecurityException e)
+ catch (IllegalAccessException e)
{
}
- catch (NoSuchMethodException e)
+ catch (InvocationTargetException e)
{
}
- JCR_ROW_GETNODE = jcrRowGetNode;
-
- Method jcrRowGetScore = null;
- try
- {
- jcrRowGetScore = Row.class.getDeclaredMethod("getScore", new Class[]{String.class });
- }
- catch (SecurityException e)
- {
- }
catch (NoSuchMethodException e)
{
+ log
+ .error("Unsupported version of jackrabbit detected, you need at least 1.6.x or a jcr 2.0 compliant version");
}
- JCR_ROW_GETSCORE = jcrRowGetScore;
- }
- public static Item getJCRNode(Row row, HierarchyManager hierarchyManager) throws RepositoryException
- {
- if (JCR_ROW_GETNODE != null)
- {
- try
- {
- return (Item) JCR_ROW_GETNODE.invoke(row, (Object[]) null);
- }
- catch (IllegalAccessException e)
- {
- }
- catch (InvocationTargetException e)
- {
- }
- }
- else
- {
- Value path = row.getValue("jcr:path");
- if (path != null && StringUtils.isNotBlank(path.getString()))
- {
- Content node = hierarchyManager.getContent(path.getString());
- if (node != null)
- {
- return node.getJCRNode();
- }
- }
-
- }
return null;
}
@@ -130,7 +87,7 @@
throws RepositoryException,
AccessDeniedException
{
- super(getJCRNode(row, hierarchyManager), hierarchyManager);
+ super(getJCRNode(row), hierarchyManager);
this.row = row;
}
@@ -181,7 +138,25 @@
*/
public double getScore()
{
- return getScore(".");
+ try
+ {
+ return (Double) PropertyUtils.getSimpleProperty(row, "score");
+ }
+ catch (IllegalAccessException e)
+ {
+ log.warn("Error getting score for {}", this.getHandle(), e);
+ }
+ catch (InvocationTargetException e)
+ {
+ log.warn("Error getting score for {}", this.getHandle(), e);
+ }
+ catch (NoSuchMethodException e)
+ {
+ log
+ .error("Unsupported version of jackrabbit detected, you need at least 1.6.x or a jcr 2.0 compliant version");
+ }
+
+ return 0;
}
/**
@@ -189,50 +164,51 @@
*/
public double getScore(String selector)
{
- if (JCR_ROW_GETSCORE != null)
+
+ Method jcrRowGetScore = null;
+ try
{
+ jcrRowGetScore = row.getClass().getDeclaredMethod("getScore", new Class[]{String.class });
+ jcrRowGetScore.setAccessible(true);
+ }
+ catch (SecurityException e)
+ {
+ }
+ catch (NoSuchMethodException e)
+ {
+ }
+
+ if (jcrRowGetScore != null)
+ {
try
{
- return (Double) JCR_ROW_GETSCORE.invoke(row, new Object[]{selector });
+ if (selector == null)
+ {
+ return (Double) PropertyUtils.getSimpleProperty(row, "score");
+ }
+ return (Double) jcrRowGetScore.invoke(row, new Object[]{selector });
}
catch (IllegalArgumentException e)
{
- log.warn("Error getting score for {}", this.getHandle(), e);
+ log.warn("Error getting score for " + this.getHandle(), e);
}
catch (IllegalAccessException e)
{
- log.warn("Error getting score for {}", this.getHandle(), e);
+ log.warn("Error getting score for " + this.getHandle(), e);
}
catch (InvocationTargetException e)
{
- log.warn("Error getting score for {}", this.getHandle(), e);
+ log.warn("Error getting score for " + this.getHandle(), e.getTargetException());
}
+ catch (NoSuchMethodException e)
+ {
+ log.warn("Error getting score for " + this.getHandle(), e);
+ }
}
else
{
- Value scoreValue;
- try
- {
- scoreValue = row.getValue("jcr:score(" + selector + ")");
- }
- catch (RepositoryException e)
- {
- log.warn("Error getting excerpt for " + this.getHandle(), e);
- return 0;
- }
-
- if (scoreValue != null)
- {
- try
- {
- return scoreValue.getDouble();
- }
- catch (RepositoryException e)
- {
- log.warn("Error getting score for " + this.getHandle(), e);
- return 0;
- }
- }
+ log
+ .error("Unsupported version of jackrabbit detected, you need at least 1.6.x or a jcr 2.0 compliant version");
}
return 0;
}
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/ScoreAnalizerAndSortTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/ScoreAnalizerAndSortTest.java 2010-10-25 09:58:25 UTC (rev 3118)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/ScoreAnalizerAndSortTest.java 2010-10-27 11:16:36 UTC (rev 3119)
@@ -29,6 +29,8 @@
import java.util.List;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResult;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResultItem;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.ResultIterator;
import net.sourceforge.openutils.mgnlcriteria.tests.CriteriaTestUtils;
import org.testng.Assert;
@@ -80,6 +82,16 @@
Collection< ? extends Content> result = CriteriaTestUtils.collectCollectionFromResult(advResult);
CriteriaTestUtils.assertNumOfResults(3, result, "fagiano");
+
+ ResultIterator<AdvancedResultItem> iterator = advResult.getItems();
+
+ Assert.assertTrue(iterator.next().getScore() > iterator.next().getScore());
+
+ iterator = advResult.getItems();
+
+ // not sure what the selector name "s" means, but that's the only valid selector for this query, according to
+ // jackrabbit
+ Assert.assertTrue(iterator.next().getScore("s") > iterator.next().getScore("s"));
}
@Test
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fg...@us...> - 2011-01-01 20:20:04
|
Revision: 3198
http://openutils.svn.sourceforge.net/openutils/?rev=3198&view=rev
Author: fgiust
Date: 2011-01-01 20:19:56 +0000 (Sat, 01 Jan 2011)
Log Message:
-----------
CRIT-30 Adds an utility package with commonly used lucene analyzers
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/test/resources/crit-repository/indexing_configuration.xml
trunk/openutils-mgnlcriteria/src/test/resources/crit-repository/jackrabbit-acl-search-index-test-configuration.xml
trunk/openutils-mgnlcriteria/src/test/resources/crit-repository/jackrabbit-test-configuration.xml
Added Paths:
-----------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingAnalyzer.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingFilter.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/Latin1Analyzer.java
Removed Paths:
-------------
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/tests/ItalianSnowballAnalyzer.java
Added: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingAnalyzer.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingAnalyzer.java (rev 0)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingAnalyzer.java 2011-01-01 20:19:56 UTC (rev 3198)
@@ -0,0 +1,78 @@
+/**
+ *
+ * Magnolia Criteria API (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
+ * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sourceforge.openutils.mgnlcriteria.utils;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.LowerCaseFilter;
+import org.apache.lucene.analysis.TokenStream;
+import org.apache.lucene.analysis.standard.StandardFilter;
+import org.apache.lucene.analysis.standard.StandardTokenizer;
+
+
+/**
+ * @author molaschi
+ * @version $Id$
+ */
+public class ASCIIFoldingAnalyzer extends Analyzer
+{
+
+ @Override
+ public TokenStream tokenStream(String fieldName, Reader reader)
+ {
+ StandardTokenizer tokenStream = new StandardTokenizer(reader);
+
+ TokenStream result = new StandardFilter(tokenStream);
+ result = new LowerCaseFilter(result);
+ result = new ASCIIFoldingFilter(result);
+ return result;
+ }
+
+ @Override
+ public TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException
+ {
+ SavedStreams streams = (SavedStreams) getPreviousTokenStream();
+ if (streams == null)
+ {
+ streams = new SavedStreams();
+ setPreviousTokenStream(streams);
+ streams.tokenStream = new StandardTokenizer(reader);
+ streams.filteredTokenStream = new StandardFilter(streams.tokenStream);
+ streams.filteredTokenStream = new LowerCaseFilter(streams.filteredTokenStream);
+ streams.filteredTokenStream = new ASCIIFoldingFilter(streams.filteredTokenStream);
+ }
+ else
+ {
+ streams.tokenStream.reset(reader);
+ }
+
+ return streams.filteredTokenStream;
+ }
+
+ private static final class SavedStreams
+ {
+
+ StandardTokenizer tokenStream;
+
+ TokenStream filteredTokenStream;
+ }
+
+}
Property changes on: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingAnalyzer.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingFilter.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingFilter.java (rev 0)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingFilter.java 2011-01-01 20:19:56 UTC (rev 3198)
@@ -0,0 +1,2017 @@
+/**
+ *
+ * Magnolia Criteria API (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
+ * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.sourceforge.openutils.mgnlcriteria.utils;
+
+import org.apache.lucene.analysis.Token;
+import org.apache.lucene.analysis.TokenFilter;
+import org.apache.lucene.analysis.TokenStream;
+
+
+/**
+ * A filter backported da lucene 2.9.1 which converts any character variation into its ASCII equivalent.
+ * @author fgiust
+ * @version $Id$
+ */
+
+public class ASCIIFoldingFilter extends TokenFilter
+{
+
+ public ASCIIFoldingFilter(TokenStream input)
+ {
+ super(input);
+ }
+
+ private char[] output = new char[256];
+
+ private int outputPos;
+
+ @Override
+ public final Token next(final Token reusableToken) throws java.io.IOException
+ {
+ assert reusableToken != null;
+ Token nextToken = input.next(reusableToken);
+ if (nextToken != null)
+ {
+ final char[] buffer = nextToken.termBuffer();
+ final int length = nextToken.termLength();
+ // If no characters actually require rewriting then we
+ // just return token as-is:
+ for (int i = 0; i < length; i++)
+ {
+ final char c = buffer[i];
+ if (c >= '\u0080')
+ {
+ removeAccents(buffer, length);
+ nextToken.setTermBuffer(output, 0, outputPos);
+ break;
+ }
+ }
+ return nextToken;
+ }
+ else
+ return null;
+ }
+
+ /**
+ * To replace accented characters in a String by unaccented equivalents.
+ */
+ public final void removeAccents(char[] input, int length)
+ {
+
+ // Worst-case length required:
+ final int maxSizeNeeded = 2 * length;
+
+ int size = output.length;
+ while (size < maxSizeNeeded)
+ size *= 2;
+
+ if (size != output.length)
+ output = new char[size];
+
+ outputPos = 0;
+
+ for (int pos = 0; pos < length; ++pos)
+ {
+ final char c = input[pos];
+
+ // Quick test: if it's not in range then just keep current character
+ if (c < '\u0080')
+ {
+ output[outputPos++] = c;
+ }
+ else
+ {
+ switch (c)
+ {
+ case '\u00C0' : // À [LATIN CAPITAL LETTER A WITH GRAVE]
+ case '\u00C1' : // Á [LATIN CAPITAL LETTER A WITH ACUTE]
+ case '\u00C2' : // Â [LATIN CAPITAL LETTER A WITH CIRCUMFLEX]
+ case '\u00C3' : // Ã [LATIN CAPITAL LETTER A WITH TILDE]
+ case '\u00C4' : // Ä [LATIN CAPITAL LETTER A WITH DIAERESIS]
+ case '\u00C5' : // Å [LATIN CAPITAL LETTER A WITH RING ABOVE]
+ case '\u0100' : // Ā [LATIN CAPITAL LETTER A WITH MACRON]
+ case '\u0102' : // Ă [LATIN CAPITAL LETTER A WITH BREVE]
+ case '\u0104' : // Ą [LATIN CAPITAL LETTER A WITH OGONEK]
+ case '\u018F' : // Ə http://en.wikipedia.org/wiki/Schwa [LATIN CAPITAL LETTER SCHWA]
+ case '\u01CD' : // Ǎ [LATIN CAPITAL LETTER A WITH CARON]
+ case '\u01DE' : // Ǟ [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON]
+ case '\u01E0' : // Ǡ [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON]
+ case '\u01FA' : // Ǻ [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE]
+ case '\u0200' : // Ȁ [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE]
+ case '\u0202' : // Ȃ [LATIN CAPITAL LETTER A WITH INVERTED BREVE]
+ case '\u0226' : // Ȧ [LATIN CAPITAL LETTER A WITH DOT ABOVE]
+ case '\u023A' : // Ⱥ [LATIN CAPITAL LETTER A WITH STROKE]
+ case '\u1D00' : // ᴀ [LATIN LETTER SMALL CAPITAL A]
+ case '\u1E00' : // Ḁ [LATIN CAPITAL LETTER A WITH RING BELOW]
+ case '\u1EA0' : // Ạ [LATIN CAPITAL LETTER A WITH DOT BELOW]
+ case '\u1EA2' : // Ả [LATIN CAPITAL LETTER A WITH HOOK ABOVE]
+ case '\u1EA4' : // Ấ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE]
+ case '\u1EA6' : // Ầ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE]
+ case '\u1EA8' : // Ẩ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+ case '\u1EAA' : // Ẫ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE]
+ case '\u1EAC' : // Ậ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+ case '\u1EAE' : // Ắ [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE]
+ case '\u1EB0' : // Ằ [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE]
+ case '\u1EB2' : // Ẳ [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE]
+ case '\u1EB4' : // Ẵ [LATIN CAPITAL LETTER A WITH BREVE AND TILDE]
+ case '\u1EB6' : // Ặ [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW]
+ case '\u24B6' : // Ⓐ [CIRCLED LATIN CAPITAL LETTER A]
+ case '\uFF21' : // A [FULLWIDTH LATIN CAPITAL LETTER A]
+ output[outputPos++] = 'A';
+ break;
+ case '\u00E0' : // à [LATIN SMALL LETTER A WITH GRAVE]
+ case '\u00E1' : // á [LATIN SMALL LETTER A WITH ACUTE]
+ case '\u00E2' : // â [LATIN SMALL LETTER A WITH CIRCUMFLEX]
+ case '\u00E3' : // ã [LATIN SMALL LETTER A WITH TILDE]
+ case '\u00E4' : // ä [LATIN SMALL LETTER A WITH DIAERESIS]
+ case '\u00E5' : // å [LATIN SMALL LETTER A WITH RING ABOVE]
+ case '\u0101' : // ā [LATIN SMALL LETTER A WITH MACRON]
+ case '\u0103' : // ă [LATIN SMALL LETTER A WITH BREVE]
+ case '\u0105' : // ą [LATIN SMALL LETTER A WITH OGONEK]
+ case '\u01CE' : // ǎ [LATIN SMALL LETTER A WITH CARON]
+ case '\u01DF' : // ǟ [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON]
+ case '\u01E1' : // ǡ [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON]
+ case '\u01FB' : // ǻ [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE]
+ case '\u0201' : // ȁ [LATIN SMALL LETTER A WITH DOUBLE GRAVE]
+ case '\u0203' : // ȃ [LATIN SMALL LETTER A WITH INVERTED BREVE]
+ case '\u0227' : // ȧ [LATIN SMALL LETTER A WITH DOT ABOVE]
+ case '\u0250' : // ɐ [LATIN SMALL LETTER TURNED A]
+ case '\u0259' : // ə [LATIN SMALL LETTER SCHWA]
+ case '\u025A' : // ɚ [LATIN SMALL LETTER SCHWA WITH HOOK]
+ case '\u1D8F' : // ᶏ [LATIN SMALL LETTER A WITH RETROFLEX HOOK]
+ case '\u1D95' : // ᶕ [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK]
+ case '\u1E01' : // ạ [LATIN SMALL LETTER A WITH RING BELOW]
+ case '\u1E9A' : // ả [LATIN SMALL LETTER A WITH RIGHT HALF RING]
+ case '\u1EA1' : // ạ [LATIN SMALL LETTER A WITH DOT BELOW]
+ case '\u1EA3' : // ả [LATIN SMALL LETTER A WITH HOOK ABOVE]
+ case '\u1EA5' : // ấ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE]
+ case '\u1EA7' : // ầ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE]
+ case '\u1EA9' : // ẩ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE]
+ case '\u1EAB' : // ẫ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE]
+ case '\u1EAD' : // ậ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW]
+ case '\u1EAF' : // ắ [LATIN SMALL LETTER A WITH BREVE AND ACUTE]
+ case '\u1EB1' : // ằ [LATIN SMALL LETTER A WITH BREVE AND GRAVE]
+ case '\u1EB3' : // ẳ [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE]
+ case '\u1EB5' : // ẵ [LATIN SMALL LETTER A WITH BREVE AND TILDE]
+ case '\u1EB7' : // ặ [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW]
+ case '\u2090' : // ₐ [LATIN SUBSCRIPT SMALL LETTER A]
+ case '\u2094' : // ₔ [LATIN SUBSCRIPT SMALL LETTER SCHWA]
+ case '\u24D0' : // ⓐ [CIRCLED LATIN SMALL LETTER A]
+ case '\u2C65' : // ⱥ [LATIN SMALL LETTER A WITH STROKE]
+ case '\u2C6F' : // Ɐ [LATIN CAPITAL LETTER TURNED A]
+ case '\uFF41' : // a [FULLWIDTH LATIN SMALL LETTER A]
+ output[outputPos++] = 'a';
+ break;
+ case '\uA732' : // Ꜳ [LATIN CAPITAL LETTER AA]
+ output[outputPos++] = 'A';
+ output[outputPos++] = 'A';
+ break;
+ case '\u00C6' : // Æ [LATIN CAPITAL LETTER AE]
+ case '\u01E2' : // Ǣ [LATIN CAPITAL LETTER AE WITH MACRON]
+ case '\u01FC' : // Ǽ [LATIN CAPITAL LETTER AE WITH ACUTE]
+ case '\u1D01' : // ᴁ [LATIN LETTER SMALL CAPITAL AE]
+ output[outputPos++] = 'A';
+ output[outputPos++] = 'E';
+ break;
+ case '\uA734' : // Ꜵ [LATIN CAPITAL LETTER AO]
+ output[outputPos++] = 'A';
+ output[outputPos++] = 'O';
+ break;
+ case '\uA736' : // Ꜷ [LATIN CAPITAL LETTER AU]
+ output[outputPos++] = 'A';
+ output[outputPos++] = 'U';
+ break;
+ case '\uA738' : // Ꜹ [LATIN CAPITAL LETTER AV]
+ case '\uA73A' : // Ꜻ [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR]
+ output[outputPos++] = 'A';
+ output[outputPos++] = 'V';
+ break;
+ case '\uA73C' : // Ꜽ [LATIN CAPITAL LETTER AY]
+ output[outputPos++] = 'A';
+ output[outputPos++] = 'Y';
+ break;
+ case '\u249C' : // ⒜ [PARENTHESIZED LATIN SMALL LETTER A]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'a';
+ output[outputPos++] = ')';
+ break;
+ case '\uA733' : // ꜳ [LATIN SMALL LETTER AA]
+ output[outputPos++] = 'a';
+ output[outputPos++] = 'a';
+ break;
+ case '\u00E6' : // æ [LATIN SMALL LETTER AE]
+ case '\u01E3' : // ǣ [LATIN SMALL LETTER AE WITH MACRON]
+ case '\u01FD' : // ǽ [LATIN SMALL LETTER AE WITH ACUTE]
+ case '\u1D02' : // ᴂ [LATIN SMALL LETTER TURNED AE]
+ output[outputPos++] = 'a';
+ output[outputPos++] = 'e';
+ break;
+ case '\uA735' : // ꜵ [LATIN SMALL LETTER AO]
+ output[outputPos++] = 'a';
+ output[outputPos++] = 'o';
+ break;
+ case '\uA737' : // ꜷ [LATIN SMALL LETTER AU]
+ output[outputPos++] = 'a';
+ output[outputPos++] = 'u';
+ break;
+ case '\uA739' : // ꜹ [LATIN SMALL LETTER AV]
+ case '\uA73B' : // ꜻ [LATIN SMALL LETTER AV WITH HORIZONTAL BAR]
+ output[outputPos++] = 'a';
+ output[outputPos++] = 'v';
+ break;
+ case '\uA73D' : // ꜽ [LATIN SMALL LETTER AY]
+ output[outputPos++] = 'a';
+ output[outputPos++] = 'y';
+ break;
+ case '\u0181' : // Ɓ [LATIN CAPITAL LETTER B WITH HOOK]
+ case '\u0182' : // Ƃ [LATIN CAPITAL LETTER B WITH TOPBAR]
+ case '\u0243' : // Ƀ [LATIN CAPITAL LETTER B WITH STROKE]
+ case '\u0299' : // ʙ [LATIN LETTER SMALL CAPITAL B]
+ case '\u1D03' : // ᴃ [LATIN LETTER SMALL CAPITAL BARRED B]
+ case '\u1E02' : // Ḃ [LATIN CAPITAL LETTER B WITH DOT ABOVE]
+ case '\u1E04' : // Ḅ [LATIN CAPITAL LETTER B WITH DOT BELOW]
+ case '\u1E06' : // Ḇ [LATIN CAPITAL LETTER B WITH LINE BELOW]
+ case '\u24B7' : // Ⓑ [CIRCLED LATIN CAPITAL LETTER B]
+ case '\uFF22' : // B [FULLWIDTH LATIN CAPITAL LETTER B]
+ output[outputPos++] = 'B';
+ break;
+ case '\u0180' : // ƀ [LATIN SMALL LETTER B WITH STROKE]
+ case '\u0183' : // ƃ [LATIN SMALL LETTER B WITH TOPBAR]
+ case '\u0253' : // ɓ [LATIN SMALL LETTER B WITH HOOK]
+ case '\u1D6C' : // ᵬ [LATIN SMALL LETTER B WITH MIDDLE TILDE]
+ case '\u1D80' : // ᶀ [LATIN SMALL LETTER B WITH PALATAL HOOK]
+ case '\u1E03' : // ḃ [LATIN SMALL LETTER B WITH DOT ABOVE]
+ case '\u1E05' : // ḅ [LATIN SMALL LETTER B WITH DOT BELOW]
+ case '\u1E07' : // ḇ [LATIN SMALL LETTER B WITH LINE BELOW]
+ case '\u24D1' : // ⓑ [CIRCLED LATIN SMALL LETTER B]
+ case '\uFF42' : // b [FULLWIDTH LATIN SMALL LETTER B]
+ output[outputPos++] = 'b';
+ break;
+ case '\u249D' : // ⒝ [PARENTHESIZED LATIN SMALL LETTER B]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'b';
+ output[outputPos++] = ')';
+ break;
+ case '\u00C7' : // Ç [LATIN CAPITAL LETTER C WITH CEDILLA]
+ case '\u0106' : // Ć [LATIN CAPITAL LETTER C WITH ACUTE]
+ case '\u0108' : // Ĉ [LATIN CAPITAL LETTER C WITH CIRCUMFLEX]
+ case '\u010A' : // Ċ [LATIN CAPITAL LETTER C WITH DOT ABOVE]
+ case '\u010C' : // Č [LATIN CAPITAL LETTER C WITH CARON]
+ case '\u0187' : // Ƈ [LATIN CAPITAL LETTER C WITH HOOK]
+ case '\u023B' : // Ȼ [LATIN CAPITAL LETTER C WITH STROKE]
+ case '\u0297' : // ʗ [LATIN LETTER STRETCHED C]
+ case '\u1D04' : // ᴄ [LATIN LETTER SMALL CAPITAL C]
+ case '\u1E08' : // Ḉ [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE]
+ case '\u24B8' : // Ⓒ [CIRCLED LATIN CAPITAL LETTER C]
+ case '\uFF23' : // C [FULLWIDTH LATIN CAPITAL LETTER C]
+ output[outputPos++] = 'C';
+ break;
+ case '\u00E7' : // ç [LATIN SMALL LETTER C WITH CEDILLA]
+ case '\u0107' : // ć [LATIN SMALL LETTER C WITH ACUTE]
+ case '\u0109' : // ĉ [LATIN SMALL LETTER C WITH CIRCUMFLEX]
+ case '\u010B' : // ċ [LATIN SMALL LETTER C WITH DOT ABOVE]
+ case '\u010D' : // č [LATIN SMALL LETTER C WITH CARON]
+ case '\u0188' : // ƈ [LATIN SMALL LETTER C WITH HOOK]
+ case '\u023C' : // ȼ [LATIN SMALL LETTER C WITH STROKE]
+ case '\u0255' : // ɕ [LATIN SMALL LETTER C WITH CURL]
+ case '\u1E09' : // ḉ [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE]
+ case '\u2184' : // ↄ [LATIN SMALL LETTER REVERSED C]
+ case '\u24D2' : // ⓒ [CIRCLED LATIN SMALL LETTER C]
+ case '\uA73E' : // Ꜿ [LATIN CAPITAL LETTER REVERSED C WITH DOT]
+ case '\uA73F' : // ꜿ [LATIN SMALL LETTER REVERSED C WITH DOT]
+ case '\uFF43' : // c [FULLWIDTH LATIN SMALL LETTER C]
+ output[outputPos++] = 'c';
+ break;
+ case '\u249E' : // ⒞ [PARENTHESIZED LATIN SMALL LETTER C]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'c';
+ output[outputPos++] = ')';
+ break;
+ case '\u00D0' : // Ð [LATIN CAPITAL LETTER ETH]
+ case '\u010E' : // Ď [LATIN CAPITAL LETTER D WITH CARON]
+ case '\u0110' : // Đ [LATIN CAPITAL LETTER D WITH STROKE]
+ case '\u0189' : // Ɖ [LATIN CAPITAL LETTER AFRICAN D]
+ case '\u018A' : // Ɗ [LATIN CAPITAL LETTER D WITH HOOK]
+ case '\u018B' : // Ƌ [LATIN CAPITAL LETTER D WITH TOPBAR]
+ case '\u1D05' : // ᴅ [LATIN LETTER SMALL CAPITAL D]
+ case '\u1D06' : // ᴆ [LATIN LETTER SMALL CAPITAL ETH]
+ case '\u1E0A' : // Ḋ [LATIN CAPITAL LETTER D WITH DOT ABOVE]
+ case '\u1E0C' : // Ḍ [LATIN CAPITAL LETTER D WITH DOT BELOW]
+ case '\u1E0E' : // Ḏ [LATIN CAPITAL LETTER D WITH LINE BELOW]
+ case '\u1E10' : // Ḑ [LATIN CAPITAL LETTER D WITH CEDILLA]
+ case '\u1E12' : // Ḓ [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW]
+ case '\u24B9' : // Ⓓ [CIRCLED LATIN CAPITAL LETTER D]
+ case '\uA779' : // Ꝺ [LATIN CAPITAL LETTER INSULAR D]
+ case '\uFF24' : // D [FULLWIDTH LATIN CAPITAL LETTER D]
+ output[outputPos++] = 'D';
+ break;
+ case '\u00F0' : // ð [LATIN SMALL LETTER ETH]
+ case '\u010F' : // ď [LATIN SMALL LETTER D WITH CARON]
+ case '\u0111' : // đ [LATIN SMALL LETTER D WITH STROKE]
+ case '\u018C' : // ƌ [LATIN SMALL LETTER D WITH TOPBAR]
+ case '\u0221' : // ȡ [LATIN SMALL LETTER D WITH CURL]
+ case '\u0256' : // ɖ [LATIN SMALL LETTER D WITH TAIL]
+ case '\u0257' : // ɗ [LATIN SMALL LETTER D WITH HOOK]
+ case '\u1D6D' : // ᵭ [LATIN SMALL LETTER D WITH MIDDLE TILDE]
+ case '\u1D81' : // ᶁ [LATIN SMALL LETTER D WITH PALATAL HOOK]
+ case '\u1D91' : // ᶑ [LATIN SMALL LETTER D WITH HOOK AND TAIL]
+ case '\u1E0B' : // ḋ [LATIN SMALL LETTER D WITH DOT ABOVE]
+ case '\u1E0D' : // ḍ [LATIN SMALL LETTER D WITH DOT BELOW]
+ case '\u1E0F' : // ḏ [LATIN SMALL LETTER D WITH LINE BELOW]
+ case '\u1E11' : // ḑ [LATIN SMALL LETTER D WITH CEDILLA]
+ case '\u1E13' : // ḓ [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW]
+ case '\u24D3' : // ⓓ [CIRCLED LATIN SMALL LETTER D]
+ case '\uA77A' : // ꝺ [LATIN SMALL LETTER INSULAR D]
+ case '\uFF44' : // d [FULLWIDTH LATIN SMALL LETTER D]
+ output[outputPos++] = 'd';
+ break;
+ case '\u01C4' : // DŽ [LATIN CAPITAL LETTER DZ WITH CARON]
+ case '\u01F1' : // DZ [LATIN CAPITAL LETTER DZ]
+ output[outputPos++] = 'D';
+ output[outputPos++] = 'Z';
+ break;
+ case '\u01C5' : // Dž [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON]
+ case '\u01F2' : // Dz [LATIN CAPITAL LETTER D WITH SMALL LETTER Z]
+ output[outputPos++] = 'D';
+ output[outputPos++] = 'z';
+ break;
+ case '\u249F' : // ⒟ [PARENTHESIZED LATIN SMALL LETTER D]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'd';
+ output[outputPos++] = ')';
+ break;
+ case '\u0238' : // ȸ [LATIN SMALL LETTER DB DIGRAPH]
+ output[outputPos++] = 'd';
+ output[outputPos++] = 'b';
+ break;
+ case '\u01C6' : // dž [LATIN SMALL LETTER DZ WITH CARON]
+ case '\u01F3' : // dz [LATIN SMALL LETTER DZ]
+ case '\u02A3' : // ʣ [LATIN SMALL LETTER DZ DIGRAPH]
+ case '\u02A5' : // ʥ [LATIN SMALL LETTER DZ DIGRAPH WITH CURL]
+ output[outputPos++] = 'd';
+ output[outputPos++] = 'z';
+ break;
+ case '\u00C8' : // È [LATIN CAPITAL LETTER E WITH GRAVE]
+ case '\u00C9' : // É [LATIN CAPITAL LETTER E WITH ACUTE]
+ case '\u00CA' : // Ê [LATIN CAPITAL LETTER E WITH CIRCUMFLEX]
+ case '\u00CB' : // Ë [LATIN CAPITAL LETTER E WITH DIAERESIS]
+ case '\u0112' : // Ē [LATIN CAPITAL LETTER E WITH MACRON]
+ case '\u0114' : // Ĕ [LATIN CAPITAL LETTER E WITH BREVE]
+ case '\u0116' : // Ė [LATIN CAPITAL LETTER E WITH DOT ABOVE]
+ case '\u0118' : // Ę [LATIN CAPITAL LETTER E WITH OGONEK]
+ case '\u011A' : // Ě [LATIN CAPITAL LETTER E WITH CARON]
+ case '\u018E' : // Ǝ [LATIN CAPITAL LETTER REVERSED E]
+ case '\u0190' : // Ɛ [LATIN CAPITAL LETTER OPEN E]
+ case '\u0204' : // Ȅ [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE]
+ case '\u0206' : // Ȇ [LATIN CAPITAL LETTER E WITH INVERTED BREVE]
+ case '\u0228' : // Ȩ [LATIN CAPITAL LETTER E WITH CEDILLA]
+ case '\u0246' : // Ɇ [LATIN CAPITAL LETTER E WITH STROKE]
+ case '\u1D07' : // ᴇ [LATIN LETTER SMALL CAPITAL E]
+ case '\u1E14' : // Ḕ [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE]
+ case '\u1E16' : // Ḗ [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE]
+ case '\u1E18' : // Ḙ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW]
+ case '\u1E1A' : // Ḛ [LATIN CAPITAL LETTER E WITH TILDE BELOW]
+ case '\u1E1C' : // Ḝ [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE]
+ case '\u1EB8' : // Ẹ [LATIN CAPITAL LETTER E WITH DOT BELOW]
+ case '\u1EBA' : // Ẻ [LATIN CAPITAL LETTER E WITH HOOK ABOVE]
+ case '\u1EBC' : // Ẽ [LATIN CAPITAL LETTER E WITH TILDE]
+ case '\u1EBE' : // Ế [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE]
+ case '\u1EC0' : // Ề [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE]
+ case '\u1EC2' : // Ể [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+ case '\u1EC4' : // Ễ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE]
+ case '\u1EC6' : // Ệ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+ case '\u24BA' : // Ⓔ [CIRCLED LATIN CAPITAL LETTER E]
+ case '\u2C7B' : // ⱻ [LATIN LETTER SMALL CAPITAL TURNED E]
+ case '\uFF25' : // E [FULLWIDTH LATIN CAPITAL LETTER E]
+ output[outputPos++] = 'E';
+ break;
+ case '\u00E8' : // è [LATIN SMALL LETTER E WITH GRAVE]
+ case '\u00E9' : // é [LATIN SMALL LETTER E WITH ACUTE]
+ case '\u00EA' : // ê [LATIN SMALL LETTER E WITH CIRCUMFLEX]
+ case '\u00EB' : // ë [LATIN SMALL LETTER E WITH DIAERESIS]
+ case '\u0113' : // ē [LATIN SMALL LETTER E WITH MACRON]
+ case '\u0115' : // ĕ [LATIN SMALL LETTER E WITH BREVE]
+ case '\u0117' : // ė [LATIN SMALL LETTER E WITH DOT ABOVE]
+ case '\u0119' : // ę [LATIN SMALL LETTER E WITH OGONEK]
+ case '\u011B' : // ě [LATIN SMALL LETTER E WITH CARON]
+ case '\u01DD' : // ǝ [LATIN SMALL LETTER TURNED E]
+ case '\u0205' : // ȅ [LATIN SMALL LETTER E WITH DOUBLE GRAVE]
+ case '\u0207' : // ȇ [LATIN SMALL LETTER E WITH INVERTED BREVE]
+ case '\u0229' : // ȩ [LATIN SMALL LETTER E WITH CEDILLA]
+ case '\u0247' : // ɇ [LATIN SMALL LETTER E WITH STROKE]
+ case '\u0258' : // ɘ [LATIN SMALL LETTER REVERSED E]
+ case '\u025B' : // ɛ [LATIN SMALL LETTER OPEN E]
+ case '\u025C' : // ɜ [LATIN SMALL LETTER REVERSED OPEN E]
+ case '\u025D' : // ɝ [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK]
+ case '\u025E' : // ɞ [LATIN SMALL LETTER CLOSED REVERSED OPEN E]
+ case '\u029A' : // ʚ [LATIN SMALL LETTER CLOSED OPEN E]
+ case '\u1D08' : // ᴈ [LATIN SMALL LETTER TURNED OPEN E]
+ case '\u1D92' : // ᶒ [LATIN SMALL LETTER E WITH RETROFLEX HOOK]
+ case '\u1D93' : // ᶓ [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK]
+ case '\u1D94' : // ᶔ [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK]
+ case '\u1E15' : // ḕ [LATIN SMALL LETTER E WITH MACRON AND GRAVE]
+ case '\u1E17' : // ḗ [LATIN SMALL LETTER E WITH MACRON AND ACUTE]
+ case '\u1E19' : // ḙ [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW]
+ case '\u1E1B' : // ḛ [LATIN SMALL LETTER E WITH TILDE BELOW]
+ case '\u1E1D' : // ḝ [LATIN SMALL LETTER E WITH CEDILLA AND BREVE]
+ case '\u1EB9' : // ẹ [LATIN SMALL LETTER E WITH DOT BELOW]
+ case '\u1EBB' : // ẻ [LATIN SMALL LETTER E WITH HOOK ABOVE]
+ case '\u1EBD' : // ẽ [LATIN SMALL LETTER E WITH TILDE]
+ case '\u1EBF' : // ế [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE]
+ case '\u1EC1' : // ề [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE]
+ case '\u1EC3' : // ể [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE]
+ case '\u1EC5' : // ễ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE]
+ case '\u1EC7' : // ệ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW]
+ case '\u2091' : // ₑ [LATIN SUBSCRIPT SMALL LETTER E]
+ case '\u24D4' : // ⓔ [CIRCLED LATIN SMALL LETTER E]
+ case '\u2C78' : // ⱸ [LATIN SMALL LETTER E WITH NOTCH]
+ case '\uFF45' : // e [FULLWIDTH LATIN SMALL LETTER E]
+ output[outputPos++] = 'e';
+ break;
+ case '\u24A0' : // ⒠ [PARENTHESIZED LATIN SMALL LETTER E]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'e';
+ output[outputPos++] = ')';
+ break;
+ case '\u0191' : // Ƒ [LATIN CAPITAL LETTER F WITH HOOK]
+ case '\u1E1E' : // Ḟ [LATIN CAPITAL LETTER F WITH DOT ABOVE]
+ case '\u24BB' : // Ⓕ [CIRCLED LATIN CAPITAL LETTER F]
+ case '\uA730' : // ꜰ [LATIN LETTER SMALL CAPITAL F]
+ case '\uA77B' : // Ꝼ [LATIN CAPITAL LETTER INSULAR F]
+ case '\uA7FB' : // ꟻ [LATIN EPIGRAPHIC LETTER REVERSED F]
+ case '\uFF26' : // F [FULLWIDTH LATIN CAPITAL LETTER F]
+ output[outputPos++] = 'F';
+ break;
+ case '\u0192' : // ƒ [LATIN SMALL LETTER F WITH HOOK]
+ case '\u1D6E' : // ᵮ [LATIN SMALL LETTER F WITH MIDDLE TILDE]
+ case '\u1D82' : // ᶂ [LATIN SMALL LETTER F WITH PALATAL HOOK]
+ case '\u1E1F' : // ḟ [LATIN SMALL LETTER F WITH DOT ABOVE]
+ case '\u1E9B' : // ẛ [LATIN SMALL LETTER LONG S WITH DOT ABOVE]
+ case '\u24D5' : // ⓕ [CIRCLED LATIN SMALL LETTER F]
+ case '\uA77C' : // ꝼ [LATIN SMALL LETTER INSULAR F]
+ case '\uFF46' : // f [FULLWIDTH LATIN SMALL LETTER F]
+ output[outputPos++] = 'f';
+ break;
+ case '\u24A1' : // ⒡ [PARENTHESIZED LATIN SMALL LETTER F]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'f';
+ output[outputPos++] = ')';
+ break;
+ case '\uFB00' : // ff [LATIN SMALL LIGATURE FF]
+ output[outputPos++] = 'f';
+ output[outputPos++] = 'f';
+ break;
+ case '\uFB03' : // ffi [LATIN SMALL LIGATURE FFI]
+ output[outputPos++] = 'f';
+ output[outputPos++] = 'f';
+ output[outputPos++] = 'i';
+ break;
+ case '\uFB04' : // ffl [LATIN SMALL LIGATURE FFL]
+ output[outputPos++] = 'f';
+ output[outputPos++] = 'f';
+ output[outputPos++] = 'l';
+ break;
+ case '\uFB01' : // fi [LATIN SMALL LIGATURE FI]
+ output[outputPos++] = 'f';
+ output[outputPos++] = 'i';
+ break;
+ case '\uFB02' : // fl [LATIN SMALL LIGATURE FL]
+ output[outputPos++] = 'f';
+ output[outputPos++] = 'l';
+ break;
+ case '\u011C' : // Ĝ [LATIN CAPITAL LETTER G WITH CIRCUMFLEX]
+ case '\u011E' : // Ğ [LATIN CAPITAL LETTER G WITH BREVE]
+ case '\u0120' : // Ġ [LATIN CAPITAL LETTER G WITH DOT ABOVE]
+ case '\u0122' : // Ģ [LATIN CAPITAL LETTER G WITH CEDILLA]
+ case '\u0193' : // Ɠ [LATIN CAPITAL LETTER G WITH HOOK]
+ case '\u01E4' : // Ǥ [LATIN CAPITAL LETTER G WITH STROKE]
+ case '\u01E5' : // ǥ [LATIN SMALL LETTER G WITH STROKE]
+ case '\u01E6' : // Ǧ [LATIN CAPITAL LETTER G WITH CARON]
+ case '\u01E7' : // ǧ [LATIN SMALL LETTER G WITH CARON]
+ case '\u01F4' : // Ǵ [LATIN CAPITAL LETTER G WITH ACUTE]
+ case '\u0262' : // ɢ [LATIN LETTER SMALL CAPITAL G]
+ case '\u029B' : // ʛ [LATIN LETTER SMALL CAPITAL G WITH HOOK]
+ case '\u1E20' : // Ḡ [LATIN CAPITAL LETTER G WITH MACRON]
+ case '\u24BC' : // Ⓖ [CIRCLED LATIN CAPITAL LETTER G]
+ case '\uA77D' : // Ᵹ [LATIN CAPITAL LETTER INSULAR G]
+ case '\uA77E' : // Ꝿ [LATIN CAPITAL LETTER TURNED INSULAR G]
+ case '\uFF27' : // G [FULLWIDTH LATIN CAPITAL LETTER G]
+ output[outputPos++] = 'G';
+ break;
+ case '\u011D' : // ĝ [LATIN SMALL LETTER G WITH CIRCUMFLEX]
+ case '\u011F' : // ğ [LATIN SMALL LETTER G WITH BREVE]
+ case '\u0121' : // ġ [LATIN SMALL LETTER G WITH DOT ABOVE]
+ case '\u0123' : // ģ [LATIN SMALL LETTER G WITH CEDILLA]
+ case '\u01F5' : // ǵ [LATIN SMALL LETTER G WITH ACUTE]
+ case '\u0260' : // ɠ [LATIN SMALL LETTER G WITH HOOK]
+ case '\u0261' : // ɡ [LATIN SMALL LETTER SCRIPT G]
+ case '\u1D77' : // ᵷ [LATIN SMALL LETTER TURNED G]
+ case '\u1D79' : // ᵹ [LATIN SMALL LETTER INSULAR G]
+ case '\u1D83' : // ᶃ [LATIN SMALL LETTER G WITH PALATAL HOOK]
+ case '\u1E21' : // ḡ [LATIN SMALL LETTER G WITH MACRON]
+ case '\u24D6' : // ⓖ [CIRCLED LATIN SMALL LETTER G]
+ case '\uA77F' : // ꝿ [LATIN SMALL LETTER TURNED INSULAR G]
+ case '\uFF47' : // g [FULLWIDTH LATIN SMALL LETTER G]
+ output[outputPos++] = 'g';
+ break;
+ case '\u24A2' : // ⒢ [PARENTHESIZED LATIN SMALL LETTER G]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'g';
+ output[outputPos++] = ')';
+ break;
+ case '\u0124' : // Ĥ [LATIN CAPITAL LETTER H WITH CIRCUMFLEX]
+ case '\u0126' : // Ħ [LATIN CAPITAL LETTER H WITH STROKE]
+ case '\u021E' : // Ȟ [LATIN CAPITAL LETTER H WITH CARON]
+ case '\u029C' : // ʜ [LATIN LETTER SMALL CAPITAL H]
+ case '\u1E22' : // Ḣ [LATIN CAPITAL LETTER H WITH DOT ABOVE]
+ case '\u1E24' : // Ḥ [LATIN CAPITAL LETTER H WITH DOT BELOW]
+ case '\u1E26' : // Ḧ [LATIN CAPITAL LETTER H WITH DIAERESIS]
+ case '\u1E28' : // Ḩ [LATIN CAPITAL LETTER H WITH CEDILLA]
+ case '\u1E2A' : // Ḫ [LATIN CAPITAL LETTER H WITH BREVE BELOW]
+ case '\u24BD' : // Ⓗ [CIRCLED LATIN CAPITAL LETTER H]
+ case '\u2C67' : // Ⱨ [LATIN CAPITAL LETTER H WITH DESCENDER]
+ case '\u2C75' : // Ⱶ [LATIN CAPITAL LETTER HALF H]
+ case '\uFF28' : // H [FULLWIDTH LATIN CAPITAL LETTER H]
+ output[outputPos++] = 'H';
+ break;
+ case '\u0125' : // ĥ [LATIN SMALL LETTER H WITH CIRCUMFLEX]
+ case '\u0127' : // ħ [LATIN SMALL LETTER H WITH STROKE]
+ case '\u021F' : // ȟ [LATIN SMALL LETTER H WITH CARON]
+ case '\u0265' : // ɥ [LATIN SMALL LETTER TURNED H]
+ case '\u0266' : // ɦ [LATIN SMALL LETTER H WITH HOOK]
+ case '\u02AE' : // ʮ [LATIN SMALL LETTER TURNED H WITH FISHHOOK]
+ case '\u02AF' : // ʯ [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL]
+ case '\u1E23' : // ḣ [LATIN SMALL LETTER H WITH DOT ABOVE]
+ case '\u1E25' : // ḥ [LATIN SMALL LETTER H WITH DOT BELOW]
+ case '\u1E27' : // ḧ [LATIN SMALL LETTER H WITH DIAERESIS]
+ case '\u1E29' : // ḩ [LATIN SMALL LETTER H WITH CEDILLA]
+ case '\u1E2B' : // ḫ [LATIN SMALL LETTER H WITH BREVE BELOW]
+ case '\u1E96' : // ẖ [LATIN SMALL LETTER H WITH LINE BELOW]
+ case '\u24D7' : // ⓗ [CIRCLED LATIN SMALL LETTER H]
+ case '\u2C68' : // ⱨ [LATIN SMALL LETTER H WITH DESCENDER]
+ case '\u2C76' : // ⱶ [LATIN SMALL LETTER HALF H]
+ case '\uFF48' : // h [FULLWIDTH LATIN SMALL LETTER H]
+ output[outputPos++] = 'h';
+ break;
+ case '\u01F6' : // Ƕ http://en.wikipedia.org/wiki/Hwair [LATIN CAPITAL LETTER HWAIR]
+ output[outputPos++] = 'H';
+ output[outputPos++] = 'V';
+ break;
+ case '\u24A3' : // ⒣ [PARENTHESIZED LATIN SMALL LETTER H]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'h';
+ output[outputPos++] = ')';
+ break;
+ case '\u0195' : // ƕ [LATIN SMALL LETTER HV]
+ output[outputPos++] = 'h';
+ output[outputPos++] = 'v';
+ break;
+ case '\u00CC' : // Ì [LATIN CAPITAL LETTER I WITH GRAVE]
+ case '\u00CD' : // Í [LATIN CAPITAL LETTER I WITH ACUTE]
+ case '\u00CE' : // Î [LATIN CAPITAL LETTER I WITH CIRCUMFLEX]
+ case '\u00CF' : // Ï [LATIN CAPITAL LETTER I WITH DIAERESIS]
+ case '\u0128' : // Ĩ [LATIN CAPITAL LETTER I WITH TILDE]
+ case '\u012A' : // Ī [LATIN CAPITAL LETTER I WITH MACRON]
+ case '\u012C' : // Ĭ [LATIN CAPITAL LETTER I WITH BREVE]
+ case '\u012E' : // Į [LATIN CAPITAL LETTER I WITH OGONEK]
+ case '\u0130' : // İ [LATIN CAPITAL LETTER I WITH DOT ABOVE]
+ case '\u0196' : // Ɩ [LATIN CAPITAL LETTER IOTA]
+ case '\u0197' : // Ɨ [LATIN CAPITAL LETTER I WITH STROKE]
+ case '\u01CF' : // Ǐ [LATIN CAPITAL LETTER I WITH CARON]
+ case '\u0208' : // Ȉ [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE]
+ case '\u020A' : // Ȋ [LATIN CAPITAL LETTER I WITH INVERTED BREVE]
+ case '\u026A' : // ɪ [LATIN LETTER SMALL CAPITAL I]
+ case '\u1D7B' : // ᵻ [LATIN SMALL CAPITAL LETTER I WITH STROKE]
+ case '\u1E2C' : // Ḭ [LATIN CAPITAL LETTER I WITH TILDE BELOW]
+ case '\u1E2E' : // Ḯ [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE]
+ case '\u1EC8' : // Ỉ [LATIN CAPITAL LETTER I WITH HOOK ABOVE]
+ case '\u1ECA' : // Ị [LATIN CAPITAL LETTER I WITH DOT BELOW]
+ case '\u24BE' : // Ⓘ [CIRCLED LATIN CAPITAL LETTER I]
+ case '\uA7FE' : // ꟾ [LATIN EPIGRAPHIC LETTER I LONGA]
+ case '\uFF29' : // I [FULLWIDTH LATIN CAPITAL LETTER I]
+ output[outputPos++] = 'I';
+ break;
+ case '\u00EC' : // ì [LATIN SMALL LETTER I WITH GRAVE]
+ case '\u00ED' : // í [LATIN SMALL LETTER I WITH ACUTE]
+ case '\u00EE' : // î [LATIN SMALL LETTER I WITH CIRCUMFLEX]
+ case '\u00EF' : // ï [LATIN SMALL LETTER I WITH DIAERESIS]
+ case '\u0129' : // ĩ [LATIN SMALL LETTER I WITH TILDE]
+ case '\u012B' : // ī [LATIN SMALL LETTER I WITH MACRON]
+ case '\u012D' : // ĭ [LATIN SMALL LETTER I WITH BREVE]
+ case '\u012F' : // į [LATIN SMALL LETTER I WITH OGONEK]
+ case '\u0131' : // ı [LATIN SMALL LETTER DOTLESS I]
+ case '\u01D0' : // ǐ [LATIN SMALL LETTER I WITH CARON]
+ case '\u0209' : // ȉ [LATIN SMALL LETTER I WITH DOUBLE GRAVE]
+ case '\u020B' : // ȋ [LATIN SMALL LETTER I WITH INVERTED BREVE]
+ case '\u0268' : // ɨ [LATIN SMALL LETTER I WITH STROKE]
+ case '\u1D09' : // ᴉ [LATIN SMALL LETTER TURNED I]
+ case '\u1D62' : // ᵢ [LATIN SUBSCRIPT SMALL LETTER I]
+ case '\u1D7C' : // ᵼ [LATIN SMALL LETTER IOTA WITH STROKE]
+ case '\u1D96' : // ᶖ [LATIN SMALL LETTER I WITH RETROFLEX HOOK]
+ case '\u1E2D' : // ḭ [LATIN SMALL LETTER I WITH TILDE BELOW]
+ case '\u1E2F' : // ḯ [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE]
+ case '\u1EC9' : // ỉ [LATIN SMALL LETTER I WITH HOOK ABOVE]
+ case '\u1ECB' : // ị [LATIN SMALL LETTER I WITH DOT BELOW]
+ case '\u2071' : // ⁱ [SUPERSCRIPT LATIN SMALL LETTER I]
+ case '\u24D8' : // ⓘ [CIRCLED LATIN SMALL LETTER I]
+ case '\uFF49' : // i [FULLWIDTH LATIN SMALL LETTER I]
+ output[outputPos++] = 'i';
+ break;
+ case '\u0132' : // IJ [LATIN CAPITAL LIGATURE IJ]
+ output[outputPos++] = 'I';
+ output[outputPos++] = 'J';
+ break;
+ case '\u24A4' : // ⒤ [PARENTHESIZED LATIN SMALL LETTER I]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'i';
+ output[outputPos++] = ')';
+ break;
+ case '\u0133' : // ij [LATIN SMALL LIGATURE IJ]
+ output[outputPos++] = 'i';
+ output[outputPos++] = 'j';
+ break;
+ case '\u0134' : // Ĵ [LATIN CAPITAL LETTER J WITH CIRCUMFLEX]
+ case '\u0248' : // Ɉ [LATIN CAPITAL LETTER J WITH STROKE]
+ case '\u1D0A' : // ᴊ [LATIN LETTER SMALL CAPITAL J]
+ case '\u24BF' : // Ⓙ [CIRCLED LATIN CAPITAL LETTER J]
+ case '\uFF2A' : // J [FULLWIDTH LATIN CAPITAL LETTER J]
+ output[outputPos++] = 'J';
+ break;
+ case '\u0135' : // ĵ [LATIN SMALL LETTER J WITH CIRCUMFLEX]
+ case '\u01F0' : // ǰ [LATIN SMALL LETTER J WITH CARON]
+ case '\u0237' : // ȷ [LATIN SMALL LETTER DOTLESS J]
+ case '\u0249' : // ɉ [LATIN SMALL LETTER J WITH STROKE]
+ case '\u025F' : // ɟ [LATIN SMALL LETTER DOTLESS J WITH STROKE]
+ case '\u0284' : // ʄ [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK]
+ case '\u029D' : // ʝ [LATIN SMALL LETTER J WITH CROSSED-TAIL]
+ case '\u24D9' : // ⓙ [CIRCLED LATIN SMALL LETTER J]
+ case '\u2C7C' : // ⱼ [LATIN SUBSCRIPT SMALL LETTER J]
+ case '\uFF4A' : // j [FULLWIDTH LATIN SMALL LETTER J]
+ output[outputPos++] = 'j';
+ break;
+ case '\u24A5' : // ⒥ [PARENTHESIZED LATIN SMALL LETTER J]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'j';
+ output[outputPos++] = ')';
+ break;
+ case '\u0136' : // Ķ [LATIN CAPITAL LETTER K WITH CEDILLA]
+ case '\u0198' : // Ƙ [LATIN CAPITAL LETTER K WITH HOOK]
+ case '\u01E8' : // Ǩ [LATIN CAPITAL LETTER K WITH CARON]
+ case '\u1D0B' : // ᴋ [LATIN LETTER SMALL CAPITAL K]
+ case '\u1E30' : // Ḱ [LATIN CAPITAL LETTER K WITH ACUTE]
+ case '\u1E32' : // Ḳ [LATIN CAPITAL LETTER K WITH DOT BELOW]
+ case '\u1E34' : // Ḵ [LATIN CAPITAL LETTER K WITH LINE BELOW]
+ case '\u24C0' : // Ⓚ [CIRCLED LATIN CAPITAL LETTER K]
+ case '\u2C69' : // Ⱪ [LATIN CAPITAL LETTER K WITH DESCENDER]
+ case '\uA740' : // Ꝁ [LATIN CAPITAL LETTER K WITH STROKE]
+ case '\uA742' : // Ꝃ [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE]
+ case '\uA744' : // Ꝅ [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE]
+ case '\uFF2B' : // K [FULLWIDTH LATIN CAPITAL LETTER K]
+ output[outputPos++] = 'K';
+ break;
+ case '\u0137' : // ķ [LATIN SMALL LETTER K WITH CEDILLA]
+ case '\u0199' : // ƙ [LATIN SMALL LETTER K WITH HOOK]
+ case '\u01E9' : // ǩ [LATIN SMALL LETTER K WITH CARON]
+ case '\u029E' : // ʞ [LATIN SMALL LETTER TURNED K]
+ case '\u1D84' : // ᶄ [LATIN SMALL LETTER K WITH PALATAL HOOK]
+ case '\u1E31' : // ḱ [LATIN SMALL LETTER K WITH ACUTE]
+ case '\u1E33' : // ḳ [LATIN SMALL LETTER K WITH DOT BELOW]
+ case '\u1E35' : // ḵ [LATIN SMALL LETTER K WITH LINE BELOW]
+ case '\u24DA' : // ⓚ [CIRCLED LATIN SMALL LETTER K]
+ case '\u2C6A' : // ⱪ [LATIN SMALL LETTER K WITH DESCENDER]
+ case '\uA741' : // ꝁ [LATIN SMALL LETTER K WITH STROKE]
+ case '\uA743' : // ꝃ [LATIN SMALL LETTER K WITH DIAGONAL STROKE]
+ case '\uA745' : // ꝅ [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE]
+ case '\uFF4B' : // k [FULLWIDTH LATIN SMALL LETTER K]
+ output[outputPos++] = 'k';
+ break;
+ case '\u24A6' : // ⒦ [PARENTHESIZED LATIN SMALL LETTER K]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'k';
+ output[outputPos++] = ')';
+ break;
+ case '\u0139' : // Ĺ [LATIN CAPITAL LETTER L WITH ACUTE]
+ case '\u013B' : // Ļ [LATIN CAPITAL LETTER L WITH CEDILLA]
+ case '\u013D' : // Ľ [LATIN CAPITAL LETTER L WITH CARON]
+ case '\u013F' : // Ŀ [LATIN CAPITAL LETTER L WITH MIDDLE DOT]
+ case '\u0141' : // Ł [LATIN CAPITAL LETTER L WITH STROKE]
+ case '\u023D' : // Ƚ [LATIN CAPITAL LETTER L WITH BAR]
+ case '\u029F' : // ʟ [LATIN LETTER SMALL CAPITAL L]
+ case '\u1D0C' : // ᴌ [LATIN LETTER SMALL CAPITAL L WITH STROKE]
+ case '\u1E36' : // Ḷ [LATIN CAPITAL LETTER L WITH DOT BELOW]
+ case '\u1E38' : // Ḹ [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON]
+ case '\u1E3A' : // Ḻ [LATIN CAPITAL LETTER L WITH LINE BELOW]
+ case '\u1E3C' : // Ḽ [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW]
+ case '\u24C1' : // Ⓛ [CIRCLED LATIN CAPITAL LETTER L]
+ case '\u2C60' : // Ⱡ [LATIN CAPITAL LETTER L WITH DOUBLE BAR]
+ case '\u2C62' : // Ɫ [LATIN CAPITAL LETTER L WITH MIDDLE TILDE]
+ case '\uA746' : // Ꝇ [LATIN CAPITAL LETTER BROKEN L]
+ case '\uA748' : // Ꝉ [LATIN CAPITAL LETTER L WITH HIGH STROKE]
+ case '\uA780' : // Ꞁ [LATIN CAPITAL LETTER TURNED L]
+ case '\uFF2C' : // L [FULLWIDTH LATIN CAPITAL LETTER L]
+ output[outputPos++] = 'L';
+ break;
+ case '\u013A' : // ĺ [LATIN SMALL LETTER L WITH ACUTE]
+ case '\u013C' : // ļ [LATIN SMALL LETTER L WITH CEDILLA]
+ case '\u013E' : // ľ [LATIN SMALL LETTER L WITH CARON]
+ case '\u0140' : // ŀ [LATIN SMALL LETTER L WITH MIDDLE DOT]
+ case '\u0142' : // ł [LATIN SMALL LETTER L WITH STROKE]
+ case '\u019A' : // ƚ [LATIN SMALL LETTER L WITH BAR]
+ case '\u0234' : // ȴ [LATIN SMALL LETTER L WITH CURL]
+ case '\u026B' : // ɫ [LATIN SMALL LETTER L WITH MIDDLE TILDE]
+ case '\u026C' : // ɬ [LATIN SMALL LETTER L WITH BELT]
+ case '\u026D' : // ɭ [LATIN SMALL LETTER L WITH RETROFLEX HOOK]
+ case '\u1D85' : // ᶅ [LATIN SMALL LETTER L WITH PALATAL HOOK]
+ case '\u1E37' : // ḷ [LATIN SMALL LETTER L WITH DOT BELOW]
+ case '\u1E39' : // ḹ [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON]
+ case '\u1E3B' : // ḻ [LATIN SMALL LETTER L WITH LINE BELOW]
+ case '\u1E3D' : // ḽ [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW]
+ case '\u24DB' : // ⓛ [CIRCLED LATIN SMALL LETTER L]
+ case '\u2C61' : // ⱡ [LATIN SMALL LETTER L WITH DOUBLE BAR]
+ case '\uA747' : // ꝇ [LATIN SMALL LETTER BROKEN L]
+ case '\uA749' : // ꝉ [LATIN SMALL LETTER L WITH HIGH STROKE]
+ case '\uA781' : // ꞁ [LATIN SMALL LETTER TURNED L]
+ case '\uFF4C' : // l [FULLWIDTH LATIN SMALL LETTER L]
+ output[outputPos++] = 'l';
+ break;
+ case '\u01C7' : // LJ [LATIN CAPITAL LETTER LJ]
+ output[outputPos++] = 'L';
+ output[outputPos++] = 'J';
+ break;
+ case '\u1EFA' : // Ỻ [LATIN CAPITAL LETTER MIDDLE-WELSH LL]
+ output[outputPos++] = 'L';
+ output[outputPos++] = 'L';
+ break;
+ case '\u01C8' : // Lj [LATIN CAPITAL LETTER L WITH SMALL LETTER J]
+ output[outputPos++] = 'L';
+ output[outputPos++] = 'j';
+ break;
+ case '\u24A7' : // ⒧ [PARENTHESIZED LATIN SMALL LETTER L]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'l';
+ output[outputPos++] = ')';
+ break;
+ case '\u01C9' : // lj [LATIN SMALL LETTER LJ]
+ output[outputPos++] = 'l';
+ output[outputPos++] = 'j';
+ break;
+ case '\u1EFB' : // ỻ [LATIN SMALL LETTER MIDDLE-WELSH LL]
+ output[outputPos++] = 'l';
+ output[outputPos++] = 'l';
+ break;
+ case '\u02AA' : // ʪ [LATIN SMALL LETTER LS DIGRAPH]
+ output[outputPos++] = 'l';
+ output[outputPos++] = 's';
+ break;
+ case '\u02AB' : // ʫ [LATIN SMALL LETTER LZ DIGRAPH]
+ output[outputPos++] = 'l';
+ output[outputPos++] = 'z';
+ break;
+ case '\u019C' : // Ɯ [LATIN CAPITAL LETTER TURNED M]
+ case '\u1D0D' : // ᴍ [LATIN LETTER SMALL CAPITAL M]
+ case '\u1E3E' : // Ḿ [LATIN CAPITAL LETTER M WITH ACUTE]
+ case '\u1E40' : // Ṁ [LATIN CAPITAL LETTER M WITH DOT ABOVE]
+ case '\u1E42' : // Ṃ [LATIN CAPITAL LETTER M WITH DOT BELOW]
+ case '\u24C2' : // Ⓜ [CIRCLED LATIN CAPITAL LETTER M]
+ case '\u2C6E' : // Ɱ [LATIN CAPITAL LETTER M WITH HOOK]
+ case '\uA7FD' : // ꟽ [LATIN EPIGRAPHIC LETTER INVERTED M]
+ case '\uA7FF' : // ꟿ [LATIN EPIGRAPHIC LETTER ARCHAIC M]
+ case '\uFF2D' : // M [FULLWIDTH LATIN CAPITAL LETTER M]
+ output[outputPos++] = 'M';
+ break;
+ case '\u026F' : // ɯ [LATIN SMALL LETTER TURNED M]
+ case '\u0270' : // ɰ [LATIN SMALL LETTER TURNED M WITH LONG LEG]
+ case '\u0271' : // ɱ [LATIN SMALL LETTER M WITH HOOK]
+ case '\u1D6F' : // ᵯ [LATIN SMALL LETTER M WITH MIDDLE TILDE]
+ case '\u1D86' : // ᶆ [LATIN SMALL LETTER M WITH PALATAL HOOK]
+ case '\u1E3F' : // ḿ [LATIN SMALL LETTER M WITH ACUTE]
+ case '\u1E41' : // ṁ [LATIN SMALL LETTER M WITH DOT ABOVE]
+ case '\u1E43' : // ṃ [LATIN SMALL LETTER M WITH DOT BELOW]
+ case '\u24DC' : // ⓜ [CIRCLED LATIN SMALL LETTER M]
+ case '\uFF4D' : // m [FULLWIDTH LATIN SMALL LETTER M]
+ output[outputPos++] = 'm';
+ break;
+ case '\u24A8' : // ⒨ [PARENTHESIZED LATIN SMALL LETTER M]
+ output[outputPos++] = '(';
+ output[outputPos++] = 'm';
+ output[outputPos++] = ')';
+ break;
+ case '\u00D1' : // Ñ [LATIN CAPITAL LETTER N WITH TILDE]
+ case '\u0143' : // Ń [LATIN CAPITAL LETTER N WITH ACUTE]
+ case '\u0145' : // Ņ [LATIN CAPITAL LETTER N WITH CEDILLA]
+ case '\u0147' : // Ň [LATIN CAPITAL LETTER N WITH CARON]
+ case '\u014A' : // Ŋ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN CAPITAL LETTER ENG]
+ case '\u019D' : // Ɲ [LATIN CAPITAL LETTER N WITH LEFT HOOK]
+ case '\u01F8' : // Ǹ [LATIN CAPITAL LETTER N WITH GRAVE]
+ case '\u0220' : // Ƞ [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG]
+ case '\u0274' : // ɴ [LATIN LETTER SMALL CAPITAL N]
+ case '\u1D0E' : // ᴎ [LATIN LETTER SMALL CAPITAL REVERSED N]
+ case '\u1E44' : // Ṅ [LATIN CAPITAL LETTER N WITH DOT ABOVE]
+ case '\u1E46' : // Ṇ [LATIN CAPITAL LETTER N WITH DOT BELOW]
+ case '\u1E48' : // Ṉ [LATIN CAPITAL LETTER N WITH LINE BELOW]
+ case '\u1E4A' : // Ṋ [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW]
+ case '\u24C3' : // Ⓝ [CIRCLED LATIN CAPITAL LETTER N]
+ case '\uFF2E' : // N [FULLWIDTH LATIN CAPITAL LETTER N]
+ output[outputPos++] = 'N';
+ break;
+ case '\u00F1' : // ñ [LATIN SMALL LETTER N WITH TILDE]
+ case '\u0144' : // ń [LATIN SMALL LETTER N WITH ACUTE]
+ case '\u0146' : // ņ [LATIN SMALL LETTER N WITH CEDILLA]
+ case '\u0148' : // ň [LATIN SMALL LETTER N WITH CARON]
+ case '\u0149' : // ʼn [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE]
+ case '\u014B' : // ŋ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN SMALL LETTER ENG]
+ case '\u019E' : // ƞ [LATIN SMALL LETTER N WITH LONG RIGHT LEG]
+ case '\u01F9' : // ǹ [LATIN SMALL LETTER N WITH GRAVE]
+ case '\u0235' : // ȵ [LATIN SMALL LETTER N WITH CURL]
+ case '\u0272' : // ɲ [LATIN SMALL LETTER N WITH LEFT HOOK]
+ case '\u0273' : // ɳ [LATIN SMALL LETTER N WITH RETROFLEX HOOK]
+ case '\u1D70' : // ᵰ [LATIN SMALL LETTER N WITH MIDDLE TILDE]
+ case '\u1D87' : // ᶇ [LATIN SMALL LETTER N WITH PALATAL HOOK]
+ case '\u1E45' : // ṅ [LATIN SMALL LETTER N WITH DOT ABOVE]
+ case '\u1E47' : // ṇ [LATIN SMALL LETTER N WITH DOT B...
[truncated message content] |
|
From: <fg...@us...> - 2011-01-02 10:47:18
|
Revision: 3206
http://openutils.svn.sourceforge.net/openutils/?rev=3206&view=rev
Author: fgiust
Date: 2011-01-02 10:47:12 +0000 (Sun, 02 Jan 2011)
Log Message:
-----------
CRIT-31 Escaping of whitespace in base path should not affect xpath conditions
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2011-01-02 10:22:28 UTC (rev 3205)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2011-01-02 10:47:12 UTC (rev 3206)
@@ -107,6 +107,9 @@
}
StringBuilder encodedPath = new StringBuilder(path.length());
+
+ boolean inXpathCondition = false;
+
// TODO maybe a more robust check is needed
for (int i = 0; i < path.length(); ++i)
{
@@ -116,12 +119,21 @@
{
encodedPath.append("_x" + StringUtils.leftPad(Integer.toHexString(ch), 4, '0') + "_");
}
- else if (ch == ' ')
+ else if (!inXpathCondition && ch == ' ')
{
encodedPath.append("_x0020_");
}
else
{
+
+ if (ch == '[')
+ {
+ inXpathCondition = true;
+ }
+ else if (inXpathCondition && ch == ']')
+ {
+ inXpathCondition = false;
+ }
encodedPath.append(ch);
}
}
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java 2011-01-02 10:22:28 UTC (rev 3205)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java 2011-01-02 10:47:12 UTC (rev 3206)
@@ -74,4 +74,20 @@
Assert.assertEquals(items.next().getName(), "consectetur adipisici elit");
}
+ /**
+ * @throws Exception
+ */
+ @Test
+ public void testWithParams() throws Exception
+ {
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE);
+ criteria.setBasePath("//*[prop1='A' and prop2='B']/Lorem ipsum dolor sit amet");
+ criteria.add(Restrictions.eq(Criterion.JCR_PRIMARYTYPE, "mgnl:content"));
+ AdvancedResult advResult = criteria.execute();
+
+ // if not escaped properly it will crash
+ Assert.assertEquals(advResult.getTotalSize(), 0);
+
+ }
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fg...@us...> - 2011-01-24 18:07:52
|
Revision: 3283
http://openutils.svn.sourceforge.net/openutils/?rev=3283&view=rev
Author: fgiust
Date: 2011-01-24 18:07:46 +0000 (Mon, 24 Jan 2011)
Log Message:
-----------
CRIT-33 implements Iterable in order to allow use of foreach statements in ResultIterator
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResult.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIterator.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIteratorImpl.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java 2011-01-24 18:06:39 UTC (rev 3282)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java 2011-01-24 18:07:46 UTC (rev 3283)
@@ -51,28 +51,6 @@
*/
private static Logger log = LoggerFactory.getLogger(AdvancedResultItemImpl.class);
- private static Item getJCRNode(Row row) throws RepositoryException
- {
-
- try
- {
- return (Item) PropertyUtils.getProperty(row, "node");
- }
- catch (IllegalAccessException e)
- {
- }
- catch (InvocationTargetException e)
- {
- }
- catch (NoSuchMethodException e)
- {
- log
- .error("Unsupported version of jackrabbit detected, you need at least 1.6.x or a jcr 2.0 compliant version");
- }
-
- return null;
- }
-
/**
* @param elem
* @param hierarchyManager
@@ -83,11 +61,11 @@
* @throws IllegalStateException
* @throws IllegalArgumentException
*/
- public AdvancedResultItemImpl(Row row, HierarchyManager hierarchyManager)
+ public AdvancedResultItemImpl(Row row, Item item, HierarchyManager hierarchyManager)
throws RepositoryException,
AccessDeniedException
{
- super(getJCRNode(row), hierarchyManager);
+ super(item, hierarchyManager);
this.row = row;
}
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResult.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResult.java 2011-01-24 18:06:39 UTC (rev 3282)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResult.java 2011-01-24 18:07:46 UTC (rev 3283)
@@ -19,6 +19,9 @@
package net.sourceforge.openutils.mgnlcriteria.jcr.query;
+import java.util.Iterator;
+
+
/**
* The result of a jcr query. You can access to the actual result items using getItems(). This bean will also give you
* information about the total number of available items, the current page number, the total number of pages.
@@ -172,6 +175,14 @@
{
// nothing to do
}
+
+ /**
+ * Adds foreach support.
+ */
+ public Iterator iterator()
+ {
+ return this;
+ }
}
}
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIterator.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIterator.java 2011-01-24 18:06:39 UTC (rev 3282)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIterator.java 2011-01-24 18:07:46 UTC (rev 3283)
@@ -28,7 +28,7 @@
* @author fgiust
* @version $Id$
*/
-public interface ResultIterator<T> extends RangeIterator
+public interface ResultIterator<T> extends RangeIterator, Iterable<T>
{
/**
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIteratorImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIteratorImpl.java 2011-01-24 18:06:39 UTC (rev 3282)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIteratorImpl.java 2011-01-24 18:07:46 UTC (rev 3283)
@@ -21,6 +21,8 @@
import info.magnolia.cms.core.HierarchyManager;
+import java.util.Iterator;
+
import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
@@ -102,6 +104,14 @@
}
/**
+ * Adds foreach support.
+ */
+ public Iterator<T> iterator()
+ {
+ return this;
+ }
+
+ /**
* Transforms a Row instance, adapting it to a specific type.
* @param row the jcr Row to wrap
* @return a transformed version
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java 2011-01-24 18:06:39 UTC (rev 3282)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java 2011-01-24 18:07:46 UTC (rev 3283)
@@ -94,6 +94,26 @@
Assert.assertEquals(content.getTitle(), "Z");
}
+ @Test
+ public void testForEachSupport() throws Exception
+ {
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE);
+ criteria.setBasePath("/letters");
+ criteria.add(Restrictions.eq("@jcr:primaryType", "mgnl:content"));
+ criteria.addOrder(Order.asc("@title"));
+ AdvancedResult advResult = criteria.execute();
+
+ int count = 0;
+
+ for (AdvancedResultItem content : advResult.getItems())
+ {
+ Assert.assertNotNull(content);
+ count++;
+ }
+
+ Assert.assertEquals(count, 26);
+ }
+
/**
* Retrieves letters from the tenth on.
* @throws Exception
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fg...@us...> - 2011-01-24 18:10:28
|
Revision: 3285
http://openutils.svn.sourceforge.net/openutils/?rev=3285&view=rev
Author: fgiust
Date: 2011-01-24 18:10:19 +0000 (Mon, 24 Jan 2011)
Log Message:
-----------
update copyright year
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedCriteriaImpl.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemResultIterator.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/MappedDefaultContent.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResult.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResultItem.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/Criteria.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/DirectJcrQuery.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ExecutableQuery.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRCriteriaFactory.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRQueryException.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIterator.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIteratorImpl.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/TranslatableCriteria.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BaseCriterion.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BetweenExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Conjunction.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Criterion.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Disjunction.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/InExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/IsNotNullExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/IsNullExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/JCRFunctionExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Junction.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/LikeExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/LogicalExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/MatchMode.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/NotExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Order.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/SimpleExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndex.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/JCRMagnoliaCriteriaQueryTranslator.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/XPathSelect.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/AbstractCriteriaImpl.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingAnalyzer.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingFilter.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/BaseAnalyzer.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/JcrCompatUtils.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/Latin1Analyzer.java
trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/Content2BeanTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/FirstDigitEscapeTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsCriteriaSearchTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsQuestionMarkTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/ScoreAnalizerAndSortTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/XpathEscapeTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIteratorTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/ConjunctionTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/MagnoliaCriteriaTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/tests/CriteriaTestUtils.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedCriteriaImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedCriteriaImpl.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedCriteriaImpl.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemImpl.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemResultIterator.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemResultIterator.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultItemResultIterator.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/MappedDefaultContent.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/MappedDefaultContent.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/MappedDefaultContent.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResult.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResult.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResult.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResultItem.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResultItem.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/AdvancedResultItem.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/Criteria.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/Criteria.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/Criteria.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/DirectJcrQuery.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/DirectJcrQuery.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/DirectJcrQuery.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ExecutableQuery.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ExecutableQuery.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ExecutableQuery.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRCriteriaFactory.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRCriteriaFactory.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRCriteriaFactory.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRQueryException.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRQueryException.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/JCRQueryException.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIterator.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIterator.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIterator.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIteratorImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIteratorImpl.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/ResultIteratorImpl.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/TranslatableCriteria.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/TranslatableCriteria.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/TranslatableCriteria.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BaseCriterion.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BaseCriterion.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BaseCriterion.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BetweenExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BetweenExpression.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BetweenExpression.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Conjunction.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Conjunction.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Conjunction.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Criterion.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Criterion.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Criterion.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Disjunction.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Disjunction.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Disjunction.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/InExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/InExpression.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/InExpression.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/IsNotNullExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/IsNotNullExpression.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/IsNotNullExpression.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/IsNullExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/IsNullExpression.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/IsNullExpression.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/JCRFunctionExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/JCRFunctionExpression.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/JCRFunctionExpression.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Junction.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Junction.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Junction.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/LikeExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/LikeExpression.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/LikeExpression.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/LogicalExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/LogicalExpression.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/LogicalExpression.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/MatchMode.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/MatchMode.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/MatchMode.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/NotExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/NotExpression.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/NotExpression.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Order.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Order.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Order.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/SimpleExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/SimpleExpression.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/SimpleExpression.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndex.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndex.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndex.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/JCRMagnoliaCriteriaQueryTranslator.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/JCRMagnoliaCriteriaQueryTranslator.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/JCRMagnoliaCriteriaQueryTranslator.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/XPathSelect.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/XPathSelect.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/XPathSelect.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/AbstractCriteriaImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/AbstractCriteriaImpl.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/AbstractCriteriaImpl.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingAnalyzer.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingAnalyzer.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingAnalyzer.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingFilter.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingFilter.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/ASCIIFoldingFilter.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/BaseAnalyzer.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/BaseAnalyzer.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/BaseAnalyzer.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/JcrCompatUtils.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/JcrCompatUtils.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/JcrCompatUtils.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/Latin1Analyzer.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/Latin1Analyzer.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/utils/Latin1Analyzer.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/Content2BeanTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/Content2BeanTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/Content2BeanTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/FirstDigitEscapeTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/FirstDigitEscapeTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/FirstDigitEscapeTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsCriteriaSearchTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsCriteriaSearchTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsCriteriaSearchTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsQuestionMarkTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsQuestionMarkTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsQuestionMarkTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/ScoreAnalizerAndSortTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/ScoreAnalizerAndSortTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/ScoreAnalizerAndSortTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/XpathEscapeTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/XpathEscapeTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/XpathEscapeTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIteratorTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIteratorTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIteratorTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java 2011-01-24 18:08:39 UTC (rev 3284)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java 2011-01-24 18:10:19 UTC (rev 3285)
@@ -1,7 +1,7 @@
/**
*
* Criteria API for Magnolia CMS (http://www.openmindlab.com/lab/products/mgnlcriteria.html)
- * Copyright(C) 2009-2010, Openmind S.r.l. http://www.openmindonline.it
+ * Copyright(C) 2009-2011, Openmind S.r.l. http://www.openmindonline.it
*
* This program is free software: you can redistrib...
[truncated message content] |
|
From: <fg...@us...> - 2011-03-05 20:08:12
|
Revision: 3369
http://openutils.svn.sourceforge.net/openutils/?rev=3369&view=rev
Author: fgiust
Date: 2011-03-05 20:08:02 +0000 (Sat, 05 Mar 2011)
Log Message:
-----------
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/Criteria.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/DirectJcrQuery.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/AbstractCriteriaImpl.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsQuestionMarkTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java 2011-03-05 18:41:17 UTC (rev 3368)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java 2011-03-05 20:08:02 UTC (rev 3369)
@@ -69,6 +69,8 @@
*/
private Logger log = LoggerFactory.getLogger(AdvancedResultImpl.class);
+ private final boolean applyLocalPaging;
+
/**
* @param jcrQueryResult
* @param itemsPerPage
@@ -85,13 +87,34 @@
HierarchyManager hm,
Query spellCheckerQuery)
{
+ this(jcrQueryResult, itemsPerPage, pageNumberStartingFromOne, statement, hm, spellCheckerQuery, false);
+ }
+
+ /**
+ * @param jcrQueryResult
+ * @param itemsPerPage
+ * @param pageNumberStartingFromOne
+ * @param statement
+ * @param hm
+ * @param spellCheckerQuery
+ * @param applyLocalPaging don't assume the result iterator is already paginated, do it "manually"
+ */
+ public AdvancedResultImpl(
+ QueryResultImpl jcrQueryResult,
+ int itemsPerPage,
+ int pageNumberStartingFromOne,
+ String statement,
+ HierarchyManager hm,
+ Query spellCheckerQuery,
+ boolean applyLocalPaging)
+ {
this.jcrQueryResult = jcrQueryResult;
this.itemsPerPage = itemsPerPage;
this.statement = statement;
this.hm = hm;
this.spellCheckerQuery = spellCheckerQuery;
-
this.pageNumberStartingFromOne = pageNumberStartingFromOne;
+ this.applyLocalPaging = applyLocalPaging;
}
/**
@@ -115,7 +138,7 @@
*/
public int getTotalSize()
{
- if (jcrQueryResult.getTotalSize() == -1 && itemsPerPage == 0)
+ if (jcrQueryResult.getTotalSize() == -1 && (itemsPerPage == 0 || applyLocalPaging))
{
try
{
@@ -155,6 +178,38 @@
throw jqe;
}
+ if (applyLocalPaging && itemsPerPage > 0)
+ {
+ final int offset = (Math.max(pageNumberStartingFromOne, 1) - 1) * itemsPerPage;
+
+ // removing preceding records
+ rows.skip(offset);
+
+ // removing folllowing records and alter getSize()
+ return new AccessibleResultItemResultIterator(rows, this.hm)
+ {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean hasNext()
+ {
+ return super.getPosition() - offset < Math.min(super.getSize() - offset, itemsPerPage)
+ && super.hasNext();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public long getSize()
+ {
+ return Math.min(super.getSize() - offset, itemsPerPage);
+ }
+ };
+ }
+
return new AccessibleResultItemResultIterator(rows, this.hm);
}
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java 2011-03-05 18:41:17 UTC (rev 3368)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java 2011-03-05 20:08:02 UTC (rev 3369)
@@ -26,6 +26,7 @@
import javax.jcr.query.InvalidQueryException;
import javax.jcr.query.Query;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.Criteria;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.JCRQueryException;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.xpath.utils.XPathTextUtils;
@@ -77,7 +78,24 @@
public static AdvancedResultImpl execute(String stmt, String language, HierarchyManager hm, int maxResults,
int offset, String spellCheckString)
{
+ return execute(stmt, language, hm, maxResults, offset, spellCheckString, false);
+ }
+ /**
+ * Executes a jcr query.
+ * @param stmt the statement of the jcr query
+ * @param language the language of the jcr query
+ * @param hm the HirarchyManager for obtaining the QueryManager
+ * @param maxResults maximun number of results to retrieve
+ * @param offset the index of the first result to retrieve (0, 1, 2, ...)
+ * @param spellCheckString the input string used for spell checking
+ * @param forcePagingWithDocumentOrder see {@link Criteria#setForcePagingWithDocumentOrder(boolean)}
+ * @return the execution result
+ */
+ public static AdvancedResultImpl execute(String stmt, String language, HierarchyManager hm, int maxResults,
+ int offset, String spellCheckString, boolean forcePagingWithDocumentOrder)
+ {
+
Session jcrSession = hm.getWorkspace().getSession();
javax.jcr.query.QueryManager jcrQueryManager;
@@ -87,14 +105,17 @@
QueryImpl query = (QueryImpl) jcrQueryManager.createQuery(stmt, language);
- if (maxResults > 0)
+ if (!forcePagingWithDocumentOrder)
{
- query.setLimit(maxResults);
- }
+ if (maxResults > 0)
+ {
+ query.setLimit(maxResults);
+ }
- if (offset > 0)
- {
- query.setOffset(offset);
+ if (offset > 0)
+ {
+ query.setOffset(offset);
+ }
}
int pageNumberStartingFromOne = 1;
@@ -123,7 +144,8 @@
pageNumberStartingFromOne,
stmt,
hm,
- spellCheckerQuery);
+ spellCheckerQuery,
+ forcePagingWithDocumentOrder);
}
finally
{
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/Criteria.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/Criteria.java 2011-03-05 18:41:17 UTC (rev 3368)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/Criteria.java 2011-03-05 20:08:02 UTC (rev 3369)
@@ -161,4 +161,26 @@
* @return the generated xpath expression
*/
String toXpathExpression();
+
+ /**
+ * <p>
+ * Enable paging while keeping results sorted in document order.
+ * </p>
+ * <p>
+ * Document order is only applied by jackrabbit after the paginated result has been retrieved.
+ * </p>
+ * <p>
+ * This means that if you have 20 nodes and you want to retrieve them in 2 pages containing 10 elements, only the
+ * order of elements in a single page is kept (but the "first" 10 noted in the first page will not be the nodes you
+ * are expecting in document order). Setting this flag to true forces the retrieval of the full list of nodes and a
+ * post-pagination which will mimic the behaviour you get when an "order by" is specified.
+ * </p>
+ * <p>
+ * Warning: this has surely a performance hit, since jackrabbit applied document ordering by retrieving any single
+ * node (while normally pagination is applied directly on the luce index).
+ * </p>
+ * @param force true to force paging while keeping results sorted in document order
+ * @return this (for method chaining)
+ */
+ Criteria setForcePagingWithDocumentOrder(boolean force);
}
\ No newline at end of file
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/DirectJcrQuery.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/DirectJcrQuery.java 2011-03-05 18:41:17 UTC (rev 3368)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/DirectJcrQuery.java 2011-03-05 20:08:02 UTC (rev 3369)
@@ -108,7 +108,7 @@
public AdvancedResult execute()
{
- return QueryExecutorHelper.execute(query, language, hm, maxResults, offset, spellCheckString);
+ return QueryExecutorHelper.execute(query, language, hm, maxResults, offset, spellCheckString, false);
}
}
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/AbstractCriteriaImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/AbstractCriteriaImpl.java 2011-03-05 18:41:17 UTC (rev 3368)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/AbstractCriteriaImpl.java 2011-03-05 20:08:02 UTC (rev 3369)
@@ -68,6 +68,8 @@
protected String workspace = ContentRepository.WEBSITE;
+ protected boolean forcePagingWithDocumentOrder;
+
protected AbstractCriteriaImpl()
{
@@ -201,6 +203,15 @@
/**
* {@inheritDoc}
*/
+ public Criteria setForcePagingWithDocumentOrder(boolean force)
+ {
+ this.forcePagingWithDocumentOrder = force;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public String toXpathExpression()
{
JCRMagnoliaCriteriaQueryTranslator translator = new JCRMagnoliaCriteriaQueryTranslator(this);
@@ -227,7 +238,8 @@
MgnlContext.getHierarchyManager(workspace),
maxResults,
offset,
- spellCheckString);
+ spellCheckString,
+ forcePagingWithDocumentOrder && this.orderEntries.isEmpty());
}
}
\ No newline at end of file
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java 2011-03-05 18:41:17 UTC (rev 3368)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/BasePathWithSpacesTest.java 2011-03-05 20:08:02 UTC (rev 3369)
@@ -29,7 +29,6 @@
import net.sourceforge.openutils.mgnlcriteria.jcr.query.JCRCriteriaFactory;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.ResultIterator;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Criterion;
-import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Order;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Restrictions;
import org.testng.Assert;
@@ -84,10 +83,11 @@
Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE);
criteria.setBasePath("//*[prop1='A' and prop2='B']/Lorem ipsum dolor sit amet");
criteria.add(Restrictions.eq(Criterion.JCR_PRIMARYTYPE, "mgnl:content"));
- criteria.addOrder(Order.desc("@jcr:score"));
+ // criteria.addOrder(Order.desc("@jcr:score"));
AdvancedResult advResult = criteria.execute();
// if not escaped properly it will crash
+ Assert.assertEquals(advResult.getItems().getSize(), 0);
Assert.assertEquals(advResult.getTotalSize(), 0);
}
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsQuestionMarkTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsQuestionMarkTest.java 2011-03-05 18:41:17 UTC (rev 3368)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/JcrContainsQuestionMarkTest.java 2011-03-05 20:08:02 UTC (rev 3369)
@@ -77,7 +77,7 @@
try
{
String stmt = "//*[((@jcr:primaryType='mgnl:content') and (jcr:contains(@title,'test?')))] order by @jcr:score";
- advResult = QueryExecutorHelper.execute(stmt, Query.XPATH, hm, 10, 0, null);
+ advResult = QueryExecutorHelper.execute(stmt, Query.XPATH, hm, 10, 0, null, false);
}
catch (JCRQueryException e)
{
@@ -99,7 +99,7 @@
HierarchyManager hm = MgnlContext.getHierarchyManager(ContentRepository.WEBSITE);
String stmt = "//*[((@jcr:primaryType='mgnl:content') and (jcr:contains(@title,'test\\?')))] order by @jcr:score";
- AdvancedResultImpl advResult = QueryExecutorHelper.execute(stmt, Query.XPATH, hm, -1, 0, null);
+ AdvancedResultImpl advResult = QueryExecutorHelper.execute(stmt, Query.XPATH, hm, -1, 0, null, false);
Assert.assertEquals(advResult.getTotalSize(), 1);
Assert.assertEquals(advResult.getItems().next().getTitle(), "hello test? world");
@@ -114,11 +114,11 @@
AdvancedResultImpl advResult;
stmt = "//*[((@jcr:primaryType='mgnl:content') and (jcr:contains(@title,'te?st')))] order by @jcr:score";
- advResult = QueryExecutorHelper.execute(stmt, Query.XPATH, hm, -1, 0, null);
+ advResult = QueryExecutorHelper.execute(stmt, Query.XPATH, hm, -1, 0, null, false);
Assert.assertEquals(advResult.getTotalSize(), 0);
stmt = "//*[((@jcr:primaryType='mgnl:content') and (jcr:contains(@title,'te\\?st')))] order by @jcr:score";
- advResult = QueryExecutorHelper.execute(stmt, Query.XPATH, hm, -1, 0, null);
+ advResult = QueryExecutorHelper.execute(stmt, Query.XPATH, hm, -1, 0, null, false);
Assert.assertEquals(advResult.getTotalSize(), 1);
Assert.assertEquals(advResult.getItems().next().getTitle(), "hello te?st world");
}
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java 2011-03-05 18:41:17 UTC (rev 3368)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java 2011-03-05 20:08:02 UTC (rev 3369)
@@ -108,7 +108,7 @@
AdvancedResult advResult = criteria.execute();
- // Assert.assertEquals(advResult.getTotalSize(), LETTERS_ARRAY.length);
+ Assert.assertEquals(advResult.getTotalSize(), LETTERS_ARRAY.length);
ResultIterator<AdvancedResultItem> resultIterator = advResult.getItems();
Assert.assertEquals(resultIterator.getSize(), LETTERS_ARRAY.length);
@@ -133,20 +133,20 @@
criteria.setBasePath("/letters");
criteria.add(Restrictions.eq("@jcr:primaryType", "mgnl:content"));
criteria.setPaging(PAGINATION_LENGTH, 1);
+ criteria.setForcePagingWithDocumentOrder(true);
log.debug(criteria.toXpathExpression());
AdvancedResult advResult = criteria.execute();
- // Assert.assertEquals(advResult.getTotalSize(), LETTERS_ARRAY.length);
+ Assert.assertEquals(advResult.getTotalSize(), LETTERS_ARRAY.length, "Unset total size.");
ResultIterator<AdvancedResultItem> resultIterator = advResult.getItems();
- Assert.assertEquals(resultIterator.getSize(), PAGINATION_LENGTH);
+ Assert.assertEquals(resultIterator.getSize(), PAGINATION_LENGTH, "Wrong iterator size.");
int i = 0;
for (AdvancedResultItem currentResult : resultIterator)
{
- // log.warn("found " + currentResult.getTitle());
Assert.assertEquals(currentResult.getTitle(), LETTERS_ARRAY[i], "Position "
+ i
+ ": found "
@@ -155,5 +155,7 @@
+ LETTERS_ARRAY[i]);
i++;
}
+
+ Assert.assertEquals(i, PAGINATION_LENGTH, "Wrong number of results returned by the iterator.");
}
}
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java 2011-03-05 18:41:17 UTC (rev 3368)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/PaginationTest.java 2011-03-05 20:08:02 UTC (rev 3369)
@@ -131,9 +131,9 @@
Assert.assertEquals(advResult.getTotalSize(), 26);
ResultIterator<AdvancedResultItem> resultIterator = advResult.getItems();
- Assert.assertEquals(resultIterator.getSize(), 17);
Assert.assertEquals(resultIterator.next().getTitle(), "J");
+ Assert.assertEquals(resultIterator.getSize(), 17);
}
/**
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fg...@us...> - 2011-03-08 09:48:56
|
Revision: 3374
http://openutils.svn.sourceforge.net/openutils/?rev=3374&view=rev
Author: fgiust
Date: 2011-03-08 09:48:50 +0000 (Tue, 08 Mar 2011)
Log Message:
-----------
CRIT-36 AccessibleResultItemResultIterator.getPosition() may return an invalid value
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java 2011-03-05 20:34:54 UTC (rev 3373)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AccessibleResultItemResultIterator.java 2011-03-08 09:48:50 UTC (rev 3374)
@@ -120,4 +120,13 @@
next = null;
return result;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public long getPosition()
+ {
+ return next == null ? super.getPosition() : super.getPosition() - 1;
+ }
}
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java 2011-03-05 20:34:54 UTC (rev 3373)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java 2011-03-08 09:48:50 UTC (rev 3374)
@@ -157,8 +157,7 @@
*/
public int getNumberOfPages()
{
- return itemsPerPage > 0 ? (int) Math
- .round(Math.ceil(((float) jcrQueryResult.getTotalSize() / (float) itemsPerPage))) : 1;
+ return itemsPerPage > 0 ? (int) Math.round(Math.ceil(((float) getTotalSize() / (float) itemsPerPage))) : 1;
}
/**
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java 2011-03-05 20:34:54 UTC (rev 3373)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java 2011-03-08 09:48:50 UTC (rev 3374)
@@ -155,7 +155,27 @@
+ LETTERS_ARRAY[i]);
i++;
}
+ Assert.assertEquals(i, PAGINATION_LENGTH, "Wrong number of results returned by the iterator.");
- Assert.assertEquals(i, PAGINATION_LENGTH, "Wrong number of results returned by the iterator.");
+ resultIterator = advResult.getItems();
+ i = 0;
+
+ // check that hasNext doesn't change the result of getPosition()
+ while (resultIterator.hasNext() && resultIterator.hasNext() && resultIterator.hasNext())
+ {
+ AdvancedResultItem currentResult = resultIterator.next();
+ Assert.assertEquals(currentResult.getTitle(), LETTERS_ARRAY[i], "Position "
+ + i
+ + ": found "
+ + currentResult.getTitle()
+ + " instead of "
+ + LETTERS_ARRAY[i]);
+ i++;
+ }
+
+ Assert.assertEquals(
+ i,
+ PAGINATION_LENGTH,
+ "Wrong number of results returned by the iterator when calling hasNext() more than once.");
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fg...@us...> - 2011-03-13 09:09:13
|
Revision: 3376
http://openutils.svn.sourceforge.net/openutils/?rev=3376&view=rev
Author: fgiust
Date: 2011-03-13 09:09:06 +0000 (Sun, 13 Mar 2011)
Log Message:
-----------
extends CRIT-34 also to getItems(class) which uses content2bean
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java 2011-03-08 10:07:11 UTC (rev 3375)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java 2011-03-13 09:09:06 UTC (rev 3376)
@@ -281,6 +281,64 @@
throw new JCRQueryException(statement, e);
}
+ if (applyLocalPaging && itemsPerPage > 0)
+ {
+ final int offset = (Math.max(pageNumberStartingFromOne, 1) - 1) * itemsPerPage;
+
+ // removing preceding records
+ rows.skip(offset);
+
+ // removing folllowing records and alter getSize()
+ return new ResultIteratorImpl<K>(rows, this.hm)
+ {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean hasNext()
+ {
+ return super.getPosition() - offset < getSize() && super.hasNext();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public long getSize()
+ {
+ return Math.min(super.getSize() - offset, itemsPerPage);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected K wrap(Row row)
+ {
+ try
+ {
+ Item jcrNode = JcrCompatUtils.getJCRNode(row);
+ if (jcrNode == null)
+ {
+ return null;
+ }
+
+ return (K) Content2BeanUtil.toBean(
+ new AdvancedResultItemImpl(row, jcrNode, this.hm),
+ true,
+ theclass);
+ }
+ catch (RepositoryException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (Content2BeanException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ }
+
return new ResultIteratorImpl<K>(rows, hm)
{
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java 2011-03-08 10:07:11 UTC (rev 3375)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java 2011-03-13 09:09:06 UTC (rev 3376)
@@ -178,4 +178,42 @@
PAGINATION_LENGTH,
"Wrong number of results returned by the iterator when calling hasNext() more than once.");
}
+
+ /**
+ * Retrieves all letters.
+ * @throws Exception
+ */
+ @Test
+ public void testWithBeans() throws Exception
+ {
+
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE);
+ criteria.setBasePath("/letters");
+ criteria.add(Restrictions.eq("@jcr:primaryType", "mgnl:content"));
+ criteria.setPaging(PAGINATION_LENGTH, 1);
+ criteria.setForcePagingWithDocumentOrder(true);
+
+ log.debug(criteria.toXpathExpression());
+
+ AdvancedResult advResult = criteria.execute();
+
+ Assert.assertEquals(advResult.getTotalSize(), LETTERS_ARRAY.length, "Unset total size.");
+
+ ResultIterator<Content2BeanTest.Page> resultIterator = advResult.getItems(Content2BeanTest.Page.class);
+ Assert.assertEquals(resultIterator.getSize(), PAGINATION_LENGTH, "Wrong iterator size.");
+
+ int i = 0;
+ for (Content2BeanTest.Page currentResult : resultIterator)
+ {
+ Assert.assertEquals(currentResult.getTitle(), LETTERS_ARRAY[i], "Position "
+ + i
+ + ": found "
+ + currentResult.getTitle()
+ + " instead of "
+ + LETTERS_ARRAY[i]);
+ i++;
+ }
+ Assert.assertEquals(i, PAGINATION_LENGTH, "Wrong number of results returned by the iterator.");
+
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fg...@us...> - 2011-06-06 17:21:59
|
Revision: 3508
http://openutils.svn.sourceforge.net/openutils/?rev=3508&view=rev
Author: fgiust
Date: 2011-06-06 17:21:52 +0000 (Mon, 06 Jun 2011)
Log Message:
-----------
CRIT-38 Criteria return all elements if offset is set and offset > maxResult - 1 and DocumentOrder = true
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java 2011-06-06 13:45:34 UTC (rev 3507)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/AdvancedResultImpl.java 2011-06-06 17:21:52 UTC (rev 3508)
@@ -71,6 +71,8 @@
private final boolean applyLocalPaging;
+ private int offset;
+
/**
* @param jcrQueryResult
* @param itemsPerPage
@@ -108,6 +110,37 @@
Query spellCheckerQuery,
boolean applyLocalPaging)
{
+ this(
+ jcrQueryResult,
+ itemsPerPage,
+ pageNumberStartingFromOne,
+ statement,
+ hm,
+ spellCheckerQuery,
+ applyLocalPaging,
+ 0);
+ }
+
+ /**
+ * @param jcrQueryResult
+ * @param itemsPerPage
+ * @param pageNumberStartingFromOne
+ * @param statement
+ * @param hm
+ * @param spellCheckerQuery
+ * @param applyLocalPaging don't assume the result iterator is already paginated, do it "manually"
+ * @param offset TODO
+ */
+ public AdvancedResultImpl(
+ QueryResultImpl jcrQueryResult,
+ int itemsPerPage,
+ int pageNumberStartingFromOne,
+ String statement,
+ HierarchyManager hm,
+ Query spellCheckerQuery,
+ boolean applyLocalPaging,
+ int offset)
+ {
this.jcrQueryResult = jcrQueryResult;
this.itemsPerPage = itemsPerPage;
this.statement = statement;
@@ -115,6 +148,7 @@
this.spellCheckerQuery = spellCheckerQuery;
this.pageNumberStartingFromOne = pageNumberStartingFromOne;
this.applyLocalPaging = applyLocalPaging;
+ this.offset = offset;
}
/**
@@ -179,8 +213,12 @@
if (applyLocalPaging && itemsPerPage > 0)
{
- final int offset = (Math.max(pageNumberStartingFromOne, 1) - 1) * itemsPerPage;
+ if (offset == 0)
+ {
+ offset = (Math.max(pageNumberStartingFromOne, 1) - 1) * itemsPerPage;
+ }
+
// removing preceding records
rows.skip(offset);
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java 2011-06-06 13:45:34 UTC (rev 3507)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/advanced/impl/QueryExecutorHelper.java 2011-06-06 17:21:52 UTC (rev 3508)
@@ -145,7 +145,8 @@
stmt,
hm,
spellCheckerQuery,
- forcePagingWithDocumentOrder);
+ forcePagingWithDocumentOrder,
+ offset);
}
finally
{
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java 2011-06-06 13:45:34 UTC (rev 3507)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/OrderingTest.java 2011-06-06 17:21:52 UTC (rev 3508)
@@ -216,4 +216,66 @@
Assert.assertEquals(i, PAGINATION_LENGTH, "Wrong number of results returned by the iterator.");
}
+
+ /**
+ * Retrieves all letters.
+ * @throws Exception
+ */
+ @Test
+ public void testNoOrderWithOffset() throws Exception
+ {
+
+ int offset = 9;
+
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE);
+ criteria.setBasePath("/letters");
+ criteria.add(Restrictions.eq("@jcr:primaryType", "mgnl:content"));
+ criteria.setForcePagingWithDocumentOrder(true);
+ criteria.setFirstResult(offset);
+ criteria.setMaxResults(Integer.MAX_VALUE);
+
+ log.debug(criteria.toXpathExpression());
+
+ AdvancedResult advResult = criteria.execute();
+
+ Assert.assertEquals(advResult.getTotalSize(), LETTERS_ARRAY.length, "Unset total size.");
+
+ ResultIterator<AdvancedResultItem> resultIterator = advResult.getItems();
+ Assert.assertEquals(resultIterator.getSize(), LETTERS_ARRAY.length - offset, "Wrong iterator size.");
+
+ int i = 0;
+ for (AdvancedResultItem currentResult : resultIterator)
+ {
+ Assert.assertEquals(currentResult.getTitle(), LETTERS_ARRAY[i + offset], "Position "
+ + i
+ + ": found "
+ + currentResult.getTitle()
+ + " instead of "
+ + LETTERS_ARRAY[i + offset]);
+ i++;
+ }
+ Assert.assertEquals(i, LETTERS_ARRAY.length - offset, "Wrong number of results returned by the iterator.");
+
+ resultIterator = advResult.getItems();
+ i = 0;
+
+ // check that hasNext doesn't change the result of getPosition()
+ while (resultIterator.hasNext() && resultIterator.hasNext() && resultIterator.hasNext())
+ {
+ AdvancedResultItem currentResult = resultIterator.next();
+ Assert.assertEquals(currentResult.getTitle(), LETTERS_ARRAY[i + offset], "Position "
+ + i
+ + ": found "
+ + currentResult.getTitle()
+ + " instead of "
+ + LETTERS_ARRAY[i + offset]);
+ i++;
+ }
+
+ Assert.assertEquals(
+ i,
+ LETTERS_ARRAY.length - offset,
+ "Wrong number of results returned by the iterator when calling hasNext() more than once.");
+ }
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fg...@us...> - 2011-08-08 09:32:15
|
Revision: 3584
http://openutils.svn.sourceforge.net/openutils/?rev=3584&view=rev
Author: fgiust
Date: 2011-08-08 09:32:08 +0000 (Mon, 08 Aug 2011)
Log Message:
-----------
CRIT-42 revised timezone handling
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BaseCriterion.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BetweenExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/SimpleExpression.java
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BaseCriterion.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BaseCriterion.java 2011-08-05 10:02:25 UTC (rev 3583)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BaseCriterion.java 2011-08-08 09:32:08 UTC (rev 3584)
@@ -19,9 +19,6 @@
package net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,13 +32,6 @@
{
/**
- * Date format used for date formatting.
- */
- protected static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(
- "yyyy-MM-dd'T'HH:mm:ss.SSS",
- Locale.ENGLISH);
-
- /**
* Stable serialVersionUID
*/
private static final long serialVersionUID = 42L;
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BetweenExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BetweenExpression.java 2011-08-05 10:02:25 UTC (rev 3583)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/BetweenExpression.java 2011-08-08 09:32:08 UTC (rev 3584)
@@ -23,6 +23,7 @@
import net.sourceforge.openutils.mgnlcriteria.jcr.query.Criteria;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.JCRQueryException;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.xpath.utils.XPathTextUtils;
/**
@@ -73,28 +74,16 @@
{
Calendar cal = (Calendar) lo;
Calendar cal2 = (Calendar) hi;
- String fmt;
- String fmt2;
- synchronized (DATE_FORMAT)
- {
- DATE_FORMAT.setCalendar(cal);
- fmt = DATE_FORMAT.format(cal.getTime());
- DATE_FORMAT.setCalendar(cal2);
- fmt2 = DATE_FORMAT.format(cal2.getTime());
- }
-
fragment.append(XS_DATETIME_FUNCTION
+ "('"
- + fmt
- + "+00:00"
+ + XPathTextUtils.toXsdDate(cal)
+ "') and "
+ propertyName
+ " <= "
+ XS_DATETIME_FUNCTION
+ "('"
- + fmt2
- + "+00:00"
+ + XPathTextUtils.toXsdDate(cal2)
+ "') ");
}
else
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java 2011-08-05 10:02:25 UTC (rev 3583)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java 2011-08-08 09:32:08 UTC (rev 3584)
@@ -21,7 +21,6 @@
import java.util.Calendar;
import java.util.Collection;
-import java.util.TimeZone;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.xpath.utils.XPathTextUtils;
@@ -37,17 +36,6 @@
public final class Restrictions
{
- private static final Calendar MIDNIGHT_GMT;
-
- static
- {
- MIDNIGHT_GMT = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
- MIDNIGHT_GMT.set(Calendar.HOUR_OF_DAY, 0);
- MIDNIGHT_GMT.set(Calendar.MINUTE, 0);
- MIDNIGHT_GMT.set(Calendar.SECOND, 0);
- MIDNIGHT_GMT.set(Calendar.MILLISECOND, 0);
- }
-
private Restrictions()
{
// cannot be instantiated
@@ -378,7 +366,8 @@
private static Calendar getDayStart(Calendar cal)
{
- Calendar cal2 = (Calendar) MIDNIGHT_GMT.clone();
+ Calendar cal2 = Calendar.getInstance();
+ cal2.clear();
cal2.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
return cal2;
}
@@ -386,7 +375,7 @@
private static Calendar getDayEnd(Calendar cal)
{
Calendar cal2 = getDayStart(cal);
- cal2.add(Calendar.DAY_OF_YEAR, 1);
+ cal2.add(Calendar.DATE, 1);
cal2.add(Calendar.MILLISECOND, -1);
return cal2;
}
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/SimpleExpression.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/SimpleExpression.java 2011-08-05 10:02:25 UTC (rev 3583)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/SimpleExpression.java 2011-08-08 09:32:08 UTC (rev 3584)
@@ -23,6 +23,7 @@
import net.sourceforge.openutils.mgnlcriteria.jcr.query.Criteria;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.JCRQueryException;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.xpath.utils.XPathTextUtils;
import org.apache.commons.lang.StringUtils;
@@ -104,14 +105,8 @@
{
fragment.append(propertyName).append(getOp());
Calendar cal = (Calendar) value;
- String fmt;
- synchronized (DATE_FORMAT)
- {
- DATE_FORMAT.setCalendar(cal);
- fmt = DATE_FORMAT.format(cal.getTime());
- }
- fragment.append(XS_DATETIME_FUNCTION + "('" + fmt + "+00:00" + "')) ");
+ fragment.append(XS_DATETIME_FUNCTION + "('" + XPathTextUtils.toXsdDate(cal) + "')) ");
}
else if (value != null)
{
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2011-08-05 10:02:25 UTC (rev 3583)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2011-08-08 09:32:08 UTC (rev 3584)
@@ -19,7 +19,12 @@
package net.sourceforge.openutils.mgnlcriteria.jcr.query.xpath.utils;
+import java.util.Calendar;
+import java.util.Locale;
+import java.util.TimeZone;
+
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.time.FastDateFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,6 +40,14 @@
private static Logger log = LoggerFactory.getLogger(XPathTextUtils.class);
+ /**
+ * Date format used for date formatting.
+ */
+ private static final FastDateFormat DATE_FORMAT = FastDateFormat.getInstance(
+ "yyyy-MM-dd'T'HH:mm:ss.SSSZ",
+ TimeZone.getDefault(),
+ Locale.ENGLISH);
+
private XPathTextUtils()
{
}
@@ -144,4 +157,23 @@
log.debug("returning encoded path {}", encodedPath);
return encodedPath.toString();
}
+
+ /**
+ * Get a date in the XSD format "yyyy-MM-ddThh:mm:ss.SSS:+01:00"
+ * @param date input calendar
+ * @return XSD formatted date
+ */
+ public static String toXsdDate(Calendar date)
+ {
+ if (date == null)
+ {
+ return null;
+ }
+
+ String xsdDate = DATE_FORMAT.format(date);
+ int length = xsdDate.length();
+
+ return StringUtils.substring(xsdDate, 0, length - 2) + ":" + StringUtils.substring(xsdDate, length - 2, length);
+ }
+
}
\ No newline at end of file
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java 2011-08-05 10:02:25 UTC (rev 3583)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java 2011-08-08 09:32:08 UTC (rev 3584)
@@ -32,316 +32,374 @@
import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Order;
import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Restrictions;
+import net.sourceforge.openutils.mgnlcriteria.jcr.query.xpath.utils.XPathTextUtils;
import org.apache.commons.lang.StringUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+
/**
* @author dschivo
* @version $Id$
*/
@RepositoryTestConfiguration(jackrabbitRepositoryConfig = "/crit-repository/jackrabbit-test-configuration.xml", repositoryConfig = "/crit-repository/test-repositories.xml", bootstrapFiles = "/crit-bootstrap/website.pets.xml")
-public class CriteriaTest extends TestNgRepositoryTestcase {
+public class CriteriaTest extends TestNgRepositoryTestcase
+{
- /**
- * {@inheritDoc}
- */
- @Override
- @BeforeClass
- public void setUp() throws Exception {
- super.setUp();
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @BeforeClass
+ public void setUp() throws Exception
+ {
+ super.setUp();
- // Nodes in this workspace:
- // - pets (title=Pets)
- // --- cats (title=Cats)
- // ----- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
- // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04)
- // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04)
- // ----- 13 (title=Sly, petType=cat, birthDate=2002-06-08)
- // --- dogs (title=Dogs)
- // ----- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
- // ----- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
- // ----- 10 (title=Mulligan, petType=dog, birthDate=1997-02-24)
- // ----- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
- // --- lizards (title=Lizards)
- // ----- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
- // --- snakes (title=Snakes)
- // ----- 6 (title=George, petType=snake, birthDate=2000-01-20)
- // --- birds (title=Birds)
- // ----- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
- // ----- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
- // --- hamsters (title=Hamsters)
- // ----- 2 (title=Basil, petType=hamster, birthDate=2002-08-06)
- MgnlContext.getHierarchyManager(ContentRepository.WEBSITE).save();
- }
+ // Nodes in this workspace:
+ // - pets (title=Pets)
+ // --- cats (title=Cats)
+ // ----- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
+ // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04)
+ // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04)
+ // ----- 13 (title=Sly, petType=cat, birthDate=2002-06-08)
+ // --- dogs (title=Dogs)
+ // ----- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
+ // ----- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
+ // ----- 10 (title=Mulligan, petType=dog, birthDate=1997-02-24)
+ // ----- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
+ // --- lizards (title=Lizards)
+ // ----- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
+ // --- snakes (title=Snakes)
+ // ----- 6 (title=George, petType=snake, birthDate=2000-01-20)
+ // --- birds (title=Birds)
+ // ----- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
+ // ----- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
+ // --- hamsters (title=Hamsters)
+ // ----- 2 (title=Basil, petType=hamster, birthDate=2002-08-06)
+ MgnlContext.getHierarchyManager(ContentRepository.WEBSITE).save();
+ }
- /**
- * Tests the xpath query statement produced by a Criteria instance.
- *
- * @throws Exception
- */
- @Test
- public void testToXpathExpression() throws Exception {
- Criteria criteria = toXpathExpressionJavadocExampleCriteria();
+ /**
+ * Tests the xpath query statement produced by a Criteria instance.
+ * @throws Exception
+ */
+ @Test
+ public void testToXpathExpression() throws Exception
+ {
+ Criteria criteria = toXpathExpressionJavadocExampleCriteria();
- String expectedStmt = "//pets//*"
- + "[((jcr:contains(@title, 'Lucky')) and (@petType='dog')"
- + " and (@birthDate >=xs:dateTime('1999-01-01T00:00:00.000+00:00')"
- + " and @birthDate <=xs:dateTime('2001-12-31T23:59:59.999+00:00')))]"
- + " order by @title descending";
- String actualStmt = criteria.toXpathExpression();
- Assert.assertEquals(StringUtils.remove(actualStmt, ' '), StringUtils
- .remove(expectedStmt, ' '));
- }
+ Calendar begin = Calendar.getInstance();
+ begin.set(1999, Calendar.JANUARY, 1);
+ begin.set(Calendar.HOUR, 0);
+ begin.set(Calendar.MINUTE, 0);
+ begin.set(Calendar.SECOND, 0);
+ begin.set(Calendar.MILLISECOND, 0);
+ Calendar end = Calendar.getInstance();
+ end.set(2001, Calendar.DECEMBER, 31);
+ end.set(Calendar.HOUR, 0);
+ end.set(Calendar.MINUTE, 0);
+ end.set(Calendar.SECOND, 0);
+ end.set(Calendar.MILLISECOND, 0);
+ end.add(Calendar.MILLISECOND, -1);
+ end.add(Calendar.DATE, 1);
- /**
- * @throws Exception
- */
- @Test
- public void testExecuteTrivial() throws Exception {
- HierarchyManager hm = MgnlContext
- .getHierarchyManager(ContentRepository.WEBSITE);
- Content node = hm.getContent("/pets");
- Assert.assertEquals(node.getTitle(), "Pets");
+ String expectedStmt = "//pets//*"
+ + "[((jcr:contains(@title, 'Lucky')) and (@petType='dog')"
+ + " and (@birthDate >=xs:dateTime('"
+ + XPathTextUtils.toXsdDate(begin)
+ + "')"
+ + " and @birthDate <=xs:dateTime('"
+ + XPathTextUtils.toXsdDate(end)
+ + "')))]"
+ + " order by @title descending";
- Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/jcr:root/*").add(
- Restrictions.eq("@jcr:primaryType", ItemType.CONTENT
- .getSystemName())).add(
- Restrictions.eq("@title", "Pets"));
- AdvancedResult result = criteria.execute();
- ResultIterator<AdvancedResultItem> iterator = result.getItems();
- Assert.assertTrue(iterator.hasNext());
- Content resultNode = iterator.next();
- Assert.assertEquals(resultNode.getTitle(), "Pets");
- }
+ log.debug(expectedStmt);
- /**
- * Tests the query execution of a Criteria instance.
- *
- * @throws Exception
- */
- @Test
- public void testExecute() throws Exception {
- Criteria criteria = toXpathExpressionJavadocExampleCriteria();
+ // @birthDate >=xs:dateTime('1999-01-01T00:00:00.000+01:00')
+ // and
+ // @birthDate <=xs:dateTime('2001-12-31T23:59:59.999+01:00')
- AdvancedResult result = criteria.execute();
- Assert.assertEquals(result.getTotalSize(), 1);
+ String actualStmt = criteria.toXpathExpression();
- ResultIterator<AdvancedResultItem> iterator = result.getItems();
- Assert.assertEquals(iterator.getSize(), 1);
- Assert.assertEquals(iterator.next().getName(), "12");
- }
+ Assert.assertEquals(StringUtils.remove(actualStmt, ' '), StringUtils.remove(expectedStmt, ' '));
+ }
- /**
- * @return
- */
- private Criteria toXpathExpressionJavadocExampleCriteria() {
- Calendar begin = Calendar.getInstance();
- begin.set(1999, Calendar.JANUARY, 1);
- Calendar end = Calendar.getInstance();
- end.set(2001, Calendar.DECEMBER, 31);
+ /**
+ * @throws Exception
+ */
+ @Test
+ public void testExecuteTrivial() throws Exception
+ {
+ HierarchyManager hm = MgnlContext.getHierarchyManager(ContentRepository.WEBSITE);
+ Content node = hm.getContent("/pets");
+ Assert.assertEquals(node.getTitle(), "Pets");
- Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.contains("@title", "Lucky")).add(
- Restrictions.eq("@petType", "dog")).add(
- Restrictions.betweenDates("@birthDate", begin, end)).addOrder(
- Order.desc("@title"));
- return criteria;
- }
+ Criteria criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/jcr:root/*")
+ .add(Restrictions.eq("@jcr:primaryType", ItemType.CONTENT.getSystemName()))
+ .add(Restrictions.eq("@title", "Pets"));
+ AdvancedResult result = criteria.execute();
+ ResultIterator<AdvancedResultItem> iterator = result.getItems();
+ Assert.assertTrue(iterator.hasNext());
+ Content resultNode = iterator.next();
+ Assert.assertEquals(resultNode.getTitle(), "Pets");
+ }
- /**
- * Tests pagination of results.
- *
- * @throws Exception
- */
- @Test
- public void testSetFirstResultAndMaxResults() throws Exception {
- Calendar begin = Calendar.getInstance();
- begin.set(1999, Calendar.JANUARY, 1);
- Calendar end = Calendar.getInstance();
- end.set(2001, Calendar.DECEMBER, 31);
+ /**
+ * Tests the query execution of a Criteria instance.
+ * @throws Exception
+ */
+ @Test
+ public void testExecute() throws Exception
+ {
+ Criteria criteria = toXpathExpressionJavadocExampleCriteria();
- Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.betweenDates("@birthDate", begin, end)).addOrder(
- Order.asc("@birthDate")).setFirstResult(5).setMaxResults(5);
+ AdvancedResult result = criteria.execute();
+ Assert.assertEquals(result.getTotalSize(), 1);
- AdvancedResult result = criteria.execute();
- // first page:
- // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
- // --- 6 (title=George, petType=snake, birthDate=2000-01-20)
- // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
- // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
- // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
- // second page:
- // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
- // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
- // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
- Assert.assertEquals(result.getTotalSize(), 8);
+ ResultIterator<AdvancedResultItem> iterator = result.getItems();
+ Assert.assertEquals(iterator.getSize(), 1);
+ Assert.assertEquals(iterator.next().getName(), "12");
+ }
- ResultIterator<AdvancedResultItem> iterator = result.getItems();
- Assert.assertEquals(iterator.getSize(), 3);
- Assert.assertEquals(iterator.next().getName(), "1");
- Assert.assertEquals(iterator.next().getName(), "5");
- Assert.assertEquals(iterator.next().getName(), "3");
- }
+ /**
+ * @return
+ */
+ private Criteria toXpathExpressionJavadocExampleCriteria()
+ {
+ Calendar begin = Calendar.getInstance();
+ begin.set(1999, Calendar.JANUARY, 1);
+ Calendar end = Calendar.getInstance();
+ end.set(2001, Calendar.DECEMBER, 31);
- /**
- * Tests pagination of results.
- *
- * @throws Exception
- */
- @Test
- public void testSetPaging() throws Exception {
- Calendar begin = Calendar.getInstance();
- begin.set(1999, Calendar.JANUARY, 1);
- Calendar end = Calendar.getInstance();
- end.set(2001, Calendar.DECEMBER, 31);
+ Criteria criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/pets")
+ .add(Restrictions.contains("@title", "Lucky"))
+ .add(Restrictions.eq("@petType", "dog"))
+ .add(Restrictions.betweenDates("@birthDate", begin, end))
+ .addOrder(Order.desc("@title"));
+ return criteria;
+ }
- Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.betweenDates("@birthDate", begin, end)).addOrder(
- Order.asc("@birthDate")).setPaging(5, 2);
+ /**
+ * Tests pagination of results.
+ * @throws Exception
+ */
+ @Test
+ public void testSetFirstResultAndMaxResults() throws Exception
+ {
+ Calendar begin = Calendar.getInstance();
+ begin.set(1999, Calendar.JANUARY, 1);
+ Calendar end = Calendar.getInstance();
+ end.set(2001, Calendar.DECEMBER, 31);
- AdvancedResult result = criteria.execute();
- // first page:
- // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
- // --- 6 (title=George, petType=snake, birthDate=2000-01-20)
- // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
- // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
- // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
- // second page:
- // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
- // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
- // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
- Assert.assertEquals(result.getTotalSize(), 8);
+ Criteria criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/pets")
+ .add(Restrictions.betweenDates("@birthDate", begin, end))
+ .addOrder(Order.asc("@birthDate"))
+ .setFirstResult(5)
+ .setMaxResults(5);
- ResultIterator<AdvancedResultItem> iterator = result.getItems();
- Assert.assertEquals(iterator.getSize(), 3);
- Assert.assertEquals(iterator.next().getName(), "1");
- Assert.assertEquals(iterator.next().getName(), "5");
- Assert.assertEquals(iterator.next().getName(), "3");
- }
+ AdvancedResult result = criteria.execute();
+ // first page:
+ // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
+ // --- 6 (title=George, petType=snake, birthDate=2000-01-20)
+ // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
+ // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
+ // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
+ // second page:
+ // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
+ // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
+ // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
+ Assert.assertEquals(result.getTotalSize(), 8);
- /**
- * Tests ordering, both ascending and descending.
- *
- * @throws Exception
- */
- @Test
- public void testAddOrder() throws Exception {
- Criteria criteria;
- ResultIterator<AdvancedResultItem> iterator;
- Calendar birthDate;
+ ResultIterator<AdvancedResultItem> iterator = result.getItems();
+ Assert.assertEquals(iterator.getSize(), 3);
+ Assert.assertEquals(iterator.next().getName(), "1");
+ Assert.assertEquals(iterator.next().getName(), "5");
+ Assert.assertEquals(iterator.next().getName(), "3");
+ }
- // gets the oldest pet (ascending order)
- criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.isNotNull("@petType")).addOrder(
- Order.asc("@birthDate"));
- iterator = criteria.execute().getItems();
- // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04)
- // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04)
- Assert.assertTrue(iterator.hasNext());
- birthDate = NodeDataUtil.getDate(iterator.next(), "birthDate", null);
- Assert.assertEquals(birthDate.get(Calendar.YEAR), 1995);
- Assert.assertEquals(birthDate.get(Calendar.MONTH) + 1, 9);
- Assert.assertEquals(birthDate.get(Calendar.DAY_OF_MONTH), 4);
+ /**
+ * Tests pagination of results.
+ * @throws Exception
+ */
+ @Test
+ public void testSetPaging() throws Exception
+ {
+ Calendar begin = Calendar.getInstance();
+ begin.set(1999, Calendar.JANUARY, 1);
+ Calendar end = Calendar.getInstance();
+ end.set(2001, Calendar.DECEMBER, 31);
- // gets the youngest pet (descending order)
- criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.isNotNull("@petType")).addOrder(
- Order.desc("@birthDate"));
- iterator = criteria.execute().getItems();
- // ----- 2 (title=Basil, petType=hamster, birthDate=2002-08-06)
- Assert.assertTrue(iterator.hasNext());
- birthDate = NodeDataUtil.getDate(iterator.next(), "birthDate", null);
- Assert.assertEquals(birthDate.get(Calendar.YEAR), 2002);
- Assert.assertEquals(birthDate.get(Calendar.MONTH) + 1, 8);
- Assert.assertEquals(birthDate.get(Calendar.DAY_OF_MONTH), 6);
- }
+ Criteria criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/pets")
+ .add(Restrictions.betweenDates("@birthDate", begin, end))
+ .addOrder(Order.asc("@birthDate"))
+ .setPaging(5, 2);
- /**
- * Tests multiple ordering, playing on the fact that the two oldests pets
- * are born on the same date but have different name.
- *
- * @throws Exception
- */
- @Test
- public void testAddOrderMultiple() throws Exception {
- Criteria criteria;
- ResultIterator<AdvancedResultItem> iterator;
+ AdvancedResult result = criteria.execute();
+ // first page:
+ // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06)
+ // --- 6 (title=George, petType=snake, birthDate=2000-01-20)
+ // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07)
+ // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09)
+ // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24)
+ // second page:
+ // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07)
+ // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30)
+ // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17)
+ Assert.assertEquals(result.getTotalSize(), 8);
- // order by @birthDate ascending, @title ascending
- criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.isNotNull("@petType")).addOrder(
- Order.asc("@birthDate")).addOrder(Order.asc("@title"));
- iterator = criteria.execute().getItems();
- // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04)
- // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04)
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getTitle(), "Max");
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getTitle(), "Samantha");
+ ResultIterator<AdvancedResultItem> iterator = result.getItems();
+ Assert.assertEquals(iterator.getSize(), 3);
+ Assert.assertEquals(iterator.next().getName(), "1");
+ Assert.assertEquals(iterator.next().getName(), "5");
+ Assert.assertEquals(iterator.next().getName(), "3");
+ }
- // order by @birthDate ascending, @title descending
- criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.isNotNull("@petType")).addOrder(
- Order.asc("@birthDate")).addOrder(Order.desc("@title"));
- iterator = criteria.execute().getItems();
- // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04)
- // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04)
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getTitle(), "Samantha");
- Assert.assertTrue(iterator.hasNext());
- Assert.assertEquals(iterator.next().getTitle(), "Max");
- }
+ /**
+ * Tests ordering, both ascending and descending.
+ * @throws Exception
+ */
+ @Test
+ public void testAddOrder() throws Exception
+ {
+ Criteria criteria;
+ ResultIterator<AdvancedResultItem> iterator;
+ Calendar birthDate;
- @Test
- public void testDateComparison() throws Exception {
- Criteria criteria;
- ResultIterator<AdvancedResultItem> iterator;
- Content node;
- Calendar date;
+ // gets the oldest pet (ascending order)
+ criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/pets")
+ .add(Restrictions.isNotNull("@petType"))
+ .addOrder(Order.asc("@birthDate"));
+ iterator = criteria.execute().getItems();
+ // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04)
+ // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04)
+ Assert.assertTrue(iterator.hasNext());
+ birthDate = NodeDataUtil.getDate(iterator.next(), "birthDate", null);
+ Assert.assertEquals(birthDate.get(Calendar.YEAR), 1995);
+ Assert.assertEquals(birthDate.get(Calendar.MONTH) + 1, 9);
+ Assert.assertEquals(birthDate.get(Calendar.DAY_OF_MONTH), 4);
- criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.isNotNull("@petType")).add(
- Restrictions.eq("@title", "Leo"));
- iterator = criteria.execute().getItems();
- Assert.assertTrue(iterator.hasNext());
- node = iterator.next();
- Assert.assertEquals(node.getTitle(), "Leo");
+ // gets the youngest pet (descending order)
+ criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/pets")
+ .add(Restrictions.isNotNull("@petType"))
+ .addOrder(Order.desc("@birthDate"));
+ iterator = criteria.execute().getItems();
+ // ----- 2 (title=Basil, petType=hamster, birthDate=2002-08-06)
+ Assert.assertTrue(iterator.hasNext());
+ birthDate = NodeDataUtil.getDate(iterator.next(), "birthDate", null);
+ Assert.assertEquals(birthDate.get(Calendar.YEAR), 2002);
+ Assert.assertEquals(birthDate.get(Calendar.MONTH) + 1, 8);
+ Assert.assertEquals(birthDate.get(Calendar.DAY_OF_MONTH), 6);
+ }
- date = (Calendar) node.getMetaData().getCreationDate().clone();
- date.add(Calendar.DAY_OF_YEAR, 1);
- criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.isNotNull("@petType")).add(
- Restrictions.eq("@title", "Leo"));
- criteria.add(Restrictions.lt("MetaData/@mgnl:creationdate", date));
- iterator = criteria.execute().getItems();
- Assert.assertTrue(iterator.hasNext());
- node = iterator.next();
- Assert.assertEquals(node.getTitle(), "Leo");
+ /**
+ * Tests multiple ordering, playing on the fact that the two oldests pets are born on the same date but have
+ * different name.
+ * @throws Exception
+ */
+ @Test
+ public void testAddOrderMultiple() throws Exception
+ {
+ Criteria criteria;
+ ResultIterator<AdvancedResultItem> iterator;
- date = (Calendar) node.getMetaData().getCreationDate().clone();
- date.add(Calendar.HOUR, 1);
- criteria = JCRCriteriaFactory.createCriteria().setWorkspace(
- ContentRepository.WEBSITE).setBasePath("/pets").add(
- Restrictions.isNotNull("@petType")).add(
- Restrictions.eq("@title", "Leo"));
- criteria.add(Restrictions.lt("MetaData/@mgnl:creationdate", date));
- iterator = criteria.execute().getItems();
- Assert.assertTrue(iterator.hasNext());
- node = iterator.next();
- Assert.assertEquals(node.getTitle(), "Leo");
- }
+ // order by @birthDate ascending, @title ascending
+ criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/pets")
+ .add(Restrictions.isNotNull("@petType"))
+ .addOrder(Order.asc("@birthDate"))
+ .addOrder(Order.asc("@title"));
+ iterator = criteria.execute().getItems();
+ // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04)
+ // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04)
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getTitle(), "Max");
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getTitle(), "Samantha");
+
+ // order by @birthDate ascending, @title descending
+ criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/pets")
+ .add(Restrictions.isNotNull("@petType"))
+ .addOrder(Order.asc("@birthDate"))
+ .addOrder(Order.desc("@title"));
+ iterator = criteria.execute().getItems();
+ // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04)
+ // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04)
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getTitle(), "Samantha");
+ Assert.assertTrue(iterator.hasNext());
+ Assert.assertEquals(iterator.next().getTitle(), "Max");
+ }
+
+ @Test
+ public void testDateComparison() throws Exception
+ {
+ Criteria criteria;
+ ResultIterator<AdvancedResultItem> iterator;
+ Content node;
+ Calendar date;
+
+ criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/pets")
+ .add(Restrictions.isNotNull("@petType"))
+ .add(Restrictions.eq("@title", "Leo"));
+ iterator = criteria.execute().getItems();
+ Assert.assertTrue(iterator.hasNext());
+ node = iterator.next();
+ Assert.assertEquals(node.getTitle(), "Leo");
+
+ date = (Calendar) node.getMetaData().getCreationDate().clone();
+ date.add(Calendar.DAY_OF_YEAR, 1);
+ criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/pets")
+ .add(Restrictions.isNotNull("@petType"))
+ .add(Restrictions.eq("@title", "Leo"));
+ criteria.add(Restrictions.lt("MetaData/@mgnl:creationdate", date));
+ iterator = criteria.execute().getItems();
+ Assert.assertTrue(iterator.hasNext());
+ node = iterator.next();
+ Assert.assertEquals(node.getTitle(), "Leo");
+
+ date = (Calendar) node.getMetaData().getCreationDate().clone();
+ date.add(Calendar.HOUR, 1);
+ criteria = JCRCriteriaFactory
+ .createCriteria()
+ .setWorkspace(ContentRepository.WEBSITE)
+ .setBasePath("/pets")
+ .add(Restrictions.isNotNull("@petType"))
+ .add(Restrictions.eq("@title", "Leo"));
+ criteria.add(Restrictions.lt("MetaData/@mgnl:creationdate", date));
+ iterator = criteria.execute().getItems();
+ Assert.assertTrue(iterator.hasNext());
+ node = iterator.next();
+ Assert.assertEquals(node.getTitle(), "Leo");
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fg...@us...> - 2011-08-08 10:31:52
|
Revision: 3585
http://openutils.svn.sourceforge.net/openutils/?rev=3585&view=rev
Author: fgiust
Date: 2011-08-08 10:31:44 +0000 (Mon, 08 Aug 2011)
Log Message:
-----------
CRIT-42 using DAY_OF_YER and HOUR_OF_DAY
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java 2011-08-08 09:32:08 UTC (rev 3584)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/criterion/Restrictions.java 2011-08-08 10:31:44 UTC (rev 3585)
@@ -375,7 +375,7 @@
private static Calendar getDayEnd(Calendar cal)
{
Calendar cal2 = getDayStart(cal);
- cal2.add(Calendar.DATE, 1);
+ cal2.add(Calendar.DAY_OF_YEAR, 1);
cal2.add(Calendar.MILLISECOND, -1);
return cal2;
}
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java 2011-08-08 09:32:08 UTC (rev 3584)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/CriteriaTest.java 2011-08-08 10:31:44 UTC (rev 3585)
@@ -92,18 +92,18 @@
Calendar begin = Calendar.getInstance();
begin.set(1999, Calendar.JANUARY, 1);
- begin.set(Calendar.HOUR, 0);
+ begin.set(Calendar.HOUR_OF_DAY, 0);
begin.set(Calendar.MINUTE, 0);
begin.set(Calendar.SECOND, 0);
begin.set(Calendar.MILLISECOND, 0);
Calendar end = Calendar.getInstance();
end.set(2001, Calendar.DECEMBER, 31);
- end.set(Calendar.HOUR, 0);
+ end.set(Calendar.HOUR_OF_DAY, 0);
end.set(Calendar.MINUTE, 0);
end.set(Calendar.SECOND, 0);
end.set(Calendar.MILLISECOND, 0);
end.add(Calendar.MILLISECOND, -1);
- end.add(Calendar.DATE, 1);
+ end.add(Calendar.DAY_OF_YEAR, 1);
String expectedStmt = "//pets//*"
+ "[((jcr:contains(@title, 'Lucky')) and (@petType='dog')"
@@ -402,4 +402,5 @@
node = iterator.next();
Assert.assertEquals(node.getTitle(), "Leo");
}
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fg...@us...> - 2011-08-08 10:32:09
|
Revision: 3586
http://openutils.svn.sourceforge.net/openutils/?rev=3586&view=rev
Author: fgiust
Date: 2011-08-08 10:32:03 +0000 (Mon, 08 Aug 2011)
Log Message:
-----------
CRIT-40 escaping of valid elements in base path
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/MagnoliaCriteriaTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2011-08-08 10:31:44 UTC (rev 3585)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2011-08-08 10:32:03 UTC (rev 3586)
@@ -121,7 +121,8 @@
StringBuilder encodedPath = new StringBuilder(path.length());
- boolean inXpathCondition = false;
+ int inXpathCondition = 0;
+ boolean xpathWithFunction = false;
// TODO maybe a more robust check is needed
for (int i = 0; i < path.length(); ++i)
@@ -132,11 +133,11 @@
{
encodedPath.append("_x" + StringUtils.leftPad(Integer.toHexString(ch), 4, '0') + "_");
}
- else if (!inXpathCondition && ch == ' ')
+ else if (inXpathCondition <= 0 && ch == ' ')
{
encodedPath.append("_x0020_");
}
- else if (!inXpathCondition && ch == ',')
+ else if (inXpathCondition <= 0 && ch == ',')
{
encodedPath.append("_x002c_");
}
@@ -145,12 +146,27 @@
if (ch == '[')
{
- inXpathCondition = true;
+ inXpathCondition++;
}
- else if (inXpathCondition && ch == ']')
+ else if (ch == '(')
{
- inXpathCondition = false;
+ // "(" is the beginning of an expression only when used with the element() function
+ // not really a clean check, actually...
+ if (encodedPath.indexOf("element") > 0)
+ {
+ inXpathCondition++;
+ xpathWithFunction = true;
+ }
}
+ else if (inXpathCondition > 0 && ch == ']')
+ {
+ inXpathCondition--;
+ }
+ else if (inXpathCondition > 0 && xpathWithFunction && ch == ')')
+ {
+ inXpathCondition--;
+ xpathWithFunction = false;
+ }
encodedPath.append(ch);
}
}
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/MagnoliaCriteriaTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/MagnoliaCriteriaTest.java 2011-08-08 10:31:44 UTC (rev 3585)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/impl/MagnoliaCriteriaTest.java 2011-08-08 10:32:03 UTC (rev 3586)
@@ -86,4 +86,56 @@
Assert.assertEquals("//site//*[( (@property='test') )] ", xpathExpression);
}
+
+ /**
+ * Test for CRIT-37
+ */
+ @Test
+ public void testEscapeComma()
+ {
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setBasePath("/one/two/3three/fo,ur/");
+ criteria.add(Restrictions.eq("@property", "test"));
+ String xpathExpression = criteria.toXpathExpression();
+
+ Assert.assertEquals(xpathExpression, "//one/two/_x0033_three/fo_x002c_ur//*[( (@property='test') )] ");
+ }
+
+ /**
+ * Test for CRIT-40
+ */
+ @Test
+ public void testDontEscapeBasePathWithParenthesis()
+ {
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setBasePath("/path/with(paren,thesis)/test");
+ criteria.add(Restrictions.eq("@property", "test"));
+ String xpathExpression = criteria.toXpathExpression();
+
+ Assert.assertEquals(xpathExpression, "//path/with(paren_x002c_thesis)/test//*[( (@property='test') )] ");
+ }
+
+ /**
+ * Test for CRIT-40
+ */
+ @Test
+ public void testDontEscapeExpressions()
+ {
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setBasePath("/jcr:root///element(* , mgnl:media)");
+ criteria.add(Restrictions.eq("@property", "test"));
+ String xpathExpression = criteria.toXpathExpression();
+
+ Assert.assertEquals(xpathExpression, "/jcr:root///element(* , mgnl:media)[( (@property='test') )] ");
+ }
+
+ /**
+ * Test for CRIT-40
+ */
+ @Test
+ public void testDontEscapeExpressions2()
+ {
+ Criteria criteria = JCRCriteriaFactory.createCriteria().setBasePath("/jcr:root//*[@jcr:uuid='xxxx-xxxx']//*");
+ criteria.add(Restrictions.eq("@property", "test"));
+ String xpathExpression = criteria.toXpathExpression();
+
+ Assert.assertEquals(xpathExpression, "/jcr:root//*[@jcr:uuid='xxxx-xxxx']//*[( (@property='test') )] ");
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <die...@us...> - 2012-02-27 11:10:45
|
Revision: 3741
http://openutils.svn.sourceforge.net/openutils/?rev=3741&view=rev
Author: diego_schivo
Date: 2012-02-27 11:10:34 +0000 (Mon, 27 Feb 2012)
Log Message:
-----------
CRIT-48 Parentheses escape
Modified Paths:
--------------
trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/FirstDigitEscapeTest.java
Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2012-02-27 10:37:56 UTC (rev 3740)
+++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/xpath/utils/XPathTextUtils.java 2012-02-27 11:10:34 UTC (rev 3741)
@@ -155,21 +155,33 @@
else if (ch == '(')
{
// "(" is the beginning of an expression only when used with the element() function
- // not really a clean check, actually...
- if (encodedPath.indexOf("element") > 0)
+ if (StringUtils.endsWith(StringUtils.substring(path, i), "element"))
{
inXpathCondition++;
xpathWithFunction = true;
}
+ else
+ {
+ encodedPath.append("_x0028_");
+ continue;
+ }
}
else if (inXpathCondition > 0 && ch == ']')
{
inXpathCondition--;
}
- else if (inXpathCondition > 0 && xpathWithFunction && ch == ')')
+ else if (ch == ')')
{
- inXpathCondition--;
- xpathWithFunction = false;
+ if (inXpathCondition > 0 && xpathWithFunction)
+ {
+ inXpathCondition--;
+ xpathWithFunction = false;
+ }
+ else
+ {
+ encodedPath.append("_x0029_");
+ continue;
+ }
}
encodedPath.append(ch);
}
Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/FirstDigitEscapeTest.java
===================================================================
--- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/FirstDigitEscapeTest.java 2012-02-27 10:37:56 UTC (rev 3740)
+++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/FirstDigitEscapeTest.java 2012-02-27 11:10:34 UTC (rev 3741)
@@ -90,7 +90,7 @@
public void testEscapeParentheses() throws Exception
{
Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE);
- criteria.setBasePath("//myproject/Sport/F1/0a67369b-8cc6-43d8-b2d3-(c07b12a2ed5f)");
+ criteria.setBasePath("/myproject/Sport/F1/0a67369b-8cc6-43d8-b2d3-(c07b12a2ed5f)");
criteria.add(Restrictions.eq("@jcr:primaryType", "mgnl:contentNode"));
criteria.addOrder(Order.desc("@jcr:created"));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|