Package org.apache.commons.text
Class ExtendedMessageFormat
- java.lang.Object
-
- java.text.Format
-
- java.text.MessageFormat
-
- org.apache.commons.text.ExtendedMessageFormat
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
public class ExtendedMessageFormat extends java.text.MessageFormat
Extendsjava.text.MessageFormat
to allow pluggable/additional formatting options for embedded format elements. Client code should specify a registry ofFormatFactory
instances associated withString
format names. This registry will be consulted when the format elements are parsed from the message pattern. In this way custom patterns can be specified, and the formats supported byjava.text.MessageFormat
can be overridden at the format and/or format style level (see MessageFormat). A "format element" embedded in the message pattern is specified (()? signifies optionality):
{}<i>argument-number</i><b>(</b>{@code ,}<i>format-name</i><b> (</b>{@code ,}<i>format-style</i><b>)?)?</b>{@code }
format-name and format-style values are trimmed of surrounding whitespace in the manner of
java.text.MessageFormat
. If format-name denotesFormatFactory formatFactoryInstance
inregistry
, aFormat
matching format-name and format-style is requested fromformatFactoryInstance
. If this is successful, theFormat
found is used for this format element.NOTICE: The various subformat mutator methods are considered unnecessary; they exist on the parent class to allow the type of customization which it is the job of this class to provide in a configurable fashion. These methods have thus been disabled and will throw
UnsupportedOperationException
if called.Limitations inherited from
java.text.MessageFormat
:- When using "choice" subformats, support for nested formatting instructions is limited to that provided by the base class.
- Thread-safety of
Format
s, includingMessageFormat
and thusExtendedMessageFormat
, is not guaranteed.
- Since:
- 1.0
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String
DUMMY_PATTERN
The empty string.private static char
END_FE
A right side squiggly brace.private static int
HASH_SEED
Our initial seed value for calculating hashes.private static char
QUOTE
A properly escaped character representing a single quote.private java.util.Map<java.lang.String,? extends FormatFactory>
registry
Our registry of FormatFactory.private static long
serialVersionUID
Serializable Object.private static char
START_FE
A left side squiggly brace.private static char
START_FMT
A comma.private java.lang.String
toPattern
To pattern string.
-
Constructor Summary
Constructors Constructor Description ExtendedMessageFormat(java.lang.String pattern)
Constructs a new ExtendedMessageFormat for the default locale.ExtendedMessageFormat(java.lang.String pattern, java.util.Locale locale)
Constructs a new ExtendedMessageFormat.ExtendedMessageFormat(java.lang.String pattern, java.util.Locale locale, java.util.Map<java.lang.String,? extends FormatFactory> registry)
Constructs a new ExtendedMessageFormat.ExtendedMessageFormat(java.lang.String pattern, java.util.Map<java.lang.String,? extends FormatFactory> registry)
Constructs a new ExtendedMessageFormat for the default locale.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
appendQuotedString(java.lang.String pattern, java.text.ParsePosition pos, java.lang.StringBuilder appendTo)
Consumes a quoted string, adding it toappendTo
if specified.void
applyPattern(java.lang.String pattern)
Applies the specified pattern.private boolean
containsElements(java.util.Collection<?> coll)
Tests whether the specified Collection contains non-null elements.boolean
equals(java.lang.Object obj)
Tests if this extended message format is equal to another object.private java.text.Format
getFormat(java.lang.String desc)
Gets a custom format from a format description.private void
getQuotedString(java.lang.String pattern, java.text.ParsePosition pos)
Consumes quoted string only.int
hashCode()
private java.lang.String
insertFormats(java.lang.String pattern, java.util.ArrayList<java.lang.String> customPatterns)
Inserts formats back into the pattern for toPattern() support.private java.text.ParsePosition
next(java.text.ParsePosition pos)
Advances parse position by 1.private java.lang.String
parseFormatDescription(java.lang.String pattern, java.text.ParsePosition pos)
Parses the format component of a format element.private int
readArgumentIndex(java.lang.String pattern, java.text.ParsePosition pos)
Reads the argument index from the current format element.private void
seekNonWs(java.lang.String pattern, java.text.ParsePosition pos)
Consumes whitespace from the current parse position.void
setFormat(int formatElementIndex, java.text.Format newFormat)
Throws UnsupportedOperationException - see class Javadoc for details.void
setFormatByArgumentIndex(int argumentIndex, java.text.Format newFormat)
Throws UnsupportedOperationException - see class Javadoc for details.void
setFormats(java.text.Format[] newFormats)
Throws UnsupportedOperationException - see class Javadoc for details.void
setFormatsByArgumentIndex(java.text.Format[] newFormats)
Throws UnsupportedOperationException - see class Javadoc for details.java.lang.String
toPattern()
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
Serializable Object.- See Also:
- Constant Field Values
-
HASH_SEED
private static final int HASH_SEED
Our initial seed value for calculating hashes.- See Also:
- Constant Field Values
-
DUMMY_PATTERN
private static final java.lang.String DUMMY_PATTERN
The empty string.- See Also:
- Constant Field Values
-
START_FMT
private static final char START_FMT
A comma.- See Also:
- Constant Field Values
-
END_FE
private static final char END_FE
A right side squiggly brace.- See Also:
- Constant Field Values
-
START_FE
private static final char START_FE
A left side squiggly brace.- See Also:
- Constant Field Values
-
QUOTE
private static final char QUOTE
A properly escaped character representing a single quote.- See Also:
- Constant Field Values
-
toPattern
private java.lang.String toPattern
To pattern string.
-
registry
private final java.util.Map<java.lang.String,? extends FormatFactory> registry
Our registry of FormatFactory.
-
-
Constructor Detail
-
ExtendedMessageFormat
public ExtendedMessageFormat(java.lang.String pattern)
Constructs a new ExtendedMessageFormat for the default locale.- Parameters:
pattern
- the pattern to use, not null- Throws:
java.lang.IllegalArgumentException
- in case of a bad pattern.
-
ExtendedMessageFormat
public ExtendedMessageFormat(java.lang.String pattern, java.util.Locale locale)
Constructs a new ExtendedMessageFormat.- Parameters:
pattern
- the pattern to use, not nulllocale
- the locale to use, not null- Throws:
java.lang.IllegalArgumentException
- in case of a bad pattern.
-
ExtendedMessageFormat
public ExtendedMessageFormat(java.lang.String pattern, java.util.Locale locale, java.util.Map<java.lang.String,? extends FormatFactory> registry)
Constructs a new ExtendedMessageFormat.- Parameters:
pattern
- the pattern to use, not nulllocale
- the locale to use, not nullregistry
- the registry of format factories, may be null- Throws:
java.lang.IllegalArgumentException
- in case of a bad pattern.
-
ExtendedMessageFormat
public ExtendedMessageFormat(java.lang.String pattern, java.util.Map<java.lang.String,? extends FormatFactory> registry)
Constructs a new ExtendedMessageFormat for the default locale.- Parameters:
pattern
- the pattern to use, not nullregistry
- the registry of format factories, may be null- Throws:
java.lang.IllegalArgumentException
- in case of a bad pattern.
-
-
Method Detail
-
appendQuotedString
private void appendQuotedString(java.lang.String pattern, java.text.ParsePosition pos, java.lang.StringBuilder appendTo)
Consumes a quoted string, adding it toappendTo
if specified.- Parameters:
pattern
- pattern to parsepos
- current parse positionappendTo
- optional StringBuilder to append
-
applyPattern
public final void applyPattern(java.lang.String pattern)
Applies the specified pattern.- Overrides:
applyPattern
in classjava.text.MessageFormat
- Parameters:
pattern
- String
-
containsElements
private boolean containsElements(java.util.Collection<?> coll)
Tests whether the specified Collection contains non-null elements.- Parameters:
coll
- to check- Returns:
true
if some Object was found,false
otherwise.
-
equals
public boolean equals(java.lang.Object obj)
Tests if this extended message format is equal to another object.- Overrides:
equals
in classjava.text.MessageFormat
- Parameters:
obj
- the object to compare to- Returns:
- true if this object equals the other, otherwise false
-
getFormat
private java.text.Format getFormat(java.lang.String desc)
Gets a custom format from a format description.- Parameters:
desc
- String- Returns:
- Format
-
getQuotedString
private void getQuotedString(java.lang.String pattern, java.text.ParsePosition pos)
Consumes quoted string only.- Parameters:
pattern
- pattern to parsepos
- current parse position
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.text.MessageFormat
-
insertFormats
private java.lang.String insertFormats(java.lang.String pattern, java.util.ArrayList<java.lang.String> customPatterns)
Inserts formats back into the pattern for toPattern() support.- Parameters:
pattern
- sourcecustomPatterns
- The custom patterns to re-insert, if any- Returns:
- full pattern
-
next
private java.text.ParsePosition next(java.text.ParsePosition pos)
Advances parse position by 1.- Parameters:
pos
- ParsePosition- Returns:
pos
-
parseFormatDescription
private java.lang.String parseFormatDescription(java.lang.String pattern, java.text.ParsePosition pos)
Parses the format component of a format element.- Parameters:
pattern
- string to parsepos
- current parse position- Returns:
- Format description String
-
readArgumentIndex
private int readArgumentIndex(java.lang.String pattern, java.text.ParsePosition pos)
Reads the argument index from the current format element.- Parameters:
pattern
- pattern to parsepos
- current parse position- Returns:
- argument index
-
seekNonWs
private void seekNonWs(java.lang.String pattern, java.text.ParsePosition pos)
Consumes whitespace from the current parse position.- Parameters:
pattern
- String to readpos
- current position
-
setFormat
public void setFormat(int formatElementIndex, java.text.Format newFormat)
Throws UnsupportedOperationException - see class Javadoc for details.- Overrides:
setFormat
in classjava.text.MessageFormat
- Parameters:
formatElementIndex
- format element indexnewFormat
- the new format- Throws:
java.lang.UnsupportedOperationException
- always thrown since this isn't supported by ExtendMessageFormat
-
setFormatByArgumentIndex
public void setFormatByArgumentIndex(int argumentIndex, java.text.Format newFormat)
Throws UnsupportedOperationException - see class Javadoc for details.- Overrides:
setFormatByArgumentIndex
in classjava.text.MessageFormat
- Parameters:
argumentIndex
- argument indexnewFormat
- the new format- Throws:
java.lang.UnsupportedOperationException
- always thrown since this isn't supported by ExtendMessageFormat
-
setFormats
public void setFormats(java.text.Format[] newFormats)
Throws UnsupportedOperationException - see class Javadoc for details.- Overrides:
setFormats
in classjava.text.MessageFormat
- Parameters:
newFormats
- new formats- Throws:
java.lang.UnsupportedOperationException
- always thrown since this isn't supported by ExtendMessageFormat
-
setFormatsByArgumentIndex
public void setFormatsByArgumentIndex(java.text.Format[] newFormats)
Throws UnsupportedOperationException - see class Javadoc for details.- Overrides:
setFormatsByArgumentIndex
in classjava.text.MessageFormat
- Parameters:
newFormats
- new formats- Throws:
java.lang.UnsupportedOperationException
- always thrown since this isn't supported by ExtendMessageFormat
-
toPattern
public java.lang.String toPattern()
- Overrides:
toPattern
in classjava.text.MessageFormat
-
-