You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2011/12/31 18:33:44 UTC

svn commit: r1226146 - /jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java

Author: mduerig
Date: Sat Dec 31 17:33:43 2011
New Revision: 1226146

URL: http://svn.apache.org/viewvc?rev=1226146&view=rev
Log:
Microkernel based prototype of JCR implementation (WIP)
- refactor move operation

Modified:
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java?rev=1226146&r1=1226145&r2=1226146&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeTree.java Sat Dec 31 17:33:43 2011
@@ -487,28 +487,7 @@ public class ChangeTree {
                 throw new PathNotFoundException(destParentPath.toJcrPath());
             }
 
-            Removed removed;
-            if (source.isTransient()) {  // fixme: can't this go into the moveTo methods?
-                removed = null;
-                removeChild(name);
-            }
-            else {
-                removed = new Removed(this, name);
-                addChild(removed);
-            }
-
-            // Resolve destination only *after* source has been removed in order
-            // to make sure nodes on any common path prefix are already touched.
-            NodeDelta destParent = ChangeTree.this.getNode(destParentPath);
-            if (destParent == null) {
-                // fixme: throwing after tree modification leads to inconsistencies. check upfront!
-                // can this even be null here? there seems to be a check above already
-                throw new PathNotFoundException(destination.toJcrPath());
-            }
-            NodeDelta movedTo = source.moveTo(destParent, destination.getName());
-            if (removed != null) {
-                removed.setMoved(movedTo);
-            }
+            source.moveTo(destParentPath, destination.getName());
         }
 
         /**
@@ -532,7 +511,7 @@ public class ChangeTree {
         void touch() { }
 
         abstract NodeDelta remove() throws ItemNotFoundException;
-        abstract NodeDelta moveTo(NodeDelta parent, String name);
+        abstract void moveTo(Path parentPath, String name);
 
         NodeDelta addChild(NodeDelta delta) {
             childNodes.put(delta.name, delta);
@@ -640,12 +619,16 @@ public class ChangeTree {
                     child.remove();
                 }
             }
-            return parent.addChild(new Removed(parent, name));
+            return parent.addChild(new Removed(parent, name, null));
         }
 
         @Override
-        NodeDelta moveTo(NodeDelta parent, String name) {
-            return parent.addChild(new Moved(parent, name, this));
+        void moveTo(Path parentPath, String name) {
+            Moved movedTo = new Moved(parent, name, this);
+            Removed removed = new Removed(parent, this.name, movedTo);
+            parent.addChild(removed);
+            NodeDelta parent = ChangeTree.this.getNode(parentPath);
+            parent.addChild(movedTo);
         }
     }
 
@@ -693,9 +676,11 @@ public class ChangeTree {
         }
 
         @Override
-        NodeDelta moveTo(NodeDelta parent, String name) {
+        void moveTo(Path parentPath, String name) {
+            parent.removeChild(this.name);
+            NodeDelta destParent = ChangeTree.this.getNode(parentPath);
             this.name = name;
-            return parent.addChild(this);
+            destParent.addChild(this);
         }
     }
 
@@ -795,9 +780,11 @@ public class ChangeTree {
         }
 
         @Override
-        NodeDelta moveTo(NodeDelta parent, String name) {
+        void moveTo(Path parentPath, String name) {
+            parent.removeChild(this.name);
+            NodeDelta destParent = ChangeTree.this.getNode(parentPath);
             this.name = name;
-            return parent.addChild(this);
+            destParent.addChild(this);
         }
     }
 
@@ -805,13 +792,10 @@ public class ChangeTree {
      * Represents a transiently removed node.
      */
     public class Removed extends NodeDelta {
-        private NodeDelta movedTo;
+        private final NodeDelta movedTo;
 
-        Removed(NodeDelta parent, String name) {
+        Removed(NodeDelta parent, String name, NodeDelta movedTo) {
             super(parent, name);
-        }
-
-        public void setMoved(NodeDelta movedTo) {
             this.movedTo = movedTo;
         }
 
@@ -866,7 +850,7 @@ public class ChangeTree {
         }
 
         @Override
-        NodeDelta moveTo(NodeDelta parent, String name) {
+        void moveTo(Path parentPath, String name) {
             throw new IllegalStateException("Removed");
         }