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 ch...@apache.org on 2016/09/16 07:01:22 UTC

svn commit: r1761003 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/ test/java/org/apache/jackrabbit/oak/plugins/index/lucene/

Author: chetanm
Date: Fri Sep 16 07:01:22 2016
New Revision: 1761003

URL: http://svn.apache.org/viewvc?rev=1761003&view=rev
Log:
OAK-4806 - Remove usage of Tree in LuceneIndexEditor

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.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=1761003&r1=1761002&r2=1761003&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 Sep 16 07:01:22 2016
@@ -568,7 +568,7 @@ public final class IndexDefinition imple
      * @return the indexing rule or <code>null</code> if none applies.
      */
     @CheckForNull
-    public IndexingRule getApplicableIndexingRule(Tree state) {
+    public IndexingRule getApplicableIndexingRule(NodeState state) {
         //This method would be invoked for every node. So be as
         //conservative as possible in object creation
         List<IndexingRule> rules = null;
@@ -864,7 +864,7 @@ public final class IndexDefinition imple
          * @return <code>true</code> the rule applies to the given node;
          *         <code>false</code> otherwise.
          */
-        public boolean appliesTo(Tree state) {
+        public boolean appliesTo(NodeState state) {
             for (String mixinName : getMixinTypeNames(state)){
                 if (nodeTypeName.equals(mixinName)){
                     return true;
@@ -1398,15 +1398,20 @@ public final class IndexDefinition imple
         };
     }
 
-    private static String getPrimaryTypeName(Tree state) {
-        String primaryType = TreeUtil.getPrimaryTypeName(state);
+    private static String getPrimaryTypeName(NodeState state) {
+        String primaryType = state.getName(JcrConstants.JCR_PRIMARYTYPE);
+
+        //To ensure compatibility with previous Tree based usage look based on string also
+        if (primaryType == null) {
+            primaryType = state.getString(JcrConstants.JCR_PRIMARYTYPE);
+        }
         //In case not a proper JCR assume nt:base TODO return null and ignore indexing such nodes
         //at all
         return primaryType != null ? primaryType : "nt:base";
     }
 
-    private static Iterable<String> getMixinTypeNames(Tree tree) {
-        PropertyState property = tree.getProperty(JcrConstants.JCR_MIXINTYPES);
+    private static Iterable<String> getMixinTypeNames(NodeState state) {
+        PropertyState property = state.getProperty(JcrConstants.JCR_MIXINTYPES);
         return property != null ? property.getValue(Type.NAMES) : Collections.<String>emptyList();
     }
 

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java?rev=1761003&r1=1761002&r2=1761003&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java Fri Sep 16 07:01:22 2016
@@ -104,10 +104,6 @@ public class LuceneIndexEditor implement
      */
     private final boolean isDeleted;
 
-    private Tree afterTree;
-
-    private Tree beforeTree;
-
     private IndexDefinition.IndexingRule indexingRule;
 
     private List<Matcher> currentMatchers = Collections.emptyList();
@@ -140,7 +136,6 @@ public class LuceneIndexEditor implement
     }
 
     public String getPath() {
-        //TODO Use the tree instance to determine path
         if (path == null) { // => parent != null
             path = concat(parent.getPath(), name);
         }
@@ -154,20 +149,12 @@ public class LuceneIndexEditor implement
             context.enableReindexMode();
         }
 
-        if (parent == null){
-            afterTree = TreeFactory.createReadOnlyTree(after);
-            beforeTree = TreeFactory.createReadOnlyTree(before);
-        } else {
-            afterTree = parent.afterTree.getChild(name);
-            beforeTree = parent.beforeTree.getChild(name);
-        }
-
         //Only check for indexing if the result is include.
         //In case like TRAVERSE nothing needs to be indexed for those
         //path
         if (pathFilterResult == PathFilter.Result.INCLUDE) {
             //For traversal in deleted sub tree before state has to be used
-            Tree current = afterTree.exists() ? afterTree : beforeTree;
+            NodeState current = after.exists() ? after : before;
             indexingRule = getDefinition().getApplicableIndexingRule(current);
 
             if (indexingRule != null) {

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=1761003&r1=1761002&r2=1761003&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 Sep 16 07:01:22 2016
@@ -25,13 +25,11 @@ import javax.jcr.PropertyType;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
 import org.apache.jackrabbit.oak.plugins.index.lucene.IndexDefinition.IndexingRule;
 import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.IndexingMode;
 import org.apache.jackrabbit.oak.plugins.index.lucene.util.TokenizerChain;
-import org.apache.jackrabbit.oak.plugins.tree.TreeFactory;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.lucene.codecs.Codec;
@@ -161,7 +159,7 @@ public class IndexDefinitionTest {
         builder.child(PROP_NODE).child("foo2").child("bar2").child("baz").setProperty(LuceneIndexConstants.PROP_TYPE, PropertyType.TYPENAME_LONG);
         builder.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo", "foo1/bar", "foo2/bar2/baz"), STRINGS));
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
-        IndexingRule rule = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule.getConfig("foo1/bar"));
         assertEquals(PropertyType.DATE, rule.getConfig("foo1/bar").getType());
         assertEquals(PropertyType.LONG, rule.getConfig("foo2/bar2/baz").getType());
@@ -179,9 +177,9 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        assertNull(defn.getApplicableIndexingRule(newTree(newNode("nt:base"))));
+        assertNull(defn.getApplicableIndexingRule(asState(newNode("nt:base"))));
 
-        IndexingRule rule1 = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule1);
         assertEquals(2.0f, rule1.boost, 0);
 
@@ -201,9 +199,9 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        assertNull(defn.getApplicableIndexingRule(newTree(newNode("nt:base"))));
-        assertNotNull(defn.getApplicableIndexingRule(newTree(newNode("nt:hierarchyNode"))));
-        assertNotNull(defn.getApplicableIndexingRule(newTree(newNode("nt:folder"))));
+        assertNull(defn.getApplicableIndexingRule(asState(newNode("nt:base"))));
+        assertNotNull(defn.getApplicableIndexingRule(asState(newNode("nt:hierarchyNode"))));
+        assertNotNull(defn.getApplicableIndexingRule(asState(newNode("nt:folder"))));
     }
 
     @Test
@@ -215,8 +213,8 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        assertNotNull(defn.getApplicableIndexingRule(newTree(newNode("nt:folder", "mix:title"))));
-        assertNull(defn.getApplicableIndexingRule(newTree(newNode("nt:folder"))));
+        assertNotNull(defn.getApplicableIndexingRule(asState(newNode("nt:folder", "mix:title"))));
+        assertNull(defn.getApplicableIndexingRule(asState(newNode("nt:folder"))));
     }
 
     @Test
@@ -228,11 +226,11 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        assertNotNull(defn.getApplicableIndexingRule(newTree(newNode("nt:folder", "mix:mimeType"))));
-        assertNull(defn.getApplicableIndexingRule(newTree(newNode("nt:folder"))));
+        assertNotNull(defn.getApplicableIndexingRule(asState(newNode("nt:folder", "mix:mimeType"))));
+        assertNull(defn.getApplicableIndexingRule(asState(newNode("nt:folder"))));
 
         //nt:resource > mix:mimeType
-        assertNotNull(defn.getApplicableIndexingRule(newTree(newNode("nt:resource"))));
+        assertNotNull(defn.getApplicableIndexingRule(asState(newNode("nt:resource"))));
     }
 
     @Test
@@ -245,10 +243,10 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        assertNull(defn.getApplicableIndexingRule(newTree(newNode("nt:base"))));
-        assertNotNull(defn.getApplicableIndexingRule(newTree(newNode("nt:hierarchyNode"))));
+        assertNull(defn.getApplicableIndexingRule(asState(newNode("nt:base"))));
+        assertNotNull(defn.getApplicableIndexingRule(asState(newNode("nt:hierarchyNode"))));
         assertNull("nt:folder should not be index as rule is not inheritable",
-                defn.getApplicableIndexingRule(newTree(newNode("nt:folder"))));
+                defn.getApplicableIndexingRule(asState(newNode("nt:folder"))));
     }
 
     @Test
@@ -292,7 +290,7 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        IndexingRule rule1 = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule1);
 
         assertTrue(rule1.isIndexed("prop1"));
@@ -318,7 +316,7 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        IndexingRule rule1 = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule1);
 
         assertTrue(rule1.isIndexed("prop1"));
@@ -346,7 +344,7 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        IndexingRule rule1 = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule1);
 
         assertTrue(rule1.isIndexed("prop1"));
@@ -360,7 +358,7 @@ public class IndexDefinitionTest {
         //Order it correctly to get expected result
         rules.child("nt:folder").child(PROP_NODE).setProperty(OAK_CHILD_ORDER, ImmutableList.of("prop1", "prop2"), NAMES);
         defn = new IndexDefinition(root, builder.getNodeState());
-        rule1 = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertEquals(3.0f, rule1.getConfig("fooProp").boost, 0);
     }
 
@@ -377,7 +375,7 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        IndexingRule rule1 = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule1);
 
         assertTrue(rule1.isIndexed("Foo"));
@@ -398,7 +396,7 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        IndexingRule rule = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertFalse(rule.getConfig("foo").skipTokenization("foo"));
         assertTrue(rule.getConfig(JcrConstants.JCR_UUID).skipTokenization(JcrConstants.JCR_UUID));
     }
@@ -467,7 +465,7 @@ public class IndexDefinitionTest {
         IndexDefinition defn2 = new IndexDefinition(root, updated.getNodeState());
 
         assertFalse(defn2.isOfOldFormat());
-        IndexingRule rule = defn2.getApplicableIndexingRule(newTree(newNode("nt:base")));
+        IndexingRule rule = defn2.getApplicableIndexingRule(asState(newNode("nt:base")));
         assertNotNull(rule);
         assertFalse(rule.getConfig("foo").index);
         assertFalse(rule.getConfig("Bar").index);
@@ -483,7 +481,7 @@ public class IndexDefinitionTest {
         NodeBuilder updated = IndexDefinition.updateDefinition(defnb.getNodeState().builder());
         IndexDefinition defn2 = new IndexDefinition(root, updated.getNodeState());
 
-        IndexingRule rule = defn2.getApplicableIndexingRule(newTree(newNode("nt:base")));
+        IndexingRule rule = defn2.getApplicableIndexingRule(asState(newNode("nt:base")));
         assertNotNull(rule.getConfig("foo"));
         assertNull("Property regex used should not allow relative properties", rule.getConfig("foo/bar"));
     }
@@ -731,7 +729,7 @@ public class IndexDefinitionTest {
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
 
-        IndexingRule rule1 = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule1 = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule1);
 
         PropertyDefinition pd = rule1.getConfig("prop1");
@@ -752,14 +750,14 @@ public class IndexDefinitionTest {
                 .setProperty(LuceneIndexConstants.PROP_IS_REGEX, true);
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
-        IndexingRule rule = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule);
         assertFalse(rule.isNodeFullTextIndexed());
 
         TestUtil.child(rules, "nt:folder/properties/prop1")
                 .setProperty(LuceneIndexConstants.PROP_NODE_SCOPE_INDEX, true);
         defn = new IndexDefinition(root, builder.getNodeState());
-        rule = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertTrue(rule.isNodeFullTextIndexed());
         assertTrue(rule.indexesAllNodesOfMatchingType());
     }
@@ -773,14 +771,14 @@ public class IndexDefinitionTest {
                 .setProperty(LuceneIndexConstants.PROP_ANALYZED, true);
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
-        IndexingRule rule = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule);
         assertFalse(rule.isNodeFullTextIndexed());
 
         TestUtil.child(rules, "nt:folder/properties/prop1")
                 .setProperty(LuceneIndexConstants.PROP_NODE_SCOPE_INDEX, true);
         defn = new IndexDefinition(root, builder.getNodeState());
-        rule = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertTrue(rule.isNodeFullTextIndexed());
         assertTrue(rule.indexesAllNodesOfMatchingType());
     }
@@ -798,7 +796,7 @@ public class IndexDefinitionTest {
         aggFolder.child("i1").setProperty(LuceneIndexConstants.AGG_PATH, "*");
 
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
-        IndexingRule rule = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule);
         assertTrue(rule.isNodeFullTextIndexed());
         assertTrue(rule.indexesAllNodesOfMatchingType());
@@ -820,7 +818,7 @@ public class IndexDefinitionTest {
                 .setProperty(LuceneIndexConstants.PROP_ORDERED, true)
                 .setProperty(LuceneIndexConstants.PROP_ANALYZED, true);
         IndexDefinition defn = new IndexDefinition(root, builder.getNodeState());
-        IndexingRule rule = defn.getApplicableIndexingRule(newTree(newNode("nt:folder")));
+        IndexingRule rule = defn.getApplicableIndexingRule(asState(newNode("nt:folder")));
         assertNotNull(rule);
 
         PropertyDefinition pd = rule.getConfig("foo");
@@ -886,16 +884,16 @@ public class IndexDefinitionTest {
     //TODO indexesAllNodesOfMatchingType - with nullCheckEnabled
 
     private static IndexingRule getRule(IndexDefinition defn, String typeName){
-        return defn.getApplicableIndexingRule(newTree(newNode(typeName)));
+        return defn.getApplicableIndexingRule(asState(newNode(typeName)));
     }
 
-    private static Tree newTree(NodeBuilder nb){
-        return TreeFactory.createReadOnlyTree(nb.getNodeState());
+    private static NodeState asState(NodeBuilder nb){
+        return nb.getNodeState();
     }
 
     private static NodeBuilder newNode(String typeName){
         NodeBuilder builder = EMPTY_NODE.builder();
-        builder.setProperty(JcrConstants.JCR_PRIMARYTYPE, typeName);
+        builder.setProperty(JcrConstants.JCR_PRIMARYTYPE, typeName, Type.NAME);
         return builder;
     }
 

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java?rev=1761003&r1=1761002&r2=1761003&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/SuggestionIntervalTest.java Fri Sep 16 07:01:22 2016
@@ -24,6 +24,7 @@ import org.apache.jackrabbit.oak.api.Que
 import org.apache.jackrabbit.oak.api.Result;
 import org.apache.jackrabbit.oak.api.ResultRow;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
 import org.apache.jackrabbit.oak.query.AbstractQueryTest;
 import org.apache.jackrabbit.oak.spi.commit.Observer;
@@ -133,7 +134,7 @@ public class SuggestionIntervalTest exte
 
         //add a node... this should kick in a suggestions udpate too as enough time has passed
         root.getTree("/").addChild("indexedNode")
-                .setProperty(JcrConstants.JCR_PRIMARYTYPE, nodeType);
+                .setProperty(JcrConstants.JCR_PRIMARYTYPE, nodeType, Type.NAME);
         root.commit();
 
         Set<String> suggestions = getSuggestions(nodeType, "indexedn");
@@ -155,7 +156,7 @@ public class SuggestionIntervalTest exte
 
         //add a node that get part in the index
         root.getTree("/").addChild("indexedNode")
-                .setProperty(JcrConstants.JCR_PRIMARYTYPE, nodeType);
+                .setProperty(JcrConstants.JCR_PRIMARYTYPE, nodeType, Type.NAME);
         root.commit();
 
         //wait for suggestions refresh time
@@ -164,7 +165,7 @@ public class SuggestionIntervalTest exte
 
         //push a change which should not make any change in the index but yet should help update suggestions
         root.getTree("/").addChild("some-non-index-change")
-                .setProperty(JcrConstants.JCR_PRIMARYTYPE, "oak:Unstructured");
+                .setProperty(JcrConstants.JCR_PRIMARYTYPE, "oak:Unstructured", Type.NAME);
         root.commit();
 
         Set<String> suggestions = getSuggestions(nodeType, "indexedn");