public abstract class AbstractConfiguration extends BaseEventSource implements Configuration
Abstract configuration class. Provides basic functionality but does not store any data.
If you want to write your own Configuration class then you should
implement only abstract methods from this class. A lot of functionality
needed by typical implementations of the Configuration
interface is already provided by this base class. Following is a list of
features implemented here:
Configuration interface are already handled by this base class.
A concrete sub class only needs to provide a generic getProperty()
method.${var}) will be replaced by their
corresponding values.ListDelimiterHandler object which can be set using the
setListDelimiterHandler(ListDelimiterHandler) method. It is
disabled per default. To enable this feature, set a suitable
ListDelimiterHandler, e.g. an instance of
DefaultListDelimiterHandler configured with the desired list delimiter character.setThrowExceptionOnMissing() method this behavior can be
changed to throw an exception when a requested property cannot be found.EVENT_XXX
constants to get an impression about which event types are supported.Synchronizer
interface.
Most methods defined by the Configuration interface are already
implemented in this class. Many method implementations perform basic
book-keeping tasks (e.g. firing events, handling synchronization), and then
delegate to other (protected) methods executing the actual work. Subclasses
override these protected methods to define or adapt behavior. The public
entry point methods are final to prevent subclasses from breaking basic
functionality.
| Constructor and Description |
|---|
AbstractConfiguration()
Creates a new instance of
AbstractConfiguration. |
| Modifier and Type | Method and Description |
|---|---|
void |
addErrorLogListener()
Adds a special
EventListener object to this configuration that
will log all internal errors. |
void |
addProperty(String key,
Object value)
Add a property to the configuration.
|
protected abstract void |
addPropertyDirect(String key,
Object value)
Adds a key/value pair to the Configuration.
|
protected void |
addPropertyInternal(String key,
Object value)
Actually adds a property to this configuration.
|
void |
append(Configuration c)
Appends the content of the specified configuration to this configuration.
|
protected void |
beginRead(boolean optimize)
Notifies this configuration's
Synchronizer that a read operation
is about to start. |
protected void |
beginWrite(boolean optimize)
Notifies this configuration's
Synchronizer that an update
operation is about to start. |
void |
clear()
Remove all properties from the configuration.
|
protected void |
clearInternal()
Clears the whole configuration.
|
void |
clearProperty(String key)
Removes the specified property from this configuration.
|
protected abstract void |
clearPropertyDirect(String key)
Removes the specified property from this configuration.
|
protected void |
cloneInterpolator(AbstractConfiguration orgConfig)
Creates a clone of the
ConfigurationInterpolator used by this
instance. |
boolean |
containsKey(String key)
Check if the configuration contains the specified key.
|
protected abstract boolean |
containsKeyInternal(String key)
Actually checks whether the specified key is contained in this
configuration.
|
void |
copy(Configuration c)
Copies the content of the specified configuration into this
configuration.
|
protected void |
endRead()
Notifies this configuration's
Synchronizer that a read operation
has finished. |
protected void |
endWrite()
Notifies this configuration's
Synchronizer that an update
operation has finished. |
<T> T |
get(Class<T> cls,
String key)
Get an object of the specified type associated with the given
configuration key.
|
<T> T |
get(Class<T> cls,
String key,
T defaultValue)
Get an object of the specified type associated with the given
configuration key using a default value.
|
Object |
getArray(Class<?> cls,
String key)
Get an array of typed objects associated with the given configuration key.
|
Object |
getArray(Class<?> cls,
String key,
Object defaultValue)
Get an array of typed objects associated with the given configuration key.
|
BigDecimal |
getBigDecimal(String key)
Get a
BigDecimal associated with the given configuration key. |
BigDecimal |
getBigDecimal(String key,
BigDecimal defaultValue)
Get a
BigDecimal associated with the given configuration key. |
BigInteger |
getBigInteger(String key)
Get a
BigInteger associated with the given configuration key. |
BigInteger |
getBigInteger(String key,
BigInteger defaultValue)
Get a
BigInteger associated with the given configuration key. |
boolean |
getBoolean(String key)
Get a boolean associated with the given configuration key.
|
boolean |
getBoolean(String key,
boolean defaultValue)
Get a boolean associated with the given configuration key.
|
Boolean |
getBoolean(String key,
Boolean defaultValue)
Obtains the value of the specified key and tries to convert it into a
Boolean object. |
byte |
getByte(String key)
Get a byte associated with the given configuration key.
|
byte |
getByte(String key,
byte defaultValue)
Get a byte associated with the given configuration key.
|
Byte |
getByte(String key,
Byte defaultValue)
Get a
Byte associated with the given configuration key. |
<T> Collection<T> |
getCollection(Class<T> cls,
String key,
Collection<T> target)
Get a collection of typed objects associated with the given configuration
key.
|
<T> Collection<T> |
getCollection(Class<T> cls,
String key,
Collection<T> target,
Collection<T> defaultValue)
Get a collection of typed objects associated with the given configuration
key using the values in the specified default collection if the key does
not map to an existing object.
|
ConfigurationDecoder |
getConfigurationDecoder()
Returns the
ConfigurationDecoder used by this instance. |
ConversionHandler |
getConversionHandler()
Returns the
ConversionHandler used by this instance. |
double |
getDouble(String key)
Get a double associated with the given configuration key.
|
double |
getDouble(String key,
double defaultValue)
Get a double associated with the given configuration key.
|
Double |
getDouble(String key,
Double defaultValue)
Get a
Double associated with the given configuration key. |
String |
getEncodedString(String key)
Get the value of a string property that is stored in encoded form in this
configuration using a default
ConfigurationDecoder. |
String |
getEncodedString(String key,
ConfigurationDecoder decoder)
Get the value of a string property that is stored in encoded form in this
configuration.
|
float |
getFloat(String key)
Get a float associated with the given configuration key.
|
float |
getFloat(String key,
float defaultValue)
Get a float associated with the given configuration key.
|
Float |
getFloat(String key,
Float defaultValue)
Get a
Float associated with the given configuration key. |
int |
getInt(String key)
Get a int associated with the given configuration key.
|
int |
getInt(String key,
int defaultValue)
Get a int associated with the given configuration key.
|
Integer |
getInteger(String key,
Integer defaultValue)
Get an
Integer associated with the given configuration key. |
ConfigurationInterpolator |
getInterpolator()
Returns the
ConfigurationInterpolator object that manages the
lookup objects for resolving variables. |
Iterator<String> |
getKeys()
Get the list of the keys contained in the configuration.
|
Iterator<String> |
getKeys(String prefix)
Get the list of the keys contained in the configuration that match the
specified prefix.
|
protected abstract Iterator<String> |
getKeysInternal()
Actually creates an iterator for iterating over the keys in this
configuration.
|
protected Iterator<String> |
getKeysInternal(String prefix)
Returns an
Iterator with all property keys starting with the
specified prefix. |
<T> List<T> |
getList(Class<T> cls,
String key)
Get a list of typed objects associated with the given configuration key
returning an empty list if the key doesn't map to an existing object.
|
<T> List<T> |
getList(Class<T> cls,
String key,
List<T> defaultValue)
Get a list of typed objects associated with the given configuration key
returning the specified default value if the key doesn't map to an
existing object.
|
List<Object> |
getList(String key)
Get a List of the values associated with the given configuration key.
|
List<Object> |
getList(String key,
List<?> defaultValue)
Get a List of strings associated with the given configuration key.
|
ListDelimiterHandler |
getListDelimiterHandler()
Returns the
ListDelimiterHandler used by this instance. |
ConfigurationLogger |
getLogger()
Returns the logger used by this configuration object.
|
long |
getLong(String key)
Get a long associated with the given configuration key.
|
long |
getLong(String key,
long defaultValue)
Get a long associated with the given configuration key.
|
Long |
getLong(String key,
Long defaultValue)
Get a
Long associated with the given configuration key. |
Properties |
getProperties(String key)
Get a list of properties associated with the given configuration key.
|
Properties |
getProperties(String key,
Properties defaults)
Get a list of properties associated with the given configuration key.
|
Object |
getProperty(String key)
Gets a property from the configuration.
|
protected abstract Object |
getPropertyInternal(String key)
Actually obtains the value of the specified property.
|
short |
getShort(String key)
Get a short associated with the given configuration key.
|
short |
getShort(String key,
short defaultValue)
Get a short associated with the given configuration key.
|
Short |
getShort(String key,
Short defaultValue)
Get a
Short associated with the given configuration key. |
String |
getString(String key)
Get a string associated with the given configuration key.
|
String |
getString(String key,
String defaultValue)
Get a string associated with the given configuration key.
|
String[] |
getStringArray(String key)
Get an array of strings associated with the given configuration key.
|
Synchronizer |
getSynchronizer()
Returns the object responsible for synchronizing this configuration.
|
ImmutableConfiguration |
immutableSubset(String prefix)
Return a decorator immutable Configuration containing every key from the current
Configuration that starts with the specified prefix.
|
protected void |
initLogger(ConfigurationLogger log)
Initializes the logger.
|
void |
installInterpolator(Map<String,? extends Lookup> prefixLookups,
Collection<? extends Lookup> defLookups)
Creates and installs a new
ConfigurationInterpolator for this
Configuration based on the passed in arguments. |
protected Object |
interpolate(Object value)
Returns the interpolated value.
|
protected String |
interpolate(String base)
interpolate key names to handle ${key} stuff
|
Configuration |
interpolatedConfiguration()
Returns a configuration with the same content as this configuration, but
with all variables replaced by their actual values.
|
boolean |
isEmpty()
Check if the configuration is empty.
|
protected abstract boolean |
isEmptyInternal()
Actually checks whether this configuration contains data.
|
protected boolean |
isScalarValue(Object value)
Checks whether the specified object is a scalar value.
|
boolean |
isThrowExceptionOnMissing()
Returns true if missing values throw Exceptions.
|
void |
lock(LockMode mode)
Locks this object for the specified mode.
|
void |
setConfigurationDecoder(ConfigurationDecoder configurationDecoder)
Sets the
ConfigurationDecoder for this configuration. |
void |
setConversionHandler(ConversionHandler conversionHandler)
Sets the
ConversionHandler to be used by this instance. |
void |
setDefaultLookups(Collection<? extends Lookup> lookups)
Adds all
Lookup objects in the given collection as default
lookups (i.e. |
void |
setInterpolator(ConfigurationInterpolator ci)
Sets the
ConfigurationInterpolator object to be used by this
Configuration. |
void |
setListDelimiterHandler(ListDelimiterHandler listDelimiterHandler)
Sets the
ListDelimiterHandler to be used by this instance. |
void |
setLogger(ConfigurationLogger log)
Allows setting the logger to be used by this configuration object.
|
void |
setParentInterpolator(ConfigurationInterpolator parent)
Sets the specified
ConfigurationInterpolator as the parent of
this configuration's ConfigurationInterpolator. |
void |
setPrefixLookups(Map<String,? extends Lookup> lookups)
Registers all
Lookup objects in the given map at the current
ConfigurationInterpolator of this configuration. |
void |
setProperty(String key,
Object value)
Set a property, this will replace any previously set values.
|
protected void |
setPropertyInternal(String key,
Object value)
Actually sets the value of a property.
|
void |
setSynchronizer(Synchronizer synchronizer)
Sets the object responsible for synchronizing this configuration.
|
void |
setThrowExceptionOnMissing(boolean throwExceptionOnMissing)
Allows to set the
throwExceptionOnMissing flag. |
int |
size()
Returns the number of keys stored in this configuration.
|
protected int |
sizeInternal()
Actually calculates the size of this configuration.
|
Configuration |
subset(String prefix)
Return a decorator Configuration containing every key from the current
Configuration that starts with the specified prefix.
|
void |
unlock(LockMode mode)
Releases a lock of this object that was obtained using the
SynchronizerSupport.lock(LockMode) method. |
addEventListener, clearErrorListeners, clearEventListeners, clone, copyEventListeners, createErrorEvent, createEvent, fireError, fireEvent, getEventListenerRegistrations, getEventListeners, isDetailEvents, removeEventListener, setDetailEventspublic AbstractConfiguration()
AbstractConfiguration.public ListDelimiterHandler getListDelimiterHandler()
ListDelimiterHandler used by this instance.ListDelimiterHandlerpublic void setListDelimiterHandler(ListDelimiterHandler listDelimiterHandler)
Sets the ListDelimiterHandler to be used by this instance. This
object is invoked every time when dealing with string properties that may
contain a list delimiter and thus have to be split to multiple values.
Per default, a ListDelimiterHandler implementation is set which
does not support list splitting. This can be changed for instance by
setting a DefaultListDelimiterHandler object.
Warning: Be careful when changing the list delimiter handler when the configuration has already been loaded/populated. List handling is typically applied already when properties are added to the configuration. If later another handler is set which processes lists differently, results may be unexpected; some operations may even cause exceptions.
listDelimiterHandler - the ListDelimiterHandler to be used
(must not be null)IllegalArgumentException - if the ListDelimiterHandler is
nullpublic ConversionHandler getConversionHandler()
ConversionHandler used by this instance.ConversionHandlerpublic void setConversionHandler(ConversionHandler conversionHandler)
ConversionHandler to be used by this instance. The
ConversionHandler is responsible for every kind of data type
conversion. It is consulted by all get methods returning results in
specific data types. A newly created configuration uses a default
ConversionHandler implementation. This can be changed while
initializing the configuration (e.g. via a builder). Note that access to
this property is not synchronized.conversionHandler - the ConversionHandler to be used (must
not be null)IllegalArgumentException - if the ConversionHandler is
nullpublic void setThrowExceptionOnMissing(boolean throwExceptionOnMissing)
throwExceptionOnMissing flag. This
flag controls the behavior of property getter methods that return
objects if the requested property is missing. If the flag is set to
false (which is the default value), these methods will return
null. If set to true, they will throw a
NoSuchElementException exception. Note that getter methods
for primitive data types are not affected by this flag.throwExceptionOnMissing - The new value for the propertypublic boolean isThrowExceptionOnMissing()
public ConfigurationInterpolator getInterpolator()
ConfigurationInterpolator object that manages the
lookup objects for resolving variables.getInterpolator in interface ConfigurationConfigurationInterpolator associated with this
configurationpublic final void setInterpolator(ConfigurationInterpolator ci)
ConfigurationInterpolator object to be used by this
Configuration. This object is invoked for each access of a string
property in order to substitute variables which may be contained. The
argument can be null to disable interpolation at all. This implementation sets the passed in object without
further modifications. A null argument is allowed; this disables
interpolation.setInterpolator in interface Configurationci - the new ConfigurationInterpolatorpublic final void installInterpolator(Map<String,? extends Lookup> prefixLookups, Collection<? extends Lookup> defLookups)
ConfigurationInterpolator for this
Configuration based on the passed in arguments. This method
creates a default ConfigurationInterpolator instance and
initializes it with the passed in Lookup objects. It also adds a
special default Lookup object that tries to resolve variables by
matching them with properties contained in this Configuration.
This is also the main difference to the
Configuration.setInterpolator(ConfigurationInterpolator) method
which sets the passed in object as is without adding this special lookup. This implementation creates a new
ConfigurationInterpolator instance and initializes it with the
given Lookup objects. In addition, it adds a specialized default
Lookup object which queries this Configuration.installInterpolator in interface ConfigurationprefixLookups - the map with Lookup objects associated with
specific prefixes (can be null)defLookups - a collection with default Lookup objects (can
be null)ConfigurationInterpolatorpublic void setPrefixLookups(Map<String,? extends Lookup> lookups)
Lookup objects in the given map at the current
ConfigurationInterpolator of this configuration. The set of
default lookup objects (for variables without a prefix) is not modified
by this method. If this configuration does not have a
ConfigurationInterpolator, a new instance is created. Note: This
method is mainly intended to be used for initializing a configuration
when it is created by a builder. Normal client code should better call
installInterpolator(Map, Collection) to define the
ConfigurationInterpolator in a single step.lookups - a map with new Lookup objects and their prefixes
(may be null)public void setDefaultLookups(Collection<? extends Lookup> lookups)
Lookup objects in the given collection as default
lookups (i.e. lookups without a variable prefix) to the
ConfigurationInterpolator object of this configuration. In
addition, it adds a specialized default Lookup object which
queries this Configuration. The set of Lookup objects
with prefixes is not modified by this method. If this configuration does
not have a ConfigurationInterpolator, a new instance is created.
Note: This method is mainly intended to be used for initializing a
configuration when it is created by a builder. Normal client code should
better call installInterpolator(Map, Collection) to define the
ConfigurationInterpolator in a single step.lookups - the collection with default Lookup objects to be
addedpublic void setParentInterpolator(ConfigurationInterpolator parent)
ConfigurationInterpolator as the parent of
this configuration's ConfigurationInterpolator. If this
configuration does not have a ConfigurationInterpolator, a new
instance is created. Note: This method is mainly intended to be used for
initializing a configuration when it is created by a builder. Normal
client code can directly update the ConfigurationInterpolator.parent - the parent ConfigurationInterpolator to be setpublic void setConfigurationDecoder(ConfigurationDecoder configurationDecoder)
ConfigurationDecoder for this configuration. This object
is used by getEncodedString(String).configurationDecoder - the ConfigurationDecoderpublic ConfigurationDecoder getConfigurationDecoder()
ConfigurationDecoder used by this instance.ConfigurationDecoderprotected void cloneInterpolator(AbstractConfiguration orgConfig)
ConfigurationInterpolator used by this
instance. This method can be called by clone() implementations of
derived classes. Normally, the ConfigurationInterpolator of a
configuration instance must not be shared with other instances because it
contains a specific Lookup object pointing to the owning
configuration. This has to be taken into account when cloning a
configuration. This method creates a new
ConfigurationInterpolator for this configuration instance which
contains all lookup objects from the original
ConfigurationInterpolator except for the configuration specific
lookup pointing to the passed in original configuration. This one is
replaced by a corresponding Lookup referring to this
configuration.orgConfig - the original configuration from which this one was
clonedpublic ConfigurationLogger getLogger()
public void setLogger(ConfigurationLogger log)
log - the new loggerpublic final void addErrorLogListener()
EventListener object to this configuration that
will log all internal errors. This method is intended to be used by
certain derived classes, for which it is known that they can fail on
property access (e.g. DatabaseConfiguration).public final Synchronizer getSynchronizer()
Synchronizer has been set, a NoOpSynchronizer is
returned. So, per default, instances of AbstractConfiguration are
not thread-safe unless a suitable Synchronizer is set!getSynchronizer in interface SynchronizerSupportSynchronizer used by this instancepublic final void setSynchronizer(Synchronizer synchronizer)
Synchronizer object when
initializing this configuration instance in order to make it thread-safe.setSynchronizer in interface SynchronizerSupportsynchronizer - the new Synchronizer; can be null,
then this instance uses a NoOpSynchronizerpublic final void lock(LockMode mode)
LockMode. When done the unlock() must be called with the
same LockMode argument. In practice, a try-finally
construct should be used as in the following example:
SynchronizerSupport syncSupport = ...;
syncSupport.lock(LockMode.READ);
try
{
// read access to syncSupport
}
finally
{
syncSupport.unlock(LockMode.READ);
}
Note: Always use this method for obtaining a lock rather than
accessing the object's Synchronizer directly. An implementation
may perform additional actions which are not executed when only
interacting with the Synchronizer. This implementation delegates to beginRead() or
beginWrite(), depending on the LockMode argument.
Subclasses can override these protected methods to perform additional
steps when a configuration is locked.lock in interface SynchronizerSupportmode - the LockModeNullPointerException - if the argument is nullpublic final void unlock(LockMode mode)
SynchronizerSupport.lock(LockMode) method. This method must always be called
pair-wise with lock(). The argument must match to the one passed
to the corresponding lock() call; otherwise, the behavior of the
Synchronizer is unspecified. This implementation delegates to endRead() or
endWrite(), depending on the LockMode argument.
Subclasses can override these protected methods to perform additional
steps when a configuration's lock is released.unlock in interface SynchronizerSupportmode - the LockModeNullPointerException - if the argument is nullprotected void beginRead(boolean optimize)
Synchronizer that a read operation
is about to start. This method is called by all methods which access this
configuration in a read-only mode. Subclasses may override it to perform
additional actions before this read operation. The boolean
optimize argument can be evaluated by overridden methods in
derived classes. Some operations which require a lock do not need a fully
initialized configuration object. By setting this flag to
true, such operations can give a corresponding hint. An
overridden implementation of beginRead() can then decide to skip
some initialization steps. All basic operations in this class (and most
of the basic Configuration implementations) call this method with
a parameter value of false. In any case the
inherited method must be called! Otherwise, proper synchronization is not
guaranteed.optimize - a flag whether optimization can be performedprotected void endRead()
Synchronizer that a read operation
has finished. This method is called by all methods which access this
configuration in a read-only manner at the end of their execution.
Subclasses may override it to perform additional actions after this read
operation. In any case the inherited method must be called!
Otherwise, the read lock will not be released.protected void beginWrite(boolean optimize)
Synchronizer that an update
operation is about to start. This method is called by all methods which
modify this configuration. Subclasses may override it to perform
additional operations before an update. For a description of the boolean
optimize argument refer to the documentation of
beginRead(). In any case the inherited method must be
called! Otherwise, proper synchronization is not guaranteed.optimize - a flag whether optimization can be performedbeginRead(boolean)protected void endWrite()
Synchronizer that an update
operation has finished. This method is called by all methods which modify
this configuration at the end of their execution. Subclasses may override
it to perform additional operations after an update. In any case
the inherited method must be called! Otherwise, the write lock will not
be released.public final void addProperty(String key, Object value)
Configurationresource.loader = fileis already present in the configuration and you call
addProperty("resource.loader", "classpath")
Then you will end up with a List like the following:
["file", "classpath"]
addProperty in interface Configurationkey - The key to add the property to.value - The value to add.protected void addPropertyInternal(String key, Object value)
addProperty(). It performs list splitting if necessary and
delegates to addPropertyDirect(String, Object) for every single
property value.key - the key of the property to be addedvalue - the new property valueprotected abstract void addPropertyDirect(String key, Object value)
key - key to use for mappingvalue - object to storeprotected String interpolate(String base)
base - string to interpolateprotected Object interpolate(Object value)
ConfigurationInterpolator. If no
ConfigurationInterpolator is set, the passed in value is returned
without changes.value - the value to interpolatepublic Configuration subset(String prefix)
Configuration
prefix.number = 1
prefix.string = Apache
prefixed.foo = bar
prefix = Jakarta
the Configuration returned by subset("prefix") will contain
the properties:
number = 1
string = Apache
= Jakarta
(The key for the value "Jakarta" is an empty string)
Since the subset is a decorator and not a modified copy of the initial Configuration, any change made to the subset is available to the Configuration, and reciprocally.
subset in interface Configurationprefix - The prefix used to select the properties.SubsetConfigurationpublic ImmutableConfiguration immutableSubset(String prefix)
ImmutableConfiguration
prefix.number = 1
prefix.string = Apache
prefixed.foo = bar
prefix = Jakarta
the immutable Configuration returned by subset("prefix") will contain
the properties:
number = 1
string = Apache
= Jakarta
(The key for the value "Jakarta" is an empty string)immutableSubset in interface ImmutableConfigurationprefix - The prefix used to select the properties.public final void setProperty(String key, Object value)
ConfigurationsetProperty in interface Configurationkey - The key of the property to changevalue - The new valueprotected void setPropertyInternal(String key, Object value)
setProperty(). It provides a default implementation of this
functionality by clearing the specified key and delegating to
addProperty(). Subclasses should override this method if they can
provide a more efficient algorithm for setting a property value.key - the property keyvalue - the new property valuepublic final void clearProperty(String key)
clearPropertyDirect(), which will do the real work.clearProperty in interface Configurationkey - the key to be removedprotected abstract void clearPropertyDirect(String key)
clearProperty() after it has done some
preparations. It must be overridden in sub classes.key - the key to be removedpublic final void clear()
Configurationclear in interface Configurationprotected void clearInternal()
clear()
after some preparations have been made. This base implementation uses
the iterator provided by getKeys() to remove every single
property. Subclasses should override this method if there is a more
efficient way of clearing the configuration.public final Iterator<String> getKeys()
remove()
method. Note that the keys of this configuration are returned in a form,
so that they can be directly evaluated; escaping of special characters
(if necessary) has already been performed. This implementation takes care of synchronization and then
delegates to getKeysInternal() for obtaining the actual iterator.
Note that depending on a concrete implementation, an iteration may fail
if the configuration is updated concurrently.getKeys in interface ImmutableConfigurationpublic final Iterator<String> getKeys(String prefix)
db.user, db.pwd, db.url, window.xpos, window.ypos,getKeys("db");db.user, db.pwd, db.url.getKeys("db"); will find the keys db,
db.user, or db.password, but not the key
dbdriver.getKeys in interface ImmutableConfigurationprefix - The prefix to test against.ImmutableConfiguration.getKeys()protected abstract Iterator<String> getKeysInternal()
getKeys(), it has to be
defined by concrete subclasses.Iterator with all property keys in this configurationprotected Iterator<String> getKeysInternal(String prefix)
Iterator with all property keys starting with the
specified prefix. This method is called by getKeys(String). It
is fully implemented by delegating to getKeysInternal() and
returning a special iterator which filters for the passed in prefix.
Subclasses can override it if they can provide a more efficient way to
iterate over specific keys only.prefix - the prefix for the keys to be taken into accountIterator returning the filtered keyspublic final Object getProperty(String key)
Configuration interface the other get methods (that
return specific data types) will internally make use of this method. On
this level variable substitution is not yet performed. The returned
object is an internal representation of the property value for the passed
in key. It is owned by the Configuration object. So a caller
should not modify this object. It cannot be guaranteed that this object
will stay constant over time (i.e. further update operations on the
configuration may change its internal state). This implementation ensures proper synchronization.
Subclasses have to define the abstract getPropertyInternal()
method which is called from here.getProperty in interface ImmutableConfigurationkey - property to retrieveprotected abstract Object getPropertyInternal(String key)
getProperty(). Concrete subclasses must define it to
fetch the value of the desired property.key - the key of the property in questionpublic final boolean isEmpty()
isEmptyInternal().isEmpty in interface ImmutableConfigurationtrue if the configuration contains no property,
false otherwise.protected abstract boolean isEmptyInternal()
isEmpty(). It has to be defined by concrete subclasses.public final int size()
ImmutableConfiguration.isEmpty() method. This implementation handles synchronization and delegates
to sizeInternal().size in interface ImmutableConfigurationprotected int sizeInternal()
size() with a read lock held. The base implementation provided
here calculates the size based on the iterator returned by
getKeys(). Sub classes which can determine the size in a more
efficient way should override this method.public final boolean containsKey(String key)
containsKeyInternal().containsKey in interface ImmutableConfigurationkey - the key whose presence in this configuration is to be testedtrue if the configuration contains a value for this
key, false otherwiseprotected abstract boolean containsKeyInternal(String key)
containsKey(). It has to
be defined by concrete subclasses.key - the key in questionpublic Properties getProperties(String key)
ImmutableConfigurationkey=value. These strings are split at the equals sign, and
the key parts will become keys of the returned Properties object, the value
parts become values.getProperties in interface ImmutableConfigurationkey - The configuration key.public Properties getProperties(String key, Properties defaults)
key - The configuration key.defaults - Any default values for the returned
Properties object. Ignored if null.ConversionException - is thrown if the key maps to an object that
is not a String/List of Strings.IllegalArgumentException - if one of the tokens is malformed (does
not contain an equals sign).public boolean getBoolean(String key)
ImmutableConfigurationgetBoolean in interface ImmutableConfigurationkey - The configuration key.public boolean getBoolean(String key, boolean defaultValue)
ImmutableConfigurationgetBoolean in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public Boolean getBoolean(String key, Boolean defaultValue)
Boolean object. If the property has no value, the passed
in default value will be used.getBoolean in interface ImmutableConfigurationkey - the key of the propertydefaultValue - the default valueBooleanConversionException - if the value cannot be converted to a
Booleanpublic byte getByte(String key)
ImmutableConfigurationgetByte in interface ImmutableConfigurationkey - The configuration key.public byte getByte(String key, byte defaultValue)
ImmutableConfigurationgetByte in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public Byte getByte(String key, Byte defaultValue)
ImmutableConfigurationByte associated with the given configuration key.getByte in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public double getDouble(String key)
ImmutableConfigurationgetDouble in interface ImmutableConfigurationkey - The configuration key.public double getDouble(String key, double defaultValue)
ImmutableConfigurationgetDouble in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public Double getDouble(String key, Double defaultValue)
ImmutableConfigurationDouble associated with the given configuration key.getDouble in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public float getFloat(String key)
ImmutableConfigurationgetFloat in interface ImmutableConfigurationkey - The configuration key.public float getFloat(String key, float defaultValue)
ImmutableConfigurationgetFloat in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public Float getFloat(String key, Float defaultValue)
ImmutableConfigurationFloat associated with the given configuration key. If the key doesn't
map to an existing object, the default value is returned.getFloat in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public int getInt(String key)
ImmutableConfigurationgetInt in interface ImmutableConfigurationkey - The configuration key.public int getInt(String key, int defaultValue)
ImmutableConfigurationgetInt in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public Integer getInteger(String key, Integer defaultValue)
ImmutableConfigurationInteger associated with the given configuration key. If the key
doesn't map to an existing object, the default value is returned.getInteger in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public long getLong(String key)
ImmutableConfigurationgetLong in interface ImmutableConfigurationkey - The configuration key.public long getLong(String key, long defaultValue)
ImmutableConfigurationgetLong in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public Long getLong(String key, Long defaultValue)
ImmutableConfigurationLong associated with the given configuration key.
If the key doesn't map to an existing object, the default value
is returned.getLong in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public short getShort(String key)
ImmutableConfigurationgetShort in interface ImmutableConfigurationkey - The configuration key.public short getShort(String key, short defaultValue)
ImmutableConfigurationgetShort in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public Short getShort(String key, Short defaultValue)
ImmutableConfigurationShort associated with the given configuration key.
If the key doesn't map to an existing object, the default value
is returned.getShort in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public BigDecimal getBigDecimal(String key)
BigDecimal associated with the given configuration key.getBigDecimal in interface ImmutableConfigurationkey - The configuration key.setThrowExceptionOnMissing(boolean)public BigDecimal getBigDecimal(String key, BigDecimal defaultValue)
ImmutableConfigurationBigDecimal associated with the given configuration key.
If the key doesn't map to an existing object, the default value
is returned.getBigDecimal in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public BigInteger getBigInteger(String key)
BigInteger associated with the given configuration key.getBigInteger in interface ImmutableConfigurationkey - The configuration key.setThrowExceptionOnMissing(boolean)public BigInteger getBigInteger(String key, BigInteger defaultValue)
ImmutableConfigurationBigInteger associated with the given configuration key.
If the key doesn't map to an existing object, the default value
is returned.getBigInteger in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public String getString(String key)
getString in interface ImmutableConfigurationkey - The configuration key.setThrowExceptionOnMissing(boolean)public String getString(String key, String defaultValue)
ImmutableConfigurationgetString in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.public String getEncodedString(String key, ConfigurationDecoder decoder)
ConfigurationDecoder. The value returned by the
ConfigurationDecoder is passed to the caller. If the key is not
associated with a value, the decoder is not invoked; depending on this
configuration's settings either null is returned or an exception
is thrown. This implementation delegates to getString(String)
in order to obtain the value of the passed in key. This value is passed
to the decoder. Because getString() is used behind the scenes all
standard features like handling of missing keys and interpolation work as
expected.getEncodedString in interface ImmutableConfigurationkey - the configuration keydecoder - the ConfigurationDecoder (must not be null)public String getEncodedString(String key)
ConfigurationDecoder. This method
works like the method with the same name, but it uses a default
ConfigurationDecoder associated with this configuration. It
depends on a specific implementation how this default decoder is
obtained. This implementation makes use of the
ConfigurationDecoder set for this configuration. If no such
object has been set, an IllegalStateException exception is
thrown.getEncodedString in interface ImmutableConfigurationkey - the configuration keyIllegalStateException - if no ConfigurationDecoder is setsetConfigurationDecoder(ConfigurationDecoder)public String[] getStringArray(String key)
ListDelimiterHandler is
consulted to find out whether the string can be split into multiple
values.getStringArray in interface ImmutableConfigurationkey - The configuration key.ConversionException - is thrown if the key maps to an
object that is not a String/List of Strings.setListDelimiterHandler(ListDelimiterHandler)public List<Object> getList(String key)
getList() method in
that it does not recursively obtain all values stored for the specified
property key. Rather, only the first level of the hierarchy is processed.
So the resulting list may contain complex objects like arrays or
collections - depending on the storage structure used by a concrete
subclass. If the key doesn't map to an existing object, an empty List is
returned.getList in interface ImmutableConfigurationkey - The configuration key.getStringArray(String)public List<Object> getList(String key, List<?> defaultValue)
ImmutableConfigurationgetList in interface ImmutableConfigurationkey - The configuration key.defaultValue - The default value.ImmutableConfiguration.getList(Class, String, List)public <T> T get(Class<T> cls, String key)
ImmutableConfigurationisThrowExceptionOnMissing() is set to
true.get in interface ImmutableConfigurationT - the target type of the valuecls - the target class of the valuekey - the key of the valuepublic <T> T get(Class<T> cls, String key, T defaultValue)
ConversionHandler to perform the actual type conversion.get in interface ImmutableConfigurationT - the target type of the valuecls - the target class of the valuekey - the key of the valuedefaultValue - the default valuepublic Object getArray(Class<?> cls, String key)
ImmutableConfigurationgetArray in interface ImmutableConfigurationcls - the type expected for the elements of the arraykey - The configuration key.public Object getArray(Class<?> cls, String key, Object defaultValue)
ConversionHandler to perform the actual type conversion. If this
results in a null result (because the property is undefined), the
default value is returned. It is checked whether the default value is an
array with the correct component type. If not, an exception is thrown.getArray in interface ImmutableConfigurationcls - the type expected for the elements of the arraykey - the configuration key.defaultValue - the default valueIllegalArgumentException - if the default value is not a compatible
arraypublic <T> List<T> getList(Class<T> cls, String key)
ImmutableConfigurationgetList in interface ImmutableConfigurationT - the type expected for the elements of the listcls - the class expected for the elements of the listkey - The configuration key.public <T> List<T> getList(Class<T> cls, String key, List<T> defaultValue)
getCollection(). As target collection a newly created
ArrayList is passed in.getList in interface ImmutableConfigurationT - the type expected for the elements of the listcls - the class expected for the elements of the listkey - the configuration key.defaultValue - the default value.public <T> Collection<T> getCollection(Class<T> cls, String key, Collection<T> target)
ImmutableConfigurationImmutableConfiguration.getCollection(Class, String, Collection, Collection) passing in
null as default value.getCollection in interface ImmutableConfigurationT - the element type of the result listcls - the the element class of the result listkey - the configuration keytarget - the target collection (may be null)public <T> Collection<T> getCollection(Class<T> cls, String key, Collection<T> target, Collection<T> defaultValue)
getList(), however, it allows specifying a target collection.
Results are added to this collection. This is useful if the data
retrieved should be added to a specific kind of collection, e.g. a set to
remove duplicates. The return value is as follows:
ConversionHandler to perform the actual conversion. If no target
collection is provided, an ArrayList is created.getCollection in interface ImmutableConfigurationT - the element type of the result listcls - the the element class of the result listkey - the configuration keytarget - the target collection (may be null)defaultValue - the default value (may be null)protected boolean isScalarValue(Object value)
getList() and getStringArray() if the
property requested is not a string, a list, or an array. If it returns
true, the calling method transforms the value to a string and
returns a list or an array with this single element. This implementation
returns true if the value is of a wrapper type for a primitive
type.value - the value to be checkedpublic void copy(Configuration c)
clone() methods
should be used.c - the configuration to copy (can be null, then this
operation will have no effect)public void append(Configuration c)
clone() methods
should be used.c - the configuration to be appended (can be null, then this
operation will have no effect)public Configuration interpolatedConfiguration()
${var} will be resolved as
far as possible (if a variable cannot be resolved, it remains unchanged).
This operation is useful if the content of a configuration is to be
exported or processed by an external component that does not support
variable interpolation.ConfigurationRuntimeException - if this
configuration cannot be clonedprotected final void initLogger(ConfigurationLogger log)
log - the loggerCopyright © 2001–2020 The Apache Software Foundation. All rights reserved.