You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2017/03/23 16:07:08 UTC

svn commit: r1788274 - in /felix/trunk/converter/converter/src: main/java/org/apache/felix/converter/impl/ConvertingImpl.java test/java/org/apache/felix/converter/impl/ConverterMapTest.java

Author: davidb
Date: Thu Mar 23 16:07:08 2017
New Revision: 1788274

URL: http://svn.apache.org/viewvc?rev=1788274&view=rev
Log:
Felix Converter - support case-insensitive keys.

Modified:
    felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java
    felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterMapTest.java

Modified: felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java?rev=1788274&r1=1788273&r2=1788274&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java Thu Mar 23 16:07:08 2017
@@ -484,6 +484,15 @@ public class ConvertingImpl implements C
                     Class<?> targetType = method.getReturnType();
 
                     Object val = m.get(propName);
+                    if (val == null && keysIgnoreCase) {
+                        // try in a case-insensitive way
+                        for (Iterator it = m.keySet().iterator(); it.hasNext() && val == null; ) {
+                            String k = it.next().toString();
+                            if (propName.equalsIgnoreCase(k)) {
+                                val = m.get(k);
+                            }
+                        }
+                    }
 
                     // If no value is available take the default if specified
                     if (val == null) {

Modified: felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterMapTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterMapTest.java?rev=1788274&r1=1788273&r2=1788274&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterMapTest.java (original)
+++ felix/trunk/converter/converter/src/test/java/org/apache/felix/converter/impl/ConverterMapTest.java Thu Mar 23 16:07:08 2017
@@ -321,6 +321,37 @@ public class ConverterMapTest {
         assertTrue(ta.equals(ta));
     }
 
+    @Test
+    public void testCaseInsensitiveKeysAnnotation() {
+        Map<String, Object> m = new HashMap<>();
+        m.put("FOO", "Bleh");
+        m.put("baR", 21);
+        m.put("za.za", true);
+
+        TestInterface ti = converter.convert(m).keysIgnoreCase().to(TestInterface.class);
+        assertEquals("Bleh", ti.foo());
+        assertEquals(21, ti.bar("42"));
+        assertTrue(ti.za_za());
+    }
+
+    @Test
+    public void testCaseSensitiveKeysAnnotation() {
+        Map<String, Object> m = new HashMap<>();
+        m.put("FOO", "Bleh");
+        m.put("baR", 21);
+        m.put("za.za", true);
+
+        TestInterface ti = converter.convert(m).to(TestInterface.class);
+        try {
+            ti.foo();
+            fail("Should have thrown a conversion exception as 'foo' was not set");
+        } catch (ConversionException ce) {
+            // good
+        }
+        assertEquals(42, ti.bar("42"));
+        assertTrue(ti.za_za());
+    }
+
     interface TestInterface {
         String foo();
         int bar();