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());
}
/**