You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by oh...@apache.org on 2006/10/16 22:26:08 UTC

svn commit: r464652 - in /jakarta/commons/proper/configuration/trunk: src/java/org/apache/commons/configuration/AbstractHierarchicalFileConfiguration.java src/test/org/apache/commons/configuration/TestXMLConfiguration.java xdocs/changes.xml

Author: oheger
Date: Mon Oct 16 13:26:04 2006
New Revision: 464652

URL: http://svn.apache.org/viewvc?view=rev&rev=464652
Log:
Override fetchNodeList() in AbstractHierarchicalFileConfiguration to always check for a reload; fix for CONFIGURATION-228

Modified:
    jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractHierarchicalFileConfiguration.java
    jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestXMLConfiguration.java
    jakarta/commons/proper/configuration/trunk/xdocs/changes.xml

Modified: jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractHierarchicalFileConfiguration.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractHierarchicalFileConfiguration.java?view=diff&rev=464652&r1=464651&r2=464652
==============================================================================
--- jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractHierarchicalFileConfiguration.java (original)
+++ jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractHierarchicalFileConfiguration.java Mon Oct 16 13:26:04 2006
@@ -24,6 +24,7 @@
 import java.io.OutputStream;
 import java.net.URL;
 import java.util.Iterator;
+import java.util.List;
 
 import org.apache.commons.configuration.event.ConfigurationEvent;
 import org.apache.commons.configuration.event.ConfigurationListener;
@@ -296,6 +297,19 @@
     {
         reload();
         return super.isEmpty();
+    }
+
+    /**
+     * Fetches a list of nodes, which are selected by the specified key. This
+     * implementation will perform a reload if necessary.
+     *
+     * @param key the key
+     * @return a list with the selected nodes
+     */
+    protected List fetchNodeList(String key)
+    {
+        reload();
+        return super.fetchNodeList(key);
     }
 
     /**

Modified: jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestXMLConfiguration.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestXMLConfiguration.java?view=diff&rev=464652&r1=464651&r2=464652
==============================================================================
--- jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestXMLConfiguration.java (original)
+++ jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestXMLConfiguration.java Mon Oct 16 13:26:04 2006
@@ -882,6 +882,62 @@
     }
 
     /**
+     * Tests if reloads are recognized by subset().
+     */
+    public void testSubsetWithReload() throws ConfigurationException
+    {
+        XMLConfiguration c = setUpReloadTest();
+        Configuration sub = c.subset("test");
+        assertEquals("New value not read", "newValue", sub.getString("entity"));
+    }
+
+    /**
+     * Tests if reloads are recognized by configurationAt().
+     */
+    public void testConfigurationAtWithReload() throws ConfigurationException
+    {
+        XMLConfiguration c = setUpReloadTest();
+        HierarchicalConfiguration sub = c.configurationAt("test(0)");
+        assertEquals("New value not read", "newValue", sub.getString("entity"));
+    }
+
+    /**
+     * Tests if reloads are recognized by configurationsAt().
+     */
+    public void testConfigurationsAtWithReload() throws ConfigurationException
+    {
+        XMLConfiguration c = setUpReloadTest();
+        List configs = c.configurationsAt("test");
+        assertEquals("New value not read", "newValue",
+                ((HierarchicalConfiguration) configs.get(0))
+                        .getString("entity"));
+    }
+
+    /**
+     * Prepares a configuration object for testing a reload operation.
+     *
+     * @return the initialized configuration
+     * @throws ConfigurationException if an error occurs
+     */
+    private XMLConfiguration setUpReloadTest() throws ConfigurationException
+    {
+        removeTestFile();
+        conf.save(testSaveConf);
+        XMLConfiguration c = new XMLConfiguration(testSaveConf);
+        c.setReloadingStrategy(new FileChangedReloadingStrategy()
+        {
+            // Report always a change
+            protected boolean hasChanged()
+            {
+                return true;
+            }
+        });
+        conf.setProperty("test(0).entity", "newValue");
+        conf.save(testSaveConf);
+        return c;
+    }
+
+    /**
      * Removes the test output file if it exists.
      */
     private void removeTestFile()

Modified: jakarta/commons/proper/configuration/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/configuration/trunk/xdocs/changes.xml?view=diff&rev=464652&r1=464651&r2=464652
==============================================================================
--- jakarta/commons/proper/configuration/trunk/xdocs/changes.xml (original)
+++ jakarta/commons/proper/configuration/trunk/xdocs/changes.xml Mon Oct 16 13:26:04 2006
@@ -23,6 +23,13 @@
 
   <body>
     <release version="1.4-dev" date="in SVN">
+      <action dev="oheger" type="update" issue="CONFIGURATION-228">
+        Some of the methods of file-based hierarchical configurations (e.g.
+        subset() or configurationAt()) did not take an eventually set reloading
+        strategy into account. This is now fixed by overriding the internal
+        fetchNodeList() method in AbstractHierarchicalFileConfiguration and
+        letting it always check for a reload.
+      </action>
     </release>
 
     <release version="1.3" date="2006-09-24">



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org