4ca1ce622f4b5b40d539fd60dc7094f057e3fe7c
[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 \r
76   public static Element convertStringToDocument(String xmlStr) {\r
77     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
78     factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");\r
79     factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");\r
80     DocumentBuilder builder;\r
81     try {\r
82       builder = factory.newDocumentBuilder();\r
83       Document doc = builder.parse(new InputSource(new StringReader(xmlStr)));\r
84       return doc.getDocumentElement();\r
85     } catch (Exception e) {\r
86       LOG.error("Error while converting String to element {}", e.toString());\r
87     }\r
88     return null;\r
89   }\r
90 \r
91   public static NetConfResponse invokeMapperCall(String requestUrl, String requestXml,\r
92       String deviceID, String swVersion, String hwVersion) {\r
93     URI uri = null;\r
94     try {\r
95       uri = new URI(requestUrl);\r
96     } catch (URISyntaxException e) {\r
97       logger.error("invalid URI {}", e.toString());\r
98     }\r
99 \r
100     RestTemplate restTemplate = new RestTemplate();\r
101     HttpHeaders headers = new HttpHeaders();\r
102     NetConfRequest req = new NetConfRequest(requestXml, deviceID, swVersion, hwVersion);\r
103 \r
104     HttpEntity<NetConfRequest> entity = new HttpEntity<>(req, headers);\r
105     NetConfResponse restResponse = null;\r
106     if (uri != null) {\r
107       restResponse = restTemplate.postForObject(uri, entity, NetConfResponse.class);\r
108     }\r
109 \r
110     return restResponse;\r
111   }\r
112 }\r