You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2012/03/12 18:05:55 UTC

svn commit: r1299739 - in /jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit: state/ utils/

Author: mduerig
Date: Mon Mar 12 17:05:54 2012
New Revision: 1299739

URL: http://svn.apache.org/viewvc?rev=1299739&view=rev
Log:
Microkernel based prototype of JCR implementation (WIP)
- Javadoc, comments 

Modified:
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/EmptyNodeState.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/PersistentNodeState.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/TransientNodeState.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Arrays.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Function0.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Predicates.java
    jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Unchecked.java

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/EmptyNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/EmptyNodeState.java?rev=1299739&r1=1299738&r2=1299739&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/EmptyNodeState.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/EmptyNodeState.java Mon Mar 12 17:05:54 2012
@@ -26,6 +26,10 @@ import org.apache.jackrabbit.utils.Itera
 
 import java.util.Iterator;
 
+/**
+ * A {@code NodeState} implementation which is empty. That is, does not
+ * have properties nor child nodes.
+ */
 public final class EmptyNodeState extends AbstractNodeState {
     public static final EmptyNodeState INSTANCE = new EmptyNodeState();
     

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/PersistentNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/PersistentNodeState.java?rev=1299739&r1=1299738&r2=1299739&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/PersistentNodeState.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/PersistentNodeState.java Mon Mar 12 17:05:54 2012
@@ -40,11 +40,27 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+/**
+ * A {@code NodeState} implementation on top of a {@code MicroKernel}.
+ */
 public class PersistentNodeState extends AbstractNodeState {
     private final MicroKernel microkernel;
     private final String revision;
     private final Path path;
-    
+
+    /**
+     * Create a new {@code NodeState} instance for the given {@code path} and {@code revision}.
+     *
+     * @param microkernel
+     * @param path
+     * @param revision
+     */
+    public PersistentNodeState(MicroKernel microkernel, Path path, String revision) {
+        this.microkernel = microkernel;
+        this.path = path;
+        this.revision = revision;
+    }
+
     private final Function0<Map<String, PropertyStateImpl>> properties =
         new Function0<Map<String, PropertyStateImpl>>() {
             private Map<String, PropertyStateImpl> properties;
@@ -57,13 +73,7 @@ public class PersistentNodeState extends
                 return properties;
             }
     };
-    
-    PersistentNodeState(MicroKernel microkernel, Path path, String revision) {
-        this.microkernel = microkernel;
-        this.path = path;
-        this.revision = revision;
-    }
-    
+
     @Override
     public PropertyState getProperty(String name) {
         return properties.apply().get(name);
@@ -98,7 +108,7 @@ public class PersistentNodeState extends
 
     @Override
     public Iterable<? extends ChildNodeEntry> getChildNodeEntries(final long offset, final long length) {
-        // fixme: microkernel should also use long for length
+        // fixme: microkernel should also use long for length (OAK-10)
         String json = microkernel.getNodes(path.toMkPath(), revision, 1, offset, (int) length, null);
         final List<ChildNodeEntry> childNodeEntries = new ArrayList<ChildNodeEntry>();
 

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/TransientNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/TransientNodeState.java?rev=1299739&r1=1299738&r2=1299739&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/TransientNodeState.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/TransientNodeState.java Mon Mar 12 17:05:54 2012
@@ -41,6 +41,10 @@ import static org.apache.jackrabbit.util
 import static org.apache.jackrabbit.utils.Iterators.flatten;
 import static org.apache.jackrabbit.utils.Iterators.map;
 
+/**
+ * A {@code TransientNodeState} instance uses a {@code TransientSpace} to record changes
+ * to a {@code PersistedNodeState}.
+ */
 public class TransientNodeState {
     private static final long BATCH_SIZE = 256;
 
@@ -55,37 +59,70 @@ public class TransientNodeState {
         this.nodeDelta = nodeDelta;
     }
 
+    /**
+     * @return {@code true} iff this is the root node
+     */
     public boolean isRoot() {
         return getPath().isRoot();
     }
 
+    /**
+     * @return the path of this node
+     */
     public Path getPath() {
         return getNodeDelta().getPath();
     }
 
+    /**
+     * @return the name of this node
+     */
     public String getName() {
         return getPath().getName();
     }
 
+    /**
+     * @return {@code true} iff this node has been transiently added.
+     */
     public boolean isNew() {
         NodeDelta delta = getNodeDelta();
         return delta.isTransient() && !delta.isRemoved();
     }
 
+    /**
+     * @return {@code true} iff this node has been transiently modified.
+     */
     public boolean isModified() {
         return getNodeDelta().isTransient();
     }
 
+    /**
+     * Transiently add a node with the given {@code name}.
+     * @param name
+     * @return the added node
+     * @throws ItemExistsException if a node with that name exists already.
+     */
     public TransientNodeState addNode(String name) throws ItemExistsException {
         NodeDelta child = getNodeDelta().addNode(name);
         return getNodeState(child);
     }
 
+    /**
+     * Transiently remove this node.
+     * @throws ItemNotFoundException if this node has been removed already
+     */
     public void remove() throws ItemNotFoundException {
         getNodeStateProvider().release(getPath());
         getNodeDelta().getParent().removeNode(getName());
     }
 
+    /**
+     * Transiently move this node.
+     * @param name  name of this node at its {@code destination}
+     * @param destination
+     * @throws ItemExistsException  {@code name} exists at {@code destination}
+     * @throws PathNotFoundException  {@code destination} does not exist
+     * @throws ItemNotFoundException  {@code name} does not exist
+     */
     public void move(String name, Path destination) throws ItemExistsException, PathNotFoundException,
             ItemNotFoundException {
 
@@ -93,14 +130,26 @@ public class TransientNodeState {
         getNodeStateProvider().release(getPath().concat(name));
     }
 
+    /**
+     * Transiently set a property.
+     * @param name  Name of the property.
+     * @param value  Value of the property. Use {@code null} or {@code JsonAtom.NULL}
+     *               to remove the property.
+     */
     public void setProperty(String name, JsonValue value) {
         getNodeDelta().setValue(name, value);
     }
 
+    /**
+     * @return {@code true} iff this instance has child nodes.
+     */
     public boolean hasNodes() {
         return getNodes().hasNext();
     }
 
+    /**
+     * @return Iterator of all child node states of this instance.
+     */
     public Iterator<TransientNodeState> getNodes() {
         Iterator<? extends ChildNodeEntry> persistedEntries = flatten(
             new PagedIterator<ChildNodeEntry>(BATCH_SIZE) {
@@ -140,10 +189,16 @@ public class TransientNodeState {
         return chain(unmodifiedStates, modifiedStates);
     }
 
+    /**
+     * @return {@code true} iff this instance has properties
+     */
     public boolean hasProperties() {
         return getProperties().hasNext();
     }
 
+    /**
+     * @return Iterator of all property states of this instance.
+     */
     public Iterator<PropertyState> getProperties() {
         Iterable<? extends PropertyState> propertyStates = getPersistentNodeState().getProperties();
         final NodeDelta delta = getNodeDelta();
@@ -161,6 +216,11 @@ public class TransientNodeState {
         return chain(propertyEntries, delta.getPropertyStates());
     }
 
+    /**
+     * @param name  name of the property
+     * @return  value of the property named {@code name}.
+     * @throws ItemNotFoundException  if no such property exists.
+     */
     public JsonValue getPropertyValue(String name) throws ItemNotFoundException {
         JsonValue value = getPropertyValueOrNull(name);
         if (value == null) {
@@ -170,19 +230,35 @@ public class TransientNodeState {
         return value;
     }
 
+    /**
+     * @param name name of the property
+     * @return {@code true} iff this instance has a property name {@code name}.
+     */
     public boolean hasProperty(String name) {
         return getPropertyValueOrNull(name) != null;
     }
 
+    /**
+     * @param name name of the property
+     * @return {@code true} iff the property named {@code name} has been transiently added.
+     */
     public boolean isPropertyNew(String name) {
         JsonValue value = getNodeDelta().getPropertyValue(name);
         return value != null && !value.isNull() && getPersistedPropertyValue(name) == null;
     }
 
+    /**
+     * @param name name of the property
+     * @return {@code true} iff the property named {@code name} has been transiently modified.
+     */
     public boolean isPropertyModified(String name) {
         return getNodeDelta().hasProperty(name);
     }
 
+    /**
+     * Transiently remove a property.
+     * @param name  name of the property to remove.
+     */
     public void removeProperty(String name) {
         getNodeDelta().setValue(name, null);
     }

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Arrays.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Arrays.java?rev=1299739&r1=1299738&r2=1299739&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Arrays.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Arrays.java Mon Mar 12 17:05:54 2012
@@ -24,9 +24,19 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+/**
+ * Utility class providing helper functions for arrays.
+ */
 public final class Arrays {
     private Arrays() {}
 
+    /**
+     * Check whether an array contains a given element
+     * @param array
+     * @param element
+     * @param <T>
+     * @return {@code true} iff {@code array} contains {@code element}.
+     */
     public static <T> boolean contains(T[] array, T element) {
         for (T t : array) {
             if (element == null && t == null || element != null && element.equals(t)) {
@@ -36,16 +46,36 @@ public final class Arrays {
         return false;
     }
 
+    /**
+     * Convert an array to a set.
+     * @param elements
+     * @param <T>
+     * @return
+     */
     public static <T> Set<T> toSet(T... elements) {
         return new HashSet<T>(java.util.Arrays.asList(elements));
     }
 
+    /**
+     * Create a new array of the same type with an additional element added.
+     * @param array
+     * @param value
+     * @param <T>
+     * @return array of {@code array.length + 1} with {@code value} as its last element.
+     */
     public static <T> T[] add(T[] array, T value) {
         T[] copy = java.util.Arrays.copyOf(array, array.length + 1);
         copy[array.length] = value;
         return copy;
     }
-    
+
+    /**
+     * Create a new array with all occurrences of {@code value} removed.
+     * @param array
+     * @param value
+     * @param <T>
+     * @return an array containing all elements of {@code array} except for {@code value}.
+     */
     public static <T> T[] remove(T[] array, T value) {
         List<T> copy = new ArrayList<T>(array.length);
         for (T v : array) {

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Function0.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Function0.java?rev=1299739&r1=1299738&r2=1299739&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Function0.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Function0.java Mon Mar 12 17:05:54 2012
@@ -19,6 +19,10 @@
 
 package org.apache.jackrabbit.utils;
 
+/**
+ * 0-ary function. That is, a constant.
+ * @param <T>
+ */
 public interface Function0<T> {
     T apply();
 }

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Predicates.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Predicates.java?rev=1299739&r1=1299738&r2=1299739&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Predicates.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Predicates.java Mon Mar 12 17:05:54 2012
@@ -19,12 +19,26 @@
 
 package org.apache.jackrabbit.utils;
 
+/**
+ * Utility class for handling {@link Predicate}s.
+ */
 public final class Predicates {
+    /** Predicate which always evaluates {@code true} */
     public static final Predicate<?> TRUE = constant(true);
+
+    /** Predicate which always evaluates {@code false} */
     public static final Predicate<?> FALSE = constant(false);
 
     private Predicates() { }
 
+    /**
+     * Predicate which checks whether some element satisfy a predicate.
+     * @param elements
+     * @param predicate
+     * @param <T>
+     * @return {@code true} iff {@code elements} contains an element for which
+     * {@code predicate} evaluates to {@code true}.
+     */
     public static <T> boolean exists(Iterable<T> elements, Predicate<T> predicate) {
         for (T e : elements) {
             if (predicate.evaluate(e)) {
@@ -34,7 +48,13 @@ public final class Predicates {
 
         return false;
     }
-    
+
+    /**
+     * Predicate which always evaluates to the same truth value.
+     * @param value
+     * @param <T>
+     * @return a predicate which always evaluates to {@code value}.
+     */
     public static <T> Predicate<T> constant(final boolean value) {
         return new Predicate<T>() {
             @Override

Modified: jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Unchecked.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Unchecked.java?rev=1299739&r1=1299738&r2=1299739&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Unchecked.java (original)
+++ jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/utils/Unchecked.java Mon Mar 12 17:05:54 2012
@@ -19,6 +19,9 @@
 
 package org.apache.jackrabbit.utils;
 
+/**
+ * Utility class for hiding casts.
+ */
 public final class Unchecked {
     private Unchecked() {}