3b7c0d0fee15a76d50bcf0222635dd083328bc27
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-data-impl / src / test / java / org / opendaylight / controller / yang / data / impl / NodeHelper.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.io.InputStream;\r
11 import java.io.PrintStream;\r
12 import java.io.StringWriter;\r
13 import java.util.ArrayList;\r
14 import java.util.List;\r
15 import java.util.Set;\r
16 \r
17 import javax.xml.transform.OutputKeys;\r
18 import javax.xml.transform.Transformer;\r
19 import javax.xml.transform.TransformerFactory;\r
20 import javax.xml.transform.dom.DOMSource;\r
21 import javax.xml.transform.stream.StreamResult;\r
22 \r
23 import org.opendaylight.controller.yang.common.QName;\r
24 import org.opendaylight.controller.yang.data.api.CompositeNode;\r
25 import org.opendaylight.controller.yang.data.api.Node;\r
26 import org.opendaylight.controller.yang.model.api.Module;\r
27 import org.opendaylight.controller.yang.model.api.SchemaContext;\r
28 import org.opendaylight.controller.yang.model.parser.api.YangModelParser;\r
29 import org.opendaylight.controller.yang.parser.impl.YangParserImpl;\r
30 import org.w3c.dom.Document;\r
31 \r
32 /**\r
33  * @author michal.rehak\r
34  *\r
35  */\r
36 public abstract class NodeHelper {\r
37     \r
38     /** xml source of example network configuration */\r
39     public static final String NETWORK_XML = \r
40       "<network xmlns=\"urn:opendaylight:controller:network\">\n" +\r
41       //"<network>\n" +\r
42       "    <topologies>\n" +\r
43       "        <topology>\n" +\r
44       "            <topology-id>topId_01</topology-id>\n" +\r
45       "            <nodes>\n" +\r
46       "                <node>\n" +\r
47       "                    <node-id>nodeId_02</node-id>\n" +\r
48       "                    <supporting-ne>networkId_02</supporting-ne>\n" +\r
49       "                    <termination-points>\n" +\r
50       "                        <termination-point>\n" +\r
51       "                            <tp-id>tpId_03</tp-id>\n" +\r
52       "                        </termination-point>\n" +\r
53       "                    </termination-points>\n" +\r
54       "                </node>\n" +\r
55       "                <node>\n" +\r
56       "                    <node-id>nodeId_16</node-id>\n" +\r
57       "                    <supporting-ne>networkId_17</supporting-ne>\n" +\r
58       "                    <termination-points>\n" +\r
59       "                        <termination-point>\n" +\r
60       "                            <tp-id>tpId_18</tp-id>\n" +\r
61       "                        </termination-point>\n" +\r
62       "                    </termination-points>\n" +\r
63       "                </node>\n" +\r
64       "                <node>\n" +\r
65       "                    <node-id>nodeId_19</node-id>\n" +\r
66       "                    <supporting-ne>networkId_20</supporting-ne>\n" +\r
67       "                    <termination-points>\n" +\r
68       "                        <termination-point>\n" +\r
69       "                            <tp-id>tpId_18</tp-id>\n" +\r
70       "                        </termination-point>\n" +\r
71       "                        <termination-point>\n" +\r
72       "                            <tp-id>tpId_19</tp-id>\n" +\r
73       "                        </termination-point>\n" +\r
74       "                    </termination-points>\n" +\r
75       "                </node>\n" +\r
76       "            </nodes>\n" +\r
77       "            <links>\n" +\r
78       "                <link>\n" +\r
79       "                    <link-id>linkId_04</link-id>\n" +\r
80       "                    <source>\n" +\r
81       "                        <source-node>nodeId_05</source-node>\n" +\r
82       "                        <source-tp>tpId_06</source-tp>\n" +\r
83       "                    </source>\n" +\r
84       "                    <destination>\n" +\r
85       "                        <dest-node>nodeId_07</dest-node>\n" +\r
86       "                        <dest-tp>tpId_08</dest-tp>\n" +\r
87       "                    </destination>\n" +\r
88       "                </link>\n" +\r
89       "                <link>\n" +\r
90       "                    <link-id>linkId_11</link-id>\n" +\r
91       "                    <source>\n" +\r
92       "                        <source-node>nodeId_12</source-node>\n" +\r
93       "                        <source-tp>tpId_13</source-tp>\n" +\r
94       "                    </source>\n" +\r
95       "                    <destination>\n" +\r
96       "                        <dest-node>nodeId_14</dest-node>\n" +\r
97       "                        <dest-tp>tpId_15</dest-tp>\n" +\r
98       "                    </destination>\n" +\r
99       "                </link>\n" +\r
100       "            </links>\n" +\r
101       "        </topology>\n" +\r
102       "    </topologies>\n" +\r
103       "    <network-elements>\n" +\r
104       "        <network-element>\n" +\r
105       "            <element-id>ntElementId_09</element-id>\n" +\r
106       "        </network-element>\n" +\r
107       "        <network-element>\n" +\r
108       "            <element-id>ntElementId_10</element-id>\n" +\r
109       "        </network-element>\n" +\r
110       "    </network-elements>\n" +\r
111       "</network>";\r
112 \r
113     /**\r
114      * @param domTree\r
115      * @param out\r
116      * @throws Exception \r
117      */\r
118     public static void dumpDoc(Document domTree, PrintStream out) throws Exception {\r
119       TransformerFactory transformerFact = TransformerFactory.newInstance();\r
120       transformerFact.setAttribute("indent-number", 4);\r
121       Transformer transformer = transformerFact.newTransformer();\r
122       transformer.setOutputProperty(OutputKeys.INDENT, "yes");\r
123       //initialize StreamResult with File object to save to file\r
124       StreamResult result = new StreamResult(new StringWriter());\r
125       DOMSource source = new DOMSource(domTree);\r
126       transformer.transform(source, result);\r
127       String xmlString = result.getWriter().toString();\r
128       out.println(xmlString);\r
129     }\r
130 \r
131     /**\r
132      * @param qName\r
133      * @return example tree, see {@link #NETWORK_XML}\r
134      */\r
135     public static CompositeNode buildTestConfigTree(QName qName) {\r
136         List<Node<?>> value = new ArrayList<Node<?>>(); \r
137         value.add(NodeFactory.createSimpleNode(new QName(qName, "element-id"), null, "ntElementId_09"));\r
138         CompositeNode ntElementNode1 = NodeFactory.createCompositeNode(new QName(qName, "network-element"), null, value);\r
139         assignParentToChildren(ntElementNode1);\r
140         \r
141         value = new ArrayList<Node<?>>(); \r
142         value.add(NodeFactory.createSimpleNode(new QName(qName, "element-id"), null, "ntElementId_10"));\r
143         CompositeNode ntElementNode2 = NodeFactory.createCompositeNode(new QName(qName, "network-element"), null, value);\r
144         assignParentToChildren(ntElementNode2);\r
145         \r
146         value = new ArrayList<Node<?>>();\r
147         value.add(ntElementNode1);\r
148         value.add(ntElementNode2);\r
149         CompositeNode ntElementsNode = NodeFactory.createCompositeNode(\r
150                 new QName(qName, "network-elements"), null, value);\r
151         assignParentToChildren(ntElementsNode);\r
152         \r
153         value = new ArrayList<Node<?>>(); \r
154         value.add(NodeFactory.createSimpleNode(new QName(qName, "dest-node"), null, "nodeId_07"));\r
155         value.add(NodeFactory.createSimpleNode(new QName(qName, "dest-tp"), null, "tpId_08"));\r
156         CompositeNode destination = NodeFactory.createCompositeNode(\r
157                 new QName(qName, "destination"), null, value);\r
158         assignParentToChildren(destination);\r
159         \r
160         value = new ArrayList<Node<?>>(); \r
161         value.add(NodeFactory.createSimpleNode(new QName(qName, "source-node"), null, "nodeId_05"));\r
162         value.add(NodeFactory.createSimpleNode(new QName(qName, "source-tp"), null, "tpId_06"));\r
163         CompositeNode source = NodeFactory.createCompositeNode(\r
164                 new QName(qName, "source"), null, value);\r
165         assignParentToChildren(source);\r
166         \r
167         value = new ArrayList<Node<?>>(); \r
168         value.add(NodeFactory.createSimpleNode(new QName(qName, "link-id"), null, "linkId_04"));\r
169         value.add(source);\r
170         value.add(destination);\r
171         CompositeNode link1 = NodeFactory.createCompositeNode(\r
172                 new QName(qName, "link"), null, value);\r
173         assignParentToChildren(link1);\r
174         \r
175         value = new ArrayList<Node<?>>(); \r
176         value.add(NodeFactory.createSimpleNode(new QName(qName, "dest-node"), null, "nodeId_14"));\r
177         value.add(NodeFactory.createSimpleNode(new QName(qName, "dest-tp"), null, "tpId_15"));\r
178         destination = NodeFactory.createCompositeNode(\r
179                 new QName(qName, "destination"), null, value);\r
180         assignParentToChildren(destination);\r
181         \r
182         value = new ArrayList<Node<?>>(); \r
183         value.add(NodeFactory.createSimpleNode(new QName(qName, "source-node"), null, "nodeId_12"));\r
184         value.add(NodeFactory.createSimpleNode(new QName(qName, "source-tp"), null, "tpId_13"));\r
185         source = NodeFactory.createCompositeNode(\r
186                 new QName(qName, "source"), null, value);\r
187         assignParentToChildren(source);\r
188         \r
189         value = new ArrayList<Node<?>>(); \r
190         value.add(NodeFactory.createSimpleNode(new QName(qName, "link-id"), null, "linkId_11"));\r
191         value.add(source);\r
192         value.add(destination);\r
193         CompositeNode link2 = NodeFactory.createCompositeNode(\r
194                 new QName(qName, "link"), null, value);\r
195         assignParentToChildren(link2);\r
196         \r
197         value = new ArrayList<Node<?>>(); \r
198         value.add(link1);\r
199         value.add(link2);\r
200         CompositeNode links = NodeFactory.createCompositeNode(\r
201                 new QName(qName, "links"), null, value);\r
202         assignParentToChildren(links);\r
203         \r
204         \r
205         value = new ArrayList<Node<?>>(); \r
206         value.add(NodeFactory.createSimpleNode(new QName(qName, "tp-id"), null, "tpId_03"));\r
207         CompositeNode terminationPointNode1 = NodeFactory.createCompositeNode(\r
208                 new QName(qName, "termination-point"), null, value);\r
209         assignParentToChildren(terminationPointNode1);\r
210         \r
211         value = new ArrayList<Node<?>>(); \r
212         value.add(terminationPointNode1);\r
213         CompositeNode terminationPointsNode = NodeFactory.createCompositeNode(\r
214                 new QName(qName, "termination-points"), null, value);\r
215         assignParentToChildren(terminationPointsNode);\r
216         \r
217         value = new ArrayList<Node<?>>(); \r
218         value.add(NodeFactory.createSimpleNode(new QName(qName, "node-id"), null, "nodeId_02"));\r
219         value.add(NodeFactory.createSimpleNode(new QName(qName, "supporting-ne"), null, "networkId_02"));\r
220         value.add(terminationPointsNode);\r
221         CompositeNode node1Node = NodeFactory.createCompositeNode(\r
222                 new QName(qName, "node"), null, value);\r
223         assignParentToChildren(node1Node);\r
224         \r
225         value = new ArrayList<Node<?>>(); \r
226         value.add(NodeFactory.createSimpleNode(new QName(qName, "tp-id"), null, "tpId_18"));\r
227         terminationPointNode1 = NodeFactory.createCompositeNode(\r
228                 new QName(qName, "termination-point"), null, value);\r
229         assignParentToChildren(terminationPointNode1);\r
230         \r
231         value = new ArrayList<Node<?>>(); \r
232         value.add(terminationPointNode1);\r
233         terminationPointsNode = NodeFactory.createCompositeNode(\r
234                 new QName(qName, "termination-points"), null, value);\r
235         assignParentToChildren(terminationPointsNode);\r
236         \r
237         value = new ArrayList<Node<?>>(); \r
238         value.add(NodeFactory.createSimpleNode(new QName(qName, "node-id"), null, "nodeId_16"));\r
239         value.add(NodeFactory.createSimpleNode(new QName(qName, "supporting-ne"), null, "networkId_17"));\r
240         value.add(terminationPointsNode);\r
241         CompositeNode node2Node = NodeFactory.createCompositeNode(\r
242                 new QName(qName, "node"), null, value);\r
243         assignParentToChildren(node2Node);\r
244         \r
245         value = new ArrayList<Node<?>>(); \r
246         value.add(NodeFactory.createSimpleNode(new QName(qName, "tp-id"), null, "tpId_18"));\r
247         terminationPointNode1 = NodeFactory.createCompositeNode(\r
248                 new QName(qName, "termination-point"), null, value);\r
249         assignParentToChildren(terminationPointNode1);\r
250         \r
251         value = new ArrayList<Node<?>>(); \r
252         value.add(NodeFactory.createSimpleNode(new QName(qName, "tp-id"), null, "tpId_19"));\r
253         CompositeNode terminationPointNode2 = NodeFactory.createCompositeNode(\r
254                 new QName(qName, "termination-point"), null, value);\r
255         assignParentToChildren(terminationPointNode2);\r
256         \r
257         value = new ArrayList<Node<?>>(); \r
258         value.add(terminationPointNode1);\r
259         value.add(terminationPointNode2);\r
260         terminationPointsNode = NodeFactory.createCompositeNode(\r
261                 new QName(qName, "termination-points"), null, value);\r
262         assignParentToChildren(terminationPointsNode);\r
263         \r
264         value = new ArrayList<Node<?>>(); \r
265         value.add(NodeFactory.createSimpleNode(new QName(qName, "node-id"), null, "nodeId_19"));\r
266         value.add(NodeFactory.createSimpleNode(new QName(qName, "supporting-ne"), null, "networkId_20"));\r
267         value.add(terminationPointsNode);\r
268         CompositeNode node3Node = NodeFactory.createCompositeNode(\r
269                 new QName(qName, "node"), null, value);\r
270         assignParentToChildren(node3Node);\r
271         \r
272         value = new ArrayList<Node<?>>(); \r
273         value.add(node1Node);\r
274         value.add(node2Node);\r
275         value.add(node3Node);\r
276         CompositeNode nodesNode = NodeFactory.createCompositeNode(\r
277                 new QName(qName, "nodes"), null, value);\r
278         assignParentToChildren(nodesNode);\r
279         \r
280         value = new ArrayList<Node<?>>();\r
281         value.add(links);\r
282         value.add(nodesNode);\r
283         value.add(NodeFactory.createSimpleNode(new QName(qName, "topology-id"), null, "topId_01"));\r
284         CompositeNode topology = NodeFactory.createCompositeNode(\r
285                 new QName(qName, "topology"), null, value);\r
286         assignParentToChildren(topology);\r
287         \r
288         value = new ArrayList<Node<?>>();\r
289         value.add(topology);\r
290         CompositeNode topologies = NodeFactory.createCompositeNode(\r
291                 new QName(qName, "topologies"), null, value);\r
292         assignParentToChildren(topologies);\r
293         \r
294         value = new ArrayList<Node<?>>();\r
295         value.add(topologies);\r
296         CompositeNode network = NodeFactory.createCompositeNode(\r
297                 new QName(qName, "network"), null, value);\r
298         assignParentToChildren(network);\r
299         \r
300         return network;\r
301     }\r
302 \r
303     /**\r
304      * @param parentNode\r
305      */\r
306     public static void assignParentToChildren(CompositeNode parentNode) {\r
307         for (Node<?> child : parentNode.getChildren()) {\r
308             ((AbstractNodeTO<?>) child).setParent(parentNode);\r
309         }\r
310     }\r
311 \r
312     /**\r
313      * @return schema context of controller-network.yang\r
314      */\r
315     public static SchemaContext loadSchemaContext() {\r
316         YangModelParser yParser = new YangParserImpl();\r
317         List<InputStream> yangInputStreams = new ArrayList<>();\r
318         yangInputStreams.add(NodeHelper.class.getResourceAsStream(\r
319                 "/controller-network.yang"));\r
320         yangInputStreams.add(NodeHelper.class.getResourceAsStream(\r
321                 "/ietf-inet-types@2010-09-24.yang"));\r
322         Set<Module> modules = yParser\r
323                 .parseYangModelsFromStreams(yangInputStreams);\r
324         return yParser.resolveSchemaContext(modules);\r
325     }\r
326 \r
327 }\r