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/07/12 16:53:44 UTC
svn commit: r1360710 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
api/ core/ kernel/ plugins/lucene/ plugins/name/ plugins/type/
plugins/value/ query/ast/ util/
Author: jukka
Date: Thu Jul 12 14:53:44 2012
New Revision: 1360710
URL: http://svn.apache.org/viewvc?rev=1360710&view=rev
Log:
OAK-184: Allow PropertyState.getValues() to work on single-valued properties
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/PropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/PropertyStateImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/AnnotatingConflictHandler.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ConflictValidator.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Iterators.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/PropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/PropertyState.java?rev=1360710&r1=1360709&r2=1360710&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/PropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/PropertyState.java Thu Jul 12 14:53:44 2012
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.oak.api;
+import java.util.List;
+
import javax.annotation.Nonnull;
/**
@@ -54,11 +56,14 @@ public interface PropertyState {
CoreValue getValue();
/**
- * Values of this property.
- * @return an iterable of the values of this multi valued property.
- * @throws IllegalStateException if {@code isArray()} is {@code false}.
+ * Values of this property. The returned list is immutable and contains
+ * all the values of this property. If this is a single-valued property,
+ * then the returned list will simply contain the single value returned
+ * by the {@link #getValue()} method.
+ *
+ * @return immutable list of the values of this property
*/
@Nonnull
- Iterable<CoreValue> getValues();
+ List<CoreValue> getValues();
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java?rev=1360710&r1=1360709&r2=1360710&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java Thu Jul 12 14:53:44 2012
@@ -28,7 +28,6 @@ import org.apache.jackrabbit.oak.api.Cha
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.ConflictHandler;
import org.apache.jackrabbit.oak.api.ConflictHandler.Resolution;
-import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
@@ -46,7 +45,6 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
import static org.apache.jackrabbit.oak.commons.PathUtils.getName;
import static org.apache.jackrabbit.oak.commons.PathUtils.getParentPath;
-import static org.apache.jackrabbit.oak.util.Iterators.toList;
public class RootImpl implements Root {
static final Logger log = LoggerFactory.getLogger(RootImpl.class);
@@ -426,10 +424,8 @@ public class RootImpl implements Root {
private void setProperty(Tree target, PropertyState property) {
if (property.isArray()) {
- target.setProperty(property.getName(),
- toList(property.getValues(), new ArrayList<CoreValue>()));
- }
- else {
+ target.setProperty(property.getName(), property.getValues());
+ } else {
target.setProperty(property.getName(), property.getValue());
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/PropertyStateImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/PropertyStateImpl.java?rev=1360710&r1=1360709&r2=1360710&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/PropertyStateImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/PropertyStateImpl.java Thu Jul 12 14:53:44 2012
@@ -22,30 +22,30 @@ import org.apache.jackrabbit.oak.api.Cor
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.plugins.memory.MemoryValueFactory;
+import java.util.Arrays;
import java.util.Collections;
-import java.util.Iterator;
import java.util.List;
public class PropertyStateImpl implements PropertyState {
private final String name;
- private final CoreValue value;
- private final List<CoreValue> values;
- private PropertyStateImpl(String name, CoreValue value, List<CoreValue> values) {
- assert name != null;
+ private final boolean array;
- this.name = name;
- this.value = value;
- this.values = values;
- }
+ private final CoreValue[] values;
public PropertyStateImpl(String name, CoreValue value) {
- this(name, value, null);
+ assert name != null && value != null;
+ this.name = name;
+ this.array = false;
+ this.values = new CoreValue[] { value };
}
public PropertyStateImpl(String name, List<CoreValue> values) {
- this(name, null, Collections.unmodifiableList(values));
+ assert name != null && values != null;
+ this.name = name;
+ this.array = true;
+ this.values = values.toArray(new CoreValue[values.size()]);
}
public PropertyStateImpl(String name, String value) {
@@ -59,23 +59,20 @@ public class PropertyStateImpl implement
@Override
public boolean isArray() {
- return value == null;
+ return array;
}
-
+
@Override
public CoreValue getValue() {
- if (value == null) {
+ if (array) {
throw new IllegalStateException("Not a single valued property");
}
- return value;
+ return values[0];
}
@Override
- public Iterable<CoreValue> getValues() {
- if (values == null) {
- throw new IllegalStateException("Not a multi valued property");
- }
- return values;
+ public List<CoreValue> getValues() {
+ return Collections.unmodifiableList(Arrays.asList(values));
}
//------------------------------------------------------------< Object >----
@@ -94,7 +91,9 @@ public class PropertyStateImpl implement
return true;
} else if (that instanceof PropertyState) {
PropertyState other = (PropertyState) that;
- return getName().equals(other.getName()) && valueEquals(other);
+ return getName().equals(other.getName())
+ && isArray() == other.isArray()
+ && getValues().equals(other.getValues());
} else {
return false;
}
@@ -119,21 +118,4 @@ public class PropertyStateImpl implement
return getName() + '=' + (isArray() ? getValues() : getValue());
}
- //------------------------------------------------------------< private >---
-
- private boolean valueEquals(PropertyState other) {
- if (isArray() != other.isArray()) {
- return false;
- } else if (isArray()) {
- Iterator<CoreValue> iterator = other.getValues().iterator();
- for (CoreValue value : getValues()) {
- if (!iterator.hasNext() || !value.equals(iterator.next())) {
- return false;
- }
- }
- return !iterator.hasNext();
- } else {
- return getValue().equals(other.getValue());
- }
- }
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java?rev=1360710&r1=1360709&r2=1360710&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/lucene/LuceneEditor.java Thu Jul 12 14:53:44 2012
@@ -184,12 +184,8 @@ public class LuceneEditor implements Com
":path", path, Store.YES, Index.NOT_ANALYZED));
for (PropertyState property : state.getProperties()) {
String pname = property.getName();
- if (property.isArray()) {
- for (CoreValue value : property.getValues()) {
- document.add(makeField(pname, value));
- }
- } else {
- document.add(makeField(pname, property.getValue()));
+ for (CoreValue value : property.getValues()) {
+ document.add(makeField(pname, value));
}
}
return document;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java?rev=1360710&r1=1360709&r2=1360710&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java Thu Jul 12 14:53:44 2012
@@ -52,12 +52,8 @@ class NameValidator implements Validator
protected void checkValidValue(PropertyState property)
throws CommitFailedException {
- if (property.isArray()) {
- for (CoreValue value : property.getValues()) {
- checkValidValue(value);
- }
- } else {
- checkValidValue(property.getValue());
+ for (CoreValue value : property.getValues()) {
+ checkValidValue(value);
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java?rev=1360710&r1=1360709&r2=1360710&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java Thu Jul 12 14:53:44 2012
@@ -38,19 +38,16 @@ class TypeValidator implements Validator
private void checkTypeExists(PropertyState after)
throws CommitFailedException {
- Iterable<CoreValue> coreValues = Collections.emptyList();
- if (JcrConstants.JCR_PRIMARYTYPE.equals(after.getName())) {
- coreValues = Collections.singletonList(after.getValue());
- } else if (JcrConstants.JCR_MIXINTYPES.equals(after.getName())) {
- coreValues = after.getValues();
- }
- for (CoreValue cv : coreValues) {
- String value = cv.getString();
- if (!types.contains(value)) {
- throw new CommitFailedException(
- new NoSuchNodeTypeException("Unknown node type: " + value));
+ if (JcrConstants.JCR_PRIMARYTYPE.equals(after.getName())
+ || JcrConstants.JCR_MIXINTYPES.equals(after.getName())) {
+ for (CoreValue cv : after.getValues()) {
+ String value = cv.getString();
+ if (!types.contains(value)) {
+ throw new CommitFailedException(
+ new NoSuchNodeTypeException("Unknown node type: " + value));
+ }
+ // TODO: make sure the specified node type isn't abstract
}
- // TODO: make sure the specified node type isn't abstract
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/AnnotatingConflictHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/AnnotatingConflictHandler.java?rev=1360710&r1=1360709&r2=1360710&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/AnnotatingConflictHandler.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/AnnotatingConflictHandler.java Thu Jul 12 14:53:44 2012
@@ -28,9 +28,6 @@ import org.apache.jackrabbit.oak.api.Pro
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.util.Iterators;
-
-import static org.apache.jackrabbit.oak.util.Iterators.toList;
/**
* This {@link ConflictHandler} implementation resolves conflicts to
@@ -135,7 +132,7 @@ public class AnnotatingConflictHandler i
List<CoreValue> mixins = new ArrayList<CoreValue>();
if (jcrMixin != null) {
assert jcrMixin.isArray();
- mixins = Iterators.toList(jcrMixin.getValues(), mixins);
+ mixins.addAll(jcrMixin.getValues());
}
if (!mixins.contains(MIX_MERGE_CONFLICT)) {
mixins.add(valueFactory.createValue(MIX_MERGE_CONFLICT, PropertyType.NAME));
@@ -169,10 +166,8 @@ public class AnnotatingConflictHandler i
private static void setProperty(Tree parent, PropertyState property) {
if (property.isArray()) {
- parent.setProperty(property.getName(),
- toList(property.getValues(), new ArrayList<CoreValue>()));
- }
- else {
+ parent.setProperty(property.getName(), property.getValues());
+ } else {
parent.setProperty(property.getName(), property.getValue());
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ConflictValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ConflictValidator.java?rev=1360710&r1=1360709&r2=1360710&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ConflictValidator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ConflictValidator.java Thu Jul 12 14:53:44 2012
@@ -61,8 +61,7 @@ public class ConflictValidator extends D
private static void failOnMergeConflict(PropertyState property) throws CommitFailedException {
if ("jcr:mixinTypes".equals(property.getName())) {
assert property.isArray();
- Iterable<CoreValue> mixins = property.getValues();
- for (CoreValue v : mixins) {
+ for (CoreValue v : property.getValues()) {
if ("mix:mergeConflict".equals(v.getString())) {
throw new CommitFailedException(new InvalidItemStateException("Item has unresolved conflicts"));
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java?rev=1360710&r1=1360709&r2=1360710&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchImpl.java Thu Jul 12 14:53:44 2012
@@ -75,9 +75,6 @@ public class FullTextSearchImpl extends
}
private boolean evaluateContains(PropertyState p) {
- if (!p.isArray()) {
- return evaluateContains(p.getValue());
- }
for (CoreValue v : p.getValues()) {
if (evaluateContains(v)) {
return true;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Iterators.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Iterators.java?rev=1360710&r1=1360709&r2=1360710&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Iterators.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/Iterators.java Thu Jul 12 14:53:44 2012
@@ -243,19 +243,4 @@ public final class Iterators {
};
}
- /**
- * Spools the values of an iterator into a list.
- * @param values the values to spool
- * @param list the target list to receive the values
- * @param <T>
- * @return {@code list}
- */
- @Nonnull
- public static <T> List<T> toList(Iterable<? extends T> values, List<T> list) {
- for (T value : values) {
- list.add(value);
- }
- return list;
- }
-
}