Class MapConfiguration
- All Implemented Interfaces:
Cloneable,Configuration,EventSource,ImmutableConfiguration,SynchronizerSupport
- Direct Known Subclasses:
EnvironmentConfiguration,SystemConfiguration
A Map based Configuration.
This implementation of the Configuration interface is initialized with a Map. The methods
of the Configuration interface are implemented on top of the content of this map. The following storage
scheme is used:
Property keys are directly mapped to map keys, i.e. the getProperty() method directly performs a
get() on the map. Analogously, setProperty() or addProperty() operations write new data into
the map. If a value is added to an existing property, a List is created, which stores the values of
this property.
An important use case of this class is to treat a map as a Configuration allowing access to its data through
the richer interface. This can be a bit problematic in some cases because the map may contain values that need not
adhere to the default storage scheme used by typical configuration implementations, for example regarding lists. In such
cases care must be taken when manipulating the data through the Configuration interface, for example by calling
addProperty(); results may be different than expected.
The handling of list delimiters is a bit different for this configuration implementation: When a property of type
String is queried, it is passed to the current ListDelimiterHandler which may generate multiple values. Note that per default a list delimiter handler is set which
does not do any list splitting, so this feature is disabled. It can be enabled by setting a properly configured
ListDelimiterHandler implementation, for example a
DefaultListDelimiterHandler object.
Notice that list splitting is only performed for single string values. If a property has multiple values, the single values are not split even if they contain the list delimiter character.
As the underlying Map is directly used as store of the property values, the thread-safety of this
Configuration implementation depends on the map passed to the constructor.
Notes about type safety: For properties with multiple values this implementation creates lists of type Object
and stores them. If a property is assigned another value, the value is added to the list. This can cause problems if
the map passed to the constructor already contains lists of other types. This should be avoided, otherwise it cannot
be guaranteed that the application might throw ClassCastException exceptions later.
- Since:
- 1.1
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionMapConfiguration(Map<String, ?> map) Create a Configuration decorator around the specified Map.MapConfiguration(Properties props) Creates a new instance ofMapConfigurationwhich uses the specifiedPropertiesobject as its data store. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidaddPropertyDirect(String key, Object value) Adds a key/value pair to the Configuration.protected voidRemoves the specified property from this configuration.clone()Returns a copy of this object.protected booleanActually checks whether the specified key is contained in this configuration.protected booleancontainsValueInternal(Object value) Tests whether this configuration contains one or more matches to this value.Actually creates an iterator for iterating over the keys in this configuration.getMap()Gets the Map decorated by this configuration.protected ObjectActually obtains the value of the specified property.protected booleanActually checks whether this configuration contains data.booleanReturns the flag whether trimming of property values is disabled.voidsetTrimmingDisabled(boolean trimmingDisabled) Sets a flag whether trimming of property values is disabled.protected intActually calculates the size of this configuration.toString()Converts this object to a String suitable for debugging and logging.Methods inherited from class org.apache.commons.configuration2.AbstractConfiguration
addErrorLogListener, addProperty, addPropertyInternal, append, beginRead, beginWrite, clear, clearInternal, clearProperty, cloneInterpolator, contains, containsKey, containsValue, copy, endRead, endWrite, get, get, getArray, getArray, getBigDecimal, getBigDecimal, getBigInteger, getBigInteger, getBoolean, getBoolean, getBoolean, getByte, getByte, getByte, getCollection, getCollection, getConfigurationDecoder, getConversionHandler, getDouble, getDouble, getDouble, getDuration, getDuration, getEncodedString, getEncodedString, getFloat, getFloat, getFloat, getInt, getInt, getInteger, getInterpolator, getKeys, getKeys, getKeys, getKeysInternal, getKeysInternal, getList, getList, getList, getList, getListDelimiterHandler, getLogger, getLong, getLong, getLong, getProperties, getProperties, getProperty, getShort, getShort, getShort, getString, getString, getStringArray, getSynchronizer, immutableSubset, initLogger, installInterpolator, interpolate, interpolate, interpolatedConfiguration, isEmpty, isScalarValue, isThrowExceptionOnMissing, lock, setConfigurationDecoder, setConversionHandler, setDefaultLookups, setInterpolator, setListDelimiterHandler, setLogger, setParentInterpolator, setPrefixLookups, setProperty, setPropertyInternal, setSynchronizer, setThrowExceptionOnMissing, size, subset, unlockMethods inherited from class org.apache.commons.configuration2.event.BaseEventSource
addEventListener, clearErrorListeners, clearEventListeners, copyEventListeners, createErrorEvent, createEvent, fireError, fireEvent, getEventListenerRegistrations, getEventListeners, isDetailEvents, removeEventListener, setDetailEventsMethods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.commons.configuration2.ImmutableConfiguration
getEnum, getEnum
-
Field Details
-
map
The Map decorated by this configuration.
-
-
Constructor Details
-
MapConfiguration
Create a Configuration decorator around the specified Map. The map is used to store the configuration properties, any change will also affect the Map.- Parameters:
map- the map
-
MapConfiguration
Creates a new instance ofMapConfigurationwhich uses the specifiedPropertiesobject as its data store. All changes of this configuration affect the givenPropertiesobject and vice versa. Note that whilePropertiesactually implementsMap<Object, Object>, we expect it to contain only string keys. Other key types will lead toClassCastExceptionexceptions on certain methods.- Parameters:
props- thePropertiesobject defining the content of this configuration- Since:
- 1.8
-
-
Method Details
-
addPropertyDirect
Description copied from class:AbstractConfigurationAdds a key/value pair to the Configuration. Override this method to provide write access to underlying Configuration store.- Specified by:
addPropertyDirectin classAbstractConfiguration- Parameters:
key- key to use for mappingvalue- object to store
-
clearPropertyDirect
Description copied from class:AbstractConfigurationRemoves the specified property from this configuration. This method is called byclearProperty()after it has done some preparations. It must be overridden in sub classes.- Specified by:
clearPropertyDirectin classAbstractConfiguration- Parameters:
key- the key to be removed
-
clone
Returns a copy of this object. The returned configuration will contain the same properties as the original. Event listeners are not cloned.- Overrides:
clonein classBaseEventSource- Returns:
- the copy
- Since:
- 1.3
-
containsKeyInternal
Description copied from class:AbstractConfigurationActually checks whether the specified key is contained in this configuration. This method is called bycontainsKey(). It has to be defined by concrete subclasses.- Specified by:
containsKeyInternalin classAbstractConfiguration- Parameters:
key- the key in question- Returns:
- true if this key is contained in this configuration, false otherwise
-
containsValueInternal
Tests whether this configuration contains one or more matches to this value. This operation stops at first match but may be more expensive than the containsKey method.- Specified by:
containsValueInternalin classAbstractConfiguration- Parameters:
value- the value in question- Returns:
trueif and only if some key maps to thevalueargument in this configuration as determined by theequalsmethod;falseotherwise.- Since:
- 2.11.0
-
getKeysInternal
Description copied from class:AbstractConfigurationActually creates an iterator for iterating over the keys in this configuration. This method is called bygetKeys(), it has to be defined by concrete subclasses.- Specified by:
getKeysInternalin classAbstractConfiguration- Returns:
- an
Iteratorwith all property keys in this configuration
-
getMap
Gets the Map decorated by this configuration.- Returns:
- the map this configuration is based onto
-
getPropertyInternal
Description copied from class:AbstractConfigurationActually obtains the value of the specified property. This method is called bygetProperty(). Concrete subclasses must define it to fetch the value of the desired property.- Specified by:
getPropertyInternalin classAbstractConfiguration- Parameters:
key- the key of the property in question- Returns:
- the (raw) value of this property
-
isEmptyInternal
Description copied from class:AbstractConfigurationActually checks whether this configuration contains data. This method is called byisEmpty(). It has to be defined by concrete subclasses.- Specified by:
isEmptyInternalin classAbstractConfiguration- Returns:
- true if this configuration contains no data, false otherwise
-
isTrimmingDisabled
Returns the flag whether trimming of property values is disabled.- Returns:
- true if trimming of property values is disabled; false otherwise
- Since:
- 1.7
-
setTrimmingDisabled
Sets a flag whether trimming of property values is disabled. This flag is only evaluated if list splitting is enabled. Refer to the header comment for more information about list splitting and trimming.- Parameters:
trimmingDisabled- a flag whether trimming of property values should be disabled- Since:
- 1.7
-
sizeInternal
Description copied from class:AbstractConfigurationActually calculates the size of this configuration. This method is called bysize()with a read lock held. The base implementation provided here calculates the size based on the iterator returned bygetKeys(). Sub classes which can determine the size in a more efficient way should override this method.- Overrides:
sizeInternalin classAbstractConfiguration- Returns:
- the size of this configuration (i.e. the number of keys)
-
toString
Converts this object to a String suitable for debugging and logging.
-