Author: chetanm
Date: Tue Oct  3 05:05:24 2017
New Revision: 1810627

URL: http://svn.apache.org/viewvc?rev=1810627&view=rev
Log:
OAK-6535 - Synchronous Lucene Property Indexes

Enable support for PropertyUpdateCallback for relative properties

Modified:
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/Aggregate.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/LuceneIndexEditor2Test.java

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/Aggregate.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/Aggregate.java?rev=1810627&r1=1810626&r2=1810627&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/Aggregate.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/Aggregate.java
 Tue Oct  3 05:05:24 2017
@@ -411,6 +411,10 @@ class Aggregate {
         public String toString() {
             return propertyDefinition.toString();
         }
+
+        public PropertyDefinition getPropertyDefinition() {
+            return propertyDefinition;
+        }
     }
 
     public static interface ResultCollector {
@@ -464,6 +468,8 @@ class Aggregate {
 
     public interface AggregateRoot {
         void markDirty();
+
+        String getPath();
     }
 
     public static class Matcher {
@@ -609,6 +615,19 @@ class Aggregate {
             rootState.root.markDirty();
         }
 
+        public String getRootPath() {
+            return rootState.root.getPath();
+        }
+
+        public String getMatchedPath(){
+            checkArgument(status == Status.MATCH_FOUND);
+            return currentPath;
+        }
+
+        public Include getCurrentInclude(){
+            return currentInclude;
+        }
+
         public Status getStatus() {
             return status;
         }

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=1810627&r1=1810626&r2=1810627&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
 Tue Oct  3 05:05:24 2017
@@ -366,7 +366,17 @@ public class LuceneIndexEditor implement
             }
         }
 
-        //TODO Support for relative props
+        for (Matcher m : matcherState.matched) {
+            if (m.aggregatesProperty(propertyName)) {
+                Aggregate.Include i = m.getCurrentInclude();
+                if (i instanceof Aggregate.PropertyInclude) {
+                    PropertyDefinition pd = ((Aggregate.PropertyInclude) 
i).getPropertyDefinition();
+                    String propertyRelativePath = 
PathUtils.concat(m.getMatchedPath(), propertyName);
+
+                    callback.propertyUpdated(m.getRootPath(), 
propertyRelativePath, pd, before, after);
+                }
+            }
+        }
     }
 
     private IndexDefinition getDefinition() {

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor2Test.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor2Test.java?rev=1810627&r1=1810626&r2=1810627&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor2Test.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor2Test.java
 Tue Oct  3 05:05:24 2017
@@ -133,6 +133,53 @@ public class LuceneIndexEditor2Test {
         propCallback.reset();
     }
 
+    @Test
+    public void relativeProperties() throws Exception{
+        IndexDefinitionBuilder defnb = new IndexDefinitionBuilder();
+        
defnb.indexRule("nt:base").property("jcr:content/metadata/foo").propertyIndex();
+        defnb.aggregateRule("nt:base").include("*");
+
+        NodeState defnState = defnb.build();
+        IndexDefinition defn = new IndexDefinition(root, defnState, indexPath);
+        LuceneIndexEditorContext ctx = newContext(defnState.builder(), defn, 
true);
+        ctx.setPropertyUpdateCallback(propCallback);
+
+        EditorHook hook = createHook(ctx);
+
+        updateBefore(defnb);
+
+        //Property added
+        NodeBuilder builder = before.builder();
+        
builder.child("a").child("jcr:content").child("metadata").setProperty("foo", 
"bar");
+        builder.child("a").setProperty("foo2", "bar");
+
+        before = hook.processCommit(root, builder.getNodeState(), 
CommitInfo.EMPTY);
+        propCallback.state.assertState("/a", "jcr:content/metadata/foo", 
UpdateState.ADDED);
+        assertEquals(1, propCallback.invocationCount);
+        propCallback.reset();
+
+        //Property updated
+        builder = before.builder();
+        
builder.child("a").child("jcr:content").child("metadata").setProperty("foo", 
"bar2");
+        builder.child("a").setProperty("foo2", "bar2");
+        before = hook.processCommit(before, builder.getNodeState(), 
CommitInfo.EMPTY);
+
+        propCallback.state.assertState("/a", "jcr:content/metadata/foo", 
UpdateState.UPDATED);
+
+        assertEquals(1, propCallback.invocationCount);
+        propCallback.reset();
+
+        //Property deleted
+        builder = before.builder();
+        
builder.child("a").child("jcr:content").child("metadata").removeProperty("foo");
+        builder.child("a").removeProperty("foo2");
+        before = hook.processCommit(before, builder.getNodeState(), 
CommitInfo.EMPTY);
+
+        propCallback.state.assertState("/a", "jcr:content/metadata/foo", 
UpdateState.DELETED);
+        assertEquals(1, propCallback.invocationCount);
+        propCallback.reset();
+    }
+
     private void updateBefore(IndexDefinitionBuilder defnb) {
         NodeBuilder builder = before.builder();
         NodeBuilder cb = TestUtil.child(builder, 
PathUtils.getParentPath(indexPath));


Reply via email to