2012/11/6 Oliver Heger <oliver.he...@oliver-heger.de> > Am 06.11.2012 09:57, schrieb Benedikt Ritter: > > Hi Oliver, >> >> thanks for the clarification. I see where you are going with the design. >> What do you think of my proposal to implement the configuration interfaces >> like the java collections framework? I can think of >> Configurations.**unmodifiableConfiguration(**Configuration config). >> > > Such a method already exists in ConfigurationUtils, however it is based on > the dynamic proxy approach. This has the advantage that you only have a > stripped-down interface in hand which does not allow you to call an > unsupported method. > > Hi Oliver,
okay, now I get why Configuration has to extend ImmutableConfiguration. thanks! Benedikt > Oliver > > >> Benedikt >> >> >> 2012/11/6 Oliver Heger <oliver.he...@oliver-heger.de> >> >> Hi Benedikt, >>> >>> Am 05.11.2012 21:04, schrieb Benedikt Ritter: >>> >>> 2012/11/5 Benedikt Ritter <benerit...@gmail.com> >>> >>>> >>>> Hi Oliver, >>>> >>>>> >>>>> >>>>> 2012/11/5 <ohe...@apache.org> >>>>> >>>>> Author: oheger >>>>> >>>>> Date: Mon Nov 5 17:29:01 2012 >>>>>> New Revision: 1405889 >>>>>> >>>>>> URL: >>>>>> http://svn.apache.org/viewvc?****rev=1405889&view=rev<http://svn.apache.org/viewvc?**rev=1405889&view=rev> >>>>>> <http://**svn.apache.org/viewvc?rev=**1405889&view=rev<http://svn.apache.org/viewvc?rev=1405889&view=rev> >>>>>> > >>>>>> >>>>>> Log: >>>>>> Initial version of an immutable configuration interface. >>>>>> >>>>>> Added: >>>>>> >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****ImmutableConfiguration.java >>>>>> (with props) >>>>>> Modified: >>>>>> >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****Configuration.java >>>>>> >>>>>> Modified: >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****Configuration.java >>>>>> URL: >>>>>> http://svn.apache.org/viewvc/****commons/proper/configuration/****<http://svn.apache.org/viewvc/**commons/proper/configuration/**> >>>>>> trunk/src/main/java/org/****apache/commons/configuration/**** >>>>>> Configuration.java?rev=****1405889&r1=1405888&r2=1405889&** >>>>>> **view=diff<http://svn.apache.**org/viewvc/commons/proper/** >>>>>> configuration/trunk/src/main/**java/org/apache/commons/** >>>>>> configuration/Configuration.**java?rev=1405889&r1=1405888&** >>>>>> r2=1405889&view=diff<http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/Configuration.java?rev=1405889&r1=1405888&r2=1405889&view=diff> >>>>>> > >>>>>> >>>>>> ==============================****============================**==** >>>>>> ================== >>>>>> --- >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****Configuration.java >>>>>> (original) >>>>>> +++ >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****Configuration.java >>>>>> >>>>>> Mon Nov 5 17:29:01 2012 >>>>>> @@ -17,11 +17,6 @@ >>>>>> >>>>>> package org.apache.commons.****configuration; >>>>>> >>>>>> >>>>>> -import java.math.BigDecimal; >>>>>> -import java.math.BigInteger; >>>>>> -import java.util.Iterator; >>>>>> -import java.util.List; >>>>>> -import java.util.Properties; >>>>>> >>>>>> /** >>>>>> * <p>The main Configuration interface.</p> >>>>>> @@ -54,7 +49,7 @@ import java.util.Properties; >>>>>> * @author Commons Configuration team >>>>>> * @version $Id$ >>>>>> */ >>>>>> -public interface Configuration >>>>>> +public interface Configuration extends ImmutableConfiguration >>>>>> >>>>>> >>>>>> A Configuration IS_A ImmutableConfiguration sounds rather akward. The >>>>> JavaDoc of ImmutableConfiguration says "The main interface for >>>>> accessing >>>>> configuration data in a read-only fashion." Maybe >>>>> ImmutableConfiguration >>>>> should be renamed to ReadOnlyConfiguration? >>>>> >>>>> Regards, >>>>> Benedikt >>>>> >>>>> >>>>> Looking at the code base, there is no class that implements >>>> ImmutableConfiguration directly and Configuration is the only interface >>>> that extends ImmutableConfiguration. So maybe the two can be merged >>>> together? >>>> >>>> >>> The ImmutableConfiguration interface has just been extracted from >>> Configuration in order to implement the feature of immutable >>> configurations. It contains all methods that do not manipulate the >>> configuration. A full-blown configuration extends this functionality by >>> additional update operations. >>> >>> It is true that currently all concrete Configuration implementations >>> support the extended interface with update operations. However, >>> ImmutableConfiguration is implemented by dynamic proxies which provide an >>> immutable view on an arbitrary Configuration object. >>> >>> Regarding the name: I am open for suggestions. ReadOnlyConfiguration, >>> ImmutableConfiguration, UnmodifiableConfiguration,... Maybe a native >>> speaker can comment? >>> >>> Oliver >>> >>> >>> >>> Benedikt >>>> >>>> >>>> >>>> >>>>> { >>>>> >>>>>> /** >>>>>> * Return a decorator Configuration containing every key from >>>>>> the >>>>>> current >>>>>> @@ -90,24 +85,6 @@ public interface Configuration >>>>>> Configuration subset(String prefix); >>>>>> >>>>>> /** >>>>>> - * Check if the configuration is empty. >>>>>> - * >>>>>> - * @return {@code true} if the configuration contains no >>>>>> property, >>>>>> - * {@code false} otherwise. >>>>>> - */ >>>>>> - boolean isEmpty(); >>>>>> - >>>>>> - /** >>>>>> - * Check if the configuration contains the specified key. >>>>>> - * >>>>>> - * @param key the key whose presence in this configuration is to >>>>>> be >>>>>> tested >>>>>> - * >>>>>> - * @return {@code true} if the configuration contains a value for >>>>>> this >>>>>> - * key, {@code false} otherwise >>>>>> - */ >>>>>> - boolean containsKey(String key); >>>>>> - >>>>>> - /** >>>>>> * Add a property to the configuration. If it already exists >>>>>> then >>>>>> the value >>>>>> * stated here will be added to the configuration entry. For >>>>>> example, if >>>>>> * the property: >>>>>> @@ -147,452 +124,4 @@ public interface Configuration >>>>>> * Remove all properties from the configuration. >>>>>> */ >>>>>> void clear(); >>>>>> - >>>>>> - /** >>>>>> - * Gets a property from the configuration. This is the most basic >>>>>> get >>>>>> - * method for retrieving values of properties. In a typical >>>>>> implementation >>>>>> - * of the {@code 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 {@code 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). >>>>>> - * >>>>>> - * @param key property to retrieve >>>>>> - * @return the value to which this configuration maps the >>>>>> specified >>>>>> key, or >>>>>> - * null if the configuration contains no mapping for this >>>>>> key. >>>>>> - */ >>>>>> - Object getProperty(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get the list of the keys contained in the configuration that >>>>>> match the >>>>>> - * specified prefix. For instance, if the configuration contains >>>>>> the >>>>>> - * following keys:<br> >>>>>> - * {@code db.user, db.pwd, db.url, window.xpos, window.ypos},<br> >>>>>> - * an invocation of {@code getKeys("db");}<br> >>>>>> - * will return the keys below:<br> >>>>>> - * {@code db.user, db.pwd, db.url}.<br> >>>>>> - * Note that the prefix itself is included in the result set if >>>>>> there is a >>>>>> - * matching key. The exact behavior - how the prefix is actually >>>>>> - * interpreted - depends on a concrete implementation. >>>>>> - * >>>>>> - * @param prefix The prefix to test against. >>>>>> - * @return An Iterator of keys that match the prefix. >>>>>> - * @see #getKeys() >>>>>> - */ >>>>>> - Iterator<String> getKeys(String prefix); >>>>>> - >>>>>> - /** >>>>>> - * Get the list of the keys contained in the configuration. The >>>>>> returned >>>>>> - * iterator can be used to obtain all defined keys. Note that the >>>>>> exact >>>>>> - * behavior of the iterator's {@code remove()} method is specific >>>>>> to >>>>>> - * a concrete implementation. It <em>may</em> remove the >>>>>> corresponding >>>>>> - * property from the configuration, but this is not guaranteed. >>>>>> In >>>>>> any case >>>>>> - * it is no replacement for calling >>>>>> - * {@link #clearProperty(String)} for this property. So it is >>>>>> - * highly recommended to avoid using the iterator's {@code >>>>>> remove()} >>>>>> - * method. >>>>>> - * >>>>>> - * @return An Iterator. >>>>>> - */ >>>>>> - Iterator<String> getKeys(); >>>>>> - >>>>>> - /** >>>>>> - * Get a list of properties associated with the given >>>>>> configuration >>>>>> key. >>>>>> - * This method expects the given key to have an arbitrary number >>>>>> of >>>>>> String >>>>>> - * values, each of which is of the form {code key=value}. These >>>>>> - * strings are split at the equals sign, and the key parts will >>>>>> become >>>>>> - * keys of the returned {@code Properties} object, the value >>>>>> parts >>>>>> - * become values. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated properties if key is found. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a String/List. >>>>>> - * >>>>>> - * @throws IllegalArgumentException if one of the tokens is >>>>>> - * malformed (does not contain an equals sign). >>>>>> - */ >>>>>> - Properties getProperties(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a boolean associated with the given configuration key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated boolean. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Boolean. >>>>>> - */ >>>>>> - boolean getBoolean(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a boolean associated with the given configuration key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated boolean. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Boolean. >>>>>> - */ >>>>>> - boolean getBoolean(String key, boolean defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a {@link Boolean} associated with the given configuration >>>>>> key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated boolean if key is found and has valid >>>>>> - * format, default value otherwise. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Boolean. >>>>>> - */ >>>>>> - Boolean getBoolean(String key, Boolean defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a byte associated with the given configuration key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated byte. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Byte. >>>>>> - */ >>>>>> - byte getByte(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a byte associated with the given configuration key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated byte. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Byte. >>>>>> - */ >>>>>> - byte getByte(String key, byte defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a {@link Byte} associated with the given configuration >>>>>> key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated byte if key is found and has valid >>>>>> format, >>>>>> default >>>>>> - * value otherwise. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> object that >>>>>> - * is not a Byte. >>>>>> - */ >>>>>> - Byte getByte(String key, Byte defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a double associated with the given configuration key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated double. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Double. >>>>>> - */ >>>>>> - double getDouble(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a double associated with the given configuration key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated double. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Double. >>>>>> - */ >>>>>> - double getDouble(String key, double defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a {@link Double} associated with the given configuration >>>>>> key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated double if key is found and has valid >>>>>> - * format, default value otherwise. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Double. >>>>>> - */ >>>>>> - Double getDouble(String key, Double defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a float associated with the given configuration key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated float. >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Float. >>>>>> - */ >>>>>> - float getFloat(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a float associated with the given configuration key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated float. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Float. >>>>>> - */ >>>>>> - float getFloat(String key, float defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a {@link Float} associated with the given configuration >>>>>> key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated float if key is found and has valid >>>>>> - * format, default value otherwise. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Float. >>>>>> - */ >>>>>> - Float getFloat(String key, Float defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a int associated with the given configuration key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated int. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Integer. >>>>>> - */ >>>>>> - int getInt(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a int associated with the given configuration key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated int. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Integer. >>>>>> - */ >>>>>> - int getInt(String key, int defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get an {@link Integer} associated with the given configuration >>>>>> key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated int if key is found and has valid >>>>>> format, >>>>>> default >>>>>> - * value otherwise. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> object that >>>>>> - * is not a Integer. >>>>>> - */ >>>>>> - Integer getInteger(String key, Integer defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a long associated with the given configuration key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated long. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Long. >>>>>> - */ >>>>>> - long getLong(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a long associated with the given configuration key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated long. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Long. >>>>>> - */ >>>>>> - long getLong(String key, long defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a {@link Long} associated with the given configuration >>>>>> key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated long if key is found and has valid >>>>>> - * format, default value otherwise. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Long. >>>>>> - */ >>>>>> - Long getLong(String key, Long defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a short associated with the given configuration key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated short. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Short. >>>>>> - */ >>>>>> - short getShort(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a short associated with the given configuration key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated short. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Short. >>>>>> - */ >>>>>> - short getShort(String key, short defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a {@link Short} associated with the given configuration >>>>>> key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated short if key is found and has valid >>>>>> - * format, default value otherwise. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a Short. >>>>>> - */ >>>>>> - Short getShort(String key, Short defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a {@link BigDecimal} associated with the given >>>>>> configuration >>>>>> key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated BigDecimal if key is found and has >>>>>> valid >>>>>> format >>>>>> - */ >>>>>> - BigDecimal getBigDecimal(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a {@link BigDecimal} associated with the given >>>>>> configuration >>>>>> key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * >>>>>> - * @return The associated BigDecimal if key is found and has >>>>>> valid >>>>>> - * format, default value otherwise. >>>>>> - */ >>>>>> - BigDecimal getBigDecimal(String key, BigDecimal defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a {@link BigInteger} associated with the given >>>>>> configuration >>>>>> key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * >>>>>> - * @return The associated BigInteger if key is found and has >>>>>> valid >>>>>> format >>>>>> - */ >>>>>> - BigInteger getBigInteger(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a {@link BigInteger} associated with the given >>>>>> configuration >>>>>> key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * >>>>>> - * @return The associated BigInteger if key is found and has >>>>>> valid >>>>>> - * format, default value otherwise. >>>>>> - */ >>>>>> - BigInteger getBigInteger(String key, BigInteger defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get a string associated with the given configuration key. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated string. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> object that >>>>>> - * is not a String. >>>>>> - */ >>>>>> - String getString(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a string associated with the given configuration key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated string if key is found and has valid >>>>>> - * format, default value otherwise. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> object that >>>>>> - * is not a String. >>>>>> - */ >>>>>> - String getString(String key, String defaultValue); >>>>>> - >>>>>> - /** >>>>>> - * Get an array of strings associated with the given >>>>>> configuration >>>>>> key. >>>>>> - * If the key doesn't map to an existing object an empty array is >>>>>> returned >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated string array if key is found. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a String/List of Strings. >>>>>> - */ >>>>>> - String[] getStringArray(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a List of strings associated with the given configuration >>>>>> key. >>>>>> - * If the key doesn't map to an existing object an empty List is >>>>>> returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @return The associated List. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a List. >>>>>> - */ >>>>>> - List<Object> getList(String key); >>>>>> - >>>>>> - /** >>>>>> - * Get a List of strings associated with the given configuration >>>>>> key. >>>>>> - * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> - * is returned. >>>>>> - * >>>>>> - * @param key The configuration key. >>>>>> - * @param defaultValue The default value. >>>>>> - * @return The associated List of strings. >>>>>> - * >>>>>> - * @throws ConversionException is thrown if the key maps to an >>>>>> - * object that is not a List. >>>>>> - */ >>>>>> - List<Object> getList(String key, List<Object> defaultValue); >>>>>> } >>>>>> >>>>>> Added: >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****ImmutableConfiguration.java >>>>>> URL: >>>>>> http://svn.apache.org/viewvc/****commons/proper/configuration/****<http://svn.apache.org/viewvc/**commons/proper/configuration/**> >>>>>> trunk/src/main/java/org/****apache/commons/configuration/**** >>>>>> ImmutableConfiguration.java?****rev=1405889&view=auto<http://** >>>>>> svn.apache.org/viewvc/commons/**proper/configuration/trunk/** >>>>>> src/main/java/org/apache/**commons/configuration/** >>>>>> ImmutableConfiguration.java?**rev=1405889&view=auto<http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/ImmutableConfiguration.java?rev=1405889&view=auto> >>>>>> > >>>>>> >>>>>> ==============================****============================**==** >>>>>> ================== >>>>>> --- >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****ImmutableConfiguration.java >>>>>> (added) >>>>>> +++ >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****ImmutableConfiguration.java >>>>>> >>>>>> Mon Nov 5 17:29:01 2012 >>>>>> @@ -0,0 +1,518 @@ >>>>>> +/* >>>>>> + * Licensed to the Apache Software Foundation (ASF) under one or more >>>>>> + * contributor license agreements. See the NOTICE file distributed >>>>>> with >>>>>> + * this work for additional information regarding copyright >>>>>> ownership. >>>>>> + * The ASF licenses this file to You under the Apache License, >>>>>> Version >>>>>> 2.0 >>>>>> + * (the "License"); you may not use this file except in compliance >>>>>> with >>>>>> + * the License. You may obtain a copy of the License at >>>>>> + * >>>>>> + * >>>>>> http://www.apache.org/****licenses/LICENSE-2.0<http://www.apache.org/**licenses/LICENSE-2.0> >>>>>> <http://**www.apache.org/licenses/**LICENSE-2.0<http://www.apache.org/licenses/LICENSE-2.0> >>>>>> > >>>>>> >>>>>> + * >>>>>> + * Unless required by applicable law or agreed to in writing, >>>>>> software >>>>>> + * distributed under the License is distributed on an "AS IS" BASIS, >>>>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >>>>>> implied. >>>>>> + * See the License for the specific language governing permissions >>>>>> and >>>>>> + * limitations under the License. >>>>>> + */ >>>>>> +package org.apache.commons.****configuration; >>>>>> >>>>>> + >>>>>> +import java.math.BigDecimal; >>>>>> +import java.math.BigInteger; >>>>>> +import java.util.Iterator; >>>>>> +import java.util.List; >>>>>> +import java.util.Properties; >>>>>> + >>>>>> +/** >>>>>> + * <p>The main interface for accessing configuration data in a >>>>>> read-only >>>>>> fashion.</p> >>>>>> + * <p> >>>>>> + * The major part of the methods defined in this interface deals with >>>>>> accessing >>>>>> + * properties of various data types. There is a generic {@code >>>>>> getProperty()} >>>>>> + * method, which returns the value of the queried property in its raw >>>>>> data >>>>>> + * type. Other getter methods try to convert this raw data type into >>>>>> a >>>>>> specific >>>>>> + * data type. If this fails, a {@code ConversionException} will be >>>>>> thrown.</p> >>>>>> + * <p>For most of the property getter methods an overloaded version >>>>>> exists that >>>>>> + * allows to specify a default value, which will be returned if the >>>>>> queried >>>>>> + * property cannot be found in the configuration. The behavior of the >>>>>> methods >>>>>> + * that do not take a default value in case of a missing property is >>>>>> not >>>>>> defined >>>>>> + * by this interface and depends on a concrete implementation. E.g. >>>>>> the >>>>>> + * {@link AbstractConfiguration} class, which is the base class >>>>>> + * of most configuration implementations provided by this package, >>>>>> per >>>>>> default >>>>>> + * returns <b>null</b> if a property is not found, but provides the >>>>>> + * {@link AbstractConfiguration#****setThrowExceptionOnMissing(** >>>>>> >>>>>> boolean) >>>>>> + * setThrowExceptionOnMissing()} >>>>>> + * method, with which it can be configured to throw a {@code >>>>>> NoSuchElementException} >>>>>> + * exception in that case. (Note that getter methods for primitive >>>>>> types >>>>>> in >>>>>> + * {@code AbstractConfiguration} always throw an exception for >>>>>> missing >>>>>> + * properties because there is no way of overloading the return >>>>>> value.)</p> >>>>>> + * >>>>>> + * @version $Id$ >>>>>> + * @since 2.0 >>>>>> + */ >>>>>> +public interface ImmutableConfiguration >>>>>> +{ >>>>>> + /** >>>>>> + * Check if the configuration is empty. >>>>>> + * >>>>>> + * @return {@code true} if the configuration contains no >>>>>> property, >>>>>> + * {@code false} otherwise. >>>>>> + */ >>>>>> + boolean isEmpty(); >>>>>> + >>>>>> + /** >>>>>> + * Check if the configuration contains the specified key. >>>>>> + * >>>>>> + * @param key the key whose presence in this configuration is to >>>>>> be >>>>>> tested >>>>>> + * >>>>>> + * @return {@code true} if the configuration contains a value for >>>>>> this >>>>>> + * key, {@code false} otherwise >>>>>> + */ >>>>>> + boolean containsKey(String key); >>>>>> + >>>>>> + /** >>>>>> + * Gets a property from the configuration. This is the most basic >>>>>> get >>>>>> + * method for retrieving values of properties. In a typical >>>>>> implementation >>>>>> + * of the {@code 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 {@code 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). >>>>>> + * >>>>>> + * @param key property to retrieve >>>>>> + * @return the value to which this configuration maps the >>>>>> specified >>>>>> key, or >>>>>> + * null if the configuration contains no mapping for this >>>>>> key. >>>>>> + */ >>>>>> + Object getProperty(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get the list of the keys contained in the configuration that >>>>>> match the >>>>>> + * specified prefix. For instance, if the configuration contains >>>>>> the >>>>>> + * following keys:<br> >>>>>> + * {@code db.user, db.pwd, db.url, window.xpos, window.ypos},<br> >>>>>> + * an invocation of {@code getKeys("db");}<br> >>>>>> + * will return the keys below:<br> >>>>>> + * {@code db.user, db.pwd, db.url}.<br> >>>>>> + * Note that the prefix itself is included in the result set if >>>>>> there is a >>>>>> + * matching key. The exact behavior - how the prefix is actually >>>>>> + * interpreted - depends on a concrete implementation. >>>>>> + * >>>>>> + * @param prefix The prefix to test against. >>>>>> + * @return An Iterator of keys that match the prefix. >>>>>> + * @see #getKeys() >>>>>> + */ >>>>>> + Iterator<String> getKeys(String prefix); >>>>>> + >>>>>> + /** >>>>>> + * Get the list of the keys contained in the configuration. The >>>>>> returned >>>>>> + * iterator can be used to obtain all defined keys. Note that the >>>>>> exact >>>>>> + * behavior of the iterator's {@code remove()} method is specific >>>>>> to >>>>>> + * a concrete implementation. It <em>may</em> remove the >>>>>> corresponding >>>>>> + * property from the configuration, but this is not guaranteed. >>>>>> In >>>>>> any case >>>>>> + * it is no replacement for calling >>>>>> + * {@link #clearProperty(String)} for this property. So it is >>>>>> + * highly recommended to avoid using the iterator's {@code >>>>>> remove()} >>>>>> + * method. >>>>>> + * >>>>>> + * @return An Iterator. >>>>>> + */ >>>>>> + Iterator<String> getKeys(); >>>>>> + >>>>>> + /** >>>>>> + * Get a list of properties associated with the given >>>>>> configuration >>>>>> key. >>>>>> + * This method expects the given key to have an arbitrary number >>>>>> of >>>>>> String >>>>>> + * values, each of which is of the form {code key=value}. These >>>>>> + * strings are split at the equals sign, and the key parts will >>>>>> become >>>>>> + * keys of the returned {@code Properties} object, the value >>>>>> parts >>>>>> + * become values. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated properties if key is found. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a String/List. >>>>>> + * >>>>>> + * @throws IllegalArgumentException if one of the tokens is >>>>>> + * malformed (does not contain an equals sign). >>>>>> + */ >>>>>> + Properties getProperties(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a boolean associated with the given configuration key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated boolean. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Boolean. >>>>>> + */ >>>>>> + boolean getBoolean(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a boolean associated with the given configuration key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated boolean. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Boolean. >>>>>> + */ >>>>>> + boolean getBoolean(String key, boolean defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a {@link Boolean} associated with the given configuration >>>>>> key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated boolean if key is found and has valid >>>>>> + * format, default value otherwise. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Boolean. >>>>>> + */ >>>>>> + Boolean getBoolean(String key, Boolean defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a byte associated with the given configuration key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated byte. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Byte. >>>>>> + */ >>>>>> + byte getByte(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a byte associated with the given configuration key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated byte. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Byte. >>>>>> + */ >>>>>> + byte getByte(String key, byte defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a {@link Byte} associated with the given configuration >>>>>> key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated byte if key is found and has valid >>>>>> format, >>>>>> default >>>>>> + * value otherwise. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> object that >>>>>> + * is not a Byte. >>>>>> + */ >>>>>> + Byte getByte(String key, Byte defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a double associated with the given configuration key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated double. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Double. >>>>>> + */ >>>>>> + double getDouble(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a double associated with the given configuration key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated double. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Double. >>>>>> + */ >>>>>> + double getDouble(String key, double defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a {@link Double} associated with the given configuration >>>>>> key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated double if key is found and has valid >>>>>> + * format, default value otherwise. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Double. >>>>>> + */ >>>>>> + Double getDouble(String key, Double defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a float associated with the given configuration key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated float. >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Float. >>>>>> + */ >>>>>> + float getFloat(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a float associated with the given configuration key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated float. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Float. >>>>>> + */ >>>>>> + float getFloat(String key, float defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a {@link Float} associated with the given configuration >>>>>> key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated float if key is found and has valid >>>>>> + * format, default value otherwise. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Float. >>>>>> + */ >>>>>> + Float getFloat(String key, Float defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a int associated with the given configuration key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated int. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Integer. >>>>>> + */ >>>>>> + int getInt(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a int associated with the given configuration key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated int. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Integer. >>>>>> + */ >>>>>> + int getInt(String key, int defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get an {@link Integer} associated with the given configuration >>>>>> key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated int if key is found and has valid >>>>>> format, >>>>>> default >>>>>> + * value otherwise. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> object that >>>>>> + * is not a Integer. >>>>>> + */ >>>>>> + Integer getInteger(String key, Integer defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a long associated with the given configuration key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated long. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Long. >>>>>> + */ >>>>>> + long getLong(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a long associated with the given configuration key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated long. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Long. >>>>>> + */ >>>>>> + long getLong(String key, long defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a {@link Long} associated with the given configuration >>>>>> key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated long if key is found and has valid >>>>>> + * format, default value otherwise. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Long. >>>>>> + */ >>>>>> + Long getLong(String key, Long defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a short associated with the given configuration key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated short. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Short. >>>>>> + */ >>>>>> + short getShort(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a short associated with the given configuration key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated short. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Short. >>>>>> + */ >>>>>> + short getShort(String key, short defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a {@link Short} associated with the given configuration >>>>>> key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated short if key is found and has valid >>>>>> + * format, default value otherwise. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a Short. >>>>>> + */ >>>>>> + Short getShort(String key, Short defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a {@link BigDecimal} associated with the given >>>>>> configuration >>>>>> key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated BigDecimal if key is found and has >>>>>> valid >>>>>> format >>>>>> + */ >>>>>> + BigDecimal getBigDecimal(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a {@link BigDecimal} associated with the given >>>>>> configuration >>>>>> key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * >>>>>> + * @return The associated BigDecimal if key is found and has >>>>>> valid >>>>>> + * format, default value otherwise. >>>>>> + */ >>>>>> + BigDecimal getBigDecimal(String key, BigDecimal defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a {@link BigInteger} associated with the given >>>>>> configuration >>>>>> key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * >>>>>> + * @return The associated BigInteger if key is found and has >>>>>> valid >>>>>> format >>>>>> + */ >>>>>> + BigInteger getBigInteger(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a {@link BigInteger} associated with the given >>>>>> configuration >>>>>> key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * >>>>>> + * @return The associated BigInteger if key is found and has >>>>>> valid >>>>>> + * format, default value otherwise. >>>>>> + */ >>>>>> + BigInteger getBigInteger(String key, BigInteger defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get a string associated with the given configuration key. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated string. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> object that >>>>>> + * is not a String. >>>>>> + */ >>>>>> + String getString(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a string associated with the given configuration key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated string if key is found and has valid >>>>>> + * format, default value otherwise. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> object that >>>>>> + * is not a String. >>>>>> + */ >>>>>> + String getString(String key, String defaultValue); >>>>>> + >>>>>> + /** >>>>>> + * Get an array of strings associated with the given >>>>>> configuration >>>>>> key. >>>>>> + * If the key doesn't map to an existing object an empty array is >>>>>> returned >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated string array if key is found. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a String/List of Strings. >>>>>> + */ >>>>>> + String[] getStringArray(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a List of strings associated with the given configuration >>>>>> key. >>>>>> + * If the key doesn't map to an existing object an empty List is >>>>>> returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @return The associated List. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a List. >>>>>> + */ >>>>>> + List<Object> getList(String key); >>>>>> + >>>>>> + /** >>>>>> + * Get a List of strings associated with the given configuration >>>>>> key. >>>>>> + * If the key doesn't map to an existing object, the default >>>>>> value >>>>>> + * is returned. >>>>>> + * >>>>>> + * @param key The configuration key. >>>>>> + * @param defaultValue The default value. >>>>>> + * @return The associated List of strings. >>>>>> + * >>>>>> + * @throws ConversionException is thrown if the key maps to an >>>>>> + * object that is not a List. >>>>>> + */ >>>>>> + List<Object> getList(String key, List<Object> defaultValue); >>>>>> +} >>>>>> >>>>>> Propchange: >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****ImmutableConfiguration.java >>>>>> >>>>>> ------------------------------****----------------------------**--** >>>>>> >>>>>> ------------------ >>>>>> svn:eol-style = native >>>>>> >>>>>> Propchange: >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****ImmutableConfiguration.java >>>>>> >>>>>> ------------------------------****----------------------------**--** >>>>>> >>>>>> ------------------ >>>>>> svn:keywords = Date Author Id Revision HeadURL >>>>>> >>>>>> Propchange: >>>>>> commons/proper/configuration/****trunk/src/main/java/org/** >>>>>> apache/commons/configuration/****ImmutableConfiguration.java >>>>>> >>>>>> ------------------------------****----------------------------**--** >>>>>> ------------------ >>>>>> svn:mime-type = text/plain >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>> >>> ------------------------------****----------------------------** >>> --**--------- >>> To unsubscribe, e-mail: >>> dev-unsubscribe@commons.**apac**he.org<http://apache.org> >>> <dev-unsubscribe@**commons.apache.org<dev-unsubscr...@commons.apache.org> >>> > >>> >>> For additional commands, e-mail: dev-h...@commons.apache.org >>> >>> >>> >> > > ------------------------------**------------------------------**--------- > To unsubscribe, e-mail: > dev-unsubscribe@commons.**apache.org<dev-unsubscr...@commons.apache.org> > For additional commands, e-mail: dev-h...@commons.apache.org > >