2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\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
8 package org.opendaylight.controller.yang.data.impl;
\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
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
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
33 * @author michal.rehak
\r
36 public abstract class NodeHelper {
\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
44 " <topology-id>topId_01</topology-id>\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
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
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
79 " <link-id>linkId_04</link-id>\n" +
\r
81 " <source-node>nodeId_05</source-node>\n" +
\r
82 " <source-tp>tpId_06</source-tp>\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
90 " <link-id>linkId_11</link-id>\n" +
\r
92 " <source-node>nodeId_12</source-node>\n" +
\r
93 " <source-tp>tpId_13</source-tp>\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
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
116 * @throws Exception
\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
133 * @return example tree, see {@link #NETWORK_XML}
\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
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
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
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
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
167 value = new ArrayList<Node<?>>();
\r
168 value.add(NodeFactory.createSimpleNode(new QName(qName, "link-id"), null, "linkId_04"));
\r
170 value.add(destination);
\r
171 CompositeNode link1 = NodeFactory.createCompositeNode(
\r
172 new QName(qName, "link"), null, value);
\r
173 assignParentToChildren(link1);
\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
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
189 value = new ArrayList<Node<?>>();
\r
190 value.add(NodeFactory.createSimpleNode(new QName(qName, "link-id"), null, "linkId_11"));
\r
192 value.add(destination);
\r
193 CompositeNode link2 = NodeFactory.createCompositeNode(
\r
194 new QName(qName, "link"), null, value);
\r
195 assignParentToChildren(link2);
\r
197 value = new ArrayList<Node<?>>();
\r
200 CompositeNode links = NodeFactory.createCompositeNode(
\r
201 new QName(qName, "links"), null, value);
\r
202 assignParentToChildren(links);
\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
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
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
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
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
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
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
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
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
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
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
280 value = new ArrayList<Node<?>>();
\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
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
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
304 * @param parentNode
\r
306 public static void assignParentToChildren(CompositeNode parentNode) {
\r
307 for (Node<?> child : parentNode.getChildren()) {
\r
308 ((AbstractNodeTO<?>) child).setParent(parentNode);
\r
313 * @return schema context of controller-network.yang
\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