You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2016/12/20 21:02:16 UTC

svn commit: r1775354 - 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: sseifert
Date: Tue Dec 20 21:02:16 2016
New Revision: 1775354

URL: http://svn.apache.org/viewvc?rev=1775354&view=rev
Log:
SLING-6421 ValueMapDecorator should use typed methods when decorating ValueMaps

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=1775354&r1=1775353&r2=1775354&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 20 21:02:16 2016
@@ -51,6 +51,10 @@ public class ValueMapDecorator implement
      * {@inheritDoc}
      */
     public <T> T get(String name, Class<T> type) {
+        if (base instanceof ValueMap) {
+            // shortcut if decorated map is ValueMap
+            return ((ValueMap)base).get(name, type);
+        }
         return convert(get(name), type);
     }
 
@@ -145,7 +149,11 @@ public class ValueMapDecorator implement
      */
     @SuppressWarnings("unchecked")
     public <T> T get(String name, T defaultValue) {
-        if ( defaultValue == null ) {
+        if (base instanceof ValueMap) {
+            // shortcut if decorated map is ValueMap
+            return ((ValueMap)base).get(name, defaultValue);
+        }
+        if (defaultValue == null) {
             return (T)get(name);
         }
         T value = get(name, (Class<T>) defaultValue.getClass());

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=1775354&r1=1775353&r2=1775354&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 20 21:02:16 2016
@@ -18,6 +18,10 @@
  */
 package org.apache.sling.api.wrappers;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -146,4 +150,17 @@ public class ValueMapDecoratorTest {
         Assert.assertFalse("Two ValueMapDecorators based on maps with different entries should not be equal",
                 valueMap.equals(valueMap2));
     }
+    
+    @Test
+    public void testDelegateToValueMap() {
+        ValueMap original = mock(ValueMap.class);
+        ValueMap decorated = new ValueMapDecorator(original);
+        
+        decorated.get("prop1", String.class);
+        verify(original, times(1)).get("prop1", String.class);
+
+        decorated.get("prop1", "defValue");
+        verify(original, times(1)).get("prop1", "defValue");
+    }
+    
 }