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. |