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/10 23:40:16 UTC
svn commit: r908698 - in
/ofbiz/trunk/framework/base/src/org/ofbiz/base/conversion: Converters.java
test/MiscTests.java
Author: doogie
Date: Wed Feb 10 22:40:16 2010
New Revision: 908698
URL: http://svn.apache.org/viewvc?rev=908698&view=rev
Log:
Check the super class and interfaces of the source and target,
attempting to find a match.
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=908698&r1=908697&r2=908698&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 Wed Feb 10 22:40:16 2010
@@ -92,6 +92,10 @@
return UtilGenerics.cast(value);
}
}
+ result = checkExtendsImplements(sourceClass, targetClass);
+ if (result != null) {
+ return UtilGenerics.cast(result);
+ }
// Null converter must be checked last
if (nullConverter.canConvert(sourceClass, targetClass)) {
Converter passThruConverter = new PassThruConverter<S>(sourceClass);
@@ -110,6 +114,37 @@
return UtilGenerics.cast(result);
}
+ private static <S, T> Converter<S, T> checkExtendsImplements(Class<S> sourceClass, Class<T> targetClass) throws ClassNotFoundException {
+ if (targetClass == null || sourceClass == null) {
+ return null;
+ }
+ String key = sourceClass.getName().concat(DELIMITER).concat(targetClass.getName());
+ Converter<?, ?> result = converterMap.get(key);
+ if (result == null) {
+ result = checkExtendsImplements(sourceClass, targetClass.getSuperclass());
+ if (result == null) {
+ for (Class<?> intf: targetClass.getInterfaces()) {
+ result = checkExtendsImplements(sourceClass, intf);
+ if (result != null) {
+ break;
+ }
+ }
+ if (result == null) {
+ result = checkExtendsImplements(sourceClass.getSuperclass(), targetClass);
+ if (result == null) {
+ for (Class<?> intf: sourceClass.getInterfaces()) {
+ result = checkExtendsImplements(intf, targetClass);
+ if (result != null) {
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ return UtilGenerics.cast(result);
+ }
+
/** Load all classes that implement <code>Converter</code> and are
* contained in <code>containerClass</code>.
*
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=908698&r1=908697&r2=908698&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 Wed Feb 10 22:40:16 2010
@@ -20,6 +20,7 @@
import java.math.BigDecimal;
import java.net.URL;
+import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -35,6 +36,7 @@
import org.ofbiz.base.conversion.Converters;
import org.ofbiz.base.test.GenericTestCaseBase;
import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.collections.LRUMap;
public class MiscTests extends GenericTestCaseBase {
@@ -42,6 +44,24 @@
super(name);
}
+ public void testExtendsImplements() throws Exception {
+ List<String> arraysList = Arrays.asList("a", "b", "c");
+ Converter converter = Converters.getConverter(arraysList.getClass(), String.class);
+ assertEquals("", "[a, b, c]", converter.convert(arraysList));
+ Exception caught = null;
+ try {
+ Converters.getConverter(MiscTests.class, String.class);
+ } catch (ClassNotFoundException e) {
+ caught = e;
+ } finally {
+ assertNotNull("ClassNotFoundException thrown for MiscTests.class", caught);
+ }
+ LRUMap<String, String> map = new LRUMap<String, String>();
+ map.put("a", "1");
+ converter = Converters.getConverter(LRUMap.class, String.class);
+ assertEquals("", "{a=1}", converter.convert(map));
+ }
+
public void testPassthru() throws Exception {
String string = "ofbiz";
BigDecimal bigDecimal = new BigDecimal("1.234");