Author: chetanm
Date: Fri Dec  8 07:26:39 2017
New Revision: 1817465

URL: http://svn.apache.org/viewvc?rev=1817465&view=rev
Log:
OAK-7039 - IndexDefinition should provides names of indexed relative node names

Modified:
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1817465&r1=1817464&r2=1817465&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
 Fri Dec  8 07:26:39 2017
@@ -22,6 +22,7 @@ package org.apache.jackrabbit.oak.plugin
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -592,6 +593,30 @@ public final class IndexDefinition imple
         IndexDefinition.disableStoredIndexDefinition = 
disableStoredIndexDefinitionDefault;
     }
 
+    public Set<String> getRelativeNodeNames(){
+        //Can be computed lazily as required only for oak-run indexing for now
+        Set<String> names = new HashSet<>();
+        for (IndexingRule r : definedRules) {
+            for (Aggregate.Include i : r.aggregate.getIncludes()) {
+                for (int d = 0; d < i.maxDepth(); d++) {
+                    if (!i.isPattern(d)) {
+                        names.add(i.getElementNameIfNotAPattern(d));
+                    }
+                }
+            }
+        }
+        return names;
+    }
+
+    public boolean indexesRelativeNodes(){
+        for (IndexingRule r : definedRules) {
+            if (!r.aggregate.getIncludes().isEmpty()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     @Override
     public String toString() {
         return "Lucene Index : " + indexName;

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java?rev=1817465&r1=1817464&r2=1817465&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
 Fri Dec  8 07:26:39 2017
@@ -64,11 +64,13 @@ import static org.apache.jackrabbit.oak.
 import static 
org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty;
 import static org.apache.jackrabbit.oak.InitialContent.INITIAL_CONTENT;
 import static 
org.apache.jackrabbit.oak.plugins.tree.TreeConstants.OAK_CHILD_ORDER;
+import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
 public class IndexDefinitionTest {
@@ -1160,6 +1162,41 @@ public class IndexDefinitionTest {
         assertTrue(b.getConfig(JcrConstants.JCR_MIXINTYPES).sync);
     }
 
+    @Test
+    public void relativeNodeNames_None() {
+        IndexDefinitionBuilder defnb = new IndexDefinitionBuilder();
+        defnb.indexRule("nt:base").property("foo").propertyIndex();
+
+        IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), 
"/foo").build();
+        assertTrue(defn.getRelativeNodeNames().isEmpty());
+        assertFalse(defn.indexesRelativeNodes());
+    }
+
+    @Test
+    public void relativeNodeNames_RelativeProp() {
+        IndexDefinitionBuilder defnb = new IndexDefinitionBuilder();
+        defnb.indexRule("nt:base").property("jcr:content/foo").propertyIndex();
+        defnb.indexRule("nt:base").property("bar").propertyIndex();
+
+        IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), 
"/foo").build();
+        assertThat(defn.getRelativeNodeNames(), 
containsInAnyOrder("jcr:content"));
+        assertTrue(defn.indexesRelativeNodes());
+    }
+
+    @Test
+    public void relativeNodeNames_Aggregate() {
+        IndexDefinitionBuilder defnb = new IndexDefinitionBuilder();
+        defnb.indexRule("nt:base").property("jcr:content/foo").propertyIndex();
+        defnb.aggregateRule("nt:base").include("jcr:content/metadata");
+        defnb.aggregateRule("nt:base").include("jcr:content/metadata/type/*");
+        defnb.aggregateRule("nt:base").include("*");
+
+        IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), 
"/foo").build();
+        assertThat(defn.getRelativeNodeNames(), 
containsInAnyOrder("jcr:content", "metadata", "type"));
+        assertTrue(defn.indexesRelativeNodes());
+    }
+
+
     //TODO indexesAllNodesOfMatchingType - with nullCheckEnabled
 
     private static IndexingRule getRule(IndexDefinition defn, String typeName){


Reply via email to