de.smartics.properties.spi.config.support
Class AbstractConfigurationPropertiesManagement

Package class diagram package AbstractConfigurationPropertiesManagement
java.lang.Object
  extended by de.smartics.properties.spi.config.support.AbstractConfigurationProperties
      extended by de.smartics.properties.spi.config.support.AbstractAdminModeConfigurationProperties
          extended by de.smartics.properties.spi.config.support.AbstractConfigurationPropertiesManagement
All Implemented Interfaces:
ConfigurationProperties, ConfigurationPropertiesManagement, ConfigurationPropertiesManagementSpi, ConfigurationPropertiesSpi
Direct Known Subclasses:
AbstractExternalConfigurationPropertiesManagement, AbstractInMemoryConfigurationProperties, JndiConfigurationProperties

@ThreadSafe
public abstract class AbstractConfigurationPropertiesManagement
     
     
extends AbstractAdminModeConfigurationProperties
implements ConfigurationPropertiesManagement, ConfigurationPropertiesManagementSpi

Abstract implementation of the ConfigurationProperties interface.


Constructor Summary
protected AbstractConfigurationPropertiesManagement()
          Constructor for serializable subclasses.
protected AbstractConfigurationPropertiesManagement(ConfigurationKey<?> key, de.smartics.properties.api.core.domain.PropertyDescriptorRegistry registry, de.smartics.properties.api.core.security.PropertyValueSecurity decrypter)
          Default constructor.
 
Method Summary
 ConfigurationPropertiesManagement addDefinitions(PropertyProvider properties)
          Adds the given definitions to this configuration.
protected abstract  void addDefinitionsToStore(PropertyProvider properties)
          Implementations decide whether or not registered definitions should be written to the store.
 void addDescriptors(Class<?> propertySetType)
          Adds all property descriptors declared in the given type.
protected  Property deletePropertyInStore(String name)
          Deletes the property with the given name.
 void flush()
          Signal to flush properties changed in memory to be written to a secondary storage.
 de.smartics.properties.api.core.domain.PropertyDescriptor getDescriptor(de.smartics.properties.api.core.domain.PropertyKey key)
          Returns the descriptor for the given key.
 de.smartics.properties.api.core.domain.PropertyDescriptor getDescriptor(String key)
          Returns the descriptor for the given key.
 List<de.smartics.properties.api.core.domain.PropertyDescriptor> getMandatoryPropertyDescriptors()
          Returns the list of mandatory properties.
 DescribedProperty getProperty(de.smartics.properties.api.core.domain.PropertyDescriptor descriptor, Object defaultValue)
          Returns the property for the given descriptor, allowing to transparently provide a default value to be returned in case the property has not been set.
 DescribedProperty getProperty(String key, Object defaultValue)
          Returns the property for the given key, allowing to transparently provide a default value to be returned in case the property has not been set.
 Object getPropertyAsType(de.smartics.properties.api.core.domain.PropertyDescriptor descriptor)
          Returns the yet not validated property for the given descriptor's key.
protected  PropertyCollection getPropertyCollectionFromStore()
          Returns a collection to iterate over all properties of the configuration.
protected  Property getPropertyFromStore(String name)
          Fetches the property from the store by the given name.
 ValidatedProperty getValidatedProperty(de.smartics.properties.api.core.domain.PropertyDescriptor descriptor, Object defaultValue)
          Returns the validated property for the given descriptor's key, allowing to transparently provide a default value to be returned in case the property has not been set.
protected abstract  void setPropertiesToStore(PropertyProvider provider)
          Allows to store all properties efficiently by subclasses.
 Property setProperty(de.smartics.properties.api.core.domain.PropertyKey key, String value)
          Sets the property value for the given key.
protected  Property setPropertyToStore(String name, String value)
          Sets the property to the given value.
 Property unsetProperty(de.smartics.properties.api.core.domain.PropertyKey key)
          Unsets the property value for the given key.
 void validate(boolean lenient, Class<?>... groups)
          Validates all properties in the given configuration.
 void validate(de.smartics.properties.api.core.domain.PropertyDescriptor descriptor, Class<?>... ifInOneOfTheseGroups)
          Validates the given property in the given configuration.
 void validate(de.smartics.properties.api.core.domain.PropertyDescriptor descriptor, String value, Class<?>... ifInOneOfTheseGroups)
          Validates the given property in the given configuration.
 
Methods inherited from class de.smartics.properties.spi.config.support.AbstractAdminModeConfigurationProperties
isInAdminMode, setToAdminMode, toRepresentative
 
Methods inherited from class de.smartics.properties.spi.config.support.AbstractConfigurationProperties
addPropertyChangeListener, addPropertyChangeListener, firePropertyChange, getContext, getContext, getKey, getProperties, getProperties, getProperty, getProperty, getProperty, getPropertyDescriptor, getPropertyValue, getPropertyValue, getPropertyValue, getPropertyValue, getPropertyValue, getPropertyValueAsString, getPropertyValueAsString, getPropertyValueAsString, getPropertyValueAsString, getPropertyValueSecurity, getRegistry, getValidatedProperty, getValidatedProperty, removePropertyChangeListener, removePropertyChangeListener, resolveAndConvert, resolveAndConvertAndValidate, toString, validate, validate, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface de.smartics.properties.api.config.domain.ConfigurationPropertiesManagement
getPropertyStoreAccessor, getPropertyValueSecurity, getRegistry, setToAdminMode, toRepresentative, toSerializable
 
Methods inherited from interface de.smartics.properties.spi.config.support.ConfigurationPropertiesSpi
getProperties
 
Methods inherited from interface de.smartics.properties.api.config.domain.ConfigurationProperties
addPropertyChangeListener, addPropertyChangeListener, getContext, getContext, getKey, getProperties, getProperty, getProperty, getProperty, getPropertyValue, getPropertyValue, getPropertyValue, getPropertyValue, getPropertyValue, getPropertyValueAsString, getPropertyValueAsString, getPropertyValueAsString, getPropertyValueAsString, getValidatedProperty, getValidatedProperty, isInAdminMode, removePropertyChangeListener, removePropertyChangeListener, validate, validate
 

Constructor Detail

AbstractConfigurationPropertiesManagement

protected AbstractConfigurationPropertiesManagement()
Constructor for serializable subclasses.


AbstractConfigurationPropertiesManagement

protected AbstractConfigurationPropertiesManagement(ConfigurationKey<?> key,
                                                    de.smartics.properties.api.core.domain.PropertyDescriptorRegistry registry,
                                                    de.smartics.properties.api.core.security.PropertyValueSecurity decrypter)
                                             throws de.smartics.util.lang.NullArgumentException
Default constructor.

Parameters:
key - the key that identifies the configuration.
registry - the registry to resolve property descriptors.
decrypter - the helper to decrypt secured property values.
Throws:
de.smartics.util.lang.NullArgumentException - if key, registry or decrypter is null.
Method Detail

getDescriptor

public final de.smartics.properties.api.core.domain.PropertyDescriptor getDescriptor(String key)
                                                                              throws UnknownPropertyException
Description copied from interface: ConfigurationPropertiesManagement
Returns the descriptor for the given key.

Specified by:
getDescriptor in interface ConfigurationPropertiesManagement
Parameters:
key - the of the requested descriptor.
Returns:
the descriptor whose key matches the given key.
Throws:
UnknownPropertyException - if the property is not known.

getDescriptor

public final de.smartics.properties.api.core.domain.PropertyDescriptor getDescriptor(de.smartics.properties.api.core.domain.PropertyKey key)
                                                                              throws UnknownPropertyException
Description copied from interface: ConfigurationPropertiesManagement
Returns the descriptor for the given key.

Specified by:
getDescriptor in interface ConfigurationPropertiesManagement
Parameters:
key - the of the requested descriptor.
Returns:
the descriptor whose key matches the given key.
Throws:
UnknownPropertyException - if the property is not known.

addDescriptors

public final void addDescriptors(Class<?> propertySetType)
                          throws de.smartics.properties.api.core.domain.DuplicatePropertyDeclarationsException
Description copied from interface: ConfigurationPropertiesManagement
Adds all property descriptors declared in the given type.

Specified by:
addDescriptors in interface ConfigurationPropertiesManagement
Parameters:
propertySetType - the type that declares the descriptors.
Throws:
de.smartics.properties.api.core.domain.DuplicatePropertyDeclarationsException - if any of the descriptors declare the same property.

getMandatoryPropertyDescriptors

public final List<de.smartics.properties.api.core.domain.PropertyDescriptor> getMandatoryPropertyDescriptors()
Description copied from interface: ConfigurationPropertiesManagement
Returns the list of mandatory properties.

Returns a copy that can be edited.

Specified by:
getMandatoryPropertyDescriptors in interface ConfigurationPropertiesManagement
Returns:
the list of mandatory properties.

addDefinitions

public final ConfigurationPropertiesManagement addDefinitions(PropertyProvider properties)
                                                       throws NullPointerException
Description copied from interface: ConfigurationPropertiesManagement
Adds the given definitions to this configuration.

Specified by:
addDefinitions in interface ConfigurationPropertiesManagement
Parameters:
properties - the property definitions to add.
Returns:
a reference to this configuration for chaining.
Throws:
NullPointerException - if properties is null.

addDefinitionsToStore

protected abstract void addDefinitionsToStore(PropertyProvider properties)
                                       throws PropertyStoreException
Implementations decide whether or not registered definitions should be written to the store. This is the default and subclasses may override to implement another strategy.

Usually configurations that are backed up by an external (e.g. persistent) store do not want to store definitions here. So they override this method with a no-op.

Parameters:
properties - the properties that are to be registered as definitions.
Throws:
PropertyStoreException - if any property cannot be stored. The already stored properties will not be rolled back.

setPropertiesToStore

protected abstract void setPropertiesToStore(PropertyProvider provider)
                                      throws PropertyStoreException
Allows to store all properties efficiently by subclasses. The default implementation simply iterates.

Parameters:
provider - the provider with the properties to be stored.
Throws:
PropertyStoreException - if any property cannot be stored. The already stored properties will not be rolled back.

getProperty

public final DescribedProperty getProperty(String key,
                                           Object defaultValue)
                                    throws IllegalArgumentException,
                                           UnknownPropertyException
Description copied from interface: ConfigurationProperties
Returns the property for the given key, allowing to transparently provide a default value to be returned in case the property has not been set.

Specified by:
getProperty in interface ConfigurationProperties
Overrides:
getProperty in class AbstractConfigurationProperties
Parameters:
key - the unique key of the property.
defaultValue - the default value to use in case no value has been specified.
Returns:
the requested property.
Throws:
IllegalArgumentException - if key is blank.
UnknownPropertyException - if key is not known.

getProperty

public final DescribedProperty getProperty(de.smartics.properties.api.core.domain.PropertyDescriptor descriptor,
                                           Object defaultValue)
                                    throws IllegalArgumentException,
                                           UnknownPropertyException
Description copied from interface: ConfigurationProperties
Returns the property for the given descriptor, allowing to transparently provide a default value to be returned in case the property has not been set.

Specified by:
getProperty in interface ConfigurationProperties
Parameters:
descriptor - the descriptor containing the unique key of the property.
defaultValue - the default value to use in case no value has been specified.
Returns:
the requested property.
Throws:
UnknownPropertyException - if the key of the descriptor is not known.
IllegalArgumentException

getPropertyAsType

public Object getPropertyAsType(de.smartics.properties.api.core.domain.PropertyDescriptor descriptor)
                         throws IllegalArgumentException,
                                de.smartics.properties.api.core.domain.PropertyValueConversionException,
                                de.smartics.properties.api.core.security.SecurityException,
                                de.smartics.properties.api.core.app.PropertyRootException
Description copied from interface: ConfigurationProperties
Returns the yet not validated property for the given descriptor's key. This is useful to access the resolved and converted value to apply validation only under certain conditions.

Specified by:
getPropertyAsType in interface ConfigurationProperties
Parameters:
descriptor - descriptor key to the property.
Returns:
the resolved property. May be null if the property's value is actually unset.
Throws:
IllegalArgumentException - if descriptor is blank.
de.smartics.properties.api.core.domain.PropertyValueConversionException - if the property cannot be converted to its value.
de.smartics.properties.api.core.security.SecurityException - on any problem decrypting an encrypted value.
UnknownPropertyException - if descriptor is not known.
de.smartics.properties.api.core.app.PropertyRootException - on any problem.

getValidatedProperty

public final ValidatedProperty getValidatedProperty(de.smartics.properties.api.core.domain.PropertyDescriptor descriptor,
                                                    Object defaultValue)
                                             throws IllegalArgumentException,
                                                    UnknownPropertyException,
                                                    de.smartics.properties.api.core.domain.PropertyValidationException,
                                                    de.smartics.properties.api.core.security.SecurityException
Description copied from interface: ConfigurationProperties
Returns the validated property for the given descriptor's key, allowing to transparently provide a default value to be returned in case the property has not been set.

Specified by:
getValidatedProperty in interface ConfigurationProperties
Parameters:
descriptor - descriptor key to the property.
defaultValue - the default value to use in case no value has been specified.
Returns:
the validated property. Never null, although the value / validated value of the returned property may be null.
Throws:
IllegalArgumentException - if descriptor is blank.
UnknownPropertyException - if descriptor is not known.
de.smartics.properties.api.core.domain.PropertyValidationException - if the property is invalid according to its constraints.
de.smartics.properties.api.core.security.SecurityException - on any problem decrypting an encrypted value.

setProperty

public final Property setProperty(de.smartics.properties.api.core.domain.PropertyKey key,
                                  String value)
                           throws NullPointerException,
                                  de.smartics.properties.api.core.domain.PropertyValidationException,
                                  de.smartics.properties.api.core.domain.ReadOnlyPropertyException
Description copied from interface: ConfigurationPropertiesManagement
Sets the property value for the given key.

Specified by:
setProperty in interface ConfigurationPropertiesManagement
Parameters:
key - the key to the property.
value - the value to the property.
Returns:
the old value to the property. A value of null is returned if the property had no value prior to this call.
Throws:
NullPointerException - if key is null.
de.smartics.properties.api.core.domain.PropertyValidationException - if the property value is invalid according to its constraints.
de.smartics.properties.api.core.domain.ReadOnlyPropertyException - if the property to update is read-only.

unsetProperty

public final Property unsetProperty(de.smartics.properties.api.core.domain.PropertyKey key)
                             throws NullPointerException,
                                    de.smartics.properties.api.core.domain.ReadOnlyPropertyException
Description copied from interface: ConfigurationPropertiesManagement
Unsets the property value for the given key.

Specified by:
unsetProperty in interface ConfigurationPropertiesManagement
Parameters:
key - the key to the property.
Returns:
the old value to the property. A value of null is returned if the property had no value prior to this call.
Throws:
NullPointerException - if key is null.
de.smartics.properties.api.core.domain.ReadOnlyPropertyException - if the property to update is read-only.

validate

public final void validate(boolean lenient,
                           Class<?>... groups)
                    throws ConfigurationValidationException
Description copied from interface: ConfigurationProperties
Validates all properties in the given configuration.

Specified by:
validate in interface ConfigurationProperties
Parameters:
lenient - the lenient flag that tells the validation process to handle unknown properties gracefully if set to true. If the value is false unknown properties are reported as validation failures.
groups - the validation groups to consider in the validation process. The groups will be validated in the given order. As soon as a validation group fails, the validation process is aborted without checking the not yet processed groups.
Throws:
ConfigurationValidationException - if the configuration contains properties that do not meet the required constraints.

validate

public final void validate(de.smartics.properties.api.core.domain.PropertyDescriptor descriptor,
                           Class<?>... ifInOneOfTheseGroups)
                    throws ConfigurationValidationException
Description copied from interface: ConfigurationProperties
Validates the given property in the given configuration.

Specified by:
validate in interface ConfigurationProperties
Parameters:
descriptor - the descriptor whose value is to be validated.
ifInOneOfTheseGroups - the validation only takes place if this constraint is part of any of the specified groups or the argument is empty or null.
Throws:
ConfigurationValidationException - if property does not meet the required constraints.

validate

public final void validate(de.smartics.properties.api.core.domain.PropertyDescriptor descriptor,
                           String value,
                           Class<?>... ifInOneOfTheseGroups)
                    throws ConfigurationValidationException
Description copied from interface: ConfigurationProperties
Validates the given property in the given configuration.

Specified by:
validate in interface ConfigurationProperties
Parameters:
descriptor - the descriptor whose value is to be validated.
value - the property value to be validated.
ifInOneOfTheseGroups - the validation only takes place if this constraint is part of any of the specified groups or the argument is empty or null.
Throws:
ConfigurationValidationException - if property does not meet the required constraints.

flush

public void flush()
Signal to flush properties changed in memory to be written to a secondary storage.

Implementations are not required to only write on a flush. They have to make sure that after the flush is called, all data is transfered to the secondary storage.

This implementation does nothing on a flush. Should be overridden by implementations that do want to take actions on a flush.

Specified by:
flush in interface ConfigurationPropertiesManagement

setPropertyToStore

protected final Property setPropertyToStore(String name,
                                            String value)
                                     throws NullPointerException
Sets the property to the given value.

Implementation Notes:
No property change listeners are informed here. This is solely the call to the underlying store.
Parameters:
name - the name of the property to set.
value - the value to the property.
Returns:
the old property. Must not be null (although the value of the property may be null).
Throws:
NullPointerException - if name is null.

getPropertyCollectionFromStore

protected final PropertyCollection getPropertyCollectionFromStore()
Returns a collection to iterate over all properties of the configuration.

Implementation Notes:
No property change listeners are informed here. This is solely the call to the underlying store.
Returns:
a collection to iterate over all properties of the configuration.

deletePropertyInStore

protected final Property deletePropertyInStore(String name)
Deletes the property with the given name.

Implementation Notes:
No property change listeners are informed here. This is solely the call to the underlying store.
Parameters:
name - the name of the property to delete.
Returns:
the value of the deleted property.

getPropertyFromStore

protected final Property getPropertyFromStore(String name)
Fetches the property from the store by the given name.

Implementation Notes:
No property change listeners are informed here. This is solely the call to the underlying store.
Parameters:
name - the name of the property to fetch.
Returns:
the property value. Must not be null (although the value of the property may be null).


Copyright © 2012-2013 Kronseder & Reiner GmbH - smartics. All Rights Reserved.