You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2014/10/01 22:38:50 UTC

svn commit: r1628832 - in /sling/trunk/tooling/ide: impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/ impl-vlt/src/org/apache/sling/ide/impl/vlt/serial...

Author: rombert
Date: Wed Oct  1 20:38:50 2014
New Revision: 1628832

URL: http://svn.apache.org/r1628832
Log:
SLING-3979 - [tooling] multi valued properties are still not correctly
exported to the server

If a property is marked explicitly as multi-value, preserve that
information even if it only has one value.

Added:
    sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/single-explicit-multivalued-properties-content.xml
Modified:
    sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java
    sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java

Modified: sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java?rev=1628832&r1=1628831&r2=1628832&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java (original)
+++ sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandlerTest.java Wed Oct  1 20:38:50 2014
@@ -102,6 +102,29 @@ public class ContentXmlHandlerTest {
     }
 
     @Test
+    @SuppressWarnings("unchecked")
+    public void parseSingleExplicitMultiValuedProperties() throws ParserConfigurationException, SAXException,
+            IOException {
+
+        Map<String, Object> properties = parseContentXmlFile("single-explicit-multivalued-properties-content.xml", "/")
+                .getProperties();
+
+        assertThat("properties.size", properties.size(), is(7));
+        assertThat("properties[values]", (String[]) properties.get("values"),
+                Matchers.is(new String[] { "first"}));
+        assertThat("properties[decimals]", (BigDecimal[]) properties.get("decimals"),
+                Matchers.is(new BigDecimal[] { new BigDecimal("5.10")}));
+        assertThat("properties[doubles]", (Double[]) properties.get("doubles"),
+                Matchers.is(new Double[] { new Double("5.1") }));
+        assertThat("properties[flags]", (Boolean[]) properties.get("flags"),
+                Matchers.is(new Boolean[] { Boolean.FALSE }));
+        assertThat("properties[longs]", (Long[]) properties.get("longs"),
+                Matchers.is(new Long[] { Long.valueOf(15)}));
+        assertThat("properties[dates]", (Calendar[]) properties.get("dates"),
+                array(millis(1377982800000l)));
+    }
+
+    @Test
     public void parseFullCoverageXmlFile() throws ParserConfigurationException, SAXException, IOException {
 
         ResourceProxy root = parseContentXmlFile("full-coverage.xml", "/apps/full-coverage");

Added: sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/single-explicit-multivalued-properties-content.xml
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/single-explicit-multivalued-properties-content.xml?rev=1628832&view=auto
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/single-explicit-multivalued-properties-content.xml (added)
+++ sling/trunk/tooling/ide/impl-vlt-test/src/test/resources/org/apache/sling/ide/impl/vlt/serialization/single-explicit-multivalued-properties-content.xml Wed Oct  1 20:38:50 2014
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
+    jcr:primaryType="nt:unstructured"
+    dates="{Date}[2013-09-01T00:00:00.000+03:00]"
+    decimals="{Decimal}[5.10]"
+    doubles="{Double}[5.1]"
+    flags="{Boolean}[false]"
+    longs="{Long}[15]"
+    values="[first]"/>
\ No newline at end of file

Modified: sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java?rev=1628832&r1=1628831&r2=1628832&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java (original)
+++ sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/serialization/ContentXmlHandler.java Wed Oct  1 20:38:50 2014
@@ -91,14 +91,14 @@ public class ContentXmlHandler extends D
     static enum TypeHint {
         BINARY("Binary") {
             @Override
-            Object parseValues(String[] values) {
+            Object parseValues(String[] values, boolean explicitMultiValue) {
                 return null;
             }
         },
         BOOLEAN("Boolean") {
             @Override
-            Object parseValues(String[] values) {
-                if (values.length == 1) {
+            Object parseValues(String[] values, boolean explicitMultiValue) {
+                if (values.length == 1 && !explicitMultiValue) {
                     return Boolean.valueOf(values[0]);
                 }
 
@@ -112,9 +112,9 @@ public class ContentXmlHandler extends D
         },
         DATE("Date") {
             @Override
-            Object parseValues(String[] values) {
+            Object parseValues(String[] values, boolean explicitMultiValue) {
 
-                if (values.length == 1) {
+                if (values.length == 1 && !explicitMultiValue) {
                     return ISO8601.parse(values[0]);
                 }
 
@@ -127,8 +127,8 @@ public class ContentXmlHandler extends D
         },
         DOUBLE("Double") {
             @Override
-            Object parseValues(String[] values) {
-                if (values.length == 1) {
+            Object parseValues(String[] values, boolean explicitMultiValue) {
+                if (values.length == 1 && !explicitMultiValue) {
                     return Double.parseDouble(values[0]);
                 }
 
@@ -141,8 +141,8 @@ public class ContentXmlHandler extends D
         },
         LONG("Long") {
             @Override
-            Object parseValues(String[] values) {
-                if ( values.length == 1 ) {
+            Object parseValues(String[] values, boolean explicitMultiValue) {
+                if (values.length == 1 && !explicitMultiValue) {
                     return Long.valueOf(values[0]);
                 }
                 
@@ -155,8 +155,8 @@ public class ContentXmlHandler extends D
         },
         DECIMAL("Decimal") {
             @Override
-            Object parseValues(String[] values) {
-                if ( values.length == 1) {
+            Object parseValues(String[] values, boolean explicitMultiValue) {
+                if (values.length == 1 && !explicitMultiValue) {
                     return new BigDecimal(values[0]);
                 }
                 
@@ -168,29 +168,23 @@ public class ContentXmlHandler extends D
             }
         },
         NAME("Name") {
-
             @Override
-            Object parseValues(String[] values) {
-                if (values.length == 1) {
-                    return values[0];
-                }
-
+            Object parseValues(String[] values, boolean explicitMultiValue) {
                 return values;
             }
         },
         PATH("Path") {
 
             @Override
-            Object parseValues(String[] values) {
-                return NAME.parseValues(values);
+            Object parseValues(String[] values, boolean explicitMultiValue) {
+                return NAME.parseValues(values, explicitMultiValue);
             }
 
         },
         REFERENCE("Reference") {
-
             @Override
-            Object parseValues(String[] values) {
-                if (values.length == 1) {
+            Object parseValues(String[] values, boolean explicitMultiValue) {
+                if (values.length == 1 && !explicitMultiValue) {
                     return UUID.fromString(values[0]);
                 }
 
@@ -205,16 +199,16 @@ public class ContentXmlHandler extends D
 
         },
         WEAKREFERENCE("WeakReference") {
-
             @Override
-            Object parseValues(String[] values) {
-                return REFERENCE.parseValues(values);
+            Object parseValues(String[] values, boolean explicitMultiValue) {
+                return REFERENCE.parseValues(values, explicitMultiValue);
             }
 
         };
 
         static Object parsePossiblyTypedValue(String value) {
 
+            boolean explicitMultiValue = false;
             String rawValue;
             int hintEnd = -1;
             
@@ -240,12 +234,13 @@ public class ContentXmlHandler extends D
 
                 String rawValues = rawValue.substring(1, rawValue.length() - 1);
                 values = rawValues.split(",");
+                explicitMultiValue = true;
             } else {
                 values = new String[] { rawValue };
             }
 
             if (hintEnd == -1) {
-                if (values.length == 1) {
+                if (values.length == 1 && !explicitMultiValue) {
                     return values[0];
                 }
                 return values;
@@ -255,7 +250,7 @@ public class ContentXmlHandler extends D
 
             for (TypeHint hint : EnumSet.allOf(TypeHint.class)) {
                 if (hint.rawHint.equals(rawHint)) {
-                    return hint.parseValues(values);
+                    return hint.parseValues(values, explicitMultiValue);
                 }
             }
 
@@ -269,7 +264,7 @@ public class ContentXmlHandler extends D
             this.rawHint = rawHint;
         }
 
-        abstract Object parseValues(String[] values);
+        abstract Object parseValues(String[] values, boolean explicitMultiValue);
 
     }
 }