Author: oheger Date: Fri Dec 28 16:06:11 2012 New Revision: 1426559 URL: http://svn.apache.org/viewvc?rev=1426559&view=rev Log: Added a specialized parameters class for hierarchical configurations.
Added: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImpl.java (with props) commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImplBeanInfo.java (with props) commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderProperties.java (with props) commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/HierarchicalBuilderParameters.java (with props) commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestHierarchicalBuilderParametersImpl.java (with props) Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/XMLBuilderParametersImpl.java commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/Parameters.java commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/XMLBuilderParameters.java commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/fluent/TestParameters.java Added: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImpl.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImpl.java?rev=1426559&view=auto ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImpl.java (added) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImpl.java Fri Dec 28 16:06:11 2012 @@ -0,0 +1,51 @@ +/* + * 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; + +import org.apache.commons.configuration.tree.ExpressionEngine; + +/** + * <p> + * A specialized parameters object for hierarchical configurations. + * </p> + * <p> + * This class defines special properties for hierarchical configurations. + * Because most hierarchical configurations are file-based configurations this + * class extends {@code FileBasedBuilderParametersImpl}. + * </p> + * + * @version $Id$ + * @since 2.0 + */ +public class HierarchicalBuilderParametersImpl extends + FileBasedBuilderParametersImpl implements + HierarchicalBuilderProperties<HierarchicalBuilderParametersImpl> +{ + /** Constant for the expression engine property. */ + private static final String PROP_EXPRESSION_ENGINE = "expressionEngine"; + + /** + * {@inheritDoc} This implementation stores the expression engine in the + * internal parameters map. + */ + public HierarchicalBuilderParametersImpl setExpressionEngine( + ExpressionEngine engine) + { + storeProperty(PROP_EXPRESSION_ENGINE, engine); + return this; + } +} Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImpl.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImpl.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImplBeanInfo.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImplBeanInfo.java?rev=1426559&view=auto ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImplBeanInfo.java (added) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImplBeanInfo.java Fri Dec 28 16:06:11 2012 @@ -0,0 +1,38 @@ +/* + * 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; + +/** + * <p> + * A specialized {@code BeanInfo} class providing additional property + * descriptors for the {@link HierarchicalBuilderParametersImpl} class. + * </p> + * + * @version $Id$ + * @since 2.0 + */ +public class HierarchicalBuilderParametersImplBeanInfo extends + BuilderParametersBeanInfo +{ + /** + * Creates a new instance of {@code HierarchicalBuilderParametersImplBeanInfo}. + */ + public HierarchicalBuilderParametersImplBeanInfo() + { + super(HierarchicalBuilderParametersImpl.class); + } +} Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImplBeanInfo.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImplBeanInfo.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderParametersImplBeanInfo.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderProperties.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderProperties.java?rev=1426559&view=auto ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderProperties.java (added) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderProperties.java Fri Dec 28 16:06:11 2012 @@ -0,0 +1,44 @@ +/* + * 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; + +import org.apache.commons.configuration.tree.ExpressionEngine; + +/** + * <p> + * Definition of a parameters interface for hierarchical configurations. + * </p> + * <p> + * This interface defines set methods for additional properties common to all + * hierarchical configurations. + * </p> + * + * @version $Id$ + * @since 2.0 + * @param <T> the type of the result of all set methods for method chaining + */ +public interface HierarchicalBuilderProperties<T> +{ + /** + * Sets the {@code ExpressionEngine} to be used when querying the + * configuration. + * + * @param engine the {@code ExpressionEngine} + * @return a reference to this object for method chaining + */ + T setExpressionEngine(ExpressionEngine engine); +} Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderProperties.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderProperties.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/HierarchicalBuilderProperties.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/XMLBuilderParametersImpl.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/XMLBuilderParametersImpl.java?rev=1426559&r1=1426558&r2=1426559&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/XMLBuilderParametersImpl.java (original) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/XMLBuilderParametersImpl.java Fri Dec 28 16:06:11 2012 @@ -38,7 +38,7 @@ import org.xml.sax.EntityResolver; * @version $Id$ * @since 2.0 */ -public class XMLBuilderParametersImpl extends FileBasedBuilderParametersImpl +public class XMLBuilderParametersImpl extends HierarchicalBuilderParametersImpl implements XMLBuilderProperties<XMLBuilderParametersImpl> { /** The key for the entity resolver property. */ Added: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/HierarchicalBuilderParameters.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/HierarchicalBuilderParameters.java?rev=1426559&view=auto ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/HierarchicalBuilderParameters.java (added) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/HierarchicalBuilderParameters.java Fri Dec 28 16:06:11 2012 @@ -0,0 +1,39 @@ +/* + * 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 org.apache.commons.configuration.builder.BasicBuilderProperties; +import org.apache.commons.configuration.builder.BuilderParameters; +import org.apache.commons.configuration.builder.FileBasedBuilderProperties; +import org.apache.commons.configuration.builder.HierarchicalBuilderProperties; + +/** + * <p> + * Definition of a parameters interface providing a fluent API for setting all + * properties for a hierarchical configuration. + * </p> + * + * @version $Id$ + * @since 2.0 + */ +public interface HierarchicalBuilderParameters extends + BasicBuilderProperties<HierarchicalBuilderParameters>, + FileBasedBuilderProperties<HierarchicalBuilderParameters>, + HierarchicalBuilderProperties<HierarchicalBuilderParameters>, + BuilderParameters +{ +} Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/HierarchicalBuilderParameters.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/HierarchicalBuilderParameters.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/HierarchicalBuilderParameters.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/Parameters.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/Parameters.java?rev=1426559&r1=1426558&r2=1426559&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/Parameters.java (original) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/Parameters.java Fri Dec 28 16:06:11 2012 @@ -23,6 +23,7 @@ import java.lang.reflect.Proxy; import org.apache.commons.configuration.builder.BasicBuilderParameters; import org.apache.commons.configuration.builder.BuilderParameters; import org.apache.commons.configuration.builder.FileBasedBuilderParametersImpl; +import org.apache.commons.configuration.builder.HierarchicalBuilderParametersImpl; import org.apache.commons.configuration.builder.JndiBuilderParametersImpl; import org.apache.commons.configuration.builder.XMLBuilderParametersImpl; import org.apache.commons.configuration.builder.combined.CombinedBuilderParametersImpl; @@ -117,6 +118,18 @@ public final class Parameters } /** + * Creates a new instance of a parameters object for hierarchical + * configurations. + * + * @return the new parameters object + */ + public static HierarchicalBuilderParameters hierarchical() + { + return createParametersProxy(HierarchicalBuilderParameters.class, + new HierarchicalBuilderParametersImpl()); + } + + /** * Creates a new instance of a parameters object for XML configurations. * * @return the new parameters object Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/XMLBuilderParameters.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/XMLBuilderParameters.java?rev=1426559&r1=1426558&r2=1426559&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/XMLBuilderParameters.java (original) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/fluent/XMLBuilderParameters.java Fri Dec 28 16:06:11 2012 @@ -19,6 +19,7 @@ package org.apache.commons.configuration import org.apache.commons.configuration.builder.BasicBuilderProperties; import org.apache.commons.configuration.builder.BuilderParameters; import org.apache.commons.configuration.builder.FileBasedBuilderProperties; +import org.apache.commons.configuration.builder.HierarchicalBuilderProperties; import org.apache.commons.configuration.builder.XMLBuilderProperties; /** @@ -33,6 +34,7 @@ import org.apache.commons.configuration. public interface XMLBuilderParameters extends BasicBuilderProperties<XMLBuilderParameters>, FileBasedBuilderProperties<XMLBuilderParameters>, + HierarchicalBuilderProperties<XMLBuilderParameters>, XMLBuilderProperties<XMLBuilderParameters>, BuilderParameters { } Added: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestHierarchicalBuilderParametersImpl.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestHierarchicalBuilderParametersImpl.java?rev=1426559&view=auto ============================================================================== --- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestHierarchicalBuilderParametersImpl.java (added) +++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestHierarchicalBuilderParametersImpl.java Fri Dec 28 16:06:11 2012 @@ -0,0 +1,75 @@ +/* + * 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; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; + +import java.util.Map; + +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.configuration.tree.ExpressionEngine; +import org.easymock.EasyMock; +import org.junit.Before; +import org.junit.Test; + +/** + * Test class for {@code HierarchicalBuilderParametersImpl}. + * + * @version $Id$ + */ +public class TestHierarchicalBuilderParametersImpl +{ + /** The parameters object to be tested. */ + private HierarchicalBuilderParametersImpl params; + + @Before + public void setUp() throws Exception + { + params = new HierarchicalBuilderParametersImpl(); + } + + /** + * Tests whether the expression engine can be set. + */ + @Test + public void testSetExpressionEngine() + { + ExpressionEngine engine = EasyMock.createMock(ExpressionEngine.class); + EasyMock.replay(engine); + assertSame("Wrong result", params, params.setExpressionEngine(engine)); + assertSame("Wrong expression engine", engine, params.getParameters() + .get("expressionEngine")); + } + + /** + * Tests whether properties can be set via BeanUtils. + */ + @Test + public void testBeanPropertiesAccess() throws Exception + { + ExpressionEngine engine = EasyMock.createMock(ExpressionEngine.class); + PropertyUtils.setProperty(params, "expressionEngine", engine); + PropertyUtils.setProperty(params, "throwExceptionOnMissing", + Boolean.TRUE); + Map<String, Object> map = params.getParameters(); + assertSame("Wrong expression engine", engine, + map.get("expressionEngine")); + assertEquals("Wrong exception flag", Boolean.TRUE, + map.get("throwExceptionOnMissing")); + } +} Propchange: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestHierarchicalBuilderParametersImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestHierarchicalBuilderParametersImpl.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestHierarchicalBuilderParametersImpl.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/fluent/TestParameters.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/fluent/TestParameters.java?rev=1426559&r1=1426558&r2=1426559&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/fluent/TestParameters.java (original) +++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/fluent/TestParameters.java Fri Dec 28 16:06:11 2012 @@ -25,6 +25,8 @@ import java.util.Map; import org.apache.commons.configuration.builder.BasicBuilderParameters; import org.apache.commons.configuration.builder.FileBasedBuilderParametersImpl; import org.apache.commons.configuration.builder.combined.CombinedBuilderParametersImpl; +import org.apache.commons.configuration.tree.ExpressionEngine; +import org.easymock.EasyMock; import org.junit.Test; /** @@ -125,17 +127,39 @@ public class TestParameters } /** + * Tests whether a parameters object for a hierarchical configuration can be + * created. + */ + @Test + public void testHierarchical() + { + ExpressionEngine engine = EasyMock.createMock(ExpressionEngine.class); + Map<String, Object> map = + Parameters.hierarchical().setThrowExceptionOnMissing(true) + .setExpressionEngine(engine).setFileName("test.xml") + .setListDelimiter('#').getParameters(); + checkBasicProperties(map); + FileBasedBuilderParametersImpl fbp = + FileBasedBuilderParametersImpl.fromParameters(map); + assertEquals("Wrong file name", "test.xml", fbp.getFileHandler() + .getFileName()); + assertEquals("Wrong expression engine", engine, + map.get("expressionEngine")); + } + + /** * Tests whether a parameters object for an XML configuration can be * created. */ @Test public void testXml() { + ExpressionEngine engine = EasyMock.createMock(ExpressionEngine.class); Map<String, Object> map = Parameters.xml().setThrowExceptionOnMissing(true) .setFileName("test.xml").setValidating(true) - .setListDelimiter('#').setSchemaValidation(true) - .getParameters(); + .setExpressionEngine(engine).setListDelimiter('#') + .setSchemaValidation(true).getParameters(); checkBasicProperties(map); FileBasedBuilderParametersImpl fbp = FileBasedBuilderParametersImpl.fromParameters(map); @@ -145,5 +169,7 @@ public class TestParameters map.get("validating")); assertEquals("Wrong schema flag", Boolean.TRUE, map.get("schemaValidation")); + assertEquals("Wrong expression engine", engine, + map.get("expressionEngine")); } }