Class RMNumberFormat

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

    public class RMNumberFormat
    extends java.text.DecimalFormat
    implements RMFormat
    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.

    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 preceded 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=.".

    Removed arbitrary decimal and grouping separators in 7.8.1

    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 Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected java.text.DecimalFormatSymbols createDecimalFormatSymbols()
      Creates new decimal format symbols.
      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.
      static java.util.Locale getDefaultLocale()
      Returns the default locale.
      java.lang.String getFormatString()
      Returns the format string for this format.
      java.lang.String getLocalCurrencySymbol()
      Returns the Currency symbol used for this locale.
      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.
      boolean isCurrencySymbolUsed()
      Returns whether currency symbol is used (dollars, local or international).
      boolean isLocalCurrencySymbolUsed()
      Returns whether local currency symbol is used.
      boolean isNegativeInRed()
      Returns whether this format shows negative values in red.
      boolean isPercentSymbolUsed()
      Returns whether percent symbol is used.
      void setDecimalSeparator​(java.lang.String aValue)
      Sets the decimal separator.
      static void setDefaultLocale​(java.util.Locale aLocale)
      Sets the default locale.
      void setFormatString​(java.lang.String aFormat)
      Sets the format string for this format.
      protected void setFormatStringSafe​(java.lang.String aFormat)
      Used when deserializing, because we don't want an exception messing with opening the report.
      void setLocalCurrencySymbolUsed​(boolean aFlag)
      Sets whether local currency symbol is used.
      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 setPercentSymbolUsed​(boolean aFlag)
      Returns whether percent symbol is used.
      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

      • createDecimalFormatSymbols

        @Nullable
        protected java.text.DecimalFormatSymbols createDecimalFormatSymbols()
        Creates new decimal format symbols.
      • 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.
      • getLocalCurrencySymbol

        public java.lang.String getLocalCurrencySymbol()
        Returns the Currency symbol used for this locale.
      • isLocalCurrencySymbolUsed

        public boolean isLocalCurrencySymbolUsed()
        Returns whether local currency symbol is used.
      • setLocalCurrencySymbolUsed

        public void setLocalCurrencySymbolUsed​(boolean aFlag)
        Sets whether local currency symbol is used.
      • isCurrencySymbolUsed

        public boolean isCurrencySymbolUsed()
        Returns whether currency symbol is used (dollars, local or international).
      • isPercentSymbolUsed

        public boolean isPercentSymbolUsed()
        Returns whether percent symbol is used.
      • setPercentSymbolUsed

        public void setPercentSymbolUsed​(boolean aFlag)
        Returns whether percent symbol is used.
      • 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.

        Ability to set arbitrary decimal and grouping separators removed in 7.8.1, but left this intact in case someone set them in 7.8.0. And then removed altogether in 7.8.2, because it plays havoc in non-English locales. If users need a whacky formatting, they need to do it themselves in scripting.

        Specified by:
        getFormatString in interface RMFormat
      • setFormatString

        public void setFormatString​(@Nonnull
                                    java.lang.String aFormat)
        Sets the format string for this format. This is basically the default applyPattern() of DecimalFormat.

        Removed ability to set arbitrary decimal and grouping separators in 7.8.1, in favor of compatibility with rest of ignition.

        Specified by:
        setFormatString in interface RMFormat
      • setFormatStringSafe

        protected void setFormatStringSafe​(@Nonnull
                                           java.lang.String aFormat)
        Used when deserializing, because we don't want an exception messing with opening the report. We'll prevent users from setting a bad string themselves with setFormatString
      • formatRM

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

        public static java.util.Locale getDefaultLocale()
        Returns the default locale.
      • setDefaultLocale

        public static void setDefaultLocale​(java.util.Locale aLocale)
        Sets the default locale.
      • equals

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