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/11/17 15:50:20 UTC

svn commit: r1815574 - in /felix/trunk/converter/converter/src: main/java/org/osgi/util/converter/ test/java/org/osgi/util/converter/

Author: davidb
Date: Fri Nov 17 15:50:19 2017
New Revision: 1815574

URL: http://svn.apache.org/viewvc?rev=1815574&view=rev
Log:
Converter fixes needed to pass the OSGi Converter CT.

Modified:
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
    felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/DTOUtil.java
    felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterMapTest.java
    felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java?rev=1815574&r1=1815573&r2=1815574&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java Fri Nov 17 15:50:19 2017
@@ -168,6 +168,8 @@ class ConvertingImpl extends AbstractSpe
         // At this point we know that the target is a 'singular' type: not a map, collection or array
         if (Collection.class.isAssignableFrom(sourceClass)) {
             return convertCollectionToSingleValue(targetAsClass);
+        } else if (isMapType(sourceClass, sourceAsJavaBean)) {
+                return convertMapToSingleValue(targetAsClass);
         } else if (object instanceof Map.Entry) {
             return convertMapEntryToSingleValue(targetAsClass);
         } else if ((object = asBoxedArray(object)) instanceof Object[]) {
@@ -185,7 +187,7 @@ class ConvertingImpl extends AbstractSpe
         }
     }
 
-    private Object convertArrayToSingleValue(Class<?> cls) {
+    private Object convertArrayToSingleValue(Class< ? > cls) {
         Object[] arr = (Object[]) object;
         if (arr.length == 0)
             return null;
@@ -201,6 +203,15 @@ class ConvertingImpl extends AbstractSpe
             return converter.convert(coll.iterator().next()).to(cls);
     }
 
+    private Object convertMapToSingleValue(Class< ? > cls) {
+        Map< ? , ? > m = mapView(object, sourceClass, converter);
+        if (m.size() > 0) {
+            return converter.convert(m.entrySet().iterator().next()).to(cls);
+        } else {
+            return null;
+        }
+    }
+
     @SuppressWarnings("rawtypes")
     private Object convertMapEntryToSingleValue(Class<?> cls) {
         Map.Entry entry = (Map.Entry) object;

Modified: felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/DTOUtil.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/DTOUtil.java?rev=1815574&r1=1815573&r2=1815574&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/DTOUtil.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/osgi/util/converter/DTOUtil.java Fri Nov 17 15:50:19 2017
@@ -20,12 +20,15 @@ import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 
+/**
+ * @author $Id: 10c7e7fc24b4365c3e536ed781683fd2327c167c $
+ */
 class DTOUtil {
     private DTOUtil() {
         // Do not instantiate. This is a utility class.
     }
 
-    public static boolean isDTOType(Class<?> cls) {
+	static boolean isDTOType(Class< ? > cls) {
         try {
             cls.getDeclaredConstructor();
         } catch (NoSuchMethodException | SecurityException e) {
@@ -59,6 +62,7 @@ class DTOUtil {
             }
         }
 
+		boolean foundField = false;
         for (Field f : cls.getFields()) {
             int modifiers = f.getModifiers();
             if (Modifier.isStatic(modifiers)) {
@@ -69,7 +73,8 @@ class DTOUtil {
             if (!Modifier.isPublic(modifiers)) {
                 return false;
             }
+			foundField = true;
         }
-        return true;
+		return foundField;
     }
 }

Modified: felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterMapTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterMapTest.java?rev=1815574&r1=1815573&r2=1815574&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterMapTest.java (original)
+++ felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterMapTest.java Fri Nov 17 15:50:19 2017
@@ -387,7 +387,7 @@ public class ConverterMapTest {
                     if (entry.getKey().contains("password"))
                         entry.setValue("xxx");
                 }
-                return converter.convert(cm).to(String.class);
+                return cm.toString();
             }) {}).
             build();
         assertEquals("{foo=bar, password=xxx}", c.convert(m).to(String.class));

Modified: felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java?rev=1815574&r1=1815573&r2=1815574&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java (original)
+++ felix/trunk/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java Fri Nov 17 15:50:19 2017
@@ -1095,7 +1095,12 @@ public class ConverterTest {
     public void testTargetAsString() {
         Map<String, String> m = new HashMap<>();
         CharSequence cs = converter.convert(m).targetAs(String.class).to(CharSequence.class);
-        assertEquals("{}", cs);
+        assertNull(cs);
+
+        Map<String, String> m2 = new HashMap<>();
+        m2.put("Hi", "there");
+        CharSequence cs2 = converter.convert(m2).targetAs(String.class).to(CharSequence.class);
+        assertEquals("Hi", cs2);
     }
 
     @SuppressWarnings({ "rawtypes", "unchecked" })