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 2012/07/25 18:39:49 UTC
svn commit: r1365662 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/core/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/
Author: mduerig
Date: Wed Jul 25 16:39:49 2012
New Revision: 1365662
URL: http://svn.apache.org/viewvc?rev=1365662&view=rev
Log:
OAK-207: TreeImpl#getStatus() never returns REMOVED
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java
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=1365662&r1=1365661&r2=1365662&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 Wed Jul 25 16:39:49 2012
@@ -47,7 +47,7 @@ public class TreeImpl implements Tree, P
/** Underlying {@code Root} of this {@code Tree} instance */
private final RootImpl root;
- /** Parent of this tree */
+ /** Parent of this tree. Null for the root and this for removed trees. */
private TreeImpl parent;
/** Name of this tree */
@@ -197,6 +197,10 @@ public class TreeImpl implements Tree, P
@Override
public Status getStatus() {
+ if (isRemoved()) {
+ return Status.REMOVED;
+ }
+
NodeState baseState = getBaseState();
if (baseState == null) {
// Did not exist before, so its NEW
@@ -255,11 +259,16 @@ public class TreeImpl implements Tree, P
@Override
public boolean remove() {
+ if (isRemoved()) {
+ throw new IllegalStateException("Cannot remove removed tree");
+ }
+
if (!isRoot() && parent.hasChild(name)) {
NodeStateBuilder builder = parent.getNodeStateBuilder();
builder.removeNode(name);
parent.children.remove(name);
- parent.root.purge();
+ parent = this;
+ root.purge();
return true;
} else {
return false;
@@ -304,6 +313,10 @@ public class TreeImpl implements Tree, P
@CheckForNull
protected NodeState getBaseState() {
+ if (isRemoved()) {
+ throw new IllegalStateException("Cannot get the base state of a removed tree");
+ }
+
NodeState parentBaseState = parent.getBaseState();
return parentBaseState == null
? null
@@ -312,6 +325,10 @@ public class TreeImpl implements Tree, P
@Nonnull
protected synchronized NodeStateBuilder getNodeStateBuilder() {
+ if (isRemoved()) {
+ throw new IllegalStateException("Cannot get a builder for a removed tree");
+ }
+
if (nodeStateBuilder == null) {
nodeStateBuilder = parent.getNodeStateBuilder().getChildBuilder(name);
root.addListener(this);
@@ -329,6 +346,10 @@ public class TreeImpl implements Tree, P
* @param destName new name for this tree
*/
void moveTo(TreeImpl destParent, String destName) {
+ if (isRemoved()) {
+ throw new IllegalStateException("Cannot move removed tree");
+ }
+
parent.children.remove(name);
destParent.children.put(destName, this);
@@ -343,7 +364,15 @@ public class TreeImpl implements Tree, P
//------------------------------------------------------------< private >---
+ private boolean isRemoved() {
+ return parent == this;
+ }
+
private void buildPath(StringBuilder sb) {
+ if (isRemoved()) {
+ throw new IllegalStateException("Cannot build the path of a removed tree");
+ }
+
if (parent != null) {
parent.buildPath(sb);
if (sb.length() > 0) {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java?rev=1365662&r1=1365661&r2=1365662&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java Wed Jul 25 16:39:49 2012
@@ -175,11 +175,11 @@ public class NodeDelegate extends ItemDe
/**
* Returns an iterator for traversing all the children of this node.
- * If the node is orderable (there is an "<code>oak:childOrder</code>"
+ * If the node is orderable (there is an "{@code oak:childOrder}"
* property) then the iterator will return child nodes in the specified
* order. Otherwise the ordering of the iterator is undefined.
*
- * @return child nodes of the node
+ * @return child nodes of the node
*/
@Nonnull
public Iterator<NodeDelegate> getChildren() throws InvalidItemStateException {
@@ -346,7 +346,9 @@ public class NodeDelegate extends ItemDe
private synchronized void resolve() {
if (tree != null) {
- tree = sessionDelegate.getTree(tree.getPath());
+ tree = tree.getStatus() == Status.REMOVED
+ ? null
+ : sessionDelegate.getTree(tree.getPath());
}
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java?rev=1365662&r1=1365661&r2=1365662&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java Wed Jul 25 16:39:49 2012
@@ -278,7 +278,9 @@ public class PropertyDelegate extends It
private synchronized void resolve() {
if (parent != null) {
- parent = sessionDelegate.getTree(parent.getPath());
+ parent = parent.getStatus() == Status.REMOVED
+ ? null
+ : sessionDelegate.getTree(parent.getPath());
if (parent == null) {
propertyState = null;