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 2013/04/25 15:20:24 UTC

svn commit: r1475754 [1/2] - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/ oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/ oak-core/src/main/java/org/a...

Author: alexparvulescu
Date: Thu Apr 25 13:20:23 2013
New Revision: 1475754

URL: http://svn.apache.org/r1475754
Log:
OAK-734 Refactor indexing code to use Editors

Added:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexEditorProvider.java   (contents, props changed)
      - copied, changed from r1475736, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexHookProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java   (contents, props changed)
      - copied, changed from r1475701, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexHookProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditor.java   (contents, props changed)
      - copied, changed from r1475701, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditorProvider.java   (contents, props changed)
      - copied, changed from r1475701, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java   (with props)
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java   (with props)
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java   (with props)
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java   (contents, props changed)
      - copied, changed from r1475736, jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexHookProvider.java
Removed:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexHookProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexHookProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManager.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookProvider.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerTest.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexHookProvider.java
Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookUpdate.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexTest.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexDiff.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/LuceneOakRepositoryStub.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
    jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/OakSolrUtils.java
    jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexDiff.java
    jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHook.java
    jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHookProvider.java
    jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrNodeStateDiff.java
    jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/TestUtils.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java Thu Apr 25 13:20:23 2013
@@ -38,9 +38,9 @@ import org.apache.jackrabbit.oak.api.Roo
 import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
 import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
 import org.apache.jackrabbit.oak.plugins.commit.ConflictHook;
-import org.apache.jackrabbit.oak.plugins.index.CompositeIndexHookProvider;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookManager;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.observation2.EventQueueWriterProvider;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CompositeEditorProvider;
@@ -82,7 +82,7 @@ public class Oak {
 
     private final List<QueryIndexProvider> queryIndexProviders = newArrayList();
 
-    private final List<IndexHookProvider> indexHookProviders = newArrayList();
+    private final List<IndexEditorProvider> indexHookProviders = newArrayList();
 
     private final List<CommitHook> commitHooks = newArrayList();
 
@@ -147,7 +147,7 @@ public class Oak {
      * @return this builder
      */
     @Nonnull
-    public Oak with(@Nonnull IndexHookProvider provider) {
+    public Oak with(@Nonnull IndexEditorProvider provider) {
         indexHookProviders.add(provider);
         return this;
     }
@@ -243,7 +243,7 @@ public class Oak {
     }
 
     public ContentRepository createContentRepository() {
-        IndexHookProvider indexHooks = CompositeIndexHookProvider.compose(indexHookProviders);
+        IndexEditorProvider indexHooks = CompositeIndexEditorProvider.compose(indexHookProviders);
         OakInitializer.initialize(store, new CompositeInitializer(initializers), indexHooks);
 
         QueryIndexProvider indexProvider = CompositeQueryIndexProvider.compose(queryIndexProviders);
@@ -267,7 +267,7 @@ public class Oak {
                 CompositeHook.compose(initHooks));
 
         // add index hooks later to prevent the OakInitializer to do excessive indexing
-        with(IndexHookManager.of(indexHooks));
+        with(new IndexUpdateProvider(indexHooks));
         with(new EventQueueWriterProvider());
         withEditorHook();
         CommitHook commitHook = CompositeHook.compose(commitHooks);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/Activator.java Thu Apr 25 13:20:23 2013
@@ -50,7 +50,7 @@ public class Activator implements Bundle
 
     private final OsgiIndexProvider indexProvider = new OsgiIndexProvider();
 
-    private final OsgiIndexHookProvider indexHookProvider = new OsgiIndexHookProvider();
+    private final OsgiIndexEditorProvider indexEditorProvider = new OsgiIndexEditorProvider();
 
     private final OsgiEditorProvider validatorProvider = new OsgiEditorProvider();
 
@@ -65,7 +65,7 @@ public class Activator implements Bundle
         context = bundleContext;
 
         indexProvider.start(bundleContext);
-        indexHookProvider.start(bundleContext);
+        indexEditorProvider.start(bundleContext);
         validatorProvider.start(bundleContext);
         repositoryInitializerTracker.setObserver(this);
         repositoryInitializerTracker.start(bundleContext);
@@ -82,7 +82,7 @@ public class Activator implements Bundle
         // nodeStoreTracker.close();
         microKernelTracker.close();
         indexProvider.stop();
-        indexHookProvider.stop();
+        indexEditorProvider.stop();
         validatorProvider.stop();
         repositoryInitializerTracker.stop();
     }
@@ -100,13 +100,13 @@ public class Activator implements Bundle
                     new Properties()));
         } else if (service instanceof NodeStore) {
             NodeStore store = (NodeStore) service;
-            OakInitializer.initialize(store, repositoryInitializerTracker, indexHookProvider);
+            OakInitializer.initialize(store, repositoryInitializerTracker, indexEditorProvider);
             Oak oak = new Oak(store)
                 // FIXME: proper osgi setup for security provider (see OAK-17 and sub-tasks)
                 .with(new SecurityProviderImpl())
                 .with(validatorProvider)
                 .with(indexProvider)
-                .with(indexHookProvider);
+                .with(indexEditorProvider);
             services.put(reference, context.registerService(
                     ContentRepository.class.getName(),
                     oak.createContentRepository(),
@@ -136,7 +136,7 @@ public class Activator implements Bundle
             if (service instanceof ContentRepositoryImpl) {
                 ContentRepositoryImpl repository = (ContentRepositoryImpl) service;
                 OakInitializer.initialize(repository.getNodeStore(), ri,
-                        indexHookProvider);
+                        indexEditorProvider);
             }
         }
     }

Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexEditorProvider.java (from r1475736, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexHookProvider.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexEditorProvider.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexEditorProvider.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexHookProvider.java&r1=1475736&r2=1475754&rev=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexHookProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexEditorProvider.java Thu Apr 25 13:20:23 2013
@@ -18,33 +18,30 @@
  */
 package org.apache.jackrabbit.oak.osgi;
 
-import java.util.List;
-
-import javax.annotation.Nonnull;
-
-import org.apache.jackrabbit.oak.plugins.index.CompositeIndexHookProvider;
-import org.apache.jackrabbit.oak.plugins.index.IndexHook;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
+import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 /**
- * This IndexHook provider combines all index hooks of all available OSGi
- * IndexHook providers.
+ * This IndexEditor provider combines all index editors of all available OSGi
+ * IndexEditor providers.
  */
-public class OsgiIndexHookProvider extends
-        AbstractServiceTracker<IndexHookProvider> implements IndexHookProvider {
+public class OsgiIndexEditorProvider extends
+        AbstractServiceTracker<IndexEditorProvider> implements IndexEditorProvider {
 
-    public OsgiIndexHookProvider() {
-        super(IndexHookProvider.class);
+    public OsgiIndexEditorProvider() {
+        super(IndexEditorProvider.class);
     }
 
     @Override
-    @Nonnull
-    public List<? extends IndexHook> getIndexHooks(
-            String type, NodeBuilder builder, NodeState root) {
-        IndexHookProvider composite = CompositeIndexHookProvider.compose(getServices());
-        return composite.getIndexHooks(type, builder, root);
+    public Editor getIndexEditor(String type, NodeBuilder builder) {
+        IndexEditorProvider composite = CompositeIndexEditorProvider
+                .compose(getServices());
+        if (composite == null) {
+            return null;
+        }
+        return composite.getIndexEditor(type, builder);
     }
 
 }

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiIndexEditorProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java (from r1475701, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexHookProvider.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexHookProvider.java&r1=1475701&r2=1475754&rev=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexHookProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java Thu Apr 25 13:20:23 2013
@@ -22,54 +22,56 @@ import java.util.List;
 
 import javax.annotation.Nonnull;
 
+import org.apache.jackrabbit.oak.spi.commit.CompositeEditor;
+import org.apache.jackrabbit.oak.spi.commit.Editor;
+import org.apache.jackrabbit.oak.spi.commit.VisibleEditor;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
 /**
- * TODO document
+ * Aggregation of a list of editor providers into a single provider.
  */
-public class CompositeIndexHookProvider implements IndexHookProvider {
+public class CompositeIndexEditorProvider implements IndexEditorProvider {
 
     @Nonnull
-    public static IndexHookProvider compose(
-            @Nonnull Collection<IndexHookProvider> providers) {
+    public static IndexEditorProvider compose(
+            @Nonnull Collection<IndexEditorProvider> providers) {
         if (providers.isEmpty()) {
-            return new IndexHookProvider() {
+            return new IndexEditorProvider() {
                 @Override
-                public List<? extends IndexHook> getIndexHooks(
-                        String type, NodeBuilder builder, NodeState root) {
-                    return ImmutableList.of();
+                public Editor getIndexEditor(String type, NodeBuilder builder) {
+                    return null;
                 }
             };
         } else if (providers.size() == 1) {
             return providers.iterator().next();
         } else {
-            return new CompositeIndexHookProvider(
+            return new CompositeIndexEditorProvider(
                     ImmutableList.copyOf(providers));
         }
     }
 
-    private final List<IndexHookProvider> providers;
+    private final List<IndexEditorProvider> providers;
 
-    private CompositeIndexHookProvider(List<IndexHookProvider> providers) {
+    private CompositeIndexEditorProvider(List<IndexEditorProvider> providers) {
         this.providers = providers;
     }
 
-    public CompositeIndexHookProvider(IndexHookProvider... providers) {
+    public CompositeIndexEditorProvider(IndexEditorProvider... providers) {
         this(Arrays.asList(providers));
     }
 
     @Override
-    @Nonnull
-    public List<? extends IndexHook> getIndexHooks(
-            String type, NodeBuilder builder, NodeState root) {
-        List<IndexHook> indexes = Lists.newArrayList();
-        for (IndexHookProvider provider : providers) {
-            indexes.addAll(provider.getIndexHooks(type, builder, root));
+    public Editor getIndexEditor(String type, NodeBuilder builder) {
+        List<Editor> indexes = Lists.newArrayList();
+        for (IndexEditorProvider provider : providers) {
+            Editor e = provider.getIndexEditor(type, builder);
+            if (e != null) {
+                indexes.add(e);
+            }
         }
-        return indexes;
+        return VisibleEditor.wrap(CompositeEditor.compose(indexes));
     }
 }

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/CompositeIndexEditorProvider.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditor.java (from r1475701, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHook.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditor.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditor.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHook.java&r1=1475701&r2=1475754&rev=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditor.java Thu Apr 25 13:20:23 2013
@@ -16,40 +16,14 @@
  */
 package org.apache.jackrabbit.oak.plugins.index;
 
-import javax.annotation.CheckForNull;
-
-import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 /**
  * Represents the content of a QueryIndex as well as a mechanism for keeping
  * this content up to date. <br>
- * An IndexHook listens for changes to the content and updates the index data
+ * An IndexEditor listens for changes to the content and updates the index data
  * accordingly.
  */
-public interface IndexHook extends Editor {
-
-    /**
-     * Return an editor that can be used to recreate this index, or
-     * <code>null</code> if reindexing is not required or is taken care of by
-     * the impl directly using the provided state as a reference <br>
-     * <br>
-     * By providing an Editor an impl could help the IndexManager gain some
-     * performance on account of doing the reindexing in parallel for all
-     * indexers <br>
-     * <br>
-     * <i>Note:</i> All the existing IndexHook impls require a call to
-     * {@link #enter(NodeState, NodeState)} to build initial state before
-     * calling {@link #reindex(NodeState)}, this is enforced via the
-     * IndexManager.
-     * 
-     * @param state
-     *            state can be used to reindex inside the IndexHook directly,
-     *            instead of providing an Editor
-     * 
-     */
-    @CheckForNull
-    Editor reindex(NodeState state) throws CommitFailedException;
+public interface IndexEditor extends Editor {
 
 }

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditor.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditorProvider.java (from r1475701, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookProvider.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditorProvider.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditorProvider.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookProvider.java&r1=1475701&r2=1475754&rev=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditorProvider.java Thu Apr 25 13:20:23 2013
@@ -16,44 +16,36 @@
  */
 package org.apache.jackrabbit.oak.plugins.index;
 
-import java.util.List;
-
-import javax.annotation.Nonnull;
+import javax.annotation.CheckForNull;
 
+import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
 
 /**
- * Extension point for plugging in different kinds of IndexHook providers.
+ * Extension point for plugging in different kinds of IndexEditor providers.
  * 
- * @see IndexHook
+ * @see IndexEditor
  */
-public interface IndexHookProvider {
+public interface IndexEditorProvider {
 
     /**
      * 
      * Each provider knows how to produce a certain type of index. If the
      * <code>type</code> param is of an unknown value, the provider is expected
-     * to return an empty list.
+     * to return {@code null}.
      * 
      * <p>
-     * The <code>builder</code> must point to the repository content node, not
-     * the index content node. Each <code>IndexHook</code> implementation will
-     * have to drill down to its specific index content, and possibly deal with
-     * multiple indexes of the same type.
+     * The <code>builder</code> must points to the index definition node
+     * under which the indexer is expected to store the index content.
      * </p>
      * 
      * @param type
      *            the index type
      * @param builder
-     *            the node state builder of the content node that will be used
-     *            for updates
-     * @param root
-     *            root node state
-     * @return a list of index hooks of the given type
+     *            the node state builder of the index definition node that
+     *            will be used for updates
+     * @return index update editor, or {@code null} if type is unknown
      */
-    @Nonnull
-    List<? extends IndexHook> getIndexHooks(
-            String type, NodeBuilder builder, NodeState root);
-
+    @CheckForNull
+    Editor getIndexEditor(String type, NodeBuilder builder);
 }

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditorProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexEditorProvider.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java?rev=1475754&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java Thu Apr 25 13:20:23 2013
@@ -0,0 +1,210 @@
+/*
+ * 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.plugins.index;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Lists.newArrayListWithCapacity;
+import static org.apache.jackrabbit.oak.api.Type.BOOLEAN;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.ASYNC_PROPERTY_NAME;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.REINDEX_PROPERTY_NAME;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_PROPERTY_NAME;
+import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.MISSING_NODE;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.spi.commit.CompositeEditor;
+import org.apache.jackrabbit.oak.spi.commit.Editor;
+import org.apache.jackrabbit.oak.spi.commit.EditorDiff;
+import org.apache.jackrabbit.oak.spi.commit.VisibleEditor;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+
+class IndexUpdate implements Editor {
+
+    private final IndexEditorProvider provider;
+
+    private final boolean async;
+
+    private final NodeState root;
+
+    private final NodeBuilder builder;
+
+    private final List<Editor> editors = newArrayList();
+
+    IndexUpdate(
+            IndexEditorProvider provider, boolean async,
+            NodeState root, NodeBuilder builder) {
+        this.provider = checkNotNull(provider);
+        this.async = async;
+        this.root = checkNotNull(root);
+        this.builder = checkNotNull(builder);
+    }
+
+    private IndexUpdate(IndexUpdate parent, String name) {
+        checkNotNull(parent);
+        this.provider = parent.provider;
+        this.async = parent.async;
+        this.root = parent.root;
+        this.builder = parent.builder.child(checkNotNull(name));
+    }
+
+    private static String getString(NodeBuilder builder, String name) {
+        PropertyState property = builder.getProperty(name);
+        if (property != null && property.getType() == STRING) {
+            return property.getValue(STRING);
+        } else {
+            return null;
+        }
+    }
+
+    private static boolean getBoolean(NodeBuilder builder, String name) {
+        PropertyState property = builder.getProperty(name);
+        return property != null
+                && property.getType() == BOOLEAN
+                && property.getValue(BOOLEAN);
+    }
+
+    @Override
+    public void enter(NodeState before, NodeState after)
+            throws CommitFailedException {
+        List<Editor> reindex = newArrayList();
+        if (builder.hasChildNode(INDEX_DEFINITIONS_NAME)) {
+            Map<String, Editor> tempEditors = new HashMap<String, Editor>();
+            NodeBuilder definitions = builder.child(INDEX_DEFINITIONS_NAME);
+            for (String name : definitions.getChildNodeNames()) {
+                NodeBuilder definition = definitions.child(name);
+                if (async == getBoolean(definition, ASYNC_PROPERTY_NAME)) {
+                    String type = getString(definition, TYPE_PROPERTY_NAME);
+                    Editor editor = null;
+                    if (tempEditors.containsKey(type)) {
+                        editor = tempEditors.get(type);
+                    } else {
+                        editor = provider.getIndexEditor(type, builder);
+                        tempEditors.put(type, editor);
+                    }
+
+                    if (editor == null) {
+                        // trigger reindexing when an indexer becomes available
+                        definition.setProperty(REINDEX_PROPERTY_NAME, true);
+                    } else if (getBoolean(definition, REINDEX_PROPERTY_NAME)) {
+                        definition.setProperty(REINDEX_PROPERTY_NAME, false);
+                        definition.removeChildNode(":index");
+                        reindex.add(editor);
+                    } else {
+                        editors.add(VisibleEditor.wrap(editor));
+                    }
+                }
+            }
+        }
+
+        // no-op when reindex is empty
+        CommitFailedException exception = EditorDiff.process(
+                VisibleEditor.wrap(CompositeEditor.compose(reindex)), MISSING_NODE, after);
+        if (exception != null) {
+            throw exception;
+        }
+
+        for (Editor editor : editors) {
+            editor.enter(before, after);
+        }
+    }
+
+    @Override
+    public void leave(NodeState before, NodeState after)
+            throws CommitFailedException {
+        for (Editor editor : editors) {
+            editor.leave(before, after);
+        }
+    }
+
+    @Override
+    public void propertyAdded(PropertyState after)
+            throws CommitFailedException {
+        for (Editor editor : editors) {
+            editor.propertyAdded(after);
+        }
+    }
+
+    @Override
+    public void propertyChanged(PropertyState before, PropertyState after)
+            throws CommitFailedException {
+        for (Editor editor : editors) {
+            editor.propertyChanged(before, after);
+        }
+    }
+
+    @Override
+    public void propertyDeleted(PropertyState before)
+            throws CommitFailedException {
+        for (Editor editor : editors) {
+            editor.propertyDeleted(before);
+        }
+    }
+
+    @Override @Nonnull
+    public Editor childNodeAdded(String name, NodeState after)
+            throws CommitFailedException {
+        List<Editor> children = newArrayListWithCapacity(1 + editors.size());
+        children.add(new IndexUpdate(this, name));
+        for (Editor editor : editors) {
+            Editor child = editor.childNodeAdded(name, after);
+            if (child != null) {
+                children.add(child);
+            }
+        }
+        return CompositeEditor.compose(children);
+    }
+
+    @Override @Nonnull
+    public Editor childNodeChanged(
+            String name, NodeState before, NodeState after)
+            throws CommitFailedException {
+        List<Editor> children = newArrayListWithCapacity(1 + editors.size());
+        children.add(new IndexUpdate(this, name));
+        for (Editor editor : editors) {
+            Editor child = editor.childNodeChanged(name, before, after);
+            if (child != null) {
+                children.add(child);
+            }
+        }
+        return CompositeEditor.compose(children);
+    }
+
+    @Override @CheckForNull
+    public Editor childNodeDeleted(String name, NodeState before)
+            throws CommitFailedException {
+        List<Editor> children = newArrayListWithCapacity(editors.size());
+        for (Editor editor : editors) {
+            Editor child = editor.childNodeDeleted(name, before);
+            if (child != null) {
+                children.add(child);
+            }
+        }
+        return CompositeEditor.compose(children);
+    }
+
+}

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java?rev=1475754&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java Thu Apr 25 13:20:23 2013
@@ -0,0 +1,47 @@
+/*
+ * 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.plugins.index;
+
+import javax.annotation.CheckForNull;
+
+import org.apache.jackrabbit.oak.spi.commit.Editor;
+import org.apache.jackrabbit.oak.spi.commit.EditorProvider;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+
+public class IndexUpdateProvider implements EditorProvider {
+
+    private final IndexEditorProvider provider;
+
+    private final boolean async;
+
+    public IndexUpdateProvider(IndexEditorProvider provider) {
+        this(provider, false);
+    }
+
+    public IndexUpdateProvider(IndexEditorProvider provider, boolean async) {
+        this.provider = provider;
+        this.async = async;
+    }
+
+    @Override @CheckForNull
+    public Editor getRootEditor(
+            NodeState before, NodeState after, NodeBuilder builder) {
+        return new IndexUpdate(provider, async, after, builder);
+    }
+
+}

Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java Thu Apr 25 13:20:23 2013
@@ -18,26 +18,14 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.nodetype;
 
-import java.util.Set;
-
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.NodeTypeIterator;
-
 import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.commons.PathUtils;
-import org.apache.jackrabbit.oak.core.ReadOnlyTree;
-import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
-import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
+import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexLookup;
 import org.apache.jackrabbit.oak.spi.query.Cursor;
 import org.apache.jackrabbit.oak.spi.query.Cursors;
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
-import com.google.common.collect.Sets;
-
 /**
  * <code>NodeTypeIndex</code> implements a {@link QueryIndex} using
  * {@link Property2IndexLookup}s on <code>jcr:primaryType</code> and

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHook.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHook.java Thu Apr 25 13:20:23 2013
@@ -43,9 +43,10 @@ import java.util.Set;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.index.IndexHook;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
 import org.apache.jackrabbit.oak.plugins.index.p2.strategy.ContentMirrorStoreStrategy;
 import org.apache.jackrabbit.oak.plugins.index.p2.strategy.IndexStoreStrategy;
+import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -54,7 +55,7 @@ import com.google.common.collect.Immutab
 import com.google.common.collect.Lists;
 
 /**
- * {@link IndexHook} implementation that is responsible for keeping the
+ * {@link IndexEditor} implementation that is responsible for keeping the
  * {@link Property2Index} up to date.
  * <br>
  * There is a tree of PropertyIndexDiff objects, each object represents the
@@ -63,7 +64,7 @@ import com.google.common.collect.Lists;
  * @see Property2Index
  * @see Property2IndexLookup
  */
-class Property2IndexHook implements IndexHook, Closeable {
+class Property2IndexHook implements IndexEditor, Closeable {
 
     protected static String propertyNames = "propertyNames";
 
@@ -77,7 +78,7 @@ class Property2IndexHook implements Inde
     private final Property2IndexHook parent;
 
     /**
-     * The node (never null).
+     * The node (can be null in the case of a deleted node).
      */
     private final NodeBuilder node;
 
@@ -101,36 +102,38 @@ class Property2IndexHook implements Inde
     private final Map<String, List<Property2IndexHookUpdate>> indexMap;
 
     /**
-     * The root node state.
-     */
-    private final NodeState root;
-
-    /**
      * The {@code /jcr:system/jcr:nodeTypes} subtree.
      */
     private final NodeState types;
 
-    public Property2IndexHook(NodeBuilder builder, NodeState root) {
-        this(null, builder, null, "/",
-                new HashMap<String, List<Property2IndexHookUpdate>>(), root);
+    public Property2IndexHook(NodeBuilder builder) {
+        this(null, builder, null, "/");
     }
 
     private Property2IndexHook(Property2IndexHook parent, String nodeName) {
-        this(parent, getChildNode(parent.node, nodeName), nodeName, null,
-                parent.indexMap, parent.root);
+        this(parent, getChildNode(parent.node, nodeName), nodeName, null);
     }
 
     private Property2IndexHook(Property2IndexHook parent, NodeBuilder node,
-            String nodeName, String path,
-            Map<String, List<Property2IndexHookUpdate>> indexMap,
-            NodeState root) {
+            String nodeName, String path) {
         this.parent = parent;
         this.node = node;
         this.nodeName = nodeName;
         this.path = path;
-        this.indexMap = indexMap;
-        this.root = root;
-        this.types = root.getChildNode(JCR_SYSTEM).getChildNode(JCR_NODE_TYPES);
+
+        if (parent == null) {
+            this.indexMap = new HashMap<String, List<Property2IndexHookUpdate>>();
+            if (node.hasChildNode(JCR_SYSTEM)) {
+                NodeBuilder typeNB = node.getChildNode(JCR_SYSTEM)
+                        .getChildNode(JCR_NODE_TYPES);
+                this.types = typeNB.getNodeState();
+            } else {
+                this.types = EmptyNodeState.MISSING_NODE;
+            }
+        } else {
+            this.indexMap = parent.indexMap;
+            this.types = parent.types;
+        }
     }
 
     private static NodeBuilder getChildNode(NodeBuilder node, String name) {
@@ -297,22 +300,6 @@ class Property2IndexHook implements Inde
         return childNodeChanged(name, before, EMPTY_NODE);
     }
 
-    @Override
-    public Editor reindex(NodeState state) {
-        boolean reindex = false;
-        for (List<Property2IndexHookUpdate> updateList : indexMap.values()) {
-            for (Property2IndexHookUpdate update : updateList) {
-                if (update.getAndResetReindexFlag()) {
-                    reindex = true;
-                }
-            }
-        }
-        if (reindex) {
-            return new Property2IndexHook(node, root);
-        }
-        return null;
-    }
-
     // -----------------------------------------------------< Closeable >--
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookProvider.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookProvider.java Thu Apr 25 13:20:23 2013
@@ -16,37 +16,31 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.p2;
 
-import java.util.List;
-
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Service;
-import org.apache.jackrabbit.oak.plugins.index.IndexHook;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
+import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
-
-import com.google.common.collect.ImmutableList;
 
 /**
  * Service that provides PropertyIndex based IndexHooks.
  * 
  * @see Property2IndexHook
- * @see IndexHookProvider
+ * @see IndexEditorProvider
  * 
  */
 @Component
-@Service(IndexHookProvider.class)
-public class Property2IndexHookProvider implements IndexHookProvider {
+@Service(IndexEditorProvider.class)
+public class Property2IndexHookProvider implements IndexEditorProvider {
 
     public static final String TYPE = "p2";
 
     @Override
-    public List<? extends IndexHook> getIndexHooks(
-            String type, NodeBuilder builder, NodeState root) {
+    public Editor getIndexEditor(String type, NodeBuilder builder) {
         if (TYPE.equals(type)) {
-            return ImmutableList.of(new Property2IndexHook(builder, root));
+            return new Property2IndexHook(builder);
         }
-        return ImmutableList.of();
+        return null;
     }
 
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookUpdate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookUpdate.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookUpdate.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookUpdate.java Thu Apr 25 13:20:23 2013
@@ -18,7 +18,6 @@ package org.apache.jackrabbit.oak.plugin
 
 import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES;
 import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
-import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.REINDEX_PROPERTY_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.p2.Property2Index.encode;
 
 import java.util.Collections;
@@ -161,14 +160,6 @@ class Property2IndexHookUpdate {
         return path;
     }
 
-    boolean getAndResetReindexFlag() {
-        PropertyState reindexPS = node.getProperty(REINDEX_PROPERTY_NAME);
-        boolean reindex = reindexPS == null
-                || (reindexPS != null && reindexPS.getValue(Type.BOOLEAN));
-        node.setProperty(REINDEX_PROPERTY_NAME, false);
-        return reindex;
-    }
-
     public boolean matches(
             String path, Set<String> primaryTypes, Set<String> mixinTypes) {
         if (this.primaryTypes == null) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java Thu Apr 25 13:20:23 2013
@@ -21,8 +21,8 @@ package org.apache.jackrabbit.oak.spi.li
 import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookManager;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.EditorHook;
 import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
@@ -37,12 +37,12 @@ public final class OakInitializer {
 
     public static void initialize(@Nonnull NodeStore store,
                                   @Nonnull RepositoryInitializer initializer,
-                                  @Nonnull IndexHookProvider indexHook) {
+                                  @Nonnull IndexEditorProvider indexHook) {
         NodeStoreBranch branch = store.branch();
         NodeState before = branch.getHead();
         branch.setRoot(initializer.initialize(before));
         try {
-            branch.merge(new EditorHook(IndexHookManager.of(indexHook)));
+            branch.merge(new EditorHook(new IndexUpdateProvider(indexHook)));
         } catch (CommitFailedException e) {
             throw new RuntimeException(e);
         }
@@ -51,7 +51,7 @@ public final class OakInitializer {
     public static void initialize(@Nonnull Iterable<WorkspaceInitializer> initializer,
                                   @Nonnull NodeStore store,
                                   @Nonnull String workspaceName,
-                                  @Nonnull IndexHookProvider indexHook,
+                                  @Nonnull IndexEditorProvider indexHook,
                                   @Nonnull QueryIndexProvider indexProvider,
                                   @Nonnull CommitHook commitHook) {
         NodeStoreBranch branch = store.branch();
@@ -61,7 +61,7 @@ public final class OakInitializer {
         }
         branch.setRoot(root);
         try {
-            branch.merge(new EditorHook(IndexHookManager.of(indexHook)));
+            branch.merge(new EditorHook(new IndexUpdateProvider(indexHook)));
         } catch (CommitFailedException e) {
             throw new RuntimeException(e);
         }

Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java?rev=1475754&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java Thu Apr 25 13:20:23 2013
@@ -0,0 +1,218 @@
+/*
+ * 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.plugins.index;
+
+import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
+import static org.apache.jackrabbit.JcrConstants.NT_BASE;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.REINDEX_PROPERTY_NAME;
+import static org.apache.jackrabbit.oak.plugins.index.IndexUtils.createIndexDefinition;
+import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
+import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Set;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexLookup;
+import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
+import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
+import org.apache.jackrabbit.oak.query.index.FilterImpl;
+import org.apache.jackrabbit.oak.spi.commit.EditorHook;
+import org.apache.jackrabbit.oak.spi.query.Filter;
+import org.apache.jackrabbit.oak.spi.query.PropertyValues;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+
+public class IndexUpdateTest {
+
+    private NodeState root = new InitialContent().initialize(EMPTY_NODE);
+
+    private NodeBuilder builder = root.builder();
+
+    /**
+     * Simple Test
+     * <ul>
+     * <li>Add an index definition</li>
+     * <li>Add some content</li>
+     * <li>Search & verify</li>
+     * </ul>
+     * 
+     */
+    @Test
+    public void test() throws Exception {
+        createIndexDefinition(builder.child("oak:index"), "rootIndex", true,
+                false, ImmutableSet.of("foo"), null);
+        createIndexDefinition(
+                builder.child("newchild").child("other").child("oak:index"),
+                "subIndex", true, false, ImmutableSet.of("foo"), null);
+
+        NodeState before = builder.getNodeState();
+
+        // Add nodes
+        builder.child("testRoot").setProperty("foo", "abc");
+        builder.child("newchild").child("other").child("testChild")
+                .setProperty("foo", "xyz");
+
+        NodeState after = builder.getNodeState();
+
+        IndexUpdateProvider p = new IndexUpdateProvider(
+                new Property2IndexHookProvider());
+        EditorHook hook = new EditorHook(p);
+        NodeState indexed = hook.processCommit(before, after);
+
+        // first check that the index content nodes exist
+        checkPathExists(indexed, "oak:index", "rootIndex", ":index");
+        checkPathExists(indexed, "newchild", "other", "oak:index", "subIndex",
+                ":index");
+
+        Property2IndexLookup lookup = new Property2IndexLookup(indexed);
+        assertEquals(ImmutableSet.of("testRoot"), find(lookup, "foo", "abc"));
+
+        Property2IndexLookup lookupChild = new Property2IndexLookup(indexed
+                .getChildNode("newchild").getChildNode("other"));
+        assertEquals(ImmutableSet.of("testChild"),
+                find(lookupChild, "foo", "xyz"));
+        assertEquals(ImmutableSet.of(), find(lookupChild, "foo", "abc"));
+
+    }
+
+    /**
+     * Reindex Test
+     * <ul>
+     * <li>Add some content</li>
+     * <li>Add an index definition with the reindex flag set</li>
+     * <li>Search & verify</li>
+     * </ul>
+     */
+    @Test
+    public void testReindex() throws Exception {
+        builder.child("testRoot").setProperty("foo", "abc");
+        NodeState before = builder.getNodeState();
+        createIndexDefinition(builder.child("oak:index"), "rootIndex", true,
+                false, ImmutableSet.of("foo"), null);
+
+        NodeState after = builder.getNodeState();
+
+        IndexUpdateProvider p = new IndexUpdateProvider(
+                new Property2IndexHookProvider());
+        EditorHook hook = new EditorHook(p);
+        NodeState indexed = hook.processCommit(before, after);
+
+        // first check that the index content nodes exist
+        NodeState ns = checkPathExists(indexed, "oak:index", "rootIndex");
+        checkPathExists(ns, ":index");
+        PropertyState ps = ns.getProperty(REINDEX_PROPERTY_NAME);
+        assertNotNull(ps);
+        assertFalse(ps.getValue(Type.BOOLEAN));
+
+        // next, lookup
+        Property2IndexLookup lookup = new Property2IndexLookup(indexed);
+        assertEquals(ImmutableSet.of("testRoot"), find(lookup, "foo", "abc"));
+    }
+
+    /**
+     * Reindex Test
+     * <ul>
+     * <li>Add some content & an index definition</li>
+     * <li>Update the index def by setting the reindex flag to true</li>
+     * <li>Search & verify</li>
+     * </ul>
+     */
+    @Test
+    public void testReindex2() throws Exception {
+        builder.child("testRoot").setProperty("foo", "abc");
+
+        createIndexDefinition(builder.child("oak:index"), "rootIndex", true,
+                false, ImmutableSet.of("foo"), null).removeProperty("reindex");
+
+        NodeState before = builder.getNodeState();
+        builder.child("oak:index").child("rootIndex")
+                .setProperty(REINDEX_PROPERTY_NAME, true);
+        NodeState after = builder.getNodeState();
+
+        IndexUpdateProvider p = new IndexUpdateProvider(
+                new Property2IndexHookProvider());
+        EditorHook hook = new EditorHook(p);
+        NodeState indexed = hook.processCommit(before, after);
+
+        // first check that the index content nodes exist
+        NodeState ns = checkPathExists(indexed, "oak:index", "rootIndex");
+        checkPathExists(ns, ":index");
+        PropertyState ps = ns.getProperty(REINDEX_PROPERTY_NAME);
+        assertNotNull(ps);
+        assertFalse(ps.getValue(Type.BOOLEAN));
+
+        // next, lookup
+        Property2IndexLookup lookup = new Property2IndexLookup(indexed);
+        assertEquals(ImmutableSet.of("testRoot"), find(lookup, "foo", "abc"));
+    }
+
+    @Test
+    public void testIndexDefinitions() throws Exception {
+        createIndexDefinition(builder.child("oak:index"), "existing", true,
+                false, ImmutableSet.of("foo"), null);
+
+        NodeState before = builder.getNodeState();
+        // Add index definition
+        createIndexDefinition(builder.child("oak:index"), "foo", true, false,
+                ImmutableSet.of("foo"), null);
+        createIndexDefinition(
+                builder.child("test").child("other").child("oak:index"),
+                "index2", true, false, ImmutableSet.of("foo"), null);
+        NodeState after = builder.getNodeState();
+
+        IndexUpdateProvider p = new IndexUpdateProvider(
+                new Property2IndexHookProvider());
+        EditorHook hook = new EditorHook(p);
+        NodeState indexed = hook.processCommit(before, after);
+
+        // check that the index content nodes exist
+        checkPathExists(indexed, "oak:index", "existing", ":index");
+        checkPathExists(indexed, "test", "other", "oak:index", "index2",
+                ":index");
+    }
+
+    private Set<String> find(Property2IndexLookup lookup, String name,
+            String value) {
+        NodeState system = root.getChildNode(JCR_SYSTEM);
+        NodeState types = system.getChildNode(JCR_NODE_TYPES);
+        NodeState type = types.getChildNode(NT_BASE);
+        SelectorImpl selector = new SelectorImpl(type, NT_BASE);
+        Filter filter = new FilterImpl(selector, "SELECT * FROM [nt:base]");
+        return Sets.newHashSet(lookup.query(filter, name,
+                PropertyValues.newString(value)));
+    }
+
+    private static NodeState checkPathExists(NodeState state, String... verify) {
+        NodeState c = state;
+        for (String p : verify) {
+            c = c.getChildNode(p);
+            assertTrue(c.exists());
+        }
+        return c;
+    }
+
+}

Propchange: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java Thu Apr 25 13:20:23 2013
@@ -28,9 +28,9 @@ import org.apache.jackrabbit.mk.core.Mic
 import org.apache.jackrabbit.oak.api.Blob;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
-import org.apache.jackrabbit.oak.plugins.index.CompositeIndexHookProvider;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookManager;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexHookProvider;
 import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
 import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
@@ -64,8 +64,8 @@ public class NodeTypeIndexTest {
         store = new KernelNodeStore(mk);
         // initialize node types & index definitions
         OakInitializer.initialize(store, new InitialContent(),
-                CompositeIndexHookProvider
-                        .compose(new ArrayList<IndexHookProvider>()));
+                CompositeIndexEditorProvider
+                        .compose(new ArrayList<IndexEditorProvider>()));
     }
 
     @Test
@@ -79,8 +79,8 @@ public class NodeTypeIndexTest {
         addFile(root, "file-1");
 
         branch.setRoot(root.getNodeState());
-        branch.merge(new EditorHook(IndexHookManager
-                .of(new Property2IndexHookProvider())));
+        branch.merge(new EditorHook(new IndexUpdateProvider(
+                new Property2IndexHookProvider())));
 
         NodeState rootState = store.getRoot();
         NodeTypeIndex index = new NodeTypeIndex();

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexTest.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexTest.java Thu Apr 25 13:20:23 2013
@@ -75,7 +75,7 @@ public class Property2IndexTest {
         }
         NodeState after = builder.getNodeState();
 
-        EditorDiff.process(new Property2IndexHook(builder, after), before, after);
+        EditorDiff.process(new Property2IndexHook(builder), before, after);
         NodeState indexed = builder.getNodeState();
 
         FilterImpl f = createFilter(indexed, NT_BASE);
@@ -129,7 +129,7 @@ public class Property2IndexTest {
         NodeState after = builder.getNodeState();
 
         // Add an index
-        EditorDiff.process(new Property2IndexHook(builder, after), before, after);
+        EditorDiff.process(new Property2IndexHook(builder), before, after);
         NodeState indexed = builder.getNodeState();
 
         FilterImpl f = createFilter(indexed, NT_BASE);
@@ -190,7 +190,7 @@ public class Property2IndexTest {
                 .setProperty("foo", Arrays.asList("abc", "def"), Type.STRINGS);
         NodeState after = builder.getNodeState();
 
-        EditorDiff.process(new Property2IndexHook(builder, after), before, after);
+        EditorDiff.process(new Property2IndexHook(builder), before, after);
         NodeState indexed = builder.getNodeState();
 
         FilterImpl f = createFilter(indexed, "nt:unstructured");
@@ -256,7 +256,7 @@ public class Property2IndexTest {
         NodeState after = builder.getNodeState();
 
         // Add an index
-        EditorDiff.process(new Property2IndexHook(builder, after), before, after);
+        EditorDiff.process(new Property2IndexHook(builder), before, after);
         NodeState indexed = builder.getNodeState();
 
         FilterImpl f = createFilter(after, "nt:unstructured");
@@ -298,7 +298,7 @@ public class Property2IndexTest {
         NodeState after = builder.getNodeState();
 
         CommitFailedException expected =
-                EditorDiff.process(new Property2IndexHook(builder, after), before, after);
+                EditorDiff.process(new Property2IndexHook(builder), before, after);
         assertNotNull("Unique constraint should be respected", expected);
     }
 
@@ -327,7 +327,7 @@ public class Property2IndexTest {
         NodeState after = builder.getNodeState();
 
         CommitFailedException unexpected = EditorDiff.process(
-                new Property2IndexHook(builder, after), before, after);
+                new Property2IndexHook(builder), before, after);
         assertNull(unexpected);
     }
 
@@ -356,7 +356,7 @@ public class Property2IndexTest {
         NodeState after = builder.getNodeState();
 
         CommitFailedException expected = EditorDiff.process(
-                new Property2IndexHook(builder, after), before, after);
+                new Property2IndexHook(builder), before, after);
         assertNotNull("Unique constraint should be respected", expected);
     }
 
@@ -386,7 +386,7 @@ public class Property2IndexTest {
         NodeState after = builder.getNodeState();
 
         CommitFailedException unexpected = EditorDiff.process(
-                new Property2IndexHook(builder, after), before, after);
+                new Property2IndexHook(builder), before, after);
         assertNull(unexpected);
     }
 

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java Thu Apr 25 13:20:23 2013
@@ -25,7 +25,7 @@ import org.apache.jackrabbit.mk.api.Micr
 import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.plugins.commit.ConflictValidatorProvider;
 import org.apache.jackrabbit.oak.plugins.commit.JcrConflictHandler;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.nodetype.NodeTypeIndexProvider;
 import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexHookProvider;
 import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexProvider;
@@ -96,7 +96,7 @@ public class Jcr {
     }
 
     @Nonnull
-    public final Jcr with(@Nonnull IndexHookProvider indexHookProvider) {
+    public final Jcr with(@Nonnull IndexEditorProvider indexHookProvider) {
         oak.with(checkNotNull(indexHookProvider));
         return this;
     }

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexDiff.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexDiff.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexDiff.java Thu Apr 25 13:20:23 2013
@@ -32,7 +32,7 @@ import java.util.Map;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.index.IndexHook;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -43,13 +43,13 @@ import org.apache.tika.parser.AutoDetect
 import org.apache.tika.parser.Parser;
 
 /**
- * {@link IndexHook} implementation that is responsible for keeping the
+ * {@link IndexEditor} implementation that is responsible for keeping the
  * {@link LuceneIndex} up to date
  * 
  * @see LuceneIndex
  * 
  */
-public class LuceneIndexDiff implements IndexHook, Closeable {
+public class LuceneIndexDiff implements IndexEditor, Closeable {
 
     private final LuceneIndexDiff parent;
 
@@ -203,20 +203,6 @@ public class LuceneIndexDiff implements 
         return null;
     }
 
-    @Override
-    public Editor reindex(NodeState state) {
-        boolean reindex = false;
-        for (LuceneIndexUpdate update : updates.values()) {
-            if (update.getAndResetReindexFlag()) {
-                reindex = true;
-            }
-        }
-        if (reindex) {
-            return new LuceneIndexDiff(node);
-        }
-        return null;
-    }
-
     // -----------------------------------------------------< Closeable >--
 
     @Override

Copied: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java (from r1475736, jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexHookProvider.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java?p2=jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java&p1=jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexHookProvider.java&r1=1475736&r2=1475754&rev=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexHookProvider.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java Thu Apr 25 13:20:23 2013
@@ -18,35 +18,30 @@ package org.apache.jackrabbit.oak.plugin
 
 import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.TYPE_LUCENE;
 
-import java.util.List;
-
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Service;
-import org.apache.jackrabbit.oak.plugins.index.IndexHook;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
+import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
-
-import com.google.common.collect.ImmutableList;
 
 /**
- * Service that provides Lucene based {@link IndexHook}s
+ * Service that provides Lucene based {@link IndexEditor}s
  * 
  * @see LuceneIndexDiff
- * @see IndexHookProvider
+ * @see IndexEditorProvider
  * 
  */
 @Component
-@Service(IndexHookProvider.class)
-public class LuceneIndexHookProvider implements IndexHookProvider {
+@Service(IndexEditorProvider.class)
+public class LuceneIndexEditorProvider implements IndexEditorProvider {
 
     @Override
-    public List<? extends IndexHook> getIndexHooks(
-            String type, NodeBuilder builder, NodeState root) {
+    public Editor getIndexEditor(String type, NodeBuilder builder) {
         if (TYPE_LUCENE.equals(type)) {
-            return ImmutableList.of(new LuceneIndexDiff(builder));
+            return new LuceneIndexDiff(builder);
         }
-        return ImmutableList.of();
+        return null;
     }
 
 }

Propchange: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorProvider.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/LuceneOakRepositoryStub.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/LuceneOakRepositoryStub.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/LuceneOakRepositoryStub.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/jcr/LuceneOakRepositoryStub.java Thu Apr 25 13:20:23 2013
@@ -21,7 +21,7 @@ import java.util.Properties;
 import javax.jcr.RepositoryException;
 
 import org.apache.jackrabbit.oak.plugins.index.lucene.LowCostLuceneIndexProvider;
-import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneInitializerHelper;
 
 public class LuceneOakRepositoryStub extends OakRepositoryStubBase {
@@ -35,6 +35,6 @@ public class LuceneOakRepositoryStub ext
     protected void preCreateRepository(Jcr jcr) {
         jcr.with(new LuceneInitializerHelper("/oak:index/luceneGlobal"))
                 .with(new LowCostLuceneIndexProvider())
-                .with(new LuceneIndexHookProvider());
+                .with(new LuceneIndexEditorProvider());
     }
 }

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexQueryTest.java Thu Apr 25 13:20:23 2013
@@ -50,7 +50,7 @@ public class LuceneIndexQueryTest extend
         return new Oak().with(new InitialContent())
             .with(new OpenSecurityProvider())
             .with(new LowCostLuceneIndexProvider())
-            .with(new LuceneIndexHookProvider())
+            .with(new LuceneIndexEditorProvider())
             .createContentRepository();
     }
 

Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/OakSolrUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/OakSolrUtils.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/OakSolrUtils.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/OakSolrUtils.java Thu Apr 25 13:20:23 2013
@@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.plugin
 import java.io.IOException;
 import javax.annotation.Nonnull;
 
-import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.solr.index.SolrIndexHookProvider;
 import org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndexProvider;
 import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
@@ -47,19 +47,19 @@ public class OakSolrUtils {
     }
 
     /**
-     * adapts the OSGi Solr {@link IndexHookProvider} service
+     * adapts the OSGi Solr {@link IndexEditorProvider} service
      *
      * @return a {@link SolrIndexHookProvider}
      */
-    public static IndexHookProvider adaptOsgiIndexHookProvider() {
-        IndexHookProvider indexHookProvider = null;
+    public static IndexEditorProvider adaptOsgiIndexHookProvider() {
+        IndexEditorProvider indexHookProvider = null;
         try {
             BundleContext ctx = BundleReference.class.cast(SolrIndexHookProvider.class
                     .getClassLoader()).getBundle().getBundleContext();
 
-            ServiceReference serviceReference = ctx.getServiceReference(IndexHookProvider.class.getName());
+            ServiceReference serviceReference = ctx.getServiceReference(IndexEditorProvider.class.getName());
             if (serviceReference != null) {
-                indexHookProvider = IndexHookProvider.class.cast(ctx.getService(serviceReference));
+                indexHookProvider = IndexEditorProvider.class.cast(ctx.getService(serviceReference));
             }
         } catch (Throwable e) {
             // do nothing

Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexDiff.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexDiff.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexDiff.java Thu Apr 25 13:20:23 2013
@@ -24,7 +24,7 @@ import java.util.Map;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.index.IndexHook;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
 import org.apache.jackrabbit.oak.plugins.index.solr.OakSolrConfiguration;
 import org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
@@ -39,7 +39,7 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 
 /**
- * {@link IndexHook} implementation that is responsible for keeping the
+ * {@link IndexEditor} implementation that is responsible for keeping the
  * {@link org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex} up to date
  * <p/>
  * This handles index updates by keeping a {@link Map} of <code>String</code>
@@ -48,7 +48,7 @@ import static org.apache.jackrabbit.oak.
  * @see org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex
  * @see SolrIndexHook
  */
-public class SolrIndexDiff implements IndexHook, Closeable {
+public class SolrIndexDiff implements IndexEditor, Closeable {
 
     private final SolrIndexDiff parent;
 
@@ -202,20 +202,6 @@ public class SolrIndexDiff implements In
     }
 
     @Override
-    public Editor reindex(NodeState state) {
-        boolean reindex = false;
-        for (SolrIndexUpdate update : updates.values()) {
-            if (update.getAndResetReindexFlag()) {
-                reindex = true;
-            }
-        }
-        if (reindex) {
-            return new SolrIndexDiff(node, solrServer, configuration);
-        }
-        return null;
-    }
-
-    @Override
     public void close() throws IOException {
         for (SolrIndexUpdate update : updates.values()) {
             update.close();

Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHook.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHook.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHook.java Thu Apr 25 13:20:23 2013
@@ -26,7 +26,7 @@ import javax.annotation.Nonnull;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.index.IndexHook;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -39,7 +39,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * {@link IndexHook} implementation that is responsible for keeping the
+ * {@link IndexEditor} implementation that is responsible for keeping the
  * {@link org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex} up to date
  * <p/>
  * This handles the status of the index update inside a flat list of {@link SolrInputDocument}s
@@ -51,7 +51,7 @@ import org.slf4j.LoggerFactory;
  * @see org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex
  * @see SolrIndexDiff
  */
-public class SolrIndexHook implements IndexHook, Closeable {
+public class SolrIndexHook implements IndexEditor, Closeable {
 
     private static final Logger log = LoggerFactory.getLogger(SolrNodeStateDiff.class);
 
@@ -235,19 +235,6 @@ public class SolrIndexHook implements In
     }
 
     @Override
-    public Editor reindex(NodeState state) throws CommitFailedException {
-        try {
-            close();
-            deleteByIdQueryBuilder.append(getPath()).append("*");
-            solrInputDocuments.addAll(docsFromState(getPath(), state));
-            apply();
-        } catch (IOException e) {
-            throw new CommitFailedException("Solr", 2, "Re-index failure", e);
-        }
-        return null;
-    }
-
-    @Override
     public void close() throws IOException {
         solrInputDocuments.clear();
         deleteByIdQueryBuilder.delete(4, deleteByIdQueryBuilder.length());

Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHookProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHookProvider.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHookProvider.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHookProvider.java Thu Apr 25 13:20:23 2013
@@ -16,34 +16,32 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.solr.index;
 
-import java.util.List;
-import javax.annotation.Nonnull;
+
+import javax.annotation.CheckForNull;
 
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.ReferencePolicyOption;
 import org.apache.felix.scr.annotations.Service;
-import org.apache.jackrabbit.oak.plugins.index.IndexHook;
-import org.apache.jackrabbit.oak.plugins.index.IndexHookProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.solr.OakSolrConfigurationProvider;
 import org.apache.jackrabbit.oak.plugins.index.solr.SolrServerProvider;
 import org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex;
+import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableList;
-
 /**
- * Service that provides {@link SolrIndexHookProvider} based {@link IndexHook}s.
+ * Service that provides {@link SolrIndexHookProvider} based {@link IndexEditor}s.
  *
- * @see org.apache.jackrabbit.oak.plugins.index.IndexHookProvider
+ * @see org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider
  */
 @Component
-@Service(IndexHookProvider.class)
-public class SolrIndexHookProvider implements IndexHookProvider {
+@Service(IndexEditorProvider.class)
+public class SolrIndexHookProvider implements IndexEditorProvider {
 
     private final Logger log = LoggerFactory.getLogger(SolrIndexHookProvider.class);
 
@@ -61,22 +59,20 @@ public class SolrIndexHookProvider imple
         this.oakSolrConfigurationProvider = oakSolrConfigurationProvider;
     }
 
-    @Override
-    @Nonnull
-    public List<? extends IndexHook> getIndexHooks(
-            String type, NodeBuilder builder, NodeState root) {
+    @Override @CheckForNull
+    public Editor getIndexEditor(String type, NodeBuilder builder) {
         if (SolrQueryIndex.TYPE.equals(type) && solrServerProvider != null && oakSolrConfigurationProvider != null) {
             try {
                 if (log.isDebugEnabled()) {
                     log.debug("Creating a Solr index hook");
                 }
-                IndexHook indexHook = new SolrIndexDiff(builder, solrServerProvider.getSolrServer(), oakSolrConfigurationProvider.getConfiguration());
-                return ImmutableList.of(indexHook);
+                IndexEditor indexHook = new SolrIndexDiff(builder, solrServerProvider.getSolrServer(), oakSolrConfigurationProvider.getConfiguration());
+                return indexHook;
             } catch (Exception e) {
                 log.error("unable to create Solr IndexHook ", e);
             }
         }
-        return ImmutableList.of();
+        return null;
     }
 
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrNodeStateDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrNodeStateDiff.java?rev=1475754&r1=1475753&r2=1475754&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrNodeStateDiff.java (original)
+++ jackrabbit/oak/trunk/oak-solr-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrNodeStateDiff.java Thu Apr 25 13:20:23 2013
@@ -24,7 +24,7 @@ import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.index.IndexHook;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
@@ -36,7 +36,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * A Solr based {@link IndexHook}
+ * A Solr based {@link IndexEditor}
  */
 class SolrNodeStateDiff implements NodeStateDiff {