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/28 11:36:56 UTC

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

Author: oheger
Date: Fri Mar 28 03:36:45 2008
New Revision: 642185

URL: http://svn.apache.org/viewvc?rev=642185&view=rev
Log:
Added appendChildren() and appendAttributes() methods to CombinedNode

Modified:
    commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/CombinedNode.java
    commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/NodeCombiner.java
    commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/combined/TestCombinedNode.java

Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/CombinedNode.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/CombinedNode.java?rev=642185&r1=642184&r2=642185&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/CombinedNode.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/CombinedNode.java Fri Mar 28 03:36:45 2008
@@ -22,6 +22,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.configuration2.expr.NodeHandler;
+
 /**
  * <p>
  * A specialized node implementation to be used in combined configurations.
@@ -331,6 +333,37 @@
     public void removeAttribute(String name)
     {
         attributes.remove(name);
+    }
+
+    /**
+     * Appends all attributes of the specified node to this combined node.
+     *
+     * @param <T> the type of the affected node
+     * @param node the source node
+     * @param handler the handler for the source node
+     */
+    public <T> void appendAttributes(T node, NodeHandler<T> handler)
+    {
+        for (String attrName : handler.getAttributes(node))
+        {
+            addAttributeValue(attrName, handler.getAttributeValue(node,
+                    attrName));
+        }
+    }
+
+    /**
+     * Appends all children of the specified node to this combined node.
+     *
+     * @param <T> the type of the affected node
+     * @param node the source node
+     * @param handler the handler for the source node
+     */
+    public <T> void appendChildren(T node, NodeHandler<T> handler)
+    {
+        for (T child : handler.getChildren(node))
+        {
+            addChild(handler.nodeName(child), child);
+        }
     }
 
     /**

Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/NodeCombiner.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/NodeCombiner.java?rev=642185&r1=642184&r2=642185&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/NodeCombiner.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/combined/NodeCombiner.java Fri Mar 28 03:36:45 2008
@@ -135,10 +135,6 @@
     protected <T> void appendAttributes(CombinedNode vn, T node,
             NodeHandler<T> handler)
     {
-        for (String attrName : handler.getAttributes(node))
-        {
-            vn.addAttributeValue(attrName, handler.getAttributeValue(node,
-                    attrName));
-        }
+        vn.appendAttributes(node, handler);
     }
 }

Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/combined/TestCombinedNode.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/combined/TestCombinedNode.java?rev=642185&r1=642184&r2=642185&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/combined/TestCombinedNode.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/combined/TestCombinedNode.java Fri Mar 28 03:36:45 2008
@@ -20,6 +20,9 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.commons.configuration2.expr.NodeHandler;
+import org.easymock.EasyMock;
+
 import junit.framework.TestCase;
 
 /**
@@ -301,5 +304,63 @@
         node.removeAttribute(ATTR_NAME);
         assertNull("Attribute still found", node.getAttribute(ATTR_NAME));
         assertTrue("Attribute name still found", node.getAttributes().isEmpty());
+    }
+
+    /**
+     * Tests appending the attributes of a source node.
+     */
+    @SuppressWarnings("unchecked")
+    public void testAppendAttributes()
+    {
+        NodeHandler<Object> handler = EasyMock.createMock(NodeHandler.class);
+        final Object mockNode = new Object();
+        List<String> attrs = new ArrayList<String>(CHILD_COUNT);
+        for (int i = 0; i < CHILD_COUNT; i++)
+        {
+            String attrName = ATTR_NAME + i;
+            attrs.add(attrName);
+            EasyMock.expect(handler.getAttributeValue(mockNode, attrName))
+                    .andReturn(i);
+        }
+        EasyMock.expect(handler.getAttributes(mockNode)).andReturn(attrs);
+        EasyMock.replay(handler);
+        node.appendAttributes(mockNode, handler);
+        List<String> attrs2 = node.getAttributes();
+        assertEquals("Wrong number of attributes", CHILD_COUNT, attrs2.size());
+        for (int i = 0; i < CHILD_COUNT; i++)
+        {
+            assertEquals("Wrong attribute at " + i, attrs.get(i), attrs2.get(i));
+            assertEquals("Wrong attribute value at " + i, Integer.valueOf(i),
+                    node.getAttribute(attrs2.get(i)));
+        }
+        EasyMock.verify(handler);
+    }
+
+    /**
+     * Tests appending the children of a source node.
+     */
+    @SuppressWarnings("unchecked")
+    public void testAppendChildren()
+    {
+        NodeHandler<Object> handler = EasyMock.createMock(NodeHandler.class);
+        final Object mockNode = new Object();
+        List<Object> children = new ArrayList<Object>(CHILD_COUNT);
+        for (int i = 0; i < CHILD_COUNT; i++)
+        {
+            String childName = CHILD_NAME + i;
+            children.add(i);
+            EasyMock.expect(handler.nodeName(i)).andReturn(childName);
+        }
+        EasyMock.expect(handler.getChildren(mockNode)).andReturn(children);
+        EasyMock.replay(handler);
+        node.appendChildren(mockNode, handler);
+        List<Object> children2 = node.getChildren();
+        assertEquals("Wrong number of children", CHILD_COUNT, children2.size());
+        for (int i = 0; i < CHILD_COUNT; i++)
+        {
+            assertEquals("Wrong child at " + i, Integer.valueOf(i), children2
+                    .get(i));
+        }
+        EasyMock.verify(handler);
     }
 }