org.apache.cocoon.core
Class MutableSettings

java.lang.Object
  extended byorg.apache.cocoon.core.MutableSettings
All Implemented Interfaces:
BaseSettings, DynamicSettings, Settings

public class MutableSettings
extends Object
implements Settings

This object holds the global configuration of Cocoon.

Since:
2.2
Version:
$Id: MutableSettings.java 328593 2005-10-26 08:43:00Z sylvain $

Field Summary
protected  boolean autosaveUploads
          Causes all files in multipart requests to be saved to upload-dir.
protected  String bootstrapLogLevel
          This parameter indicates the log level to use throughout startup of the system.
protected  String cacheDirectory
          This parameter allows to specify where Cocoon should create its page and other objects cache.
protected  String cocoonLogger
          This parameter indicates the category id of the logger from the LogKit management configuration for the Cocoon engine.
protected  String configuration
          This parameter points to the main configuration file for Cocoon.
protected  long configurationReloadDelay
          Delay between reload checks for the configuration.
protected  long creationTime
          The time the cocoon instance was created.
protected  boolean enableUploads
          Causes all files in multipart requests to be processed.
protected  String environmentLogger
          This parameter indicates the category id of the logger from the LogKit configuration used by the environment.
protected  List extraClasspaths
          This parameter allows to specify additional directories or jars which Cocoon should put into it's own classpath.
protected  Map forceProperties
          This parameter allows to set system properties
protected  String formEncoding
          Set form encoding.
protected  boolean hideShowTime
          If true, processing time will be added as an HTML comment
protected static String KEYPREFIX
          Prefix for properties
protected  boolean lazyMode
          Lazy mode for component loading
protected  List loadClasses
          This parameter is used to list classes that should be loaded at initialization time of the servlet.
protected  String loggerManagerClassName
          This parameter switches the logging system from LogKit to Log4J for Cocoon.
protected  String loggingConfiguration
          This parameter indicates the configuration file of the LogKit management
protected  boolean manageExceptions
          If true or not set, this class will try to catch and handle all Cocoon exceptions.
protected  int maxUploadSize
          Specify maximum allowed size of the upload.
protected  String overrideLogLevel
          If this value is specified, it will be interpreted as a log level and all logging categories will be set to this level regardless of their definition in the logging configuration.
protected  String overwriteUploads
          Specify handling of name conflicts when saving uploaded files to disk.
protected  String parentServiceManagerClassName
          This parameter allows you to select the parent service manager.
protected  List properties
          The list of properties used to configure Cocoon
protected  List propertyProviders
          The property providers.
protected  boolean readOnly
          Are we still mutable?
protected  boolean reloadingEnabled
          Allow reinstantiating (reloading) of the cocoon instance.
protected  boolean showCocoonVersion
          If true, the X-Cocoon-Version response header will be included.
protected  boolean showTime
          Allow adding processing time to the response
protected  String uploadDirectory
          This parameter allows to specify where Cocoon should put uploaded files.
protected  String workDirectory
          This parameter allows to specify where Cocoon should put it's working files.
 
Fields inherited from interface org.apache.cocoon.core.BaseSettings
DEFAULT_RUNNING_MODE, KEY_CACHE_DIRECTORY, KEY_CONFIGURATION, KEY_EXTRA_CLASSPATHS, KEY_FORCE_PROPERTIES, KEY_FORM_ENCODING, KEY_LOAD_CLASSES, KEY_LOGGING_BOOTSTRAP_LOGLEVEL, KEY_LOGGING_COCOON_LOGGER, KEY_LOGGING_CONFIGURATION, KEY_LOGGING_ENVIRONMENT_LOGGER, KEY_LOGGING_MANAGER_CLASS, KEY_LOGGING_OVERRIDE_LOGLEVEL, KEY_MANAGE_EXCEPTIONS, KEY_PARENT_SERVICE_MANAGER, KEY_PROPERTY_PROVIDER, KEY_UPLOADS_DIRECTORY, KEY_WORK_DIRECTORY, MANAGE_EXCEPTIONS, PROPERTY_RUNNING_MODE, PROPERTY_USER_SETTINGS
 
Fields inherited from interface org.apache.cocoon.core.DynamicSettings
ENABLE_UPLOADS, HIDE_SHOW_TIME, KEY_HIDE_SHOWTIME, KEY_LAZY_MODE, KEY_RELOAD_DELAY, KEY_RELOADING, KEY_SHOW_VERSION, KEY_SHOWTIME, KEY_UPLOADS_AUTOSAVE, KEY_UPLOADS_ENABLE, KEY_UPLOADS_MAXSIZE, KEY_UPLOADS_OVERWRITE, MAX_UPLOAD_SIZE, RELOADING_ENABLED_DEFAULT, SAVE_UPLOADS_TO_DISK, SHOW_COCOON_VERSION, SHOW_TIME
 
Constructor Summary
MutableSettings()
          Create a new settings object
 
Method Summary
 void addToExtraClasspaths(String extraClasspath)
           
 void addToForceProperties(String key, String value)
           
 void addToLoadClasses(String className)
           
 void addToPropertyProviders(String className)
          Add a property provider.
protected  void checkWriteable()
          check if this configuration is writeable.
 void fill(Properties props)
          Fill from a properties object
 String getBootstrapLogLevel()
           
 String getCacheDirectory()
           
 String getCocoonLogger()
           
 String getConfiguration()
           
 long getCreationTime()
          The creation time of the current Cocoon instance.
 String getEnvironmentLogger()
           
 List getExtraClasspaths()
           
 Map getForceProperties()
           
 String getFormEncoding()
           
 List getLoadClasses()
           
 String getLoggerManagerClassName()
           
 String getLoggingConfiguration()
           
 int getMaxUploadSize()
           
 String getOverrideLogLevel()
           
 String getOverwriteUploads()
           
 String getParentServiceManagerClassName()
           
 List getProperties(String keyPrefix)
          Return all available properties starting with the prefix.
 String getProperty(String name)
          Get the value of a property.
 String getProperty(String key, String defaultValue)
          Get the value of a property.
 List getPropertyProviders()
           
 long getReloadDelay(String type)
          This method can be used by components to get the configured delay period inbetween checks.
 String getUploadDirectory()
           
 String getWorkDirectory()
           
 boolean isAllowOverwrite()
           
 boolean isAutosaveUploads()
           
 boolean isEnableUploads()
           
 boolean isHideShowTime()
           
 boolean isLazyMode()
           
 boolean isManageExceptions()
           
 boolean isReloadingEnabled(String type)
          This method can be used by components to query if they are configured to check for reloading.
 boolean isShowTime()
           
 boolean isShowVersion()
           
 boolean isSilentlyRename()
           
 void makeReadOnly()
          Mark this object as read-only.
 void setAutosaveUploads(boolean autosaveUploads)
           
 void setBootstrapLogLevel(String logLevel)
           
 void setCacheDirectory(String cacheDirectory)
           
 void setCocoonLogger(String cocoonLogger)
           
 void setConfiguration(String configuration)
           
 void setConfigurationReloadDelay(long configurationReloadDelay)
           
 void setCreationTime(long value)
          Set the creation time of the current cocoon instance.
 void setEnableUploads(boolean enableUploads)
           
 void setEnvironmentLogger(String logger)
           
 void setFormEncoding(String formEncoding)
           
 void setHideShowTime(boolean hideShowTime)
           
 void setLazyMode(boolean lazyMode)
           
 void setLoggerManagerClassName(String loggerClassName)
           
 void setLoggingConfiguration(String loggingConfiguration)
           
 void setManageExceptions(boolean manageExceptions)
           
 void setMaxUploadSize(int maxUploadSize)
           
 void setOverrideLogLevel(String overrideLogLevel)
           
 void setOverwriteUploads(String overwriteUploads)
           
 void setParentServiceManagerClassName(String parentServiceManagerClassName)
           
 void setReloadingEnabled(boolean allowReload)
           
 void setShowCocoonVersion(boolean showCocoonVersion)
           
 void setShowTime(boolean showTime)
           
 void setUploadDirectory(String uploadDirectory)
           
 void setWorkDirectory(String workDirectory)
           
 String toString()
           
protected  String toString(List a)
          Helper method to make a string out of a list of objects.
protected  String toString(Map a)
          Helper method to make a string out of a map of objects.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

readOnly

protected boolean readOnly
Are we still mutable?


KEYPREFIX

protected static final String KEYPREFIX
Prefix for properties

See Also:
Constant Field Values

properties

protected List properties
The list of properties used to configure Cocoon


forceProperties

protected Map forceProperties
This parameter allows to set system properties


configuration

protected String configuration
This parameter points to the main configuration file for Cocoon. Note that the path is specified in absolute notation but it will be resolved relative to the application context path.


loggingConfiguration

protected String loggingConfiguration
This parameter indicates the configuration file of the LogKit management


environmentLogger

protected String environmentLogger
This parameter indicates the category id of the logger from the LogKit configuration used by the environment.


cocoonLogger

protected String cocoonLogger
This parameter indicates the category id of the logger from the LogKit management configuration for the Cocoon engine. This logger is used for all components described in the cocoon.xconf and sitemap.xmap file not having specified a logger with the logger="..." attribute in the component configuration file.


bootstrapLogLevel

protected String bootstrapLogLevel
This parameter indicates the log level to use throughout startup of the system. As soon as the logkit.xconf the setting of the logkit.xconf configuration is used instead! Only for startup and if the logkit.xconf is not readable/available this log level is of importance.


loggerManagerClassName

protected String loggerManagerClassName
This parameter switches the logging system from LogKit to Log4J for Cocoon.


reloadingEnabled

protected boolean reloadingEnabled
Allow reinstantiating (reloading) of the cocoon instance. If this is set to "yes" or "true", a new cocoon instance can be created using the request parameter "cocoon-reload". It also enables that Cocoon is reloaded when cocoon.xconf changes. Default is no for security reasons.


loadClasses

protected List loadClasses
This parameter is used to list classes that should be loaded at initialization time of the servlet. For example, JDBC Drivers used need to be named here. Additional entries may be inserted here during build depending on your build properties.


enableUploads

protected boolean enableUploads
Causes all files in multipart requests to be processed. Default is false for security reasons.


uploadDirectory

protected String uploadDirectory
This parameter allows to specify where Cocoon should put uploaded files. The path specified can be either absolute or relative to the context path of the servlet. On windows platform, absolute directory must start with volume: C:\Path\To\Upload\Directory.


autosaveUploads

protected boolean autosaveUploads
Causes all files in multipart requests to be saved to upload-dir. Default is true for security reasons.


overwriteUploads

protected String overwriteUploads
Specify handling of name conflicts when saving uploaded files to disk. Acceptable values are deny, allow, rename (default). Files are renamed x_filename where x is an integer value incremented to make the new filename unique.


maxUploadSize

protected int maxUploadSize
Specify maximum allowed size of the upload. Defaults to 10 Mb.


cacheDirectory

protected String cacheDirectory
This parameter allows to specify where Cocoon should create its page and other objects cache. The path specified can be either absolute or relative to the context path of the servlet. On windows platform, absolute directory must start with volume: C:\Path\To\Cache\Directory.


workDirectory

protected String workDirectory
This parameter allows to specify where Cocoon should put it's working files. The path specified is either absolute or relative to the context path of the Cocoon servlet. On windows platform, absolute directory must start with volume: C:\Path\To\Work\Directory.


extraClasspaths

protected List extraClasspaths
This parameter allows to specify additional directories or jars which Cocoon should put into it's own classpath. Note that absolute pathes are taken as such but relative pathes are rooted at the context root of the Cocoon servlet.


parentServiceManagerClassName

protected String parentServiceManagerClassName
This parameter allows you to select the parent service manager. The class will be instantiated via the constructor that takes a single String as a parameter. That String will be equal to the text after the '/'. Cocoon honors the LogEnabled, Initializable and Disposable interfaces for this class, if it implements them.


showTime

protected boolean showTime
Allow adding processing time to the response


hideShowTime

protected boolean hideShowTime
If true, processing time will be added as an HTML comment


showCocoonVersion

protected boolean showCocoonVersion
If true, the X-Cocoon-Version response header will be included.


manageExceptions

protected boolean manageExceptions
If true or not set, this class will try to catch and handle all Cocoon exceptions. If false, it will rethrow them to the servlet container.


formEncoding

protected String formEncoding
Set form encoding. This will be the character set used to decode request parameters. If not set the ISO-8859-1 encoding will be assumed.


overrideLogLevel

protected String overrideLogLevel
If this value is specified, it will be interpreted as a log level and all logging categories will be set to this level regardless of their definition in the logging configuration.


configurationReloadDelay

protected long configurationReloadDelay
Delay between reload checks for the configuration.


lazyMode

protected boolean lazyMode
Lazy mode for component loading


creationTime

protected long creationTime
The time the cocoon instance was created.


propertyProviders

protected List propertyProviders
The property providers.

Constructor Detail

MutableSettings

public MutableSettings()
Create a new settings object

Method Detail

fill

public void fill(Properties props)
Fill from a properties object


isHideShowTime

public boolean isHideShowTime()
Specified by:
isHideShowTime in interface DynamicSettings
Returns:
Returns the hideShowTime.
See Also:
DynamicSettings.KEY_HIDE_SHOWTIME

isReloadingEnabled

public boolean isReloadingEnabled(String type)
Description copied from interface: DynamicSettings
This method can be used by components to query if they are configured to check for reloading.

Specified by:
isReloadingEnabled in interface DynamicSettings
Parameters:
type - The type of the component that wants to check for reload.
Returns:
Returns the allowReload.
See Also:
DynamicSettings.KEY_RELOADING

isAutosaveUploads

public boolean isAutosaveUploads()
Specified by:
isAutosaveUploads in interface DynamicSettings
Returns:
Returns the autosaveUploads.
See Also:
DynamicSettings.KEY_UPLOADS_AUTOSAVE

getCacheDirectory

public String getCacheDirectory()
Specified by:
getCacheDirectory in interface BaseSettings
Returns:
Returns the cacheDirectory.
See Also:
BaseSettings.KEY_CACHE_DIRECTORY

getCocoonLogger

public String getCocoonLogger()
Specified by:
getCocoonLogger in interface BaseSettings
Returns:
Returns the cocoonLogger.
See Also:
BaseSettings.KEY_LOGGING_COCOON_LOGGER

getConfiguration

public String getConfiguration()
Specified by:
getConfiguration in interface BaseSettings
Returns:
Returns the configuration.
See Also:
BaseSettings.KEY_CONFIGURATION

isEnableUploads

public boolean isEnableUploads()
Specified by:
isEnableUploads in interface DynamicSettings
Returns:
Returns the enableUploads.
See Also:
DynamicSettings.KEY_UPLOADS_ENABLE

getExtraClasspaths

public List getExtraClasspaths()
Specified by:
getExtraClasspaths in interface BaseSettings
Returns:
Returns the extraClasspaths.
See Also:
BaseSettings.KEY_EXTRA_CLASSPATHS

getForceProperties

public Map getForceProperties()
Specified by:
getForceProperties in interface BaseSettings
Returns:
Returns the forceProperties.
See Also:
BaseSettings.KEY_FORCE_PROPERTIES

getFormEncoding

public String getFormEncoding()
Specified by:
getFormEncoding in interface BaseSettings
Returns:
Returns the formEncoding.
See Also:
BaseSettings.KEY_FORM_ENCODING

getLoadClasses

public List getLoadClasses()
Specified by:
getLoadClasses in interface BaseSettings
Returns:
Returns the loadClasses.
See Also:
BaseSettings.KEY_LOAD_CLASSES

getLoggerManagerClassName

public String getLoggerManagerClassName()
Specified by:
getLoggerManagerClassName in interface BaseSettings
Returns:
Returns the loggerClassName.
See Also:
BaseSettings.KEY_LOGGING_MANAGER_CLASS

getLoggingConfiguration

public String getLoggingConfiguration()
Specified by:
getLoggingConfiguration in interface BaseSettings
Returns:
Returns the loggingConfiguration.
See Also:
BaseSettings.KEY_LOGGING_CONFIGURATION

getBootstrapLogLevel

public String getBootstrapLogLevel()
Specified by:
getBootstrapLogLevel in interface BaseSettings
Returns:
Returns the logLevel.
See Also:
BaseSettings.KEY_LOGGING_BOOTSTRAP_LOGLEVEL

isManageExceptions

public boolean isManageExceptions()
Specified by:
isManageExceptions in interface BaseSettings
Returns:
Returns the manageExceptions.
See Also:
BaseSettings.KEY_MANAGE_EXCEPTIONS

getMaxUploadSize

public int getMaxUploadSize()
Specified by:
getMaxUploadSize in interface DynamicSettings
Returns:
Returns the maxUploadSize.
See Also:
DynamicSettings.KEY_UPLOADS_MAXSIZE

getOverwriteUploads

public String getOverwriteUploads()
Specified by:
getOverwriteUploads in interface DynamicSettings
Returns:
Returns the overwriteUploads.
See Also:
DynamicSettings.KEY_UPLOADS_OVERWRITE

getParentServiceManagerClassName

public String getParentServiceManagerClassName()
Specified by:
getParentServiceManagerClassName in interface BaseSettings
Returns:
Returns the parentServiceManagerClassName.
See Also:
BaseSettings.KEY_PARENT_SERVICE_MANAGER

isShowTime

public boolean isShowTime()
Specified by:
isShowTime in interface DynamicSettings
Returns:
Returns the showTime.
See Also:
DynamicSettings.KEY_SHOWTIME

isShowVersion

public boolean isShowVersion()
Specified by:
isShowVersion in interface DynamicSettings
Returns:
Returns the showCocoonVersion flag.
See Also:
DynamicSettings.KEY_SHOW_VERSION

getUploadDirectory

public String getUploadDirectory()
Specified by:
getUploadDirectory in interface BaseSettings
Returns:
Returns the uploadDirectory.
See Also:
BaseSettings.KEY_UPLOADS_DIRECTORY

getWorkDirectory

public String getWorkDirectory()
Specified by:
getWorkDirectory in interface BaseSettings
Returns:
Returns the workDirectory.
See Also:
BaseSettings.KEY_WORK_DIRECTORY

getEnvironmentLogger

public String getEnvironmentLogger()
Specified by:
getEnvironmentLogger in interface BaseSettings
Returns:
Returns the accessLogger.
See Also:
BaseSettings.KEY_LOGGING_ENVIRONMENT_LOGGER

getOverrideLogLevel

public String getOverrideLogLevel()
Specified by:
getOverrideLogLevel in interface BaseSettings
Returns:
Returns the overrideLogLevel.
See Also:
BaseSettings.KEY_LOGGING_OVERRIDE_LOGLEVEL

isAllowOverwrite

public boolean isAllowOverwrite()
Specified by:
isAllowOverwrite in interface DynamicSettings

isSilentlyRename

public boolean isSilentlyRename()
Specified by:
isSilentlyRename in interface DynamicSettings

getReloadDelay

public long getReloadDelay(String type)
Description copied from interface: DynamicSettings
This method can be used by components to get the configured delay period inbetween checks.

Specified by:
getReloadDelay in interface DynamicSettings
Parameters:
type - The type of the component that wants to check for reload.
Returns:
Returns the configurationReloadDelay.
See Also:
DynamicSettings.KEY_RELOAD_DELAY

isLazyMode

public boolean isLazyMode()
Specified by:
isLazyMode in interface DynamicSettings
Returns:
Returns the lazyMode.
See Also:
DynamicSettings.KEY_LAZY_MODE

getProperty

public String getProperty(String name)
Description copied from interface: Settings
Get the value of a property.

Specified by:
getProperty in interface Settings
Parameters:
name - The name of the property.
Returns:
The value of the property or null.

getProperty

public String getProperty(String key,
                          String defaultValue)
Description copied from interface: Settings
Get the value of a property.

Specified by:
getProperty in interface Settings
Parameters:
key - The name of the property.
defaultValue - The value returned if the property is not available.
Returns:
The value of the property or if the property cannot be found the default value.

toString

public String toString()
See Also:
Object.toString()

toString

protected String toString(List a)
Helper method to make a string out of a list of objects.


toString

protected String toString(Map a)
Helper method to make a string out of a map of objects.


setHideShowTime

public void setHideShowTime(boolean hideShowTime)
Parameters:
hideShowTime - The hideShowTime to set.

setReloadingEnabled

public void setReloadingEnabled(boolean allowReload)
Parameters:
allowReload - The allowReload to set.

setAutosaveUploads

public void setAutosaveUploads(boolean autosaveUploads)
Parameters:
autosaveUploads - The autosaveUploads to set.

setCacheDirectory

public void setCacheDirectory(String cacheDirectory)
Parameters:
cacheDirectory - The cacheDirectory to set.

setCocoonLogger

public void setCocoonLogger(String cocoonLogger)
Parameters:
cocoonLogger - The cocoonLogger to set.

setConfiguration

public void setConfiguration(String configuration)
Parameters:
configuration - The configuration to set.

setEnableUploads

public void setEnableUploads(boolean enableUploads)
Parameters:
enableUploads - The enableUploads to set.

addToExtraClasspaths

public void addToExtraClasspaths(String extraClasspath)
Parameters:
extraClasspath - The extraClasspaths to set.

addToForceProperties

public void addToForceProperties(String key,
                                 String value)
Parameters:
key - The forceProperties to set.
value - The forceProperties value to set.

setFormEncoding

public void setFormEncoding(String formEncoding)
Parameters:
formEncoding - The formEncoding to set.

addToLoadClasses

public void addToLoadClasses(String className)
Parameters:
className - The loadClasses to set.

setLoggerManagerClassName

public void setLoggerManagerClassName(String loggerClassName)
Parameters:
loggerClassName - The loggerClassName to set.

setLoggingConfiguration

public void setLoggingConfiguration(String loggingConfiguration)
Parameters:
loggingConfiguration - The loggingConfiguration to set.

setBootstrapLogLevel

public void setBootstrapLogLevel(String logLevel)
Parameters:
logLevel - The logLevel to set.

setManageExceptions

public void setManageExceptions(boolean manageExceptions)
Parameters:
manageExceptions - The manageExceptions to set.

setMaxUploadSize

public void setMaxUploadSize(int maxUploadSize)
Parameters:
maxUploadSize - The maxUploadSize to set.

setOverwriteUploads

public void setOverwriteUploads(String overwriteUploads)
Parameters:
overwriteUploads - The overwriteUploads to set.

setParentServiceManagerClassName

public void setParentServiceManagerClassName(String parentServiceManagerClassName)
Parameters:
parentServiceManagerClassName - The parentServiceManagerClassName to set.

setShowTime

public void setShowTime(boolean showTime)
Parameters:
showTime - The showTime to set.

setShowCocoonVersion

public void setShowCocoonVersion(boolean showCocoonVersion)
Parameters:
showCocoonVersion - The showCocoonVersion flag to set.

setUploadDirectory

public void setUploadDirectory(String uploadDirectory)
Parameters:
uploadDirectory - The uploadDirectory to set.

setWorkDirectory

public void setWorkDirectory(String workDirectory)
Parameters:
workDirectory - The workDirectory to set.

setEnvironmentLogger

public void setEnvironmentLogger(String logger)
Parameters:
logger - The logger for the environment.

setOverrideLogLevel

public void setOverrideLogLevel(String overrideLogLevel)
Parameters:
overrideLogLevel - The overrideLogLevel to set.

setConfigurationReloadDelay

public void setConfigurationReloadDelay(long configurationReloadDelay)
Parameters:
configurationReloadDelay - The configurationReloadDelay to set.

setLazyMode

public void setLazyMode(boolean lazyMode)
Parameters:
lazyMode - The lazyMode to set.

makeReadOnly

public void makeReadOnly()
Mark this object as read-only.


checkWriteable

protected final void checkWriteable()
                             throws IllegalStateException
check if this configuration is writeable.

Throws:
IllegalStateException - if this setting is read-only

getCreationTime

public long getCreationTime()
Description copied from interface: BaseSettings
The creation time of the current Cocoon instance.

Specified by:
getCreationTime in interface BaseSettings
See Also:
BaseSettings.getCreationTime()

setCreationTime

public void setCreationTime(long value)
Set the creation time of the current cocoon instance.


getPropertyProviders

public List getPropertyProviders()
Specified by:
getPropertyProviders in interface BaseSettings
Returns:
All property providers.
See Also:
BaseSettings.getPropertyProviders()

addToPropertyProviders

public void addToPropertyProviders(String className)
Add a property provider.


getProperties

public List getProperties(String keyPrefix)
Description copied from interface: Settings
Return all available properties starting with the prefix.

Specified by:
getProperties in interface Settings
Parameters:
keyPrefix - The prefix each property name must have.
Returns:
A list of property names (including the prefix) or an empty list.
See Also:
Settings.getProperties(java.lang.String)


Copyright ? 1999-2005 The Apache Software Foundation. All Rights Reserved.