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/27 10:42:50 UTC

svn commit: r1545978 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core: AbstractTree.java MutableTree.java

Author: mduerig
Date: Wed Nov 27 09:42:50 2013
New Revision: 1545978

URL: http://svn.apache.org/r1545978
Log:
OAK-1232 Improve implementation of Tree.get(Property)Status
Simplify (Property)Status calculation and add default implementation in AbstractTree

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java?rev=1545978&r1=1545977&r2=1545978&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java Wed Nov 27 09:42:50 2013
@@ -19,7 +19,18 @@
 
 package org.apache.jackrabbit.oak.core;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.size;
+import static com.google.common.collect.Iterables.transform;
+import static org.apache.jackrabbit.oak.api.Tree.Status.EXISTING;
+import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
+import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
+
 import java.util.Iterator;
+
 import javax.annotation.Nonnull;
 
 import com.google.common.base.Function;
@@ -32,16 +43,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.size;
-import static com.google.common.collect.Iterables.transform;
-import static org.apache.jackrabbit.oak.api.Tree.Status.EXISTING;
-import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
-import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
-import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
-
 /**
  * {@code AbstractTree} provides default implementations for most
  * read methods of {@code Tree}. Furthermore it handles the
@@ -101,12 +102,16 @@ public abstract class AbstractTree imple
     /**
      * @return  {@code true} iff {@code getStatus() == Status.NEW}
      */
-    protected abstract boolean isNew();
+    protected boolean isNew() {
+        return nodeBuilder.isNew();
+    }
 
     /**
      * @return  {@code true} iff {@code getStatus() == Status.MODIFIED}
      */
-    protected abstract boolean isModified();
+    protected boolean isModified() {
+        return nodeBuilder.isModified();
+    }
 
     /**
      * @return {@code true} if this tree has orderable children;
@@ -186,9 +191,9 @@ public abstract class AbstractTree imple
 
     @Override
     public Status getStatus() {
-        if (isNew()) {
+        if (nodeBuilder.isNew()) {
             return NEW;
-        } else if (isModified()) {
+        } else if (nodeBuilder.isModified()) {
             return MODIFIED;
         } else {
             return EXISTING;
@@ -221,6 +226,19 @@ public abstract class AbstractTree imple
     }
 
     @Override
+    public Status getPropertyStatus(@Nonnull String name) {
+        if (!hasProperty(name)) {
+            return null;
+        } else if (nodeBuilder.isNew(name)) {
+            return NEW;
+        } else if (nodeBuilder.isReplaced(name)) {
+            return MODIFIED;
+        } else {
+            return EXISTING;
+        }
+    }
+
+    @Override
     public Iterable<? extends PropertyState> getProperties() {
         return filter(nodeBuilder.getProperties(),
             new Predicate<PropertyState>() {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java?rev=1545978&r1=1545977&r2=1545978&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/MutableTree.java Wed Nov 27 09:42:50 2013
@@ -85,16 +85,6 @@ public class MutableTree extends Abstrac
         return new MutableTree(root, this, name, pendingMoves);
     }
 
-    @Override
-    protected boolean isNew() {
-        return nodeBuilder.isNew();
-    }
-
-    @Override
-    protected boolean isModified() {
-        return nodeBuilder.isModified();
-    }
-
     //------------------------------------------------------------< Tree >---
 
     @Override
@@ -150,19 +140,12 @@ public class MutableTree extends Abstrac
     public Status getPropertyStatus(String name) {
         beforeRead();
 
-        // make sure we don't expose information about a non-accessible property
-        if (!hasProperty(name)) {
-            return null;
-        }
-
-        // get status of this tree without checking for it's existence
-        Status nodeStatus = super.getStatus();
-        if (nodeStatus == NEW) {
-            return (super.hasProperty(name)) ? NEW : null;
-        }
         PropertyState head = super.getProperty(name);
         if (head == null) {
+            // make sure we don't expose information about a non-accessible property
             return null;
+        } else if (super.getStatus() == NEW) {
+            return NEW;
         }
 
         PropertyState base = getSecureBase().getProperty(name);