Author: oheger Date: Wed Aug 13 20:15:04 2014 New Revision: 1617826 URL: http://svn.apache.org/r1617826 Log: Created new Configurations class.
This class contains a bunch of convenience methods that simplify the creation of concrete configuration classes. It can be used when no complex initialization is required and default settings are appropriate. Added: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/Configurations.java commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/fluent/TestConfigurations.java Added: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/Configurations.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/Configurations.java?rev=1617826&view=auto ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/Configurations.java (added) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/Configurations.java Wed Aug 13 20:15:04 2014 @@ -0,0 +1,640 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.configuration.builder.fluent; + +import java.io.File; +import java.net.URL; + +import org.apache.commons.configuration.CombinedConfiguration; +import org.apache.commons.configuration.FileBasedConfiguration; +import org.apache.commons.configuration.INIConfiguration; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.commons.configuration.XMLConfiguration; +import org.apache.commons.configuration.builder.FileBasedConfigurationBuilder; +import org.apache.commons.configuration.builder.combined.CombinedConfigurationBuilder; +import org.apache.commons.configuration.ex.ConfigurationException; + +/** + * <p> + * A convenience class which simplifies the creation of standard configurations + * and their builders. + * </p> + * <p> + * Complex initializations of configuration builders can be done in a pretty + * straight-forward way by making use of the provided fluent API. However, if + * only default settings are used (and maybe a configuration file to be loaded + * has to be specified), this approach tends to become a bit verbose. This class + * was introduced to simplify the creation of configuration objects in such + * cases. It offers a bunch of methods which allow the creation of some standard + * configuration classes with default settings passing in only a minimum + * required parameters. + * </p> + * <p> + * An an example consider the creation of a {@code PropertiesConfiguration} + * object from a file. Using a builder, code like the following one would have + * to be written: + * + * <pre> + * Parameters params = new Parameters(); + * FileBasedConfigurationBuilder<PropertiesConfiguration> builder = + * new FileBasedConfigurationBuilder<PropertiesConfiguration>( + * PropertiesConfiguration.class).configure(params.fileBased() + * .setFile(new File("config.properties"))); + * PropertiesConfiguration config = builder.getConfiguration(); + * </pre> + * + * With a convenience method of {@code Configurations} the same can be achieved + * with the following: + * + * <pre> + * Configurations configurations = new Configurations(); + * PropertiesConfiguration config = configurations.properties(new File( + * "config.properties")); + * </pre> + * + * There are similar methods for constructing builder objects from which + * configurations can then be obtained. + * </p> + * <p> + * This class is thread-safe. A single instance can be created by an application + * and used in a central way to create configuration objects. When an instance + * is created a {@link Parameters} instance can be passed in. Otherwise, a + * default instance is created. In any case, the {@code Parameters} instance + * associated with a {@code Configurations} object can be used to define default + * settings for the configurations to be created. + * </p> + * + * @version $Id$ + * @since 2.0 + * @see org.apache.commons.configuration.builder.DefaultParametersManager + */ +public class Configurations +{ + /** The parameters object associated with this instance. */ + private final Parameters parameters; + + /** + * Creates a new {@code Configurations} instance with default settings. + */ + public Configurations() + { + this(null); + } + + /** + * Creates a new instance of {@code Configurations} and initializes it with + * the specified {@code Parameters} object. + * + * @param params the {@code Parameters} (may be <b>null</b>, then a default + * instance is created) + */ + public Configurations(Parameters params) + { + parameters = (params != null) ? params : new Parameters(); + } + + /** + * Returns the {@code Parameters} instance associated with this object. + * + * @return the associated {@code Parameters} object + */ + public Parameters getParameters() + { + return parameters; + } + + /** + * Creates a {@code FileBasedConfigurationBuilder} for the specified + * configuration class and initializes it with the file to be loaded. + * + * @param configClass the configuration class + * @param file the file to be loaded + * @param <T> the type of the configuration to be constructed + * @return the new {@code FileBasedConfigurationBuilder} + */ + public <T extends FileBasedConfiguration> FileBasedConfigurationBuilder<T> fileBasedBuilder( + Class<T> configClass, File file) + { + return createFileBasedBuilder(configClass, fileParams(file)); + } + + /** + * Creates a {@code FileBasedConfigurationBuilder} for the specified + * configuration class and initializes it with the URL to the file to be + * loaded. + * + * @param configClass the configuration class + * @param url the URL to be loaded + * @param <T> the type of the configuration to be constructed + * @return the new {@code FileBasedConfigurationBuilder} + */ + public <T extends FileBasedConfiguration> FileBasedConfigurationBuilder<T> fileBasedBuilder( + Class<T> configClass, URL url) + { + return createFileBasedBuilder(configClass, fileParams(url)); + } + + /** + * Creates a {@code FileBasedConfigurationBuilder} for the specified + * configuration class and initializes it with the path to the file to be + * loaded. + * + * @param configClass the configuration class + * @param path the path to the file to be loaded + * @param <T> the type of the configuration to be constructed + * @return the new {@code FileBasedConfigurationBuilder} + */ + public <T extends FileBasedConfiguration> FileBasedConfigurationBuilder<T> fileBasedBuilder( + Class<T> configClass, String path) + { + return createFileBasedBuilder(configClass, fileParams(path)); + } + + /** + * Creates an instance of the specified file-based configuration class from + * the content of the given file. This is a convenience method which can be + * used if no builder is needed for managing the configuration object. + * (Although, behind the scenes a builder is created). + * + * @param configClass the configuration class + * @param file the file to be loaded + * @param <T> the type of the configuration to be constructed + * @return a {@code FileBasedConfiguration} object initialized from this + * file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public <T extends FileBasedConfiguration> T fileBased(Class<T> configClass, + File file) throws ConfigurationException + { + return fileBasedBuilder(configClass, file).getConfiguration(); + } + + /** + * Creates an instance of the specified file-based configuration class from + * the content of the given URL. This is a convenience method which can be + * used if no builder is needed for managing the configuration object. + * (Although, behind the scenes a builder is created). + * + * @param configClass the configuration class + * @param url the URL to be loaded + * @param <T> the type of the configuration to be constructed + * @return a {@code FileBasedConfiguration} object initialized from this + * file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public <T extends FileBasedConfiguration> T fileBased(Class<T> configClass, + URL url) throws ConfigurationException + { + return fileBasedBuilder(configClass, url).getConfiguration(); + } + + /** + * Creates an instance of the specified file-based configuration class from + * the content of the file identified by the given path. This is a + * convenience method which can be used if no builder is needed for managing + * the configuration object. (Although, behind the scenes a builder is + * created). + * + * @param configClass the configuration class + * @param path the path to the file to be loaded + * @param <T> the type of the configuration to be constructed + * @return a {@code FileBasedConfiguration} object initialized from this + * file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public <T extends FileBasedConfiguration> T fileBased(Class<T> configClass, + String path) throws ConfigurationException + { + return fileBasedBuilder(configClass, path).getConfiguration(); + } + + /** + * Creates a builder for a {@code PropertiesConfiguration} and initializes + * it with the given file to be loaded. + * + * @param file the file to be loaded + * @return the newly created {@code FileBasedConfigurationBuilder} + */ + public FileBasedConfigurationBuilder<PropertiesConfiguration> propertiesBuilder( + File file) + { + return fileBasedBuilder(PropertiesConfiguration.class, file); + } + + /** + * Creates a builder for a {@code PropertiesConfiguration} and initializes + * it with the given URL to be loaded. + * + * @param url the URL to be loaded + * @return the newly created {@code FileBasedConfigurationBuilder} + */ + public FileBasedConfigurationBuilder<PropertiesConfiguration> propertiesBuilder( + URL url) + { + return fileBasedBuilder(PropertiesConfiguration.class, url); + } + + /** + * Creates a builder for a {@code PropertiesConfiguration} and initializes + * it with the given path to the file to be loaded. + * + * @param path the path to the file to be loaded + * @return the newly created {@code FileBasedConfigurationBuilder} + */ + public FileBasedConfigurationBuilder<PropertiesConfiguration> propertiesBuilder( + String path) + { + return fileBasedBuilder(PropertiesConfiguration.class, path); + } + + /** + * Creates a {@code PropertiesConfiguration} instance from the content of + * the given file. This is a convenience method which can be used if no + * builder is needed for managing the configuration object. (Although, + * behind the scenes a builder is created). + * + * @param file the file to be loaded + * @return a {@code PropertiesConfiguration} object initialized from this + * file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public PropertiesConfiguration properties(File file) + throws ConfigurationException + { + return propertiesBuilder(file).getConfiguration(); + } + + /** + * Creates a {@code PropertiesConfiguration} instance from the content of + * the given URL. This is a convenience method which can be used if no + * builder is needed for managing the configuration object. (Although, + * behind the scenes a builder is created). + * + * @param url the URL to be loaded + * @return a {@code PropertiesConfiguration} object initialized from this + * URL + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public PropertiesConfiguration properties(URL url) + throws ConfigurationException + { + return propertiesBuilder(url).getConfiguration(); + } + + /** + * Creates a {@code PropertiesConfiguration} instance from the content of + * the file identified by the given path. This is a convenience method which + * can be used if no builder is needed for managing the configuration + * object. (Although, behind the scenes a builder is created). + * + * @param path the path to the file to be loaded + * @return a {@code PropertiesConfiguration} object initialized from this + * path + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public PropertiesConfiguration properties(String path) + throws ConfigurationException + { + return propertiesBuilder(path).getConfiguration(); + } + + /** + * Creates a builder for a {@code XMLConfiguration} and initializes it with + * the given file to be loaded. + * + * @param file the file to be loaded + * @return the newly created {@code FileBasedConfigurationBuilder} + */ + public FileBasedConfigurationBuilder<XMLConfiguration> xmlBuilder(File file) + { + return fileBasedBuilder(XMLConfiguration.class, file); + } + + /** + * Creates a builder for a {@code XMLConfiguration} and initializes it with + * the given URL to be loaded. + * + * @param url the URL to be loaded + * @return the newly created {@code FileBasedConfigurationBuilder} + */ + public FileBasedConfigurationBuilder<XMLConfiguration> xmlBuilder(URL url) + { + return fileBasedBuilder(XMLConfiguration.class, url); + } + + /** + * Creates a builder for a {@code XMLConfiguration} and initializes it with + * the given path to the file to be loaded. + * + * @param path the path to the file to be loaded + * @return the newly created {@code FileBasedConfigurationBuilder} + */ + public FileBasedConfigurationBuilder<XMLConfiguration> xmlBuilder( + String path) + { + return fileBasedBuilder(XMLConfiguration.class, path); + } + + /** + * Creates a {@code XMLConfiguration} instance from the content of the given + * file. This is a convenience method which can be used if no builder is + * needed for managing the configuration object. (Although, behind the + * scenes a builder is created). + * + * @param file the file to be loaded + * @return a {@code XMLConfiguration} object initialized from this file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public XMLConfiguration xml(File file) throws ConfigurationException + { + return xmlBuilder(file).getConfiguration(); + } + + /** + * Creates a {@code XMLConfiguration} instance from the content of the given + * URL. This is a convenience method which can be used if no builder is + * needed for managing the configuration object. (Although, behind the + * scenes a builder is created). + * + * @param url the URL to be loaded + * @return a {@code XMLConfiguration} object initialized from this file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public XMLConfiguration xml(URL url) throws ConfigurationException + { + return xmlBuilder(url).getConfiguration(); + } + + /** + * Creates a {@code XMLConfiguration} instance from the content of the file + * identified by the given path. This is a convenience method which can be + * used if no builder is needed for managing the configuration object. + * (Although, behind the scenes a builder is created). + * + * @param path the path to the file to be loaded + * @return a {@code XMLConfiguration} object initialized from this file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public XMLConfiguration xml(String path) throws ConfigurationException + { + return xmlBuilder(path).getConfiguration(); + } + + /** + * Creates a builder for a {@code INIConfiguration} and initializes it with + * the given file to be loaded. + * + * @param file the file to be loaded + * @return the newly created {@code FileBasedConfigurationBuilder} + */ + public FileBasedConfigurationBuilder<INIConfiguration> iniBuilder(File file) + { + return fileBasedBuilder(INIConfiguration.class, file); + } + + /** + * Creates a builder for a {@code INIConfiguration} and initializes it with + * the given URL to be loaded. + * + * @param url the URL to be loaded + * @return the newly created {@code FileBasedConfigurationBuilder} + */ + public FileBasedConfigurationBuilder<INIConfiguration> iniBuilder(URL url) + { + return fileBasedBuilder(INIConfiguration.class, url); + } + + /** + * Creates a builder for a {@code INIConfiguration} and initializes it with + * the file file identified by the given path. + * + * @param path the path to the file to be loaded + * @return the newly created {@code FileBasedConfigurationBuilder} + */ + public FileBasedConfigurationBuilder<INIConfiguration> iniBuilder( + String path) + { + return fileBasedBuilder(INIConfiguration.class, path); + } + + /** + * Creates a {@code INIConfiguration} instance from the content of the given + * file. This is a convenience method which can be used if no builder is + * needed for managing the configuration object. (Although, behind the + * scenes a builder is created). + * + * @param file the file to be loaded + * @return a {@code INIConfiguration} object initialized from this file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public INIConfiguration ini(File file) throws ConfigurationException + { + return iniBuilder(file).getConfiguration(); + } + + /** + * Creates a {@code INIConfiguration} instance from the content of the given + * URL. This is a convenience method which can be used if no builder is + * needed for managing the configuration object. (Although, behind the + * scenes a builder is created). + * + * @param url the URL to be loaded + * @return a {@code INIConfiguration} object initialized from this file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public INIConfiguration ini(URL url) throws ConfigurationException + { + return iniBuilder(url).getConfiguration(); + } + + /** + * Creates a {@code INIConfiguration} instance from the content of the file + * identified by the given path. This is a convenience method which can be + * used if no builder is needed for managing the configuration object. + * (Although, behind the scenes a builder is created). + * + * @param path the path to the file to be loaded + * @return a {@code INIConfiguration} object initialized from this file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public INIConfiguration ini(String path) throws ConfigurationException + { + return iniBuilder(path).getConfiguration(); + } + + /** + * Creates a builder for a {@code CombinedConfiguration} and initializes it + * with the given file to be loaded. + * + * @param file the file to be loaded + * @return the newly created {@code CombinedConfigurationBuilder} + */ + public CombinedConfigurationBuilder combinedBuilder(File file) + { + return new CombinedConfigurationBuilder().configure(fileParams(file)); + } + + /** + * Creates a builder for a {@code CombinedConfiguration} and initializes it + * with the given URL to be loaded. + * + * @param url the URL to be loaded + * @return the newly created {@code CombinedConfigurationBuilder} + */ + public CombinedConfigurationBuilder combinedBuilder(URL url) + { + return new CombinedConfigurationBuilder().configure(fileParams(url)); + } + + /** + * Creates a builder for a {@code CombinedConfiguration} and initializes it + * with the given path to the file to be loaded. + * + * @param path the path to the file to be loaded + * @return the newly created {@code CombinedConfigurationBuilder} + */ + public CombinedConfigurationBuilder combinedBuilder(String path) + { + return new CombinedConfigurationBuilder().configure(fileParams(path)); + } + + /** + * Creates a {@code CombinedConfiguration} instance from the content of the + * given file. This is a convenience method which can be used if no builder + * is needed for managing the configuration object. (Although, behind the + * scenes a builder is created). + * + * @param file the file to be loaded + * @return a {@code CombinedConfiguration} object initialized from this file + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public CombinedConfiguration combined(File file) + throws ConfigurationException + { + return combinedBuilder(file).getConfiguration(); + } + + /** + * Creates a {@code CombinedConfiguration} instance from the content of the + * given URL. This is a convenience method which can be used if no builder + * is needed for managing the configuration object. (Although, behind the + * scenes a builder is created). + * + * @param url the URL to be loaded + * @return a {@code CombinedConfiguration} object initialized from this URL + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public CombinedConfiguration combined(URL url) + throws ConfigurationException + { + return combinedBuilder(url).getConfiguration(); + } + + /** + * Creates a {@code CombinedConfiguration} instance from the content of the + * file identified by the given path. This is a convenience method which can + * be used if no builder is needed for managing the configuration object. + * (Although, behind the scenes a builder is created). + * + * @param path the path to the file to be loaded + * @return a {@code CombinedConfiguration} object initialized from this URL + * @throws ConfigurationException if an error occurred when loading the + * configuration + */ + public CombinedConfiguration combined(String path) + throws ConfigurationException + { + return combinedBuilder(path).getConfiguration(); + } + + /** + * Creates a configured builder for a file-based configuration of the + * specified type. + * + * @param configClass the configuration class + * @param params the parameters object for configuring the builder + * @param <T> the type of the configuration to be constructed + * @return the newly created builder + */ + private <T extends FileBasedConfiguration> FileBasedConfigurationBuilder<T> createFileBasedBuilder( + Class<T> configClass, FileBasedBuilderParameters params) + { + return new FileBasedConfigurationBuilder<T>(configClass) + .configure(params); + } + + /** + * Convenience method for creating a parameters object for a file-based + * configuration. + * + * @return the newly created parameters object + */ + private FileBasedBuilderParameters fileParams() + { + return getParameters().fileBased(); + } + + /** + * Convenience method for creating a file-based parameters object + * initialized with the given file. + * + * @param file the file to be loaded + * @return the initialized parameters object + */ + private FileBasedBuilderParameters fileParams(File file) + { + return fileParams().setFile(file); + } + + /** + * Convenience method for creating a file-based parameters object + * initialized with the given file. + * + * @param url the URL to be loaded + * @return the initialized parameters object + */ + private FileBasedBuilderParameters fileParams(URL url) + { + return fileParams().setURL(url); + } + + /** + * Convenience method for creating a file-based parameters object + * initialized with the given file path. + * + * @param path the path to the file to be loaded + * @return the initialized parameters object + */ + private FileBasedBuilderParameters fileParams(String path) + { + return fileParams().setFileName(path); + } +} Added: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/fluent/TestConfigurations.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/fluent/TestConfigurations.java?rev=1617826&view=auto ============================================================================== --- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/fluent/TestConfigurations.java (added) +++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/fluent/TestConfigurations.java Wed Aug 13 20:15:04 2014 @@ -0,0 +1,531 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.configuration.builder.fluent; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; + +import java.io.File; +import java.net.URL; + +import org.apache.commons.configuration.CombinedConfiguration; +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationAssert; +import org.apache.commons.configuration.INIConfiguration; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.commons.configuration.XMLConfiguration; +import org.apache.commons.configuration.builder.FileBasedConfigurationBuilder; +import org.apache.commons.configuration.builder.combined.CombinedConfigurationBuilder; +import org.apache.commons.configuration.ex.ConfigurationException; +import org.apache.commons.configuration.plist.PropertyListConfiguration; +import org.junit.Test; + +/** + * Test class for {@code Configurations}. + * + * @version $Id$ + */ +public class TestConfigurations +{ + /** Constant for the name of the test properties file. */ + private static final String TEST_PROPERTIES = "test.properties"; + + /** Constant for the name of the test XML file. */ + private static final String TEST_XML = "test.xml"; + + /** Constant for the name of the test ini file. */ + private static final String TEST_INI = "test.ini"; + + /** Constant for the name of the configuration definition file. */ + private static final String TEST_COMBINED = "testDigesterConfiguration.xml"; + + /** Constant for the name of the test PList file. */ + private static final String TEST_PLIST = "test.plist"; + + /** + * Generates a full path for the test file with the given name. + * + * @param name the name of the test file + * @return the full path to this file + */ + private static String filePath(String name) + { + return ConfigurationAssert.getTestFile(name).getAbsolutePath(); + } + + /** + * Tests whether a default {@code Parameters} instance is created if + * necessary. + */ + @Test + public void testDefaultParameters() + { + Configurations configs = new Configurations(); + assertNotNull("No parameters", configs.getParameters()); + } + + /** + * Tests whether parameters can be passed in at construction time. + */ + @Test + public void testInitWithParameters() + { + Parameters params = new Parameters(); + Configurations configs = new Configurations(params); + assertSame("Wrong parameters", params, configs.getParameters()); + } + + /** + * Tests whether a builder for a file-based configuration can be created if + * an input File is specified. + */ + @Test + public void testFileBasedBuilderWithFile() + { + Configurations configs = new Configurations(); + File file = ConfigurationAssert.getTestFile(TEST_PROPERTIES); + FileBasedConfigurationBuilder<PropertiesConfiguration> builder = + configs.fileBasedBuilder(PropertiesConfiguration.class, file); + assertEquals("Wrong file", file.toURI(), builder.getFileHandler() + .getFile().toURI()); + } + + /** + * Tests whether a builder for a file-based configuration can be created if + * a URL is specified. + */ + @Test + public void testFileBasedBuilderWithURL() + { + Configurations configs = new Configurations(); + URL url = ConfigurationAssert.getTestURL("test.properties"); + FileBasedConfigurationBuilder<PropertiesConfiguration> builder = + configs.fileBasedBuilder(PropertiesConfiguration.class, url); + assertEquals("Wrong URL", url, builder.getFileHandler().getURL()); + } + + /** + * Tests whether a builder for a file-based configuration can be created if + * a file name is specified. + */ + @Test + public void testFileBasedBuilderWithPath() + { + Configurations configs = new Configurations(); + String filePath = filePath(TEST_PROPERTIES); + FileBasedConfigurationBuilder<PropertiesConfiguration> builder = + configs.fileBasedBuilder(PropertiesConfiguration.class, + filePath); + assertEquals("Wrong path", filePath, builder.getFileHandler() + .getFileName()); + } + + /** + * Checks whether a property list configuration was correctly loaded. + * + * @param config the configuration instance to be checked. + */ + private static void checkPList(Configuration config) + { + assertEquals("string1", config.getProperty("simple-string")); + } + + /** + * Tests whether a file-based configuration can be loaded from a file. + */ + @Test + public void testFileBasedFile() throws ConfigurationException + { + Configurations configs = new Configurations(); + PropertyListConfiguration config = + configs.fileBased(PropertyListConfiguration.class, + ConfigurationAssert.getTestFile(TEST_PLIST)); + checkPList(config); + } + + /** + * Tests whether a file-based configuration can be loaded from a URL. + */ + @Test + public void testFileBasedURL() throws ConfigurationException + { + Configurations configs = new Configurations(); + PropertyListConfiguration config = + configs.fileBased(PropertyListConfiguration.class, + ConfigurationAssert.getTestURL(TEST_PLIST)); + checkPList(config); + } + + /** + * Tests whether a file-based configuration can be loaded from a file path. + */ + @Test + public void testFileBasedPath() throws ConfigurationException + { + Configurations configs = new Configurations(); + PropertyListConfiguration config = + configs.fileBased(PropertyListConfiguration.class, + filePath(TEST_PLIST)); + checkPList(config); + } + + /** + * Checks whether a test properties configuration was correctly loaded. + * + * @param config the configuration instance to be checked. + */ + private static void checkProperties(Configuration config) + { + assertEquals("true", config.getString("configuration.loaded")); + } + + /** + * Tests whether a builder for a properties configuration can be created for + * a given file. + */ + @Test + public void testPropertiesBuilderFromFile() throws ConfigurationException + { + Configurations configs = new Configurations(); + FileBasedConfigurationBuilder<PropertiesConfiguration> builder = + configs.propertiesBuilder(ConfigurationAssert + .getTestFile(TEST_PROPERTIES)); + checkProperties(builder.getConfiguration()); + } + + /** + * Tests whether a properties configuration can be loaded from a file. + */ + @Test + public void testPropertiesFromFile() throws ConfigurationException + { + Configurations configs = new Configurations(); + PropertiesConfiguration config = + configs.properties(ConfigurationAssert + .getTestFile(TEST_PROPERTIES)); + checkProperties(config); + } + + /** + * Tests whether a builder for a properties configuration can be created for + * a given URL. + */ + @Test + public void testPropertiesBuilderFromURL() throws ConfigurationException + { + Configurations configs = new Configurations(); + FileBasedConfigurationBuilder<PropertiesConfiguration> builder = + configs.propertiesBuilder(ConfigurationAssert + .getTestURL(TEST_PROPERTIES)); + checkProperties(builder.getConfiguration()); + } + + /** + * Tests whether a properties configuration can be loaded from a URL. + */ + @Test + public void testPropertiesFromURL() throws ConfigurationException + { + Configurations configs = new Configurations(); + PropertiesConfiguration config = + configs.properties(ConfigurationAssert + .getTestURL(TEST_PROPERTIES)); + checkProperties(config); + } + + /** + * Tests whether a builder for a properties configuration can be created for + * a given file path. + */ + @Test + public void testPropertiesBuilderFromPath() throws ConfigurationException + { + Configurations configs = new Configurations(); + FileBasedConfigurationBuilder<PropertiesConfiguration> builder = + configs.propertiesBuilder(filePath(TEST_PROPERTIES)); + checkProperties(builder.getConfiguration()); + } + + /** + * Tests whether a properties configuration can be loaded from a file path. + */ + @Test + public void testPropertiesFromPath() throws ConfigurationException + { + Configurations configs = new Configurations(); + PropertiesConfiguration config = + configs.properties(filePath(TEST_PROPERTIES)); + checkProperties(config); + } + + /** + * Checks whether a test XML configuration was correctly loaded. + * + * @param config the configuration instance to be checked. + */ + private static void checkXML(Configuration config) + { + assertEquals("value", config.getProperty("element")); + } + + /** + * Tests whether a builder for a XML configuration can be created for a + * given file. + */ + @Test + public void testXMLBuilderFromFile() throws ConfigurationException + { + Configurations configs = new Configurations(); + FileBasedConfigurationBuilder<XMLConfiguration> builder = + configs.xmlBuilder(ConfigurationAssert.getTestFile(TEST_XML)); + checkXML(builder.getConfiguration()); + } + + /** + * Tests whether a XML configuration can be loaded from a file. + */ + @Test + public void testXMLFromFile() throws ConfigurationException + { + Configurations configs = new Configurations(); + XMLConfiguration config = + configs.xml(ConfigurationAssert.getTestFile(TEST_XML)); + checkXML(config); + } + + /** + * Tests whether a builder for a XML configuration can be created for a + * given URL. + */ + @Test + public void testXMLBuilderFromURL() throws ConfigurationException + { + Configurations configs = new Configurations(); + FileBasedConfigurationBuilder<XMLConfiguration> builder = + configs.xmlBuilder(ConfigurationAssert.getTestURL(TEST_XML)); + checkXML(builder.getConfiguration()); + } + + /** + * Tests whether a XML configuration can be loaded from a URL. + */ + @Test + public void testXMLFromURL() throws ConfigurationException + { + Configurations configs = new Configurations(); + XMLConfiguration config = + configs.xml(ConfigurationAssert.getTestURL(TEST_XML)); + checkXML(config); + } + + /** + * Tests whether a builder for a XML configuration can be created for a + * given file path. + */ + @Test + public void testXMLBuilderFromPath() throws ConfigurationException + { + Configurations configs = new Configurations(); + FileBasedConfigurationBuilder<XMLConfiguration> builder = + configs.xmlBuilder(filePath(TEST_XML)); + checkXML(builder.getConfiguration()); + } + + /** + * Tests whether a XML configuration can be loaded from a URL. + */ + @Test + public void testXMLFromPath() throws ConfigurationException + { + Configurations configs = new Configurations(); + XMLConfiguration config = configs.xml(filePath(TEST_XML)); + checkXML(config); + } + + /** + * Checks whether a test INI configuration was correctly loaded. + * + * @param config the configuration instance to be checked. + */ + private static void checkINI(INIConfiguration config) + { + assertEquals("yes", config.getProperty("testini.loaded")); + } + + /** + * Tests whether a builder for a INI configuration can be created for a + * given file. + */ + @Test + public void testINIBuilderFromFile() throws ConfigurationException + { + Configurations configs = new Configurations(); + FileBasedConfigurationBuilder<INIConfiguration> builder = + configs.iniBuilder(ConfigurationAssert.getTestFile(TEST_INI)); + checkINI(builder.getConfiguration()); + } + + /** + * Tests whether a INI configuration can be loaded from a file. + */ + @Test + public void testINIFromFile() throws ConfigurationException + { + Configurations configs = new Configurations(); + INIConfiguration config = + configs.ini(ConfigurationAssert.getTestFile(TEST_INI)); + checkINI(config); + } + + /** + * Tests whether a builder for a INI configuration can be created for a + * given URL. + */ + @Test + public void testINIBuilderFromURL() throws ConfigurationException + { + Configurations configs = new Configurations(); + FileBasedConfigurationBuilder<INIConfiguration> builder = + configs.iniBuilder(ConfigurationAssert.getTestURL(TEST_INI)); + checkINI(builder.getConfiguration()); + } + + /** + * Tests whether a INI configuration can be loaded from a URL. + */ + @Test + public void testINIFromURL() throws ConfigurationException + { + Configurations configs = new Configurations(); + INIConfiguration config = + configs.ini(ConfigurationAssert.getTestURL(TEST_INI)); + checkINI(config); + } + + /** + * Tests whether a builder for a INI configuration can be created for a + * given file path. + */ + @Test + public void testINIBuilderFromPath() throws ConfigurationException + { + Configurations configs = new Configurations(); + FileBasedConfigurationBuilder<INIConfiguration> builder = + configs.iniBuilder(filePath(TEST_INI)); + checkINI(builder.getConfiguration()); + } + + /** + * Tests whether a INI configuration can be loaded from a file path. + */ + @Test + public void testINIFromPath() throws ConfigurationException + { + Configurations configs = new Configurations(); + INIConfiguration config = configs.ini(filePath(TEST_INI)); + checkINI(config); + } + + /** + * Checks whether a combined configuration was successfully loaded. + * + * @param config the configuration instance to be checked. + */ + private static void checkCombined(Configuration config) + { + checkProperties(config); + checkXML(config); + } + + /** + * Tests whether a combined configuration builder can be constructed for a + * file. + */ + @Test + public void testCombinedBuilderFromFile() throws ConfigurationException + { + Configurations configs = new Configurations(); + CombinedConfigurationBuilder builder = + configs.combinedBuilder(ConfigurationAssert + .getTestFile(TEST_COMBINED)); + checkCombined(builder.getConfiguration()); + } + + /** + * Tests whether a combined configuration can be loaded from a file. + */ + @Test + public void testCombinedFromFile() throws ConfigurationException + { + Configurations configs = new Configurations(); + CombinedConfiguration config = + configs.combined(ConfigurationAssert.getTestFile(TEST_COMBINED)); + checkCombined(config); + } + + /** + * Tests whether a combined configuration builder can be constructed for a + * URL. + */ + @Test + public void testCombinedBuilderFromURL() throws ConfigurationException + { + Configurations configs = new Configurations(); + CombinedConfigurationBuilder builder = + configs.combinedBuilder(ConfigurationAssert + .getTestURL(TEST_COMBINED)); + checkCombined(builder.getConfiguration()); + } + + /** + * Tests whether a combined configuration can be loaded from a URL. + */ + @Test + public void testCombinedFromURL() throws ConfigurationException + { + Configurations configs = new Configurations(); + CombinedConfiguration config = + configs.combined(ConfigurationAssert.getTestURL(TEST_COMBINED)); + checkCombined(config); + } + + /** + * Tests whether a combined configuration builder can be constructed for a + * file path. + */ + @Test + public void testCombinedBuilderFromPath() throws ConfigurationException + { + Configurations configs = new Configurations(); + CombinedConfigurationBuilder builder = + configs.combinedBuilder(filePath(TEST_COMBINED)); + checkCombined(builder.getConfiguration()); + } + + /** + * Tests whether a combined configuration can be loaded from a file path. + */ + @Test + public void testCombinedFromPath() throws ConfigurationException + { + Configurations configs = new Configurations(); + CombinedConfiguration config = + configs.combined(filePath(TEST_COMBINED)); + checkCombined(config); + } +}