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 md...@apache.org on 2012/10/11 00:28:24 UTC
svn commit: r1396835 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/api/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/
oak-core/sr...
Author: mduerig
Date: Wed Oct 10 22:28:23 2012
New Revision: 1396835
URL: http://svn.apache.org/viewvc?rev=1396835&view=rev
Log:
OAK-350: Unify PropertyState and CoreValue
- Value based PropertyState implementation
- Remove CoreValue base PropertyState implementations
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ValueBasedBlob.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java Wed Oct 10 22:28:23 2012
@@ -36,7 +36,7 @@ public interface Blob extends Comparable
InputStream getNewStream();
/**
- * Returns the length of this blob.
+ * Returns the length of this blob or -1 if unknown.
*
* @return the length of this blob.
*/
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexUpdate.java Wed Oct 10 22:28:23 2012
@@ -29,9 +29,8 @@ import com.google.common.collect.Sets;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.plugins.memory.CoreValues;
+import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
-import org.apache.jackrabbit.oak.plugins.memory.StringValue;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
class PropertyIndexUpdate {
@@ -87,16 +86,16 @@ class PropertyIndexUpdate {
Set<String> paths = entry.getValue();
PropertyState property = index.getProperty(encoded);
if (property != null) {
- List<CoreValue> values = Lists.newArrayList();
- for (CoreValue value : CoreValues.getValues(property)) {
- if (!paths.contains(value.getString())) {
+ List<String> values = Lists.newArrayList();
+ for (String value : property.getValue(Type.STRINGS)) {
+ if (!paths.contains(values)) {
values.add(value);
}
}
if (values.isEmpty()) {
index.removeProperty(encoded);
} else {
- index.setProperty(PropertyStates.createProperty(encoded, values));
+ index.setProperty(PropertyStates.stringProperty(encoded, values));
}
}
}
@@ -104,16 +103,16 @@ class PropertyIndexUpdate {
for (Map.Entry<String, Set<String>> entry : insert.entrySet()) {
String encoded = entry.getKey();
Set<String> paths = entry.getValue();
- List<CoreValue> values = Lists.newArrayList();
+ List<String> values = Lists.newArrayList();
PropertyState property = index.getProperty(encoded);
if (property != null) {
- for (CoreValue value : CoreValues.getValues(property)) {
+ for (String value : property.getValue(Type.STRINGS)) {
values.add(value);
- paths.remove(value.getString());
+ paths.remove(value);
}
}
for (String path : paths) {
- values.add(new StringValue(path));
+ values.add(path);
}
if (values.isEmpty()) {
index.removeProperty(encoded);
@@ -121,9 +120,10 @@ class PropertyIndexUpdate {
throw new CommitFailedException(
"Uniqueness constraint violated");
} else {
- index.setProperty(PropertyStates.createProperty(encoded, values));
+ index.setProperty(PropertyStates
+ .stringProperty(encoded, values));
}
}
}
-}
\ No newline at end of file
+}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/PropertyStates.java Wed Oct 10 22:28:23 2012
@@ -23,16 +23,17 @@ import java.util.List;
import javax.annotation.Nonnull;
import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
import com.google.common.collect.Lists;
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.json.JsopReader;
import org.apache.jackrabbit.oak.api.Blob;
-import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.kernel.TypeCodes;
import org.apache.jackrabbit.oak.kernel.KernelBlob;
+import org.apache.jackrabbit.oak.kernel.TypeCodes;
import static org.apache.jackrabbit.oak.api.Type.DATE;
import static org.apache.jackrabbit.oak.api.Type.DATES;
@@ -52,64 +53,74 @@ public final class PropertyStates {
private PropertyStates() {}
@Nonnull
- public static PropertyState createProperty(String name, CoreValue value) {
+ public static PropertyState createProperty(String name, Value value) throws RepositoryException {
int type = value.getType();
- if (PropertyType.BINARY == type) {
- return binaryProperty(name, new ValueBasedBlob(value));
- }
- else {
- return createProperty(name, value.getString(), value.getType());
+ switch (type) {
+ case PropertyType.STRING:
+ return stringProperty(name, value.getString());
+ case PropertyType.BINARY:
+ return binaryProperty(name, value);
+ case PropertyType.LONG:
+ return longProperty(name, value.getLong());
+ case PropertyType.DOUBLE:
+ return doubleProperty(name, value.getDouble());
+ case PropertyType.BOOLEAN:
+ return booleanProperty(name, value.getBoolean());
+ case PropertyType.DECIMAL:
+ return decimalProperty(name, value.getDecimal());
+ default:
+ return new GenericPropertyState(name, value.getString(), Type.fromTag(type, false));
}
}
@Nonnull
- public static PropertyState createProperty(String name, List<CoreValue> values) {
- if (values.isEmpty()) {
+ public static PropertyState createProperty(String name, Value[] values) throws RepositoryException {
+ if (values.length == 0) {
return emptyProperty(name, STRINGS);
}
- int type = values.get(0).getType();
+ int type = values[0].getType();
switch (type) {
case PropertyType.STRING:
List<String> strings = Lists.newArrayList();
- for (CoreValue cv : values) {
- strings.add(cv.getString());
+ for (Value value : values) {
+ strings.add(value.getString());
}
return stringProperty(name, strings);
case PropertyType.BINARY:
List<Blob> blobs = Lists.newArrayList();
- for (CoreValue cv : values) {
- blobs.add(new ValueBasedBlob(cv));
+ for (Value value : values) {
+ blobs.add(new ValueBasedBlob(value));
}
return binaryPropertyFromBlob(name, blobs);
case PropertyType.LONG:
List<Long> longs = Lists.newArrayList();
- for (CoreValue cv : values) {
- longs.add(cv.getLong());
+ for (Value value : values) {
+ longs.add(value.getLong());
}
return longProperty(name, longs);
case PropertyType.DOUBLE:
List<Double> doubles = Lists.newArrayList();
- for (CoreValue cv : values) {
- doubles.add(cv.getDouble());
+ for (Value value : values) {
+ doubles.add(value.getDouble());
}
return doubleProperty(name, doubles);
case PropertyType.BOOLEAN:
List<Boolean> booleans = Lists.newArrayList();
- for (CoreValue cv : values) {
- booleans.add(cv.getBoolean());
+ for (Value value : values) {
+ booleans.add(value.getBoolean());
}
return booleanProperty(name, booleans);
case PropertyType.DECIMAL:
List<BigDecimal> decimals = Lists.newArrayList();
- for (CoreValue cv : values) {
- decimals.add(cv.getDecimal());
+ for (Value value : values) {
+ decimals.add(value.getDecimal());
}
return decimalProperty(name, decimals);
default:
List<String> vals = Lists.newArrayList();
- for (CoreValue cv : values) {
- vals.add(cv.getString());
+ for (Value value : values) {
+ vals.add(value.getString());
}
return new GenericsPropertyState(name, vals, Type.fromTag(type, true));
}
@@ -274,6 +285,10 @@ public final class PropertyStates {
return new BinaryPropertyState(name, value);
}
+ public static PropertyState binaryProperty(String name, Value value) {
+ return new BinaryPropertyState(name, new ValueBasedBlob(value));
+ }
+
public static PropertyState stringProperty(String name, Iterable<String> values) {
return new StringsPropertyState(name, Lists.newArrayList(values));
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ValueBasedBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ValueBasedBlob.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ValueBasedBlob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/ValueBasedBlob.java Wed Oct 10 22:28:23 2012
@@ -18,24 +18,116 @@
*/
package org.apache.jackrabbit.oak.plugins.memory;
+import java.io.IOException;
import java.io.InputStream;
-import org.apache.jackrabbit.oak.api.CoreValue;
+import javax.annotation.Nonnull;
+import javax.jcr.Binary;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
public class ValueBasedBlob extends AbstractBlob {
- private final CoreValue value;
+ private final Value value;
- public ValueBasedBlob(CoreValue value) {
+ public ValueBasedBlob(Value value) {
this.value = value;
}
+ @Nonnull
@Override
public InputStream getNewStream() {
- return value.getNewStream();
+ return new ValueBasedInputStream(value);
}
@Override
public long length() {
- return value.length();
+ try {
+ Binary binary = value.getBinary();
+ try {
+ return binary.getSize();
+ }
+ finally {
+ binary.dispose();
+ }
+ }
+ catch (RepositoryException e) {
+ return -1;
+ }
+ }
+
+ private static class ValueBasedInputStream extends InputStream {
+ private final Value value;
+
+ private Binary binary;
+ private InputStream stream;
+
+ public ValueBasedInputStream(Value value) {
+ this.value = value;
+ }
+
+ @Override
+ public int read() throws IOException {
+ return stream().read();
+ }
+
+ @Override
+ public int read(byte[] b) throws IOException {
+ return stream().read(b);
+ }
+
+ @Override
+ public int read(byte[] b, int off, int len) throws IOException {
+ return stream().read(b, off, len);
+ }
+
+ @Override
+ public long skip(long n) throws IOException {
+ return stream().skip(n);
+ }
+
+ @Override
+ public int available() throws IOException {
+ return stream().available();
+ }
+
+ @Override
+ public void close() throws IOException {
+ if (stream != null) {
+ stream.close();
+ stream = null;
+ }
+ if (binary != null) {
+ binary.dispose();
+ binary = null;
+ }
+ }
+
+ @Override
+ public synchronized void mark(int readlimit) {
+ }
+
+ @Override
+ public synchronized void reset() throws IOException {
+ throw new IOException("mark not supported");
+ }
+
+ @Override
+ public boolean markSupported() {
+ return false;
+ }
+
+ private InputStream stream() throws IOException {
+ try {
+ if (binary == null) {
+ binary = value.getBinary();
+ stream = binary.getStream();
+ }
+ return stream;
+ }
+ catch (RepositoryException e) {
+ throw new IOException(e);
+ }
+ }
+
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java Wed Oct 10 22:28:23 2012
@@ -19,15 +19,17 @@
package org.apache.jackrabbit.oak.query.ast;
import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
import javax.jcr.PropertyType;
+import com.google.common.collect.Iterables;
import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.commons.PathUtils;
-import org.apache.jackrabbit.oak.plugins.memory.CoreValues;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
import org.apache.jackrabbit.oak.query.SQL2Parser;
import org.apache.jackrabbit.oak.query.index.FilterImpl;
@@ -115,17 +117,15 @@ public class PropertyValueImpl extends D
// asterisk - create a multi-value property
// warning: the returned property state may have a mixed type
// (not all values may have the same type)
- ArrayList<CoreValue> values = new ArrayList<CoreValue>();
+
+ //TODO this doesn't play well with the idea that the types may be different
+ List<String> values = new ArrayList<String>();
for (PropertyState p : tree.getProperties()) {
if (matchesPropertyType(p)) {
- if (p.isArray()) {
- values.addAll(CoreValues.getValues(p));
- } else {
- values.add(CoreValues.getValue(p));
- }
+ Iterables.addAll(values, p.getValue(Type.STRINGS));
}
}
- return PropertyStates.createProperty("*", values);
+ return PropertyStates.stringProperty("*", values);
}
private boolean matchesPropertyType(PropertyState state) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java Wed Oct 10 22:28:23 2012
@@ -30,7 +30,6 @@ import javax.jcr.ValueFactory;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.CoreValueFactory;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
@@ -222,15 +221,12 @@ public class NodeUtil {
}
public void setValues(String name, Value[] values) {
- List<CoreValue> cvs = Lists.newArrayList();
- for (Value value : values) {
- try {
- cvs.add(factory.createValue(value.getString(), value.getType()));
- } catch (RepositoryException e) {
- log.warn("Unable to convert a default value", e);
- }
+ try {
+ tree.setProperty(PropertyStates.createProperty(name, values));
+ }
+ catch (RepositoryException e) {
+ log.warn("Unable to convert a default value", e);
}
- tree.setProperty(PropertyStates.createProperty(name, cvs));
}
public void setValues(String name, String[] values, int type) {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java Wed Oct 10 22:28:23 2012
@@ -18,24 +18,23 @@ package org.apache.jackrabbit.oak.jcr;
import java.util.Collections;
import java.util.Iterator;
-import java.util.List;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.jcr.InvalidItemStateException;
import javax.jcr.ItemNotFoundException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
import javax.jcr.ValueFormatException;
-import org.apache.jackrabbit.oak.api.CoreValue;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterators;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.TreeLocation;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterators;
-
/**
* {@code NodeDelegate} serve as internal representations of {@code Node}s.
* Most methods of this class throw an {@code InvalidItemStateException}
@@ -179,8 +178,7 @@ public class NodeDelegate extends ItemDe
* @return the set property
*/
@Nonnull
- public PropertyDelegate setProperty(String name, CoreValue value)
- throws InvalidItemStateException, ValueFormatException {
+ public PropertyDelegate setProperty(String name, Value value) throws RepositoryException {
Tree tree = getTree();
PropertyState old = tree.getProperty(name);
if (old != null && old.isArray()) {
@@ -197,18 +195,17 @@ public class NodeDelegate extends ItemDe
/**
* Set a multi valued property
* @param name oak name
- * @param value
+ * @param values
* @return the set property
*/
@Nonnull
- public PropertyDelegate setProperty(String name, List<CoreValue> value)
- throws InvalidItemStateException, ValueFormatException {
+ public PropertyDelegate setProperty(String name, Value[] values) throws RepositoryException {
Tree tree = getTree();
PropertyState old = tree.getProperty(name);
if (old != null && ! old.isArray()) {
throw new ValueFormatException("Attempt to set multiple values to single valued property.");
}
- tree.setProperty(PropertyStates.createProperty(name, value));
+ tree.setProperty(PropertyStates.createProperty(name, values));
return new PropertyDelegate(sessionDelegate, tree.getLocation().getChild(name));
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java Wed Oct 10 22:28:23 2012
@@ -18,8 +18,8 @@ package org.apache.jackrabbit.oak.jcr;
import java.io.InputStream;
import java.math.BigDecimal;
+import java.util.ArrayList;
import java.util.Calendar;
-import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -315,9 +315,7 @@ public class NodeImpl extends ItemImpl<N
int targetType = getTargetType(value, type);
Value targetValue =
ValueHelper.convert(value, targetType, getValueFactory());
- CoreValue oakValue =
- ValueConverter.toCoreValue(targetValue, sessionDelegate);
- return new PropertyImpl(dlg.setProperty(oakName, oakValue));
+ return new PropertyImpl(dlg.setProperty(oakName, targetValue));
}
}
});
@@ -354,8 +352,13 @@ public class NodeImpl extends ItemImpl<N
return p;
} else {
String oakName = sessionDelegate.getOakPathOrThrow(jcrName);
- List<CoreValue> oakValue = ValueConverter.toCoreValues(targetValues, sessionDelegate);
- return new PropertyImpl(dlg.setProperty(oakName, oakValue));
+ ArrayList<Value> vs = Lists.newArrayList();
+ for (Value targetValue : targetValues) {
+ if (targetValue != null) {
+ vs.add(targetValue);
+ }
+ }
+ return new PropertyImpl(dlg.setProperty(oakName, vs.toArray(new Value[vs.size()])));
}
}
});
@@ -913,8 +916,8 @@ public class NodeImpl extends ItemImpl<N
// TODO: END
String jcrPrimaryType = sessionDelegate.getOakPathOrThrow(Property.JCR_PRIMARY_TYPE);
- CoreValue cv = ValueConverter.toCoreValue(nodeTypeName, PropertyType.NAME, sessionDelegate);
- dlg.setProperty(jcrPrimaryType, cv);
+ Value value = sessionDelegate.getValueFactory().createValue(nodeTypeName, PropertyType.NAME);
+ dlg.setProperty(jcrPrimaryType, value);
return null;
}
});
@@ -938,20 +941,26 @@ public class NodeImpl extends ItemImpl<N
boolean nodeModified = false;
if (mixins == null) {
nodeModified = true;
- dlg.setProperty(JcrConstants.JCR_MIXINTYPES, Collections.singletonList(cv));
+ Value name = sessionDelegate.getValueFactory().createValue(mixinName, PropertyType.NAME);
+ dlg.setProperty(JcrConstants.JCR_MIXINTYPES, new Value[]{name});
} else {
List<CoreValue> values = Lists.newArrayList(mixins.getValues());
if (!values.contains(cv)) {
values.add(cv);
nodeModified = true;
- dlg.setProperty(JcrConstants.JCR_MIXINTYPES, values);
+ Value[] jcvValues = new Value[values.size()];
+ int k = 0;
+ for (CoreValue v : values) {
+ jcvValues[k++] = sessionDelegate.getValueFactory().createValue(cv);
+ }
+
+ dlg.setProperty(JcrConstants.JCR_MIXINTYPES, jcvValues);
}
}
// TODO: hack -- make sure we assign a UUID
if (nodeModified && nt.isNodeType(JcrConstants.MIX_REFERENCEABLE)) {
- CoreValue value = ValueConverter.toCoreValue(IdentifierManager.generateUUID(),
- PropertyType.STRING, sessionDelegate);
+ Value value = sessionDelegate.getValueFactory().createValue(IdentifierManager.generateUUID());
dlg.setProperty(JcrConstants.JCR_UUID, value);
}
return null;
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java Wed Oct 10 22:28:23 2012
@@ -16,10 +16,9 @@
*/
package org.apache.jackrabbit.oak.jcr;
-import java.util.List;
-
import javax.annotation.Nonnull;
import javax.jcr.InvalidItemStateException;
+import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
@@ -181,7 +180,7 @@ public class PropertyDelegate extends It
* Set the value of the property
* @param value
*/
- public void setValue(CoreValue value) throws InvalidItemStateException {
+ public void setValue(Value value) throws RepositoryException {
getLocation().set(PropertyStates.createProperty(getName(), value));
}
@@ -189,7 +188,7 @@ public class PropertyDelegate extends It
* Set the values of the property
* @param values
*/
- public void setValues(List<CoreValue> values) throws InvalidItemStateException {
+ public void setValues(Value[] values) throws RepositoryException {
getLocation().set(PropertyStates.createProperty(getName(), values));
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyImpl.java Wed Oct 10 22:28:23 2012
@@ -37,6 +37,7 @@ import javax.jcr.ValueFormatException;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.PropertyDefinition;
+import com.google.common.collect.Lists;
import org.apache.jackrabbit.oak.api.Tree.Status;
import org.apache.jackrabbit.oak.jcr.value.ValueConverter;
import org.apache.jackrabbit.value.ValueHelper;
@@ -675,7 +676,7 @@ public class PropertyImpl extends ItemIm
dlg.remove();
} else {
Value targetValue = ValueHelper.convert(value, requiredType, sessionDelegate.getValueFactory());
- dlg.setValue(ValueConverter.toCoreValue(targetValue, sessionDelegate));
+ dlg.setValue(targetValue);
}
}
@@ -695,7 +696,14 @@ public class PropertyImpl extends ItemIm
dlg.remove();
} else {
Value[] targetValues = ValueHelper.convert(values, requiredType, sessionDelegate.getValueFactory());
- dlg.setValues(ValueConverter.toCoreValues(targetValues, sessionDelegate));
+ List<Value> vs = Lists.newArrayList();
+ for (Value value : targetValues) {
+ if (value != null) {
+ vs.add(value);
+ }
+ }
+
+ dlg.setValues(vs.toArray(new Value[vs.size()]));
}
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java?rev=1396835&r1=1396834&r2=1396835&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/QueryImpl.java Wed Oct 10 22:28:23 2012
@@ -138,8 +138,8 @@ public class QueryImpl implements Query
if (node == null) {
throw new ItemExistsException("Node already exists: " + absPath);
}
- node.setProperty("statement", vf.getCoreValue(vf.createValue(statement)));
- node.setProperty("language", vf.getCoreValue(vf.createValue(language)));
+ node.setProperty("statement", vf.createValue(statement));
+ node.setProperty("language", vf.createValue(language));
NodeImpl n = new NodeImpl(node);
n.setPrimaryType(NodeType.NT_QUERY);
storedQueryPath = oakPath;