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 th...@apache.org on 2012/04/26 15:52:26 UTC

svn commit: r1330854 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit: mk/index/Indexer.java oak/api/QueryEngine.java oak/core/ContentRepositoryImpl.java oak/query/QueryEngineImpl.java oak/query/index/QueryIndexProvider.java

Author: thomasm
Date: Thu Apr 26 13:52:25 2012
New Revision: 1330854

URL: http://svn.apache.org/viewvc?rev=1330854&view=rev
Log:
OAK-28 Query implementation (simplify index provider)

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
    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/query/QueryEngineImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndexProvider.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java?rev=1330854&r1=1330853&r2=1330854&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/mk/index/Indexer.java Thu Apr 26 13:52:25 2012
@@ -31,6 +31,7 @@ import org.apache.jackrabbit.oak.query.i
 import org.apache.jackrabbit.oak.query.index.QueryIndexProvider;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -52,7 +53,6 @@ public class Indexer implements QueryInd
     private HashMap<String, BTreePage> modified = new HashMap<String, BTreePage>();
     private SimpleLRUCache<String, BTreePage> cache = SimpleLRUCache.newInstance(100);
     private String readRevision;
-    private ArrayList<QueryIndexListener> listeners = new ArrayList<QueryIndexListener>();
 
     public Indexer(MicroKernel mk, String indexRootNode) {
         this.mk = mk;
@@ -115,9 +115,6 @@ public class Indexer implements QueryInd
             return existing;
         }
         buildAndAddIndex(index);
-        for (QueryIndexListener l : listeners) {
-            l.added(new PropertyContentIndex(mk, index));
-        }
         return index;
     }
 
@@ -324,7 +321,7 @@ public class Indexer implements QueryInd
     public void updateIndex(String rootPath, JsopReader t, String lastRevision) {
         while (true) {
             int r = t.read();
-            if (r == JsopTokenizer.END) {
+            if (r == JsopReader.END) {
                 break;
             }
             String path = PathUtils.concat(rootPath, t.readString());
@@ -361,7 +358,7 @@ public class Indexer implements QueryInd
             case '^': {
                 removeProperty(path, lastRevision);
                 t.read(':');
-                if (t.matches(JsopTokenizer.NULL)) {
+                if (t.matches(JsopReader.NULL)) {
                     // ignore
                 } else {
                     String value = t.readRawValue().trim();
@@ -508,7 +505,11 @@ public class Indexer implements QueryInd
         }
     }
 
-    public List<QueryIndex> getQueryIndexes() {
+    @Override
+    public List<QueryIndex> getQueryIndexes(MicroKernel mk) {
+        if (mk != this.mk) {
+            return Collections.emptyList();
+        }
         ArrayList<QueryIndex> list = new ArrayList<QueryIndex>();
         for (Index index : indexes.values()) {
             QueryIndex qi = null;
@@ -522,14 +523,4 @@ public class Indexer implements QueryInd
         return list;
     }
 
-    @Override
-    public void addListener(QueryIndexListener listener) {
-        listeners.add(listener);
-    }
-
-    @Override
-    public void removeListener(QueryIndexListener listener) {
-        listeners.remove(listener);
-    }
-
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java?rev=1330854&r1=1330853&r2=1330854&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/QueryEngine.java Thu Apr 26 13:52:25 2012
@@ -53,9 +53,4 @@ public interface QueryEngine {
      */
     Result executeQuery(String statement, String language, Map<String, CoreValue> bindings) throws ParseException;
 
-    /**
-     * Close the query engine.
-     */
-    void close();
-
 }

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=1330854&r1=1330853&r2=1330854&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 Thu Apr 26 13:52:25 2012
@@ -69,7 +69,7 @@ public class ContentRepositoryImpl imple
         // FIXME: workspace setup must be done elsewhere...
         queryEngine.init();
         NodeState root = nodeStore.getRoot();
-        
+
         NodeState wspNode = root.getChildNode(DEFAULT_WORKSPACE_NAME);
         if (wspNode == null) {
             microKernel.commit("/", "+\"" + DEFAULT_WORKSPACE_NAME + "\":{}" + "^\"" + DEFAULT_WORKSPACE_NAME + "/jcr:primaryType\":\"nt:unstructured\" ", null, null);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java?rev=1330854&r1=1330853&r2=1330854&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java Thu Apr 26 13:52:25 2012
@@ -16,6 +16,10 @@
  */
 package org.apache.jackrabbit.oak.query;
 
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.index.Indexer;
 import org.apache.jackrabbit.oak.api.CoreValue;
@@ -23,18 +27,9 @@ import org.apache.jackrabbit.oak.api.Cor
 import org.apache.jackrabbit.oak.api.QueryEngine;
 import org.apache.jackrabbit.oak.query.index.Filter;
 import org.apache.jackrabbit.oak.query.index.QueryIndex;
-import org.apache.jackrabbit.oak.query.index.QueryIndexProvider.QueryIndexListener;
 import org.apache.jackrabbit.oak.query.index.TraversingIndex;
 
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-public class QueryEngineImpl implements QueryEngine, QueryIndexListener {
+public class QueryEngineImpl implements QueryEngine {
 
     static final String SQL2 = "JCR-SQL2";
     private static final String XPATH = "xpath";
@@ -46,8 +41,6 @@ public class QueryEngineImpl implements 
     private final CoreValueFactory vf;
     private final SQL2Parser parserSQL2;
     private final Indexer indexer;
-    private final Map<String, QueryIndex> indexes =
-        Collections.synchronizedMap(new HashMap<String, QueryIndex>());
 
     public QueryEngineImpl(MicroKernel mk, CoreValueFactory valueFactory) {
         this.mk = mk;
@@ -60,11 +53,6 @@ public class QueryEngineImpl implements 
     public void init() {
         // TODO the list of index providers should be configurable as well
         indexer.init();
-        indexer.addListener(this);
-        List<QueryIndex> list = indexer.getQueryIndexes();
-        for (QueryIndex qi : list) {
-            indexes.put(qi.getIndexName(), qi);
-        }
     }
 
     /**
@@ -125,23 +113,7 @@ public class QueryEngineImpl implements 
     }
 
     private List<QueryIndex> getIndexes() {
-        // create a copy, so the underlying map can be modified
-        return new ArrayList<QueryIndex>(indexes.values());
-    }
-
-    @Override
-    public void added(QueryIndex index) {
-        indexes.put(index.getIndexName(), index);
-    }
-
-    @Override
-    public void removed(QueryIndex index) {
-        indexes.remove(index.getIndexName());
-    }
-
-    @Override
-    public void close() {
-        indexer.removeListener(this);
+        return indexer.getQueryIndexes(mk);
     }
 
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndexProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndexProvider.java?rev=1330854&r1=1330853&r2=1330854&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndexProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/QueryIndexProvider.java Thu Apr 26 13:52:25 2012
@@ -19,6 +19,7 @@
 package org.apache.jackrabbit.oak.query.index;
 
 import java.util.List;
+import org.apache.jackrabbit.mk.api.MicroKernel;
 
 /**
  * A mechanism to index data. Indexes might be added or removed at runtime,
@@ -34,45 +35,11 @@ public interface QueryIndexProvider {
     void init();
 
     /**
-     * Get the currently configured indexes.
+     * Get the currently configured indexes for the given MicroKernel instance.
      *
+     * @param mk the MicroKernel instance
      * @return the list of indexes
      */
-    List<QueryIndex> getQueryIndexes();
-
-    /**
-     * Add a listener that is notified about added and removed indexes.
-     *
-     * @param listener the listener
-     */
-    void addListener(QueryIndexListener listener);
-
-    /**
-     * Remove a listener.
-     *
-     * @param listener the listener
-     */
-    void removeListener(QueryIndexListener listener);
-
-    /**
-     * A query index listener
-     */
-    interface QueryIndexListener {
-
-        /**
-         * The given index was added.
-         *
-         * @param index the index
-         */
-        void added(QueryIndex index);
-
-        /**
-         * The given index was removed.
-         *
-         * @param index the index
-         */
-        void removed(QueryIndex index);
-
-    }
+    List<QueryIndex> getQueryIndexes(MicroKernel mk);
 
 }