Title: [waffle-scm] [728] trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters: Pulled up patterns to abstract value converter.

Diff

Modified: trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/FreemarkerRegistrar.java (727 => 728)

--- trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/FreemarkerRegistrar.java	2008-06-17 16:23:43 UTC (rev 727)
+++ trunk/examples/freemarker-example/src/main/java/org/codehaus/waffle/example/freemarker/FreemarkerRegistrar.java	2008-06-18 08:02:01 UTC (rev 728)
@@ -6,6 +6,7 @@
 import java.util.Properties;
 
 import org.codehaus.waffle.ComponentRegistry;
+import org.codehaus.waffle.bind.converters.AbstractValueConverter;
 import org.codehaus.waffle.bind.converters.DateValueConverter;
 import org.codehaus.waffle.example.freemarker.controller.DateProvider;
 import org.codehaus.waffle.example.freemarker.controller.PersonController;
@@ -23,7 +24,7 @@
     public void application() {
         ComponentRegistry registry = getComponentRegistry();
         DateProvider dateProvider = new DateProvider("dd/MM/yyyy", "hh:mm:ss", "dd/MM/yyyy");
-        DateValueConverter converter = (DateValueConverter) registry.locateByType(DateValueConverter.class);
+        AbstractValueConverter converter = (AbstractValueConverter) registry.locateByType(DateValueConverter.class);
         if (converter != null) {
             Properties patterns = new Properties();
             patterns.setProperty(DAY_FORMAT_KEY, dateProvider.getDayPattern());

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/AbstractValueConverter.java (727 => 728)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/AbstractValueConverter.java	2008-06-17 16:23:43 UTC (rev 727)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/AbstractValueConverter.java	2008-06-18 08:02:01 UTC (rev 728)
@@ -16,14 +16,16 @@
  */
 public abstract class AbstractValueConverter implements ValueConverter {
 
-    protected final MessageResources messageResources;
+    private final MessageResources messageResources;
+    private Properties patterns;
 
-    protected AbstractValueConverter(MessageResources messageResources) {
+    protected AbstractValueConverter(MessageResources messageResources, Properties patterns) {
         this.messageResources = messageResources;
+        this.patterns = patterns;
     }
 
     /**
-     * Determines if the value is missing.  
+     * Determines if the value is missing.
      * 
      * @param value the String value
      * @return A boolean, <code>true</code> if value is <code>null</code> or trimmed length is 0.
@@ -33,8 +35,8 @@
     }
 
     /**
-     * Handles the case of a missing value.  By default it return a <code>null</code> converted value,
-     * but can be overridden to throw a BindException
+     * Handles the case of a missing value. By default it return a <code>null</code> converted value, but can be
+     * overridden to throw a BindException
      * 
      * @param key the error message key
      * @param defaultMessage the default message if key is not found
@@ -44,8 +46,8 @@
     protected Object convertMissingValue(String key, String defaultMessage, Object... parameters) {
         return null;
     }
-    
-    @SuppressWarnings({"ThrowableInstanceNeverThrown"})
+
+    @SuppressWarnings( { "ThrowableInstanceNeverThrown" })
     protected BindException newBindException(String key, String defaultMessage, Object... parameters) {
         String message = messageResources.getMessageWithDefault(key, defaultMessage, parameters);
         return new BindException(message);
@@ -59,10 +61,18 @@
         return value != null && value.matches(regex);
     }
 
-    protected String patternFor(Properties patterns, String key, String defaultPattern) {
-        if ( patterns.containsKey(key)) {
+    protected String patternFor(String key, String defaultPattern) {
+        if (patterns.containsKey(key)) {
             return patterns.getProperty(key);
         }
         return messageFor(key, defaultPattern);
     }
+
+    public Properties getPatterns() {
+        return patterns;
+    }
+
+    public void changePatterns(Properties patterns) {
+        this.patterns = patterns;
+    }
 }

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/DateValueConverter.java (727 => 728)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/DateValueConverter.java	2008-06-17 16:23:43 UTC (rev 727)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/DateValueConverter.java	2008-06-18 08:02:01 UTC (rev 728)
@@ -54,20 +54,17 @@
     public static final String DEFAULT_DATE_MESSAGE = "Invalid date {1} (using format {2}) for field {0}";
     public static final String DEFAULT_DATE_MISSING_MESSAGE = "Missing date value for field {0}";
 
-    private Properties patterns;
-    
     public DateValueConverter(MessageResources messageResources) {
         this(messageResources, new Properties());
     }
 
     public DateValueConverter(MessageResources messageResources, Properties patterns) {
-        super(messageResources);
-        this.patterns = patterns;
+        super(messageResources, patterns);
     }
 
     public boolean accept(Type type) {
-        if ( type instanceof Class ){
-            return Date.class.isAssignableFrom((Class<?>)type);            
+        if (type instanceof Class) {
+            return Date.class.isAssignableFrom((Class<?>) type);
         }
         return false;
     }
@@ -88,14 +85,6 @@
         }
     }
 
-    public Properties getPatterns() {
-        return patterns;
-    }
-
-    public void changePatterns(Properties patterns) {
-        this.patterns = patterns;
-    }
-
     private enum DateType {
         DAY, TIME, DATE
     }
@@ -111,24 +100,24 @@
         String pattern;
         switch (dateType) {
             case DAY:
-                pattern = patternFor(patterns, DAY_FORMAT_KEY, DEFAULT_DAY_FORMAT);
+                pattern = patternFor(DAY_FORMAT_KEY, DEFAULT_DAY_FORMAT);
                 break;
             case TIME:
-                pattern = patternFor(patterns, TIME_FORMAT_KEY, DEFAULT_TIME_FORMAT);
+                pattern = patternFor(TIME_FORMAT_KEY, DEFAULT_TIME_FORMAT);
                 break;
             default:
-                pattern = patternFor(patterns, DATE_FORMAT_KEY, DEFAULT_DATE_FORMAT);
+                pattern = patternFor(DATE_FORMAT_KEY, DEFAULT_DATE_FORMAT);
         }
         return new SimpleDateFormat(pattern);
     }
 
     private DateType dateType(String propertyName) {
-        if (matches(propertyName, patternFor(patterns , DAY_NAME_KEY, DEFAULT_DAY_NAME))) {
+        if (matches(propertyName, patternFor(DAY_NAME_KEY, DEFAULT_DAY_NAME))) {
             return DateType.DAY;
-        } else if (matches(propertyName, patternFor(patterns , TIME_NAME_KEY, DEFAULT_TIME_NAME))) {
+        } else if (matches(propertyName, patternFor(TIME_NAME_KEY, DEFAULT_TIME_NAME))) {
             return DateType.TIME;
         }
         return DateType.DATE;
     }
-    
+
 }

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java (727 => 728)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java	2008-06-17 16:23:43 UTC (rev 727)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java	2008-06-18 08:02:01 UTC (rev 728)
@@ -13,7 +13,7 @@
 
 /**
  * <p>
- * <code>ValueConverter</code> that converts a CSV value to a List. A <code>null</code> or empty value (once
+ * <code>ValueConverter</code> that converts CSV values to List of Strings. A <code>null</code> or empty value (once
  * trimmed) will be returned as an empty list (behaviour which can be overridden via the [EMAIL PROTECTED] #convertMissingValue}
  * method). The message keys and default values used are:
  * <ul>
@@ -32,15 +32,13 @@
     public static final String DEFAULT_LIST_MESSAGE = "Invalid list value for field {0}";
 
     private static final String COMMA = ",";
-    private Properties patterns;
 
     public ListValueConverter(MessageResources messageResources) {
         this(messageResources, new Properties());
     }
 
     public ListValueConverter(MessageResources messageResources, Properties patterns) {
-        super(messageResources);
-        this.patterns = patterns;
+        super(messageResources, patterns);
     }
 
     public boolean accept(Type type) {
@@ -64,7 +62,7 @@
         return listValues(value);
     }
 
-    private List<String> listValues(String value) {
+    protected List<String> listValues(String value) {
         String[] values = value.split(COMMA);
         List<String> list = new ArrayList<String>();
         for (String current : values) {
@@ -75,14 +73,6 @@
         return list;
     }
 
-    public Properties getPatterns() {
-        return patterns;
-    }
-
-    public void changePatterns(Properties patterns) {
-        this.patterns = patterns;
-    }
-
     @SuppressWarnings("unchecked")
     protected Object convertMissingValue(String key, String defaultMessage, Object... parameters) {
         return new ArrayList();

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/NumberListValueConverter.java (727 => 728)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/NumberListValueConverter.java	2008-06-17 16:23:43 UTC (rev 727)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/NumberListValueConverter.java	2008-06-18 08:02:01 UTC (rev 728)
@@ -15,43 +15,25 @@
 
 /**
  * <p>
- * <code>ValueConverter</code> that converts a CSV value to a List. A <code>null</code> or empty value (once
- * trimmed) will be returned as an empty list (behaviour which can be overridden via the [EMAIL PROTECTED] #convertMissingValue}
- * method). The message keys and default values used are:
- * <ul>
- * <li>"bind.error.list" ([EMAIL PROTECTED] #BIND_ERROR_LIST_KEY}): list is <code>null</code> or empty (message defaults to
- * [EMAIL PROTECTED] #DEFAULT_LIST_MESSAGE})</li>
- * </ul>
- * The patterns are also optionally injectable via <code>Properties</code> in the constructor and take precedence over
- * the ones configured in the messages resources.
+ * <code>ValueConverter</code> that converts a CSV value to a List of Numbers. It extends
+ * [EMAIL PROTECTED] org.codehaus.waffle.bind.converters.ListValueConverter ListValueConverter} to provide number parsing using the
+ * <code>NumberFormat</code> instance provided (which defaults to <code>NumberFormat.getInstance()</code>) and if
+ * not successful returns the string values.
  * </p>
- * <p>
- * NOTE: the converter will first check if the values match the configured number regex pattern and only if it does will
- * it attempt to parse them (using the <code>NumberFormat</code> instance provided, which defaults to
- * <code>NumberFormat.getInstance()</code>) and if not successful returns the string values. The reason for the
- * presence of the preliminary number pattern matching is to disable the attempt of number parsing altogether for some
- * string values that may start with number and may be erronously parsed as numbers.
- * </p>
  * 
  * @author Mauro Talevi
  */
-public class NumberListValueConverter extends AbstractValueConverter {
+public class NumberListValueConverter extends ListValueConverter {
 
-    public static final String BIND_ERROR_LIST_KEY = "bind.error.list";
-    public static final String DEFAULT_LIST_MESSAGE = "Invalid list value for field {0}";
-
-    private static final String COMMA = ",";
     private NumberFormat numberFormat;
-    private Properties patterns;
 
     public NumberListValueConverter(MessageResources messageResources) {
-        this(messageResources, NumberFormat.getInstance(), new Properties());
+        this(messageResources, new Properties(), NumberFormat.getInstance());
     }
 
-    public NumberListValueConverter(MessageResources messageResources, NumberFormat numberFormat, Properties patterns) {
-        super(messageResources);
+    public NumberListValueConverter(MessageResources messageResources, Properties patterns, NumberFormat numberFormat) {
+        super(messageResources, patterns);
         this.numberFormat = numberFormat;
-        this.patterns = patterns;
     }
 
     /**
@@ -64,7 +46,8 @@
             ParameterizedType parameterizedType = (ParameterizedType) type;
             Type rawType = parameterizedType.getRawType();
             Type argumentType = parameterizedType.getActualTypeArguments()[0];
-            return List.class.isAssignableFrom((Class<?>) rawType) && Number.class.isAssignableFrom((Class<?>)argumentType);
+            return List.class.isAssignableFrom((Class<?>) rawType)
+                    && Number.class.isAssignableFrom((Class<?>) argumentType);
         }
         return false;
     }
@@ -79,43 +62,16 @@
 
         List<String> values = listValues(value);
         try {
-            return toNumbers(values);
+            List<Number> numbers = new ArrayList<Number>();
+            for (String numberValue : values) {
+                numbers.add(numberFormat.parse(numberValue));
+            }
+            return numbers;
         } catch (ParseException e) {
             // failed to parse as numbers, return string values
+            // TODO should we throw a bind exception here?
         }
         return values;
     }
 
-    private List<String> listValues(String value) {
-        String[] values = value.split(COMMA);
-        List<String> list = new ArrayList<String>();
-        for (String current : values) {
-            if (current.trim().length() > 0) {
-                list.add(current);
-            }
-        }
-        return list;
-    }
-
-    public Properties getPatterns() {
-        return patterns;
-    }
-
-    public void changePatterns(Properties patterns) {
-        this.patterns = patterns;
-    }
-
-    @SuppressWarnings("unchecked")
-    protected Object convertMissingValue(String key, String defaultMessage, Object... parameters) {
-        return new ArrayList();
-    }
-
-    protected List<Number> toNumbers(List<String> values) throws ParseException {
-        List<Number> numbers = new ArrayList<Number>();
-        for (String value : values) {
-            numbers.add(numberFormat.parse(value));
-        }
-        return numbers;
-    }
-
 }


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to