Initial opendaylight infrastructure commit!!
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-data-util / src / main / java / org / opendaylight / controller / data / util / AbstractContainerNode.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.data.util;\r
9 \r
10 import java.util.ArrayList;\r
11 import java.util.Collection;\r
12 import java.util.List;\r
13 import java.util.Map;\r
14 \r
15 import org.opendaylight.controller.yang.common.QName;\r
16 import org.opendaylight.controller.yang.data.api.CompositeNode;\r
17 import org.opendaylight.controller.yang.data.api.Node;\r
18 import org.opendaylight.controller.yang.data.api.SimpleNode;\r
19 \r
20 public abstract class AbstractContainerNode extends AbstractNode<List<Node<?>>>\r
21         implements CompositeNode {\r
22 \r
23     public SimpleNode<?> getFirstSimpleByName(QName leaf) {\r
24         List<SimpleNode<?>> list = getSimpleNodesByName(leaf);\r
25         if (list.size() == 0)\r
26             return null;\r
27         return list.get(0);\r
28     }\r
29 \r
30     protected AbstractContainerNode(QName name, CompositeNode parent) {\r
31         super(name, parent);\r
32     }\r
33 \r
34     public AbstractContainerNode(QName name) {\r
35         super(name, null);\r
36     }\r
37 \r
38     public List<Node<?>> getChildren() {\r
39         return getValue();\r
40     }\r
41 \r
42     public List<Node<?>> getValue() {\r
43         Map<QName, List<Node<?>>> map = getNodeMap();\r
44         if (map == null)\r
45             throw new IllegalStateException("nodeMap should not be null");\r
46         List<Node<?>> ret = new ArrayList<Node<?>>();\r
47         Collection<List<Node<?>>> values = map.values();\r
48         for (List<Node<?>> list : values) {\r
49             ret.addAll(list);\r
50         }\r
51         return ret;\r
52     }\r
53 \r
54     protected abstract Map<QName, List<Node<?>>> getNodeMap();\r
55 \r
56     public List<CompositeNode> getCompositesByName(QName children) {\r
57         Map<QName, List<Node<?>>> map = getNodeMap();\r
58         if (map == null)\r
59             throw new IllegalStateException("nodeMap should not be null");\r
60         List<Node<?>> toFilter = map.get(children);\r
61         List<CompositeNode> list = new ArrayList<CompositeNode>();\r
62         for (Node<?> node : toFilter) {\r
63             if (node instanceof CompositeNode)\r
64                 list.add((CompositeNode) node);\r
65         }\r
66         return list;\r
67     }\r
68 \r
69     public List<SimpleNode<?>> getSimpleNodesByName(QName children) {\r
70         Map<QName, List<Node<?>>> map = getNodeMap();\r
71         if (map == null)\r
72             throw new IllegalStateException("nodeMap should not be null");\r
73         List<Node<?>> toFilter = map.get(children);\r
74         List<SimpleNode<?>> list = new ArrayList<SimpleNode<?>>();\r
75 \r
76         for (Node<?> node : toFilter) {\r
77             if (node instanceof SimpleNode<?>)\r
78                 list.add((SimpleNode<?>) node);\r
79         }\r
80         return list;\r
81     }\r
82 \r
83     public CompositeNode getFirstCompositeByName(QName container) {\r
84         List<CompositeNode> list = getCompositesByName(container);\r
85         if (list.size() == 0)\r
86             return null;\r
87         return list.get(0);\r
88     }\r
89 \r
90     public SimpleNode<?> getFirstLeafByName(QName leaf) {\r
91         List<SimpleNode<?>> list = getSimpleNodesByName(leaf);\r
92         if (list.size() == 0)\r
93             return null;\r
94         return list.get(0);\r
95     }\r
96 \r
97     public List<CompositeNode> getCompositesByName(String children) {\r
98         return getCompositesByName(localQName(children));\r
99     }\r
100 \r
101     public List<SimpleNode<?>> getSimpleNodesByName(String children) {\r
102         return getSimpleNodesByName(localQName(children));\r
103     }\r
104 \r
105     private QName localQName(String str) {\r
106         return new QName(getNodeType(), str);\r
107     }\r
108 }\r