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/09/14 18:17:01 UTC
svn commit: r1170703 - in /jackrabbit/sandbox/jackrabbit-mk:
jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/
jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/
jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbi...
Author: mduerig
Date: Wed Sep 14 16:17:01 2011
New Revision: 1170703
URL: http://svn.apache.org/viewvc?rev=1170703&view=rev
Log:
Microkernel based Jackrabbit prototype (WIP)
refactor: eliminate StateUtility
Modified:
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/util/StateUtility.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Arrays.java
jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Iterators.java
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java?rev=1170703&r1=1170702&r2=1170703&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/NodeImpl.java Wed Sep 14 16:17:01 2011
@@ -30,9 +30,9 @@ import org.apache.jackrabbit.jcr2spi.ope
import org.apache.jackrabbit.jcr2spi.state.ItemState;
import org.apache.jackrabbit.jcr2spi.state.ItemStateValidator;
import org.apache.jackrabbit.jcr2spi.state.NodeState;
+import org.apache.jackrabbit.jcr2spi.state.PropertyState;
import org.apache.jackrabbit.jcr2spi.state.Status;
import org.apache.jackrabbit.jcr2spi.util.LogUtil;
-import org.apache.jackrabbit.jcr2spi.util.StateUtility;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.NodeId;
import org.apache.jackrabbit.spi.Path;
@@ -42,6 +42,8 @@ import org.apache.jackrabbit.spi.QProper
import org.apache.jackrabbit.spi.QValue;
import org.apache.jackrabbit.spi.commons.conversion.NameException;
import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.commons.util.Arrays;
+import org.apache.jackrabbit.spi.commons.util.Function1;
import org.apache.jackrabbit.spi.commons.value.ValueFormat;
import org.apache.jackrabbit.util.ChildrenCollectorFilter;
import org.apache.jackrabbit.value.ValueHelper;
@@ -77,7 +79,6 @@ import javax.jcr.version.VersionHistory;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
@@ -716,7 +717,7 @@ public class NodeImpl extends ItemImpl i
} else {
// prop entry exists (and ev. has been transiently mod.)
// -> retrieve mixin types from prop
- mixinValue = StateUtility.getMixinNames(pe.getPropertyState());
+ mixinValue = getMixinNames(pe.getPropertyState());
}
} catch (RepositoryException e) {
// should never occur
@@ -725,10 +726,24 @@ public class NodeImpl extends ItemImpl i
}
}
List<Name> l = new ArrayList<Name>();
- l.addAll(Arrays.asList(mixinValue));
+ l.addAll(java.util.Arrays.asList(mixinValue));
return l;
}
+ private static Name[] getMixinNames(PropertyState propertyState) {
+ if (propertyState.getStatus() == Status.REMOVED) {
+ return Name.EMPTY_ARRAY;
+ } else {
+ QValue[] qValues = propertyState.getValues();
+ return Arrays.map(qValues, new Name[qValues.length], new Function1<QValue, Name>() {
+ @Override
+ public Name apply(QValue qValue) throws Exception {
+ return qValue.getName();
+ }
+ });
+ }
+ }
+
/**
* Build the effective node type of remaining mixins & primary type
*
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java?rev=1170703&r1=1170702&r2=1170703&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java Wed Sep 14 16:17:01 2011
@@ -29,7 +29,6 @@ import org.apache.jackrabbit.jcr2spi.sta
import org.apache.jackrabbit.jcr2spi.state.NodeState;
import org.apache.jackrabbit.jcr2spi.state.PropertyState;
import org.apache.jackrabbit.jcr2spi.state.Status;
-import org.apache.jackrabbit.jcr2spi.util.StateUtility;
import org.apache.jackrabbit.spi.ChildInfo;
import org.apache.jackrabbit.spi.Event;
import org.apache.jackrabbit.spi.IdFactory;
@@ -44,6 +43,8 @@ import org.apache.jackrabbit.spi.QProper
import org.apache.jackrabbit.spi.QValue;
import org.apache.jackrabbit.spi.commons.name.NameConstants;
import org.apache.jackrabbit.spi.commons.name.PathBuilder;
+import org.apache.jackrabbit.spi.commons.util.Arrays;
+import org.apache.jackrabbit.spi.commons.util.Function1;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1188,7 +1189,7 @@ public class NodeEntryImpl extends Hiera
NodeState state = (NodeState) internalGetItemState();
if (state != null) {
PropertyState ps = child.getPropertyState();
- state.setMixinTypeNames(StateUtility.getMixinNames(ps));
+ state.setMixinTypeNames(getMixinNames(ps));
} // node state not yet loaded -> ignore change
}
} catch (ItemNotFoundException e) {
@@ -1453,7 +1454,7 @@ public class NodeEntryImpl extends Hiera
PropertyState pState = pe.getPropertyState();
switch (operation.getStatus()) {
case PERSISTED:
- Name[] mixins = StateUtility.getMixinNames(pState);
+ Name[] mixins = getMixinNames(pState);
getNodeState().setMixinTypeNames(mixins);
if (pState.getStatus() == Status.NEW || pState.getStatus() == Status.EXISTING_MODIFIED) {
pState.setStatus(Status.EXISTING);
@@ -1569,6 +1570,20 @@ public class NodeEntryImpl extends Hiera
parent.childNodeEntries.add(this, revertInfo.oldIndex, revertInfo.oldSuccessor);
}
+ private static Name[] getMixinNames(PropertyState propertyState) {
+ if (propertyState.getStatus() == Status.REMOVED) {
+ return Name.EMPTY_ARRAY;
+ } else {
+ QValue[] qValues = propertyState.getValues();
+ return Arrays.map(qValues, new Name[qValues.length], new Function1<QValue, Name>() {
+ @Override
+ public Name apply(QValue qValue) throws Exception {
+ return qValue.getName();
+ }
+ });
+ }
+ }
+
//--------------------------------------------------------< inner class >---
/**
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=1170703&r1=1170702&r2=1170703&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 Wed Sep 14 16:17:01 2011
@@ -19,9 +19,12 @@
package org.apache.jackrabbit.spi.commons.util;
+import java.lang.reflect.Array;
import java.util.HashSet;
import java.util.Set;
+import static org.apache.jackrabbit.spi.commons.util.Unchecked.cast;
+
public final class Arrays {
private Arrays() {}
@@ -39,4 +42,33 @@ public final class Arrays {
set.addAll(java.util.Arrays.asList(elements));
return set;
}
+
+ /**
+ * Map function {@code f} over array {@code from}. If {@code to.length < from.length}
+ * a new array is allocated.
+ *
+ * @param from array to map from
+ * @param to array to map to
+ * @param f function to map
+ * @param <T> from type
+ * @param <R> to type
+ * @return array {@code to}
+ */
+ public static <T, R> R[] map(T[] from, R[] to, Function1<T, R> f) {
+ if (to.length < from.length) {
+ to = cast(Array.newInstance(to.getClass().getComponentType(), from.length));
+ }
+
+ for (int k = 0; k < from.length; k++) {
+ try {
+ to[k] = f.apply(from[k]);
+ }
+ catch (Exception e) {
+ throw new IllegalArgumentException("Function1 must not throw unchecked exceptions", e);
+ }
+ }
+
+ return to;
+ }
+
}
Modified: jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Iterators.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Iterators.java?rev=1170703&r1=1170702&r2=1170703&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Iterators.java (original)
+++ jackrabbit/sandbox/jackrabbit-mk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/util/Iterators.java Wed Sep 14 16:17:01 2011
@@ -130,7 +130,7 @@ public final class Iterators {
return predicate.apply(Unchecked.<T>cast(object));
}
catch (Exception e) {
- throw new IllegalArgumentException("Predicate may not throw exceptions", e);
+ throw new IllegalArgumentException("Predicate must not throw unchecked exceptions", e);
}
}
}));
@@ -157,7 +157,7 @@ public final class Iterators {
return transformer.apply(Unchecked.<S>cast(input));
}
catch (Exception e) {
- throw new IllegalArgumentException("Transformer may not throw exceptions", e);
+ throw new IllegalArgumentException("Transformer must not throw unchecked exceptions", e);
}
}
}));