001 package org.apache.tapestry.form.translator;
002
003 import org.apache.hivemind.ApplicationRuntimeException;
004 import org.apache.tapestry.form.IFormComponent;
005 import org.apache.tapestry.form.ValidationMessages;
006 import org.apache.tapestry.valid.ValidationConstraint;
007 import org.apache.tapestry.valid.ValidationStrings;
008 import org.apache.tapestry.valid.ValidatorException;
009
010 import java.math.BigDecimal;
011 import java.util.Locale;
012
013 /**
014 * Translator for {@link java.math.BigDecimal} objects.
015 */
016 public class BigDecimalTranslator extends AbstractTranslator {
017
018 public BigDecimalTranslator()
019 {
020 }
021
022 // Needed until HIVEMIND-134 fix is available
023 public BigDecimalTranslator(String initializer)
024 {
025 super(initializer);
026 }
027
028 protected String formatObject(IFormComponent field, Locale locale, Object object)
029 {
030 if (!BigDecimal.class.isInstance(object))
031 throw new ApplicationRuntimeException("BigDecimalTranslator translates values of type BigDecimal, not: " + object.getClass());
032
033 return object.toString();
034 }
035
036 protected Object parseText(IFormComponent field, ValidationMessages messages, String text)
037 throws ValidatorException
038 {
039 try {
040
041 return new BigDecimal(text);
042 }
043 catch (NumberFormatException e) {
044 throw new ValidatorException(buildMessage(messages, field, ValidationStrings.INVALID_NUMBER), ValidationConstraint.NUMBER_FORMAT);
045 }
046 }
047 }