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 2014/03/21 21:38:03 UTC
svn commit: r1580045 - in
/commons/proper/configuration/branches/immutableNodes/src:
main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java
Author: oheger
Date: Fri Mar 21 20:38:02 2014
New Revision: 1580045
URL: http://svn.apache.org/r1580045
Log:
Implemented childConfigurationsAt(String, boolean) in BaseHierarchicalConfiguration.
Modified:
commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java
Modified: commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java?rev=1580045&r1=1580044&r2=1580045&view=diff
==============================================================================
--- commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java (original)
+++ commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/BaseHierarchicalConfiguration.java Fri Mar 21 20:38:02 2014
@@ -300,6 +300,28 @@ public class BaseHierarchicalConfigurati
}
/**
+ * Creates a list of connected sub configurations based on a passed in list
+ * of node selectors.
+ *
+ * @param parentModel the parent node model
+ * @param selectors the list of {@code NodeSelector} objects
+ * @return the list with sub configurations
+ */
+ private List<HierarchicalConfiguration<ImmutableNode>> createConnectedSubConfigurations(
+ InMemoryNodeModel parentModel, Collection<NodeSelector> selectors)
+ {
+ List<HierarchicalConfiguration<ImmutableNode>> configs =
+ new ArrayList<HierarchicalConfiguration<ImmutableNode>>(
+ selectors.size());
+ for (NodeSelector selector : selectors)
+ {
+ configs.add(createSubConfigurationForTrackedNode(selector,
+ parentModel));
+ }
+ return configs;
+ }
+
+ /**
* Creates a sub configuration from the specified key which is independent
* on this configuration. This means that the sub configuration operates on
* a separate node model (although the nodes are initially shared).
@@ -420,15 +442,7 @@ public class BaseHierarchicalConfigurati
InMemoryNodeModel parentModel = getSubConfigurationParentModel();
Collection<NodeSelector> selectors =
parentModel.selectAndTrackNodes(key, this);
- List<HierarchicalConfiguration<ImmutableNode>> configs =
- new ArrayList<HierarchicalConfiguration<ImmutableNode>>(
- selectors.size());
- for (NodeSelector selector : selectors)
- {
- configs.add(createSubConfigurationForTrackedNode(selector,
- parentModel));
- }
- return configs;
+ return createConnectedSubConfigurations(parentModel, selectors);
}
/**
@@ -469,8 +483,23 @@ public class BaseHierarchicalConfigurati
return subs;
}
- public List<HierarchicalConfiguration<ImmutableNode>> childConfigurationsAt(String key, boolean supportUpdates) {
- return null;
+ /**
+ * {@inheritDoc} This method works like
+ * {@link #childConfigurationsAt(String)}; however, depending on the value
+ * of the {@code supportUpdates} flag, connected sub configurations may be
+ * created.
+ */
+ public List<HierarchicalConfiguration<ImmutableNode>> childConfigurationsAt(
+ String key, boolean supportUpdates)
+ {
+ if (!supportUpdates)
+ {
+ return childConfigurationsAt(key);
+ }
+
+ InMemoryNodeModel parentModel = getSubConfigurationParentModel();
+ return createConnectedSubConfigurations(parentModel,
+ parentModel.trackChildNodes(key, this));
}
/**
Modified: commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java?rev=1580045&r1=1580044&r2=1580045&view=diff
==============================================================================
--- commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java (original)
+++ commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestHierarchicalConfiguration.java Fri Mar 21 20:38:02 2014
@@ -551,20 +551,44 @@ public class TestHierarchicalConfigurati
}
/**
- * Tests whether sub configurations for the children of a given node can be
- * queried.
+ * Tests access to sub configurations as children of a defined node.
+ *
+ * @param withUpdates the updates flag
+ * @param expectedName the expected table name when reading a property
*/
- @Test
- public void testChildConfigurationsAt()
+ private void checkChildConfigurationsAtWithUpdates(boolean withUpdates,
+ String expectedName)
{
+ String key = "tables.table(0)";
List<HierarchicalConfiguration<ImmutableNode>> children =
- config.childConfigurationsAt("tables.table(0)");
+ withUpdates ? config.childConfigurationsAt(key, true) : config
+ .childConfigurationsAt(key);
assertEquals("Wrong number of elements", 2, children.size());
HierarchicalConfiguration<ImmutableNode> sub = children.get(0);
- String newTabName = "otherTabe";
- sub.setProperty(null, newTabName);
- assertEquals("Table name changed in parent", NodeStructureHelper.table(0),
- config.getString("tables.table(0).name"));
+ sub.setProperty(null, NEW_NAME);
+ assertEquals("Wrong value in parent", expectedName,
+ config.getString(key + ".name"));
+ }
+
+ /**
+ * Tests whether sub configurations for the children of a given node can be
+ * queried if no updates are propagated.
+ */
+ @Test
+ public void testChildConfigurationsAtNoUpdates()
+ {
+ checkChildConfigurationsAtWithUpdates(false,
+ NodeStructureHelper.table(0));
+ }
+
+ /**
+ * Tests whether sub configurations for the children of a given node can be
+ * queried that support updates.
+ */
+ @Test
+ public void testChildConfigurationsAtWithUpdates()
+ {
+ checkChildConfigurationsAtWithUpdates(true, NEW_NAME);
}
/**