From: <die...@us...> - 2010-05-27 17:33:33
|
Revision: 2575 http://openutils.svn.sourceforge.net/openutils/?rev=2575&view=rev Author: diego_schivo Date: 2010-05-27 17:33:26 +0000 (Thu, 27 May 2010) Log Message: ----------- CRIT-12 AclSearchIndexTest Added Paths: ----------- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/AclSearchIndexTest.java trunk/openutils-mgnlcriteria/src/test/java/org/ trunk/openutils-mgnlcriteria/src/test/java/org/apache/ trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/ trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/ trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/query/ trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/query/lucene/ trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/query/lucene/AclQueryImpl.java trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/query/lucene/AclSearchIndex.java trunk/openutils-mgnlcriteria/src/test/resources/crit-repository/jackrabbit-acl-search-index-test-configuration.xml Added: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/AclSearchIndexTest.java =================================================================== --- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/AclSearchIndexTest.java (rev 0) +++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/AclSearchIndexTest.java 2010-05-27 17:33:26 UTC (rev 2575) @@ -0,0 +1,127 @@ +/** + * + * 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.advanced; + +import info.magnolia.cms.beans.config.ContentRepository; +import info.magnolia.cms.core.HierarchyManager; +import info.magnolia.context.MgnlContext; + +import java.util.Calendar; + +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.Order; +import net.sourceforge.openutils.mgnlcriteria.jcr.query.criterion.Restrictions; +import net.sourceforge.openutils.mgnlcriteria.tests.RepositoryTestNgTestcase; + +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + + +/** + * @author dschivo + */ +public class AclSearchIndexTest extends RepositoryTestNgTestcase +{ + + /** + * {@inheritDoc} + */ + @Override + @BeforeClass + protected void setUp() throws Exception + { + setRepositoryConfigFileName("/crit-repository/test-repositories.xml"); + setJackrabbitRepositoryConfigFileName("/crit-repository/jackrabbit-acl-search-index-test-configuration.xml"); + + 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) + bootstrapSingleResource("/crit-bootstrap/website.pets.xml"); + + HierarchyManager hm = MgnlContext.getHierarchyManager(ContentRepository.WEBSITE); + hm.save(); + } + + /** + * @throws Exception + */ + @Test + public void testGetItems() 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.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(); + + // 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()); + } + +} Property changes on: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/advanced/AclSearchIndexTest.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/java/org/apache/jackrabbit/core/query/lucene/AclQueryImpl.java =================================================================== --- trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/query/lucene/AclQueryImpl.java (rev 0) +++ trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/query/lucene/AclQueryImpl.java 2010-05-27 17:33:26 UTC (rev 2575) @@ -0,0 +1,130 @@ +package org.apache.jackrabbit.core.query.lucene; + +import javax.jcr.RepositoryException; +import javax.jcr.query.InvalidQueryException; +import javax.jcr.query.QueryResult; + +import org.apache.jackrabbit.core.ItemManager; +import org.apache.jackrabbit.core.SessionImpl; +import org.apache.jackrabbit.core.query.PropertyTypeRegistry; +import org.apache.jackrabbit.spi.Path; +import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl; +import org.apache.jackrabbit.spi.commons.query.OrderQueryNode; +import org.apache.jackrabbit.spi.commons.query.QueryNodeFactory; +import org.apache.lucene.index.Term; +import org.apache.lucene.search.BooleanQuery; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.BooleanClause.Occur; + + +/** + * @author dschivo + * @version $Id$ + */ +public class AclQueryImpl extends QueryImpl +{ + + /** + * + */ + public AclQueryImpl( + SessionImpl session, + ItemManager itemMgr, + SearchIndex index, + PropertyTypeRegistry propReg, + String statement, + String language, + QueryNodeFactory factory) throws InvalidQueryException + { + super(session, itemMgr, index, propReg, statement, language, factory); + } + + /** + * {@inheritDoc} + */ + @Override + public QueryResult execute(long offset, long limit) throws RepositoryException + { + // build lucene query + Query query = LuceneQueryBuilder.createQuery(root, session, index.getContext().getItemStateManager(), index + .getNamespaceMappings(), index.getTextAnalyzer(), propReg, index.getSynonymProvider(), index + .getIndexFormatVersion()); + + query = booleanQuery(query, descendantSelfAxisQuery(booleanQuery(childAxisQuery( + booleanQuery(descendantSelfAxisQuery(jackrabbitTermQuery("_:PARENT"), nameQuery("pets"))), + "dogs")), new MatchAllDocsQuery())); + // query = bq(dsaq(bq(dsaq(jtq("_:PARENT"), nq("pets"))), new MatchAllDocsQuery()), + // dsaq(bq(caq(bq(dsaq(jtq("_:PARENT"), nq("pets"))), "dogs")), new MatchAllDocsQuery())); + // query = dsaq(bq(dsaq(jtq("_:PARENT"), nq("pets"))), new MatchAllDocsQuery()); + // query = dsaq(bq(caq(bq(dsaq(jtq("_:PARENT"), nq("pets"))), "dogs")), new MatchAllDocsQuery()); + // query = dsaq(bq(bq(dsaq(jtq("_:PARENT"), nq("pets")), caq(bq(dsaq(jtq("_:PARENT"), nq("pets"))), "dogs"))), + // new MatchAllDocsQuery()); + + OrderQueryNode orderNode = root.getOrderNode(); + + OrderQueryNode.OrderSpec[] orderSpecs; + if (orderNode != null) + { + orderSpecs = orderNode.getOrderSpecs(); + } + else + { + orderSpecs = new OrderQueryNode.OrderSpec[0]; + } + Path[] orderProperties = new Path[orderSpecs.length]; + boolean[] ascSpecs = new boolean[orderSpecs.length]; + for (int i = 0; i < orderSpecs.length; i++) + { + orderProperties[i] = orderSpecs[i].getPropertyPath(); + ascSpecs[i] = orderSpecs[i].isAscending(); + } + + return new SingleColumnQueryResult( + index, + itemMgr, + session, + session.getAccessManager(), + this, + query, + new SpellSuggestion(index.getSpellChecker(), root), + getSelectProperties(), + orderProperties, + ascSpecs, + getRespectDocumentOrder(), + offset, + limit); + } + + private NameQuery nameQuery(String n) + { + return new NameQuery(NameFactoryImpl.getInstance().create("", n), index.getIndexFormatVersion(), index + .getNamespaceMappings()); + } + + private JackrabbitTermQuery jackrabbitTermQuery(String f) + { + return new JackrabbitTermQuery(new Term(f)); + } + + private BooleanQuery booleanQuery(Query... qs) + { + BooleanQuery bq = new BooleanQuery(); + for (Query q : qs) + { + bq.add(q, Occur.MUST); + } + return bq; + } + + private ChildAxisQuery childAxisQuery(Query q, String n) + { + return new ChildAxisQuery(index.getContext().getItemStateManager(), q, NameFactoryImpl.getInstance().create( + "", + n), index.getIndexFormatVersion(), index.getNamespaceMappings()); + } + + private DescendantSelfAxisQuery descendantSelfAxisQuery(Query cq, Query sq) + { + return new DescendantSelfAxisQuery(cq, sq, 1); + } +} Property changes on: trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/query/lucene/AclQueryImpl.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/java/org/apache/jackrabbit/core/query/lucene/AclSearchIndex.java =================================================================== --- trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/query/lucene/AclSearchIndex.java (rev 0) +++ trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/query/lucene/AclSearchIndex.java 2010-05-27 17:33:26 UTC (rev 2575) @@ -0,0 +1,35 @@ +package org.apache.jackrabbit.core.query.lucene; + +import javax.jcr.query.InvalidQueryException; + +import org.apache.jackrabbit.core.ItemManager; +import org.apache.jackrabbit.core.SessionImpl; +import org.apache.jackrabbit.core.query.ExecutableQuery; + + +/** + * @author dschivo + * @version $Id$ + */ +public class AclSearchIndex extends SearchIndex +{ + + /** + * {@inheritDoc} + */ + @Override + public ExecutableQuery createExecutableQuery(SessionImpl session, ItemManager itemMgr, String statement, + String language) throws InvalidQueryException + { + QueryImpl query = new AclQueryImpl( + session, + itemMgr, + this, + getContext().getPropertyTypeRegistry(), + statement, + language, + getQueryNodeFactory()); + query.setRespectDocumentOrder(getRespectDocumentOrder()); + return query; + } +} Property changes on: trunk/openutils-mgnlcriteria/src/test/java/org/apache/jackrabbit/core/query/lucene/AclSearchIndex.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-repository/jackrabbit-acl-search-index-test-configuration.xml =================================================================== --- trunk/openutils-mgnlcriteria/src/test/resources/crit-repository/jackrabbit-acl-search-index-test-configuration.xml (rev 0) +++ trunk/openutils-mgnlcriteria/src/test/resources/crit-repository/jackrabbit-acl-search-index-test-configuration.xml 2010-05-27 17:33:26 UTC (rev 2575) @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 1.6//EN" "http://jackrabbit.apache.org/dtd/repository-1.6.dtd"> +<!-- TESTING-ONLY configuration! repositories are in memory only and any change is lost upon restart --> +<Repository> + <FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem"> + </FileSystem> + <Security appName="Jackrabbit"> + <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager"></AccessManager> + <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule"> + <param name="anonymousId" value="anonymous" /> + </LoginModule> + </Security> + <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default" /> + <Workspace name="default"> + <FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem"> + </FileSystem> + <PersistenceManager class="org.apache.jackrabbit.core.state.mem.InMemPersistenceManager"> + <param name="initialCapacity" value="100000" /> + <param name="loadFactor" value="0.3" /> + <param name="persistent" value="false" /> + </PersistenceManager> + <SearchIndex class="org.apache.jackrabbit.core.query.lucene.AclSearchIndex"> + <param name="indexingConfiguration" value="${rep.home}/../../test-classes/crit-repository/indexing_configuration.xml" /> + <param name="path" value="${wsp.home}/index" /> + <param name="useCompoundFile" value="false" /><!-- lasciare a false solo per i tests --> + <param name="minMergeDocs" value="100" /> + <param name="volatileIdleTime" value="3" /> + <param name="maxMergeDocs" value="100000" /> + <param name="mergeFactor" value="10" /> + <param name="maxFieldLength" value="10000" /> + <param name="bufferSize" value="10" /> + <param name="cacheSize" value="1000" /> + <param name="autoRepair" value="true" /> + <param name="queryClass" value="org.apache.jackrabbit.core.query.QueryImpl" /> + <param name="respectDocumentOrder" value="false" /> + <param name="resultFetchSize" value="2147483647" /> + <param name="extractorPoolSize" value="3" /> + <param name="extractorTimeout" value="100" /> + <param name="extractorBackLogSize" value="100" /> + <param name="enableConsistencyCheck" value="true" /> + <param name="autoRepair" value="true" /> + <param name="forceConsistencyCheck" value="false" /> + <param name="directoryManagerClass" value="org.apache.jackrabbit.core.query.lucene.directory.RAMDirectoryManager" /> + <param name="supportHighlighting" value="true" /> + <param name="analyzer" value="net.sourceforge.openutils.mgnlcriteria.tests.ItalianSnowballAnalyzer" /> + </SearchIndex> + </Workspace> + <Versioning rootPath="${rep.home}/version"> + <FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem"> + </FileSystem> + <PersistenceManager class="org.apache.jackrabbit.core.state.mem.InMemPersistenceManager"> + <param name="initialCapacity" value="100000" /> + <param name="loadFactor" value="0.3" /> + <param name="persistent" value="false" /> + </PersistenceManager> + </Versioning> + <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex"> + <param name="indexingConfiguration" value="${rep.home}/../../test-classes/crit-repository/indexing_configuration.xml" /> + <param name="path" value="${rep.home}/index" /> + <param name="useCompoundFile" value="false" /><!-- lasciare a false solo per i tests --> + <param name="minMergeDocs" value="100" /> + <param name="volatileIdleTime" value="3" /> + <param name="maxMergeDocs" value="100000" /> + <param name="mergeFactor" value="10" /> + <param name="maxFieldLength" value="10000" /> + <param name="bufferSize" value="10" /> + <param name="cacheSize" value="1000" /> + <param name="forceConsistencyCheck" value="false" /> + <param name="autoRepair" value="true" /> + <param name="analyzer" value="net.sourceforge.openutils.mgnlcriteria.tests.ItalianSnowballAnalyzer" /> + <param name="queryClass" value="org.apache.jackrabbit.core.query.QueryImpl" /> + <param name="respectDocumentOrder" value="false" /> + <param name="resultFetchSize" value="2147483647" /> + <param name="extractorPoolSize" value="3" /> + <param name="extractorTimeout" value="100" /> + <param name="extractorBackLogSize" value="100" /> + <param name="supportHighlighting" value="true" /> + <param name="directoryManagerClass" value="org.apache.jackrabbit.core.query.lucene.directory.RAMDirectoryManager" /> + <FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem"> + </FileSystem> + </SearchIndex> + <!-- <DataStore class="org.apache.jackrabbit.core.data.FileDataStore"> <param name="minRecordLength" value="100000000" + /> </DataStore> --> +</Repository> \ No newline at end of file Property changes on: trunk/openutils-mgnlcriteria/src/test/resources/crit-repository/jackrabbit-acl-search-index-test-configuration.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. |