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/03/28 17:55:47 UTC

svn commit: r1462212 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/api/ main/java/org/apache/jackrabbit/oak/core/ test/java/org/apache/jackrabbit/oak/core/

Author: mduerig
Date: Thu Mar 28 16:55:47 2013
New Revision: 1462212

URL: http://svn.apache.org/r1462212
Log:
OAK-729: Replace Tree.Status.DISCONNECTED with Tree.isConnected()

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/TreeLocation.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractNodeLocation.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractPropertyLocation.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/RootImplTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java?rev=1462212&r1=1462211&r2=1462212&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java Thu Mar 28 16:55:47 2013
@@ -34,7 +34,7 @@ import javax.annotation.Nonnull;
  * {@link Tree} instances may become disconnected after a call to {@link #refresh()},
  * {@link #rebase()} or {@link #commit()}. Any access to disconnected tree instances
  * - except for  {@link Tree#getName()}, {@link Tree#isRoot()}, {@link Tree#getPath()},
- * {@link Tree#getParent()} and {@link Tree#getStatus()} - will cause an
+ * {@link Tree#getParent()} and {@link Tree#isConnected()} - will cause an
  * {@code InvalidStateException}.
  */
 public interface Root {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java?rev=1462212&r1=1462211&r2=1462212&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java Thu Mar 28 16:55:47 2013
@@ -59,8 +59,8 @@ import javax.annotation.Nullable;
  * <p/>
  * {@link Tree} instances may become disconnected after a call to {@link Root#refresh()},
  * {@link Root#rebase()} or {@link Root#commit()}. Any access to disconnected tree instances
- * - except for  {@link Tree#getName()}, {@link Tree#isRoot()}, {@link Tree#getPath()},
- * {@link Tree#getParent()} and {@link Tree#getStatus()} - will cause an
+ * - except for {@link Tree#getName()}, {@link Tree#isRoot()}, {@link Tree#getPath()},
+ * {@link Tree#getParent()} and {@link Tree#isConnected()} - will cause an
  * {@code InvalidStateException}.
  */
 public interface Tree {
@@ -83,12 +83,7 @@ public interface Tree {
          * Item is modified: has added or removed children or added, removed or modified
          * properties.
          */
-        MODIFIED,
-
-        /**
-         * Item is removed or has become disconnected otherwise (e.g. caused by a refresh).
-         */
-        DISCONNECTED
+        MODIFIED
     }
 
     /**
@@ -117,6 +112,13 @@ public interface Tree {
     Status getStatus();
 
     /**
+     * Determine whether this tree has been removed or has become disconnected otherwise
+     * (e.g. caused by a refresh, rebase or commit).
+     * @return {@code false} if this tree has been disconnected and {@code true} otherwise.
+     */
+    boolean isConnected();
+
+    /**
      * @return the current location
      */
     @Nonnull

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/TreeLocation.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/TreeLocation.java?rev=1462212&r1=1462211&r2=1462212&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/TreeLocation.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/TreeLocation.java Thu Mar 28 16:55:47 2013
@@ -57,9 +57,8 @@ public interface TreeLocation {
      * Determine whether the underlying {@link org.apache.jackrabbit.oak.api.Tree} or
      * {@link org.apache.jackrabbit.oak.api.PropertyState} for this {@code TreeLocation}
      * is available.
-     * @return  {@code true} if either {@link #getTree()} or {@link #getProperty()} is non {@code null}.
-     *          and {@link #getStatus()} is not {{@link Status#DISCONNECTED}}.
-     * {@code false} otherwise.
+     * @return  {@code true} if the underlying item is available and has not been disconnected.
+     * @see org.apache.jackrabbit.oak.api.Tree#isConnected()
      */
     boolean exists();
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractNodeLocation.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractNodeLocation.java?rev=1462212&r1=1462211&r2=1462212&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractNodeLocation.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractNodeLocation.java Thu Mar 28 16:55:47 2013
@@ -16,16 +16,15 @@
  */
 package org.apache.jackrabbit.oak.core;
 
+import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.api.Tree.Status;
 import org.apache.jackrabbit.oak.api.TreeLocation;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 
-import static com.google.common.base.Objects.toStringHelper;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
 /**
  * AbstractNodeLocation... TODO
  */
@@ -85,8 +84,7 @@ abstract class AbstractNodeLocation<T ex
 
     @Override
     public boolean exists() {
-        Status status = getStatus();
-        return status != null && status != Status.DISCONNECTED && getTree() != null;
+        return tree.isConnected() && getTree() != null;
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractPropertyLocation.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractPropertyLocation.java?rev=1462212&r1=1462211&r2=1462212&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractPropertyLocation.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractPropertyLocation.java Thu Mar 28 16:55:47 2013
@@ -16,15 +16,15 @@
  */
 package org.apache.jackrabbit.oak.core;
 
+import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Tree.Status;
 import org.apache.jackrabbit.oak.api.TreeLocation;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 
-import static com.google.common.base.Objects.toStringHelper;
-import static com.google.common.base.Preconditions.checkNotNull;
-
 /**
  * AbstractPropertyLocation... TODO
  */
@@ -48,8 +48,7 @@ abstract class AbstractPropertyLocation<
 
     @Override
     public boolean exists() {
-        Status status = parentLocation.tree.getPropertyStatus(name);
-        return status != null && status != Status.DISCONNECTED && getProperty() != null;
+        return parentLocation.tree.isConnected() && getProperty() != null;
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java?rev=1462212&r1=1462211&r2=1462212&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ReadOnlyTree.java Thu Mar 28 16:55:47 2013
@@ -18,6 +18,11 @@
  */
 package org.apache.jackrabbit.oak.core;
 
+import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+
 import java.util.Iterator;
 
 import javax.annotation.Nonnull;
@@ -32,11 +37,6 @@ import org.apache.jackrabbit.oak.commons
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
-import static com.google.common.base.Objects.toStringHelper;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
-
 public class ReadOnlyTree implements Tree {
 
     /**
@@ -144,6 +144,11 @@ public class ReadOnlyTree implements Tre
     }
 
     @Override
+    public boolean isConnected() {
+        return true;
+    }
+
+    @Override
     public TreeLocation getLocation() {
         return new NodeLocation(this);
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java?rev=1462212&r1=1462211&r2=1462212&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java Thu Mar 28 16:55:47 2013
@@ -155,14 +155,11 @@ public class TreeImpl implements Tree {
     public Status getPropertyStatus(String name) {
         // TODO: see OAK-212
         Status nodeStatus = getStatus();
-        if (nodeStatus == Status.DISCONNECTED) {
-            return Status.DISCONNECTED;
-        }
         if (nodeStatus == Status.NEW) {
             return (hasProperty(name)) ? Status.NEW : null;
         }
         PropertyState head = internalGetProperty(name);
-        if (head != null && !canRead(head)) {
+        if (head == null || !canRead(head)) {
             // no permission to read status information for existing property
             return null;
         }
@@ -170,10 +167,6 @@ public class TreeImpl implements Tree {
         NodeState parentBase = nodeBuilder.getBaseState();
         PropertyState base = parentBase == null ? null : parentBase.getProperty(name);
 
-        if (head == null) {
-            return (base == null) ? null : Status.DISCONNECTED;
-        }
-
         if (base == null) {
             return Status.NEW;
         } else if (head.equals(base)) {
@@ -219,12 +212,14 @@ public class TreeImpl implements Tree {
         }
     }
 
-    private boolean isDisconnected() {
+    @Override
+    public boolean isConnected() {
+        enterNoStateCheck();
         if (parent == null || nodeBuilder.isConnected()) {
-            return false;
+            return true;
         }
 
-        return !reconnect();
+        return reconnect();
     }
 
     private boolean reconnect() {
@@ -243,11 +238,7 @@ public class TreeImpl implements Tree {
 
     @Override
     public Status getStatus() {
-        enterNoStateCheck();
-
-        if (isDisconnected()) {
-            return Status.DISCONNECTED;
-        }
+        enter();
 
         if (nodeBuilder.isNew()) {
             return Status.NEW;
@@ -329,9 +320,6 @@ public class TreeImpl implements Tree {
     @Override
     public boolean remove() {
         enter();
-        if (isDisconnected()) {
-            throw new IllegalStateException("Cannot remove a disconnected tree");
-        }
 
         if (!isRoot() && parent.hasChild(name)) {
             NodeBuilder parentBuilder = parent.nodeBuilder;
@@ -543,7 +531,7 @@ public class TreeImpl implements Tree {
 
     private void enter() {
         root.checkLive();
-        checkState(!isDisconnected());
+        checkState(isConnected());
         applyPendingMoves();
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/RootImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/RootImplTest.java?rev=1462212&r1=1462211&r2=1462212&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/RootImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/RootImplTest.java Thu Mar 28 16:55:47 2013
@@ -126,7 +126,7 @@ public class RootImplTest {
         root.move("/z", "/x/z");
         root.getTree("/x/z").remove();
 
-        assertEquals(Status.DISCONNECTED, z.getStatus());
+        assertFalse(z.isConnected());
 
         x.addChild("z");
         assertEquals(Status.EXISTING, z.getStatus());

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java?rev=1462212&r1=1462211&r2=1462212&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java Thu Mar 28 16:55:47 2013
@@ -185,7 +185,7 @@ public class TreeImplTest {
         Tree t = tree.addChild("new");
 
         tree.getChild("new").remove();
-        assertEquals(Status.DISCONNECTED, t.getStatus());
+        assertFalse(t.isConnected());
 
         assertNull(tree.getChild("new"));
     }
@@ -298,8 +298,8 @@ public class TreeImplTest {
         Tree y = x.addChild("y");
         x.remove();
 
-        assertEquals(Status.DISCONNECTED, x.getStatus());
-        assertEquals(Status.DISCONNECTED, y.getStatus());
+        assertFalse(x.isConnected());
+        assertFalse(y.isConnected());
     }
 
     @Test
@@ -317,7 +317,7 @@ public class TreeImplTest {
 
         assertEquals(Tree.Status.EXISTING, tree.getPropertyStatus("new"));
         tree.removeProperty("new");
-        assertEquals(Tree.Status.DISCONNECTED, tree.getPropertyStatus("new"));
+        assertNull(tree.getPropertyStatus("new"));
         root.commit();
 
         assertNull(tree.getPropertyStatus("new"));
@@ -325,8 +325,6 @@ public class TreeImplTest {
         Tree x = root.getTree("/x");
         x.setProperty("y", "value1");
         x.remove();
-
-        assertEquals(Status.DISCONNECTED, x.getPropertyStatus("y"));
     }
 
     @Test
@@ -413,8 +411,7 @@ public class TreeImplTest {
 
         assertEquals(Status.EXISTING, x.getStatus());
         assertNull(x.getPropertyStatus("p"));
-        assertEquals(Status.DISCONNECTED, xx.getStatus());
-        assertEquals(Status.DISCONNECTED, xx.getPropertyStatus("q"));
+        assertFalse(xx.isConnected());
     }
 
     @Test
@@ -431,10 +428,8 @@ public class TreeImplTest {
 
         root.getTree("/x").remove();
 
-        assertEquals(Status.DISCONNECTED, x.getStatus());
-        assertEquals(Status.DISCONNECTED, x.getPropertyStatus("p"));
-        assertEquals(Status.DISCONNECTED, xx.getStatus());
-        assertEquals(Status.DISCONNECTED, xx.getPropertyStatus("q"));
+        assertFalse(x.isConnected());
+        assertFalse(xx.isConnected());
     }
 
 }
\ No newline at end of file