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/03/22 19:50:17 UTC

svn commit: r640051 - in /commons/proper/configuration/branches/configuration2_experimental/src: main/java/org/apache/commons/configuration2/ test/java/org/apache/commons/configuration2/

Author: oheger
Date: Sat Mar 22 11:50:16 2008
New Revision: 640051

URL: http://svn.apache.org/viewvc?rev=640051&view=rev
Log:
File-based hierarchical configurations are now derived from AbstractHierarchicalConfiguration

Modified:
    commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/CombinedConfiguration.java
    commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java
    commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestDefaultConfigurationBuilder.java

Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/CombinedConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/CombinedConfiguration.java?rev=640051&r1=640050&r2=640051&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/CombinedConfiguration.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/CombinedConfiguration.java Sat Mar 22 11:50:16 2008
@@ -786,12 +786,26 @@
                 }
             }
 
+            // Determine root node
+            // TODO This is a workaround as long as there are hierarchical
+            // configurations not derived from AbstractHierarchicalConfiguration.
+            // Remove if refactoring is complete!
+            ConfigurationNode root;
+            if (getConfiguration() instanceof InMemoryConfiguration)
+            {
+                root = ((InMemoryConfiguration) getConfiguration()).getRootNode();
+            }
+            else
+            {
+                HierarchicalConfiguration hc = ConfigurationUtils
+                .convertToHierarchical(getConfiguration());
+                root = hc.getRootNode();
+            }
+            
             // Copy data of the root node to the new path
-            HierarchicalConfiguration hc = ConfigurationUtils
-                    .convertToHierarchical(getConfiguration());
-            atParent.appendChildren(hc.getRootNode());
-            atParent.appendAttributes(hc.getRootNode());
-            rootNode = hc.getRootNode();
+            atParent.appendChildren(root);
+            atParent.appendAttributes(root);
+            rootNode = root;
 
             return result;
         }

Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java?rev=640051&r1=640050&r2=640051&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java Sat Mar 22 11:50:16 2008
@@ -32,6 +32,7 @@
 import org.apache.commons.configuration2.beanutils.BeanHelper;
 import org.apache.commons.configuration2.beanutils.DefaultBeanFactory;
 import org.apache.commons.configuration2.beanutils.XMLBeanDeclaration;
+import org.apache.commons.configuration2.expr.NodeList;
 import org.apache.commons.configuration2.tree.ConfigurationNode;
 import org.apache.commons.configuration2.tree.DefaultExpressionEngine;
 import org.apache.commons.configuration2.tree.OverrideCombiner;
@@ -500,11 +501,11 @@
         CombinedConfiguration result = createResultConfiguration();
         constructedConfiguration = result;
 
-        List<SubnodeConfiguration> overrides = fetchTopLevelOverrideConfigs();
+        List<SubConfiguration<ConfigurationNode>> overrides = fetchTopLevelOverrideConfigs();
         overrides.addAll(fetchChildConfigs(KEY_OVERRIDE));
         initCombinedConfiguration(result, overrides, KEY_OVERRIDE_LIST);
 
-        List<SubnodeConfiguration> additionals = fetchChildConfigs(KEY_UNION);
+        List<SubConfiguration<ConfigurationNode>> additionals = fetchChildConfigs(KEY_UNION);
         if (!additionals.isEmpty())
         {
             CombinedConfiguration addConfig = new CombinedConfiguration(new UnionCombiner());
@@ -548,27 +549,30 @@
      * section (if it exists).
      *
      * @param config the configuration to be initialized
-     * @param containedConfigs the list with the declaratinos of the contained
+     * @param containedConfigs the list with the declarations of the contained
      * configurations
      * @param keyListNodes a list with the declaration of list nodes
      * @throws ConfigurationException if an error occurs
      */
-    protected void initCombinedConfiguration(CombinedConfiguration config,
-            List<? extends HierarchicalConfiguration> containedConfigs, String keyListNodes) throws ConfigurationException
+    protected void initCombinedConfiguration(
+            CombinedConfiguration config,
+            List<? extends AbstractHierarchicalConfiguration<ConfigurationNode>> containedConfigs,
+            String keyListNodes) throws ConfigurationException
     {
-        List listNodes = getList(keyListNodes);
-        for (Iterator it = listNodes.iterator(); it.hasNext();)
+        List<?> listNodes = getList(keyListNodes);
+        for (Iterator<?> it = listNodes.iterator(); it.hasNext();)
         {
             config.getNodeCombiner().addListNode((String) it.next());
         }
 
-        for (HierarchicalConfiguration conf : containedConfigs)
+        for (AbstractHierarchicalConfiguration<ConfigurationNode> conf : containedConfigs)
         {
             ConfigurationDeclaration decl = new ConfigurationDeclaration(this, conf);
             AbstractConfiguration newConf = createConfigurationAt(decl);
             if (newConf != null)
             {
-                config.addConfiguration(newConf, decl.getConfiguration().getString(ATTR_NAME), decl.getAt());
+                config.addConfiguration(newConf, decl.getConfiguration()
+                        .getString(ATTR_NAME), decl.getAt());
             }
         }
     }
@@ -629,16 +633,17 @@
     }
 
     /**
-     * Returns a list with <code>SubnodeConfiguration</code> objects for the
+     * Returns a list with <code>SubConfiguration</code> objects for the
      * child nodes of the specified configuration node.
      *
      * @param node the start node
      * @return a list with subnode configurations for the node's children
      */
-    private List<SubnodeConfiguration> fetchChildConfigs(ConfigurationNode node)
+    private List<SubConfiguration<ConfigurationNode>> fetchChildConfigs(ConfigurationNode node)
     {
         List<ConfigurationNode> children = node.getChildren();
-        List<SubnodeConfiguration> result = new ArrayList<SubnodeConfiguration>(children.size());
+        List<SubConfiguration<ConfigurationNode>> result = 
+            new ArrayList<SubConfiguration<ConfigurationNode>>(children.size());
         for (ConfigurationNode child : children)
         {
             result.add(createSubnodeConfiguration(child));
@@ -647,18 +652,18 @@
     }
 
     /**
-     * Returns a list with <code>SubnodeConfiguration</code> objects for the
+     * Returns a list with <code>SubConfiguration</code> objects for the
      * child nodes of the node specified by the given key.
      *
      * @param key the key (must define exactly one node)
      * @return a list with subnode configurations for the node's children
      */
-    private List<SubnodeConfiguration> fetchChildConfigs(String key)
+    private List<SubConfiguration<ConfigurationNode>> fetchChildConfigs(String key)
     {
-        List<ConfigurationNode> nodes = fetchNodeList(key);
-        if (!nodes.isEmpty())
+        NodeList<ConfigurationNode> nodes = fetchNodeList(key);
+        if (nodes.size() > 0)
         {
-            return fetchChildConfigs(nodes.get(0));
+            return fetchChildConfigs(nodes.getNode(0));
         }
         else
         {
@@ -673,16 +678,16 @@
      * configuration sections. The remaining nodes are treated as definitions
      * for override configurations.
      *
-     * @return a list with subnode configurations for the top level override
+     * @return a list with sub configurations for the top level override
      * configurations
      */
-    private List<SubnodeConfiguration> fetchTopLevelOverrideConfigs()
+    private List<SubConfiguration<ConfigurationNode>> fetchTopLevelOverrideConfigs()
     {
-        List<SubnodeConfiguration> configs = fetchChildConfigs(getRootNode());
-        Iterator<SubnodeConfiguration> it = configs.iterator();
+        List<SubConfiguration<ConfigurationNode>> configs = fetchChildConfigs(getRootNode());
+        Iterator<SubConfiguration<ConfigurationNode>> it = configs.iterator();
         while (it.hasNext())
         {
-            String nodeName = (it.next()).getRootNode().getName();
+            String nodeName = it.next().getRootNode().getName();
             for (int i = 0; i < CONFIG_SECTIONS.length; i++)
             {
                 if (CONFIG_SECTIONS[i].equals(nodeName))
@@ -906,7 +911,7 @@
      * factory is never needed.
      * </p>
      */
-    public static class ConfigurationDeclaration extends XMLBeanDeclaration
+    public static class ConfigurationDeclaration extends XMLBeanDeclaration<ConfigurationNode>
     {
         /** Stores a reference to the associated configuration builder. */
         private DefaultConfigurationBuilder configurationBuilder;
@@ -919,7 +924,7 @@
          * @param config the configuration this declaration is based onto
          */
         public ConfigurationDeclaration(DefaultConfigurationBuilder builder,
-                HierarchicalConfiguration config)
+                AbstractHierarchicalConfiguration<ConfigurationNode> config)
         {
             super(config);
             configurationBuilder = builder;
@@ -1006,24 +1011,23 @@
         }
 
         /**
-         * Checks whether the given node is reserved. This method will take
-         * further reserved attributes into account
-         *
-         * @param nd the node
-         * @return a flag whether this node is reserved
+         * Checks whether the given attribute is reserved. This method will take
+         * further reserved attributes into account.
+         * @param parent the parent node
+         * @param name the name of the affected attribute
          */
-        protected boolean isReservedNode(ConfigurationNode nd)
+        @Override
+        protected boolean isReservedAttribute(ConfigurationNode parent, String name)
         {
-            if (super.isReservedNode(nd))
+            if (super.isReservedAttribute(parent, name))
             {
                 return true;
             }
 
-            return nd.isAttribute()
-                    && ((ATTR_ATNAME.equals(nd.getName()) && nd.getParentNode()
-                            .getAttributeCount(RESERVED_PREFIX + ATTR_ATNAME) == 0) || (ATTR_OPTIONALNAME
-                            .equals(nd.getName()) && nd.getParentNode()
-                            .getAttributeCount(RESERVED_PREFIX + ATTR_OPTIONALNAME) == 0));
+            return ((ATTR_ATNAME.equals(name) && getNodeHandler()
+                    .getAttributeValue(parent, RESERVED_PREFIX + ATTR_ATNAME) == null) || (ATTR_OPTIONALNAME
+                    .equals(name) && getNodeHandler().getAttributeValue(parent,
+                    RESERVED_PREFIX + ATTR_OPTIONALNAME) == null));
         }
 
         /**

Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestDefaultConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestDefaultConfigurationBuilder.java?rev=640051&r1=640050&r2=640051&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestDefaultConfigurationBuilder.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestDefaultConfigurationBuilder.java Sat Mar 22 11:50:16 2008
@@ -59,8 +59,9 @@
     private static final String OPTIONAL_NAME = "optionalConfig";
 
     /** Stores the object to be tested. */
-    DefaultConfigurationBuilder factory;
+    private DefaultConfigurationBuilder factory;
 
+    @Override
     protected void setUp() throws Exception
     {
         super.setUp();
@@ -83,20 +84,19 @@
         DefaultConfigurationNode parent = new DefaultConfigurationNode();
         DefaultConfigurationNode nd = new DefaultConfigurationNode("at");
         parent.addAttribute(nd);
-        assertTrue("Attribute at not recognized", decl.isReservedNode(nd));
+        assertTrue("Attribute at not recognized", decl.isReservedAttribute(parent, nd.getName()));
         nd = new DefaultConfigurationNode("optional");
         parent.addAttribute(nd);
-        assertTrue("Attribute optional not recognized", decl.isReservedNode(nd));
+        assertTrue("Attribute optional not recognized", decl.isReservedAttribute(parent, nd.getName()));
         nd = new DefaultConfigurationNode("config-class");
         parent.addAttribute(nd);
         assertTrue("Inherited attribute not recognized", decl
-                .isReservedNode(nd));
+                .isReservedAttribute(parent, nd.getName()));
         nd = new DefaultConfigurationNode("different");
         parent.addAttribute(nd);
-        assertFalse("Wrong reserved attribute", decl.isReservedNode(nd));
+        assertFalse("Wrong reserved attribute", decl.isReservedAttribute(parent, nd.getName()));
         nd = new DefaultConfigurationNode("at");
         parent.addChild(nd);
-        assertFalse("Node type not evaluated", decl.isReservedNode(nd));
     }
 
     /**
@@ -130,16 +130,16 @@
                 factory, factory);
         DefaultConfigurationNode parent = new DefaultConfigurationNode();
         DefaultConfigurationNode nd = new DefaultConfigurationNode("config-"
-                + name);
+                + name, "test");
         parent.addAttribute(nd);
         assertTrue("config-" + name + " attribute not recognized", decl
-                .isReservedNode(nd));
-        DefaultConfigurationNode nd2 = new DefaultConfigurationNode(name);
+                .isReservedAttribute(parent, nd.getName()));
+        DefaultConfigurationNode nd2 = new DefaultConfigurationNode(name, "test");
         parent.addAttribute(nd2);
         assertFalse(name + " is reserved though config- exists", decl
-                .isReservedNode(nd2));
+                .isReservedAttribute(parent, nd2.getName()));
         assertTrue("config- attribute not recognized when " + name + " exists",
-                decl.isReservedNode(nd));
+                decl.isReservedAttribute(parent, nd.getName()));
     }
 
     /**