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 ju...@apache.org on 2013/04/18 11:51:51 UTC

svn commit: r1469250 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java

Author: jukka
Date: Thu Apr 18 09:51:50 2013
New Revision: 1469250

URL: http://svn.apache.org/r1469250
Log:
OAK-778: Recursive wrapping of ModifiedNodeState

Add ModifiedNodeState.compareAgainstBaseState(NodeStateDiff) to make common comparisons easier

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java?rev=1469250&r1=1469249&r2=1469250&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ModifiedNodeState.java Thu Apr 18 09:51:50 2013
@@ -276,47 +276,45 @@ public class ModifiedNodeState extends A
     @Override
     public void compareAgainstBaseState(
             NodeState base, final NodeStateDiff diff) {
-        if (this.base != base) {
-            this.base.compareAgainstBaseState(base, new NodeStateDiff() {
-                @Override
-                public void propertyAdded(PropertyState after) {
-                    if (!properties.containsKey(after.getName())) {
-                        diff.propertyAdded(after);
-                    }
-                }
-                @Override
-                public void propertyChanged(
-                        PropertyState before, PropertyState after) {
-                    if (!properties.containsKey(before.getName())) {
-                        diff.propertyChanged(before, after);
-                    }
-                }
-                @Override
-                public void propertyDeleted(PropertyState before) {
-                    if (!properties.containsKey(before.getName())) {
-                        diff.propertyDeleted(before);
-                    }
-                }
-                @Override
-                public void childNodeAdded(String name, NodeState after) {
-                    if (!nodes.containsKey(name)) {
-                        diff.childNodeAdded(name, after);
-                    }
-                }
-                @Override
-                public void childNodeChanged(String name, NodeState before, NodeState after) {
-                    if (!nodes.containsKey(name)) {
-                        diff.childNodeChanged(name, before, after);
-                    }
-                }
-                @Override
-                public void childNodeDeleted(String name, NodeState before) {
-                    if (!nodes.containsKey(name)) {
-                        diff.childNodeDeleted(name, before);
-                    }
+        this.base.compareAgainstBaseState(base, new NodeStateDiff() {
+            @Override
+            public void propertyAdded(PropertyState after) {
+                if (!properties.containsKey(after.getName())) {
+                    diff.propertyAdded(after);
                 }
-            });
-        }
+            }
+            @Override
+            public void propertyChanged(
+                    PropertyState before, PropertyState after) {
+                if (!properties.containsKey(before.getName())) {
+                    diff.propertyChanged(before, after);
+                }
+            }
+            @Override
+            public void propertyDeleted(PropertyState before) {
+                if (!properties.containsKey(before.getName())) {
+                    diff.propertyDeleted(before);
+                }
+            }
+            @Override
+            public void childNodeAdded(String name, NodeState after) {
+                if (!nodes.containsKey(name)) {
+                    diff.childNodeAdded(name, after);
+                }
+            }
+            @Override
+            public void childNodeChanged(String name, NodeState before, NodeState after) {
+                if (!nodes.containsKey(name)) {
+                    diff.childNodeChanged(name, before, after);
+                }
+            }
+            @Override
+            public void childNodeDeleted(String name, NodeState before) {
+                if (!nodes.containsKey(name)) {
+                    diff.childNodeDeleted(name, before);
+                }
+            }
+        });
 
         for (Map.Entry<String, ? extends PropertyState> entry : properties.entrySet()) {
             PropertyState before = base.getProperty(entry.getKey());
@@ -348,4 +346,34 @@ public class ModifiedNodeState extends A
         }
     }
 
+    public void compareAgainstBaseState(NodeStateDiff diff) {
+        for (Map.Entry<String, ? extends PropertyState> entry
+                : properties.entrySet()) {
+            PropertyState before = base.getProperty(entry.getKey());
+            PropertyState after = entry.getValue();
+            if (after == null) {
+                diff.propertyDeleted(before);
+            } else if (before == null) {
+                diff.propertyAdded(after);
+            } else if (!before.equals(after)) { // TODO: can we assume this?
+                diff.propertyChanged(before, after);
+            }
+        }
+
+        for (Map.Entry<String, ? extends NodeState> entry : nodes.entrySet()) {
+            String name = entry.getKey();
+            NodeState before = base.getChildNode(name);
+            NodeState after = entry.getValue();
+            if (after == null) {
+                if (before.exists()) { // TODO: can we assume this?
+                    diff.childNodeDeleted(name, before);
+                }
+            } else if (!before.exists()) {
+                diff.childNodeAdded(name, after);
+            } else if (!before.equals(after)) { // TODO: can we assume this?
+                diff.childNodeChanged(name, before, after);
+            }
+        }
+    }
+
 }
\ No newline at end of file