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. */