You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by do...@apache.org on 2010/02/15 08:16:51 UTC

svn commit: r910167 - in /ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion: Converters.java test/MiscTests.java

Author: doogie
Date: Mon Feb 15 07:16:51 2010
New Revision: 910167

URL: http://svn.apache.org/viewvc?rev=910167&view=rev
Log:
Make PassThruConverterCreater function like NullConverter, which handles
any class to Object conversion, and also handles FooObject ->
FooInterface.

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java
    ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/MiscTests.java

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java?rev=910167&r1=910166&r2=910167&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/Converters.java Mon Feb 15 07:16:51 2010
@@ -233,8 +233,8 @@
         }
 
         public <S, T> Converter<S, T> createConverter(Class<S> sourceClass, Class<T> targetClass) {
-            if (sourceClass == targetClass) {
-                return UtilGenerics.cast(new PassThruConverter<T>(targetClass));
+            if (sourceClass == targetClass || targetClass == Object.class || ObjectType.instanceOf(sourceClass, targetClass)) {
+                return new PassThruConverter<S, T>(sourceClass, targetClass);
             } else {
                 return null;
             }
@@ -246,31 +246,35 @@
      * source object.
      *
      */
-    protected static class PassThruConverter<T> implements Converter<T, T> {
-        private final Class<T> clz;
-
-        public PassThruConverter(Class<T> clz) {
-            this.clz = clz;
+    protected static class PassThruConverter<S, T> implements Converter<S, T> {
+        private final Class<S> sourceClass;
+        private final Class<T> targetClass;
+
+        public PassThruConverter(Class<S> sourceClass, Class<T> targetClass) {
+            this.sourceClass = sourceClass;
+            this.targetClass = targetClass;
         }
 
         public boolean canConvert(Class<?> sourceClass, Class<?> targetClass) {
-            return sourceClass == clz && targetClass == clz;
+            return this.sourceClass == sourceClass && this.targetClass == targetClass;
         }
 
-        public T convert(T obj) throws ConversionException {
-            return obj;
+        @SuppressWarnings("unchecked")
+        public T convert(S obj) throws ConversionException {
+            return (T) obj;
         }
 
-        public T convert(Class<? extends T> targetClass, T obj) throws ConversionException {
-            return obj;
+        @SuppressWarnings("unchecked")
+        public T convert(Class<? extends T> targetClass, S obj) throws ConversionException {
+            return (T) obj;
         }
 
         public Class<?> getSourceClass() {
-            return clz;
+            return sourceClass;
         }
 
         public Class<?> getTargetClass() {
-            return clz;
+            return targetClass;
         }
     }
 }

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/MiscTests.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/MiscTests.java?rev=910167&r1=910166&r2=910167&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/MiscTests.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion/test/MiscTests.java Mon Feb 15 07:16:51 2010
@@ -69,15 +69,18 @@
     }
 
     public static <S> void assertPassThru(Object wanted, Class<S> sourceClass) throws Exception {
-        Converter<S, S> converter = Converters.getConverter(sourceClass, sourceClass);
-        S result = converter.convert(UtilGenerics.<S>cast(wanted));
+        assertPassThru(wanted, sourceClass, sourceClass);
+    }
+
+    public static <S> void assertPassThru(Object wanted, Class<S> sourceClass, Class<? super S> targetClass) throws Exception {
+        Converter<S, ? super S> converter = Converters.getConverter(sourceClass, targetClass);
+        Object result = converter.convert(UtilGenerics.<S>cast(wanted));
         assertEquals("pass thru convert", wanted, result);
         assertTrue("pass thru exact equals", wanted == result);
-        assertTrue("pass thru can convert", converter.canConvert(wanted.getClass(), wanted.getClass()));
-        assertFalse("pass thru can't convert to object", converter.canConvert(wanted.getClass(), Object.class));
-        assertFalse("pass thru can't convert from object", converter.canConvert(Object.class, wanted.getClass()));
+        assertTrue("pass thru can convert wanted", converter.canConvert(wanted.getClass(), targetClass));
+        assertTrue("pass thru can convert source", converter.canConvert(sourceClass, targetClass));
         assertEquals("pass thru source class", wanted.getClass(), converter.getSourceClass());
-        assertEquals("pass thru target class", result.getClass(), converter.getTargetClass());
+        assertEquals("pass thru target class", targetClass, converter.getTargetClass());
     }
 
     public void testPassthru() throws Exception {
@@ -106,5 +109,8 @@
         for (Object testObject: testObjects) {
             assertPassThru(testObject, testObject.getClass());
         }
+        assertPassThru(fastList, fastList.getClass(), List.class);
+        assertPassThru(fastMap, fastMap.getClass(), Map.class);
+        assertPassThru(hashMap, hashMap.getClass(), Map.class);
     }
 }