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 2015/12/22 13:27:45 UTC
svn commit: r1721385 - in /sling/trunk/bundles/api/src:
main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java
test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java
Author: rombert
Date: Tue Dec 22 12:27:45 2015
New Revision: 1721385
URL: http://svn.apache.org/viewvc?rev=1721385&view=rev
Log:
SLING-4658 - ValueMapDecorator should support conversion from array to single value type
Applied pull request by Mikołaj Mański, thanks for the contribution.
This closes #114
Modified:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java
sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java
Modified: sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java?rev=1721385&r1=1721384&r2=1721385&view=diff
==============================================================================
--- sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java (original)
+++ sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java Tue Dec 22 12:27:45 2015
@@ -71,15 +71,15 @@ public class ValueMapDecorator implement
} else if (type.isArray()) {
return (T) convertToArray(obj, type.getComponentType());
} else if (type == String.class) {
- return (T) String.valueOf(obj);
+ return (T) String.valueOf(getSingleValue(obj));
} else if (type == Integer.class) {
- return (T) (Integer) Integer.parseInt(obj.toString());
+ return (T) (Integer) Integer.parseInt(getSingleValue(obj));
} else if (type == Long.class) {
- return (T) (Long) Long.parseLong(obj.toString());
+ return (T) (Long) Long.parseLong(getSingleValue(obj));
} else if (type == Double.class) {
- return (T) (Double) Double.parseDouble(obj.toString());
+ return (T) (Double) Double.parseDouble(getSingleValue(obj));
} else if (type == Boolean.class) {
- return (T) (Boolean) Boolean.parseBoolean(obj.toString());
+ return (T) (Boolean) Boolean.parseBoolean(getSingleValue(obj));
} else {
return null;
}
@@ -89,6 +89,25 @@ public class ValueMapDecorator implement
}
/**
+ * Gets a single value of String from the object. If the object is an array it returns it's first element.
+ * @param obj object or object array.
+ * @return result of <code>toString()</code> on object or first element of an object array. If @param obj is null
+ * or it's an array with first element that is null, then null is returned.
+ */
+ private String getSingleValue(Object obj) {
+ final String result;
+ if (obj == null) {
+ result = null;
+ } else if (obj.getClass().isArray()) {
+ final Object[] values = (Object[]) obj;
+ result = values[0] != null ? values[0].toString() : null;
+ } else {
+ result = obj.toString();
+ }
+ return result;
+ }
+
+ /**
* Converts the object to an array of the given type
* @param obj the object or object array
* @param type the component type of the array
@@ -237,6 +256,6 @@ public class ValueMapDecorator implement
public boolean equals(Object obj) {
return base.equals(obj);
}
-
-
+
+
}
\ No newline at end of file
Modified: sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java?rev=1721385&r1=1721384&r2=1721385&view=diff
==============================================================================
--- sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java (original)
+++ sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java Tue Dec 22 12:27:45 2015
@@ -71,14 +71,13 @@ public class ValueMapDecoratorTest {
}
@Test
- @Ignore("SLING-4658")
public void testGettingSingleValuesFromMultiValueEntries() {
map.put("prop1", new String[] { "test", "test2" });
map.put("prop2", new String[] { "1", "2" });
Assert.assertEquals("First element from underlying array should be returned", "test",
valueMap.get("prop1", String.class));
Assert.assertEquals("First element from underlying array should be returned", Integer.valueOf(1),
- valueMap.get("prop1", Integer.class));
+ valueMap.get("prop2", Integer.class));
}
@Test