|
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); } } |
| Free forum by Nabble | Edit this page |
