From: msunal Date: Fri, 8 Nov 2013 12:07:40 +0000 (+0100) Subject: CompositeNode and its mutable/immutable objects X-Git-Tag: yangtools-0.6.0~194^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=63c889bd87535dc4a152256998ff1b575a5913c7;p=yangtools.git CompositeNode and its mutable/immutable objects - getChildren() method in CompositeNodeTOImpl returns immutable List - getChildren() method in MutableCompositeNodeTOImpl returns mutable List - XmlTreeBuilder calls init() on MutableCompositeNode after children are added Signed-off-by: Martin Sunal --- diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/CompositeNodeTOImpl.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/CompositeNodeTOImpl.java index 3ac347ca84..5eb8b5c32f 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/CompositeNodeTOImpl.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/CompositeNodeTOImpl.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.data.impl; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -61,7 +62,7 @@ public class CompositeNodeTOImpl extends AbstractNodeTO>> implement @Override public List> getChildren() { - return getValue(); + return Collections.unmodifiableList(getValue() == null ? new ArrayList>() : getValue()); } @Override diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/MutableCompositeNodeTOImpl.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/MutableCompositeNodeTOImpl.java index 75c98715c9..e7efe7ef7f 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/MutableCompositeNodeTOImpl.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/MutableCompositeNodeTOImpl.java @@ -7,6 +7,7 @@ */ package org.opendaylight.yangtools.yang.data.impl; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -38,7 +39,7 @@ public class MutableCompositeNodeTOImpl extends CompositeNodeTOImpl } /** - * update nodeMap + * update nodeMap - it should be invoked after children was changed */ @Override public void init() { @@ -46,10 +47,16 @@ public class MutableCompositeNodeTOImpl extends CompositeNodeTOImpl nodeMap = NodeUtils.buildNodeMap(getChildren()); } } + + @Override + public List> getChildren() { + return getValue() == null ? new ArrayList>() : getValue(); + } @Override public void setValue(List> value) { super.setValue(value); + init(); } @Override diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/XmlTreeBuilder.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/XmlTreeBuilder.java index 7f9d84ed1a..ccba69b4b9 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/XmlTreeBuilder.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/XmlTreeBuilder.java @@ -77,9 +77,9 @@ public final class XmlTreeBuilder { if (!processingQueue.isEmpty()) { parentNode = processingQueue.peek(); } - CompositeNode compParentNode = null; - if (parentNode instanceof CompositeNode) { - compParentNode = (CompositeNode) parentNode; + MutableCompositeNode compParentNode = null; + if (parentNode instanceof MutableCompositeNode) { + compParentNode = (MutableCompositeNode) parentNode; } Node newNode = null; if (isCompositeNodeEvent(event)) { @@ -96,6 +96,9 @@ public final class XmlTreeBuilder { } } else if (event.isEndElement()) { root = processingQueue.pop(); + if (root instanceof MutableCompositeNode) { + ((MutableCompositeNode) root).init(); + } } } return root; @@ -218,7 +221,7 @@ public final class XmlTreeBuilder { * @see CompositeNode * @see MutableCompositeNode */ - private static CompositeNode resolveCompositeNodeFromStartElement(final StartElement startElement, + private static MutableCompositeNode resolveCompositeNodeFromStartElement(final StartElement startElement, CompositeNode parent) { checkArgument(startElement != null, "Start Element cannot be NULL!"); diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/XmlTreeBuilderTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/XmlTreeBuilderTest.java index 6f8253407a..3cddd8c844 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/XmlTreeBuilderTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/XmlTreeBuilderTest.java @@ -13,6 +13,7 @@ import static org.junit.Assert.assertTrue; import java.io.FileInputStream; import java.io.InputStream; +import java.util.List; import javax.xml.stream.XMLStreamException; @@ -106,4 +107,20 @@ public class XmlTreeBuilderTest { assertNotNull(deviceId); assertNotNull(deviceIP); } + + @Test + public void nodeMapInCompositeNodeTest() { + Node rootNode = null; + try { + rootNode = XmlTreeBuilder.buildDataTree(inputStream); + } catch (XMLStreamException e) { + e.printStackTrace(); + } + + CompositeNode compRootNode = (CompositeNode)rootNode; + List params = compRootNode.getCompositesByName("params"); + assertEquals(1, params.size()); + List compositesByName = params.get(0).getCompositesByName("param"); + assertEquals(2, compositesByName.size()); + } } \ No newline at end of file