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 }