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/04/25 17:38:07 UTC
svn commit: r1330354 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel:
KernelNodeStore.java KernelRoot.java KernelTree.java NodeStateBuilder.java
NodeStore.java
Author: mduerig
Date: Wed Apr 25 15:38:07 2012
New Revision: 1330354
URL: http://svn.apache.org/viewvc?rev=1330354&view=rev
Log:
OAK-9: Internal tree builder
- update javadoc
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRoot.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelTree.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStateBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStore.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java?rev=1330354&r1=1330353&r2=1330354&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java Wed Apr 25 15:38:07 2012
@@ -44,12 +44,12 @@ public class KernelNodeStore implements
}
@Override
- public NodeStateBuilder getBuilder(NodeState nodeState) {
- if (!(nodeState instanceof KernelNodeState)) {
+ public NodeStateBuilder getBuilder(NodeState base) {
+ if (!(base instanceof KernelNodeState)) {
throw new IllegalArgumentException("Alien node state");
}
- KernelNodeState kernelNodeState = (KernelNodeState) nodeState;
+ KernelNodeState kernelNodeState = (KernelNodeState) base;
String branchRevision = kernel.branch(kernelNodeState.getRevision());
String path = kernelNodeState.getPath();
return KernelNodeStateBuilder.create(kernel, valueFactory, path, branchRevision);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRoot.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRoot.java?rev=1330354&r1=1330353&r2=1330354&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRoot.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRoot.java Wed Apr 25 15:38:07 2012
@@ -33,17 +33,11 @@ import static org.apache.jackrabbit.mk.u
import static org.apache.jackrabbit.mk.util.PathUtils.getParentPath;
/**
- * FIXME: update javadoc
- * This {@code Root} implementation accumulates all changes into a json diff
- * and applies them to the microkernel on {@link #commit()}
+ * This {@code Root} implementation listens on the root of the underlying
+ * {@link Tree} using a {@link Listener}. All changes are directly applied
+ * to the {@link NodeStateBuilder} for the relevant sub-tree.
*
- * TODO: review/rewrite when OAK-45 is resolved
- * When the MicroKernel has support for branching and merging private working copies,
- * this implementation could:
- * - directly write every operation through to the private working copy
- * - batch write operations through to the private working copy when the
- * transient space gets too big.
- * - spool write operations through to the private working copy on a background thread
+ * TODO: Refactor tree to be based on the individual NodeStateBuilders instead of NodeStates
*/
public class KernelRoot implements Root {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelTree.java?rev=1330354&r1=1330353&r2=1330354&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelTree.java Wed Apr 25 15:38:07 2012
@@ -40,6 +40,9 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.util.Iterators.flatten;
import static org.apache.jackrabbit.oak.util.Iterators.map;
+/**
+ * TODO: Refactor to be based on the individual NodeStateBuilders instead of NodeStates
+ */
public class KernelTree implements Tree {
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStateBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStateBuilder.java?rev=1330354&r1=1330353&r2=1330354&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStateBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStateBuilder.java Wed Apr 25 15:38:07 2012
@@ -19,16 +19,75 @@ package org.apache.jackrabbit.oak.kernel
import org.apache.jackrabbit.oak.api.PropertyState;
/**
- * FIXME document
+ * Builder interface for constructing new {@link NodeState node states}.
*/
public interface NodeStateBuilder {
+
+ /**
+ * Returns an immutable node state that matches the current state of
+ * the builder.
+ *
+ * @return immutable node state
+ */
NodeState getNodeState();
+
+ /**
+ * Get a builder for a child node
+ *
+ * @param name name of the child node
+ * @return builder for the {@code name}d child node
+ */
NodeStateBuilder getChildBuilder(String name);
+
+ /**
+ * Add a sub-tree
+ *
+ * @param name name child node containing the sub-tree
+ * @param nodeState sub-tree
+ * @return builder for the added sub-tree
+ */
NodeStateBuilder addNode(String name, NodeState nodeState);
+
+ /**
+ * Set or removes the named child node.
+ *
+ * @param name name of the child node
+ */
NodeStateBuilder addNode(String name);
+
+ /**
+ * Remove a child node
+ * @param name name of the child node
+ * @return {@code true} iff the child node existed
+ */
boolean removeNode(String name);
+
+ /**
+ * Set a property.
+ *
+ * @param property property to set
+ */
void setProperty(PropertyState property);
+
+ /**
+ * Remove the named property
+ * @param name name of the property
+ */
void removeProperty(String name);
+
+ /**
+ * Move this node
+ * @param destParent builder for the parent node of the destination
+ * @param destName name of the moved node
+ * @return {@code true} iff the move succeeded
+ */
boolean moveTo(NodeStateBuilder destParent, String destName);
+
+ /**
+ * Copy this node
+ * @param destParent builder for the parent node of the destination
+ * @param destName name of the copied node
+ * @return {@code true} iff the copy succeeded
+ */
boolean copyTo(NodeStateBuilder destParent, String destName);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStore.java?rev=1330354&r1=1330353&r2=1330354&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStore.java Wed Apr 25 15:38:07 2012
@@ -19,15 +19,12 @@ package org.apache.jackrabbit.oak.kernel
import org.apache.jackrabbit.oak.api.CommitFailedException;
/**
- * TODO update javadoc
* Storage abstraction for content trees. At any given point in time
* the stored content tree is rooted at a single immutable node state.
* <p>
* This is a low-level interface that doesn't cover functionality like
* merging concurrent changes or rejecting new tree states based on some
* higher-level consistency constraints.
- *
- * TODO: check if can be replaced by mk.model.NodeStore
*/
public interface NodeStore {
@@ -39,16 +36,18 @@ public interface NodeStore {
NodeState getRoot();
/**
- * FIXME document
- * @param nodeState
- * @return
+ * Returns a builder for constructing a new or modified node state.
+ * The builder is initialized with all the properties and child nodes
+ * from the given base node state.
+ *
+ * @param base base node state
+ * @return builder instance
*/
- NodeStateBuilder getBuilder(NodeState nodeState);
+ NodeStateBuilder getBuilder(NodeState base);
/**
- * FIXME document
- * @param builder
- * @return
+ * Updates the state of the content tree.
+ * @param builder builder containing the new node state
*/
void apply(NodeStateBuilder builder) throws CommitFailedException;