Title: [waffle-scm] [744] trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl: WAFFLE-89: Moved enum conversion to EnumValueConverter.

Diff

Added: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/EnumValueConverter.java (0 => 744)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/EnumValueConverter.java	                        (rev 0)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/EnumValueConverter.java	2008-06-19 16:30:45 UTC (rev 744)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) terms as published in http://waffle.codehaus.org/license.html
+ */
+package org.codehaus.waffle.bind.converters;
+
+import java.lang.reflect.Type;
+
+import org.codehaus.waffle.bind.ValueConverter;
+
+/**
+ * <code>ValueConverter</code> that converts Enum values. 
+ * 
+ * @author Michael Ward
+ * @author Mauro Talevi
+ */
+public class EnumValueConverter implements ValueConverter {
+  
+    private static final String EMPTY = "";
+
+    public boolean accept(Type type) {
+        if (type instanceof Class ){
+            return ((Class<?>) type).isEnum();
+        }
+        return false;
+    }
+
+    @SuppressWarnings( { "unchecked" })
+    public Object convertValue(String propertyName, String value, Type type) {
+        if (EMPTY.equals(value)) {
+            return null;
+        }
+        return Enum.valueOf((Class) type, value);
+    }
+
+}

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/DelegatingTypeConverter.java (743 => 744)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/DelegatingTypeConverter.java	2008-06-19 16:17:34 UTC (rev 743)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/DelegatingTypeConverter.java	2008-06-19 16:30:45 UTC (rev 744)
@@ -16,15 +16,14 @@
 import org.codehaus.waffle.monitor.SilentMonitor;
 
 /**
- * An implementation of Ognl's <code>TypeConverter</code> which handles Java 5 enums and will delegate to custom
+ * An implementation of Ognl's <code>TypeConverter</code> which delegates to 
  * <code>ValueConverter</code>'s registered per application and retrieved via the the
- * <code>ValueConverterFinder</code>.
+ * <code>ValueConverterFinder</code>.  
  * 
  * @author Michael Ward
  * @author Mauro Talevi
  */
 public class DelegatingTypeConverter implements TypeConverter {
-    private static final String EMPTY = "";
     private final ValueConverterFinder valueConverterFinder;
     private final BindMonitor bindMonitor;
 
@@ -74,17 +73,10 @@
      * @param propertyName property name being set
      * @param value value to be converted
      * @param type Type to which value is converted
-     * @return Converted value Object for type or the unconvertered value if type is not an enum or no converter found
+     * @return Converted value Object for type or the unconvertered value if no converter found
      */
     @SuppressWarnings( { "unchecked" })
     public Object convertValue(String propertyName, String value, Type type) {
-        if (type instanceof Class && ((Class) type).isEnum()) {
-            if (EMPTY.equals(value)) {
-                return null;
-            }
-            return Enum.valueOf((Class) type, value);
-        }
-
         ValueConverter converter = valueConverterFinder.findConverter(type);
 
         if (converter != null) {

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/OgnlValueConverterFinder.java (743 => 744)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/OgnlValueConverterFinder.java	2008-06-19 16:17:34 UTC (rev 743)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/ognl/OgnlValueConverterFinder.java	2008-06-19 16:30:45 UTC (rev 744)
@@ -13,6 +13,7 @@
 
 import org.codehaus.waffle.bind.ValueConverter;
 import org.codehaus.waffle.bind.ValueConverterFinder;
+import org.codehaus.waffle.bind.converters.EnumValueConverter;
 
 /**
  * <p>
@@ -29,7 +30,8 @@
  */
 public class OgnlValueConverterFinder implements ValueConverterFinder {
 
-    private static final ValueConverter OGNL_VALUE_CONVERTER = new OgnlValueConverter();
+    private static final List<ValueConverter> DEFAULT_CONVERTERS = asList(new EnumValueConverter(), new OgnlValueConverter());
+    
     private final Map<Type, ValueConverter> cache = new HashMap<Type, ValueConverter>();
     private final List<ValueConverter> converters;
 
@@ -41,9 +43,9 @@
         this.converters = new ArrayList<ValueConverter>();
         if (converters != null) {
             this.converters.addAll(asList(converters));
-            this.converters.add(OGNL_VALUE_CONVERTER);
+            this.converters.addAll(DEFAULT_CONVERTERS);
         } else {
-            this.converters.add(OGNL_VALUE_CONVERTER);
+            this.converters.addAll(DEFAULT_CONVERTERS);
         }
     }
 


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to