org.apache.commons.configuration
Class AbstractFileConfiguration

java.lang.Object
  extended byorg.apache.commons.configuration.event.EventSource
      extended byorg.apache.commons.configuration.AbstractConfiguration
          extended byorg.apache.commons.configuration.BaseConfiguration
              extended byorg.apache.commons.configuration.AbstractFileConfiguration
All Implemented Interfaces:
Cloneable, Configuration, FileConfiguration
Direct Known Subclasses:
AbstractHierarchicalFileConfiguration.FileConfigurationDelegate, INIConfiguration, PropertiesConfiguration

public abstract class AbstractFileConfiguration
extends BaseConfiguration
implements FileConfiguration

Partial implementation of the FileConfiguration interface. Developers of file based configuration may want to extend this class, the two methods left to implement are FileConfiguration.load(Reader) and FileConfiguration.save(Writer).

This base class already implements a couple of ways to specify the location of the file this configuration is based on. The following possibilities exist:

Note that the load() methods do not wipe out the configuration's content before the new configuration file is loaded. Thus it is very easy to construct a union configuration by simply loading multiple configuration files, e.g.

 config.load(configFile1);
 config.load(configFile2);
 

After executing this code fragment, the resulting configuration will contain both the properties of configFile1 and configFile2. On the other hand, if the current configuration file is to be reloaded, clear() should be called first. Otherwise the properties are doubled. This behavior is analogous to the behavior of the load(InputStream) method in java.util.Properties.

Since:
1.0-rc2
Version:
$Revision: 712401 $, $Date: 2008-11-08 16:29:56 +0100 (Sa, 08 Nov 2008) $
Author:
Emmanuel Bourg

Field Summary
protected  boolean autoSave
          The auto save flag.
protected  String basePath
          Stores the base path.
static int EVENT_RELOAD
          Constant for the configuration reload event.
protected  String fileName
          Stores the file name.
protected  ReloadingStrategy strategy
          Holds a reference to the reloading strategy.
 
Fields inherited from class org.apache.commons.configuration.AbstractConfiguration
END_TOKEN, EVENT_ADD_PROPERTY, EVENT_CLEAR, EVENT_CLEAR_PROPERTY, EVENT_READ_PROPERTY, EVENT_SET_PROPERTY, START_TOKEN
 
Constructor Summary
AbstractFileConfiguration()
          Default constructor
AbstractFileConfiguration(File file)
          Creates and loads the configuration from the specified file.
AbstractFileConfiguration(String fileName)
          Creates and loads the configuration from the specified file.
AbstractFileConfiguration(URL url)
          Creates and loads the configuration from the specified URL.
 
Method Summary
 void addProperty(String key, Object value)
          Adds a new property to this configuration.
 void clearProperty(String key)
          Remove a property from the configuration.
 Object clone()
          Creates a copy of this configuration.
 boolean containsKey(String key)
          Check if the configuration contains the specified key.
protected  void enterNoReload()
          Enters the "No reloading mode".
protected  void exitNoReload()
          Leaves the "No reloading mode".
protected  void fireEvent(int type, String propName, Object propValue, boolean before)
          Sends an event to all registered listeners.
 String getBasePath()
          Return the base path.
 String getEncoding()
          Return the encoding used to store the configuration file.
 File getFile()
          Return the file where the configuration is stored.
 String getFileName()
          Return the name of the file.
 Iterator getKeys()
          Returns an Iterator with the keys contained in this configuration.
 String getPath()
          Returns the full path to the file this configuration is based on.
 Object getProperty(String key)
          Gets a property from the configuration.
 ReloadingStrategy getReloadingStrategy()
          Return the reloading strategy.
 URL getURL()
          Return the URL where the configuration is stored.
 boolean isAutoSave()
          Tells if properties are automatically saved to the disk.
 boolean isEmpty()
          Check if the configuration is empty.
 void load()
          Load the configuration from the underlying location.
 void load(File file)
          Load the configuration from the specified file.
 void load(InputStream in)
          Load the configuration from the specified stream, using the encoding returned by getEncoding().
 void load(InputStream in, String encoding)
          Load the configuration from the specified stream, using the specified encoding.
 void load(String fileName)
          Locate the specified file and load the configuration.
 void load(URL url)
          Load the configuration from the specified URL.
protected  void possiblySave()
          Save the configuration if the automatic persistence is enabled and if a file is specified.
 void reload()
          Performs a reload operation if necessary.
 void save()
          Save the configuration.
 void save(File file)
          Save the configuration to the specified file.
 void save(OutputStream out)
          Save the configuration to the specified stream, using the encoding returned by getEncoding().
 void save(OutputStream out, String encoding)
          Save the configuration to the specified stream, using the specified encoding.
 void save(String fileName)
          Save the configuration to the specified file.
 void save(URL url)
          Save the configuration to the specified URL.
 void setAutoSave(boolean autoSave)
          Enable or disable the automatical saving of modified properties to the disk.
 void setBasePath(String basePath)
          Sets the base path.
 void setEncoding(String encoding)
          Set the encoding used to store the configuration file.
 void setFile(File file)
          Set the file where the configuration is stored.
 void setFileName(String fileName)
          Set the name of the file.
 void setPath(String path)
          Sets the location of this configuration as a full or relative path name.
 void setProperty(String key, Object value)
          Sets a new value for the specified property.
 void setReloadingStrategy(ReloadingStrategy strategy)
          Set the reloading strategy.
 void setURL(URL url)
          Set the location of this configuration as a URL.
 
Methods inherited from class org.apache.commons.configuration.BaseConfiguration
addPropertyDirect, clear, clearPropertyDirect
 
Methods inherited from class org.apache.commons.configuration.AbstractConfiguration
addErrorLogListener, append, copy, createInterpolator, getBigDecimal, getBigDecimal, getBigInteger, getBigInteger, getBoolean, getBoolean, getBoolean, getByte, getByte, getByte, getDefaultListDelimiter, getDelimiter, getDouble, getDouble, getDouble, getFloat, getFloat, getFloat, getInt, getInt, getInteger, getInterpolator, getKeys, getList, getList, getListDelimiter, getLogger, getLong, getLong, getLong, getProperties, getProperties, getShort, getShort, getShort, getString, getString, getStringArray, getSubstitutor, interpolate, interpolate, interpolatedConfiguration, interpolateHelper, isDelimiterParsingDisabled, isThrowExceptionOnMissing, resolveContainerStore, setDefaultListDelimiter, setDelimiter, setDelimiterParsingDisabled, setListDelimiter, setLogger, setThrowExceptionOnMissing, subset
 
Methods inherited from class org.apache.commons.configuration.event.EventSource
addConfigurationListener, addErrorListener, clearConfigurationListeners, clearErrorListeners, createErrorEvent, createEvent, fireError, getConfigurationListeners, getErrorListeners, isDetailEvents, removeConfigurationListener, removeErrorListener, setDetailEvents
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.commons.configuration.FileConfiguration
load, save
 
Methods inherited from interface org.apache.commons.configuration.Configuration
clear, getBigDecimal, getBigDecimal, getBigInteger, getBigInteger, getBoolean, getBoolean, getBoolean, getByte, getByte, getByte, getDouble, getDouble, getDouble, getFloat, getFloat, getFloat, getInt, getInt, getInteger, getKeys, getList, getList, getLong, getLong, getLong, getProperties, getShort, getShort, getShort, getString, getString, getStringArray, subset
 

Field Detail

EVENT_RELOAD

public static final int EVENT_RELOAD
Constant for the configuration reload event.

See Also:
Constant Field Values

fileName

protected String fileName
Stores the file name.


basePath

protected String basePath
Stores the base path.


autoSave

protected boolean autoSave
The auto save flag.


strategy

protected ReloadingStrategy strategy
Holds a reference to the reloading strategy.

Constructor Detail

AbstractFileConfiguration

public AbstractFileConfiguration()
Default constructor

Since:
1.1

AbstractFileConfiguration

public AbstractFileConfiguration(String fileName)
                          throws ConfigurationException
Creates and loads the configuration from the specified file. The passed in string must be a valid file name, either absolute or relativ.

Parameters:
fileName - The name of the file to load.
Throws:
ConfigurationException - Error while loading the file
Since:
1.1

AbstractFileConfiguration

public AbstractFileConfiguration(File file)
                          throws ConfigurationException
Creates and loads the configuration from the specified file.

Parameters:
file - The file to load.
Throws:
ConfigurationException - Error while loading the file
Since:
1.1

AbstractFileConfiguration

public AbstractFileConfiguration(URL url)
                          throws ConfigurationException
Creates and loads the configuration from the specified URL.

Parameters:
url - The location of the file to load.
Throws:
ConfigurationException - Error while loading the file
Since:
1.1
Method Detail

load

public void load()
          throws ConfigurationException
Load the configuration from the underlying location.

Specified by:
load in interface FileConfiguration
Throws:
ConfigurationException - if loading of the configuration fails

load

public void load(String fileName)
          throws ConfigurationException
Locate the specified file and load the configuration. This does not change the source of the configuration (i.e. the internally maintained file name). Use one of the setter methods for this purpose.

Specified by:
load in interface FileConfiguration
Parameters:
fileName - the name of the file to be loaded
Throws:
ConfigurationException - if an error occurs

load

public void load(File file)
          throws ConfigurationException
Load the configuration from the specified file. This does not change the source of the configuration (i.e. the internally maintained file name). Use one of the setter methods for this purpose.

Specified by:
load in interface FileConfiguration
Parameters:
file - the file to load
Throws:
ConfigurationException - if an error occurs

load

public void load(URL url)
          throws ConfigurationException
Load the configuration from the specified URL. This does not change the source of the configuration (i.e. the internally maintained file name). Use on of the setter methods for this purpose.

Specified by:
load in interface FileConfiguration
Parameters:
url - the URL of the file to be loaded
Throws:
ConfigurationException - if an error occurs

load

public void load(InputStream in)
          throws ConfigurationException
Load the configuration from the specified stream, using the encoding returned by getEncoding().

Specified by:
load in interface FileConfiguration
Parameters:
in - the input stream
Throws:
ConfigurationException - if an error occurs during the load operation

load

public void load(InputStream in,
                 String encoding)
          throws ConfigurationException
Load the configuration from the specified stream, using the specified encoding. If the encoding is null the default encoding is used.

Specified by:
load in interface FileConfiguration
Parameters:
in - the input stream
encoding - the encoding used. null to use the default encoding
Throws:
ConfigurationException - if an error occurs during the load operation

save

public void save()
          throws ConfigurationException
Save the configuration. Before this method can be called a valid file name must have been set.

Specified by:
save in interface FileConfiguration
Throws:
ConfigurationException - if an error occurs or no file name has been set yet

save

public void save(String fileName)
          throws ConfigurationException
Save the configuration to the specified file. This doesn't change the source of the configuration, use setFileName() if you need it.

Specified by:
save in interface FileConfiguration
Parameters:
fileName - the file name
Throws:
ConfigurationException - if an error occurs during the save operation

save

public void save(URL url)
          throws ConfigurationException
Save the configuration to the specified URL. This doesn't change the source of the configuration, use setURL() if you need it.

Specified by:
save in interface FileConfiguration
Parameters:
url - the URL
Throws:
ConfigurationException - if an error occurs during the save operation

save

public void save(File file)
          throws ConfigurationException
Save the configuration to the specified file. The file is created automatically if it doesn't exist. This doesn't change the source of the configuration, use setFile(java.io.File) if you need it.

Specified by:
save in interface FileConfiguration
Parameters:
file - the target file
Throws:
ConfigurationException - if an error occurs during the save operation

save

public void save(OutputStream out)
          throws ConfigurationException
Save the configuration to the specified stream, using the encoding returned by getEncoding().

Specified by:
save in interface FileConfiguration
Parameters:
out - the output stream
Throws:
ConfigurationException - if an error occurs during the save operation

save

public void save(OutputStream out,
                 String encoding)
          throws ConfigurationException
Save the configuration to the specified stream, using the specified encoding. If the encoding is null the default encoding is used.

Specified by:
save in interface FileConfiguration
Parameters:
out - the output stream
encoding - the encoding to use
Throws:
ConfigurationException - if an error occurs during the save operation

getFileName

public String getFileName()
Return the name of the file.

Specified by:
getFileName in interface FileConfiguration
Returns:
the file name

setFileName

public void setFileName(String fileName)
Set the name of the file. The passed in file name can contain a relative path. It must be used when referring files with relative paths from classpath. Use setPath() to set a full qualified file name.

Specified by:
setFileName in interface FileConfiguration
Parameters:
fileName - the name of the file

getBasePath

public String getBasePath()
Return the base path.

Specified by:
getBasePath in interface FileConfiguration
Returns:
the base path
See Also:
FileConfiguration.getBasePath()

setBasePath

public void setBasePath(String basePath)
Sets the base path. The base path is typically either a path to a directory or a URL. Together with the value passed to the setFileName() method it defines the location of the configuration file to be loaded. The strategies for locating the file are quite tolerant. For instance if the file name is already an absolute path or a fully defined URL, the base path will be ignored. The base path can also be a URL, in which case the file name is interpreted in this URL's context. Because the base path is used by some of the derived classes for resolving relative file names it should contain a meaningful value. If other methods are used for determining the location of the configuration file (e.g. setFile() or setURL()), the base path is automatically set.

Specified by:
setBasePath in interface FileConfiguration
Parameters:
basePath - the base path.

getFile

public File getFile()
Return the file where the configuration is stored. If the base path is a URL with a protocol different than "file", or the configuration file is within a compressed archive, the return value will not point to a valid file object.

Specified by:
getFile in interface FileConfiguration
Returns:
the file where the configuration is stored; this can be null

setFile

public void setFile(File file)
Set the file where the configuration is stored. The passed in file is made absolute if it is not yet. Then the file's path component becomes the base path and its name component becomes the file name.

Specified by:
setFile in interface FileConfiguration
Parameters:
file - the file where the configuration is stored

getPath

public String getPath()
Returns the full path to the file this configuration is based on. The return value is a valid File path only if this configuration is based on a file on the local disk. If the configuration was loaded from a packed archive the returned value is the string form of the URL from which the configuration was loaded.

Returns:
the full path to the configuration file

setPath

public void setPath(String path)
Sets the location of this configuration as a full or relative path name. The passed in path should represent a valid file name on the file system. It must not be used to specify relative paths for files that exist in classpath, either plain file system or compressed archive, because this method expands any relative path to an absolute one which may end in an invalid absolute path for classpath references.

Parameters:
path - the full path name of the configuration file

getURL

public URL getURL()
Return the URL where the configuration is stored.

Specified by:
getURL in interface FileConfiguration
Returns:
the configuration's location as URL

setURL

public void setURL(URL url)
Set the location of this configuration as a URL. For loading this can be an arbitrary URL with a supported protocol. If the configuration is to be saved, too, a URL with the "file" protocol should be provided.

Specified by:
setURL in interface FileConfiguration
Parameters:
url - the location of this configuration as URL

setAutoSave

public void setAutoSave(boolean autoSave)
Description copied from interface: FileConfiguration
Enable or disable the automatical saving of modified properties to the disk.

Specified by:
setAutoSave in interface FileConfiguration
Parameters:
autoSave - true to enable, false to disable

isAutoSave

public boolean isAutoSave()
Description copied from interface: FileConfiguration
Tells if properties are automatically saved to the disk.

Specified by:
isAutoSave in interface FileConfiguration
Returns:
true if auto-saving is enabled, false otherwise

possiblySave

protected void possiblySave()
Save the configuration if the automatic persistence is enabled and if a file is specified.


addProperty

public void addProperty(String key,
                        Object value)
Adds a new property to this configuration. This implementation checks if the auto save mode is enabled and saves the configuration if necessary.

Specified by:
addProperty in interface Configuration
Overrides:
addProperty in class AbstractConfiguration
Parameters:
key - the key of the new property
value - the value

setProperty

public void setProperty(String key,
                        Object value)
Sets a new value for the specified property. This implementation checks if the auto save mode is enabled and saves the configuration if necessary.

Specified by:
setProperty in interface Configuration
Overrides:
setProperty in class AbstractConfiguration
Parameters:
key - the key of the affected property
value - the value

clearProperty

public void clearProperty(String key)
Description copied from interface: Configuration
Remove a property from the configuration.

Specified by:
clearProperty in interface Configuration
Overrides:
clearProperty in class AbstractConfiguration
Parameters:
key - the key to be removed

getReloadingStrategy

public ReloadingStrategy getReloadingStrategy()
Description copied from interface: FileConfiguration
Return the reloading strategy.

Specified by:
getReloadingStrategy in interface FileConfiguration
Returns:
the reloading strategy currently used

setReloadingStrategy

public void setReloadingStrategy(ReloadingStrategy strategy)
Description copied from interface: FileConfiguration
Set the reloading strategy.

Specified by:
setReloadingStrategy in interface FileConfiguration
Parameters:
strategy - the reloading strategy to use

reload

public void reload()
Performs a reload operation if necessary. This method is called on each access of this configuration. It asks the associated reloading strategy whether a reload should be performed. If this is the case, the configuration is cleared and loaded again from its source. If this operation causes an exception, the registered error listeners will be notified. The error event passed to the listeners is of type EVENT_RELOAD and contains the exception that caused the event.

Specified by:
reload in interface FileConfiguration

enterNoReload

protected void enterNoReload()
Enters the "No reloading mode". As long as this mode is active no reloading will be performed. This is necessary for some implementations of save() in derived classes, which may cause a reload while accessing the properties to save. This may cause the whole configuration to be erased. To avoid this, this method can be called first. After a call to this method there always must be a corresponding call of exitNoReload() later! (If necessary, finally blocks must be used to ensure this.


exitNoReload

protected void exitNoReload()
Leaves the "No reloading mode".

See Also:
enterNoReload()

fireEvent

protected void fireEvent(int type,
                         String propName,
                         Object propValue,
                         boolean before)
Sends an event to all registered listeners. This implementation ensures that no reloads are performed while the listeners are invoked. So infinite loops can be avoided that can be caused by event listeners accessing the configuration's properties when they are invoked.

Overrides:
fireEvent in class EventSource
Parameters:
type - the event type
propName - the name of the property
propValue - the value of the property
before - the before update flag

getProperty

public Object getProperty(String key)
Description copied from interface: Configuration
Gets a property from the configuration. This is the most basic get method for retrieving values of properties. In a typical implementation of the 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).

Specified by:
getProperty in interface Configuration
Overrides:
getProperty in class BaseConfiguration
Parameters:
key - key to use for mapping
Returns:
object associated with the given configuration key.

isEmpty

public boolean isEmpty()
Description copied from interface: Configuration
Check if the configuration is empty.

Specified by:
isEmpty in interface Configuration
Overrides:
isEmpty in class BaseConfiguration
Returns:
true if Configuration is empty, false otherwise.

containsKey

public boolean containsKey(String key)
Description copied from interface: Configuration
Check if the configuration contains the specified key.

Specified by:
containsKey in interface Configuration
Overrides:
containsKey in class BaseConfiguration
Parameters:
key - the configuration key
Returns:
true if Configuration contain given key, false otherwise.

getKeys

public Iterator getKeys()
Returns an Iterator with the keys contained in this configuration. This implementation performs a reload if necessary before obtaining the keys. The Iterator returned by this method points to a snapshot taken when this method was called. Later changes at the set of keys (including those caused by a reload) won't be visible. This is because a reload can happen at any time during iteration, and it is impossible to determine how this reload affects the current iteration. When using the iterator a client has to be aware that changes of the configuration are possible at any time. For instance, if after a reload operation some keys are no longer present, the iterator will still return those keys because they were found when it was created.

Specified by:
getKeys in interface Configuration
Overrides:
getKeys in class BaseConfiguration
Returns:
an Iterator with the keys of this configuration

getEncoding

public String getEncoding()
Description copied from interface: FileConfiguration
Return the encoding used to store the configuration file. If the value is null the default encoding is used.

Specified by:
getEncoding in interface FileConfiguration
Returns:
the current encoding

setEncoding

public void setEncoding(String encoding)
Description copied from interface: FileConfiguration
Set the encoding used to store the configuration file. Set the encoding to null to use the default encoding.

Specified by:
setEncoding in interface FileConfiguration
Parameters:
encoding - the encoding to use

clone

public Object clone()
Creates a copy of this configuration. The new configuration object will contain the same properties as the original, but it will lose any connection to a source file (if one exists); this includes setting the source URL, base path, and file name to null. This is done to avoid race conditions if both the original and the copy are modified and then saved.

Overrides:
clone in class BaseConfiguration
Returns:
the copy
Since:
1.3


Copyright © 2001-2008 The Apache Software Foundation. All Rights Reserved.