Author: oheger
Date: Sat Sep 28 19:41:43 2013
New Revision: 1527238

URL: http://svn.apache.org/r1527238
Log:
FileBasedConfigurationBuilder now ensures that its FileLocator is fully defined.

Before actually loading the associated file, the locator's locate() method is
called. This ensures that all properties of the FileLocator pointing to the
file are initialized. This is important when saving the file: a fully
initialized FileLocator ensures that the correct output file is written.

Modified:
    
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/FileBasedConfigurationBuilder.java
    
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestFileBasedConfigurationBuilder.java

Modified: 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/FileBasedConfigurationBuilder.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/FileBasedConfigurationBuilder.java?rev=1527238&r1=1527237&r2=1527238&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/FileBasedConfigurationBuilder.java
 (original)
+++ 
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/FileBasedConfigurationBuilder.java
 Sat Sep 28 19:41:43 2013
@@ -296,6 +296,7 @@ public class FileBasedConfigurationBuild
         initEncoding(handler);
         if (handler.isLocationDefined())
         {
+            handler.locate();
             handler.load();
         }
     }

Modified: 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestFileBasedConfigurationBuilder.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestFileBasedConfigurationBuilder.java?rev=1527238&r1=1527237&r2=1527238&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestFileBasedConfigurationBuilder.java
 (original)
+++ 
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestFileBasedConfigurationBuilder.java
 Sat Sep 28 19:41:43 2013
@@ -37,6 +37,8 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.configuration.XMLPropertiesConfiguration;
 import org.apache.commons.configuration.io.FileHandler;
+import org.apache.commons.configuration.io.FileLocator;
+import org.apache.commons.configuration.io.FileLocatorUtils;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -148,6 +150,24 @@ public class TestFileBasedConfigurationB
     }
 
     /**
+     * Tests whether the location in the FileHandler is fully defined. This
+     * ensures that saving writes to the expected file.
+     */
+    @Test
+    public void testLocationIsFullyDefined() throws ConfigurationException
+    {
+        File file = createTestFile(1);
+        FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
+                new FileBasedConfigurationBuilder<PropertiesConfiguration>(
+                        PropertiesConfiguration.class);
+        builder.configure(new FileBasedBuilderParametersImpl().setFile(file));
+        builder.getConfiguration();
+        FileLocator locator = builder.getFileHandler().getFileLocator();
+        assertTrue("Not fully defined: " + locator,
+                FileLocatorUtils.isFullyInitialized(locator));
+    }
+
+    /**
      * Tests whether the location can be changed after a configuration has been
      * created.
      */


Reply via email to