Author: oheger
Date: Wed Dec 12 17:58:47 2012
New Revision: 1420889
URL: http://svn.apache.org/viewvc?rev=1420889&view=rev
Log:
Added a merge() method to BasicBuilderParameters.
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicBuilderParameters.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BuilderParameters.java
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBasicBuilderParameters.java
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicBuilderParameters.java
URL:
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicBuilderParameters.java?rev=1420889&r1=1420888&r2=1420889&view=diff
==============================================================================
---
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicBuilderParameters.java
(original)
+++
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicBuilderParameters.java
Wed Dec 12 17:58:47 2012
@@ -138,6 +138,48 @@ public class BasicBuilderParameters impl
}
/**
+ * Merges this object with the given parameters object. This method adds
all
+ * property values defined by the passed in parameters object to the
+ * internal storage which are not already in. So properties already defined
+ * in this object take precedence. Property names starting with the
reserved
+ * parameter prefix are ignored.
+ *
+ * @param p the object whose properties should be merged (must not be
+ * <b>null</b>)
+ * @throws IllegalArgumentException if the passed in object is <b>null</b>
+ */
+ public void merge(BuilderParameters p)
+ {
+ if (p == null)
+ {
+ throw new IllegalArgumentException(
+ "Parameters to merge must not be null!");
+ }
+
+ for (Map.Entry<String, Object> e : p.getParameters().entrySet())
+ {
+ if (!properties.containsKey(e.getKey())
+ && !e.getKey().startsWith(RESERVED_PARAMETER_PREFIX))
+ {
+ storeProperty(e.getKey(), e.getValue());
+ }
+ }
+ }
+
+ /**
+ * Sets a property for this parameters object. Properties are stored in an
+ * internal map. With this method a new entry can be added to this map. It
+ * can be used by sub classes which also store properties in a map.
+ *
+ * @param key the key of the property
+ * @param value the value of the property
+ */
+ protected void storeProperty(String key, Object value)
+ {
+ properties.put(key, value);
+ }
+
+ /**
* Sets default parameter values.
*/
private void initDefaults()
@@ -154,7 +196,7 @@ public class BasicBuilderParameters impl
*/
private BasicBuilderParameters setProperty(String key, Object value)
{
- properties.put(key, value);
+ storeProperty(key, value);
return this;
}
}
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java
URL:
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java?rev=1420889&r1=1420888&r2=1420889&view=diff
==============================================================================
---
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java
(original)
+++
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BasicConfigurationBuilder.java
Wed Dec 12 17:58:47 2012
@@ -100,16 +100,6 @@ public class BasicConfigurationBuilder<T
ConfigurationBuilder<T>
{
/**
- * Constant for a prefix for reserved initialization parameter keys. If a
- * parameter was set whose key starts with this prefix, it is filtered out
- * before the initialization of a newly created result object. This
- * mechanism allows derived classes to store specific configuration data in
- * the parameters map which does not represent a property value for the
- * result object.
- */
- public static final String RESERVED_PARAMETER = "config-";
-
- /**
* A dummy event source that is used for registering listeners if no
* compatible result object is available. This source has empty dummy
* implementations for listener registration methods.
@@ -686,7 +676,7 @@ public class BasicConfigurationBuilder<T
.hasNext();)
{
String key = it.next();
- if (key.startsWith(RESERVED_PARAMETER))
+ if (key.startsWith(BuilderParameters.RESERVED_PARAMETER_PREFIX))
{
it.remove();
}
Modified:
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BuilderParameters.java
URL:
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BuilderParameters.java?rev=1420889&r1=1420888&r2=1420889&view=diff
==============================================================================
---
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BuilderParameters.java
(original)
+++
commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/builder/BuilderParameters.java
Wed Dec 12 17:58:47 2012
@@ -40,6 +40,16 @@ import java.util.Map;
public interface BuilderParameters
{
/**
+ * Constant for a prefix for reserved initialization parameter keys. If a
+ * parameter was set whose key starts with this prefix, it is filtered out
+ * before the initialization of a newly created result object. This
+ * mechanism allows implementing classes to store specific configuration
+ * data in the parameters map which does not represent a property value for
+ * the result object.
+ */
+ String RESERVED_PARAMETER_PREFIX = "config-";
+
+ /**
* Returns a map with all parameters defined by this objects. The keys of
* the map correspond to concrete properties supported by the
* {@code Configuration} implementation class the builder produces. The
Modified:
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBasicBuilderParameters.java
URL:
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBasicBuilderParameters.java?rev=1420889&r1=1420888&r2=1420889&view=diff
==============================================================================
---
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBasicBuilderParameters.java
(original)
+++
commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/builder/TestBasicBuilderParameters.java
Wed Dec 12 17:58:47 2012
@@ -17,6 +17,7 @@
package org.apache.commons.configuration.builder;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
@@ -118,4 +119,42 @@ public class TestBasicBuilderParameters
assertEquals("Wrong delimiter", Character.valueOf(';'), params
.getParameters().get("listDelimiter"));
}
+
+ /**
+ * Tries a merge with a null object.
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void testMergeNull()
+ {
+ params.merge(null);
+ }
+
+ /**
+ * Tests whether properties of other parameter objects can be merged.
+ */
+ @Test
+ public void testMerge()
+ {
+ Map<String, Object> props = new HashMap<String, Object>();
+ props.put("throwExceptionOnMissing", Boolean.TRUE);
+ props.put("listDelimiter", Character.valueOf('-'));
+ props.put("other", "test");
+ props.put(BuilderParameters.RESERVED_PARAMETER_PREFIX + "test",
+ "reserved");
+ BuilderParameters p = EasyMock.createMock(BuilderParameters.class);
+ EasyMock.expect(p.getParameters()).andReturn(props);
+ EasyMock.replay(p);
+ params.setListDelimiter('+');
+ params.merge(p);
+ Map<String, Object> map = params.getParameters();
+ assertEquals("Wrong list delimiter", Character.valueOf('+'),
+ map.get("listDelimiter"));
+ assertEquals("Wrong exception flag", Boolean.TRUE,
+ map.get("throwExceptionOnMissing"));
+ assertEquals("Wrong other property", "test", map.get("other"));
+ assertFalse(
+ "Reserved property was copied",
+ map.containsKey(BuilderParameters.RESERVED_PARAMETER_PREFIX
+ + "test"));
+ }
}