--- /dev/null
+/*\r
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.controller.yang.data.impl;\r
+\r
+import java.io.InputStream;\r
+import java.io.PrintStream;\r
+import java.io.StringWriter;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import javax.xml.transform.OutputKeys;\r
+import javax.xml.transform.Transformer;\r
+import javax.xml.transform.TransformerFactory;\r
+import javax.xml.transform.dom.DOMSource;\r
+import javax.xml.transform.stream.StreamResult;\r
+\r
+import org.opendaylight.controller.yang.common.QName;\r
+import org.opendaylight.controller.yang.data.api.CompositeNode;\r
+import org.opendaylight.controller.yang.data.api.Node;\r
+import org.opendaylight.controller.yang.model.api.Module;\r
+import org.opendaylight.controller.yang.model.api.SchemaContext;\r
+import org.opendaylight.controller.yang.model.parser.api.YangModelParser;\r
+import org.opendaylight.controller.yang.parser.impl.YangParserImpl;\r
+import org.w3c.dom.Document;\r
+\r
+/**\r
+ * @author michal.rehak\r
+ *\r
+ */\r
+public abstract class NodeHelper {\r
+ \r
+ /** xml source of example network configuration */\r
+ public static final String NETWORK_XML = \r
+ "<network xmlns=\"urn:opendaylight:controller:network\">\n" +\r
+ //"<network>\n" +\r
+ " <topologies>\n" +\r
+ " <topology>\n" +\r
+ " <topology-id>topId_01</topology-id>\n" +\r
+ " <nodes>\n" +\r
+ " <node>\n" +\r
+ " <node-id>nodeId_02</node-id>\n" +\r
+ " <supporting-ne>networkId_02</supporting-ne>\n" +\r
+ " <termination-points>\n" +\r
+ " <termination-point>\n" +\r
+ " <tp-id>tpId_03</tp-id>\n" +\r
+ " </termination-point>\n" +\r
+ " </termination-points>\n" +\r
+ " </node>\n" +\r
+ " <node>\n" +\r
+ " <node-id>nodeId_16</node-id>\n" +\r
+ " <supporting-ne>networkId_17</supporting-ne>\n" +\r
+ " <termination-points>\n" +\r
+ " <termination-point>\n" +\r
+ " <tp-id>tpId_18</tp-id>\n" +\r
+ " </termination-point>\n" +\r
+ " </termination-points>\n" +\r
+ " </node>\n" +\r
+ " <node>\n" +\r
+ " <node-id>nodeId_19</node-id>\n" +\r
+ " <supporting-ne>networkId_20</supporting-ne>\n" +\r
+ " <termination-points>\n" +\r
+ " <termination-point>\n" +\r
+ " <tp-id>tpId_18</tp-id>\n" +\r
+ " </termination-point>\n" +\r
+ " <termination-point>\n" +\r
+ " <tp-id>tpId_19</tp-id>\n" +\r
+ " </termination-point>\n" +\r
+ " </termination-points>\n" +\r
+ " </node>\n" +\r
+ " </nodes>\n" +\r
+ " <links>\n" +\r
+ " <link>\n" +\r
+ " <link-id>linkId_04</link-id>\n" +\r
+ " <source>\n" +\r
+ " <source-node>nodeId_05</source-node>\n" +\r
+ " <source-tp>tpId_06</source-tp>\n" +\r
+ " </source>\n" +\r
+ " <destination>\n" +\r
+ " <dest-node>nodeId_07</dest-node>\n" +\r
+ " <dest-tp>tpId_08</dest-tp>\n" +\r
+ " </destination>\n" +\r
+ " </link>\n" +\r
+ " <link>\n" +\r
+ " <link-id>linkId_11</link-id>\n" +\r
+ " <source>\n" +\r
+ " <source-node>nodeId_12</source-node>\n" +\r
+ " <source-tp>tpId_13</source-tp>\n" +\r
+ " </source>\n" +\r
+ " <destination>\n" +\r
+ " <dest-node>nodeId_14</dest-node>\n" +\r
+ " <dest-tp>tpId_15</dest-tp>\n" +\r
+ " </destination>\n" +\r
+ " </link>\n" +\r
+ " </links>\n" +\r
+ " </topology>\n" +\r
+ " </topologies>\n" +\r
+ " <network-elements>\n" +\r
+ " <network-element>\n" +\r
+ " <element-id>ntElementId_09</element-id>\n" +\r
+ " </network-element>\n" +\r
+ " <network-element>\n" +\r
+ " <element-id>ntElementId_10</element-id>\n" +\r
+ " </network-element>\n" +\r
+ " </network-elements>\n" +\r
+ "</network>";\r
+\r
+ /**\r
+ * @param domTree\r
+ * @param out\r
+ * @throws Exception \r
+ */\r
+ public static void dumpDoc(Document domTree, PrintStream out) throws Exception {\r
+ TransformerFactory transformerFact = TransformerFactory.newInstance();\r
+ transformerFact.setAttribute("indent-number", 4);\r
+ Transformer transformer = transformerFact.newTransformer();\r
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");\r
+ //initialize StreamResult with File object to save to file\r
+ StreamResult result = new StreamResult(new StringWriter());\r
+ DOMSource source = new DOMSource(domTree);\r
+ transformer.transform(source, result);\r
+ String xmlString = result.getWriter().toString();\r
+ out.println(xmlString);\r
+ }\r
+\r
+ /**\r
+ * @param qName\r
+ * @return example tree, see {@link #NETWORK_XML}\r
+ */\r
+ public static CompositeNode buildTestConfigTree(QName qName) {\r
+ List<Node<?>> value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "element-id"), null, "ntElementId_09"));\r
+ CompositeNode ntElementNode1 = NodeFactory.createCompositeNode(new QName(qName, "network-element"), null, value);\r
+ assignParentToChildren(ntElementNode1);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "element-id"), null, "ntElementId_10"));\r
+ CompositeNode ntElementNode2 = NodeFactory.createCompositeNode(new QName(qName, "network-element"), null, value);\r
+ assignParentToChildren(ntElementNode2);\r
+ \r
+ value = new ArrayList<Node<?>>();\r
+ value.add(ntElementNode1);\r
+ value.add(ntElementNode2);\r
+ CompositeNode ntElementsNode = NodeFactory.createCompositeNode(\r
+ new QName(qName, "network-elements"), null, value);\r
+ assignParentToChildren(ntElementsNode);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "dest-node"), null, "nodeId_07"));\r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "dest-tp"), null, "tpId_08"));\r
+ CompositeNode destination = NodeFactory.createCompositeNode(\r
+ new QName(qName, "destination"), null, value);\r
+ assignParentToChildren(destination);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "source-node"), null, "nodeId_05"));\r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "source-tp"), null, "tpId_06"));\r
+ CompositeNode source = NodeFactory.createCompositeNode(\r
+ new QName(qName, "source"), null, value);\r
+ assignParentToChildren(source);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "link-id"), null, "linkId_04"));\r
+ value.add(source);\r
+ value.add(destination);\r
+ CompositeNode link1 = NodeFactory.createCompositeNode(\r
+ new QName(qName, "link"), null, value);\r
+ assignParentToChildren(link1);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "dest-node"), null, "nodeId_14"));\r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "dest-tp"), null, "tpId_15"));\r
+ destination = NodeFactory.createCompositeNode(\r
+ new QName(qName, "destination"), null, value);\r
+ assignParentToChildren(destination);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "source-node"), null, "nodeId_12"));\r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "source-tp"), null, "tpId_13"));\r
+ source = NodeFactory.createCompositeNode(\r
+ new QName(qName, "source"), null, value);\r
+ assignParentToChildren(source);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "link-id"), null, "linkId_11"));\r
+ value.add(source);\r
+ value.add(destination);\r
+ CompositeNode link2 = NodeFactory.createCompositeNode(\r
+ new QName(qName, "link"), null, value);\r
+ assignParentToChildren(link2);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(link1);\r
+ value.add(link2);\r
+ CompositeNode links = NodeFactory.createCompositeNode(\r
+ new QName(qName, "links"), null, value);\r
+ assignParentToChildren(links);\r
+ \r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "tp-id"), null, "tpId_03"));\r
+ CompositeNode terminationPointNode1 = NodeFactory.createCompositeNode(\r
+ new QName(qName, "termination-point"), null, value);\r
+ assignParentToChildren(terminationPointNode1);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(terminationPointNode1);\r
+ CompositeNode terminationPointsNode = NodeFactory.createCompositeNode(\r
+ new QName(qName, "termination-points"), null, value);\r
+ assignParentToChildren(terminationPointsNode);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "node-id"), null, "nodeId_02"));\r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "supporting-ne"), null, "networkId_02"));\r
+ value.add(terminationPointsNode);\r
+ CompositeNode node1Node = NodeFactory.createCompositeNode(\r
+ new QName(qName, "node"), null, value);\r
+ assignParentToChildren(node1Node);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "tp-id"), null, "tpId_18"));\r
+ terminationPointNode1 = NodeFactory.createCompositeNode(\r
+ new QName(qName, "termination-point"), null, value);\r
+ assignParentToChildren(terminationPointNode1);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(terminationPointNode1);\r
+ terminationPointsNode = NodeFactory.createCompositeNode(\r
+ new QName(qName, "termination-points"), null, value);\r
+ assignParentToChildren(terminationPointsNode);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "node-id"), null, "nodeId_16"));\r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "supporting-ne"), null, "networkId_17"));\r
+ value.add(terminationPointsNode);\r
+ CompositeNode node2Node = NodeFactory.createCompositeNode(\r
+ new QName(qName, "node"), null, value);\r
+ assignParentToChildren(node2Node);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "tp-id"), null, "tpId_18"));\r
+ terminationPointNode1 = NodeFactory.createCompositeNode(\r
+ new QName(qName, "termination-point"), null, value);\r
+ assignParentToChildren(terminationPointNode1);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "tp-id"), null, "tpId_19"));\r
+ CompositeNode terminationPointNode2 = NodeFactory.createCompositeNode(\r
+ new QName(qName, "termination-point"), null, value);\r
+ assignParentToChildren(terminationPointNode2);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(terminationPointNode1);\r
+ value.add(terminationPointNode2);\r
+ terminationPointsNode = NodeFactory.createCompositeNode(\r
+ new QName(qName, "termination-points"), null, value);\r
+ assignParentToChildren(terminationPointsNode);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "node-id"), null, "nodeId_19"));\r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "supporting-ne"), null, "networkId_20"));\r
+ value.add(terminationPointsNode);\r
+ CompositeNode node3Node = NodeFactory.createCompositeNode(\r
+ new QName(qName, "node"), null, value);\r
+ assignParentToChildren(node3Node);\r
+ \r
+ value = new ArrayList<Node<?>>(); \r
+ value.add(node1Node);\r
+ value.add(node2Node);\r
+ value.add(node3Node);\r
+ CompositeNode nodesNode = NodeFactory.createCompositeNode(\r
+ new QName(qName, "nodes"), null, value);\r
+ assignParentToChildren(nodesNode);\r
+ \r
+ value = new ArrayList<Node<?>>();\r
+ value.add(links);\r
+ value.add(nodesNode);\r
+ value.add(NodeFactory.createSimpleNode(new QName(qName, "topology-id"), null, "topId_01"));\r
+ CompositeNode topology = NodeFactory.createCompositeNode(\r
+ new QName(qName, "topology"), null, value);\r
+ assignParentToChildren(topology);\r
+ \r
+ value = new ArrayList<Node<?>>();\r
+ value.add(topology);\r
+ CompositeNode topologies = NodeFactory.createCompositeNode(\r
+ new QName(qName, "topologies"), null, value);\r
+ assignParentToChildren(topologies);\r
+ \r
+ value = new ArrayList<Node<?>>();\r
+ value.add(topologies);\r
+ CompositeNode network = NodeFactory.createCompositeNode(\r
+ new QName(qName, "network"), null, value);\r
+ assignParentToChildren(network);\r
+ \r
+ return network;\r
+ }\r
+\r
+ /**\r
+ * @param parentNode\r
+ */\r
+ public static void assignParentToChildren(CompositeNode parentNode) {\r
+ for (Node<?> child : parentNode.getChildren()) {\r
+ ((AbstractNodeTO<?>) child).setParent(parentNode);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * @return schema context of controller-network.yang\r
+ */\r
+ public static SchemaContext loadSchemaContext() {\r
+ YangModelParser yParser = new YangParserImpl();\r
+ List<InputStream> yangInputStreams = new ArrayList<>();\r
+ yangInputStreams.add(NodeHelper.class.getResourceAsStream(\r
+ "/controller-network.yang"));\r
+ yangInputStreams.add(NodeHelper.class.getResourceAsStream(\r
+ "/ietf-inet-types@2010-09-24.yang"));\r
+ Set<Module> modules = yParser\r
+ .parseYangModelsFromStreams(yangInputStreams);\r
+ return yParser.resolveSchemaContext(modules);\r
+ }\r
+\r
+}\r