You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2008/07/12 17:22:36 UTC
svn commit: r676184 - in
/commons/proper/configuration/branches/configuration2_experimental:
src/main/java/org/apache/commons/configuration2/
src/test/java/org/apache/commons/configuration2/ xdocs/
Author: oheger
Date: Sat Jul 12 08:22:35 2008
New Revision: 676184
URL: http://svn.apache.org/viewvc?rev=676184&view=rev
Log:
CONFIGURATION-333: Added an overloaded version of the configurationsAt() method that supports a "supportsUpdate" parameter.
Modified:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java
commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestInMemoryConfiguration.java
commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestSubConfiguration.java
commons/proper/configuration/branches/configuration2_experimental/xdocs/changes.xml
Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java?rev=676184&r1=676183&r2=676184&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/AbstractHierarchicalConfiguration.java Sat Jul 12 08:22:35 2008
@@ -301,42 +301,76 @@
/**
* Returns a list of sub configurations for all configuration nodes selected
* by the given key. This method will evaluate the passed in key (using the
- * current <code>ExpressionEngine</code>) and then create a subnode
- * configuration for each returned node (like
+ * current <code>ExpressionEngine</code>) and then create a
+ * <code>{@link SubConfiguration}</code> for each returned node (like
* <code>{@link #configurationAt(String)}</code>}). This is especially
* useful when dealing with list-like structures. As an example consider the
* configuration that contains data about database tables and their fields.
* If you need access to all fields of a certain table, you can simply do
*
* <pre>
- * List fields = config.configurationsAt("tables.table(0).fields.field");
- * for(Iterator it = fields.iterator(); it.hasNext();)
+ * List<SubConfiguration<T>> fields = config.configurationsAt("tables.table(0).fields.field");
+ * for(SubConfiguration sub : fields)
* {
- * HierarchicalConfiguration sub = (HierarchicalConfiguration) it.next();
* // now the children and attributes of the field node can be
* // directly accessed
* String fieldName = sub.getString("name");
* String fieldType = sub.getString("type");
* ...
* </pre>
+ * This method also supports a <code>supportUpdates</code> parameter for
+ * making the sub configurations returned aware of structural changes in
+ * the parent configuration. Refer to the documentation of
+ * <code>{@link #configurationAt(String, boolean)}</code> for more details
+ * about the effect of this flag.
*
* @param key the key for selecting the desired nodes
+ * @param supportUpdates a flag whether the returned sub configurations
+ * should be able to handle updates of its parent
* @return a list with hierarchical configuration objects; each
* configuration represents one of the nodes selected by the passed in key
*/
- public List<SubConfiguration<T>> configurationsAt(String key)
+ public List<SubConfiguration<T>> configurationsAt(String key, boolean supportUpdates)
{
NodeList<T> nodes = fetchNodeList(key);
List<SubConfiguration<T>> configs = new ArrayList<SubConfiguration<T>>(
nodes.size());
+
for (int index = 0; index < nodes.size(); index++)
{
- configs.add(createSubnodeConfiguration(nodes.getNode(index)));
+ SubConfiguration<T> subConfig;
+ if(supportUpdates)
+ {
+ String subnodeKey = constructPath(nodes.getNode(index));
+ subConfig = createSubnodeConfiguration(nodes.getNode(index), subnodeKey);
+ }
+ else
+ {
+ subConfig = createSubnodeConfiguration(nodes.getNode(index));
+ }
+ configs.add(subConfig);
}
+
return configs;
}
/**
+ * Returns a list of sub configurations for all configuration nodes selected
+ * by the given key that are not aware of structural updates of their
+ * parent. This is a short form for
+ * <code>configurationsAt(key, <b>false</b>)</code>.
+ *
+ * @param key the key for selecting the desired nodes
+ * @return a list with hierarchical configuration objects; each
+ * configuration represents one of the nodes selected by the passed
+ * in key
+ */
+ public List<SubConfiguration<T>> configurationsAt(String key)
+ {
+ return configurationsAt(key, false);
+ }
+
+ /**
* Creates a sub configuration for the specified node. This method is
* called by <code>configurationAt()</code> and
* <code>configurationsAt()</code>.
Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestInMemoryConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestInMemoryConfiguration.java?rev=676184&r1=676183&r2=676184&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestInMemoryConfiguration.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestInMemoryConfiguration.java Sat Jul 12 08:22:35 2008
@@ -30,6 +30,7 @@
import org.apache.commons.configuration2.event.ConfigurationListener;
import org.apache.commons.configuration2.expr.ExpressionEngine;
import org.apache.commons.configuration2.expr.NodeHandler;
+import org.apache.commons.configuration2.expr.NodeList;
import org.apache.commons.configuration2.expr.NodeVisitorAdapter;
import org.apache.commons.configuration2.expr.def.DefaultExpressionEngine;
import org.apache.commons.configuration2.tree.ConfigurationNode;
@@ -572,9 +573,10 @@
assertEquals("Wrong size of FIELDS", FIELDS[1].length, lstFlds.size());
for (int i = 0; i < FIELDS[1].length; i++)
{
- AbstractHierarchicalConfiguration<ConfigurationNode> sub = lstFlds.get(i);
+ SubConfiguration<ConfigurationNode> sub = lstFlds.get(i);
assertEquals("Wrong field at position " + i, FIELDS[1][i], sub
.getString("name"));
+ assertNull("Sub configuration detects changes", sub.getSubnodeKey());
}
}
@@ -588,6 +590,24 @@
.isEmpty());
}
+ /**
+ * Tests the configurationsAt() method when the sub configurations should be
+ * aware of updates.
+ */
+ public void testConfigurationsAtSupportUpdates()
+ {
+ List<SubConfiguration<ConfigurationNode>> lstFlds = config
+ .configurationsAt("tables.table(1).fields.field", true);
+ for (SubConfiguration<ConfigurationNode> sub : lstFlds)
+ {
+ assertNotNull("No subnode key set", sub.getSubnodeKey());
+ NodeList<ConfigurationNode> nodes = config.fetchNodeList(sub
+ .getSubnodeKey());
+ assertEquals("Wrong elements in node list", 1, nodes.size());
+ assertEquals("Wrong root node", nodes.getNode(0), sub.getRootNode());
+ }
+ }
+
public void testClone()
{
Configuration copy = (Configuration) config.clone();
Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestSubConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestSubConfiguration.java?rev=676184&r1=676183&r2=676184&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestSubConfiguration.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestSubConfiguration.java Sat Jul 12 08:22:35 2008
@@ -476,7 +476,6 @@
*/
protected InMemoryConfiguration setUpParentConfig()
{
- @SuppressWarnings("serial")
InMemoryConfiguration conf = new InMemoryConfiguration()
{
// Provide a special implementation of createNode() to check
Modified: commons/proper/configuration/branches/configuration2_experimental/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/xdocs/changes.xml?rev=676184&r1=676183&r2=676184&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/xdocs/changes.xml (original)
+++ commons/proper/configuration/branches/configuration2_experimental/xdocs/changes.xml Sat Jul 12 08:22:35 2008
@@ -76,6 +76,12 @@
A new PreferencesConfiguration class was added that wraps the
java.util.prefs API.
</action>
+ <action dev="oheger" type="add" issue="CONFIGURATION-333">
+ The configurationsAt() method of hierarchical configurations, like
+ configurationAt(), now supports an "supportsUpdate" parameter that
+ makes the sub configurations returned aware of structural updates of
+ their parent.
+ </action>
</release>
<release version="1.6" date="in SVN" description="">