HoneyNode Java 11 support for 121 devices
[transportpce.git] / tests / honeynode / 1.2.1 / honeynode-plugin-impl / src / main / java / io / fd / honeycomb / transportpce / device / tools / ExtractXMLTag.java
diff --git a/tests/honeynode/1.2.1/honeynode-plugin-impl/src/main/java/io/fd/honeycomb/transportpce/device/tools/ExtractXMLTag.java b/tests/honeynode/1.2.1/honeynode-plugin-impl/src/main/java/io/fd/honeycomb/transportpce/device/tools/ExtractXMLTag.java
new file mode 100644 (file)
index 0000000..5f16a55
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2018 Orange and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.fd.honeycomb.transportpce.device.tools;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
+ *
+ */
+public class ExtractXMLTag {
+    private static final Logger LOG = LoggerFactory.getLogger(ExtractXMLTag.class);
+    private static ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+
+    private ExtractXMLTag() {
+
+    }
+
+    /**
+     * Extract tag xml element
+     * from xml file.
+     *
+     * @param oper_path path to operational file
+     * @param tag XML tag to be extracted
+     * @param namespace XML tag namespace (optional)
+     * @return String XML extract element
+     */
+    public static String extractTagElement(String oper_path, String tag, String namespace) {
+        String result = null;
+        LOG.info("Getting {} xml data", tag);
+        DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
+        try {
+            DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
+            Document doc = docBuilder.parse(new File(classLoader.getResource(oper_path).getFile()));
+            Document extract = extractDom(doc, tag, namespace);
+            if (extract != null) {
+                result = getStringFromDocument(extract);
+            } else {
+                throw new NullPointerException("Failed to extract data from document !");
+            }
+        } catch (ParserConfigurationException | SAXException | IOException | TransformerException e) {
+            LOG.error("failed to extract data from document", e);
+        }
+        return result;
+    }
+
+    public static Document extractDom(Document doc, String tag, String namespace) throws ParserConfigurationException {
+        NodeList nodeList = doc.getElementsByTagName(tag);
+        if (nodeList.getLength() > 0) {
+            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = dbf.newDocumentBuilder();
+            Document result = builder.newDocument();
+            Element root = result.createElementNS("urn:ietf:params:xml:ns:netconf:base:1.0", "data");
+            result.appendChild(root);
+            Node newNode = result.importNode(nodeList.item(0), true);
+            result.getDocumentElement().appendChild(newNode);
+            return result;
+        } else {
+            LOG.warn("no {} object present in doc",tag);
+            return null;
+        }
+    }
+
+    public static String getStringFromDocument(Document doc) throws TransformerException {
+        DOMSource domSource = new DOMSource(doc);
+        StringWriter writer = new StringWriter();
+        StreamResult result = new StreamResult(writer);
+        TransformerFactory tf = TransformerFactory.newInstance();
+        Transformer transformer = tf.newTransformer();
+        transformer.transform(domSource, result);
+        return writer.toString();
+    }
+
+}