bruno       2004/05/06 07:59:45

  Modified:    src/blocks/forms/java/org/apache/cocoon/forms/binding
                        MultiValueJXPathBinding.java
                        RepeaterJXPathBinding.java ValueJXPathBinding.java
               src/blocks/forms/java/org/apache/cocoon/forms/datatype
                        Datatype.java DefaultSelectionListBuilder.java
                        DynamicSelectionList.java
               src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor
                        Convertor.java DummyStringConvertor.java
                        EnumConvertor.java FormattingDateConvertor.java
                        FormattingDecimalConvertor.java
                        FormattingDoubleConvertor.java
                        FormattingFloatConvertor.java
                        FormattingIntegerConvertor.java
                        FormattingLongConvertor.java
                        MillisDateConvertor.java PlainBooleanConvertor.java
                        PlainDecimalConvertor.java
                        PlainDoubleConvertor.java PlainFloatConvertor.java
                        PlainIntegerConvertor.java PlainLongConvertor.java
               src/blocks/forms/java/org/apache/cocoon/forms/datatype/typeimpl
                        AbstractDatatype.java
               src/blocks/forms/java/org/apache/cocoon/forms/formmodel
                        Field.java MultiValueField.java
               src/blocks/forms/test/org/apache/cocoon/forms/datatype/convertor
                        EnumConvertorTestCase.java
  Log:
  Made Convertor.convertFromString contract more solid by letting it
  return a ConversionResult object (instead of null/not-null to indicate
  successful conversion). This also moves the responsibility
  of creating the ValidationError to the Convertor, allowing convertors
  to set more specialised messages in them.
  
  Revision  Changes    Path
  1.3       +5 -2      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java
  
  Index: MultiValueJXPathBinding.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/binding/MultiValueJXPathBinding.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MultiValueJXPathBinding.java      23 Apr 2004 11:42:58 -0000      1.2
  +++ MultiValueJXPathBinding.java      6 May 2004 14:59:44 -0000       1.3
  @@ -21,6 +21,7 @@
   
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.cocoon.forms.datatype.convertor.Convertor;
  +import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
   import org.apache.cocoon.forms.formmodel.Widget;
   import org.apache.commons.jxpath.JXPathContext;
   import org.apache.commons.jxpath.Pointer;
  @@ -76,7 +77,9 @@
   
                   if (value != null && convertor != null) {
                       if (value instanceof String) {
  -                        value = convertor.convertFromString((String)value, 
convertorLocale, null);
  +                        ConversionResult conversionResult = 
convertor.convertFromString((String)value, convertorLocale, null);
  +                        if (conversionResult.isSuccessful())
  +                            value = conversionResult.getResult();
                       } else {
                           getLogger().warn("Convertor ignored on backend-value 
which isn't of type String.");
                       }
  
  
  
  1.7       +5 -2      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java
  
  Index: RepeaterJXPathBinding.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/binding/RepeaterJXPathBinding.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- RepeaterJXPathBinding.java        23 Apr 2004 23:32:26 -0000      1.6
  +++ RepeaterJXPathBinding.java        6 May 2004 14:59:44 -0000       1.7
  @@ -24,6 +24,7 @@
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.cocoon.forms.formmodel.Repeater;
   import org.apache.cocoon.forms.formmodel.Widget;
  +import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
   import org.apache.commons.collections.ListUtils;
   import org.apache.commons.jxpath.JXPathContext;
   import org.apache.commons.jxpath.Pointer;
  @@ -302,8 +303,10 @@
                   Object value = rowContext.getValue(vBinding.getXPath());
                   if (value != null && vBinding.getConvertor() != null) {
                       if (value instanceof String) {
  -                        value = vBinding.getConvertor().convertFromString(
  +                        ConversionResult conversionResult = 
vBinding.getConvertor().convertFromString(
                                   (String)value, 
vBinding.getConvertorLocale(), null);
  +                        if (conversionResult.isSuccessful())
  +                            value = conversionResult.getResult();
                       } else {
                           if (getLogger().isWarnEnabled()) {
                               getLogger().warn("Convertor ignored on 
backend-value " +
  
  
  
  1.5       +5 -2      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/binding/ValueJXPathBinding.java
  
  Index: ValueJXPathBinding.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/binding/ValueJXPathBinding.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ValueJXPathBinding.java   23 Apr 2004 11:42:58 -0000      1.4
  +++ ValueJXPathBinding.java   6 May 2004 14:59:44 -0000       1.5
  @@ -19,6 +19,7 @@
   
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.cocoon.forms.datatype.convertor.Convertor;
  +import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
   import org.apache.cocoon.forms.formmodel.Widget;
   import org.apache.commons.jxpath.JXPathContext;
   import org.apache.commons.jxpath.JXPathException;
  @@ -89,7 +90,9 @@
           Object value = jxpc.getValue(this.xpath);
           if (value != null && convertor != null) {
               if (value instanceof String) {
  -                value = convertor.convertFromString((String)value, 
convertorLocale, null);
  +                ConversionResult conversionResult = 
convertor.convertFromString((String)value, convertorLocale, null);
  +                if (conversionResult.isSuccessful())
  +                    value = conversionResult.getResult();
               } else {
                   getLogger().warn("Convertor ignored on backend-value which 
isn't of type String.");
               }
  
  
  
  1.4       +5 -5      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/Datatype.java
  
  Index: Datatype.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/Datatype.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Datatype.java     10 Apr 2004 13:40:27 -0000      1.3
  +++ Datatype.java     6 May 2004 14:59:44 -0000       1.4
  @@ -17,6 +17,7 @@
   
   import org.outerj.expression.ExpressionContext;
   import org.apache.cocoon.forms.datatype.convertor.Convertor;
  +import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
   import org.apache.cocoon.forms.validation.ValidationError;
   import org.xml.sax.SAXException;
   import org.xml.sax.ContentHandler;
  @@ -42,11 +43,10 @@
    */
   public interface Datatype {
       /**
  -     * Converts a string to an object of this datatype. Returns null if this
  -     * fails. This method uses the same [EMAIL PROTECTED] Convertor} as 
returned by the
  -     * [EMAIL PROTECTED] #getConvertor()} method.
  +     * Converts a string to an object of this datatype. This method uses the
  +     * same [EMAIL PROTECTED] Convertor} as returned by the [EMAIL 
PROTECTED] #getConvertor()} method.
        */
  -    Object convertFromString(String value, Locale locale);
  +    ConversionResult convertFromString(String value, Locale locale);
   
       /**
        * Converts an object of this datatype to a string representation.
  
  
  
  1.4       +5 -3      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/DefaultSelectionListBuilder.java
  
  Index: DefaultSelectionListBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/DefaultSelectionListBuilder.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DefaultSelectionListBuilder.java  28 Mar 2004 20:51:24 -0000      1.3
  +++ DefaultSelectionListBuilder.java  6 May 2004 14:59:44 -0000       1.4
  @@ -25,6 +25,7 @@
   import org.apache.cocoon.forms.Constants;
   import org.apache.cocoon.forms.datatype.convertor.Convertor;
   import org.apache.cocoon.forms.datatype.convertor.DefaultFormatCache;
  +import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
   import org.apache.cocoon.forms.util.DomHelper;
   import org.apache.excalibur.source.Source;
   import org.apache.excalibur.source.SourceResolver;
  @@ -95,12 +96,13 @@
                       // Empty value translates into the null object
                       value = null;
                   } else {
  -                    value = convertor.convertFromString(stringValue, 
Locale.US, formatCache);
  -                    if (value == null) {
  +                    ConversionResult conversionResult = 
convertor.convertFromString(stringValue, Locale.US, formatCache);
  +                    if (!conversionResult.isSuccessful()) {
                           throw new Exception("Could not convert the value \"" 
+ stringValue +
                                               "\" to the type " + 
datatype.getDescriptiveName() +
                                               ", defined at " + 
DomHelper.getLocation(element));
                       }
  +                    value = conversionResult.getResult();
                   }
   
                   XMLizable label = null;
  
  
  
  1.3       +5 -3      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/DynamicSelectionList.java
  
  Index: DynamicSelectionList.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/DynamicSelectionList.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DynamicSelectionList.java 9 Mar 2004 13:08:46 -0000       1.2
  +++ DynamicSelectionList.java 6 May 2004 14:59:44 -0000       1.3
  @@ -26,6 +26,7 @@
   import org.apache.cocoon.forms.Constants;
   import org.apache.cocoon.forms.datatype.convertor.Convertor;
   import org.apache.cocoon.forms.datatype.convertor.DefaultFormatCache;
  +import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
   import org.apache.cocoon.xml.AttributesImpl;
   import org.apache.cocoon.xml.AbstractXMLPipe;
   import org.apache.cocoon.xml.dom.DOMBuilder;
  @@ -139,10 +140,11 @@
                           // Empty (or null) value translates into the empty 
string
                           currentValueAsString = "";
                       } else {
  -                        currentValue = 
convertor.convertFromString(unparsedValue, locale, fromFormatCache);
  -                        if (currentValue == null) {
  +                        ConversionResult conversionResult = 
convertor.convertFromString(unparsedValue, locale, fromFormatCache);
  +                        if (!conversionResult.isSuccessful()) {
                               throw new SAXException("Could not interpret the 
following value: \"" + unparsedValue + "\".");
                           }
  +                        currentValue = conversionResult.getResult();
                           currentValueAsString = 
datatype.getConvertor().convertToString(currentValue, locale, toFormatCache);
                       }
                       AttributesImpl attrs = new AttributesImpl();
  
  
  
  1.3       +2 -3      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/Convertor.java
  
  Index: Convertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/Convertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Convertor.java    10 Apr 2004 13:40:27 -0000      1.2
  +++ Convertor.java    6 May 2004 14:59:44 -0000       1.3
  @@ -38,11 +38,10 @@
       
       /**
        * Converts string representation into the object of convertor's type.
  -     * Returns null if conversion fails.
        *
        * @param formatCache can be null if not needed
        */
  -    Object convertFromString(String value, Locale locale, FormatCache 
formatCache);
  +    ConversionResult convertFromString(String value, Locale locale, 
FormatCache formatCache);
   
       String convertToString(Object value, Locale locale, FormatCache 
formatCache);
   
  
  
  
  1.3       +3 -3      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/DummyStringConvertor.java
  
  Index: DummyStringConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/DummyStringConvertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DummyStringConvertor.java 10 Apr 2004 13:40:27 -0000      1.2
  +++ DummyStringConvertor.java 6 May 2004 14:59:44 -0000       1.3
  @@ -27,8 +27,8 @@
    * @version CVS $Id$
    */
   public class DummyStringConvertor implements Convertor {
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  -        return value;
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +        return new ConversionResult(value);
       }
   
       public String convertToString(Object value, Locale locale, 
Convertor.FormatCache formatCache) {
  
  
  
  1.4       +4 -4      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/EnumConvertor.java
  
  Index: EnumConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/EnumConvertor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EnumConvertor.java        10 Apr 2004 13:40:27 -0000      1.3
  +++ EnumConvertor.java        6 May 2004 14:59:44 -0000       1.4
  @@ -54,7 +54,7 @@
       /* (non-Javadoc)
        * @see 
org.apache.cocoon.forms.datatype.convertor.Convertor#convertFromString(java.lang.String,
 java.util.Locale, 
org.apache.cocoon.forms.datatype.convertor.Convertor.FormatCache)
        */
  -    public Object convertFromString(String value,
  +    public ConversionResult convertFromString(String value,
                                                                        Locale 
locale,
                                                                        
FormatCache formatCache) {
           try {
  @@ -62,7 +62,7 @@
               try {
                   Method method = getTypeClass().
                       getMethod("fromString", new Class[] { String.class, 
Locale.class});
  -                return method.invoke(null, new Object[] { value, locale});
  +                return new ConversionResult(method.invoke(null, new Object[] 
{ value, locale}));
               } catch(NoSuchMethodException nsme) {
                   // fromString method was not found, try to convert
                   // the value to a field via reflection.
  @@ -73,7 +73,7 @@
                   }
                   Class clazz = getTypeClass();
                   Field field = clazz.getField(value);
  -                return field.get(null);
  +                return new ConversionResult(field.get(null));
               }
           } catch (Exception e) {
               throw new CascadingRuntimeException("Got exception trying to 
convert " + value, e);
  
  
  
  1.3       +4 -4      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingDateConvertor.java
  
  Index: FormattingDateConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingDateConvertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FormattingDateConvertor.java      10 Apr 2004 13:40:27 -0000      1.2
  +++ FormattingDateConvertor.java      6 May 2004 14:59:44 -0000       1.3
  @@ -66,12 +66,12 @@
           this.localizedPatterns = new LocaleMap();
       }
   
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           DateFormat dateFormat = getDateFormat(locale, formatCache);
           try {
  -            return dateFormat.parse(value);
  +            return new ConversionResult(dateFormat.parse(value));
           } catch (ParseException e) {
  -            return null;
  +            return ConversionResult.create("date");
           }
       }
   
  
  
  
  1.4       +5 -5      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingDecimalConvertor.java
  
  Index: FormattingDecimalConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingDecimalConvertor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FormattingDecimalConvertor.java   10 Apr 2004 13:40:27 -0000      1.3
  +++ FormattingDecimalConvertor.java   6 May 2004 14:59:44 -0000       1.4
  @@ -66,7 +66,7 @@
           return NUMBER;
       }
   
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           DecimalFormat decimalFormat = getDecimalFormat(locale, formatCache);
           try {
               Number decimalValue = decimalFormat.parse(value);
  @@ -81,11 +81,11 @@
               else if (decimalValue instanceof BigInteger)
                   decimalValue = new BigDecimal((BigInteger)decimalValue);
               else
  -                return null;
  +                return ConversionResult.create("decimal");
   
  -            return decimalValue;
  +            return new ConversionResult(decimalValue);
           } catch (ParseException e) {
  -            return null;
  +            return ConversionResult.create("decimal");
           }
       }
   
  
  
  
  1.2       +5 -5      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingDoubleConvertor.java
  
  Index: FormattingDoubleConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingDoubleConvertor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FormattingDoubleConvertor.java    18 Mar 2004 11:45:55 -0000      1.1
  +++ FormattingDoubleConvertor.java    6 May 2004 14:59:44 -0000       1.2
  @@ -35,16 +35,16 @@
           super();
       }
   
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           DecimalFormat decimalFormat = getDecimalFormat(locale, formatCache);
           try {
               Number decimalValue = decimalFormat.parse(value);
               if (decimalValue instanceof Double)
  -                return decimalValue;
  +                return new ConversionResult(decimalValue);
               else
  -                return new Double(decimalValue.doubleValue());
  +                return new ConversionResult(new 
Double(decimalValue.doubleValue()));
           } catch (ParseException e) {
  -            return null;
  +            return ConversionResult.create("double");
           }
       }
   
  
  
  
  1.3       +5 -5      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingFloatConvertor.java
  
  Index: FormattingFloatConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingFloatConvertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FormattingFloatConvertor.java     18 Mar 2004 11:44:58 -0000      1.2
  +++ FormattingFloatConvertor.java     6 May 2004 14:59:44 -0000       1.3
  @@ -35,16 +35,16 @@
           super();
       }
   
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           DecimalFormat decimalFormat = getDecimalFormat(locale, formatCache);
           try {
               Number decimalValue = decimalFormat.parse(value);
               if (decimalValue instanceof Float)
  -                return decimalValue;
  +                return new ConversionResult(decimalValue);
               else
  -                return new Float(decimalValue.floatValue());
  +                return new ConversionResult(new 
Float(decimalValue.floatValue()));
           } catch (ParseException e) {
  -            return null;
  +            return ConversionResult.create("float");
           }
       }
   
  
  
  
  1.2       +5 -5      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingIntegerConvertor.java
  
  Index: FormattingIntegerConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingIntegerConvertor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FormattingIntegerConvertor.java   9 Mar 2004 10:34:06 -0000       1.1
  +++ FormattingIntegerConvertor.java   6 May 2004 14:59:44 -0000       1.2
  @@ -36,16 +36,16 @@
           super();
       }
   
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           DecimalFormat decimalFormat = getDecimalFormat(locale, formatCache);
           try {
               Number decimalValue = decimalFormat.parse(value);
               if (decimalValue instanceof Integer)
  -                return decimalValue;
  +                return new ConversionResult(decimalValue);
               else
  -                return new Integer(decimalValue.intValue());
  +                return new ConversionResult(new 
Integer(decimalValue.intValue()));
           } catch (ParseException e) {
  -            return null;
  +            return ConversionResult.create("integer");
           }
       }
   
  
  
  
  1.2       +5 -5      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingLongConvertor.java
  
  Index: FormattingLongConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/FormattingLongConvertor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FormattingLongConvertor.java      9 Mar 2004 10:34:06 -0000       1.1
  +++ FormattingLongConvertor.java      6 May 2004 14:59:44 -0000       1.2
  @@ -35,16 +35,16 @@
           super();
       }
   
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           DecimalFormat decimalFormat = getDecimalFormat(locale, formatCache);
           try {
               Number decimalValue = decimalFormat.parse(value);
               if (decimalValue instanceof Long)
  -                return decimalValue;
  +                return new ConversionResult(decimalValue);
               else
  -                return new Long(decimalValue.longValue());
  +                return new ConversionResult(new 
Long(decimalValue.longValue()));
           } catch (ParseException e) {
  -            return null;
  +            return ConversionResult.create("long");
           }
       }
   
  
  
  
  1.3       +4 -4      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/MillisDateConvertor.java
  
  Index: MillisDateConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/MillisDateConvertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MillisDateConvertor.java  10 Apr 2004 13:40:27 -0000      1.2
  +++ MillisDateConvertor.java  6 May 2004 14:59:44 -0000       1.3
  @@ -28,12 +28,12 @@
    * @version CVS $Id$
    */
   public class MillisDateConvertor implements Convertor {
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           try {
               long date = Long.parseLong(value);
  -            return new Date(date);
  +            return new ConversionResult(new Date(date));
           } catch (NumberFormatException e) {
  -            return null;
  +            return ConversionResult.create("date");
           }
       }
   
  
  
  
  1.3       +3 -3      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainBooleanConvertor.java
  
  Index: PlainBooleanConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainBooleanConvertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PlainBooleanConvertor.java        10 Apr 2004 13:40:27 -0000      1.2
  +++ PlainBooleanConvertor.java        6 May 2004 14:59:44 -0000       1.3
  @@ -26,8 +26,8 @@
    * @version CVS $Id$
    */
   public class PlainBooleanConvertor implements Convertor {
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  -        return Boolean.valueOf(value);
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +        return new ConversionResult(Boolean.valueOf(value));
       }
   
       public String convertToString(Object value, Locale locale, 
Convertor.FormatCache formatCache) {
  
  
  
  1.3       +4 -4      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainDecimalConvertor.java
  
  Index: PlainDecimalConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainDecimalConvertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PlainDecimalConvertor.java        10 Apr 2004 13:40:27 -0000      1.2
  +++ PlainDecimalConvertor.java        6 May 2004 14:59:44 -0000       1.3
  @@ -28,11 +28,11 @@
    * @version CVS $Id$
    */
   public class PlainDecimalConvertor implements Convertor {
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           try {
  -            return new BigDecimal(value);
  +            return new ConversionResult(new BigDecimal(value));
           } catch (NumberFormatException e) {
  -            return null;
  +            return ConversionResult.create("decimal");
           }
       }
   
  
  
  
  1.3       +4 -4      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainDoubleConvertor.java
  
  Index: PlainDoubleConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainDoubleConvertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PlainDoubleConvertor.java 10 Apr 2004 13:40:27 -0000      1.2
  +++ PlainDoubleConvertor.java 6 May 2004 14:59:44 -0000       1.3
  @@ -27,11 +27,11 @@
    * @version CVS $Id$
    */
   public class PlainDoubleConvertor implements Convertor {
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           try {
  -            return new Double(Double.parseDouble(value));
  +            return new ConversionResult(new 
Double(Double.parseDouble(value)));
           } catch (NumberFormatException e) {
  -            return null;
  +            return ConversionResult.create("double");
           }
       }
   
  
  
  
  1.3       +4 -4      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainFloatConvertor.java
  
  Index: PlainFloatConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainFloatConvertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PlainFloatConvertor.java  10 Apr 2004 13:40:27 -0000      1.2
  +++ PlainFloatConvertor.java  6 May 2004 14:59:44 -0000       1.3
  @@ -27,11 +27,11 @@
    * @version CVS $Id$
    */
   public class PlainFloatConvertor implements Convertor {
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           try {
  -            return new Float(value);
  +            return new ConversionResult(new Float(value));
           } catch (NumberFormatException e) {
  -            return null;
  +            return ConversionResult.create("float");
           }
       }
   
  
  
  
  1.3       +4 -4      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainIntegerConvertor.java
  
  Index: PlainIntegerConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainIntegerConvertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PlainIntegerConvertor.java        10 Apr 2004 13:40:27 -0000      1.2
  +++ PlainIntegerConvertor.java        6 May 2004 14:59:44 -0000       1.3
  @@ -28,11 +28,11 @@
    * @version CVS $Id$ 
    */
   public class PlainIntegerConvertor implements Convertor {
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           try {
  -            return new Integer(Integer.parseInt(value));
  +            return new ConversionResult(new 
Integer(Integer.parseInt(value)));
           } catch (NumberFormatException e) {
  -            return null;
  +            return ConversionResult.create("integer");
           }
       }
   
  
  
  
  1.3       +4 -4      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainLongConvertor.java
  
  Index: PlainLongConvertor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/convertor/PlainLongConvertor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PlainLongConvertor.java   10 Apr 2004 13:40:27 -0000      1.2
  +++ PlainLongConvertor.java   6 May 2004 14:59:44 -0000       1.3
  @@ -27,11 +27,11 @@
    * @version CVS $Id$
    */
   public class PlainLongConvertor implements Convertor {
  -    public Object convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
  +    public ConversionResult convertFromString(String value, Locale locale, 
Convertor.FormatCache formatCache) {
           try {
  -            return new Long(Long.parseLong(value));
  +            return new ConversionResult(new Long(Long.parseLong(value)));
           } catch (NumberFormatException e) {
  -            return null;
  +            return ConversionResult.create("long");
           }
       }
   
  
  
  
  1.5       +3 -2      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/typeimpl/AbstractDatatype.java
  
  Index: AbstractDatatype.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/datatype/typeimpl/AbstractDatatype.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractDatatype.java     10 Apr 2004 13:40:27 -0000      1.4
  +++ AbstractDatatype.java     6 May 2004 14:59:44 -0000       1.5
  @@ -24,6 +24,7 @@
   import org.apache.cocoon.forms.datatype.DatatypeBuilder;
   import org.apache.cocoon.forms.datatype.ValidationRule;
   import org.apache.cocoon.forms.datatype.convertor.Convertor;
  +import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
   import org.apache.cocoon.forms.validation.ValidationError;
   import org.apache.cocoon.forms.Constants;
   import org.apache.cocoon.xml.AttributesImpl;
  @@ -85,7 +86,7 @@
           return convertor;
       }
   
  -    public Object convertFromString(String value, Locale locale) {
  +    public ConversionResult convertFromString(String value, Locale locale) {
           return getConvertor().convertFromString(value, locale, null);
       }
   
  
  
  
  1.15      +6 -9      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java
  
  Index: Field.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/Field.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Field.java        30 Apr 2004 12:23:33 -0000      1.14
  +++ Field.java        6 May 2004 14:59:44 -0000       1.15
  @@ -19,6 +19,7 @@
   import org.apache.cocoon.forms.FormContext;
   import org.apache.cocoon.forms.datatype.Datatype;
   import org.apache.cocoon.forms.datatype.SelectionList;
  +import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
   import org.apache.cocoon.forms.event.*;
   import org.apache.cocoon.forms.util.I18nMessage;
   import org.apache.cocoon.forms.validation.ValidationError;
  @@ -82,17 +83,13 @@
               this.value = null;
               if (this.enteredValue != null) {
                   // Parse the value
  -                this.value = 
getDatatype().convertFromString(this.enteredValue, getForm().getLocale());
  -                if (this.value != null) {       // Conversion successfull
  +                ConversionResult conversionResult = 
getDatatype().convertFromString(this.enteredValue, getForm().getLocale());
  +                if (conversionResult.isSuccessful()) {
  +                    this.value = conversionResult.getResult();
                       this.needsParse = false;
                       this.needsValidate = true;
                   } else {        // Conversion failed
  -                    this.validationError = new ValidationError(new 
I18nMessage(
  -                        "datatype.conversion-failed",
  -                        new String[] {"datatype." + 
getDatatype().getDescriptiveName()},
  -                        new boolean[] { true },
  -                        Constants.I18N_CATALOGUE
  -                    ));
  +                    this.validationError = 
conversionResult.getValidationError();
                       // No need for further validation (and need to keep the 
above error)
                       this.needsValidate = false;
                   }
  
  
  
  1.10      +6 -4      
cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java
  
  Index: MultiValueField.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/formmodel/MultiValueField.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- MultiValueField.java      30 Apr 2004 12:19:01 -0000      1.9
  +++ MultiValueField.java      6 May 2004 14:59:44 -0000       1.10
  @@ -20,6 +20,7 @@
   import org.apache.cocoon.forms.Constants;
   import org.apache.cocoon.forms.FormContext;
   import org.apache.cocoon.forms.datatype.SelectionList;
  +import org.apache.cocoon.forms.datatype.convertor.ConversionResult;
   import org.apache.cocoon.forms.event.ValueChangedEvent;
   import org.apache.cocoon.forms.event.WidgetEvent;
   import org.apache.cocoon.forms.util.I18nMessage;
  @@ -77,8 +78,10 @@
               Object[] tempValues = new Object[enteredValues.length];
               for (int i = 0; i < enteredValues.length; i++) {
                   String param = enteredValues[i];
  -                tempValues[i] = 
definition.getDatatype().convertFromString(param, formContext.getLocale());
  -                if (tempValues[i] == null) {
  +                ConversionResult conversionResult = 
definition.getDatatype().convertFromString(param, formContext.getLocale());
  +                if (conversionResult.isSuccessful()) {
  +                    tempValues[i] = conversionResult.getResult();
  +                } else {
                       conversionFailed = true;
                       break;
                   }
  @@ -98,7 +101,6 @@
               validationError = definition.getDatatype().validate(values, new 
ExpressionContextImpl(this));
           else
               validationError = new ValidationError(new 
I18nMessage("multivaluefield.conversionfailed", Constants.I18N_CATALOGUE));
  -
   
           return validationError == null ? super.validate() : false;
       }
  
  
  
  1.3       +3 -3      
cocoon-2.1/src/blocks/forms/test/org/apache/cocoon/forms/datatype/convertor/EnumConvertorTestCase.java
  
  Index: EnumConvertorTestCase.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/forms/test/org/apache/cocoon/forms/datatype/convertor/EnumConvertorTestCase.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- EnumConvertorTestCase.java        10 Mar 2004 09:13:22 -0000      1.2
  +++ EnumConvertorTestCase.java        6 May 2004 14:59:45 -0000       1.3
  @@ -38,9 +38,9 @@
        */
       public void testConvertFromString() {
           EnumConvertor convertor = new 
EnumConvertor("org.apache.cocoon.forms.datatype.Sex");
  -        Object sex = convertor.convertFromString
  +        ConversionResult conversionResult = convertor.convertFromString
               (Sex.class.getName() + ".FEMALE", Locale.getDefault(), null);
  -        assertSame("Returned sex must be FEMALE", Sex.FEMALE, sex);
  +        assertSame("Returned sex must be FEMALE", Sex.FEMALE, 
conversionResult.getResult());
       }
       
       /**
  
  
  

Reply via email to