When a node is going down, remove edges in both directions associated with the node.
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-data-impl / src / main / java / org / opendaylight / controller / yang / data / impl / CompositeNodeTOImpl.java
1 /*\r
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.controller.yang.data.impl;\r
9 \r
10 import java.util.ArrayList;\r
11 import java.util.List;\r
12 import java.util.Map;\r
13 \r
14 import org.opendaylight.controller.yang.common.QName;\r
15 import org.opendaylight.controller.yang.data.api.CompositeNode;\r
16 import org.opendaylight.controller.yang.data.api.Node;\r
17 import org.opendaylight.controller.yang.data.api.SimpleNode;\r
18 \r
19 /**\r
20  * @author michal.rehak\r
21  * \r
22  */\r
23 public class CompositeNodeTOImpl extends AbstractNodeTO<List<Node<?>>>\r
24         implements CompositeNode {\r
25 \r
26     private Map<QName, List<Node<?>>> nodeMap;\r
27 \r
28     /**\r
29      * @param qname\r
30      * @param parent use null to create top composite node (without parent)\r
31      * @param value\r
32      */\r
33     public CompositeNodeTOImpl(QName qname, CompositeNode parent,\r
34             List<Node<?>> value) {\r
35         super(qname, parent, value);\r
36         if (value != null) {\r
37             nodeMap = NodeUtils.buildNodeMap(getValue());\r
38         }\r
39     }\r
40     \r
41 \r
42     /**\r
43      * @return the nodeMap\r
44      */\r
45     protected Map<QName, List<Node<?>>> getNodeMap() {\r
46         return nodeMap;\r
47     }\r
48     \r
49     @Override\r
50     public List<Node<?>> getChildren() {\r
51         return getValue();\r
52     }\r
53 \r
54     @Override\r
55     public SimpleNode<?> getFirstSimpleByName(QName leafQName) {\r
56         List<SimpleNode<?>> list = getSimpleNodesByName(leafQName);\r
57         if (list.isEmpty())\r
58             return null;\r
59         return list.get(0);\r
60     }\r
61 \r
62     @Override\r
63     public List<CompositeNode> getCompositesByName(QName children) {\r
64         List<Node<?>> toFilter = getNodeMap().get(children);\r
65         List<CompositeNode> list = new ArrayList<CompositeNode>();\r
66         for (Node<?> node : toFilter) {\r
67             if (node instanceof CompositeNode)\r
68                 list.add((CompositeNode) node);\r
69         }\r
70         return list;\r
71     }\r
72 \r
73     @Override\r
74     public List<SimpleNode<?>> getSimpleNodesByName(QName children) {\r
75         List<Node<?>> toFilter = getNodeMap().get(children);\r
76         List<SimpleNode<?>> list = new ArrayList<SimpleNode<?>>();\r
77 \r
78         for (Node<?> node : toFilter) {\r
79             if (node instanceof SimpleNode<?>)\r
80                 list.add((SimpleNode<?>) node);\r
81         }\r
82         return list;\r
83     }\r
84 \r
85     @Override\r
86     public CompositeNode getFirstCompositeByName(QName container) {\r
87         List<CompositeNode> list = getCompositesByName(container);\r
88         if (list.isEmpty()) {\r
89             return null;\r
90         }\r
91         return list.get(0);\r
92     }\r
93 \r
94     /**\r
95      * @param leaf\r
96      * @return TODO:: do we need this method?\r
97      */\r
98     public SimpleNode<?> getFirstLeafByName(QName leaf) {\r
99         List<SimpleNode<?>> list = getSimpleNodesByName(leaf);\r
100         if (list.isEmpty()) {\r
101             return null;\r
102         }\r
103         return list.get(0);\r
104     }\r
105 \r
106     @Override\r
107     public List<CompositeNode> getCompositesByName(String children) {\r
108         return getCompositesByName(localQName(children));\r
109     }\r
110     \r
111     @Override\r
112     public List<SimpleNode<?>> getSimpleNodesByName(String children) {\r
113         return getSimpleNodesByName(localQName(children));\r
114     }\r
115 \r
116     private QName localQName(String str) {\r
117         return new QName(getNodeType(), str);\r
118     }\r
119 \r
120 }\r