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/26 16:44:25 UTC
svn commit: r1330884 - in /jackrabbit/oak/trunk: oak-it/jcr/
oak-it/jcr/src/test/resources/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/
Author: angela
Date: Thu Apr 26 14:44:24 2012
New Revision: 1330884
URL: http://svn.apache.org/viewvc?rev=1330884&view=rev
Log:
OAK-72 - Implement JCR API
- add missing check for null values in Node#setProperty, Property#setValue
- uncomment some TCK tests related to property modification
- add check for single-value <-> mv conversion (with TODO)
- change test-node type name to nt:unstructured
Modified:
jackrabbit/oak/trunk/oak-it/jcr/pom.xml
jackrabbit/oak/trunk/oak-it/jcr/src/test/resources/repositoryStubImpl.properties
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
Modified: jackrabbit/oak/trunk/oak-it/jcr/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/jcr/pom.xml?rev=1330884&r1=1330883&r2=1330884&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-it/jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-it/jcr/pom.xml Thu Apr 26 14:44:24 2012
@@ -62,24 +62,11 @@ org.apache.jackrabbit.test.api.NodeTest
org.apache.jackrabbit.test.api.NodeUUIDTest
org.apache.jackrabbit.test.api.NodeOrderableChildNodesTest
org.apache.jackrabbit.test.api.PropertyTest
-org.apache.jackrabbit.test.api.SetValueBinaryTest
-org.apache.jackrabbit.test.api.SetValueBooleanTest
-org.apache.jackrabbit.test.api.SetValueDateTest
-org.apache.jackrabbit.test.api.SetValueDecimalTest
-org.apache.jackrabbit.test.api.SetValueDoubleTest
-org.apache.jackrabbit.test.api.SetValueLongTest
org.apache.jackrabbit.test.api.SetValueReferenceTest
-org.apache.jackrabbit.test.api.SetValueStringTest
org.apache.jackrabbit.test.api.SetValueConstraintViolationExceptionTest
org.apache.jackrabbit.test.api.SetValueValueFormatExceptionTest
org.apache.jackrabbit.test.api.SetValueFormatExceptionTest
org.apache.jackrabbit.test.api.SetValueVersionExceptionTest
-org.apache.jackrabbit.test.api.SetPropertyBooleanTest
-org.apache.jackrabbit.test.api.SetPropertyCalendarTest
-org.apache.jackrabbit.test.api.SetPropertyDecimalTest
-org.apache.jackrabbit.test.api.SetPropertyDoubleTest
-org.apache.jackrabbit.test.api.SetPropertyInputStreamTest
-org.apache.jackrabbit.test.api.SetPropertyLongTest
org.apache.jackrabbit.test.api.SetPropertyNodeTest
org.apache.jackrabbit.test.api.SetPropertyNodeTest
org.apache.jackrabbit.test.api.SetPropertyStringTest
Modified: jackrabbit/oak/trunk/oak-it/jcr/src/test/resources/repositoryStubImpl.properties
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/jcr/src/test/resources/repositoryStubImpl.properties?rev=1330884&r1=1330883&r2=1330884&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-it/jcr/src/test/resources/repositoryStubImpl.properties (original)
+++ jackrabbit/oak/trunk/oak-it/jcr/src/test/resources/repositoryStubImpl.properties Thu Apr 26 14:44:24 2012
@@ -108,7 +108,7 @@ javax.jcr.tck.SetValueVersionExceptionTe
javax.jcr.tck.SetValueVersionExceptionTest.propertyname3=jcr:content
# Test class: SetValueValueFormatExceptionTest
-javax.jcr.tck.SetValueValueFormatExceptionTest.nodetype=test:canSetProperty
+javax.jcr.tck.SetValueValueFormatExceptionTest.nodetype=nt:unstructured
javax.jcr.tck.SetValueValueFormatExceptionTest.testValue.propertyname1=Boolean
javax.jcr.tck.SetValueValueFormatExceptionTest.testValueArray.propertyname1=BooleanMultiple
javax.jcr.tck.SetValueValueFormatExceptionTest.testString.propertyname1=Date
@@ -122,7 +122,7 @@ javax.jcr.tck.SetValueValueFormatExcepti
javax.jcr.tck.SetValueValueFormatExceptionTest.testNodeNotReferenceable.propertyname1=ReferenceConstraints
# Test class: SetPropertyAssumeTypeTest
-javax.jcr.tck.SetPropertyAssumeTypeTest.nodetype=test:canSetProperty
+javax.jcr.tck.SetPropertyAssumeTypeTest.nodetype=nt:unstructured
javax.jcr.tck.SetPropertyAssumeTypeTest.testStringConstraintViolationExceptionBecauseOfInvalidTypeParameter.propertyname1=String
javax.jcr.tck.SetPropertyAssumeTypeTest.testValueConstraintViolationExceptionBecauseOfInvalidTypeParameter.propertyname1=String
javax.jcr.tck.SetPropertyAssumeTypeTest.testValuesConstraintViolationExceptionBecauseOfInvalidTypeParameter.propertyname1=StringMultiple
@@ -233,17 +233,17 @@ javax.jcr.tck.NodeOrderableChildNodesTes
# Test class: SetPropertyNodeTest
# nodetype which is referenceable
-javax.jcr.tck.SetPropertyNodeTest.nodetype=test:setProperty
+javax.jcr.tck.SetPropertyNodeTest.nodetype=nt:unstructured
# Test class: SetPropertyValueTest
# property that allows multiple values
javax.jcr.tck.SetPropertyValueTest.propertyname2=test:multiProperty
-javax.jcr.tck.SetPropertyValueTest.nodetype=test:setProperty
+javax.jcr.tck.SetPropertyValueTest.nodetype=nt:unstructured
# Test class: SetPropertyStringTest
# property that allows multiple values
javax.jcr.tck.SetPropertyStringTest.propertyname2=test:multiProperty
-javax.jcr.tck.SetPropertyStringTest.nodetype=test:setProperty
+javax.jcr.tck.SetPropertyStringTest.nodetype=nt:unstructured
# Test class: WorkspaceCloneSameNameSibsTest
javax.jcr.tck.WorkspaceCloneSameNameSibsTest.sameNameSibsFalseNodeType=test:sameNameSibsFalseChildNodeDefinition
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=1330884&r1=1330883&r2=1330884&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 Thu Apr 26 14:44:24 2012
@@ -191,11 +191,15 @@ public class NodeImpl extends ItemImpl i
checkStatus();
int targetType = getTargetType(value, type);
- Value targetValue = ValueHelper.convert(value, targetType,
- getValueFactory());
- CoreValue oakValue = ValueConverter.toCoreValue(targetValue,
- sessionContext);
- return new PropertyImpl(dlg.setProperty(toOakPath(jcrName), oakValue));
+ Value targetValue = ValueHelper.convert(value, targetType, getValueFactory());
+ if (value == null) {
+ Property p = getProperty(jcrName);
+ p.remove();
+ return p;
+ } else {
+ CoreValue oakValue = ValueConverter.toCoreValue(targetValue, sessionContext);
+ return new PropertyImpl(dlg.setProperty(toOakPath(jcrName), oakValue));
+ }
}
/**
@@ -213,16 +217,19 @@ public class NodeImpl extends ItemImpl i
}
@Override
- public Property setProperty(String jcrName, Value[] values, int type)
- throws RepositoryException {
+ public Property setProperty(String jcrName, Value[] values, int type) throws RepositoryException {
checkStatus();
int targetType = getTargetType(values, type);
- Value[] targetValue = ValueHelper.convert(values, targetType,
- getValueFactory());
- List<CoreValue> oakValue = ValueConverter.toCoreValues(targetValue,
- sessionContext);
- return new PropertyImpl(dlg.setProperty(toOakPath(jcrName), oakValue));
+ Value[] targetValues = ValueHelper.convert(values, targetType, getValueFactory());
+ if (targetValues == null) {
+ Property p = getProperty(jcrName);
+ p.remove();
+ return p;
+ } else {
+ List<CoreValue> oakValue = ValueConverter.toCoreValues(targetValues, sessionContext);
+ return new PropertyImpl(dlg.setProperty(toOakPath(jcrName), oakValue));
+ }
}
/**
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=1330884&r1=1330883&r2=1330884&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 Thu Apr 26 14:44:24 2012
@@ -18,7 +18,9 @@ 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.List;
import javax.jcr.Binary;
import javax.jcr.Item;
@@ -188,16 +190,17 @@ public class PropertyImpl extends ItemIm
checkStatus();
int reqType = getRequiredType(PropertyType.STRING);
- Value[] vs;
if (values == null) {
- vs = null;
+ setValues(null, reqType);
} else {
- vs = new Value[values.length];
- for (int i = 0; i < values.length; i++) {
- vs[i] = getValueFactory().createValue(values[i]);
+ List<Value> vs = new ArrayList<Value>(values.length);
+ for (String value : values) {
+ if (value != null) {
+ vs.add(getValueFactory().createValue(value));
+ }
}
+ setValues(vs.toArray(new Value[vs.size()]), reqType);
}
- setValues(vs, reqType);
}
/**
@@ -261,7 +264,11 @@ public class PropertyImpl extends ItemIm
checkStatus();
int reqType = getRequiredType(PropertyType.DECIMAL);
- setValue(getValueFactory().createValue(value), reqType);
+ if (value == null) {
+ setValue(null, reqType);
+ } else {
+ setValue(getValueFactory().createValue(value), reqType);
+ }
}
/**
@@ -544,9 +551,12 @@ public class PropertyImpl extends ItemIm
* @throws RepositoryException
*/
private void setValue(Value value, int requiredType) throws RepositoryException {
-
assert(requiredType != PropertyType.UNDEFINED);
-
+
+ // TODO check again if definition validation should be respected here.
+ if (isMultiple()) {
+ throw new ValueFormatException("Attempt to set a single value to multi-valued property.");
+ }
if (value == null) {
dlg.remove();
} else {
@@ -562,9 +572,12 @@ public class PropertyImpl extends ItemIm
* @throws RepositoryException
*/
private void setValues(Value[] values, int requiredType) throws RepositoryException {
-
assert(requiredType != PropertyType.UNDEFINED);
+ // TODO check again if definition validation should be respected here.
+ if (!isMultiple()) {
+ throw new ValueFormatException("Attempt to set multiple values to single valued property.");
+ }
if (values == null) {
remove();
} else {