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:43:10 UTC

svn commit: r1788285 - 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:43:09 2017
New Revision: 1788285

URL: http://svn.apache.org/viewvc?rev=1788285&view=rev
Log:
Felix Converter - support case insensistive DTO conversions

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=1788285&r1=1788284&r2=1788285&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:43:09 2017
@@ -309,14 +309,40 @@ public class ConvertingImpl implements C
             T dto = (T) targetClass.newInstance();
 
             for (Map.Entry entry : (Set<Map.Entry>) m.entrySet()) {
+                Object key = entry.getKey();
+                if (key == null)
+                    continue;
+
+                String fieldName = Util.mangleName(prefix, key.toString());
+                if (fieldName == null)
+                    continue;
+
                 Field f = null;
                 try {
-                    f = cls.getDeclaredField(Util.mangleName(prefix, entry.getKey().toString()));
-                } catch (NoSuchFieldException | NullPointerException e) {
+                    f = cls.getDeclaredField(fieldName);
+                } catch (NoSuchFieldException e) {
                     try {
-                        f = cls.getField(Util.mangleName(prefix, entry.getKey().toString()));
+                        f = cls.getField(fieldName);
                     } catch (NoSuchFieldException | NullPointerException e1) {
                         // There is no field with this name
+                        if (keysIgnoreCase) {
+                            // If enabled, try again but now ignore case
+                            for (Field fs : cls.getDeclaredFields()) {
+                                if (fs.getName().equalsIgnoreCase(fieldName)) {
+                                    f = fs;
+                                    break;
+                                }
+                            }
+
+                            if (f == null) {
+                                for (Field fs : cls.getFields()) {
+                                    if (fs.getName().equalsIgnoreCase(fieldName)) {
+                                        f = fs;
+                                        break;
+                                    }
+                                }
+                            }
+                        }
                     }
                 }
 

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=1788285&r1=1788284&r2=1788285&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:43:09 2017
@@ -24,6 +24,7 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.Dictionary;
 import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.Map;
 
 import org.junit.After;
@@ -352,6 +353,32 @@ public class ConverterMapTest {
         assertTrue(ti.za_za());
     }
 
+    @Test
+    public void testCaseInsensitiveDTO() {
+        Dictionary<String, String> d = new Hashtable<>();
+        d.put("COUNT", "one");
+        d.put("PinG", "Piiiiiiing!");
+        d.put("pong", "999");
+
+        MyDTO dto = converter.convert(d).keysIgnoreCase().to(MyDTO.class);
+        assertEquals(MyDTO.Count.ONE, dto.count);
+        assertEquals("Piiiiiiing!", dto.ping);
+        assertEquals(999L, dto.pong);
+    }
+
+    @Test
+    public void testCaseSensitiveDTO() {
+        Dictionary<String, String> d = new Hashtable<>();
+        d.put("COUNT", "one");
+        d.put("PinG", "Piiiiiiing!");
+        d.put("pong", "999");
+
+        MyDTO dto = converter.convert(d).to(MyDTO.class);
+        assertNull(dto.count);
+        assertNull(dto.ping);
+        assertEquals(999L, dto.pong);
+    }
+
     interface TestInterface {
         String foo();
         int bar();