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/22 01:00:30 UTC

svn commit: r757108 - in /commons/proper/configuration/branches/configuration2_experimental/src: main/java/org/apache/commons/configuration2/ main/java/org/apache/commons/configuration2/interpol/ test/java/org/apache/commons/configuration2/

Author: joehni
Date: Sun Mar 22 00:00:29 2009
New Revision: 757108

URL: http://svn.apache.org/viewvc?rev=757108&view=rev
Log:
Enable local key lookup for SubnodeConfiguration (CONFIGURATION-377).

Modified:
    commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/SubnodeConfiguration.java
    commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/interpol/ConfigurationInterpolator.java
    commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestSubnodeConfiguration.java

Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/SubnodeConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/SubnodeConfiguration.java?rev=757108&r1=757107&r2=757108&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/SubnodeConfiguration.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/SubnodeConfiguration.java Sun Mar 22 00:00:29 2009
@@ -21,6 +21,7 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.commons.configuration2.interpol.ConfigurationInterpolator;
 import org.apache.commons.configuration2.tree.ConfigurationNode;
 
 /**
@@ -323,14 +324,16 @@
     }
 
     /**
-     * Performs interpolation. This implementation will ask the parent
-     * configuration to perform the interpolation so that variables can be
-     * evaluated in the global context.
+     * Creates a ConfigurationInterpolator with a chain to the parent's
+     * interpolator. 
      *
-     * @param value the value to be interpolated
+     * @return the new interpolator
      */
-    protected Object interpolate(Object value)
-    {
-        return getParent().interpolate(value);
+    @Override
+    protected ConfigurationInterpolator createInterpolator() {
+        ConfigurationInterpolator interpolator = super.createInterpolator();
+        interpolator.setParentInterpolator(getParent().getInterpolator());
+        return interpolator;
     }
+    
 }

Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/interpol/ConfigurationInterpolator.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/interpol/ConfigurationInterpolator.java?rev=757108&r1=757107&r2=757108&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/interpol/ConfigurationInterpolator.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/interpol/ConfigurationInterpolator.java Sun Mar 22 00:00:29 2009
@@ -284,12 +284,19 @@
             String prefix = var.substring(0, prefixPos);
             String name = var.substring(prefixPos + 1);
             String value = fetchLookupForPrefix(prefix).lookup(name);
+            if (value == null && getParentInterpolator() != null) {
+                value = getParentInterpolator().fetchLookupForPrefix(prefix).lookup(name);
+            }
             if (value != null)
             {
                 return value;
-            }
+            } 
+        }
+        String value = fetchNoPrefixLookup().lookup(var);
+        if (value == null && getParentInterpolator() != null) {
+            value = getParentInterpolator().fetchNoPrefixLookup().lookup(var);
         }
-        return fetchNoPrefixLookup().lookup(var);
+        return value;
     }
 
     /**
@@ -302,17 +309,7 @@
      */
     protected StrLookup fetchNoPrefixLookup()
     {
-        StrLookup lookup = null;
-        if (getDefaultLookup() != null) { 
-            lookup = getDefaultLookup();
-        }
-        if (lookup == null) { 
-            ConfigurationInterpolator parent = getParentInterpolator();
-            lookup = (parent == null) 
-                ? StrLookup.noneLookup() 
-                : parent.fetchNoPrefixLookup();
-        }
-        return lookup;
+        return (getDefaultLookup() != null) ? getDefaultLookup() : StrLookup.noneLookup();
     }
 
     /**
@@ -329,10 +326,7 @@
         StrLookup lookup = localLookups.get(prefix);
         if (lookup == null)
         {
-            ConfigurationInterpolator parent = getParentInterpolator();
-            lookup = (parent == null) 
-                ? StrLookup.noneLookup() 
-                : parent.fetchLookupForPrefix(prefix);
+            lookup = StrLookup.noneLookup();
         }
         return lookup;
     }

Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestSubnodeConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestSubnodeConfiguration.java?rev=757108&r1=757107&r2=757108&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestSubnodeConfiguration.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestSubnodeConfiguration.java Sun Mar 22 00:00:29 2009
@@ -335,9 +335,26 @@
     }
 
     /**
+     * An additional test for interpolation when the configurationAt() method is
+     * involved for a local interpolation.
+     */
+    public void testLocalInterpolationFromConfigurationAt()
+    {
+        parent.addProperty("base.dir", "/home/foo");
+        parent.addProperty("test.absolute.dir.dir1", "${base.dir}/path1");
+        parent.addProperty("test.absolute.dir.dir2", "${dir1}");
+
+        Configuration sub = parent.configurationAt("test.absolute.dir");
+        assertEquals("Wrong interpolation in subnode",
+            "/home/foo/path1", sub.getString("dir1"));
+        assertEquals("Wrong local interpolation in subnode",
+            "/home/foo/path1", sub.getString("dir2"));
+    }
+
+    /**
      * Tests manipulating the interpolator.
      */
-    public void todoTestInterpolator()
+    public void testInterpolator()
     {
         parent.addProperty("tablespaces.tablespace.name", "default");
         parent.addProperty("tablespaces.tablespace(-1).name", "test");