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.