Class RMNumberFormat

  • All Implemented Interfaces:
    RMArchiver.Archiving, RMFormat, java.io.Serializable, java.lang.Cloneable

    public class RMNumberFormat
    extends java.text.DecimalFormat
    implements RMFormat, RMArchiver.Archiving
    This subclass extends DecimalFormat to implement ReportMill's RMFormat interface and to support the extended features "Negative in Red" and "Null String". It also has a toPattern like method, getFormatString, for the purposes of archival.

    Those getFormatString/setFormatString support arbitrary decimal and grouping separators. This may be dangerous since when people use the default English versions of those, I think they change depending on the default JVM Locale. Only dangerous if someone wants to generate English Separators from a foreign local, I guess.

    Also, our modified pattern format can be ambiguous if either decimal or grouping separator not included. In this case we assume any separator preceded by a '0' is the decimal separator. This seems reasonable since a decimal separator preceded by # could result in an empty string or a fractional number with no leading zero (like ".123" instead of "0.123") which seems somewhat rare. And also a grouping separator preceeded by 0 seems somewhat rare because it could result in a long zero string like "0,000".

    I suppose we should instead have a syntax explicitly declaring decimal and group separators: "$ #,##0.00;ds=,;gs=.".

    See Also:
    Serialized Form
    • Nested Class Summary

      • Nested classes/interfaces inherited from class java.text.NumberFormat

        java.text.NumberFormat.Field
    • Constructor Summary

      Constructors 
      Constructor Description
      RMNumberFormat()
      Creates an uninitialized number format.
      RMNumberFormat​(RMNumberFormat aFormat)
      Creates a number format identical to the given format.
      RMNumberFormat​(java.lang.String aFormatString)
      Creates a number format for the given format string.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean equals​(java.lang.Object anObj)
      Standard equals implementation.
      java.lang.Object formatRM​(java.lang.Object anObj)
      Returns a formatted version of the given object.
      java.lang.Object fromXML​(RXArchiver anArchiver, RXElement anElement)
      XML unarchival.
      java.lang.String getDecimalSeparator()
      Returns the decimal separator.
      java.lang.String getFormatString()
      Returns the format string for this format.
      java.lang.String getNullString()
      Returns the String that is substituted when this format is asked to provide stringForObjectValue(null).
      java.lang.String getThousandsSeparator()
      Returns the thousands separator.
      java.lang.Object initWithArchiver​(RMArchiver anArchiver)
      Legacy archival.
      boolean isNegativeInRed()
      Returns whether this format shows negative values in red.
      void setDecimalSeparator​(java.lang.String aValue)
      Sets the decimal separator.
      void setFormatString​(java.lang.String aFormat)
      Sets the format string for this format.
      void setNegativeInRed​(boolean aFlag)
      Sets whether this format shows negative values in red.
      void setNullString​(java.lang.String aString)
      Sets the String that is substituted when this format is asked to provide stringForObjectValue(null).
      void setThousandsSeparator​(java.lang.String aValue)
      Sets the thousands separator.
      RXElement toXML​(RXArchiver anArchiver)
      XML archival.
      • Methods inherited from class java.text.DecimalFormat

        applyLocalizedPattern, applyPattern, clone, format, format, format, formatToCharacterIterator, getCurrency, getDecimalFormatSymbols, getGroupingSize, getMaximumFractionDigits, getMaximumIntegerDigits, getMinimumFractionDigits, getMinimumIntegerDigits, getMultiplier, getNegativePrefix, getNegativeSuffix, getPositivePrefix, getPositiveSuffix, getRoundingMode, hashCode, isDecimalSeparatorAlwaysShown, isParseBigDecimal, parse, setCurrency, setDecimalFormatSymbols, setDecimalSeparatorAlwaysShown, setGroupingSize, setGroupingUsed, setMaximumFractionDigits, setMaximumIntegerDigits, setMinimumFractionDigits, setMinimumIntegerDigits, setMultiplier, setNegativePrefix, setNegativeSuffix, setParseBigDecimal, setPositivePrefix, setPositiveSuffix, setRoundingMode, toLocalizedPattern, toPattern
      • Methods inherited from class java.text.NumberFormat

        format, format, getAvailableLocales, getCurrencyInstance, getCurrencyInstance, getInstance, getInstance, getIntegerInstance, getIntegerInstance, getNumberInstance, getNumberInstance, getPercentInstance, getPercentInstance, isGroupingUsed, isParseIntegerOnly, parse, parseObject, setParseIntegerOnly
      • Methods inherited from class java.text.Format

        format, parseObject
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • RMNumberFormat

        public RMNumberFormat()
        Creates an uninitialized number format.
      • RMNumberFormat

        public RMNumberFormat​(java.lang.String aFormatString)
        Creates a number format for the given format string.
      • RMNumberFormat

        public RMNumberFormat​(RMNumberFormat aFormat)
        Creates a number format identical to the given format.
    • Method Detail

      • getNullString

        public java.lang.String getNullString()
        Returns the String that is substituted when this format is asked to provide stringForObjectValue(null).
      • setNullString

        public void setNullString​(java.lang.String aString)
        Sets the String that is substituted when this format is asked to provide stringForObjectValue(null).
      • isNegativeInRed

        public boolean isNegativeInRed()
        Returns whether this format shows negative values in red.
      • setNegativeInRed

        public void setNegativeInRed​(boolean aFlag)
        Sets whether this format shows negative values in red.
      • getThousandsSeparator

        public java.lang.String getThousandsSeparator()
        Returns the thousands separator.
      • setThousandsSeparator

        public void setThousandsSeparator​(java.lang.String aValue)
        Sets the thousands separator.
      • getDecimalSeparator

        public java.lang.String getDecimalSeparator()
        Returns the decimal separator.
      • setDecimalSeparator

        public void setDecimalSeparator​(java.lang.String aValue)
        Sets the decimal separator.
      • getFormatString

        public java.lang.String getFormatString()
        Returns the format string for this format. This is basically the default toPattern() of DecimalFormat, except that it allows for a arbitrary decimal and grouping separators.
        Specified by:
        getFormatString in interface RMFormat
      • setFormatString

        public void setFormatString​(java.lang.String aFormat)
        Sets the format string for this format. This is basically the default applyPattern() of DecimalFormat, except that it allows for arbitrary decimal and grouping separators.
        Specified by:
        setFormatString in interface RMFormat
      • formatRM

        public java.lang.Object formatRM​(java.lang.Object anObj)
        Returns a formatted version of the given object.
        Specified by:
        formatRM in interface RMFormat
      • equals

        public boolean equals​(java.lang.Object anObj)
        Standard equals implementation.
        Overrides:
        equals in class java.text.DecimalFormat