You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2009/06/01 20:32:58 UTC

svn commit: r780768 - in /incubator/sling/trunk/bundles/api/src: main/java/org/apache/sling/api/resource/ResourceUtil.java test/java/org/apache/sling/api/resource/ResourceUtilTest.java

Author: fmeschbe
Date: Mon Jun  1 18:32:58 2009
New Revision: 780768

URL: http://svn.apache.org/viewvc?rev=780768&view=rev
Log:
SLING-988 return a modifiable empty value map if the resource is
null or does not adapt to either ValueMap or Map and added more
unit tests

Modified:
    incubator/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceUtil.java
    incubator/sling/trunk/bundles/api/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java

Modified: incubator/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceUtil.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceUtil.java?rev=780768&r1=780767&r2=780768&view=diff
==============================================================================
--- incubator/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceUtil.java (original)
+++ incubator/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceUtil.java Mon Jun  1 18:32:58 2009
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.api.resource;
 
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
@@ -287,17 +288,24 @@
      */
     @SuppressWarnings("unchecked")
     public static ValueMap getValueMap(final Resource res) {
-        ValueMap map = (res == null)
-                ? ValueMap.EMPTY
-                : res.adaptTo(ValueMap.class);
-        if (map == null) {
-            Map m = res.adaptTo(Map.class);
-            if (m != null) {
-                map = new ValueMapDecorator(m);
-            } else {
-                map = ValueMap.EMPTY;
+        // adapt to ValueMap if resource is not null
+        ValueMap valueMap = (res != null)?
+            res.adaptTo(ValueMap.class) : null;
+        
+        // if no resource or no ValueMap adapter, check Map
+        if (valueMap == null) {
+            
+            Map map = (res != null) ? res.adaptTo(Map.class) : null;
+
+            // if not even adapting to map, assume an empty map
+            if (map == null) {
+                map = new HashMap<String, Object>();
             }
+            
+            // .. and decorate the plain map
+            valueMap = new ValueMapDecorator(map);
         }
-        return map;
+        
+        return valueMap;
     }
 }

Modified: incubator/sling/trunk/bundles/api/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/api/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java?rev=780768&r1=780767&r2=780768&view=diff
==============================================================================
--- incubator/sling/trunk/bundles/api/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java (original)
+++ incubator/sling/trunk/bundles/api/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java Mon Jun  1 18:32:58 2009
@@ -18,8 +18,13 @@
  */
 package org.apache.sling.api.resource;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import junit.framework.TestCase;
 
+import org.apache.sling.api.wrappers.ValueMapDecorator;
+
 public class ResourceUtilTest extends TestCase {
 
     public void testResolveRelativeSegments() {
@@ -147,11 +152,81 @@
         assertEquals("b", ResourceUtil.getName("/b/c/.."));
         assertEquals("", ResourceUtil.getName("/b/c/../.."));
     }
+    
+    public void test_getValueMap_null_resource() {
+        final ValueMap valueMap = ResourceUtil.getValueMap(null);
+        assertNotNull(valueMap);
+        assertEquals(0, valueMap.size());
+        
+        final Object replaced = valueMap.put("sample", 1);
+        assertNull(replaced);
+        
+        assertEquals(1, valueMap.size());
+        assertEquals(1, valueMap.get("sample"));
+        assertEquals(Integer.valueOf(1), valueMap.get("sample", Integer.class));
+        assertEquals("1", valueMap.get("sample", String.class));
+    }
+    
+    public void test_getValueMap_direct() {
+        final ValueMap valueMap = new ValueMapDecorator(new HashMap<String, Object>());
+        valueMap.put("sample", true);
+        final Resource resource = new SyntheticResource(null, "/", "sample") {
+            @Override
+            @SuppressWarnings("unchecked")
+            public <Type> Type adaptTo(Class<Type> type) {
+                if (type == ValueMap.class) {
+                    return (Type) valueMap;
+                }
+                
+                return super.adaptTo(type);
+            }
+        };
+        
+        final ValueMap adapted = ResourceUtil.getValueMap(resource);
+        assertEquals(valueMap, adapted);
+        assertNotNull(adapted);
+        assertEquals(1, adapted.size());
+
+        assertEquals(true, adapted.get("sample"));
+        assertEquals(Boolean.valueOf(true), adapted.get("sample", Boolean.class));
+        assertEquals(Boolean.TRUE.toString(), adapted.get("sample", String.class));
+    }
+    
+    public void test_getValueMap_decorated_map() {
+        final Map<String, Object> map = new HashMap<String, Object>();
+        map.put("sample", true);
+        final Resource resource = new SyntheticResource(null, "/", "sample") {
+            @Override
+            @SuppressWarnings("unchecked")
+            public <Type> Type adaptTo(Class<Type> type) {
+                if (type == Map.class) {
+                    return (Type) map;
+                }
+                
+                return super.adaptTo(type);
+            }
+        };
+        
+        final ValueMap adapted = ResourceUtil.getValueMap(resource);
+        assertNotNull(adapted);
+        assertEquals(1, adapted.size());
+
+        assertEquals(true, adapted.get("sample"));
+        assertEquals(Boolean.valueOf(true), adapted.get("sample", Boolean.class));
+        assertEquals(Boolean.TRUE.toString(), adapted.get("sample", String.class));
+    }
 
-    public void testGetValueMap() {
-        // expect an empty ValueMap 
-        ValueMap valueMap = ResourceUtil.getValueMap(null);
+    public void test_getValueMap_no_adapter() {
+        final ValueMap valueMap = ResourceUtil.getValueMap(null);
         assertNotNull(valueMap);
         assertEquals(0, valueMap.size());
+        
+        final Object replaced = valueMap.put("sample", 1);
+        assertNull(replaced);
+        
+        assertEquals(1, valueMap.size());
+        assertEquals(1, valueMap.get("sample"));
+        assertEquals(Integer.valueOf(1), valueMap.get("sample", Integer.class));
+        assertEquals("1", valueMap.get("sample", String.class));
     }
 }