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/26 12:07:50 UTC

svn commit: r641255 - in /commons/proper/configuration/branches/configuration2_experimental/src: main/java/org/apache/commons/configuration2/combined/UnionCombiner.java test/java/org/apache/commons/configuration2/combined/TestUnionCombiner.java

Author: oheger
Date: Wed Mar 26 04:07:42 2008
New Revision: 641255

URL: http://svn.apache.org/viewvc?rev=641255&view=rev
Log:
New UnionCombiner implementation based on node handlers

Added:
    commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/UnionCombiner.java
      - copied, changed from r636104, commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/UnionCombiner.java
    commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/combined/TestUnionCombiner.java
      - copied, changed from r636104, commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/tree/TestUnionCombiner.java

Copied: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/UnionCombiner.java (from r636104, commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/UnionCombiner.java)
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/UnionCombiner.java?p2=commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/UnionCombiner.java&p1=commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/UnionCombiner.java&r1=636104&r2=641255&rev=641255&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/tree/UnionCombiner.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/UnionCombiner.java Wed Mar 26 04:07:42 2008
@@ -14,11 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.configuration2.tree;
+package org.apache.commons.configuration2.combined;
 
 import java.util.LinkedList;
 import java.util.List;
 
+import org.apache.commons.configuration2.expr.NodeHandler;
+
 /**
  * <p>
  * A specialized implementation of the <code>NodeCombiner</code> interface
@@ -113,7 +115,7 @@
  * href="http://commons.apache.org/configuration/team-list.html">Commons
  * Configuration team</a>
  * @version $Id$
- * @since 1.3
+ * @since 2.0
  */
 public class UnionCombiner extends NodeCombiner
 {
@@ -121,36 +123,39 @@
      * Combines the given nodes to a new union node.
      *
      * @param node1 the first source node
+     * @param handler1 the handler for the first source node
      * @param node2 the second source node
+     * @param handler2 the handler for the second source node
      * @return the union node
      */
-    public ConfigurationNode combine(ConfigurationNode node1, ConfigurationNode node2)
+    public <T, U> CombinedNode combine(T node1, NodeHandler<T> handler1, U node2, NodeHandler<U> handler2)
     {
-        ViewNode result = createViewNode();
-        result.setName(node1.getName());
-        result.appendAttributes(node1);
-        result.appendAttributes(node2);
+        CombinedNode result = createViewNode();
+        result.setName(handler1.nodeName(node1));
+        appendAttributes(result, node1, handler1);
+        appendAttributes(result, node2, handler2);
 
         // Check if nodes can be combined
-        List<ConfigurationNode> children2 = new LinkedList<ConfigurationNode>(node2.getChildren());
-        for (ConfigurationNode child1 : node1.getChildren())
+        List<U> children2 = new LinkedList<U>(handler2.getChildren(node2));
+        for (T child1 : handler1.getChildren(node1))
         {
-            ConfigurationNode child2 = findCombineNode(node1, node2, child1, children2);
+            String childName = handler1.nodeName(child1);
+            U child2 = findCombineNode(node1, handler1, node2, handler2, child1, children2);
             if (child2 != null)
             {
-                result.addChild(combine(child1, child2));
+                result.addChild(childName, combine(child1, handler1, child2, handler2));
                 children2.remove(child2);
             }
             else
             {
-                result.addChild(child1);
+                result.addChild(childName, child1);
             }
         }
 
         // Add remaining children of node 2
-        for (ConfigurationNode child : children2)
+        for (U child : children2)
         {
-            result.addChild(child);
+            result.addChild(handler2.nodeName(child), child);
         }
 
         return result;
@@ -158,11 +163,11 @@
 
     /**
      * <p>
-     * Tries to find a child node of the second source node, with whitch a child
+     * Tries to find a child node of the second source node, with which a child
      * of the first source node can be combined. During combining of the source
      * nodes an iteration over the first source node's children is performed.
      * For each child node it is checked whether a corresponding child node in
-     * the second source node exists. If this is the case, these corresponsing
+     * the second source node exists. If this is the case, these corresponding
      * child nodes are recursively combined and the result is added to the
      * combined node. This method implements the checks whether such a recursive
      * combination is possible. The actual implementation tests the following
@@ -178,25 +183,28 @@
      * </ul>
      * </p>
      * <p>
-     * If all of these tests are successfull, the matching child node of the
+     * If all of these tests are successful, the matching child node of the
      * second source node is returned. Otherwise the result is <b>null</b>.
      * </p>
      *
      * @param node1 the first source node
+     * @param handler1 the node handler for the first source node
      * @param node2 the second source node
+     * @param handler2 the node handler for the second source node
      * @param child the child node of the first source node to be checked
      * @param children a list with all children of the second source node
      * @return the matching child node of the second source node or <b>null</b>
      * if there is none
      */
-    protected ConfigurationNode findCombineNode(ConfigurationNode node1, ConfigurationNode node2, ConfigurationNode child, List children)
+    protected <T, U> U findCombineNode(T node1, NodeHandler<T> handler1, U node2, NodeHandler<U> handler2, T child, List<U> children)
     {
-        if (child.getValue() == null && !isListNode(child)
-                && node1.getChildrenCount(child.getName()) == 1
-                && node2.getChildrenCount(child.getName()) == 1)
+        String childName = handler1.nodeName(child);
+        if (handler1.getValue(child) == null && !isListNode(child, handler1)
+                && handler1.getChildrenCount(node1, childName) == 1
+                && handler2.getChildrenCount(node2, childName)== 1)
         {
-            ConfigurationNode child2 = node2.getChildren(child.getName()).iterator().next();
-            if (child2.getValue() == null)
+            U child2 = handler2.getChildren(node2, childName).get(0);
+            if (handler2.getValue(child2) == null)
             {
                 return child2;
             }

Copied: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/combined/TestUnionCombiner.java (from r636104, commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/tree/TestUnionCombiner.java)
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/combined/TestUnionCombiner.java?p2=commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/combined/TestUnionCombiner.java&p1=commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/tree/TestUnionCombiner.java&r1=636104&r2=641255&rev=641255&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/tree/TestUnionCombiner.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/combined/TestUnionCombiner.java Wed Mar 26 04:07:42 2008
@@ -14,12 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.commons.configuration2.tree;
+package org.apache.commons.configuration2.combined;
 
 import org.apache.commons.configuration2.ConfigurationException;
-import org.apache.commons.configuration2.HierarchicalConfiguration;
-import org.apache.commons.configuration2.tree.NodeCombiner;
-import org.apache.commons.configuration2.tree.UnionCombiner;
+import org.apache.commons.configuration2.InMemoryConfiguration;
 
 /**
  * Test class for UnionCombiner.
@@ -33,6 +31,7 @@
      *
      * @return the combiner
      */
+    @Override
     protected NodeCombiner createCombiner()
     {
         return new UnionCombiner();
@@ -43,7 +42,7 @@
      */
     public void testSimpleValues() throws ConfigurationException
     {
-        HierarchicalConfiguration config = createCombinedConfiguration();
+        InMemoryConfiguration config = createCombinedConfiguration();
         assertEquals("Too few bgcolors", 1, config.getMaxIndex("gui.bgcolor"));
         assertEquals("Wrong first color", "green", config
                 .getString("gui.bgcolor(0)"));
@@ -60,7 +59,7 @@
      */
     public void testSimpleValuesWithAttributes() throws ConfigurationException
     {
-        HierarchicalConfiguration config = createCombinedConfiguration();
+        InMemoryConfiguration config = createCombinedConfiguration();
         assertEquals("Too few level elements", 1, config
                 .getMaxIndex("gui.level"));
         assertEquals("Wrong value of first element", 1, config
@@ -80,7 +79,7 @@
      */
     public void testAttributes() throws ConfigurationException
     {
-        HierarchicalConfiguration config = createCombinedConfiguration();
+        InMemoryConfiguration config = createCombinedConfiguration();
         assertEquals("Too few attributes", 1, config
                 .getMaxIndex("database.tables.table(0)[@id]"));
         assertEquals("Wrong value of first attribute", 1, config
@@ -94,7 +93,7 @@
      */
     public void testLists() throws ConfigurationException
     {
-        HierarchicalConfiguration config = createCombinedConfiguration();
+        InMemoryConfiguration config = createCombinedConfiguration();
         assertEquals("Too few list elements", 2, config
                 .getMaxIndex("net.service.url"));
         assertEquals("Wrong first service", "http://service1.org", config
@@ -115,7 +114,7 @@
     public void testTableList() throws ConfigurationException
     {
         combiner.addListNode("table");
-        HierarchicalConfiguration config = createCombinedConfiguration();
+        InMemoryConfiguration config = createCombinedConfiguration();
         assertEquals("Wrong name of first table", "documents", config
                 .getString("database.tables.table(0).name"));
         assertEquals("Wrong id of first table", 1, config