You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2012/09/05 17:09:55 UTC

svn commit: r1381217 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/core/ main/java/org/apache/jackrabbit/oak/plugins/index/ main/java/org/apache/jackrabbit/oak/spi/query/ test/java/org/apache/jackrabbit/oak/plugins/lucene...

Author: alexparvulescu
Date: Wed Sep  5 15:09:54 2012
New Revision: 1381217

URL: http://svn.apache.org/viewvc?rev=1381217&view=rev
Log:
OAK-269 Query: IndexManager to manage existing indexes

Added:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java   (with props)
Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/PropertyIndexFactory.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java?rev=1381217&r1=1381216&r2=1381217&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentRepositoryImpl.java Wed Sep  5 15:09:54 2012
@@ -29,7 +29,6 @@ import org.apache.jackrabbit.mk.core.Mic
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
-import org.apache.jackrabbit.oak.plugins.index.Indexer;
 import org.apache.jackrabbit.oak.query.QueryEngineImpl;
 import org.apache.jackrabbit.oak.security.authentication.LoginContextProviderImpl;
 import org.apache.jackrabbit.oak.spi.QueryIndexProvider;
@@ -37,6 +36,7 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.commit.CompositeValidatorProvider;
 import org.apache.jackrabbit.oak.spi.commit.ValidatingHook;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
+import org.apache.jackrabbit.oak.spi.query.CompositeQueryIndexProvider;
 import org.apache.jackrabbit.oak.spi.security.authentication.LoginContextProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.slf4j.Logger;
@@ -65,10 +65,9 @@ public class ContentRepositoryImpl imple
      * test cases only.
      */
     public ContentRepositoryImpl() {
-        this(new MicroKernelImpl(), null, new ValidatingHook(
-                new CompositeValidatorProvider(
+        this(new MicroKernelImpl(), new CompositeQueryIndexProvider(),
+                new ValidatingHook(new CompositeValidatorProvider(
                         Collections.<ValidatorProvider> emptyList())));
-        // this(new IndexWrapper(new MicroKernelImpl()), null, null);
     }
 
     /**
@@ -112,7 +111,8 @@ public class ContentRepositoryImpl imple
         nodeStore = new KernelNodeStore(microKernel);
         nodeStore.setHook(commitHook);
 
-        QueryIndexProvider qip = (indexProvider == null) ? getDefaultIndexProvider(microKernel) : indexProvider;
+        QueryIndexProvider qip = indexProvider != null ? indexProvider
+                : new CompositeQueryIndexProvider();
         queryEngine = new QueryEngineImpl(nodeStore, microKernel, qip);
 
         // TODO: use configurable context provider
@@ -135,10 +135,6 @@ public class ContentRepositoryImpl imple
         }
     }
 
-    private static QueryIndexProvider getDefaultIndexProvider(MicroKernel mk) {
-        return Indexer.getInstance(mk);
-    }
-
     @Nonnull
     @Override
     public ContentSession login(Credentials credentials, String workspaceName)

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/PropertyIndexFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/PropertyIndexFactory.java?rev=1381217&r1=1381216&r2=1381217&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/PropertyIndexFactory.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/PropertyIndexFactory.java Wed Sep  5 15:09:54 2012
@@ -45,7 +45,7 @@ public class PropertyIndexFactory implem
 
     @Override
     public void init(MicroKernel mk) {
-        this.indexer = new Indexer(mk);
+        this.indexer = Indexer.getInstance(mk);
     }
 
     @Override

Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java?rev=1381217&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java Wed Sep  5 15:09:54 2012
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.spi.query;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.spi.QueryIndex;
+import org.apache.jackrabbit.oak.spi.QueryIndexProvider;
+
+/**
+ * This {@code QueryIndexProvider} aggregates a list of query index providers
+ * into a single query index provider.
+ */
+public class CompositeQueryIndexProvider implements QueryIndexProvider {
+
+    private final Collection<QueryIndexProvider> providers = new CopyOnWriteArrayList<QueryIndexProvider>();
+
+    public CompositeQueryIndexProvider(QueryIndexProvider... providers) {
+        add(providers);
+    }
+
+    public void add(QueryIndexProvider... provider) {
+        if (provider == null) {
+            return;
+        }
+        for (QueryIndexProvider qip : provider) {
+            providers.add(qip);
+        }
+    }
+
+    @Override
+    public List<QueryIndex> getQueryIndexes(MicroKernel mk) {
+        List<QueryIndex> indexes = new ArrayList<QueryIndex>();
+        for (QueryIndexProvider qip : providers) {
+            List<QueryIndex> t = qip.getQueryIndexes(mk);
+            if (t != null) {
+                indexes.addAll(t);
+            }
+        }
+        return indexes;
+    }
+
+}

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java?rev=1381217&r1=1381216&r2=1381217&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/lucene/AbstractLuceneQueryTest.java Wed Sep  5 15:09:54 2012
@@ -16,6 +16,10 @@
  */
 package org.apache.jackrabbit.oak.plugins.lucene;
 
+import static org.apache.jackrabbit.oak.plugins.lucene.LuceneIndexUtils.DEFAULT_INDEX_NAME;
+import static org.apache.jackrabbit.oak.plugins.lucene.LuceneIndexUtils.createIndexNode;
+import static org.apache.jackrabbit.oak.spi.query.IndexUtils.DEFAULT_INDEX_HOME;
+
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.List;
@@ -39,20 +43,18 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.type.DefaultTypeEditor;
 import org.apache.jackrabbit.oak.plugins.type.TypeValidatorProvider;
 import org.apache.jackrabbit.oak.plugins.value.ConflictValidatorProvider;
+import org.apache.jackrabbit.oak.spi.QueryIndexProvider;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
 import org.apache.jackrabbit.oak.spi.commit.CompositeValidatorProvider;
 import org.apache.jackrabbit.oak.spi.commit.ValidatingHook;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
+import org.apache.jackrabbit.oak.spi.query.CompositeQueryIndexProvider;
 import org.apache.jackrabbit.oak.spi.query.IndexManager;
 import org.apache.jackrabbit.oak.spi.query.IndexManagerImpl;
 import org.apache.jackrabbit.oak.spi.query.IndexUtils;
 import org.junit.Before;
 
-import static org.apache.jackrabbit.oak.plugins.lucene.LuceneIndexUtils.DEFAULT_INDEX_NAME;
-import static org.apache.jackrabbit.oak.plugins.lucene.LuceneIndexUtils.createIndexNode;
-import static org.apache.jackrabbit.oak.spi.query.IndexUtils.DEFAULT_INDEX_HOME;
-
 /**
  * base class for lucene search tests
  */
@@ -83,8 +85,9 @@ public abstract class AbstractLuceneQuer
     @Override
     protected ContentRepository createRepository() {
         mk = new MicroKernelImpl();
-        return new ContentRepositoryImpl(mk, new LuceneIndexProvider(
-                DEFAULT_INDEX_HOME), buildDefaultCommitHook());
+        QueryIndexProvider indexer = new LuceneIndexProvider(DEFAULT_INDEX_HOME);
+        QueryIndexProvider qip = new CompositeQueryIndexProvider(indexer);
+        return new ContentRepositoryImpl(mk, qip, buildDefaultCommitHook());
     }
 
     private CommitHook buildDefaultCommitHook() {

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java?rev=1381217&r1=1381216&r2=1381217&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/AbstractQueryTest.java Wed Sep  5 15:09:54 2012
@@ -18,35 +18,46 @@ package org.apache.jackrabbit.oak.query;
 
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.mk.index.IndexWrapper;
+import org.apache.jackrabbit.oak.AbstractOakTest;
+import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.CoreValueFactory;
 import org.apache.jackrabbit.oak.api.SessionQueryEngine;
 import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
-import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
-
-import javax.jcr.GuestCredentials;
+import org.apache.jackrabbit.oak.plugins.index.PropertyIndexFactory;
+import org.apache.jackrabbit.oak.spi.QueryIndexProvider;
+import org.apache.jackrabbit.oak.spi.query.CompositeQueryIndexProvider;
+import org.apache.jackrabbit.oak.spi.query.IndexManager;
+import org.apache.jackrabbit.oak.spi.query.IndexManagerImpl;
+import org.apache.jackrabbit.oak.spi.query.IndexUtils;
+import org.junit.Before;
 
 /**
  * AbstractQueryTest...
  */
-public abstract class AbstractQueryTest {
+public abstract class AbstractQueryTest extends AbstractOakTest {
 
-    protected final IndexWrapper mk;
-    protected final ContentRepositoryImpl rep;
-    protected final CoreValueFactory vf;
-    protected final SessionQueryEngine qe;
-    protected final ContentSession session;
+    protected IndexWrapper mk;
+    protected CoreValueFactory vf;
+    protected SessionQueryEngine qe;
+    protected ContentSession session;
 
-    {
+    @Override
+    protected ContentRepository createRepository() {
         mk = new IndexWrapper(new MicroKernelImpl());
-        rep = new ContentRepositoryImpl(mk, null, (ValidatorProvider) null);
-        try {
-            session = rep.login(new GuestCredentials(), "default");
-            vf = session.getCoreValueFactory();
-            qe = session.getQueryEngine();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
+        QueryIndexProvider indexer = mk.getIndexer();
+        QueryIndexProvider qip = new CompositeQueryIndexProvider(indexer);
+        IndexManager im = new IndexManagerImpl(IndexUtils.DEFAULT_INDEX_HOME,
+                mk, new PropertyIndexFactory());
+        return new ContentRepositoryImpl(mk, qip, im);
+    }
+
+    @Before
+    public void before() throws Exception {
+        super.before();
+        session = createAdminSession();
+        vf = session.getCoreValueFactory();
+        qe = session.getQueryEngine();
     }
 
 }
\ No newline at end of file