MutableCopomositeNodeTOImpl as mutable implementation of CompositeNode 35/3135/1
authormsunal <msunal@cisco.com>
Wed, 27 Nov 2013 15:47:43 +0000 (16:47 +0100)
committermsunal <msunal@cisco.com>
Wed, 27 Nov 2013 15:47:43 +0000 (16:47 +0100)
- MutableCopomositeNodeTOImpl extends AbstractNodeTO instead of CompositeNodeTOImpl

Signed-off-by: Martin Sunal <msunal@cisco.com>
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/CompositeNodeTOImpl.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/MutableCompositeNodeTOImpl.java

index 54d550711aa68d0e97a479f1cc3f5900db5bdeec..33779221e8d35f7208f148c87ffdbee13cd6eb7f 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.data.impl;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -27,7 +28,7 @@ import org.opendaylight.yangtools.yang.data.api.SimpleNode;
  */
 public class CompositeNodeTOImpl extends AbstractNodeTO<List<Node<?>>> implements CompositeNode {
 
-    private Map<QName, List<Node<?>>> nodeMap;
+    private Map<QName, List<Node<?>>> nodeMap = new HashMap<>();
 
     /**
      * @param qname
@@ -37,9 +38,6 @@ public class CompositeNodeTOImpl extends AbstractNodeTO<List<Node<?>>> implement
      */
     public CompositeNodeTOImpl(QName qname, CompositeNode parent, List<Node<?>> value) {
         super(qname, parent, value);
-        if (value != null) {
-            nodeMap = NodeUtils.buildNodeMap(getValue());
-        }
         init();
     }
 
@@ -54,10 +52,13 @@ public class CompositeNodeTOImpl extends AbstractNodeTO<List<Node<?>>> implement
         super(qname, parent, value, modifyAction);
         init();
     }
+    
+    protected void init() {
+        if (getValue() != null) {
+            nodeMap = NodeUtils.buildNodeMap(getValue());
+        }
+    }
 
-    /**
-     * @return the nodeMap
-     */
     protected Map<QName, List<Node<?>>> getNodeMap() {
         return nodeMap;
     }
@@ -138,12 +139,6 @@ public class CompositeNodeTOImpl extends AbstractNodeTO<List<Node<?>>> implement
         return getSimpleNodesByName(new QName(getNodeType(), children));
     }
 
-    protected void init() {
-        if (getValue() != null) {
-            nodeMap = NodeUtils.buildNodeMap(getValue());
-        }
-    }
-
     @Override
     public MutableCompositeNode asMutable() {
         throw new IllegalAccessError("cast to mutable is not supported - " + getClass().getSimpleName());
index 014c788386fb6ca237a45240737367aacfe604d7..6c29fca336daa2cba843c4a145deddc4cb7c4902 100644 (file)
@@ -8,34 +8,32 @@
 package org.opendaylight.yangtools.yang.data.impl;\r
 \r
 import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.Set;\r
 \r
 import org.opendaylight.yangtools.yang.common.QName;\r
 import org.opendaylight.yangtools.yang.data.api.CompositeNode;\r
 import org.opendaylight.yangtools.yang.data.api.ModifyAction;\r
 import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode;\r
 import org.opendaylight.yangtools.yang.data.api.Node;\r
+import org.opendaylight.yangtools.yang.data.api.SimpleNode;\r
 \r
 /**\r
  * @author michal.rehak\r
- *\r
+ * \r
  */\r
-public class MutableCompositeNodeTOImpl extends CompositeNodeTOImpl\r
-        implements MutableCompositeNode {\r
+public class MutableCompositeNodeTOImpl extends AbstractNodeTO<List<Node<?>>> implements MutableCompositeNode {\r
 \r
-    private Map<QName, List<Node<?>>> nodeMap;\r
+    private Map<QName, List<Node<?>>> nodeMap = new HashMap<>();\r
     private CompositeNode original;\r
 \r
-    /**\r
-     * @param qname\r
-     * @param parent\r
-     * @param value\r
-     * @param modifyAction\r
-     */\r
-    public MutableCompositeNodeTOImpl(QName qname, CompositeNode parent,\r
-            List<Node<?>> value, ModifyAction modifyAction) {\r
+    public MutableCompositeNodeTOImpl(QName qname, CompositeNode parent, List<Node<?>> value, ModifyAction modifyAction) {\r
         super(qname, parent, value, modifyAction);\r
+        init();\r
     }\r
 \r
     /**\r
@@ -47,7 +45,7 @@ public class MutableCompositeNodeTOImpl extends CompositeNodeTOImpl
             nodeMap = NodeUtils.buildNodeMap(getChildren());\r
         }\r
     }\r
-    \r
+\r
     @Override\r
     public List<Node<?>> getChildren() {\r
         return getValue() == null ? new ArrayList<Node<?>>() : getValue();\r
@@ -65,7 +63,6 @@ public class MutableCompositeNodeTOImpl extends CompositeNodeTOImpl
         super.setModificationAction(action);\r
     }\r
 \r
-    @Override\r
     protected Map<QName, List<Node<?>>> getNodeMap() {\r
         return nodeMap;\r
     }\r
@@ -81,9 +78,151 @@ public class MutableCompositeNodeTOImpl extends CompositeNodeTOImpl
     }\r
 \r
     /**\r
-     * @param original the original to set\r
+     * @param original\r
+     *            the original to set\r
      */\r
     public void setOriginal(CompositeNode original) {\r
         this.original = original;\r
     }\r
+\r
+    @Override\r
+    public SimpleNode<?> getFirstSimpleByName(QName leafQName) {\r
+        List<SimpleNode<?>> list = getSimpleNodesByName(leafQName);\r
+        if (list.isEmpty()) {\r
+            return null;\r
+        }\r
+        return list.get(0);\r
+    }\r
+\r
+    @Override\r
+    public List<CompositeNode> getCompositesByName(QName children) {\r
+        List<Node<?>> toFilter = getNodeMap().get(children);\r
+        if (toFilter == null) {\r
+            return Collections.emptyList();\r
+        }\r
+        List<CompositeNode> list = new ArrayList<CompositeNode>();\r
+        for (Node<?> node : toFilter) {\r
+            if (node instanceof CompositeNode) {\r
+                list.add((CompositeNode) node);\r
+            }\r
+        }\r
+        return list;\r
+    }\r
+\r
+    @Override\r
+    public List<SimpleNode<?>> getSimpleNodesByName(QName children) {\r
+        List<Node<?>> toFilter = getNodeMap().get(children);\r
+        if (toFilter == null) {\r
+            return Collections.emptyList();\r
+        }\r
+        List<SimpleNode<?>> list = new ArrayList<SimpleNode<?>>();\r
+\r
+        for (Node<?> node : toFilter) {\r
+            if (node instanceof SimpleNode<?>) {\r
+                list.add((SimpleNode<?>) node);\r
+            }\r
+        }\r
+        return list;\r
+    }\r
+\r
+    @Override\r
+    public CompositeNode getFirstCompositeByName(QName container) {\r
+        List<CompositeNode> list = getCompositesByName(container);\r
+        if (list.isEmpty()) {\r
+            return null;\r
+        }\r
+        return list.get(0);\r
+    }\r
+\r
+    /**\r
+     * @param leaf\r
+     * @return TODO:: do we need this method?\r
+     */\r
+    public SimpleNode<?> getFirstLeafByName(QName leaf) {\r
+        List<SimpleNode<?>> list = getSimpleNodesByName(leaf);\r
+        if (list.isEmpty()) {\r
+            return null;\r
+        }\r
+        return list.get(0);\r
+    }\r
+\r
+    @Override\r
+    public List<CompositeNode> getCompositesByName(String children) {\r
+        return getCompositesByName(new QName(getNodeType(), children));\r
+    }\r
+\r
+    @Override\r
+    public List<SimpleNode<?>> getSimpleNodesByName(String children) {\r
+        return getSimpleNodesByName(new QName(getNodeType(), children));\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+        return super.toString() + ", children.size = " + (getChildren() != null ? getChildren().size() : "n/a");\r
+    }\r
+\r
+    @Override\r
+    public void clear() {\r
+        nodeMap.clear();\r
+    }\r
+\r
+    @Override\r
+    public boolean containsKey(Object key) {\r
+        return nodeMap.containsKey(key);\r
+    }\r
+\r
+    @Override\r
+    public boolean containsValue(Object value) {\r
+        return nodeMap.containsValue(value);\r
+    }\r
+\r
+    @Override\r
+    public Set<java.util.Map.Entry<QName, List<Node<?>>>> entrySet() {\r
+        return nodeMap.entrySet();\r
+    }\r
+\r
+    @Override\r
+    public boolean equals(Object obj) {\r
+        return super.equals(obj);\r
+    }\r
+\r
+    @Override\r
+    public int size() {\r
+        return nodeMap.size();\r
+    }\r
+\r
+    @Override\r
+    public boolean isEmpty() {\r
+        return nodeMap.isEmpty();\r
+    }\r
+\r
+    @Override\r
+    public List<Node<?>> get(Object key) {\r
+        return nodeMap.get(key);\r
+    }\r
+\r
+    @Override\r
+    public List<Node<?>> put(QName key, List<Node<?>> value) {\r
+        return nodeMap.put(key, value);\r
+    }\r
+\r
+    @Override\r
+    public List<Node<?>> remove(Object key) {\r
+        return nodeMap.remove(key);\r
+    }\r
+\r
+    @Override\r
+    public void putAll(Map<? extends QName, ? extends List<Node<?>>> m) {\r
+        nodeMap.putAll(m);\r
+    }\r
+\r
+    @Override\r
+    public Set<QName> keySet() {\r
+        return nodeMap.keySet();\r
+    }\r
+\r
+    @Override\r
+    public Collection<List<Node<?>>> values() {\r
+        return nodeMap.values();\r
+    }\r
 }\r