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:26:18 UTC
svn commit: r1426621 - in /commons/proper/configuration/trunk/src:
main/java/org/apache/commons/configuration/builder/combined/
test/java/org/apache/commons/configuration/builder/combined/
Author: oheger
Date: Fri Dec 28 20:26:18 2012
New Revision: 1426621
URL: http://svn.apache.org/viewvc?rev=1426621&view=rev
Log:
CombinedConfigurationBuilder now supports interpolation over all child configuration sources.
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java
Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java?rev=1426621&r1=1426620&r2=1426621&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/combined/CombinedConfigurationBuilder.java Fri Dec 28 20:26:18 2012
@@ -30,6 +30,7 @@ import org.apache.commons.configuration.
import org.apache.commons.configuration.CombinedConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.ConfigurationLookup;
import org.apache.commons.configuration.FileSystem;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.SubnodeConfiguration;
@@ -510,6 +511,12 @@ public class CombinedConfigurationBuilde
private CombinedConfiguration currentConfiguration;
/**
+ * A {@code ConfigurationInterpolator} to be used as parent for all child
+ * configurations to enable cross-source interpolation.
+ */
+ private ConfigurationInterpolator parentInterpolator;
+
+ /**
* Creates a new instance of {@code CombinedConfigurationBuilder}. No parameters
* are set.
*/
@@ -739,6 +746,7 @@ public class CombinedConfigurationBuilde
initSystemProperties(config, getBasePath());
registerConfiguredLookups(config, result);
configureEntityResolver(config, currentXMLParameters);
+ setUpParentInterpolator(currentConfiguration, config);
ConfigurationSourceData data = getSourceData();
createAndAddConfigurations(result, data.getOverrideBuilders(), data);
@@ -1023,6 +1031,28 @@ public class CombinedConfigurationBuilde
}
/**
+ * Sets up a parent {@code ConfigurationInterpolator} object. This object
+ * has a default {@link Lookup} querying the resulting combined
+ * configuration. Thus interpolation works globally across all configuration
+ * sources.
+ *
+ * @param resultConfig the result configuration
+ * @param defConfig the definition configuration
+ */
+ private void setUpParentInterpolator(Configuration resultConfig,
+ Configuration defConfig)
+ {
+ parentInterpolator = new ConfigurationInterpolator();
+ parentInterpolator.addDefaultLookup(new ConfigurationLookup(
+ resultConfig));
+ ConfigurationInterpolator defInterpolator = defConfig.getInterpolator();
+ if (defInterpolator != null)
+ {
+ defInterpolator.setParentInterpolator(parentInterpolator);
+ }
+ }
+
+ /**
* Initializes the default base path for all file-based child configuration
* sources. The base path can be explicitly defined in the parameters of
* this builder. Otherwise, if the definition builder is a file-based
@@ -1055,13 +1085,15 @@ public class CombinedConfigurationBuilde
/**
* Initializes basic builder parameters for a child configuration with
* default settings set for this builder. This implementation ensures that
- * all {@code Lookup} objects are propagated to child configurations.
+ * all {@code Lookup} objects are propagated to child configurations and
+ * interpolation is setup correctly.
*
* @param params the parameters object
*/
private void initChildBasicParameters(BasicBuilderParameters params)
{
params.setPrefixLookups(fetchPrefixLookups());
+ params.setParentInterpolator(parentInterpolator);
}
/**
Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java?rev=1426621&r1=1426620&r2=1426621&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/combined/TestCombinedConfigurationBuilder.java Fri Dec 28 20:26:18 2012
@@ -41,6 +41,7 @@ import org.apache.commons.configuration.
import org.apache.commons.configuration.FileSystem;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.commons.configuration.SubnodeConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.XMLPropertiesConfiguration;
import org.apache.commons.configuration.builder.BasicConfigurationBuilder;
@@ -916,6 +917,31 @@ public class TestCombinedConfigurationBu
}
/**
+ * Tests whether variable substitution works across multiple child
+ * configurations and also in the definition configuration.
+ */
+ @Test
+ public void testInterpolationOverMultipleSources()
+ throws ConfigurationException
+ {
+ File testFile =
+ ConfigurationAssert.getTestFile("testInterpolationBuilder.xml");
+ factory.configure(new FileBasedBuilderParametersImpl().setFile(testFile));
+ CombinedConfiguration combConfig = factory.getConfiguration();
+ assertEquals("Wrong value", "abc-product",
+ combConfig.getString("products.product.desc"));
+ XMLConfiguration xmlConfig =
+ (XMLConfiguration) combConfig.getConfiguration("test");
+ assertEquals("Wrong value from XML config", "abc-product",
+ xmlConfig.getString("products/product/desc"));
+ SubnodeConfiguration subConfig =
+ xmlConfig
+ .configurationAt("products/product[@name='abc']", true);
+ assertEquals("Wrong value from sub config", "abc-product",
+ subConfig.getString("desc"));
+ }
+
+ /**
* A test builder provider implementation for testing whether providers can
* be defined in the definition file.
*/