Author: sseifert Date: Mon Oct 13 09:47:50 2014 New Revision: 1631324 URL: http://svn.apache.org/r1631324 Log: SLING-4039 Support ISO8601 date string to Calendar conversion
Modified: sling/trunk/testing/resourceresolver-mock/pom.xml sling/trunk/testing/resourceresolver-mock/src/main/java/org/apache/sling/testing/resourceresolver/MockValueMap.java sling/trunk/testing/resourceresolver-mock/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java Modified: sling/trunk/testing/resourceresolver-mock/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/testing/resourceresolver-mock/pom.xml?rev=1631324&r1=1631323&r2=1631324&view=diff ============================================================================== --- sling/trunk/testing/resourceresolver-mock/pom.xml (original) +++ sling/trunk/testing/resourceresolver-mock/pom.xml Mon Oct 13 09:47:50 2014 @@ -73,6 +73,7 @@ <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> + <scope>provided</scope> </dependency> <dependency> <groupId>commons-io</groupId> @@ -80,6 +81,12 @@ <version>2.4</version> <scope>compile</scope> </dependency> + <dependency> + <groupId>org.apache.jackrabbit</groupId> + <artifactId>jackrabbit-jcr-commons</artifactId> + <version>2.5.3</version> + <scope>compile</scope> + </dependency> <dependency> <groupId>junit</groupId> Modified: sling/trunk/testing/resourceresolver-mock/src/main/java/org/apache/sling/testing/resourceresolver/MockValueMap.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/resourceresolver-mock/src/main/java/org/apache/sling/testing/resourceresolver/MockValueMap.java?rev=1631324&r1=1631323&r2=1631324&view=diff ============================================================================== --- sling/trunk/testing/resourceresolver-mock/src/main/java/org/apache/sling/testing/resourceresolver/MockValueMap.java (original) +++ sling/trunk/testing/resourceresolver-mock/src/main/java/org/apache/sling/testing/resourceresolver/MockValueMap.java Mon Oct 13 09:47:50 2014 @@ -27,6 +27,7 @@ import java.util.HashMap; import java.util.Map; import org.apache.commons.io.IOUtils; +import org.apache.jackrabbit.util.ISO8601; import org.apache.sling.api.wrappers.ValueMapDecorator; /** @@ -50,8 +51,16 @@ public class MockValueMap extends ValueM @SuppressWarnings("unchecked") @Override public <T> T get(String name, Class<T> type) { - if (type==Date.class) { - Calendar calendar = super.get(name, Calendar.class); + if (type == Calendar.class) { + // Support conversion of String to Calendar if value conforms to ISO8601 date format + Object value = get(name); + if (value instanceof String) { + return (T)ISO8601.parse((String)value); + } + } + else if (type == Date.class) { + // Support conversion from Calendar to Date + Calendar calendar = get(name, Calendar.class); if (calendar != null) { return (T)calendar.getTime(); } @@ -59,8 +68,9 @@ public class MockValueMap extends ValueM return null; } } - else if (type==InputStream.class) { - byte[] data = super.get(name, byte[].class); + else if (type == InputStream.class) { + // Support conversion from byte array to InputStream + byte[] data = get(name, byte[].class); if (data!=null) { return (T)new ByteArrayInputStream(data); } @@ -84,11 +94,13 @@ public class MockValueMap extends ValueM private static Object convertForWrite(Object value) { if (value instanceof Date) { + // Store Date values as Calendar values Calendar calendar = Calendar.getInstance(); calendar.setTime((Date)value); value = calendar; } else if (value instanceof InputStream) { + // Store InputStream values as byte array try { value = IOUtils.toByteArray((InputStream)value); } catch (IOException ex) { Modified: sling/trunk/testing/resourceresolver-mock/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/resourceresolver-mock/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java?rev=1631324&r1=1631323&r2=1631324&view=diff ============================================================================== --- sling/trunk/testing/resourceresolver-mock/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java (original) +++ sling/trunk/testing/resourceresolver-mock/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java Mon Oct 13 09:47:50 2014 @@ -30,7 +30,9 @@ import java.util.Date; import java.util.List; import org.apache.commons.io.IOUtils; +import org.apache.jackrabbit.util.ISO8601; import org.apache.sling.api.resource.LoginException; +import org.apache.sling.api.resource.ModifiableValueMap; import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; @@ -135,6 +137,18 @@ public class SlingCrudResourceResolverTe } @Test + public void testStringToCalendarConversion() throws IOException { + Resource resource1 = resourceResolver.getResource(testRoot.getPath() + "/node1"); + ModifiableValueMap modProps = resource1.adaptTo(ModifiableValueMap.class); + modProps.put("dateISO8601String", ISO8601.format(CALENDAR_VALUE)); + resourceResolver.commit(); + + resource1 = resourceResolver.getResource(testRoot.getPath() + "/node1"); + ValueMap props = ResourceUtil.getValueMap(resource1); + assertEquals(CALENDAR_VALUE.getTime(), props.get("calendarProp", Calendar.class).getTime()); + } + + @Test public void testListChildren() throws IOException { Resource resource1 = resourceResolver.getResource(testRoot.getPath() + "/node1");