Class NumberConverter

  • All Implemented Interfaces:
    Converter
    Direct Known Subclasses:
    BigDecimalConverter, BigIntegerConverter, ByteConverter, DoubleConverter, FloatConverter, IntegerConverter, LongConverter, ShortConverter

    public abstract class NumberConverter
    extends AbstractConverter
    Converter implementaion that handles conversion to and from java.lang.Number objects.

    This implementation handles conversion for the following java.lang.Number types.

    • java.lang.Byte
    • java.lang.Short
    • java.lang.Integer
    • java.lang.Long
    • java.lang.Float
    • java.lang.Double
    • java.math.BigDecimal
    • java.math.BigInteger

    String Conversions (to and from)

    This class provides a number of ways in which number conversions to/from Strings can be achieved:
    • Using the default format for the default Locale, configure using:
      • setUseLocaleFormat(true)
    • Using the default format for a specified Locale, configure using:
      • setLocale(Locale)
    • Using a specified pattern for the default Locale, configure using:
      • setPattern(String)
    • Using a specified pattern for a specified Locale, configure using:
      • setPattern(String)
      • setLocale(Locale)
    • If none of the above are configured the toNumber(String) method is used to convert from String to Number and the Number's toString() method used to convert from Number to String.

    N.B.Patterns can only be specified using the standard pattern characters and NOT in localized form (see java.text.DecimalFormat). For example to cater for number styles used in Germany such as 0.000,00 the pattern is specified in the normal form 0,000.00 and the locale set to Locale.GERMANY.

    Since:
    1.8.0
    Version:
    $Id: NumberConverter.java 1546738 2013-11-30 16:24:19Z oheger $
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private boolean allowDecimals  
      private java.util.Locale locale  
      private static java.lang.Integer ONE  
      private java.lang.String pattern  
      private boolean useLocaleFormat  
      private static java.lang.Integer ZERO  
    • Constructor Summary

      Constructors 
      Constructor Description
      NumberConverter​(boolean allowDecimals)
      Construct a java.lang.Number Converter that throws a ConversionException if a error occurs.
      NumberConverter​(boolean allowDecimals, java.lang.Object defaultValue)
      Construct a java.lang.Number Converter that returns a default value if an error occurs.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected java.lang.String convertToString​(java.lang.Object value)
      Convert an input Number object into a String.
      protected <T> T convertToType​(java.lang.Class<T> targetType, java.lang.Object value)
      Convert the input object into a Number object of the specified type.
      private java.text.NumberFormat getFormat()
      Return a NumberFormat to use for Conversion.
      java.util.Locale getLocale()
      Return the Locale for the Converter (or null if none specified).
      java.lang.String getPattern()
      Return the number format pattern used to convert Numbers to/from a java.lang.String (or null if none specified).
      boolean isAllowDecimals()
      Return whether decimals are allowed in the number.
      private java.lang.Number parse​(java.lang.Class<?> sourceType, java.lang.Class<?> targetType, java.lang.String value, java.text.NumberFormat format)
      Convert a String into a Number object.
      void setLocale​(java.util.Locale locale)
      Set the Locale for the Converter.
      void setPattern​(java.lang.String pattern)
      Set a number format pattern to use to convert Numbers to/from a java.lang.String.
      void setUseLocaleFormat​(boolean useLocaleFormat)
      Set whether a format should be used to convert the Number.
      private java.lang.Number toNumber​(java.lang.Class<?> sourceType, java.lang.Class<?> targetType, java.lang.String value)
      Default String to Number conversion.
      private <T> T toNumber​(java.lang.Class<?> sourceType, java.lang.Class<T> targetType, java.lang.Number value)
      Convert any Number object to the specified type for this Converter.
      java.lang.String toString()
      Provide a String representation of this number converter.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • ZERO

        private static final java.lang.Integer ZERO
      • ONE

        private static final java.lang.Integer ONE
      • pattern

        private java.lang.String pattern
      • allowDecimals

        private final boolean allowDecimals
      • useLocaleFormat

        private boolean useLocaleFormat
      • locale

        private java.util.Locale locale
    • Constructor Detail

      • NumberConverter

        public NumberConverter​(boolean allowDecimals)
        Construct a java.lang.Number Converter that throws a ConversionException if a error occurs.
        Parameters:
        allowDecimals - Indicates whether decimals are allowed
      • NumberConverter

        public NumberConverter​(boolean allowDecimals,
                               java.lang.Object defaultValue)
        Construct a java.lang.Number Converter that returns a default value if an error occurs.
        Parameters:
        allowDecimals - Indicates whether decimals are allowed
        defaultValue - The default value to be returned
    • Method Detail

      • isAllowDecimals

        public boolean isAllowDecimals()
        Return whether decimals are allowed in the number.
        Returns:
        Whether decimals are allowed in the number
      • setUseLocaleFormat

        public void setUseLocaleFormat​(boolean useLocaleFormat)
        Set whether a format should be used to convert the Number.
        Parameters:
        useLocaleFormat - true if a number format should be used.
      • getPattern

        public java.lang.String getPattern()
        Return the number format pattern used to convert Numbers to/from a java.lang.String (or null if none specified).

        See java.text.DecimalFormat for details of how to specify the pattern.

        Returns:
        The format pattern.
      • setPattern

        public void setPattern​(java.lang.String pattern)
        Set a number format pattern to use to convert Numbers to/from a java.lang.String.

        See java.text.DecimalFormat for details of how to specify the pattern.

        Parameters:
        pattern - The format pattern.
      • getLocale

        public java.util.Locale getLocale()
        Return the Locale for the Converter (or null if none specified).
        Returns:
        The locale to use for conversion
      • setLocale

        public void setLocale​(java.util.Locale locale)
        Set the Locale for the Converter.
        Parameters:
        locale - The locale to use for conversion
      • convertToString

        protected java.lang.String convertToString​(java.lang.Object value)
                                            throws java.lang.Throwable
        Convert an input Number object into a String.
        Overrides:
        convertToString in class AbstractConverter
        Parameters:
        value - The input value to be converted
        Returns:
        the converted String value.
        Throws:
        java.lang.Throwable - if an error occurs converting to a String
      • convertToType

        protected <T> T convertToType​(java.lang.Class<T> targetType,
                                      java.lang.Object value)
                               throws java.lang.Throwable
        Convert the input object into a Number object of the specified type.
        Specified by:
        convertToType in class AbstractConverter
        Type Parameters:
        T - Target type of the conversion.
        Parameters:
        targetType - Data type to which this value should be converted.
        value - The input value to be converted.
        Returns:
        The converted value.
        Throws:
        java.lang.Throwable - if an error occurs converting to the specified type
      • toNumber

        private <T> T toNumber​(java.lang.Class<?> sourceType,
                               java.lang.Class<T> targetType,
                               java.lang.Number value)
        Convert any Number object to the specified type for this Converter.

        This method handles conversion to the following types:

        • java.lang.Byte
        • java.lang.Short
        • java.lang.Integer
        • java.lang.Long
        • java.lang.Float
        • java.lang.Double
        • java.math.BigDecimal
        • java.math.BigInteger
        Parameters:
        sourceType - The type being converted from
        targetType - The Number type to convert to
        value - The Number to convert.
        Returns:
        The converted value.
      • toNumber

        private java.lang.Number toNumber​(java.lang.Class<?> sourceType,
                                          java.lang.Class<?> targetType,
                                          java.lang.String value)
        Default String to Number conversion.

        This method handles conversion from a String to the following types:

        • java.lang.Byte
        • java.lang.Short
        • java.lang.Integer
        • java.lang.Long
        • java.lang.Float
        • java.lang.Double
        • java.math.BigDecimal
        • java.math.BigInteger
        Parameters:
        sourceType - The type being converted from
        targetType - The Number type to convert to
        value - The String value to convert.
        Returns:
        The converted Number value.
      • toString

        public java.lang.String toString()
        Provide a String representation of this number converter.
        Overrides:
        toString in class AbstractConverter
        Returns:
        A String representation of this number converter
      • getFormat

        private java.text.NumberFormat getFormat()
        Return a NumberFormat to use for Conversion.
        Returns:
        The NumberFormat.
      • parse

        private java.lang.Number parse​(java.lang.Class<?> sourceType,
                                       java.lang.Class<?> targetType,
                                       java.lang.String value,
                                       java.text.NumberFormat format)
        Convert a String into a Number object.
        Parameters:
        sourceType - the source type of the conversion
        targetType - The type to convert the value to
        value - The String date value.
        format - The NumberFormat to parse the String value.
        Returns:
        The converted Number object.
        Throws:
        ConversionException - if the String cannot be converted.