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 20:04:38 UTC
svn commit: r1401801 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
kernel/KernelNodeBuilder.java kernel/KernelRootBuilder.java
plugins/memory/MemoryNodeBuilder.java
Author: jukka
Date: Wed Oct 24 18:04:37 2012
New Revision: 1401801
URL: http://svn.apache.org/viewvc?rev=1401801&view=rev
Log:
OAK-170: Child node state builder
Fix base state tracking in MemoryNodeBuilder.setNode().
The child builder will be based on the original base state, but the associated MutableNodeState instance will use the given new state as its base.
This makes it easier for things like KernelRootBuilder to automatically detecting moves and copies.
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRootBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilder.java?rev=1401801&r1=1401800&r2=1401801&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilder.java Wed Oct 24 18:04:37 2012
@@ -19,25 +19,22 @@ package org.apache.jackrabbit.oak.kernel
import static com.google.common.base.Preconditions.checkNotNull;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
class KernelNodeBuilder extends MemoryNodeBuilder {
private final KernelRootBuilder root;
public KernelNodeBuilder(
- MemoryNodeBuilder parent, String name,
- NodeState base, KernelRootBuilder root) {
- super(parent, name, base);
+ MemoryNodeBuilder parent, String name, KernelRootBuilder root) {
+ super(parent, name);
this.root = checkNotNull(root);
}
//--------------------------------------------------< MemoryNodeBuilder >---
@Override
- protected MemoryNodeBuilder createChildBuilder(
- String name, NodeState child) {
- return new KernelNodeBuilder(this, name, child, root);
+ protected MemoryNodeBuilder createChildBuilder(String name) {
+ return new KernelNodeBuilder(this, name, root);
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRootBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRootBuilder.java?rev=1401801&r1=1401800&r2=1401801&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRootBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRootBuilder.java Wed Oct 24 18:04:37 2012
@@ -55,9 +55,8 @@ class KernelRootBuilder extends MemoryNo
//--------------------------------------------------< MemoryNodeBuilder >---
@Override
- protected MemoryNodeBuilder createChildBuilder(
- String name, NodeState child) {
- return new KernelNodeBuilder(this, name, child, this);
+ protected MemoryNodeBuilder createChildBuilder(String name) {
+ return new KernelNodeBuilder(this, name, this);
}
@Override
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=1401801&r1=1401800&r2=1401801&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 18:04:37 2012
@@ -116,17 +116,15 @@ public class MemoryNodeBuilder implement
*
* @param parent parent node state builder
* @param name name of this node
- * @param base base state of this node, or {@code null}
*/
- protected MemoryNodeBuilder(
- MemoryNodeBuilder parent, String name, NodeState base) {
+ protected MemoryNodeBuilder(MemoryNodeBuilder parent, String name) {
this.parent = checkNotNull(parent);
this.name = checkNotNull(name);
this.root = parent.root;
this.revision = parent.revision;
- this.baseState = base;
+ this.baseState = null;
this.writeState = null;
}
@@ -222,12 +220,10 @@ public class MemoryNodeBuilder implement
* Factory method for creating new child state builders. Subclasses may
* override this method to control the behavior of child state builders.
*
- * @param child base state of the new builder, or {@code null}
* @return new builder
*/
- protected MemoryNodeBuilder createChildBuilder(
- String name, NodeState child) {
- return new MemoryNodeBuilder(this, name, child);
+ protected MemoryNodeBuilder createChildBuilder(String name) {
+ return new MemoryNodeBuilder(this, name);
}
/**
@@ -293,15 +289,14 @@ public class MemoryNodeBuilder implement
@Override @Nonnull
public NodeBuilder setNode(String name, NodeState state) {
- MutableNodeState mstate = write();
+ write();
- MutableNodeState cstate = mstate.nodes.get(name);
- if (cstate != null) {
- cstate.reset(state);
- } else {
- mstate.nodes.remove(name);
- createChildBuilder(name, state).write();
+ MutableNodeState childState = writeState.nodes.get(name);
+ if (childState == null) {
+ writeState.nodes.remove(name);
+ childState = createChildBuilder(name).write();
}
+ childState.reset(state);
updated();
return this;
@@ -373,14 +368,9 @@ public class MemoryNodeBuilder implement
@Override
public NodeBuilder child(String name) {
- // look for a read-only child node
- read();
- if (writeState == null) {
- assert baseState != null; // guaranteed by read()
- NodeState childBase = baseState.getChildNode(name);
- if (childBase != null) { // read-only shortcut
- return createChildBuilder(name, childBase);
- }
+ read(); // shortcut when dealing with a read-only child node
+ if (writeState == null && baseState.hasChildNode(name)) {
+ return createChildBuilder(name);
}
// no read-only child node found, switch to write mode
@@ -402,7 +392,7 @@ public class MemoryNodeBuilder implement
writeState.nodes.put(name, new MutableNodeState(childBase));
}
- MemoryNodeBuilder builder = createChildBuilder(name, childBase);
+ MemoryNodeBuilder builder = createChildBuilder(name);
builder.write();
return builder;
}