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);
}
}