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/23 21:32:16 UTC

svn commit: r1580596 - in /commons/proper/configuration/branches/immutableNodes/src: main/java/org/apache/commons/configuration/ test/java/org/apache/commons/configuration/

Author: oheger
Date: Sun Mar 23 20:32:16 2014
New Revision: 1580596

URL: http://svn.apache.org/r1580596
Log:
Some cleanup of methods related to sub configurations.

Removed unused methods. Made a method protected which is needed by sub classes.

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/TestBaseHierarchicalConfigurationSynchronization.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=1580596&r1=1580595&r2=1580596&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 Sun Mar 23 20:32:16 2014
@@ -226,11 +226,8 @@ public class BaseHierarchicalConfigurati
     public HierarchicalConfiguration<ImmutableNode> configurationAt(String key,
             boolean supportUpdates)
     {
-        BaseHierarchicalConfiguration sub =
-                supportUpdates ? createConnectedSubConfiguration(key)
-                        : createIndependentSubConfiguration(key);
-        initSubConfiguration(sub);
-        return sub;
+        return supportUpdates ? createConnectedSubConfiguration(key)
+                : createIndependentSubConfiguration(key);
     }
 
     /**
@@ -264,6 +261,40 @@ public class BaseHierarchicalConfigurati
     }
 
     /**
+     * Creates a connected sub configuration based on a selector for a tracked
+     * node.
+     *
+     * @param selector the {@code NodeSelector}
+     * @param parentModel the parent node model
+     * @return the newly created sub configuration
+     * @since 2.0
+     */
+    protected SubnodeConfiguration createSubConfigurationForTrackedNode(
+            NodeSelector selector, InMemoryNodeModel parentModel)
+    {
+        SubnodeConfiguration subConfig =
+                new SubnodeConfiguration(this, new TrackedNodeModel(
+                        parentModel, selector, true));
+        initSubConfigurationForThisParent(subConfig);
+        return subConfig;
+    }
+
+    /**
+     * Initializes a {@code SubnodeConfiguration} object. This method should be
+     * called for each sub configuration created for this configuration. It
+     * ensures that the sub configuration is correctly connected to its parent
+     * instance and that update events are correctly propagated.
+     *
+     * @param subConfig the sub configuration to be initialized
+     * @since 2.0
+     */
+    protected void initSubConfigurationForThisParent(SubnodeConfiguration subConfig)
+    {
+        initSubConfiguration(subConfig);
+        subConfig.addConfigurationListener(changeListener);
+    }
+
+    /**
      * Creates a sub configuration from the specified key which is connected to
      * this configuration. This implementation creates a
      * {@link SubnodeConfiguration} with a tracked node identified by the passed
@@ -282,24 +313,6 @@ public class BaseHierarchicalConfigurati
     }
 
     /**
-     * Creates a connected sub configuration based on a selector for a tracked
-     * node.
-     *
-     * @param selector the {@code NodeSelector}
-     * @param parentModel the parent node model
-     * @return the newly created sub configuration
-     */
-    private SubnodeConfiguration createSubConfigurationForTrackedNode(
-            NodeSelector selector, InMemoryNodeModel parentModel)
-    {
-        SubnodeConfiguration subConfig =
-                new SubnodeConfiguration(this, new TrackedNodeModel(
-                        parentModel, selector, true));
-        subConfig.addConfigurationListener(changeListener);
-        return subConfig;
-    }
-
-    /**
      * Creates a list of connected sub configurations based on a passed in list
      * of node selectors.
      *
@@ -338,8 +351,11 @@ public class BaseHierarchicalConfigurati
             throw new ConfigurationRuntimeException(
                     "Passed in key must select exactly one node: " + key);
         }
-        return new BaseHierarchicalConfiguration(new InMemoryNodeModel(
-                targetNodes.get(0)));
+        BaseHierarchicalConfiguration sub =
+                new BaseHierarchicalConfiguration(new InMemoryNodeModel(
+                        targetNodes.get(0)));
+        initSubConfiguration(sub);
+        return sub;
     }
 
     /**
@@ -515,25 +531,6 @@ public class BaseHierarchicalConfigurati
     }
 
     /**
-     * Creates a new {@code SubnodeConfiguration} for the specified node and
-     * sets its construction key. If the key is not <b>null</b>, a
-     * {@code SubnodeConfiguration} created this way will be aware of structural
-     * changes of its parent.
-     *
-     * @param node the node, for which a {@code SubnodeConfiguration} is to be
-     *        created
-     * @param subnodeKey the key used to construct the configuration
-     * @return the configuration for the given node
-     * @since 1.5
-     */
-    protected SubnodeConfiguration createSubnodeConfiguration(
-            ConfigurationNode node, String subnodeKey)
-    {
-        //TODO implementation
-        return null; //new SubnodeConfiguration(this, node, subnodeKey);
-    }
-
-    /**
      * This method is always called when a subnode configuration created from
      * this configuration has been modified. This implementation transforms the
      * received event into an event of type {@code EVENT_SUBNODE_CHANGED}
@@ -548,28 +545,6 @@ public class BaseHierarchicalConfigurati
     }
 
     /**
-     * Creates a new {@code SubnodeConfiguration} instance from this
-     * configuration and initializes it. This method also takes care that data
-     * structures are created to manage all {@code SubnodeConfiguration}
-     * instances with support for updates. They are stored, so that they can be
-     * triggered when this configuration is changed. <strong>Important
-     * note:</strong> This method expects that a write lock is held on this
-     * configuration!
-     *
-     * @param node the root node of the new {@code SubnodeConfiguration}
-     * @param key the key to this node
-     * @param supportUpdates a flag whether updates are supported
-     * @return the newly created and initialized {@code SubnodeConfiguration}
-     * @since 2.0
-     */
-    protected final SubnodeConfiguration createAndInitializeSubnodeConfiguration(
-            ConfigurationNode node, String key, boolean supportUpdates)
-    {
-        //TODO adapt clients
-        return null;
-    }
-
-    /**
      * Initializes properties of a sub configuration. A sub configuration
      * inherits some settings from its parent, e.g. the expression engine or the
      * synchronizer. The corresponding values are copied by this method.

Modified: commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestBaseHierarchicalConfigurationSynchronization.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestBaseHierarchicalConfigurationSynchronization.java?rev=1580596&r1=1580595&r2=1580596&view=diff
==============================================================================
--- commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestBaseHierarchicalConfigurationSynchronization.java (original)
+++ commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/TestBaseHierarchicalConfigurationSynchronization.java Sun Mar 23 20:32:16 2014
@@ -38,7 +38,6 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.builder.fluent.Parameters;
 import org.apache.commons.configuration.ex.ConfigurationException;
 import org.apache.commons.configuration.io.FileHandler;
-import org.apache.commons.configuration.tree.ConfigurationNode;
 import org.apache.commons.configuration.tree.DefaultConfigurationNode;
 import org.junit.Before;
 import org.junit.Test;
@@ -268,22 +267,6 @@ public class TestBaseHierarchicalConfigu
                 {
                     private static final long serialVersionUID = 1L;
 
-                    @Override
-                    protected SubnodeConfiguration createSubnodeConfiguration(
-                            ConfigurationNode node, String subnodeKey)
-                    {
-                        return new SubnodeConfiguration(this, node)
-                        {
-                            private static final long serialVersionUID = 1L;
-
-                            @Override
-                            void validateRootNode()
-                            {
-                                super.validateRootNode();
-                                validatedConfigs.add(this);
-                            }
-                        };
-                    }
                 };
 
         SubnodeConfiguration sub =

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=1580596&r1=1580595&r2=1580596&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 Sun Mar 23 20:32:16 2014
@@ -416,6 +416,25 @@ public class TestHierarchicalConfigurati
     }
 
     /**
+     * Tests whether a connected configuration is correctly initialized with
+     * properties of its parent.
+     */
+    @Test
+    public void testConfigurationAtWithUpdateInitialized()
+    {
+        String key = "tables.table";
+        config.setListDelimiterHandler(new DefaultListDelimiterHandler(';'));
+        config.setThrowExceptionOnMissing(true);
+        List<HierarchicalConfiguration<ImmutableNode>> subs =
+                config.configurationsAt(key, true);
+        BaseHierarchicalConfiguration sub =
+                (BaseHierarchicalConfiguration) subs.get(0);
+        assertEquals("Wrong delimiter handler",
+                config.getListDelimiterHandler(), sub.getListDelimiterHandler());
+        assertTrue("Wrong exception flag", sub.isThrowExceptionOnMissing());
+    }
+
+    /**
      * Tests whether a list of immutable sub configurations can be queried.
      */
     @Test