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 2012/10/24 17:44:45 UTC
svn commit: r1401737 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
plugins/memory/MemoryNodeBuilder.java spi/state/NodeBuilder.java
spi/state/ReadOnlyBuilder.java
Author: jukka
Date: Wed Oct 24 15:44:44 2012
New Revision: 1401737
URL: http://svn.apache.org/viewvc?rev=1401737&view=rev
Log:
OAK-170: Child node state builder
Introduce NodeBuilder.getBaseState() to simplify state tracking
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java?rev=1401737&r1=1401736&r2=1401737&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java Wed Oct 24 15:44:44 2012
@@ -100,11 +100,10 @@ public class MemoryNodeBuilder implement
private long revision;
/**
- * The read state of this builder. Originally the immutable base state
- * in an unconnected builder, or the shared mutable state
- * (see {@link #writeState}) once the this builder has been connected.
+ * The base state of this builder, or {@code null} if this builder
+ * represents a new node that didn't yet exist in the base content tree.
*/
- private NodeState readState;
+ private final NodeState baseState;
/**
* The shared mutable state of connected builder instances, or
@@ -117,7 +116,7 @@ public class MemoryNodeBuilder implement
*
* @param parent parent node state builder
* @param name name of this node
- * @param base base state of this node
+ * @param base base state of this node, or {@code null}
*/
protected MemoryNodeBuilder(
MemoryNodeBuilder parent, String name, NodeState base) {
@@ -127,7 +126,7 @@ public class MemoryNodeBuilder implement
this.root = parent.root;
this.revision = parent.revision;
- this.readState = checkNotNull(base);
+ this.baseState = base;
this.writeState = null;
}
@@ -136,16 +135,15 @@ public class MemoryNodeBuilder implement
*
* @param base base state of the new builder
*/
- public MemoryNodeBuilder(NodeState base) {
+ public MemoryNodeBuilder(@Nonnull NodeState base) {
this.parent = null;
this.name = null;
this.root = this;
this.revision = 0;
- MutableNodeState mstate = new MutableNodeState(checkNotNull(base));
- this.readState = mstate;
- this.writeState = mstate;
+ this.baseState = checkNotNull(base);
+ this.writeState = new MutableNodeState(baseState);
}
private NodeState read() {
@@ -161,13 +159,17 @@ public class MemoryNodeBuilder implement
"This node has been removed.");
}
} else if (mstate != writeState) {
- readState = mstate;
writeState = mstate;
}
}
revision = root.revision;
}
- return readState;
+ if (writeState != null) {
+ return writeState;
+ } else {
+ assert baseState != null; // new nodes must have a writeState
+ return baseState;
+ }
}
private MutableNodeState write() {
@@ -184,11 +186,14 @@ public class MemoryNodeBuilder implement
throw new IllegalStateException(
"This node has been removed.");
}
- mstate = new MutableNodeState(readState);
+ NodeState base = baseState;
+ if (base == null) {
+ base = NULL_STATE;
+ }
+ mstate = new MutableNodeState(base);
pstate.nodes.put(name, mstate);
}
if (mstate != writeState) {
- readState = mstate;
writeState = mstate;
}
}
@@ -243,6 +248,11 @@ public class MemoryNodeBuilder implement
}
@Override
+ public NodeState getBaseState() {
+ return baseState;
+ }
+
+ @Override
public long getChildNodeCount() {
return read().getChildNodeCount();
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java?rev=1401737&r1=1401736&r2=1401737&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java Wed Oct 24 15:44:44 2012
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.oak.spi.state;
+import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.PropertyState;
@@ -36,6 +37,16 @@ public interface NodeBuilder {
NodeState getNodeState();
/**
+ * Returns the original base state that this builder is modifying.
+ * Returns {@code null} if this builder represents a new node that
+ * didn't exist in the base content tree.
+ *
+ * @return base node state, or {@code null}
+ */
+ @CheckForNull
+ NodeState getBaseState();
+
+ /**
* Returns the current number of child nodes.
*
* @return number of child nodes
@@ -59,7 +70,7 @@ public interface NodeBuilder {
Iterable<String> getChildNodeNames();
/**
- * Adds or replaces a sub-ree.
+ * Adds or replaces a subtree.
*
* @param name name of the child node containing the new subtree
* @param nodeState subtree
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java?rev=1401737&r1=1401736&r2=1401737&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java Wed Oct 24 15:44:44 2012
@@ -43,6 +43,11 @@ public class ReadOnlyBuilder implements
}
@Override
+ public NodeState getBaseState() {
+ return state;
+ }
+
+ @Override
public long getChildNodeCount() {
return state.getChildNodeCount();
}