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/04/29 01:08:45 UTC

svn commit: r1331852 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak: kernel/KernelNodeStore.java spi/state/AbstractNodeStore.java spi/state/NodeState.java spi/state/NodeStateDiff.java

Author: jukka
Date: Sat Apr 28 23:08:45 2012
New Revision: 1331852

URL: http://svn.apache.org/viewvc?rev=1331852&view=rev
Log:
OAK-30: Strongly typed wrapper for the MicroKernel

Extract an AbstractNodeStore class with generic functionality.
Some additional documentation about the state interfaces.

Added:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeStore.java
      - copied, changed from r1331846, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
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/spi/state/NodeState.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStateDiff.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=1331852&r1=1331851&r2=1331852&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 Sat Apr 28 23:08:45 2012
@@ -22,6 +22,7 @@ import org.apache.jackrabbit.mk.api.Micr
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.CoreValueFactory;
 import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.spi.state.AbstractNodeStore;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateBuilder;
@@ -33,7 +34,7 @@ import java.util.Set;
 /**
  * {@link MicroKernel}-based {@link NodeStore} implementation.
  */
-public class KernelNodeStore implements NodeStore {
+public class KernelNodeStore extends AbstractNodeStore {
 
     final MicroKernel kernel;
     final CoreValueFactory valueFactory;

Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeStore.java (from r1331846, 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/spi/state/AbstractNodeStore.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeStore.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java&r1=1331846&r2=1331852&rev=1331852&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/spi/state/AbstractNodeStore.java Sat Apr 28 23:08:45 2012
@@ -16,59 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.jackrabbit.oak.kernel;
+package org.apache.jackrabbit.oak.spi.state;
 
-import org.apache.jackrabbit.mk.api.MicroKernel;
-import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.api.CoreValueFactory;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.spi.state.NodeStateBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 
 import java.util.HashSet;
 import java.util.Set;
-/**
- * {@link MicroKernel}-based {@link NodeStore} implementation.
- */
-public class KernelNodeStore implements NodeStore {
-
-    final MicroKernel kernel;
-    final CoreValueFactory valueFactory;
-
-    public KernelNodeStore(MicroKernel kernel, CoreValueFactory valueFactory) {
-        this.kernel = kernel;
-        this.valueFactory = valueFactory;
-    }
 
-    @Override
-    public NodeState getRoot() {
-        return new KernelNodeState(kernel, valueFactory, "/", kernel.getHeadRevision());
-    }
-
-    @Override
-    public NodeStateBuilder getBuilder(NodeState base) {
-        if (!(base instanceof KernelNodeState)) {
-            throw new IllegalArgumentException("Alien node state");
-        }
-
-        KernelNodeState kernelNodeState = (KernelNodeState) base;
-        String branchRevision = kernel.branch(kernelNodeState.getRevision());
-        String path = kernelNodeState.getPath();
-        return KernelNodeStateBuilder.create(kernel, valueFactory, path, branchRevision);
-    }
-
-    @Override
-    public void apply(NodeStateBuilder builder) throws CommitFailedException {
-        if (!(builder instanceof  KernelNodeStateBuilder)) {
-            throw new IllegalArgumentException("Alien builder");
-        }
-        
-        KernelNodeStateBuilder kernelNodeStateBuilder = (KernelNodeStateBuilder) builder;
-        kernelNodeStateBuilder.apply();
-    }
+public abstract class AbstractNodeStore implements NodeStore {
 
     @Override
     public void compare(NodeState before, NodeState after, NodeStateDiff diff) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java?rev=1331852&r1=1331851&r2=1331852&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java Sat Apr 28 23:08:45 2012
@@ -19,9 +19,9 @@ package org.apache.jackrabbit.oak.spi.st
 import org.apache.jackrabbit.oak.api.PropertyState;
 
 /**
- * A tree consists of nodes and properties, each of which evolves
- * through different states during its lifecycle. This interface
- * represents a specific, immutable state of a node in a tree. A node
+ * A node in a content tree consists of child nodes and properties, each
+ * of which evolves through different states during its lifecycle. This
+ * interface represents a specific, immutable state of a node. The state
  * consists of an unordered set of name -> item mappings, where
  * each item is either a property or a child node.
  * <p>
@@ -91,8 +91,6 @@ import org.apache.jackrabbit.oak.api.Pro
  */
 public interface NodeState {
 
-    // TODO: check if can be replaced by the mk.model interface
-
     /**
      * Returns the named property. The name is an opaque string and
      * is not parsed or otherwise interpreted by this method.

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStateDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStateDiff.java?rev=1331852&r1=1331851&r2=1331852&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStateDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStateDiff.java Sat Apr 28 23:08:45 2012
@@ -27,8 +27,12 @@ import org.apache.jackrabbit.oak.api.Pro
  * added, changed or deleted methods where appropriate. Differences in
  * the ordering of properties or child nodes do not affect the comparison,
  * and the order in which such differences are reported is unspecified.
- *
- * TODO: check if can be replaced by mk.model.NodeStateDiff
+ * <p>
+ * Note that the {@link NodeStore#compare(NodeState, NodeState, NodeStateDiff)}
+ * method only compares the given states without recursing to the subtrees
+ * below. An implementation of this interface should recursively call that
+ * method for the relevant child node entries to find out all the changes
+ * across the entire subtree below the given node.
  */
 public interface NodeStateDiff {