You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2012/12/28 21:25:02 UTC
svn commit: r1426618 - in /commons/proper/configuration/trunk/src:
main/java/org/apache/commons/configuration/AbstractConfiguration.java
test/java/org/apache/commons/configuration/TestAbstractConfigurationBasicFeatures.java
Author: oheger
Date: Fri Dec 28 20:25:02 2012
New Revision: 1426618
URL: http://svn.apache.org/viewvc?rev=1426618&view=rev
Log:
Added a method for setting the parent ConfigurationInterpolator.
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationBasicFeatures.java
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java?rev=1426618&r1=1426617&r2=1426618&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/AbstractConfiguration.java Fri Dec 28 20:25:02 2012
@@ -343,8 +343,9 @@ public abstract class AbstractConfigurat
*
* @param lookups a map with new {@code Lookup} objects and their prefixes
* (may be <b>null</b>)
+ * @since 2.0
*/
- public final void setPrefixLookups(Map<String, ? extends Lookup> lookups)
+ public void setPrefixLookups(Map<String, ? extends Lookup> lookups)
{
boolean success;
do
@@ -374,8 +375,9 @@ public abstract class AbstractConfigurat
*
* @param lookups the collection with default {@code Lookup} objects to be
* added
+ * @since 2.0
*/
- public final void setDefaultLookups(Collection<? extends Lookup> lookups)
+ public void setDefaultLookups(Collection<? extends Lookup> lookups)
{
boolean success;
do
@@ -399,6 +401,30 @@ public abstract class AbstractConfigurat
}
/**
+ * Sets the specified {@code ConfigurationInterpolator} as the parent of
+ * this configuration's {@code ConfigurationInterpolator}. If this
+ * configuration does not have a {@code ConfigurationInterpolator}, a new
+ * instance is created. Note: This method is mainly intended to be used for
+ * initializing a configuration when it is created by a builder. Normal
+ * client code can directly update the {@code ConfigurationInterpolator}.
+ *
+ * @param parent the parent {@code ConfigurationInterpolator} to be set
+ * @since 2.0
+ */
+ public void setParentInterpolator(ConfigurationInterpolator parent)
+ {
+ boolean success;
+ do
+ {
+ ConfigurationInterpolator ciOld = getInterpolator();
+ ConfigurationInterpolator ciNew =
+ (ciOld != null) ? ciOld : new ConfigurationInterpolator();
+ ciNew.setParentInterpolator(parent);
+ success = interpolator.compareAndSet(ciOld, ciNew);
+ } while (!success);
+ }
+
+ /**
* Creates a default {@code ConfigurationInterpolator} which is initialized
* with all default {@code Lookup} objects. This method is called by the
* constructor. It ensures that default interpolation works for every new
Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationBasicFeatures.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationBasicFeatures.java?rev=1426618&r1=1426617&r2=1426618&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationBasicFeatures.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/TestAbstractConfigurationBasicFeatures.java Fri Dec 28 20:25:02 2012
@@ -32,6 +32,7 @@ import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.configuration.event.ConfigurationEvent;
import org.apache.commons.configuration.event.ConfigurationListener;
+import org.apache.commons.configuration.interpol.ConfigurationInterpolator;
import org.apache.commons.configuration.interpol.Lookup;
import org.easymock.EasyMock;
import org.junit.Test;
@@ -382,6 +383,43 @@ public class TestAbstractConfigurationBa
}
/**
+ * Tests whether a parent {@code ConfigurationInterpolator} can be set if
+ * already a {@code ConfigurationInterpolator} is available.
+ */
+ @Test
+ public void testSetParentInterpolatorExistingInterpolator()
+ {
+ ConfigurationInterpolator parent =
+ EasyMock.createMock(ConfigurationInterpolator.class);
+ EasyMock.replay(parent);
+ AbstractConfiguration config =
+ new TestConfigurationImpl(new PropertiesConfiguration());
+ ConfigurationInterpolator ci = config.getInterpolator();
+ config.setParentInterpolator(parent);
+ assertSame("Parent was not set", parent, config.getInterpolator()
+ .getParentInterpolator());
+ assertSame("Interpolator was changed", ci, config.getInterpolator());
+ }
+
+ /**
+ * Tests whether a parent {@code ConfigurationInterpolator} can be set if
+ * currently no {@code ConfigurationInterpolator} is available.
+ */
+ @Test
+ public void testSetParentInterpolatorNoInterpolator()
+ {
+ ConfigurationInterpolator parent =
+ EasyMock.createMock(ConfigurationInterpolator.class);
+ EasyMock.replay(parent);
+ AbstractConfiguration config =
+ new TestConfigurationImpl(new PropertiesConfiguration());
+ config.setInterpolator(null);
+ config.setParentInterpolator(parent);
+ assertSame("Parent was not set", parent, config.getInterpolator()
+ .getParentInterpolator());
+ }
+
+ /**
* Tests getList() for single non-string values.
*/
@Test