001    // Copyright 2009 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry5.internal.translator;
016    
017    import org.apache.tapestry5.Field;
018    import org.apache.tapestry5.MarkupWriter;
019    import org.apache.tapestry5.ValidationException;
020    import org.apache.tapestry5.services.FormSupport;
021    
022    import java.text.ParseException;
023    
024    /**
025     * Uses a {@link org.apache.tapestry5.internal.translator.NumericTranslatorSupport} to provide proper locale-aware
026     * support for all the built-in numeric types.
027     *
028     * @since 5.1.0.1
029     */
030    public class NumericTranslator<T extends Number> extends AbstractTranslator<T>
031    {
032        private final NumericTranslatorSupport support;
033    
034        public NumericTranslator(String name, Class<T> type, NumericTranslatorSupport support)
035        {
036            super(name, type, support.getMessageKey(type));
037    
038            this.support = support;
039        }
040    
041        public void render(Field field, String message, MarkupWriter writer, FormSupport formSupport)
042        {
043            if (formSupport.isClientValidationEnabled())
044                support.addValidation(getType(), field, message);
045        }
046    
047        public T parseClient(Field field, String clientValue, String message) throws ValidationException
048        {
049            try
050            {
051                return support.parseClient(getType(), clientValue);
052            }
053            catch (ParseException ex)
054            {
055                throw new ValidationException(message);
056            }
057        }
058    
059        public String toClient(T value)
060        {
061            return support.toClient(getType(), value);
062        }
063    }