- java.lang.Object
-
- javax.imageio.metadata.IIOMetadataFormatImpl
-
- All Implemented Interfaces:
IIOMetadataFormat
public abstract class IIOMetadataFormatImpl extends Object implements IIOMetadataFormat
A concrete class providing a reusable implementation of theIIOMetadataFormat
interface. In addition, a static instance representing the standard, plug-in neutraljavax_imageio_1.0
format is provided by thegetStandardFormatInstance
method.In order to supply localized descriptions of elements and attributes, a
ResourceBundle
with a base name ofthis.getClass().getName() + "Resources"
should be supplied via the usual mechanism used byResourceBundle.getBundle
. Briefly, the subclasser supplies one or more additional classes according to a naming convention (by default, the fully-qualified name of the subclass extendingIIMetadataFormatImpl
, plus the string "Resources", plus the country, language, and variant codes separated by underscores). At run time, calls togetElementDescription
orgetAttributeDescription
will attempt to load such classes dynamically according to the supplied locale, and will use either the element name, or the element name followed by a '/' character followed by the attribute name as a key. This key will be supplied to theResourceBundle
'sgetString
method, and the resulting localized description of the node or attribute is returned.The subclass may supply a different base name for the resource bundles using the
setResourceBaseName
method.A subclass may choose its own localization mechanism, if so desired, by overriding the supplied implementations of
getElementDescription
andgetAttributeDescription
.- See Also:
ResourceBundle.getBundle(String,Locale)
-
-
Field Summary
Fields Modifier and Type Field Description static String
standardMetadataFormatName
AString
constant containing the standard format name,"javax_imageio_1.0"
.-
Fields declared in interface javax.imageio.metadata.IIOMetadataFormat
CHILD_POLICY_ALL, CHILD_POLICY_CHOICE, CHILD_POLICY_EMPTY, CHILD_POLICY_MAX, CHILD_POLICY_REPEAT, CHILD_POLICY_SEQUENCE, CHILD_POLICY_SOME, DATATYPE_BOOLEAN, DATATYPE_DOUBLE, DATATYPE_FLOAT, DATATYPE_INTEGER, DATATYPE_STRING, VALUE_ARBITRARY, VALUE_ENUMERATION, VALUE_LIST, VALUE_NONE, VALUE_RANGE, VALUE_RANGE_MAX_INCLUSIVE, VALUE_RANGE_MAX_INCLUSIVE_MASK, VALUE_RANGE_MIN_INCLUSIVE, VALUE_RANGE_MIN_INCLUSIVE_MASK, VALUE_RANGE_MIN_MAX_INCLUSIVE
-
-
Constructor Summary
Constructors Constructor Description IIOMetadataFormatImpl(String rootName, int childPolicy)
Constructs a blankIIOMetadataFormatImpl
instance, with a given root element name and child policy (other thanCHILD_POLICY_REPEAT
).IIOMetadataFormatImpl(String rootName, int minChildren, int maxChildren)
Constructs a blankIIOMetadataFormatImpl
instance, with a given root element name and a child policy ofCHILD_POLICY_REPEAT
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
addAttribute(String elementName, String attrName, int dataType, boolean required, int listMinLength, int listMaxLength)
Adds a new attribute to a previously defined element that will be defined by a list of values.protected void
addAttribute(String elementName, String attrName, int dataType, boolean required, String defaultValue)
Adds a new attribute to a previously defined element that may be set to an arbitrary value.protected void
addAttribute(String elementName, String attrName, int dataType, boolean required, String defaultValue, String minValue, String maxValue, boolean minInclusive, boolean maxInclusive)
Adds a new attribute to a previously defined element that will be defined by a range of values.protected void
addAttribute(String elementName, String attrName, int dataType, boolean required, String defaultValue, List<String> enumeratedValues)
Adds a new attribute to a previously defined element that will be defined by a set of enumerated values.protected void
addBooleanAttribute(String elementName, String attrName, boolean hasDefaultValue, boolean defaultValue)
Adds a new attribute to a previously defined element that will be defined by the enumerated valuesTRUE
andFALSE
, with a datatype ofDATATYPE_BOOLEAN
.protected void
addChildElement(String elementName, String parentName)
Adds an existing element to the list of legal children for a given parent node type.protected void
addElement(String elementName, String parentName, int childPolicy)
Adds a new element type to this metadata document format with a child policy other thanCHILD_POLICY_REPEAT
.protected void
addElement(String elementName, String parentName, int minChildren, int maxChildren)
Adds a new element type to this metadata document format with a child policy ofCHILD_POLICY_REPEAT
.protected void
addObjectValue(String elementName, Class<?> classType, int arrayMinLength, int arrayMaxLength)
Allows anObject
reference of a given class type to be stored in nodes implementing the named element.protected <T> void
addObjectValue(String elementName, Class<T> classType, boolean required, T defaultValue)
Allows anObject
reference of a given class type to be stored in nodes implementing the named element.protected <T> void
addObjectValue(String elementName, Class<T> classType, boolean required, T defaultValue, List<? extends T> enumeratedValues)
Allows anObject
reference of a given class type to be stored in nodes implementing the named element.protected <T extends Object & Comparable<? super T>>
voidaddObjectValue(String elementName, Class<T> classType, T defaultValue, Comparable<? super T> minValue, Comparable<? super T> maxValue, boolean minInclusive, boolean maxInclusive)
Allows anObject
reference of a given class type to be stored in nodes implementing the named element.String
getAttributeDescription(String elementName, String attrName, Locale locale)
Returns aString
containing a description of the named attribute, ornull
.String
getElementDescription(String elementName, Locale locale)
Returns aString
containing a description of the named element, ornull
.protected String
getResourceBaseName()
Returns the currently set base name for locatingResourceBundle
s.static IIOMetadataFormat
getStandardFormatInstance()
Returns anIIOMetadataFormat
object describing the standard, plug-in neutraljavax.imageio_1.0
metadata document format described in the comment of thejavax.imageio.metadata
package.protected void
removeAttribute(String elementName, String attrName)
Removes an attribute from a previously defined element.protected void
removeElement(String elementName)
Removes an element from the format.protected void
removeObjectValue(String elementName)
Disallows anObject
reference from being stored in nodes implementing the named element.protected void
setResourceBaseName(String resourceBaseName)
Sets a new base name for locatingResourceBundle
s containing descriptions of elements and attributes for this format.-
Methods declared in interface javax.imageio.metadata.IIOMetadataFormat
canNodeAppear, getAttributeDataType, getAttributeDefaultValue, getAttributeEnumerations, getAttributeListMaxLength, getAttributeListMinLength, getAttributeMaxValue, getAttributeMinValue, getAttributeNames, getAttributeValueType, getChildNames, getChildPolicy, getElementMaxChildren, getElementMinChildren, getObjectArrayMaxLength, getObjectArrayMinLength, getObjectClass, getObjectDefaultValue, getObjectEnumerations, getObjectMaxValue, getObjectMinValue, getObjectValueType, getRootName, isAttributeRequired
-
-
-
-
Field Detail
-
standardMetadataFormatName
public static final String standardMetadataFormatName
AString
constant containing the standard format name,"javax_imageio_1.0"
.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
IIOMetadataFormatImpl
public IIOMetadataFormatImpl(String rootName, int childPolicy)
Constructs a blankIIOMetadataFormatImpl
instance, with a given root element name and child policy (other thanCHILD_POLICY_REPEAT
). Additional elements, and their attributes andObject
reference information may be added using the variousadd
methods.- Parameters:
rootName
- the name of the root element.childPolicy
- one of theCHILD_POLICY_*
constants, other thanCHILD_POLICY_REPEAT
.- Throws:
IllegalArgumentException
- ifrootName
isnull
.IllegalArgumentException
- ifchildPolicy
is not one of the predefined constants.
-
IIOMetadataFormatImpl
public IIOMetadataFormatImpl(String rootName, int minChildren, int maxChildren)
Constructs a blankIIOMetadataFormatImpl
instance, with a given root element name and a child policy ofCHILD_POLICY_REPEAT
. Additional elements, and their attributes andObject
reference information may be added using the variousadd
methods.- Parameters:
rootName
- the name of the root element.minChildren
- the minimum number of children of the node.maxChildren
- the maximum number of children of the node.- Throws:
IllegalArgumentException
- ifrootName
isnull
.IllegalArgumentException
- ifminChildren
is negative or larger thanmaxChildren
.
-
-
Method Detail
-
setResourceBaseName
protected void setResourceBaseName(String resourceBaseName)
Sets a new base name for locatingResourceBundle
s containing descriptions of elements and attributes for this format.Prior to the first time this method is called, the base name will be equal to
this.getClass().getName() + "Resources"
.- Parameters:
resourceBaseName
- aString
containing the new base name.- Throws:
IllegalArgumentException
- ifresourceBaseName
isnull
.- See Also:
getResourceBaseName()
-
getResourceBaseName
protected String getResourceBaseName()
Returns the currently set base name for locatingResourceBundle
s.- Returns:
- a
String
containing the base name. - See Also:
setResourceBaseName(java.lang.String)
-
addElement
protected void addElement(String elementName, String parentName, int childPolicy)
Adds a new element type to this metadata document format with a child policy other thanCHILD_POLICY_REPEAT
.- Parameters:
elementName
- the name of the new element.parentName
- the name of the element that will be the parent of the new element.childPolicy
- one of theCHILD_POLICY_*
constants, other thanCHILD_POLICY_REPEAT
, indicating the child policy of the new element.- Throws:
IllegalArgumentException
- ifparentName
isnull
, or is not a legal element name for this format.IllegalArgumentException
- ifchildPolicy
is not one of the predefined constants.
-
addElement
protected void addElement(String elementName, String parentName, int minChildren, int maxChildren)
Adds a new element type to this metadata document format with a child policy ofCHILD_POLICY_REPEAT
.- Parameters:
elementName
- the name of the new element.parentName
- the name of the element that will be the parent of the new element.minChildren
- the minimum number of children of the node.maxChildren
- the maximum number of children of the node.- Throws:
IllegalArgumentException
- ifparentName
isnull
, or is not a legal element name for this format.IllegalArgumentException
- ifminChildren
is negative or larger thanmaxChildren
.
-
addChildElement
protected void addChildElement(String elementName, String parentName)
Adds an existing element to the list of legal children for a given parent node type.- Parameters:
parentName
- the name of the element that will be the new parent of the element.elementName
- the name of the element to be added as a child.- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.IllegalArgumentException
- ifparentName
isnull
, or is not a legal element name for this format.
-
removeElement
protected void removeElement(String elementName)
Removes an element from the format. If no element with the given name was present, nothing happens and no exception is thrown.- Parameters:
elementName
- the name of the element to be removed.
-
addAttribute
protected void addAttribute(String elementName, String attrName, int dataType, boolean required, String defaultValue)
Adds a new attribute to a previously defined element that may be set to an arbitrary value.- Parameters:
elementName
- the name of the element.attrName
- the name of the attribute being added.dataType
- the data type (string format) of the attribute, one of theDATATYPE_*
constants.required
-true
if the attribute must be present.defaultValue
- the default value for the attribute, ornull
.- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.IllegalArgumentException
- ifattrName
isnull
.IllegalArgumentException
- ifdataType
is not one of the predefined constants.
-
addAttribute
protected void addAttribute(String elementName, String attrName, int dataType, boolean required, String defaultValue, List<String> enumeratedValues)
Adds a new attribute to a previously defined element that will be defined by a set of enumerated values.- Parameters:
elementName
- the name of the element.attrName
- the name of the attribute being added.dataType
- the data type (string format) of the attribute, one of theDATATYPE_*
constants.required
-true
if the attribute must be present.defaultValue
- the default value for the attribute, ornull
.enumeratedValues
- aList
ofString
s containing the legal values for the attribute.- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.IllegalArgumentException
- ifattrName
isnull
.IllegalArgumentException
- ifdataType
is not one of the predefined constants.IllegalArgumentException
- ifenumeratedValues
isnull
.IllegalArgumentException
- ifenumeratedValues
does not contain at least one entry.IllegalArgumentException
- ifenumeratedValues
contains an element that is not aString
or isnull
.
-
addAttribute
protected void addAttribute(String elementName, String attrName, int dataType, boolean required, String defaultValue, String minValue, String maxValue, boolean minInclusive, boolean maxInclusive)
Adds a new attribute to a previously defined element that will be defined by a range of values.- Parameters:
elementName
- the name of the element.attrName
- the name of the attribute being added.dataType
- the data type (string format) of the attribute, one of theDATATYPE_*
constants.required
-true
if the attribute must be present.defaultValue
- the default value for the attribute, ornull
.minValue
- the smallest (inclusive or exclusive depending on the value ofminInclusive
) legal value for the attribute, as aString
.maxValue
- the largest (inclusive or exclusive depending on the value ofminInclusive
) legal value for the attribute, as aString
.minInclusive
-true
ifminValue
is inclusive.maxInclusive
-true
ifmaxValue
is inclusive.- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.IllegalArgumentException
- ifattrName
isnull
.IllegalArgumentException
- ifdataType
is not one of the predefined constants.
-
addAttribute
protected void addAttribute(String elementName, String attrName, int dataType, boolean required, int listMinLength, int listMaxLength)
Adds a new attribute to a previously defined element that will be defined by a list of values.- Parameters:
elementName
- the name of the element.attrName
- the name of the attribute being added.dataType
- the data type (string format) of the attribute, one of theDATATYPE_*
constants.required
-true
if the attribute must be present.listMinLength
- the smallest legal number of list items.listMaxLength
- the largest legal number of list items.- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.IllegalArgumentException
- ifattrName
isnull
.IllegalArgumentException
- ifdataType
is not one of the predefined constants.IllegalArgumentException
- iflistMinLength
is negative or larger thanlistMaxLength
.
-
addBooleanAttribute
protected void addBooleanAttribute(String elementName, String attrName, boolean hasDefaultValue, boolean defaultValue)
Adds a new attribute to a previously defined element that will be defined by the enumerated valuesTRUE
andFALSE
, with a datatype ofDATATYPE_BOOLEAN
.- Parameters:
elementName
- the name of the element.attrName
- the name of the attribute being added.hasDefaultValue
-true
if a default value should be present.defaultValue
- the default value for the attribute as aboolean
, ignored ifhasDefaultValue
isfalse
.- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.IllegalArgumentException
- ifattrName
isnull
.
-
removeAttribute
protected void removeAttribute(String elementName, String attrName)
Removes an attribute from a previously defined element. If no attribute with the given name was present in the given element, nothing happens and no exception is thrown.- Parameters:
elementName
- the name of the element.attrName
- the name of the attribute being removed.- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.
-
addObjectValue
protected <T> void addObjectValue(String elementName, Class<T> classType, boolean required, T defaultValue)
Allows anObject
reference of a given class type to be stored in nodes implementing the named element. The value of theObject
is unconstrained other than by its class type.If an
Object
reference was previously allowed, the previous settings are overwritten.- Type Parameters:
T
- the type of the object.- Parameters:
elementName
- the name of the element.classType
- aClass
variable indicating the legal class type for the object value.required
-true
if an object value must be present.defaultValue
- the default value for theObject
reference, ornull
.- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.
-
addObjectValue
protected <T> void addObjectValue(String elementName, Class<T> classType, boolean required, T defaultValue, List<? extends T> enumeratedValues)
Allows anObject
reference of a given class type to be stored in nodes implementing the named element. The value of theObject
must be one of the values given byenumeratedValues
.If an
Object
reference was previously allowed, the previous settings are overwritten.- Type Parameters:
T
- the type of the object.- Parameters:
elementName
- the name of the element.classType
- aClass
variable indicating the legal class type for the object value.required
-true
if an object value must be present.defaultValue
- the default value for theObject
reference, ornull
.enumeratedValues
- aList
ofObject
s containing the legal values for the object reference.- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.IllegalArgumentException
- ifenumeratedValues
isnull
.IllegalArgumentException
- ifenumeratedValues
does not contain at least one entry.IllegalArgumentException
- ifenumeratedValues
contains an element that is not an instance of the class type denoted byclassType
or isnull
.
-
addObjectValue
protected <T extends Object & Comparable<? super T>> void addObjectValue(String elementName, Class<T> classType, T defaultValue, Comparable<? super T> minValue, Comparable<? super T> maxValue, boolean minInclusive, boolean maxInclusive)
Allows anObject
reference of a given class type to be stored in nodes implementing the named element. The value of theObject
must be within the range given byminValue
andmaxValue
. Furthermore, the class type must implement theComparable
interface.If an
Object
reference was previously allowed, the previous settings are overwritten.- Type Parameters:
T
- the type of the object.- Parameters:
elementName
- the name of the element.classType
- aClass
variable indicating the legal class type for the object value.defaultValue
- the default value for theminValue
- the smallest (inclusive or exclusive depending on the value ofminInclusive
) legal value for the object value, as aString
.maxValue
- the largest (inclusive or exclusive depending on the value ofminInclusive
) legal value for the object value, as aString
.minInclusive
-true
ifminValue
is inclusive.maxInclusive
-true
ifmaxValue
is inclusive.- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.
-
addObjectValue
protected void addObjectValue(String elementName, Class<?> classType, int arrayMinLength, int arrayMaxLength)
Allows anObject
reference of a given class type to be stored in nodes implementing the named element. The value of theObject
must an array of objects of class type given byclassType
, with at leastarrayMinLength
and at mostarrayMaxLength
elements.If an
Object
reference was previously allowed, the previous settings are overwritten.- Parameters:
elementName
- the name of the element.classType
- aClass
variable indicating the legal class type for the object value.arrayMinLength
- the smallest legal length for the array.arrayMaxLength
- the largest legal length for the array.- Throws:
IllegalArgumentException
- ifelementName
is not a legal element name for this format.
-
removeObjectValue
protected void removeObjectValue(String elementName)
Disallows anObject
reference from being stored in nodes implementing the named element.- Parameters:
elementName
- the name of the element.- Throws:
IllegalArgumentException
- ifelementName
is not a legal element name for this format.
-
getElementDescription
public String getElementDescription(String elementName, Locale locale)
Returns aString
containing a description of the named element, ornull
. The description will be localized for the suppliedLocale
if possible.The default implementation will first locate a
ResourceBundle
using the current resource base name set bysetResourceBaseName
and the suppliedLocale
, using the fallback mechanism described in the comments forResourceBundle.getBundle
. If aResourceBundle
is found, the element name will be used as a key to itsgetString
method, and the result returned. If noResourceBundle
is found, or no such key is present,null
will be returned.If
locale
isnull
, the current defaultLocale
returned byLocale.getLocale
will be used.- Specified by:
getElementDescription
in interfaceIIOMetadataFormat
- Parameters:
elementName
- the name of the element.locale
- theLocale
for which localization will be attempted.- Returns:
- the element description.
- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.- See Also:
setResourceBaseName(java.lang.String)
-
getAttributeDescription
public String getAttributeDescription(String elementName, String attrName, Locale locale)
Returns aString
containing a description of the named attribute, ornull
. The description will be localized for the suppliedLocale
if possible.The default implementation will first locate a
ResourceBundle
using the current resource base name set bysetResourceBaseName
and the suppliedLocale
, using the fallback mechanism described in the comments forResourceBundle.getBundle
. If aResourceBundle
is found, the element name followed by a "/" character followed by the attribute name (elementName + "/" + attrName
) will be used as a key to itsgetString
method, and the result returned. If noResourceBundle
is found, or no such key is present,null
will be returned.If
locale
isnull
, the current defaultLocale
returned byLocale.getLocale
will be used.- Specified by:
getAttributeDescription
in interfaceIIOMetadataFormat
- Parameters:
elementName
- the name of the element.attrName
- the name of the attribute.locale
- theLocale
for which localization will be attempted, ornull
.- Returns:
- the attribute description.
- Throws:
IllegalArgumentException
- ifelementName
isnull
, or is not a legal element name for this format.IllegalArgumentException
- ifattrName
isnull
or is not a legal attribute name for this element.- See Also:
setResourceBaseName(java.lang.String)
-
getStandardFormatInstance
public static IIOMetadataFormat getStandardFormatInstance()
Returns anIIOMetadataFormat
object describing the standard, plug-in neutraljavax.imageio_1.0
metadata document format described in the comment of thejavax.imageio.metadata
package.- Returns:
- a predefined
IIOMetadataFormat
instance.
-
-