Initial source code
[oam/tr069-adapter.git] / netconf-server / src / main / java / org / commscope / tr069adapter / netconf / rpc / XmlUtility.java
1 /*\r
2  * ============LICENSE_START========================================================================\r
3  * ONAP : tr-069-adapter\r
4  * =================================================================================================\r
5  * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
6  * =================================================================================================\r
7  * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
8  * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
9  * may obtain a copy of the License at\r
10  *\r
11  * http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
14  * either express or implied. See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  * ===============LICENSE_END=======================================================================\r
17  */\r
18 \r
19 package org.commscope.tr069adapter.netconf.rpc;\r
20 \r
21 import java.io.StringReader;\r
22 import java.io.StringWriter;\r
23 import java.net.URI;\r
24 import java.net.URISyntaxException;\r
25 \r
26 import javax.xml.XMLConstants;\r
27 import javax.xml.parsers.DocumentBuilder;\r
28 import javax.xml.parsers.DocumentBuilderFactory;\r
29 import javax.xml.transform.Transformer;\r
30 import javax.xml.transform.TransformerFactory;\r
31 import javax.xml.transform.dom.DOMSource;\r
32 import javax.xml.transform.stream.StreamResult;\r
33 \r
34 import org.commscope.tr069adapter.mapper.model.NetConfRequest;\r
35 import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
36 import org.opendaylight.netconf.api.xml.XmlElement;\r
37 import org.slf4j.Logger;\r
38 import org.slf4j.LoggerFactory;\r
39 import org.springframework.http.HttpEntity;\r
40 import org.springframework.http.HttpHeaders;\r
41 import org.springframework.web.client.RestTemplate;\r
42 import org.w3c.dom.Document;\r
43 import org.w3c.dom.Element;\r
44 import org.xml.sax.InputSource;\r
45 \r
46 public class XmlUtility {\r
47   private static final Logger logger = LoggerFactory.getLogger(XmlUtility.class);\r
48 \r
49   private XmlUtility() {}\r
50 \r
51   private static final Logger LOG = LoggerFactory.getLogger(XmlUtility.class);\r
52 \r
53   public static String convertDocumentToString(XmlElement element) {\r
54     return convertDocumentToString(element.getDomElement());\r
55   }\r
56 \r
57   public static String convertDocumentToString(Element element) {\r
58     String strxml = null;\r
59     try {\r
60       TransformerFactory transformerFactory = TransformerFactory.newInstance();\r
61       transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
62       transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");\r
63       Transformer transformer = transformerFactory.newTransformer();\r
64       DOMSource source = new DOMSource(element);\r
65       StreamResult result = new StreamResult(new StringWriter());\r
66       transformer.transform(source, result);\r
67       strxml = result.getWriter().toString();\r
68     } catch (Exception e) {\r
69       LOG.error("Error while converting Element to String {}", e.toString());\r
70     }\r
71 \r
72     return strxml;\r
73   }\r
74 \r
75   public static Element convertStringToDocument(String xmlStr) {\r
76     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
77     factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
78     factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");\r
79     DocumentBuilder builder;\r
80     try {\r
81       builder = factory.newDocumentBuilder();\r
82       Document doc = builder.parse(new InputSource(new StringReader(xmlStr)));\r
83       return doc.getDocumentElement();\r
84     } catch (Exception e) {\r
85       LOG.error("Error while converting String to element {}", e.toString());\r
86     }\r
87     return null;\r
88   }\r
89 \r
90   public static NetConfResponse invokeMapperCall(String requestUrl, String requestXml,\r
91       String deviceID) {\r
92     URI uri = null;\r
93     try {\r
94       uri = new URI(requestUrl);\r
95     } catch (URISyntaxException e) {\r
96       logger.error("invalid URI {}", e.toString());\r
97     }\r
98 \r
99     RestTemplate restTemplate = new RestTemplate();\r
100     HttpHeaders headers = new HttpHeaders();\r
101     NetConfRequest req = new NetConfRequest(requestXml, deviceID);\r
102 \r
103     HttpEntity<NetConfRequest> entity = new HttpEntity<>(req, headers);\r
104     NetConfResponse restResponse = null;\r
105     if (uri != null) {\r
106       restResponse = restTemplate.postForObject(uri, entity, NetConfResponse.class);\r
107     }\r
108 \r
109     return restResponse;\r
110   }\r
111 }\r