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 md...@apache.org on 2013/11/29 15:15:17 UTC

svn commit: r1546566 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/observation/ main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ main/java/org/apache/jackrabbit/oak/spi/commit/ main/java/org/apache/...

Author: mduerig
Date: Fri Nov 29 14:15:17 2013
New Revision: 1546566

URL: http://svn.apache.org/r1546566
Log:
OAK-1133: Observation listener PLUS
MoveDetector now sends name of moved node instead of path. This allows simplifying EventIterator  and ChangeProcessor since they now don't need to keep track of the path

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrListener.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ACFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ConstantFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventGenerator.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventIterator.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventTypeFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/NodeTypeFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UuidFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/DefaultMoveValidator.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/MoveDetector.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/MoveValidator.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java Fri Nov 29 14:15:17 2013
@@ -130,7 +130,7 @@ public class ChangeProcessor implements 
                     ImmutableTree beforeTree = getTree(previousRoot, provider.getPath());
                     ImmutableTree afterTree = getTree(root, provider.getPath());
                     EventIterator<Event> events = new EventIterator<Event>(
-                            beforeTree.getNodeState(), afterTree.getNodeState(), provider.getPath(),
+                            beforeTree.getNodeState(), afterTree.getNodeState(),
                             provider.getFilter(beforeTree, afterTree),
                             new JcrListener(beforeTree, afterTree, namePathMapper, info));
                     if (events.hasNext()) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrListener.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrListener.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrListener.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/JcrListener.java Fri Nov 29 14:15:17 2013
@@ -27,7 +27,6 @@ import static javax.jcr.observation.Even
 import static javax.jcr.observation.Event.PROPERTY_ADDED;
 import static javax.jcr.observation.Event.PROPERTY_REMOVED;
 import static org.apache.jackrabbit.oak.api.Type.STRING;
-import static org.apache.jackrabbit.oak.commons.PathUtils.getName;
 import static org.apache.jackrabbit.oak.core.AbstractTree.OAK_CHILD_ORDER;
 import static org.apache.jackrabbit.oak.plugins.identifier.IdentifierManager.getIdentifier;
 
@@ -121,8 +120,9 @@ class JcrListener implements IterableLis
     }
 
     @Override
-    public void nodeMoved(String sourcePath, String destPath, NodeState moved) {
-        events.add(createEvent(NODE_MOVED, afterTree.getChild(getName(destPath)),
+    public void nodeMoved(String sourcePath, String name, NodeState moved) {
+        String destPath = PathUtils.concat(afterTree.getPath(), name);
+        events.add(createEvent(NODE_MOVED, afterTree.getChild(name),
                 ImmutableMap.of(
                         "srcAbsPath", namePathMapper.getJcrPath(sourcePath),
                         "destAbsPath", namePathMapper.getJcrPath(destPath))));

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ACFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ACFilter.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ACFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ACFilter.java Fri Nov 29 14:15:17 2013
@@ -24,7 +24,6 @@ import static com.google.common.base.Pre
 import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.core.ImmutableTree;
 import org.apache.jackrabbit.oak.plugins.observation.filter.EventGenerator.Filter;
 import org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
@@ -84,8 +83,8 @@ public class ACFilter implements Filter 
     }
 
     @Override
-    public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
-        return treePermission.getChildPermission(PathUtils.getName(destPath), moved).canRead();
+    public boolean includeMove(String sourcePath, String name, NodeState moved) {
+        return treePermission.getChildPermission(name, moved).canRead();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ConstantFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ConstantFilter.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ConstantFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ConstantFilter.java Fri Nov 29 14:15:17 2013
@@ -67,7 +67,7 @@ public class ConstantFilter implements F
     }
 
     @Override
-    public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
+    public boolean includeMove(String sourcePath, String name, NodeState moved) {
         return include;
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventGenerator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventGenerator.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventGenerator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventGenerator.java Fri Nov 29 14:15:17 2013
@@ -92,11 +92,11 @@ public class EventGenerator implements M
         /**
          * Include a moved node
          * @param sourcePath  source path of the move operation
-         * @param destPath  destination path of the move operation
-         * @param moved the moved node
+         * @param name        name of the moved node
+         * @param moved       the moved node
          * @return  {@code true} if the node should be included
          */
-        boolean includeMove(String sourcePath, String destPath, NodeState moved);
+        boolean includeMove(String sourcePath, String name, NodeState moved);
 
         /**
          * Factory for creating a filter instance for the given child node
@@ -159,10 +159,10 @@ public class EventGenerator implements M
         /**
          * Notification for a moved node
          * @param sourcePath  source of the moved node
-         * @param destPath  destination of the moved node
-         * @param moved  moved node
+         * @param name        name of the moved node
+         * @param moved       moved node
          */
-        void nodeMoved(String sourcePath, String destPath, NodeState moved);
+        void nodeMoved(String sourcePath, String name, NodeState moved);
 
         /**
          * Factory for creating a filter instance for the given child node
@@ -187,9 +187,9 @@ public class EventGenerator implements M
     }
 
     @Override
-    public void move(String sourcePath, String destPath, NodeState moved) throws CommitFailedException {
-        if (filter.includeMove(sourcePath, destPath, moved)) {
-            listener.nodeMoved(sourcePath, destPath, moved);
+    public void move(String name, String sourcePath, NodeState moved) throws CommitFailedException {
+        if (filter.includeMove(sourcePath, name, moved)) {
+            listener.nodeMoved(sourcePath, name, moved);
         }
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventIterator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventIterator.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventIterator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventIterator.java Fri Nov 29 14:15:17 2013
@@ -29,7 +29,6 @@ import java.util.List;
 import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.spi.commit.EditorDiff;
 import org.apache.jackrabbit.oak.spi.commit.VisibleEditor;
 import org.apache.jackrabbit.oak.spi.state.MoveDetector;
@@ -48,7 +47,6 @@ public class EventIterator<T> extends Ev
 
     private final NodeState before;
     private final NodeState after;
-    private final String path;
 
     private final Filter filter;
     private final IterableListener<T> listener;
@@ -60,7 +58,7 @@ public class EventIterator<T> extends Ev
         protected Iterator<T> createValue() {
             CommitFailedException e = EditorDiff.process(
                     new VisibleEditor(
-                        new MoveDetector(EventIterator.this, path)),
+                        new MoveDetector(EventIterator.this)),
                     before, after);
 
             if (e != null) {
@@ -89,16 +87,14 @@ public class EventIterator<T> extends Ev
      *
      * @param before  before state
      * @param after   after state
-     * @parem path    common path to the before and after states
      * @param filter  filter for filtering changes
      * @param listener  listener for listening to the filtered changes
      */
     public EventIterator(@Nonnull NodeState before, @Nonnull NodeState after,
-            @Nonnull String path, @Nonnull Filter filter, @Nonnull IterableListener<T> listener) {
+            @Nonnull Filter filter, @Nonnull IterableListener<T> listener) {
         super(filter, listener);
         this.before = checkNotNull(before);
         this.after = checkNotNull(after);
-        this.path = checkNotNull(path);
         this.filter = checkNotNull(filter);
         this.listener = checkNotNull(listener);
     }
@@ -110,7 +106,7 @@ public class EventIterator<T> extends Ev
         Filter childFilter = filter.create(name, before, after);
         if (childFilter != null) {
             childEvents.add(new EventIterator<T>(
-                    before, after, PathUtils.concat(path, name),
+                    before, after,
                     childFilter,
                     listener.create(name, before, after)));
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventTypeFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventTypeFilter.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventTypeFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventTypeFilter.java Fri Nov 29 14:15:17 2013
@@ -78,7 +78,7 @@ public class EventTypeFilter implements 
     }
 
     @Override
-    public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
+    public boolean includeMove(String sourcePath, String name, NodeState moved) {
         return includeByEvent(Event.NODE_MOVED);
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java Fri Nov 29 14:15:17 2013
@@ -142,9 +142,9 @@ public final class Filters {
                 }
 
                 @Override
-                public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
+                public boolean includeMove(String sourcePath, String name, NodeState moved) {
                     for (Filter filter : filters) {
-                        if (filter.includeMove(sourcePath, destPath, moved)) {
+                        if (filter.includeMove(sourcePath, name, moved)) {
                             return true;
                         }
                     }
@@ -234,9 +234,9 @@ public final class Filters {
                 }
 
                 @Override
-                public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
+                public boolean includeMove(String sourcePath, String name, NodeState moved) {
                     for (Filter filter : filters) {
-                        if (!filter.includeMove(sourcePath, destPath, moved)) {
+                        if (!filter.includeMove(sourcePath, name, moved)) {
                             return false;
                         }
                     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java Fri Nov 29 14:15:17 2013
@@ -22,7 +22,6 @@ package org.apache.jackrabbit.oak.plugin
 import static com.google.common.base.Objects.toStringHelper;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
-import static org.apache.jackrabbit.oak.commons.PathUtils.getName;
 
 import javax.annotation.Nonnull;
 
@@ -114,8 +113,8 @@ public class GlobbingPathFilter implemen
     }
 
     @Override
-    public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
-        return includeItem(getName(destPath));
+    public boolean includeMove(String sourcePath, String name, NodeState moved) {
+        return includeItem(name);
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/NodeTypeFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/NodeTypeFilter.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/NodeTypeFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/NodeTypeFilter.java Fri Nov 29 14:15:17 2013
@@ -107,7 +107,7 @@ public class NodeTypeFilter implements F
     }
 
     @Override
-    public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
+    public boolean includeMove(String sourcePath, String name, NodeState moved) {
         return include.get();
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UuidFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UuidFilter.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UuidFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UuidFilter.java Fri Nov 29 14:15:17 2013
@@ -114,7 +114,7 @@ public class UuidFilter implements Filte
     }
 
     @Override
-    public boolean includeMove(String sourcePath, String destPath, NodeState moved) {
+    public boolean includeMove(String sourcePath, String name, NodeState moved) {
         return include.get();
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/DefaultMoveValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/DefaultMoveValidator.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/DefaultMoveValidator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/DefaultMoveValidator.java Fri Nov 29 14:15:17 2013
@@ -31,7 +31,7 @@ import org.apache.jackrabbit.oak.spi.sta
  */
 public class DefaultMoveValidator extends DefaultValidator implements MoveValidator {
     @Override
-    public void move(String sourcePath, String destPath, NodeState moved) throws CommitFailedException {
+    public void move(String name, String sourcePath, NodeState moved) throws CommitFailedException {
         // do nothing
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/MoveDetector.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/MoveDetector.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/MoveDetector.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/MoveDetector.java Fri Nov 29 14:15:17 2013
@@ -20,7 +20,6 @@
 package org.apache.jackrabbit.oak.spi.state;
 
 import static org.apache.jackrabbit.oak.api.Type.STRING;
-import static org.apache.jackrabbit.oak.commons.PathUtils.concat;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
@@ -53,15 +52,9 @@ public class MoveDetector implements Val
     public static final String SOURCE_PATH = ":source-path";
 
     private final MoveValidator moveValidator;
-    private final String path;
-
-    public MoveDetector(MoveValidator moveValidator, String path) {
-        this.moveValidator = moveValidator;
-        this.path = path;
-    }
 
     public MoveDetector(MoveValidator moveValidator) {
-        this(moveValidator, "/");
+        this.moveValidator = moveValidator;
     }
 
     @Override
@@ -94,13 +87,12 @@ public class MoveDetector implements Val
         PropertyState sourceProperty = after.getProperty(SOURCE_PATH);
         if (sourceProperty != null) {
             String sourcePath = sourceProperty.getValue(STRING);
-            String destPath = concat(path, name);
-            moveValidator.move(sourcePath, destPath, after);
+            moveValidator.move(name, sourcePath, after);
         }
         MoveValidator childDiff = moveValidator.childNodeAdded(name, after);
         return childDiff == null
                 ? null
-                : new MoveDetector(childDiff, concat(path, name));
+                : new MoveDetector(childDiff);
     }
 
     @Override
@@ -108,7 +100,7 @@ public class MoveDetector implements Val
         MoveValidator childDiff = moveValidator.childNodeChanged(name, before, after);
         return childDiff == null
                 ? null
-                : new MoveDetector(childDiff, concat(path, name));
+                : new MoveDetector(childDiff);
     }
 
     @Override
@@ -116,6 +108,6 @@ public class MoveDetector implements Val
         MoveValidator childDiff = moveValidator.childNodeDeleted(name, before);
         return childDiff == null
                 ? null
-                : new MoveDetector(childDiff, concat(path, name));
+                : new MoveDetector(childDiff);
     }
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/MoveValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/MoveValidator.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/MoveValidator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/MoveValidator.java Fri Nov 29 14:15:17 2013
@@ -34,11 +34,12 @@ public interface MoveValidator extends V
      * Called when a moved node has been detected.
      *
      * @param sourcePath  path of the node before the move
-     * @param destPath    path of the node after the move
-     * @param moved       the moved node state
+     * @param name        name of the node after the move
+     * @param moved       the node state moved here
      * @throws CommitFailedException  if validation fails.
+     * remove
      */
-    void move(String sourcePath, String destPath, NodeState moved) throws CommitFailedException;
+    void move(String name, String sourcePath, NodeState moved) throws CommitFailedException;
 
     @Override
     @CheckForNull

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java?rev=1546566&r1=1546565&r2=1546566&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/MoveDetectorTest.java Fri Nov 29 14:15:17 2013
@@ -22,6 +22,8 @@ package org.apache.jackrabbit.oak.spi.st
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import java.util.concurrent.atomic.AtomicReference;
+
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
@@ -150,40 +152,47 @@ public class MoveDetectorTest {
     }
 
     private static class FindSingleMove extends DefaultMoveValidator {
+        private final String path;
         private final String sourcePath;
         private final String destPath;
+        private final AtomicReference<Boolean> found;
 
-        private boolean found;
-
-        private FindSingleMove(String sourcePath, String destPath) {
+        private FindSingleMove(String sourcePath, String destPath, String path,
+                AtomicReference<Boolean> found) {
             this.sourcePath = sourcePath;
             this.destPath = destPath;
+            this.path = path;
+            this.found = found;
+        }
+
+        public FindSingleMove(String sourcePath, String destPath) {
+            this(sourcePath, destPath, "/", new AtomicReference<Boolean>(false));
         }
 
         @Override
-        public void move(String sourcePath, String destPath, NodeState moved) throws CommitFailedException {
-            if (found) {
+        public void move(String name, String sourcePath, NodeState moved) throws CommitFailedException {
+            if (found()) {
                 throw new CommitFailedException("Test", 0, "There should only be a single move operation");
             }
 
             assertEquals(this.sourcePath, sourcePath);
-            assertEquals(this.destPath, destPath);
-            found = true;
+            assertEquals(this.destPath, PathUtils.concat(path, name));
+            found.set(true);
         }
 
         @Override
         public MoveValidator childNodeChanged(String name, NodeState before, NodeState after) {
-            return this;
+            return new FindSingleMove(sourcePath, destPath, PathUtils.concat(path, name), found);
         }
 
         public boolean found() {
-            return found;
+            return found.get();
         }
     }
 
     private static class AssertNoMove extends DefaultMoveValidator {
         @Override
-        public void move(String sourcePath, String destPath, NodeState moved) throws CommitFailedException {
+        public void move(String name, String sourcePath, NodeState moved) throws CommitFailedException {
             throw new CommitFailedException("Test", 0, "There should be no move operation");
         }