You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by tv...@apache.org on 2007/04/08 16:51:22 UTC
svn commit: r526565 - in
/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src: dtd/
java/org/apache/turbine/services/intake/model/
java/org/apache/turbine/services/intake/transform/
java/org/apache/turbine/services/intake/validator/ java/org/apache/tu...
Author: tv
Date: Sun Apr 8 07:51:21 2007
New Revision: 526565
URL: http://svn.apache.org/viewvc?view=rev&rev=526565
Log:
Backported localization and custom fields from Fulcrum
Added:
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/AbstractNumberField.java
Modified:
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/dtd/intake.dtd
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/BigDecimalField.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/DoubleField.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/Field.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/FieldFactory.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/FloatField.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/NumberKeyField.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/transform/DTDResolver.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/BigDecimalValidator.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/DefaultValidator.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/DoubleValidator.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/FloatValidator.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/Validator.java
jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/xmlmodel/XmlField.java
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/dtd/intake.dtd
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/dtd/intake.dtd?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/dtd/intake.dtd (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/dtd/intake.dtd Sun Apr 8 07:51:21 2007
@@ -143,6 +143,15 @@
Default: default validator for the field type.
+fieldClass: Name of the class used for handling the field. This is used to
+ customize field types. The attribute is only interpreted if the
+ type attribute is set to "custom".
+
+ The the name of the class is not fully qualified, it will
+ be prepended with org.apache.turbine.services.intake.model.
+ For example: a value of "CurrencyField" will be read as
+ "org.apache.turbine.services.intake.model.CurrencyField".
+
mapToObject: Class name of the mapped object. This will override the
mapToObject attribute of the enclosing group element.
@@ -183,7 +192,7 @@
displaySize CDATA #IMPLIED
type ( boolean | BigDecimal | int | float | FileItem
| String | DateString | StringKey | NumberKey
- | ComboKey | double | short | long ) "String"
+ | ComboKey | double | short | long | custom ) "String"
multiValued ( true | false ) "false"
mapToObject CDATA #IMPLIED
mapToProperty CDATA #IMPLIED
Added: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/AbstractNumberField.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/AbstractNumberField.java?view=auto&rev=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/AbstractNumberField.java (added)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/AbstractNumberField.java Sun Apr 8 07:51:21 2007
@@ -0,0 +1,70 @@
+package org.apache.turbine.services.intake.model;
+
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.text.DecimalFormatSymbols;
+import java.util.Locale;
+
+import org.apache.turbine.services.intake.IntakeException;
+import org.apache.turbine.services.intake.xmlmodel.XmlField;
+
+/**
+ * Provides helper methods for localizing floating point numbers
+ *
+ * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
+ * @version $Id: BigDecimalField.java 223047 2004-07-01 11:30:52Z epugh $
+ */
+public abstract class AbstractNumberField
+ extends Field
+{
+ /**
+ * Constructor.
+ *
+ * @param field xml field definition object
+ * @param group xml group definition object
+ * @throws IntakeException thrown by superclass
+ */
+ public AbstractNumberField(XmlField field, Group group)
+ throws IntakeException
+ {
+ super(field, group);
+ }
+
+ /**
+ * Canonicalizes an user-inputted <code>BigDecimal</code> string
+ * to the system's internal format.
+ *
+ * @param number Text conforming to a <code>Number</code>
+ * description for a set of <code>DecimalFormatSymbols</code>.
+ * @return The canonicalized representation.
+ */
+ protected final String canonicalizeDecimalInput(String number)
+ {
+ if (getLocale() != null)
+ {
+ DecimalFormatSymbols internal = new DecimalFormatSymbols(Locale.US);
+ DecimalFormatSymbols user = new DecimalFormatSymbols(getLocale());
+
+ if (!internal.equals(user))
+ {
+ number = number.replace(user.getDecimalSeparator(),
+ internal.getDecimalSeparator());
+ }
+ }
+ return number;
+ }
+}
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/BigDecimalField.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/BigDecimalField.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/BigDecimalField.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/BigDecimalField.java Sun Apr 8 07:51:21 2007
@@ -18,9 +18,6 @@
import java.math.BigDecimal;
-import java.text.DecimalFormatSymbols;
-import java.util.Locale;
-
import org.apache.commons.lang.StringUtils;
import org.apache.turbine.services.intake.IntakeException;
@@ -32,10 +29,11 @@
* @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
* @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
* @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
+ * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
* @version $Id$
*/
public class BigDecimalField
- extends Field
+ extends AbstractNumberField
{
/**
* Constructor.
@@ -109,38 +107,14 @@
for (int i = 0; i < inputs.length; i++)
{
values[i] = StringUtils.isNotEmpty(inputs[i])
- ? canonicalizeDecimalInput(inputs[i]) : (BigDecimal) getEmptyValue();
+ ? new BigDecimal(canonicalizeDecimalInput(inputs[i])) : (BigDecimal) getEmptyValue();
}
setTestValue(values);
}
else
{
String val = parser.getString(getKey());
- setTestValue(StringUtils.isNotEmpty(val) ? canonicalizeDecimalInput(val) : (BigDecimal) getEmptyValue());
- }
- }
-
- /**
- * Canonicalizes an user-inputted <code>BigDecimal</code> string
- * to the system's internal format.
- *
- * @param bigDecimal Text conforming to a <code>BigDecimal</code>
- * description for a set of <code>DecimalFormatSymbols</code>.
- * @return The canonicalized representation.
- */
- protected final BigDecimal canonicalizeDecimalInput(String bigDecimal)
- {
- if (getLocale() != null)
- {
- DecimalFormatSymbols internal = new DecimalFormatSymbols(Locale.US);
- DecimalFormatSymbols user = new DecimalFormatSymbols(getLocale());
-
- if (!internal.equals(user))
- {
- bigDecimal = bigDecimal.replace(user.getDecimalSeparator(),
- internal.getDecimalSeparator());
- }
+ setTestValue(StringUtils.isNotEmpty(val) ? new BigDecimal(canonicalizeDecimalInput(val)) : (BigDecimal) getEmptyValue());
}
- return new BigDecimal(bigDecimal);
}
}
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/DoubleField.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/DoubleField.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/DoubleField.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/DoubleField.java Sun Apr 8 07:51:21 2007
@@ -29,7 +29,7 @@
* @version $Id$
*/
public class DoubleField
- extends Field
+ extends AbstractNumberField
{
/**
* Constructor.
@@ -82,7 +82,7 @@
}
/**
- * Provides access to emptyValue such that the value returned will be
+ * Provides access to emptyValue such that the value returned will be
* acceptable as an argument parameter to Method.invoke. Subclasses
* that deal with primitive types should ensure that they return an
* appropriate value wrapped in the object wrapper class for the
@@ -126,7 +126,7 @@
for (int i = 0; i < inputs.length; i++)
{
values[i] = StringUtils.isNotEmpty(inputs[i])
- ? new Double(inputs[i]).doubleValue()
+ ? new Double(canonicalizeDecimalInput(inputs[i])).doubleValue()
: ((Double) getEmptyValue()).doubleValue();
}
setTestValue(values);
@@ -134,8 +134,9 @@
else
{
String val = parser.getString(getKey());
- setTestValue(StringUtils.isNotEmpty(val)
- ? new Double(val) : (Double) getEmptyValue());
+ setTestValue(StringUtils.isNotEmpty(val)
+ ? new Double(canonicalizeDecimalInput(val))
+ : (Double) getEmptyValue());
}
}
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/Field.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/Field.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/Field.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/Field.java Sun Apr 8 07:51:21 2007
@@ -50,6 +50,7 @@
* @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
* @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
* @author <a href="mailto:jh@byteaction.de">Jürgen Hoffmann</a>
+ * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
* @version $Id$
*/
public abstract class Field
@@ -60,8 +61,11 @@
/** CGI Key for "value if absent" */
private static final String VALUE_IF_ABSENT_KEY = "_vifa_";
- /** Default Package */
- public static final String defaultFieldPackage = "org.apache.turbine.services.intake.validator.";
+ /** Default Validator Package */
+ public static final String defaultValidatorPackage = "org.apache.turbine.services.intake.validator.";
+
+ /** Default Field Package */
+ public static final String defaultFieldPackage = "org.apache.turbine.services.intake.model.";
// the following are set from the xml file and are permanent (final)
@@ -206,7 +210,7 @@
else if (validatorClassName != null
&& validatorClassName.indexOf('.') == -1)
{
- validatorClassName = defaultFieldPackage + validatorClassName;
+ validatorClassName = defaultValidatorPackage + validatorClassName;
}
if (validatorClassName != null)
@@ -378,12 +382,23 @@
}
/**
+ * Returns the <code>Group</code> this field belongs to
+ * or <code>null</code> if unknown.
+ *
+ * @return The group this field belongs to.
+ */
+ public Group getGroup()
+ {
+ return group;
+ }
+
+ /**
* Returns the <code>Locale</code> used when localizing data for
* this field, or <code>null</code> if unknown.
*
* @return Where to localize for.
*/
- protected Locale getLocale()
+ public Locale getLocale()
{
return locale;
}
@@ -408,6 +423,16 @@
}
/**
+ * Flag to determine whether the field has been declared as multi-valued.
+ *
+ * @return value of isMultiValued.
+ */
+ public boolean isMultiValued()
+ {
+ return isMultiValued;
+ }
+
+ /**
* Flag to determine whether the field has been declared as required.
*
* @return value of required.
@@ -591,22 +616,19 @@
}
}
-
if (validator != null)
{
// set the test value as a String[] which might be replaced by
// the correct type if the input is valid.
setTestValue(parser.getStrings(getKey()));
- for (int i = 0; i < stringValues.length; i++)
+
+ try
+ {
+ validator.assertValidity(this);
+ }
+ catch (ValidationException ve)
{
- try
- {
- validator.assertValidity(stringValues[i]);
- }
- catch (ValidationException ve)
- {
- setMessage(ve.getMessage());
- }
+ setMessage(ve.getMessage());
}
}
@@ -632,7 +654,7 @@
try
{
- validator.assertValidity(stringValue);
+ validator.assertValidity(this);
log.debug(name + ": Value is ok");
doSetValue();
}
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/FieldFactory.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/FieldFactory.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/FieldFactory.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/FieldFactory.java Sun Apr 8 07:51:21 2007
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;
@@ -28,6 +29,7 @@
* @author <a href="mailto:jmcnally@collab.net">John McNally</a>
* @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
* @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
+ * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
* @version $Id$
*/
public abstract class FieldFactory
@@ -152,6 +154,52 @@
throws IntakeException
{
return new LongField(f, g);
+ }
+ }
+ );
+ fieldCtors.put("custom", new FieldFactory.FieldCtor()
+ {
+ public Field getInstance(XmlField f, Group g)
+ throws IntakeException
+ {
+ String fieldClass = f.getFieldClass();
+
+ if (fieldClass != null
+ && fieldClass.indexOf('.') == -1)
+ {
+ fieldClass = Field.defaultFieldPackage + fieldClass;
+ }
+
+ if (fieldClass != null)
+ {
+ Class field;
+
+ try
+ {
+ field = Class.forName(fieldClass);
+ Constructor constructor =
+ field.getConstructor(new Class[] { XmlField.class, Group.class });
+
+ return (Field)constructor.newInstance(new Object[] { f, g });
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new IntakeException(
+ "Could not load Field class("
+ + fieldClass + ")", e);
+ }
+ catch (Exception e)
+ {
+ throw new IntakeException(
+ "Could not create new instance of Field("
+ + fieldClass + ")", e);
+ }
+ }
+ else
+ {
+ throw new IntakeException(
+ "Custom field types must define a fieldClass");
+ }
}
}
);
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/FloatField.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/FloatField.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/FloatField.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/FloatField.java Sun Apr 8 07:51:21 2007
@@ -32,9 +32,8 @@
* @version $Id$
*/
public class FloatField
- extends Field
+ extends AbstractNumberField
{
-
/**
* Constructor.
*
@@ -130,7 +129,7 @@
for (int i = 0; i < inputs.length; i++)
{
values[i] = StringUtils.isNotEmpty(inputs[i])
- ? new Float(inputs[i]).floatValue()
+ ? new Float(canonicalizeDecimalInput(inputs[i])).floatValue()
: ((Float) getEmptyValue()).floatValue();
}
setTestValue(values);
@@ -138,8 +137,9 @@
else
{
String val = parser.getString(getKey());
- setTestValue(StringUtils.isNotEmpty(val)
- ? new Float(val) : getEmptyValue());
+ setTestValue(StringUtils.isNotEmpty(val)
+ ? new Float(canonicalizeDecimalInput(val))
+ : getEmptyValue());
}
}
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/NumberKeyField.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/NumberKeyField.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/NumberKeyField.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/model/NumberKeyField.java Sun Apr 8 07:51:21 2007
@@ -103,7 +103,7 @@
String val = parser.getString(getKey());
if (StringUtils.isNotEmpty(val))
{
- BigDecimal bd = canonicalizeDecimalInput(val);
+ BigDecimal bd = new BigDecimal(canonicalizeDecimalInput(val));
setTestValue(new NumberKey(bd));
}
else
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/transform/DTDResolver.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/transform/DTDResolver.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/transform/DTDResolver.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/transform/DTDResolver.java Sun Apr 8 07:51:21 2007
@@ -40,7 +40,7 @@
public class DTDResolver implements EntityResolver
{
private static final String WEB_SITE_DTD =
- "http://jakarta.apache.org/turbine/dtd/intake_2_3.dtd";
+ "http://jakarta.apache.org/turbine/dtd/intake_2_3_3.dtd";
/** InputSource for <code>intake.dtd</code>. */
private InputSource intakeDTD = null;
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/BigDecimalValidator.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/BigDecimalValidator.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/BigDecimalValidator.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/BigDecimalValidator.java Sun Apr 8 07:51:21 2007
@@ -17,10 +17,13 @@
*/
import java.math.BigDecimal;
-
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.Locale;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
+import org.apache.turbine.services.intake.model.Field;
/**
* Validates BigDecimals with the following constraints in addition to those
@@ -38,6 +41,8 @@
*
* @author <a href="mailto:jmcnally@collab.net">John McNally</a>
* @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
+ * @author <a href="mailto:jh@byteaction.de">Jürgen Hoffmann</a>
+ * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
* @version $Id$
*/
public class BigDecimalValidator
@@ -95,14 +100,43 @@
}
/**
+ * Determine whether a field meets the criteria specified
+ * in the constraints defined for this validator
+ *
+ * @param field a <code>Field</code> to be tested
+ * @exception ValidationException containing an error message if the
+ * testValue did not pass the validation tests.
+ */
+ public void assertValidity(Field field)
+ throws ValidationException
+ {
+ Locale locale = field.getLocale();
+
+ if (field.isMultiValued())
+ {
+ String[] stringValues = (String[])field.getTestValue();
+
+ for (int i = 0; i < stringValues.length; i++)
+ {
+ assertValidity(stringValues[i], locale);
+ }
+ }
+ else
+ {
+ assertValidity((String)field.getTestValue(), locale);
+ }
+ }
+
+ /**
* Determine whether a testValue meets the criteria specified
* in the constraints defined for this validator
*
* @param testValue a <code>String</code> to be tested
+ * @param locale the Locale of the associated field
* @exception ValidationException containing an error message if the
* testValue did not pass the validation tests.
*/
- public void assertValidity(String testValue)
+ public void assertValidity(String testValue, Locale locale)
throws ValidationException
{
super.assertValidity(testValue);
@@ -110,11 +144,13 @@
if (required || StringUtils.isNotEmpty(testValue))
{
BigDecimal bd = null;
+ NumberFormat nf = NumberFormat.getInstance(locale);
try
{
- bd = new BigDecimal(testValue);
+ Number number = nf.parse(testValue);
+ bd = new BigDecimal(number.doubleValue());
}
- catch (RuntimeException e)
+ catch (ParseException e)
{
errorMessage = invalidNumberMessage;
throw new ValidationException(invalidNumberMessage);
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/DefaultValidator.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/DefaultValidator.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/DefaultValidator.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/DefaultValidator.java Sun Apr 8 07:51:21 2007
@@ -21,6 +21,7 @@
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.turbine.services.intake.model.Field;
/**
* DefaultValidator that will compare a testValue against the following
@@ -39,6 +40,7 @@
* @author <a href="mailto:jmcnally@collab.net">John McNally</a>
* @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
* @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
+ * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
* @version $Id$
*/
abstract public class DefaultValidator
@@ -126,11 +128,61 @@
}
/**
+ * Determine whether a field meets the criteria specified
+ * in the constraints defined for this validator
+ *
+ * @param field a <code>Field</code> to be tested
+ * @return true if valid, false otherwise
+ */
+ public boolean isValid(Field field)
+ {
+ boolean valid = false;
+ try
+ {
+ assertValidity(field);
+ valid = true;
+ }
+ catch (ValidationException ve)
+ {
+ valid = false;
+ }
+ return valid;
+ }
+
+ /**
+ * Determine whether a field meets the criteria specified
+ * in the constraints defined for this validator
+ *
+ * @param field a <code>Field</code> to be tested
+ * @exception ValidationException containing an error message if the
+ * testValue did not pass the validation tests.
+ */
+ public void assertValidity(Field field)
+ throws ValidationException
+ {
+ if (field.isMultiValued())
+ {
+ String[] stringValues = (String[])field.getTestValue();
+
+ for (int i = 0; i < stringValues.length; i++)
+ {
+ assertValidity(stringValues[i]);
+ }
+ }
+ else
+ {
+ assertValidity((String)field.getTestValue());
+ }
+ }
+
+ /**
* Determine whether a testValue meets the criteria specified
* in the constraints defined for this validator
*
* @param testValue a <code>String</code> to be tested
* @return true if valid, false otherwise
+ *
+ * @deprecated use isValid(Field) instead
*/
public boolean isValid(String testValue)
{
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/DoubleValidator.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/DoubleValidator.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/DoubleValidator.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/DoubleValidator.java Sun Apr 8 07:51:21 2007
@@ -16,9 +16,13 @@
* limitations under the License.
*/
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.Locale;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
+import org.apache.turbine.services.intake.model.Field;
/**
* Validates Doubles with the following constraints in addition to those
@@ -36,6 +40,8 @@
*
* @author <a href="mailto:jmcnally@collab.net">John McNally</a>
* @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
+ * @author <a href="mailto:jh@byteaction.de">Jürgen Hoffmann</a>
+ * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
* @version $Id$
*/
public class DoubleValidator
@@ -96,14 +102,43 @@
}
/**
+ * Determine whether a field meets the criteria specified
+ * in the constraints defined for this validator
+ *
+ * @param field a <code>Field</code> to be tested
+ * @exception ValidationException containing an error message if the
+ * testValue did not pass the validation tests.
+ */
+ public void assertValidity(Field field)
+ throws ValidationException
+ {
+ Locale locale = field.getLocale();
+
+ if (field.isMultiValued())
+ {
+ String[] stringValues = (String[])field.getTestValue();
+
+ for (int i = 0; i < stringValues.length; i++)
+ {
+ assertValidity(stringValues[i], locale);
+ }
+ }
+ else
+ {
+ assertValidity((String)field.getTestValue(), locale);
+ }
+ }
+
+ /**
* Determine whether a testValue meets the criteria specified
* in the constraints defined for this validator
*
* @param testValue a <code>String</code> to be tested
+ * @param locale the Locale of the associated field
* @exception ValidationException containing an error message if the
* testValue did not pass the validation tests.
*/
- public void assertValidity(String testValue)
+ public void assertValidity(String testValue, Locale locale)
throws ValidationException
{
super.assertValidity(testValue);
@@ -112,11 +147,13 @@
if (required || StringUtils.isNotEmpty(testValue))
{
+ NumberFormat nf = NumberFormat.getInstance(locale);
+
try
{
- d = Double.parseDouble(testValue);
+ d = nf.parse(testValue).doubleValue();
}
- catch (RuntimeException e)
+ catch (ParseException e)
{
errorMessage = invalidNumberMessage;
throw new ValidationException(invalidNumberMessage);
@@ -127,6 +164,7 @@
errorMessage = minValueMessage;
throw new ValidationException(minValueMessage);
}
+
if (d > maxValue)
{
errorMessage = maxValueMessage;
@@ -179,4 +217,4 @@
{
this.maxValue = value;
}
-}
+}
\ No newline at end of file
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/FloatValidator.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/FloatValidator.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/FloatValidator.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/FloatValidator.java Sun Apr 8 07:51:21 2007
@@ -16,9 +16,13 @@
* limitations under the License.
*/
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.Locale;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
+import org.apache.turbine.services.intake.model.Field;
/**
* Validates Floats with the following constraints in addition to those
@@ -36,6 +40,8 @@
*
* @author <a href="mailto:jmcnally@collab.net">John McNally</a>
* @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
+ * @author <a href="mailto:jh@byteaction.de">Jürgen Hoffmann</a>
+ * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
* @version $Id$
*/
public class FloatValidator
@@ -96,14 +102,43 @@
}
/**
+ * Determine whether a field meets the criteria specified
+ * in the constraints defined for this validator
+ *
+ * @param field a <code>Field</code> to be tested
+ * @exception ValidationException containing an error message if the
+ * testValue did not pass the validation tests.
+ */
+ public void assertValidity(Field field)
+ throws ValidationException
+ {
+ Locale locale = field.getLocale();
+
+ if (field.isMultiValued())
+ {
+ String[] stringValues = (String[])field.getTestValue();
+
+ for (int i = 0; i < stringValues.length; i++)
+ {
+ assertValidity(stringValues[i], locale);
+ }
+ }
+ else
+ {
+ assertValidity((String)field.getTestValue(), locale);
+ }
+ }
+
+ /**
* Determine whether a testValue meets the criteria specified
* in the constraints defined for this validator
*
* @param testValue a <code>String</code> to be tested
+ * @param locale the Locale of the associated field
* @exception ValidationException containing an error message if the
* testValue did not pass the validation tests.
*/
- public void assertValidity(String testValue)
+ public void assertValidity(String testValue, Locale locale)
throws ValidationException
{
super.assertValidity(testValue);
@@ -111,11 +146,13 @@
if (required || StringUtils.isNotEmpty(testValue))
{
float f = 0.0f;
+ NumberFormat nf = NumberFormat.getInstance(locale);
+
try
{
- f = Float.parseFloat(testValue);
+ f = nf.parse(testValue).floatValue();
}
- catch (RuntimeException e)
+ catch (ParseException e)
{
errorMessage = invalidNumberMessage;
throw new ValidationException(invalidNumberMessage);
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/Validator.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/Validator.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/Validator.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/validator/Validator.java Sun Apr 8 07:51:21 2007
@@ -1,5 +1,7 @@
package org.apache.turbine.services.intake.validator;
+import org.apache.turbine.services.intake.model.Field;
+
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
@@ -20,6 +22,7 @@
* Validator api.
*
* @author <a href="mailto:jmcnally@collab.net">John McNally</a>
+ * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
* @version $Id$
*/
public interface Validator
@@ -52,11 +55,33 @@
String REQUIRED_RULE_NAME = "required";
/**
+ * Determine whether a field meets the criteria specified
+ * in the constraints defined for this validator
+ *
+ * @param field a <code>Field</code> to be tested
+ * @return true if valid, false otherwise
+ */
+ boolean isValid(Field field);
+
+ /**
+ * Determine whether a field meets the criteria specified
+ * in the constraints defined for this validator
+ *
+ * @param field a <code>Field</code> to be tested
+ * @exception ValidationException containing an error message if the
+ * testValue did not pass the validation tests.
+ */
+ void assertValidity(Field field)
+ throws ValidationException;
+
+ /**
* Determine whether a testValue meets the criteria specified
* in the constraints defined for this validator
*
* @param testValue a <code>String</code> to be tested
* @return true if valid, false otherwise
+ *
+ * @deprecated use isValid(Field) instead
*/
boolean isValid(String testValue);
Modified: jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/xmlmodel/XmlField.java
URL: http://svn.apache.org/viewvc/jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/xmlmodel/XmlField.java?view=diff&rev=526565&r1=526564&r2=526565
==============================================================================
--- jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/xmlmodel/XmlField.java (original)
+++ jakarta/turbine/core/branches/TURBINE_2_3_BRANCH/src/java/org/apache/turbine/services/intake/xmlmodel/XmlField.java Sun Apr 8 07:51:21 2007
@@ -37,6 +37,7 @@
* @author <a href="mailto:jmcnally@collab.net">John McNally</a>
* @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
* @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
+ * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a>
* @version $Id$
*/
public class XmlField
@@ -60,6 +61,7 @@
private String defaultValue;
private String emptyValue;
private String displaySize;
+ private String fieldClass;
/**
* Default Constructor
@@ -99,6 +101,7 @@
}
setMapToProperty(attrib.getValue("mapToProperty"));
+ setFieldClass(attrib.getValue("fieldClass"));
setValidator(attrib.getValue("validator"));
setDefaultValue(attrib.getValue("defaultValue"));
setEmptyValue(attrib.getValue("emptyValue"));
@@ -362,6 +365,26 @@
public void setIfRequiredMessage(String v)
{
this.ifRequiredMessage = v;
+ }
+
+ /**
+ * Get the value of fieldClass.
+ *
+ * @return value of fieldClass.
+ */
+ public String getFieldClass()
+ {
+ return fieldClass;
+ }
+
+ /**
+ * Set the value of fieldClass.
+ *
+ * @param v Value to assign to fieldClass.
+ */
+ public void setFieldClass(String v)
+ {
+ this.fieldClass = v;
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org