You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by jo...@apache.org on 2009/03/18 22:02:57 UTC
svn commit: r755734 - in /commons/proper/configuration/trunk/src:
java/org/apache/commons/configuration/
java/org/apache/commons/configuration/interpol/
test/org/apache/commons/configuration/
Author: joehni
Date: Wed Mar 18 21:02:56 2009
New Revision: 755734
URL: http://svn.apache.org/viewvc?rev=755734&view=rev
Log:
Merge changes for CONFIGURATION-375 and CONFIGURATION-376 from configuration2 branch.
Modified:
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/ (props changed)
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/SubsetConfiguration.java
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/interpol/ConfigurationInterpolator.java
commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/ (props changed)
commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestSubnodeConfiguration.java
commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestSubsetConfiguration.java
Propchange: commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Mar 18 21:02:56 2009
@@ -1 +1 @@
-/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2:751544-751840
+/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2:751544-751840,755692
Modified: commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/SubsetConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/SubsetConfiguration.java?rev=755734&r1=755733&r2=755734&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/SubsetConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/SubsetConfiguration.java Wed Mar 18 21:02:56 2009
@@ -21,6 +21,7 @@
import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.iterators.TransformIterator;
+import org.apache.commons.configuration.interpol.ConfigurationInterpolator;
/**
* <p>A subset of another configuration. The new Configuration object contains
@@ -215,7 +216,11 @@
else
{
SubsetConfiguration config = new SubsetConfiguration(parent, "");
- getInterpolator().registerLocalLookups(config.getInterpolator());
+ ConfigurationInterpolator interpolator = config.getInterpolator();
+ getInterpolator().registerLocalLookups(interpolator);
+ if (parent instanceof AbstractConfiguration) {
+ interpolator.setParentInterpolator(((AbstractConfiguration)parent).getInterpolator());
+ }
return config.interpolate(base);
}
}
Modified: commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/interpol/ConfigurationInterpolator.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/interpol/ConfigurationInterpolator.java?rev=755734&r1=755733&r2=755734&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/interpol/ConfigurationInterpolator.java (original)
+++ commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/interpol/ConfigurationInterpolator.java Wed Mar 18 21:02:56 2009
@@ -127,6 +127,9 @@
/** Stores the default lookup object. */
private StrLookup defaultLookup;
+
+ /** Stores a parent interpolator objects if the interpolator is nested hierarchically. */
+ private ConfigurationInterpolator parentInterpolator;
/**
* Creates a new instance of <code>ConfigurationInterpolator</code>.
@@ -295,20 +298,30 @@
* Returns the lookup object to be used for variables without a prefix. This
* implementation will check whether a default lookup object was set. If
* this is the case, it will be returned. Otherwise a <b>null</b> lookup
- * object will be returned.
+ * object will be returned (never <code>null</code>).
*
* @return the lookup object to be used for variables without a prefix
*/
protected StrLookup fetchNoPrefixLookup()
{
- return (getDefaultLookup() != null) ? getDefaultLookup() : StrLookup.noneLookup();
+ StrLookup lookup = null;
+ if (getDefaultLookup() != null) {
+ lookup = getDefaultLookup();
+ }
+ if (lookup == null) {
+ ConfigurationInterpolator parent = getParentInterpolator();
+ lookup = (parent == null)
+ ? StrLookup.noneLookup()
+ : parent.fetchNoPrefixLookup();
+ }
+ return lookup;
}
/**
* Obtains the lookup object for the specified prefix. This method is called
* by the <code>lookup()</code> method. This implementation will check
* whether a lookup object is registered for the given prefix. If not, a
- * <b>null</b> lookup object will be returned.
+ * <b>null</b> lookup object will be returned (never <code>null</code>).
*
* @param prefix the prefix
* @return the lookup object to be used for this prefix
@@ -318,7 +331,10 @@
StrLookup lookup = (StrLookup) localLookups.get(prefix);
if (lookup == null)
{
- lookup = StrLookup.noneLookup();
+ ConfigurationInterpolator parent = getParentInterpolator();
+ lookup = (parent == null)
+ ? StrLookup.noneLookup()
+ : parent.fetchLookupForPrefix(prefix);
}
return lookup;
}
@@ -333,6 +349,28 @@
interpolator.localLookups.putAll(localLookups);
}
+ /**
+ * Sets the parent interpolator. This object is used if the interpolation is nested hierarchically
+ * and the current interpolation object cannot resolve a variable.
+ *
+ * @param parentInterpolator the parent interpolator object or <code>null</code>
+ * @since upcoming
+ */
+ public void setParentInterpolator(ConfigurationInterpolator parentInterpolator) {
+ this.parentInterpolator = parentInterpolator;
+ }
+
+ /**
+ * Requests the parent interpolator. This object is used if the interpolation is nested hierarchically
+ * and the current interpolation
+ *
+ * @return the parent interpolator or <code>null</code>
+ * @since upcoming
+ */
+ public ConfigurationInterpolator getParentInterpolator() {
+ return this.parentInterpolator;
+ }
+
// static initializer, sets up the map with the standard lookups
static
{
Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Mar 18 21:02:56 2009
@@ -1 +1 @@
-/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2:751544-751840
+/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2:751544-751840,755692
Modified: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestSubnodeConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestSubnodeConfiguration.java?rev=755734&r1=755733&r2=755734&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestSubnodeConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestSubnodeConfiguration.java Wed Mar 18 21:02:56 2009
@@ -29,9 +29,11 @@
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.reloading.FileAlwaysReloadingStrategy;
import org.apache.commons.configuration.tree.ConfigurationNode;
import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine;
+import org.apache.commons.lang.text.StrLookup;
/**
* Test case for SubnodeConfiguration.
@@ -332,6 +334,35 @@
}
/**
+ * Tests manipulating the interpolator.
+ */
+ public void todoTestInterpolator()
+ {
+ parent.addProperty("tablespaces.tablespace.name", "default");
+ parent.addProperty("tablespaces.tablespace(-1).name", "test");
+
+ setUpSubnodeConfig();
+ InterpolationTestHelper.testGetInterpolator(config);
+ }
+
+ public void testLocalLookupsInInterpolatorAreInherited() {
+ parent.addProperty("tablespaces.tablespace.name", "default");
+ parent.addProperty("tablespaces.tablespace(-1).name", "test");
+ parent.addProperty("tables.table(0).var", "${brackets:x}");
+
+ ConfigurationInterpolator interpolator = parent.getInterpolator();
+ interpolator.registerLookup("brackets", new StrLookup(){
+
+ public String lookup(String key) {
+ return "(" + key +")";
+ }
+
+ });
+ setUpSubnodeConfig();
+ assertEquals("Local lookup was not inherited", "(x)", config.getString("var", ""));
+ }
+
+ /**
* Tests a reload operation for the parent configuration when the subnode
* configuration does not support reloads. Then the new value should not be
* detected.
Modified: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestSubsetConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestSubsetConfiguration.java?rev=755734&r1=755733&r2=755734&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestSubsetConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestSubsetConfiguration.java Wed Mar 18 21:02:56 2009
@@ -295,8 +295,7 @@
InterpolationTestHelper.testGetInterpolator(subset);
}
- // TODO: Next step
- public void todoTestLocalLookupsInInterpolorAreInherited() {
+ public void testLocalLookupsInInterpolatorAreInherited() {
BaseConfiguration config = new BaseConfiguration();
ConfigurationInterpolator interpolator = config.getInterpolator();
interpolator.registerLookup("brackets", new StrLookup(){
@@ -309,6 +308,17 @@
config.setProperty("prefix.var", "${brackets:x}");
AbstractConfiguration subset = (AbstractConfiguration) config
.subset("prefix");
- assertEquals("Local lookup was not inherited", "(x)", subset.getString("var", ""));
+ assertEquals("Local lookup was not inherited", "(x)", subset
+ .getString("var", ""));
+ }
+
+ public void testInterpolationForKeysOfTheParent() {
+ BaseConfiguration config = new BaseConfiguration();
+ config.setProperty("test", "junit");
+ config.setProperty("prefix.key", "${test}");
+ AbstractConfiguration subset = (AbstractConfiguration) config
+ .subset("prefix");
+ assertEquals("Interpolation does not resolve parent keys", "junit",
+ subset.getString("key", ""));
}
}