You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xbean-scm@geronimo.apache.org by db...@apache.org on 2008/03/12 06:51:58 UTC

svn commit: r636209 - /geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/propertyeditor/PropertyEditors.java

Author: dblevins
Date: Tue Mar 11 22:51:56 2008
New Revision: 636209

URL: http://svn.apache.org/viewvc?rev=636209&view=rev
Log:
Allow enum converters to be overriden by property editors

Modified:
    geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/propertyeditor/PropertyEditors.java

Modified: geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/propertyeditor/PropertyEditors.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/propertyeditor/PropertyEditors.java?rev=636209&r1=636208&r2=636209&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/propertyeditor/PropertyEditors.java (original)
+++ geronimo/xbean/trunk/xbean-reflect/src/main/java/org/apache/xbean/propertyeditor/PropertyEditors.java Tue Mar 11 22:51:56 2008
@@ -175,6 +175,11 @@
             return true;
         }
 
+        converter = findBuiltinConverter(type);
+        if (converter != null) {
+            return true;
+        }
+        
         return false;
     }
 
@@ -239,20 +244,39 @@
 
         // fall back to a property editor
         PropertyEditor editor = findEditor(type);
-        if (editor == null) {
+
+
+        if (editor != null) {// create the object value
+            editor.setAsText(value);
+            Object objectValue = null;
+            try {
+                objectValue = editor.getValue();
+            } catch (Exception e) {
+                throw new PropertyEditorException("Error while converting \"" + value + "\" to a " + clazz.getSimpleName() +
+                        " using the property editor " + editor.getClass().getSimpleName(), e);
+            }
+            return objectValue;
+        }
+
+        converter = findBuiltinConverter(type);
+
+        if (converter == null) {
             throw new PropertyEditorException("Unable to find PropertyEditor for " + clazz.getSimpleName());
         }
 
-        // create the object value
-        editor.setAsText(value);
-        Object objectValue = null;
-        try {
-            objectValue = editor.getValue();
-        } catch (Exception e) {
-            throw new PropertyEditorException("Error while converting \"" + value + "\" to a " + clazz.getSimpleName() +
-                    " using the property editor " + editor.getClass().getSimpleName(), e);
+        return converter.toObject(value);
+    }
+
+    private static Converter findBuiltinConverter(Type type) {
+        if (type == null) throw new NullPointerException("type is null");
+
+        Class clazz = toClass(type);
+
+        if (Enum.class.isAssignableFrom(clazz)){
+            return new EnumConverter(clazz);
         }
-        return objectValue;
+
+        return null;       
     }
 
     private static Converter findConverter(Type type) {
@@ -298,7 +322,7 @@
                     return new GenericCollectionConverter(ArrayList.class, converter);
                 }
             }
-            
+
             return null;
         }
 
@@ -335,10 +359,6 @@
         // we're outta here if we got one.
         if (converter != null) {
             return converter;
-        }
-
-        if (Enum.class.isAssignableFrom(clazz)){
-            return new EnumConverter(clazz);
         }
 
         Class[] declaredClasses = clazz.getDeclaredClasses();