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/26 15:35:13 UTC
svn commit: r1330845 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core:
RootImpl.java TreeImpl.java
Author: mduerig
Date: Thu Apr 26 13:35:13 2012
New Revision: 1330845
URL: http://svn.apache.org/viewvc?rev=1330845&view=rev
Log:
OAK-18: Define Oak API
javadoc, minor cleanup
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java?rev=1330845&r1=1330844&r2=1330845&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java Thu Apr 26 13:35:13 2012
@@ -37,25 +37,32 @@ import static org.apache.jackrabbit.mk.u
* 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: Refactor tree to be based on the individual NodeStateBuilders instead of NodeStates
*/
public class RootImpl implements Root {
+ /** The underlying store to which this root belongs */
private final NodeStore store;
+
+ /** The name of the workspace we are operating on */
private final String workspaceName;
+ /** Listener for changes on the content tree */
+ private TreeListener treeListener = new TreeListener();
+
/** Base node state of this tree */
private NodeState base;
+ /** The builder for this root */
+ private NodeStateBuilder nodeStateBuilder;
+
/** Root state of this tree */
private TreeImpl root;
- /** Listener for changes on the content tree */
- private TreeListener treeListener = new TreeListener();
-
- private NodeStateBuilder nodeStateBuilder;
-
+ /**
+ * New instance bases on a given {@link NodeStore} and a workspace
+ * @param store node store
+ * @param workspaceName name of the workspace
+ */
public RootImpl(NodeStore store, String workspaceName) {
this.store = store;
this.workspaceName = workspaceName;
@@ -103,9 +110,9 @@ public class RootImpl implements Root {
@Override
public void commit() throws CommitFailedException {
store.apply(nodeStateBuilder);
+ treeListener = new TreeListener();
base = store.getRoot().getChildNode(workspaceName);
nodeStateBuilder = store.getBuilder(base);
- treeListener = new TreeListener();
root = new TreeImpl(store, nodeStateBuilder, treeListener);
}
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=1330845&r1=1330844&r2=1330845&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 Apr 26 13:35:13 2012
@@ -35,8 +35,14 @@ import java.util.List;
import static org.apache.jackrabbit.oak.util.Iterators.flatten;
+/**
+ * Implementation of tree based on {@link NodeStateBuilder}s. Each subtree
+ * has an associated node state builder which is used for building the new
+ * trees resulting from calling mutating methods.
+ */
public class TreeImpl implements Tree {
+ /** Underlying store */
private final NodeStore store;
/**
@@ -66,7 +72,14 @@ public class TreeImpl implements Tree {
this.name = name;
this.parent = parent;
}
-
+
+ /**
+ * Create a new instance which represents the root of a tree.
+ * @param store underlying store to the tree
+ * @param nodeStateBuilder builder for the root
+ * @param listener change listener for the tree. May be {@code null} if
+ * listening to changes is not needed.
+ */
TreeImpl(NodeStore store, NodeStateBuilder nodeStateBuilder, Listener listener) {
this(store, nodeStateBuilder.getNodeState(), nodeStateBuilder, null, "", listener);
}
@@ -161,34 +174,45 @@ public class TreeImpl implements Tree {
@Override
public Status getPropertyStatus(String name) {
if (baseState == null) {
+ // This instance is NEW...
if (hasProperty(name)) {
+ // ...so all children are new
return Status.NEW;
}
else {
+ // ...unless they don't exist.
return null;
}
}
else {
if (hasProperty(name)) {
+ // We have the property...
if (baseState.getProperty(name) == null) {
+ // ...but didn't have it before. So its NEW.
return Status.NEW;
}
else {
+ // ... and did have it before. So...
PropertyState base = baseState.getProperty(name);
PropertyState head = getProperty(name);
if (base.equals(head)) {
+ // ...it's EXISTING if it hasn't changed
return Status.EXISTING;
}
else {
+ // ...and MODIFIED otherwise.
return Status.MODIFIED;
}
}
}
else {
+ // We don't have the property
if (baseState.getProperty(name) == null) {
+ // ...and didn't have it before. So it doesn't exist.
return null;
}
else {
+ // ...and didn't have it before. So it's REMOVED
return Status.REMOVED;
}
}
@@ -225,32 +249,43 @@ public class TreeImpl implements Tree {
@Override
public Status getChildStatus(String name) {
if (baseState == null) {
+ // This instance is NEW...
if (hasChild(name)) {
+ // ...so all children are new
return Status.NEW;
}
else {
+ // ...unless they don't exist.
return null;
}
}
else {
if (hasChild(name)) {
+ // We have the child...
if (baseState.getChildNode(name) == null) {
+ // ...but didn't have it before. So its NEW.
return Status.NEW;
}
else {
+ // ... and did have it before. So...
if (isSame(baseState.getChildNode(name), getNodeState().getChildNode(name))) {
+ // ...it's EXISTING if it hasn't changed
return Status.EXISTING;
}
else {
+ // ...and MODIFIED otherwise.
return Status.MODIFIED;
}
}
}
else {
+ // We don't have the child
if (baseState.getChildNode(name) == null) {
+ // ...and didn't have it before. So it doesn't exist.
return null;
}
else {
+ // ...and didn't have it before. So it's REMOVED
return Status.REMOVED;
}
}