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);
}
}