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


Reply via email to