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 an...@apache.org on 2012/04/24 16:17:11 UTC
svn commit: r1329741 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/api/
oak-core/src/main/java/org/apache/jackrabbit/oak/core/
oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/
oak-core/src/main/java/org/apache/jac...
Author: angela
Date: Tue Apr 24 14:17:10 2012
New Revision: 1329741
URL: http://svn.apache.org/viewvc?rev=1329741&view=rev
Log:
OAK-16 : Proper ValueFactory implementation and Value handling (WIP)
OAK-33 : Values in oak-core (WIP)
- replacing query/CoreValue and query/CoreValueFactory by oak-api
Added:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/AbstractOakTest.java
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/api/Scalar.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/KernelContentRepository.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/AbstractPropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelPropertyState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRoot.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelTree.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ScalarImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/TypeValidator.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelRootFuzzIT.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelRootTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/LargeKernelNodeStateTest.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/PropertyImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ValueFactoryImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/ValueConverter.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=1329741&r1=1329740&r2=1329741&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 Tue Apr 24 14:17:10 2012
@@ -46,12 +46,12 @@ public interface PropertyState {
* @return the single value of this property or {@code null} if this is a multi
* valued property.
*/
- Scalar getScalar();
+ CoreValue getValue();
/**
* @return an iterable of the values of this multi valued property or
* {@code null} if this is not a multi valued property.
*/
- Iterable<Scalar> getArray();
+ Iterable<CoreValue> getValues();
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Scalar.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Scalar.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Scalar.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Scalar.java Tue Apr 24 14:17:10 2012
@@ -20,6 +20,8 @@ import java.io.InputStream;
/**
* An immutable, typed scalar value.
+ *
+ * TODO: remove if really not needed any more
*/
public interface Scalar {
enum Type {BOOLEAN, LONG, DOUBLE, BINARY, STRING, NULL}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java Tue Apr 24 14:17:10 2012
@@ -184,7 +184,7 @@ public interface Tree {
* @param name The name of this property
* @param value The value of this property
*/
- void setProperty(String name, Scalar value);
+ void setProperty(String name, CoreValue value);
/**
* Set a multivalued valued property state
@@ -192,7 +192,7 @@ public interface Tree {
* @param name The name of this property
* @param values The value of this property
*/
- void setProperty(String name, List<Scalar> values);
+ void setProperty(String name, List<CoreValue> values);
/**
* Remove a property
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/KernelContentRepository.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/KernelContentRepository.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/KernelContentRepository.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/KernelContentRepository.java Tue Apr 24 14:17:10 2012
@@ -52,8 +52,8 @@ public class KernelContentRepository imp
public KernelContentRepository(MicroKernel mk) {
microKernel = mk;
- nodeStore = new KernelNodeStore(microKernel);
valueFactory = new CoreValueFactoryImpl(microKernel);
+ nodeStore = new KernelNodeStore(microKernel, valueFactory);
queryEngine = new QueryEngineImpl(microKernel, valueFactory);
// FIXME: workspace setup must be done elsewhere...
@@ -95,8 +95,7 @@ public class KernelContentRepository imp
throw new NoSuchWorkspaceException(workspaceName);
}
- return new KernelContentSession(
- sc, workspaceName, nodeStore, queryEngine, valueFactory);
+ return new KernelContentSession(sc, workspaceName, nodeStore, queryEngine, valueFactory);
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/AbstractPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/AbstractPropertyState.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/AbstractPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/AbstractPropertyState.java Tue Apr 24 14:17:10 2012
@@ -18,8 +18,8 @@ package org.apache.jackrabbit.oak.kernel
import java.util.Iterator;
+import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Scalar;
/**
* Abstract base class for {@link PropertyState} implementations.
@@ -54,15 +54,15 @@ public abstract class AbstractPropertySt
if (isArray() != other.isArray()) {
return false;
} else if (isArray()) {
- Iterator<Scalar> iterator = other.getArray().iterator();
- for (Scalar scalar : getArray()) {
- if (!iterator.hasNext() || !scalar.equals(iterator.next())) {
+ Iterator<CoreValue> iterator = other.getValues().iterator();
+ for (CoreValue value : getValues()) {
+ if (!iterator.hasNext() || !value.equals(iterator.next())) {
return false;
}
}
return !iterator.hasNext();
} else {
- return getScalar().equals(other.getScalar());
+ return getValue().equals(other.getValue());
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeState.java Tue Apr 24 14:17:10 2012
@@ -21,8 +21,9 @@ package org.apache.jackrabbit.oak.kernel
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.json.JsopReader;
import org.apache.jackrabbit.mk.json.JsopTokenizer;
+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.Scalar;
import java.util.ArrayList;
import java.util.Iterator;
@@ -42,6 +43,7 @@ class KernelNodeState extends AbstractNo
static final int MAX_CHILD_NODE_NAMES = 1000;
private final MicroKernel kernel;
+ private final CoreValueFactory valueFactory;
private final String path;
@@ -59,11 +61,13 @@ class KernelNodeState extends AbstractNo
* underlying Microkernel does not contain such a node.
*
* @param kernel
+ * @param valueFactory
* @param path
* @param revision
*/
- public KernelNodeState(MicroKernel kernel, String path, String revision) {
+ public KernelNodeState(MicroKernel kernel, CoreValueFactory valueFactory, String path, String revision) {
this.kernel = kernel;
+ this.valueFactory = valueFactory;
this.path = path;
this.revision = revision;
}
@@ -89,25 +93,12 @@ class KernelNodeState extends AbstractNo
if ("/".equals(path)) {
childPath = '/' + name;
}
- childNodes.put(name, new KernelNodeState(
- kernel, childPath, revision));
- } else if (reader.matches(JsopTokenizer.NUMBER)) {
- properties.put(name, new KernelPropertyState(
- name, ScalarImpl.numberScalar(reader.getToken())));
- } else if (reader.matches(JsopTokenizer.STRING)) {
- properties.put(name, new KernelPropertyState(
- name, ScalarImpl.stringScalar(reader.getToken())));
- } else if (reader.matches(JsopTokenizer.TRUE)) {
- properties.put(name, new KernelPropertyState(
- name, ScalarImpl.booleanScalar(true)));
- } else if (reader.matches(JsopTokenizer.FALSE)) {
- properties.put(name, new KernelPropertyState(
- name, ScalarImpl.booleanScalar(false)));
+ childNodes.put(name, new KernelNodeState(kernel, valueFactory, childPath, revision));
} else if (reader.matches('[')) {
- properties.put(name, new KernelPropertyState(
- name, readArray(reader)));
+ properties.put(name, new KernelPropertyState(name, readArray(reader)));
} else {
- throw new IllegalArgumentException("Unexpected token: " + reader.getToken());
+ CoreValue cv = readValue(reader);
+ properties.put(name, new KernelPropertyState(name, cv));
}
} while (reader.matches(','));
reader.read('}');
@@ -146,7 +137,7 @@ class KernelNodeState extends AbstractNo
if (child == null && childNodeCount > MAX_CHILD_NODE_NAMES) {
String childPath = getChildPath(name);
if (kernel.nodeExists(childPath, revision)) {
- child = new KernelNodeState(kernel, childPath, revision);
+ child = new KernelNodeState(kernel, valueFactory, childPath, revision);
}
}
return child;
@@ -194,7 +185,7 @@ class KernelNodeState extends AbstractNo
reader.read('}');
String childPath = getChildPath(name);
NodeState child =
- new KernelNodeState(kernel, childPath, revision);
+ new KernelNodeState(kernel, valueFactory, childPath, revision);
entries.add(new KernelChildNodeEntry(name, child));
} else {
reader.read();
@@ -225,23 +216,37 @@ class KernelNodeState extends AbstractNo
}
}
- private static List<Scalar> readArray(JsopReader reader) {
- List<Scalar> values = new ArrayList<Scalar>();
+ private List<CoreValue> readArray(JsopReader reader) {
+ List<CoreValue> values = new ArrayList<CoreValue>();
while (!reader.matches(']')) {
- if (reader.matches(JsopTokenizer.NUMBER)) {
- values.add(ScalarImpl.numberScalar(reader.getToken()));
- } else if (reader.matches(JsopTokenizer.STRING)) {
- values.add(ScalarImpl.stringScalar(reader.getToken()));
- } else if (reader.matches(JsopTokenizer.TRUE)) {
- values.add(ScalarImpl.booleanScalar(true));
- } else if (reader.matches(JsopTokenizer.FALSE)) {
- values.add(ScalarImpl.booleanScalar(false));
- } else {
- throw new IllegalArgumentException("Unexpected token: " + reader.getToken());
- }
+ values.add(readValue(reader));
reader.matches(',');
}
return values;
}
+ private CoreValue readValue(JsopReader reader) {
+ CoreValue value;
+ // TODO properly handle property types not covered by JSON: Binary, double, decimal, date, name, path, (weak)ref, uri
+ if (reader.matches(JsopTokenizer.NUMBER)) {
+ String number = reader.getToken();
+ // TODO: property deal with different number types (double, BigDecimal)
+ if (number.indexOf('.') > -1) {
+ value = valueFactory.createValue(Double.valueOf(number));
+ } else {
+ value = valueFactory.createValue(Long.valueOf(number));
+ }
+ } else if (reader.matches(JsopTokenizer.TRUE)) {
+ value = valueFactory.createValue(true);
+ } else if (reader.matches(JsopTokenizer.FALSE)) {
+ value = valueFactory.createValue(false);
+ } else if (reader.matches(JsopTokenizer.STRING)) {
+ // TODO: deal with other property types
+ value = valueFactory.createValue(reader.getToken());
+ } else {
+ throw new IllegalArgumentException("Unexpected token: " + reader.getToken());
+ }
+ return value;
+ }
+
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java Tue Apr 24 14:17:10 2012
@@ -19,21 +19,24 @@
package org.apache.jackrabbit.oak.kernel;
import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.api.CoreValueFactory;
/**
* {@link MicroKernel}-based {@link NodeStore} implementation.
*/
public class KernelNodeStore implements NodeStore {
- final MicroKernel kernel; // FIXME make private
+ final MicroKernel kernel;
+ final CoreValueFactory valueFactory;
- public KernelNodeStore(MicroKernel kernel) {
+ public KernelNodeStore(MicroKernel kernel, CoreValueFactory valueFactory) {
this.kernel = kernel;
+ this.valueFactory = valueFactory;
}
@Override
public NodeState getRoot() {
- return new KernelNodeState(kernel, "/", kernel.getHeadRevision());
+ return new KernelNodeState(kernel, valueFactory, "/", kernel.getHeadRevision());
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelPropertyState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelPropertyState.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelPropertyState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelPropertyState.java Tue Apr 24 14:17:10 2012
@@ -21,20 +21,20 @@ package org.apache.jackrabbit.oak.kernel
import java.util.Collections;
import java.util.List;
-import org.apache.jackrabbit.oak.api.Scalar;
+import org.apache.jackrabbit.oak.api.CoreValue;
class KernelPropertyState extends AbstractPropertyState {
private final String name;
- private final Scalar value;
- private final List<Scalar> values;
+ private final CoreValue value;
+ private final List<CoreValue> values;
- public KernelPropertyState(String name, Scalar value) {
+ public KernelPropertyState(String name, CoreValue value) {
this.name = name;
this.value = value;
this.values = null;
}
- public KernelPropertyState(String name, List<Scalar> values) {
+ public KernelPropertyState(String name, List<CoreValue> values) {
this.name = name;
this.value = null;
this.values = Collections.unmodifiableList(values);
@@ -51,12 +51,12 @@ class KernelPropertyState extends Abstra
}
@Override
- public Scalar getScalar() {
+ public CoreValue getValue() {
return value;
}
@Override
- public Iterable<Scalar> getArray() {
+ public Iterable<CoreValue> getValues() {
return values;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRoot.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRoot.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRoot.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRoot.java Tue Apr 24 14:17:10 2012
@@ -21,12 +21,13 @@ package org.apache.jackrabbit.oak.kernel
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.api.MicroKernelException;
import org.apache.jackrabbit.mk.json.JsonBuilder;
+import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.api.Scalar;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.kernel.KernelTree.Listener;
+import javax.jcr.PropertyType;
import java.util.List;
import static org.apache.jackrabbit.mk.util.PathUtils.elements;
@@ -156,23 +157,24 @@ public class KernelRoot implements Root
return path.isEmpty() ? name : path + '/' + name;
}
- private static String encode(Scalar scalar) {
- switch (scalar.getType()) {
- case BOOLEAN: return JsonBuilder.encode(scalar.getBoolean());
- case LONG: return JsonBuilder.encode(scalar.getLong());
- case DOUBLE: return JsonBuilder.encode(scalar.getDouble());
- case BINARY: return null; // TODO implement encoding of binaries
- case STRING: return JsonBuilder.encode(scalar.getString());
- case NULL: return "null";
+ private static String encode(CoreValue value) {
+ switch (value.getType()) {
+ // TODO: deal with all property types.
+ case PropertyType.BOOLEAN: return JsonBuilder.encode(value.getBoolean());
+ case PropertyType.LONG: return JsonBuilder.encode(value.getLong());
+ case PropertyType.DOUBLE: return JsonBuilder.encode(value.getDouble());
+ case PropertyType.BINARY: return null; // TODO implement encoding of binaries
+ case PropertyType.STRING: return JsonBuilder.encode(value.getString());
+ default: return JsonBuilder.encode(value.getString());
+ //case NULL: return "null"; // TODO
}
- throw new IllegalStateException("unreachable"); // Make javac happy
}
- private static String encode(Iterable<Scalar> scalars) {
+ private static String encode(Iterable<CoreValue> values) {
StringBuilder sb = new StringBuilder();
sb.append('[');
- for (Scalar scalar : scalars) {
- sb.append(encode(scalar));
+ for (CoreValue cv : values) {
+ sb.append(encode(cv));
sb.append(',');
}
if (sb.length() > 1) {
@@ -200,12 +202,12 @@ public class KernelRoot implements Root
}
@Override
- public void setProperty(KernelTree tree, String name, Scalar value) {
+ public void setProperty(KernelTree tree, String name, CoreValue value) {
jsop.append("^\"").append(path(tree, name)).append("\":").append(encode(value));
}
@Override
- public void setProperty(KernelTree tree, String name, List<Scalar> values) {
+ public void setProperty(KernelTree tree, String name, List<CoreValue> values) {
jsop.append("^\"").append(path(tree, name)).append("\":").append(encode(values));
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelTree.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelTree.java Tue Apr 24 14:17:10 2012
@@ -18,9 +18,9 @@
*/
package org.apache.jackrabbit.oak.kernel;
+import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Scalar;
import org.apache.jackrabbit.oak.util.Function1;
import org.apache.jackrabbit.oak.util.Iterators;
import org.apache.jackrabbit.oak.util.PagedIterator;
@@ -100,7 +100,7 @@ public class KernelTree implements Tree
* @param name name of the property
* @param value value of the property
*/
- void setProperty(KernelTree tree, String name, Scalar value);
+ void setProperty(KernelTree tree, String name, CoreValue value);
/**
* The property of the given {@code name} and {@code values} has been set.
@@ -108,7 +108,7 @@ public class KernelTree implements Tree
* @param name name of the property
* @param values values of the property
*/
- void setProperty(KernelTree tree, String name, List<Scalar> values);
+ void setProperty(KernelTree tree, String name, List<CoreValue> values);
/**
* The property of the given {@code name} has been removed.
@@ -441,7 +441,7 @@ public class KernelTree implements Tree
}
@Override
- public void setProperty(String name, Scalar value) {
+ public void setProperty(String name, CoreValue value) {
PropertyState propertyState = new KernelPropertyState(name, value);
setProperty(propertyState);
if (listener != null) {
@@ -450,7 +450,7 @@ public class KernelTree implements Tree
}
@Override
- public void setProperty(String name, List<Scalar> values) {
+ public void setProperty(String name, List<CoreValue> values) {
PropertyState propertyState = new KernelPropertyState(name, values);
setProperty(propertyState);
if (listener != null) {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ScalarImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ScalarImpl.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ScalarImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ScalarImpl.java Tue Apr 24 14:17:10 2012
@@ -23,6 +23,9 @@ import java.util.concurrent.Callable;
import org.apache.jackrabbit.oak.api.Scalar;
+/**
+ * TODO: remove if really not needed any more
+ */
public abstract class ScalarImpl implements Scalar {
private static final NullScalar NULL_SCALAR = new NullScalar();
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=1329741&r1=1329740&r2=1329741&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 Tue Apr 24 14:17:10 2012
@@ -20,8 +20,8 @@ import java.util.Collections;
import java.util.Set;
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.api.Scalar;
import org.apache.jackrabbit.oak.kernel.NodeState;
import org.apache.jackrabbit.oak.kernel.Validator;
@@ -35,14 +35,14 @@ class TypeValidator implements Validator
private void checkTypeExists(PropertyState after)
throws CommitFailedException {
- Iterable<Scalar> scalars = Collections.emptyList();
+ Iterable<CoreValue> coreValues = Collections.emptyList();
if ("jcr:primaryType".equals(after.getName())) {
- scalars = Collections.singletonList(after.getScalar());
+ coreValues = Collections.singletonList(after.getValue());
} else if ("jcr:mixinTypes".equals(after.getName())) {
- scalars = after.getArray();
+ coreValues = after.getValues();
}
- for (Scalar scalar : scalars) {
- String value = scalar.getString();
+ for (CoreValue cv : coreValues) {
+ String value = cv.getString();
if (!types.contains(value)) {
throw new CommitFailedException("Unknown node type: " + value);
}
Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/AbstractOakTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/AbstractOakTest.java?rev=1329741&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/AbstractOakTest.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/AbstractOakTest.java Tue Apr 24 14:17:10 2012
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.kernel;
+
+import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.simple.SimpleKernelImpl;
+import org.apache.jackrabbit.oak.api.CoreValueFactory;
+import org.apache.jackrabbit.oak.core.CoreValueFactoryImpl;
+import org.junit.Before;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * AbstractOakTest...
+ */
+public abstract class AbstractOakTest {
+
+ /**
+ * logger instance
+ */
+ private static final Logger log = LoggerFactory.getLogger(AbstractOakTest.class);
+
+ // TODO: use regular oak-repo setup
+ protected MicroKernel microKernel;
+ protected CoreValueFactory valueFactory;
+
+ protected KernelNodeState state;
+
+ @Before
+ public void setUp() {
+ microKernel = new SimpleKernelImpl("mem:" + getClass().getName());
+ valueFactory = new CoreValueFactoryImpl(microKernel);
+
+ state = createInitialState();
+ }
+
+ abstract KernelNodeState createInitialState();
+}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java Tue Apr 24 14:17:10 2012
@@ -18,35 +18,29 @@
*/
package org.apache.jackrabbit.oak.kernel;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertNull;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-import org.apache.jackrabbit.mk.api.MicroKernel;
-import org.apache.jackrabbit.mk.simple.SimpleKernelImpl;
-import org.apache.jackrabbit.oak.api.PropertyState;
-import org.junit.Before;
-import org.junit.Test;
-
-public class KernelNodeStateTest {
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
- private NodeState state;
+public class KernelNodeStateTest extends AbstractOakTest {
- @Before
- public void setUp() {
- MicroKernel kernel = new SimpleKernelImpl("mem:KernelNodeStateTest");
+ @Override
+ KernelNodeState createInitialState() {
String jsop =
"+\"test\":{\"a\":1,\"b\":2,\"c\":3,"
+ "\"x\":{},\"y\":{},\"z\":{}}";
- String revision = kernel.commit(
- "/", jsop, kernel.getHeadRevision(), "test data");
- state = new KernelNodeState(kernel, "/test", revision);
+ String revision = microKernel.commit(
+ "/", jsop, microKernel.getHeadRevision(), "test data");
+ return new KernelNodeState(microKernel, valueFactory, "/test", revision);
}
@Test
@@ -57,11 +51,11 @@ public class KernelNodeStateTest {
@Test
public void testGetProperty() {
assertEquals("a", state.getProperty("a").getName());
- assertEquals(1, state.getProperty("a").getScalar().getLong());
+ assertEquals(1, state.getProperty("a").getValue().getLong());
assertEquals("b", state.getProperty("b").getName());
- assertEquals(2, state.getProperty("b").getScalar().getLong());
+ assertEquals(2, state.getProperty("b").getValue().getLong());
assertEquals("c", state.getProperty("c").getName());
- assertEquals(3, state.getProperty("c").getScalar().getLong());
+ assertEquals(3, state.getProperty("c").getValue().getLong());
assertNull(state.getProperty("x"));
}
@@ -71,7 +65,7 @@ public class KernelNodeStateTest {
List<Long> values = new ArrayList<Long>();
for (PropertyState property : state.getProperties()) {
names.add(property.getName());
- values.add(property.getScalar().getLong());
+ values.add(property.getValue().getLong());
}
Collections.sort(names);
Collections.sort(values);
@@ -128,5 +122,4 @@ public class KernelNodeStateTest {
// Zero count
assertFalse(state.getChildNodeEntries(0, 0).iterator().hasNext());
}
-
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelRootFuzzIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelRootFuzzIT.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelRootFuzzIT.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelRootFuzzIT.java Tue Apr 24 14:17:10 2012
@@ -21,9 +21,11 @@ package org.apache.jackrabbit.oak.kernel
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.simple.SimpleKernelImpl;
import org.apache.jackrabbit.mk.util.PathUtils;
+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.Scalar;
import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.core.CoreValueFactoryImpl;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -62,6 +64,8 @@ public class KernelRootFuzzIT {
private int counter;
+ private CoreValueFactory vf;
+
@Parameters
public static List<Object[]> seeds() {
// todo use random sees, log seed, provide means to start with specific seed
@@ -83,12 +87,13 @@ public class KernelRootFuzzIT {
counter = 0;
MicroKernel mk1 = new SimpleKernelImpl("mem:");
- store1 = new KernelNodeStore(mk1);
+ vf = new CoreValueFactoryImpl(mk1);
+ store1 = new KernelNodeStore(mk1, vf);
mk1.commit("", "+\"/test\":{} +\"/test/root\":{}", mk1.getHeadRevision(), "");
root1 = new KernelRoot(store1, "test");
MicroKernel mk2 = new SimpleKernelImpl("mem:");
- store2 = new KernelNodeStore(mk2);
+ store2 = new KernelNodeStore(mk2, vf);
mk2.commit("", "+\"/test\":{} +\"/test/root\":{}", mk2.getHeadRevision(), "");
root2 = new KernelRoot(store2, "test");
}
@@ -221,9 +226,9 @@ public class KernelRootFuzzIT {
static class SetProperty extends Operation {
private final String parentPath;
private String propertyName;
- private Scalar propertyValue;
+ private CoreValue propertyValue;
- SetProperty(String parentPath, String name, Scalar value) {
+ SetProperty(String parentPath, String name, CoreValue value) {
this.parentPath = parentPath;
this.propertyName = name;
this.propertyValue = value;
@@ -344,7 +349,7 @@ public class KernelRootFuzzIT {
private Operation createAddProperty() {
String parent = chooseNodePath();
String name = createPropertyName();
- Scalar value = createValue();
+ CoreValue value = createValue();
return new SetProperty(parent, name, value);
}
@@ -353,7 +358,7 @@ public class KernelRootFuzzIT {
if (path == null) {
return null;
}
- Scalar value = createValue();
+ CoreValue value = createValue();
return new SetProperty(PathUtils.getParentPath(path), PathUtils.getName(path), value);
}
@@ -414,8 +419,8 @@ public class KernelRootFuzzIT {
return null;
}
- private Scalar createValue() {
- return ScalarImpl.stringScalar("V" + counter++);
+ private CoreValue createValue() {
+ return vf.createValue("V" + counter++);
}
private static void checkEqual(Tree tree1, Tree tree2) {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelRootTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelRootTest.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelRootTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelRootTest.java Tue Apr 24 14:17:10 2012
@@ -18,15 +18,14 @@
*/
package org.apache.jackrabbit.oak.kernel;
-import org.apache.jackrabbit.mk.api.MicroKernel;
-import org.apache.jackrabbit.mk.simple.SimpleKernelImpl;
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.api.Scalar;
import org.apache.jackrabbit.oak.api.Tree;
import org.junit.Before;
import org.junit.Test;
+import javax.jcr.PropertyType;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -39,17 +38,23 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-public class KernelRootTest {
+public class KernelRootTest extends AbstractOakTest {
- private final MicroKernel microkernel = new SimpleKernelImpl("mem:");
- private final KernelNodeStore store = new KernelNodeStore(microkernel);
+ private KernelNodeStore store;
@Before
public void setUp() {
+ super.setUp();
+ store = new KernelNodeStore(microKernel, valueFactory);
+ }
+
+ @Override
+ KernelNodeState createInitialState() {
String jsop =
"+\"test\":{\"a\":1,\"b\":2,\"c\":3,"
+ "\"x\":{},\"y\":{},\"z\":{}}";
- microkernel.commit("/", jsop, microkernel.getHeadRevision(), "test data");
+ String revision = microKernel.commit("/", jsop, microKernel.getHeadRevision(), "test data");
+ return new KernelNodeState(microKernel, valueFactory, "/test", revision);
}
@Test
@@ -75,8 +80,8 @@ public class KernelRootTest {
propertyState = tree.getProperty("a");
assertNotNull(propertyState);
assertFalse(propertyState.isArray());
- assertEquals(Scalar.Type.LONG, propertyState.getScalar().getType());
- assertEquals(1, propertyState.getScalar().getLong());
+ assertEquals(PropertyType.LONG, propertyState.getValue().getType());
+ assertEquals(1, propertyState.getValue().getLong());
}
@Test
@@ -102,17 +107,17 @@ public class KernelRootTest {
KernelRoot root = new KernelRoot(store, "test");
Tree tree = root.getTree("/");
- Map<String, Scalar> expectedProperties = new HashMap<String, Scalar>();
- expectedProperties.put("a", ScalarImpl.longScalar(1));
- expectedProperties.put("b", ScalarImpl.longScalar(2));
- expectedProperties.put("c", ScalarImpl.longScalar(3));
+ Map<String, CoreValue> expectedProperties = new HashMap<String, CoreValue>();
+ expectedProperties.put("a", valueFactory.createValue(1));
+ expectedProperties.put("b", valueFactory.createValue(2));
+ expectedProperties.put("c", valueFactory.createValue(3));
Iterable<PropertyState> properties = tree.getProperties();
for (PropertyState property : properties) {
- Scalar value = expectedProperties.remove(property.getName());
+ CoreValue value = expectedProperties.remove(property.getName());
assertNotNull(value);
assertFalse(property.isArray());
- assertEquals(value, property.getScalar());
+ assertEquals(value, property.getValue());
}
assertTrue(expectedProperties.isEmpty());
@@ -175,12 +180,12 @@ public class KernelRootTest {
Tree tree = root.getTree("/");
assertFalse(tree.hasProperty("new"));
- Scalar value = ScalarImpl.stringScalar("value");
+ CoreValue value = valueFactory.createValue("value");
tree.setProperty("new", value);
PropertyState property = tree.getProperty("new");
assertNotNull(property);
assertEquals("new", property.getName());
- assertEquals(value, property.getScalar());
+ assertEquals(value, property.getValue());
root.commit();
tree = root.getTree("/");
@@ -188,7 +193,7 @@ public class KernelRootTest {
property = tree.getProperty("new");
assertNotNull(property);
assertEquals("new", property.getName());
- assertEquals(value, property.getScalar());
+ assertEquals(value, property.getValue());
}
@Test
@@ -312,7 +317,7 @@ public class KernelRootTest {
assertEquals(3, tree.getPropertyCount());
- Scalar value = ScalarImpl.stringScalar("foo");
+ CoreValue value = valueFactory.createValue("foo");
tree.setProperty("a", value);
assertEquals(3, tree.getPropertyCount());
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/LargeKernelNodeStateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/LargeKernelNodeStateTest.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/LargeKernelNodeStateTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/LargeKernelNodeStateTest.java Tue Apr 24 14:17:10 2012
@@ -18,34 +18,27 @@
*/
package org.apache.jackrabbit.oak.kernel;
+import org.junit.Test;
+
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
-import org.apache.jackrabbit.mk.api.MicroKernel;
-import org.apache.jackrabbit.mk.simple.SimpleKernelImpl;
-import org.junit.Before;
-import org.junit.Test;
-
-public class LargeKernelNodeStateTest {
+public class LargeKernelNodeStateTest extends AbstractOakTest {
private final int N = KernelNodeState.MAX_CHILD_NODE_NAMES;
- private NodeState state;
-
- @Before
- public void setUp() {
- MicroKernel kernel =
- new SimpleKernelImpl("mem:LargeKernelNodeStateTest");
+ @Override
+ KernelNodeState createInitialState() {
StringBuilder jsop = new StringBuilder("+\"test\":{\"a\":1");
for (int i = 0; i <= N; i++) {
jsop.append(",\"x" + i + "\":{}");
}
- jsop.append("}");
- String revision = kernel.commit(
- "/", jsop.toString(), kernel.getHeadRevision(), "test data");
- state = new KernelNodeState(kernel, "/test", revision);
+ jsop.append('}');
+ String revision = microKernel.commit(
+ "/", jsop.toString(), microKernel.getHeadRevision(), "test data");
+ return new KernelNodeState(microKernel, valueFactory, "/test", revision);
}
@Test
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=1329741&r1=1329740&r2=1329741&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 Tue Apr 24 14:17:10 2012
@@ -20,13 +20,13 @@ import org.apache.jackrabbit.JcrConstant
import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
import org.apache.jackrabbit.commons.iterator.PropertyIteratorAdapter;
import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Tree.Status;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.jcr.util.ItemNameMatcher;
import org.apache.jackrabbit.oak.jcr.util.LogUtil;
import org.apache.jackrabbit.oak.jcr.util.ValueConverter;
-import org.apache.jackrabbit.oak.kernel.ScalarImpl;
import org.apache.jackrabbit.oak.namepath.Paths;
import org.apache.jackrabbit.oak.util.Function1;
import org.apache.jackrabbit.oak.util.Iterators;
@@ -226,7 +226,7 @@ public class NodeImpl extends ItemImpl i
public Property setProperty(String name, Value value, int type) throws RepositoryException {
checkStatus();
- getState().setProperty(name, ValueConverter.toScalar(value));
+ getState().setProperty(name, sessionContext.getValueFactory().getCoreValue(value));
return getProperty(name);
}
@@ -248,7 +248,7 @@ public class NodeImpl extends ItemImpl i
public Property setProperty(String name, Value[] values, int type) throws RepositoryException {
checkStatus();
- getState().setProperty(name, ValueConverter.toScalar(values));
+ getState().setProperty(name, ValueConverter.toCoreValues(values, sessionContext));
return getProperty(name);
}
@@ -627,7 +627,8 @@ public class NodeImpl extends ItemImpl i
public void setPrimaryType(String nodeTypeName) throws RepositoryException {
checkStatus();
- getState().setProperty(JcrConstants.JCR_PRIMARYTYPE, ScalarImpl.stringScalar(nodeTypeName));
+ CoreValue cv = ValueConverter.toCoreValue(nodeTypeName, PropertyType.NAME, sessionContext);
+ getState().setProperty(JcrConstants.JCR_PRIMARYTYPE, cv);
}
@Override
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=1329741&r1=1329740&r2=1329741&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 Tue Apr 24 14:17:10 2012
@@ -340,7 +340,7 @@ public class PropertyImpl extends ItemIm
throw new ValueFormatException(LogUtil.safeGetJCRPath(this) + " is multi-valued.");
}
- return ValueConverter.toValue(getValueFactory(), getPropertyState().getScalar());
+ return ValueConverter.toValue(getPropertyState().getValue(), sessionContext);
}
@Override
@@ -350,7 +350,7 @@ public class PropertyImpl extends ItemIm
throw new ValueFormatException(LogUtil.safeGetJCRPath(this) + " is not multi-valued.");
}
- return ValueConverter.toValues(getValueFactory(), getPropertyState().getArray());
+ return ValueConverter.toValues(getPropertyState().getValues(), sessionContext);
}
/**
@@ -566,7 +566,7 @@ public class PropertyImpl extends ItemIm
remove();
}
else {
- getParentContentTree().setProperty(name(), ValueConverter.toScalar(value));
+ getParentContentTree().setProperty(name(), ValueConverter.toCoreValue(value, sessionContext));
}
}
@@ -586,7 +586,7 @@ public class PropertyImpl extends ItemIm
remove();
}
else {
- getParentContentTree().setProperty(name(), ValueConverter.toScalar(values));
+ getParentContentTree().setProperty(name(), ValueConverter.toCoreValues(values, sessionContext));
}
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ValueFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ValueFactoryImpl.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ValueFactoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ValueFactoryImpl.java Tue Apr 24 14:17:10 2012
@@ -66,12 +66,25 @@ public class ValueFactoryImpl implements
}
public CoreValue getCoreValue(Value jcrValue) {
+ ValueImpl v;
if (jcrValue instanceof ValueImpl) {
- return ((ValueImpl) jcrValue).unwrap();
+ v = (ValueImpl) jcrValue;
} else {
- // TODO
- throw new UnsupportedOperationException("Unsupported Value implementation.");
+ // TODO add proper implementation
+ try {
+ switch (jcrValue.getType()) {
+ case PropertyType.BINARY:
+ v = (ValueImpl) createValue(jcrValue.getStream());
+ break;
+ default:
+ v = (ValueImpl) createValue(jcrValue.getString(), jcrValue.getType());
+ }
+ } catch (RepositoryException e) {
+ throw new UnsupportedOperationException("Not implemented yet...");
+ }
}
+
+ return v.unwrap();
}
//-------------------------------------------------------< ValueFactory >---
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java Tue Apr 24 14:17:10 2012
@@ -22,7 +22,7 @@ import org.apache.jackrabbit.api.securit
import org.apache.jackrabbit.api.security.user.Query;
import org.apache.jackrabbit.api.security.user.User;
import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.oak.api.Scalar;
+import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.jcr.NodeImpl;
import org.apache.jackrabbit.oak.jcr.SessionContext;
import org.apache.jackrabbit.oak.jcr.SessionImpl;
@@ -39,7 +39,6 @@ import javax.jcr.UnsupportedRepositoryOp
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.security.Principal;
-import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -328,22 +327,16 @@ public class UserManagerImpl implements
}
void setInternalProperty(NodeImpl userNode, String name, String value, int type) throws RepositoryException {
- // TODO: check again if this really makes a transient modification with marking the property modified/new
- Scalar scalar = ValueConverter.toScalar(value, type);
- sessionContext.getContentTree(userNode).setProperty(name, scalar);
+ CoreValue cv = ValueConverter.toCoreValue(value, type, sessionContext);
+ sessionContext.getContentTree(userNode).setProperty(name, cv);
}
void setInternalProperty(NodeImpl userNode, String name, String[] values, int type) throws RepositoryException {
- // TODO: check again if this really makes a transient modification with marking the property modified/new
- List<Scalar> scalarList = new ArrayList<Scalar>(values.length);
- for (String value : values) {
- scalarList.add(ValueConverter.toScalar(value, PropertyType.STRING));
- }
- sessionContext.getContentTree(userNode).setProperty(name, scalarList);
+ List<CoreValue> cvs = ValueConverter.toCoreValues(values, type, sessionContext);
+ sessionContext.getContentTree(userNode).setProperty(name, cvs);
}
void removeInternalProperty(NodeImpl userNode, String name) {
- // TODO: check again if this really makes a transient modification with marking the property modified
sessionContext.getContentTree(userNode).removeProperty(name);
}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/ValueConverter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/ValueConverter.java?rev=1329741&r1=1329740&r2=1329741&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/ValueConverter.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/util/ValueConverter.java Tue Apr 24 14:17:10 2012
@@ -19,14 +19,13 @@
package org.apache.jackrabbit.oak.jcr.util;
-import org.apache.jackrabbit.oak.api.Scalar;
-import org.apache.jackrabbit.oak.kernel.ScalarImpl; // FIXME: Use only the API
+import org.apache.jackrabbit.oak.api.CoreValue;
+import org.apache.jackrabbit.oak.jcr.SessionContext;
+import org.apache.jackrabbit.oak.jcr.SessionImpl;
+import org.apache.jackrabbit.oak.jcr.ValueFactoryImpl;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
-import javax.jcr.ValueFactory;
+import javax.jcr.ValueFormatException;
import java.util.ArrayList;
import java.util.List;
@@ -38,99 +37,42 @@ import java.util.List;
public final class ValueConverter {
private ValueConverter() {}
- public static Scalar toScalar(String value, int propertyType) throws RepositoryException {
- switch (propertyType) {
- case PropertyType.STRING: {
- return ScalarImpl.stringScalar(value);
- }
- case PropertyType.DOUBLE: {
- return ScalarImpl.doubleScalar(Double.parseDouble(value));
- }
- case PropertyType.LONG: {
- return ScalarImpl.longScalar(Long.parseLong(value));
- }
- case PropertyType.BOOLEAN: {
- return ScalarImpl.booleanScalar(Boolean.parseBoolean(value));
- }
- case PropertyType.BINARY: {
- return ScalarImpl.binaryScalar(value);
- }
- case PropertyType.DECIMAL:
- case PropertyType.DATE:
- case PropertyType.NAME:
- case PropertyType.PATH:
- case PropertyType.REFERENCE:
- case PropertyType.WEAKREFERENCE:
- case PropertyType.URI:
- default: {
- // todo implement toScalar
- throw new UnsupportedRepositoryOperationException("toScalar");
- }
- }
+ public static CoreValue toCoreValue(String value, int propertyType, SessionContext<SessionImpl> sessionContext) throws ValueFormatException {
+ return toCoreValue(sessionContext.getValueFactory().createValue(value, propertyType), sessionContext);
}
- public static Scalar toScalar(Value value) throws RepositoryException {
- switch (value.getType()) {
- case PropertyType.STRING: {
- return ScalarImpl.stringScalar(value.getString());
- }
- case PropertyType.DOUBLE: {
- return ScalarImpl.doubleScalar(value.getDouble());
- }
- case PropertyType.LONG: {
- return ScalarImpl.longScalar(value.getLong());
- }
- case PropertyType.BOOLEAN: {
- return ScalarImpl.booleanScalar(value.getBoolean());
- }
- case PropertyType.DECIMAL:
- case PropertyType.BINARY:
- case PropertyType.DATE:
- case PropertyType.NAME:
- case PropertyType.PATH:
- case PropertyType.REFERENCE:
- case PropertyType.WEAKREFERENCE:
- case PropertyType.URI:
- default: {
- throw new UnsupportedRepositoryOperationException("toScalar"); // todo implement toScalar
- }
+ public static CoreValue toCoreValue(Value value, SessionContext<SessionImpl> sessionContext) {
+ ValueFactoryImpl vf = sessionContext.getValueFactory();
+ return vf.getCoreValue(value);
+ }
+
+ public static List<CoreValue> toCoreValues(String[] values, int propertyType, SessionContext<SessionImpl> sessionContext) throws ValueFormatException {
+ Value[] vs = new Value[values.length];
+ for (int i = 0; i < values.length; i++) {
+ vs[i] = sessionContext.getValueFactory().createValue(values[i], propertyType);
}
+ return toCoreValues(vs, sessionContext);
}
-
- public static List<Scalar> toScalar(Value[] values) throws RepositoryException {
- List<Scalar> scalars = new ArrayList<Scalar>();
- for (Value value : values) {
- if (value != null) {
- scalars.add(toScalar(value));
+
+ public static List<CoreValue> toCoreValues(Value[] values, SessionContext<SessionImpl> sessionContext) {
+ List<CoreValue> cvs = new ArrayList<CoreValue>(values.length);
+ for (Value jcrValue : values) {
+ if (jcrValue != null) {
+ cvs.add(toCoreValue(jcrValue, sessionContext));
}
}
- return scalars;
+ return cvs;
}
- public static Value toValue(ValueFactory valueFactory, Scalar scalar)
- throws UnsupportedRepositoryOperationException {
-
- switch (scalar.getType()) {
- case BOOLEAN:
- return valueFactory.createValue(scalar.getBoolean());
- case LONG:
- return valueFactory.createValue(scalar.getLong());
- case DOUBLE:
- return valueFactory.createValue(scalar.getDouble());
- case STRING:
- return valueFactory.createValue(scalar.getString());
- default:
- throw new UnsupportedRepositoryOperationException("toValue"); // todo implement toValue
- }
+ public static Value toValue(CoreValue coreValue, SessionContext<SessionImpl> sessionContext) {
+ return sessionContext.getValueFactory().createValue(coreValue);
}
- public static Value[] toValues(ValueFactory valueFactory, Iterable<Scalar> scalars)
- throws UnsupportedRepositoryOperationException {
+ public static Value[] toValues(Iterable<CoreValue> coreValues, SessionContext<SessionImpl> sessionContext) {
List<Value> values = new ArrayList<Value>();
- for (Scalar scalar : scalars) {
- values.add(toValue(valueFactory, scalar));
+ for (CoreValue cv : coreValues) {
+ values.add(toValue(cv, sessionContext));
}
return values.toArray(new Value[values.size()]);
}
-
}