Class MapConfiguration
- java.lang.Object
-
- org.apache.commons.configuration2.event.BaseEventSource
-
- org.apache.commons.configuration2.AbstractConfiguration
-
- org.apache.commons.configuration2.MapConfiguration
-
- All Implemented Interfaces:
Cloneable,Configuration,EventSource,ImmutableConfiguration,SynchronizerSupport
- Direct Known Subclasses:
EnvironmentConfiguration,SystemConfiguration
public class MapConfiguration extends AbstractConfiguration implements Cloneable
A Map based Configuration.
This implementation of the
Configurationinterface is initialized with ajava.util.Map. The methods of theConfigurationinterface 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 aget()on the map. Analogously,setProperty()oraddProperty()operations write new data into the map. If a value is added to an existing property, ajava.util.Listis created, which stores the values of this property.An important use case of this class is to treat a map as a
Configurationallowing 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, e.g. regarding lists. In such cases care must be taken when manipulating the data through theConfigurationinterface, e.g. by callingaddProperty(); 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
ListDelimiterHandlerwhich 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 configuredListDelimiterHandlerimplementation, e.g. aDefaultListDelimiterHandlerobject.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
Mapis directly used as store of the property values, the thread-safety of thisConfigurationimplementation depends on the map passed to the constructor.Notes about type safety: For properties with multiple values this implementation creates lists of type
Objectand 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 throwClassCastExceptionexceptions later.- Since:
- 1.1
-
-
Constructor Summary
Constructors Constructor Description MapConfiguration(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
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddPropertyDirect(String key, Object value)Adds a key/value pair to the Configuration.protected voidclearPropertyDirect(String key)Removes the specified property from this configuration.Objectclone()Returns a copy of this object.protected booleancontainsKeyInternal(String key)Actually checks whether the specified key is contained in this configuration.protected Iterator<String>getKeysInternal()Actually creates an iterator for iterating over the keys in this configuration.Map<String,Object>getMap()Return the Map decorated by this configuration.protected ObjectgetPropertyInternal(String key)Actually obtains the value of the specified property.protected booleanisEmptyInternal()Actually checks whether this configuration contains data.booleanisTrimmingDisabled()Returns the flag whether trimming of property values is disabled.voidsetTrimmingDisabled(boolean trimmingDisabled)Sets a flag whether trimming of property values is disabled.protected intsizeInternal()Actually calculates the size of this configuration.StringtoString()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, containsKey, 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, 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, unlock
-
Methods inherited from class org.apache.commons.configuration2.event.BaseEventSource
addEventListener, clearErrorListeners, clearEventListeners, copyEventListeners, createErrorEvent, createEvent, fireError, fireEvent, getEventListenerRegistrations, getEventListeners, isDetailEvents, removeEventListener, setDetailEvents
-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.commons.configuration2.ImmutableConfiguration
getEnum, getEnum
-
-
-
-
Constructor Detail
-
MapConfiguration
public MapConfiguration(Map<String,?> map)
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
public MapConfiguration(Properties props)
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 Detail
-
getMap
public Map<String,Object> getMap()
Return the Map decorated by this configuration.- Returns:
- the map this configuration is based onto
-
isTrimmingDisabled
public boolean 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
public void setTrimmingDisabled(boolean trimmingDisabled)
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
-
getPropertyInternal
protected Object getPropertyInternal(String key)
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
-
addPropertyDirect
protected void addPropertyDirect(String key, Object value)
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
-
isEmptyInternal
protected boolean 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
-
containsKeyInternal
protected boolean containsKeyInternal(String key)
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
-
clearPropertyDirect
protected void clearPropertyDirect(String key)
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
-
getKeysInternal
protected Iterator<String> 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
-
sizeInternal
protected int 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)
-
clone
public Object 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
-
-