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 2011/10/14 16:56:03 UTC

svn commit: r1183376 - in /jackrabbit/sandbox/jackrabbit-mk: jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/ jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/

Author: mduerig
Date: Fri Oct 14 14:56:03 2011
New Revision: 1183376

URL: http://svn.apache.org/viewvc?rev=1183376&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP)
simplify merging of item states

Modified:
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java
    jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Arrays.java

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java?rev=1183376&r1=1183375&r2=1183376&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/NodeState.java Fri Oct 14 14:56:03 2011
@@ -26,14 +26,13 @@ import org.apache.jackrabbit.spi.Propert
 import org.apache.jackrabbit.spi.QNodeDefinition;
 import org.apache.jackrabbit.spi.QValue;
 import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.commons.util.Arrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.jcr.ItemNotFoundException;
 import javax.jcr.RepositoryException;
-import java.util.Arrays;
 import java.util.Iterator;
-import java.util.List;
 
 import static org.apache.jackrabbit.spi.commons.util.Unchecked.cast;
 
@@ -114,35 +113,32 @@ public class NodeState extends ItemState
     }
 
     @Override
-    public MergeResult merge(ItemState<?> another, boolean keepChanges) {
+    public MergeResult merge(ItemState<?> state, boolean keepChanges) {
         boolean modified = false;
-        if (another != null && another != this) {
-            if (!another.isNode()) {
-                IllegalArgumentException e = new IllegalArgumentException("Attempt to merge node state with property " +
-                        "state.");
+        if (state != null && state != this) {
+            if (!state.isNode()) {
+                IllegalArgumentException e = new IllegalArgumentException("Cannot merge node state with property state");
                 log.error(e.getMessage(), e);
                 throw e;
             }
-            synchronized (another) {
-                NodeState otherState = cast(another);
 
-                if (!nodeTypeName.equals(otherState.nodeTypeName)) {
-                    nodeTypeName = otherState.nodeTypeName;
-                    modified = true;
-                }
+            NodeState otherState = cast(state);
 
-                if (otherState.definition != null && !otherState.definition.equals(definition)) {
-                    definition = otherState.definition;
-                    modified = true;
-                }
+            if (!nodeTypeName.equals(otherState.nodeTypeName)) {
+                nodeTypeName = otherState.nodeTypeName;
+                modified = true;
+            }
 
-                // since 'mixinTypeNames' are modified upon save only, no special
-                // merging is required here. just reset the mixinTypeNames.
-                List<Name> mixN = Arrays.asList(otherState.mixinTypeNames);
-                if (mixN.size() != mixinTypeNames.length || !mixN.containsAll(Arrays.asList(mixinTypeNames))) {
-                    setMixinTypeNames(otherState.mixinTypeNames);
-                    modified = true;
-                }
+            if (otherState.definition != null && !otherState.definition.equals(definition)) {
+                definition = otherState.definition;
+                modified = true;
+            }
+
+            // since 'mixinTypeNames' are modified upon save only, no special
+            // merging is required here. just reset the mixinTypeNames.
+            if (!Arrays.containSameElements(otherState.mixinTypeNames, mixinTypeNames)) {
+                setMixinTypeNames(otherState.mixinTypeNames);
+                modified = true;
             }
         }
         return new SimpleMergeResult(modified);

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java?rev=1183376&r1=1183375&r2=1183376&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/state/PropertyState.java Fri Oct 14 14:56:03 2011
@@ -117,27 +117,26 @@ public class PropertyState extends ItemS
 
     /**
      * If {@code keepChanges} is true, this method only compares the existing
-     * values with the values from 'another' and returns true, if the underlying
+     * values with the values from 'state' and returns true, if the underlying
      * persistent state is different to the stored persistent values. Otherwise
      * the transient changes will be discarded.
      *
      */
     @Override
-    public MergeResult merge(ItemState<?> another, boolean keepChanges) {
+    public MergeResult merge(ItemState<?> state, boolean keepChanges) {
         boolean modified = false;
-        if (another != null && another != this) {
-            if (another.isNode()) {
-                IllegalArgumentException e = new IllegalArgumentException("Attempt to merge property state with node " +
-                        "state.");
+        if (state != null && state != this) {
+            if (state.isNode()) {
+                IllegalArgumentException e = new IllegalArgumentException("Cannot merge property state with node state");
                 log.error(e.getMessage(), e);
                 throw e;
             }
 
-            PropertyData anotherData = Unchecked.<PropertyState>cast(another).data;
-            PropertyDiffer result = new PropertyDiffer(data, anotherData);
+            PropertyData otherData = Unchecked.<PropertyState>cast(state).data;
+            PropertyDiffer result = new PropertyDiffer(data, otherData);
 
-            // reset the pInfo to point to the pInfo of another state.
-            data = anotherData;
+            // reset the pInfo to point to the pInfo of state.
+            data = otherData;
             // if transient changes should be preserved OR if there are not
             // transient changes, return the differ and postpone the effort of
             // calculating the diff (the test if this state got internally changed)).

Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Arrays.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Arrays.java?rev=1183376&r1=1183375&r2=1183376&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Arrays.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Arrays.java Fri Oct 14 14:56:03 2011
@@ -42,6 +42,19 @@ public final class Arrays {
         return false;
     }
 
+    public static <T> boolean containsAll(T[] array, T[] elements) {
+        for (T e : elements) {
+            if (!contains(array, e)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public static <T> boolean containSameElements(T[] array1, T[] array2) {
+        return array1 == array2 || array1.length == array2.length && containsAll(array1, array2);
+    }
+
     public static <T> Set<T> toSet(T... elements) {
         Set<T> set = new HashSet<T>();
         set.addAll(java.util.Arrays.asList(elements));