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 2013/05/02 13:35:13 UTC
svn commit: r1478331 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api:
Root.java Tree.java
Author: mduerig
Date: Thu May 2 11:35:12 2013
New Revision: 1478331
URL: http://svn.apache.org/r1478331
Log:
OAK-798: Review / refactor TreeImpl and related classes
Javadoc
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java?rev=1478331&r1=1478330&r2=1478331&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Root.java Thu May 2 11:35:12 2013
@@ -21,21 +21,19 @@ package org.apache.jackrabbit.oak.api;
import javax.annotation.Nonnull;
/**
- * The root of a {@link Tree}.
- * <p/>
- * The data returned by this class filtered for the access rights that are set
- * in the {@link ContentSession} that created this object.
- * <p/>
+ * A {@code Root} instance serves as a container for a {@link Tree}. It is
+ * obtained from a {@link ContentSession}, which governs accessibility and
+ * visibility of the {@code Tree} and its sub trees.
+ * <p>
* All root instances created by a content session become invalid after the
* content session is closed. Any method called on an invalid root instance
* will throw an {@code InvalidStateException}.
- * <p/>
- * {@link Tree} instances may become disconnected after a call to {@link #refresh()},
- * {@link #rebase()} or {@link #commit()}. Any access to disconnected tree instances
- * - except for {@link Tree#getName()}, {@link Tree#isRoot()}, {@link Tree#getPath()},
- * {@link Tree#getParent()} and {@link Tree#exists()} - will cause an
+ * <p>
+ * {@link Tree} instances may become non existing after a call to
+ * {@link #refresh()}, {@link #rebase()} or {@link #commit()}. Any write
+ * access to non existing {@code Tree} instances will cause an
* {@code InvalidStateException}.
- * TODO document iterability / existence (OAK-798)
+ * @see Tree Existence and iterability of trees
*/
public interface Root {
@@ -92,9 +90,9 @@ public interface Root {
/**
* Get a tree location for a given absolute {@code path}
- *
* @param path absolute path to the location
* @return the tree location for {@code path}
+ * @deprecated use {@link #getTree(String)}
*/
@Nonnull
@Deprecated
@@ -102,22 +100,21 @@ public interface Root {
/**
* Rebase this root instance to the latest revision. After a call to this method,
- * trees obtained through {@link #getTree(String)} may become disconnected.
+ * trees obtained through {@link #getTree(String)} may become non existing.
*/
void rebase();
/**
* Reverts all changes made to this root and refreshed to the latest trunk.
* After a call to this method, trees obtained through {@link #getTree(String)}
- * may become disconnected.
+ * may become non existing.
*/
void refresh();
/**
- * Atomically apply all changes made to the tree beneath this root to the
+ * Atomically apply all changes made to the tree contained in this root to the
* underlying store and refreshes this root. After a call to this method,
- * all trees obtained through {@link #getTree(String)} become invalid and fresh
- * instances must be obtained.
+ * trees obtained through {@link #getTree(String)} may become non existing.
*
* @throws CommitFailedException
*/
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java?rev=1478331&r1=1478330&r2=1478331&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java Thu May 2 11:35:12 2013
@@ -23,46 +23,65 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
/**
- * A tree instance represents a snapshot of the {@code ContentRepository}
- * tree at the time the instance was acquired. Tree instances may
- * become invalid over time due to garbage collection of old content, at
- * which point an outdated snapshot will start throwing
+ * A tree instance represents a snapshot of the {@link ContentRepository}
+ * tree at the time the instance was acquired from a {@link ContentSession}.
+ * Tree instances may become invalid over time due to garbage collection of
+ * old content, at which point an outdated snapshot will start throwing
* {@code IllegalStateException}s to indicate that the snapshot is no
* longer available.
- * <p/>
+ *
+ * <h2>Order and orderability</h2>
* The children of a {@code Tree} are generally unordered. That is, the
* sequence of the children returned by {@link #getChildren()} may change over
- * time as this Tree is modified either directly or through some other session.
- * Calling {@link #orderBefore(String)} will persist the current order and
- * maintain the order as new children are added or removed. In this case a new
- * child will be inserted after the last child as seen by {@link #getChildren()}.
- * <p/>
+ * time as this {@code Tree} is modified either directly or through some other
+ * session. Calling {@link #orderBefore(String)} will persist the current order
+ * and maintain the order as new children are added or removed. In this case a
+ * new child will be inserted after the last child as seen by {@link #getChildren()}.
+ *
+ * <h2>State and state transitions</h2>
* A tree instance belongs to the client and its state is only modified
* in response to method calls made by the client. The various accessors
* on this interface mirror these of the underlying {@code NodeState}
* interface. However, since instances of this class are mutable return
* values may change between invocations.
- * <p/>
+ * <p>
+ * All tree instances created in the context of a content session become invalid
+ * after the content session is closed. Any method called on an invalid tree instance
+ * will throw an {@code InvalidStateException}.
+ * <p>
+ * {@link Tree} instances may become non existing after a call to
+ * {@link Root#refresh()}, {@link Root#rebase()} or {@link Root#commit()}. Any write
+ * access to non existing {@code Tree} instances will cause an
+ * {@code InvalidStateException}.
+ *
+ * <h2>Thread safety</h2>
* Tree instances are not thread-safe for write access, so writing clients
* need to ensure that they are not accessed concurrently from multiple
* threads. Instances are however thread-safe for read access, so
* implementations need to ensure that all reading clients see a
* coherent state.
- * <p/>
- * The data returned by this class and intermediary objects such as
- * {@link PropertyState} is filtered for the access rights that are set in the
- * {@link ContentSession} that created the {@link Root} of this object.
- * <p/>
- * All tree instances created in the context of a content session become invalid
- * after the content session is closed. Any method called on an invalid tree instance
- * will throw an {@code InvalidStateException}.
- * <p/>
- * {@link Tree} instances may become disconnected after a call to {@link Root#refresh()},
- * {@link Root#rebase()} or {@link Root#commit()}. Any access to disconnected tree instances
- * - except for {@link Tree#getName()}, {@link Tree#isRoot()}, {@link Tree#getPath()},
- * {@link Tree#getParent()} and {@link Tree#exists()} - will cause an
- * {@code InvalidStateException}.
- * TODO document iterability / existence (OAK-798)
+ *
+ * <h2>Visibility and access control</h2>
+ * The data returned by this class and intermediary objects such as are access
+ * controlled governed by the {@code ContentSession} instance from which
+ * the containing {@code Root} was obtained.
+ *
+ * <h2>Existence and iterability of trees</h2>
+ * <p>
+ * The {@link #getChild(String)} method is special in that it <em>never</em>
+ * returns a {@code null} value, even if the named tree does not exist.
+ * Instead a client should use the {@link #exists()} method on the returned
+ * tree to check whether that tree exists.
+ * <p>
+ * The <em>iterability</em> of a tree is a related to existence. A node
+ * state is <em>iterable</em> if it is included in the return values of the
+ * {@link #getChildrenCount()} and {@link #getChildren()} methods. An iterable
+ * node is guaranteed to exist, though not all existing nodes are necessarily
+ * iterable.
+ * <p>
+ * Furthermore, a non-existing node is guaranteed to contain no properties
+ * or iterable child nodes. It can, however contain non-iterable children.
+ * Such scenarios are typically the result of access control restrictions.
*/
public interface Tree {