Author: chetanm
Date: Wed Sep 20 12:31:54 2017
New Revision: 1809015

URL: http://svn.apache.org/viewvc?rev=1809015&view=rev
Log:
OAK-6684 - IndexPathService should work with Oak 1.0 setups

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImpl.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImplTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImpl.java?rev=1809015&r1=1809014&r2=1809015&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImpl.java
 Wed Sep 20 12:31:54 2017
@@ -21,12 +21,11 @@ package org.apache.jackrabbit.oak.plugin
 
 import java.util.Iterator;
 
-import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
-import com.google.common.collect.Iterators;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.index.nodetype.NodeTypeIndexProvider;
 import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider;
 import org.apache.jackrabbit.oak.query.QueryEngineSettings;
@@ -38,17 +37,25 @@ import org.apache.jackrabbit.oak.spi.mou
 import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.query.IndexRow;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
+import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.transform;
+import static com.google.common.collect.Iterators.transform;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
 import static 
org.apache.jackrabbit.oak.plugins.index.IndexConstants.DECLARING_NODE_TYPES;
 import static 
org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NODE_TYPE;
 
 @Component
 @Service
 public class IndexPathServiceImpl implements IndexPathService {
+    private final Logger log = LoggerFactory.getLogger(getClass());
 
     private final QueryEngineSettings settings = new QueryEngineSettings();
 
@@ -82,20 +89,19 @@ public class IndexPathServiceImpl implem
 
         //Check if oak:QueryIndexDefinition is indexed as part of nodetype 
index
         boolean indxDefnTypeIndexed = 
Iterables.contains(nodeType.getNames(DECLARING_NODE_TYPES), 
INDEX_DEFINITIONS_NODE_TYPE);
-        checkState(indxDefnTypeIndexed, INDEX_DEFINITIONS_NODE_TYPE + " is not 
found to be indexed as part of " +
-                "nodetype index. Cannot determine the paths of all indexes");
 
-        return new Iterable<String>() {
-            @Override
-            public Iterator<String> iterator() {
-                Iterator<IndexRow> itr = 
getIndex().query(createFilter(INDEX_DEFINITIONS_NODE_TYPE), 
nodeStore.getRoot());
-                return Iterators.transform(itr, new Function<IndexRow, 
String>() {
-                    @Override
-                    public String apply(IndexRow input) {
-                        return input.getPath();
-                    }
-                });
-            }
+        if (!indxDefnTypeIndexed) {
+            log.warn("{} is not found to be indexed as part of nodetype index. 
Non root indexes would " +
+                    "not be listed", INDEX_DEFINITIONS_NODE_TYPE);
+            NodeState oakIndex = nodeStore.getRoot().getChildNode("oak:index");
+            return transform(filter(oakIndex.getChildNodeEntries(),
+                    cne -> 
INDEX_DEFINITIONS_NODE_TYPE.equals(cne.getNodeState().getName(JCR_PRIMARYTYPE))),
+                    cne -> PathUtils.concat("/oak:index", cne.getName()));
+        }
+
+        return () -> {
+            Iterator<IndexRow> itr = 
getIndex().query(createFilter(INDEX_DEFINITIONS_NODE_TYPE), 
nodeStore.getRoot());
+            return transform(itr, input -> input.getPath());
         };
     }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImplTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImplTest.java?rev=1809015&r1=1809014&r2=1809015&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImplTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexPathServiceImplTest.java
 Wed Sep 20 12:31:54 2017
@@ -59,9 +59,10 @@ public class IndexPathServiceImplTest ex
                 .createContentRepository();
     }
 
-    @Test(expected = IllegalStateException.class)
-    public void errorIfQueryDefinitionsNotIndexed() throws Exception{
-        indexPathService.getIndexPaths();
+    @Test
+    public void noErrorIfQueryDefinitionsNotIndexed() throws Exception{
+        Set<String> paths = Sets.newHashSet(indexPathService.getIndexPaths());
+        assertThat(paths, hasItem("/oak:index/uuid"));
     }
 
     @Test(expected = IllegalStateException.class)


Reply via email to