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); } }