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);
     }
 
     /**