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/04/19 19:58:46 UTC

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

Author: oheger
Date: Sat Apr 19 17:58:45 2014
New Revision: 1588679

URL: http://svn.apache.org/r1588679
Log:
Reworked ConfigurationDeclaration.

The class was adapted to the changes of its base class XMLBeanDeclaration.

Modified:
    commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/builder/combined/ConfigurationDeclaration.java
    commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/builder/combined/TestConfigurationDeclaration.java

Modified: commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/builder/combined/ConfigurationDeclaration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/builder/combined/ConfigurationDeclaration.java?rev=1588679&r1=1588678&r2=1588679&view=diff
==============================================================================
--- commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/builder/combined/ConfigurationDeclaration.java (original)
+++ commons/proper/configuration/branches/immutableNodes/src/main/java/org/apache/commons/configuration/builder/combined/ConfigurationDeclaration.java Sat Apr 19 17:58:45 2014
@@ -16,9 +16,10 @@
  */
 package org.apache.commons.configuration.builder.combined;
 
+import java.util.Set;
+
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.beanutils.XMLBeanDeclaration;
-import org.apache.commons.configuration.tree.ConfigurationNode;
 
 /**
  * <p>
@@ -50,7 +51,7 @@ public class ConfigurationDeclaration ex
      * @param config the configuration this declaration is based onto
      */
     public ConfigurationDeclaration(CombinedConfigurationBuilder builder,
-            HierarchicalConfiguration config)
+            HierarchicalConfiguration<?> config)
     {
         super(config);
         configurationBuilder = builder;
@@ -168,43 +169,28 @@ public class ConfigurationDeclaration ex
     }
 
     /**
-     * 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
+     * {@inheritDoc} This implementation checks for additional reserved
+     * attribute names. Note that in some cases the presence of other attribute
+     * names determine whether a name is reserved or not. For instance, per
+     * default the attribute {@code config-at} is reserved. However, if this
+     * attribute is not present, the attribute {@code at} is also considered as
+     * a reserved attribute. (This is mainly done for dealing with legacy
+     * configuration files supported by earlier versions of this library.)
      */
     @Override
-    protected boolean isReservedNode(ConfigurationNode nd)
+    protected boolean isReservedAttributeName(String name)
     {
-        if (super.isReservedNode(nd))
+        if (super.isReservedAttributeName(name))
         {
             return true;
         }
 
-        return nd.isAttribute()
-                && ((CombinedConfigurationBuilder.ATTR_ATNAME.equals(nd
-                        .getName()) && nd.getParentNode().getAttributeCount(
-                        RESERVED_PREFIX
-                                + CombinedConfigurationBuilder.ATTR_ATNAME) == 0) || (CombinedConfigurationBuilder.ATTR_OPTIONALNAME
-                        .equals(nd.getName()) && nd
-                        .getParentNode()
-                        .getAttributeCount(
-                                RESERVED_PREFIX
-                                        + CombinedConfigurationBuilder.ATTR_OPTIONALNAME) == 0));
-    }
-
-//    /**
-//     * Performs interpolation. This implementation will delegate interpolation
-//     * to the configuration builder, which takes care that the currently
-//     * constructed configuration is taken into account, too.
-//     *
-//     * @param value the value to be interpolated
-//     * @return the interpolated value
-//     */
-//    @Override
-//    protected Object interpolate(Object value)
-//    {
-//        return getConfigurationBuilder().interpolate(value);
-//    }
+        Set<String> attributes = getAttributeNames();
+        return (CombinedConfigurationBuilder.ATTR_ATNAME.equals(name) && !attributes
+                .contains(RESERVED_PREFIX
+                        + CombinedConfigurationBuilder.ATTR_ATNAME))
+                || (CombinedConfigurationBuilder.ATTR_OPTIONALNAME.equals(name) && !attributes
+                        .contains(RESERVED_PREFIX
+                                + CombinedConfigurationBuilder.ATTR_OPTIONALNAME));
+    }
 }

Modified: commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/builder/combined/TestConfigurationDeclaration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/builder/combined/TestConfigurationDeclaration.java?rev=1588679&r1=1588678&r2=1588679&view=diff
==============================================================================
--- commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/builder/combined/TestConfigurationDeclaration.java (original)
+++ commons/proper/configuration/branches/immutableNodes/src/test/java/org/apache/commons/configuration/builder/combined/TestConfigurationDeclaration.java Sat Apr 19 17:58:45 2014
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertTru
 import org.apache.commons.configuration.BaseHierarchicalConfiguration;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.configuration.ex.ConfigurationRuntimeException;
-import org.apache.commons.configuration.tree.DefaultConfigurationNode;
 import org.junit.Test;
 
 /**
@@ -42,9 +41,9 @@ public class TestConfigurationDeclaratio
      * @return the test object
      */
     private static ConfigurationDeclaration createDeclaration(
-            HierarchicalConfiguration conf)
+            HierarchicalConfiguration<?> conf)
     {
-        HierarchicalConfiguration config =
+        HierarchicalConfiguration<?> config =
                 (conf != null) ? conf : new BaseHierarchicalConfiguration();
         return new ConfigurationDeclaration(null, config);
     }
@@ -56,23 +55,11 @@ public class TestConfigurationDeclaratio
     public void testConfigurationDeclarationIsReserved()
     {
         ConfigurationDeclaration decl = createDeclaration(null);
-        DefaultConfigurationNode parent = new DefaultConfigurationNode();
-        DefaultConfigurationNode nd = new DefaultConfigurationNode("at");
-        parent.addAttribute(nd);
-        assertTrue("Attribute at not recognized", decl.isReservedNode(nd));
-        nd = new DefaultConfigurationNode("optional");
-        parent.addAttribute(nd);
-        assertTrue("Attribute optional not recognized", decl.isReservedNode(nd));
-        nd = new DefaultConfigurationNode("config-class");
-        parent.addAttribute(nd);
+        assertTrue("Attribute at not recognized", decl.isReservedAttributeName("at"));
+        assertTrue("Attribute optional not recognized", decl.isReservedAttributeName("optional"));
         assertTrue("Inherited attribute not recognized",
-                decl.isReservedNode(nd));
-        nd = new DefaultConfigurationNode("different");
-        parent.addAttribute(nd);
-        assertFalse("Wrong reserved attribute", decl.isReservedNode(nd));
-        nd = new DefaultConfigurationNode("at");
-        parent.addChild(nd);
-        assertFalse("Node type not evaluated", decl.isReservedNode(nd));
+                decl.isReservedAttributeName("config-class"));
+        assertFalse("Wrong reserved attribute", decl.isReservedAttributeName("different"));
     }
 
     /**
@@ -104,19 +91,17 @@ public class TestConfigurationDeclaratio
      */
     private void checkOldReservedAttribute(String name)
     {
-        ConfigurationDeclaration decl = createDeclaration(null);
-        DefaultConfigurationNode parent = new DefaultConfigurationNode();
-        DefaultConfigurationNode nd =
-                new DefaultConfigurationNode("config-" + name);
-        parent.addAttribute(nd);
-        assertTrue("config-" + name + " attribute not recognized",
-                decl.isReservedNode(nd));
-        DefaultConfigurationNode nd2 = new DefaultConfigurationNode(name);
-        parent.addAttribute(nd2);
+        String prefixName = "config-" + name;
+        BaseHierarchicalConfiguration config = new BaseHierarchicalConfiguration();
+        config.addProperty(String.format("[@%s]", prefixName), Boolean.TRUE);
+        ConfigurationDeclaration decl = createDeclaration(config);
+        assertTrue(prefixName + " attribute not recognized",
+                decl.isReservedAttributeName(prefixName));
+        config.addProperty(String.format("[@%s]", name), Boolean.TRUE);
         assertFalse(name + " is reserved though config- exists",
-                decl.isReservedNode(nd2));
+                decl.isReservedAttributeName(name));
         assertTrue("config- attribute not recognized when " + name + " exists",
-                decl.isReservedNode(nd));
+                decl.isReservedAttributeName(prefixName));
     }
 
     /**
@@ -126,26 +111,32 @@ public class TestConfigurationDeclaratio
     @Test
     public void testConfigurationDeclarationGetAttributes()
     {
-        HierarchicalConfiguration config = new BaseHierarchicalConfiguration();
+        HierarchicalConfiguration<?> config = new BaseHierarchicalConfiguration();
         config.addProperty("xml.fileName", "test.xml");
         ConfigurationDeclaration decl =
                 createDeclaration(config.configurationAt("xml"));
         assertNull("Found an at attribute", decl.getAt());
         assertFalse("Found an optional attribute", decl.isOptional());
         config.addProperty("xml[@config-at]", "test1");
+        decl = createDeclaration(config.configurationAt("xml"));
         assertEquals("Wrong value of at attribute", "test1", decl.getAt());
         config.addProperty("xml[@at]", "test2");
+        decl = createDeclaration(config.configurationAt("xml"));
         assertEquals("Wrong value of config-at attribute", "test1",
                 decl.getAt());
         config.clearProperty("xml[@config-at]");
+        decl = createDeclaration(config.configurationAt("xml"));
         assertEquals("Old at attribute not detected", "test2", decl.getAt());
         config.addProperty("xml[@config-optional]", "true");
+        decl = createDeclaration(config.configurationAt("xml"));
         assertTrue("Wrong value of optional attribute", decl.isOptional());
         config.addProperty("xml[@optional]", "false");
+        decl = createDeclaration(config.configurationAt("xml"));
         assertTrue("Wrong value of config-optional attribute",
                 decl.isOptional());
         config.clearProperty("xml[@config-optional]");
         config.setProperty("xml[@optional]", Boolean.TRUE);
+        decl = createDeclaration(config.configurationAt("xml"));
         assertTrue("Old optional attribute not detected", decl.isOptional());
     }
 
@@ -155,11 +146,11 @@ public class TestConfigurationDeclaratio
     @Test(expected = ConfigurationRuntimeException.class)
     public void testConfigurationDeclarationOptionalAttributeInvalid()
     {
-        HierarchicalConfiguration factory = new BaseHierarchicalConfiguration();
+        HierarchicalConfiguration<?> factory = new BaseHierarchicalConfiguration();
         factory.addProperty("xml.fileName", "test.xml");
+        factory.setProperty("xml[@optional]", "invalid value");
         ConfigurationDeclaration decl =
                 createDeclaration(factory.configurationAt("xml"));
-        factory.setProperty("xml[@optional]", "invalid value");
         decl.isOptional();
     }
 }