Author: reschke
Date: Wed Aug 22 16:42:00 2012
New Revision: 1376134

URL: http://svn.apache.org/viewvc?rev=1376134&view=rev
Log:
OAK-273: reject attempts to replace single-valued props by multi-valued props 
and vice versa

Modified:
    jackrabbit/oak/trunk/oak-jcr/pom.xml
    
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeDelegate.java

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1376134&r1=1376133&r2=1376134&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Wed Aug 22 16:42:00 2012
@@ -53,10 +53,6 @@ org.apache.jackrabbit.test.api.NodeOrder
 
org.apache.jackrabbit.test.api.NodeOrderableChildNodesTest#testOrderBeforePlaceAtEndSessionSave<!--OAK-169-->
 org.apache.jackrabbit.test.api.SetValueValueFormatExceptionTest
 org.apache.jackrabbit.test.api.SetValueFormatExceptionTest
-org.apache.jackrabbit.test.api.SetPropertyStringTest#testSetSingleStringArrayValueFormatException<!--OAK-273-->
-org.apache.jackrabbit.test.api.SetPropertyStringTest#testSetSingleStringArrayValueFormatExceptionWithPropertyType<!--OAK-273-->
-org.apache.jackrabbit.test.api.SetPropertyValueTest#testSetSingleValueArrayValueFormatException<!--OAK-273-->
-org.apache.jackrabbit.test.api.SetPropertyValueTest#testSetSingleValueArrayValueFormatExceptionWithPropertyType<!--OAK-273-->
 org.apache.jackrabbit.test.api.SetPropertyAssumeTypeTest
 org.apache.jackrabbit.test.api.NodeAddMixinTest#testAddInheritedMixin
 
org.apache.jackrabbit.test.api.ValueFactoryTest#testValueFormatException<!--OAK-204-->

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=1376134&r1=1376133&r2=1376134&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 Aug 22 16:42:00 2012
@@ -29,6 +29,7 @@ import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.jcr.InvalidItemStateException;
 import javax.jcr.ItemNotFoundException;
+import javax.jcr.ValueFormatException;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
@@ -278,7 +279,11 @@ public class NodeDelegate extends ItemDe
      * @return  the set property
      */
     @Nonnull
-    public PropertyDelegate setProperty(String name, CoreValue value) throws 
InvalidItemStateException {
+    public PropertyDelegate setProperty(String name, CoreValue value) throws 
InvalidItemStateException, ValueFormatException {
+        PropertyState old = getTree().getProperty(name);
+        if (old != null && old.isArray()) {
+            throw new ValueFormatException("Attempt to set a single value to 
multi-valued property.");
+        }
         PropertyState propertyState = getTree().setProperty(name, value);
         return new PropertyDelegate(sessionDelegate, getTree(), propertyState);
     }
@@ -294,7 +299,11 @@ public class NodeDelegate extends ItemDe
      * @return  the set property
      */
     @Nonnull
-    public PropertyDelegate setProperty(String name, List<CoreValue> value) 
throws InvalidItemStateException {
+    public PropertyDelegate setProperty(String name, List<CoreValue> value) 
throws InvalidItemStateException, ValueFormatException {
+        PropertyState old = getTree().getProperty(name);
+        if (old != null && ! old.isArray()) {
+            throw new ValueFormatException("Attempt to set multiple values to 
single valued property.");
+        }
         PropertyState propertyState = getTree().setProperty(name, value);
         return new PropertyDelegate(sessionDelegate, getTree(), propertyState);
     }


Reply via email to