-/*\r
- * ============LICENSE_START========================================================================\r
- * ONAP : tr-069-adapter\r
- * =================================================================================================\r
- * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
- * =================================================================================================\r
- * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
- * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
- * may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
- * either express or implied. See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ===============LICENSE_END=======================================================================\r
- */\r
-\r
-package org.commscope.tr069adapter.netconf.rpc;\r
-\r
-import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;\r
-import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;\r
-import org.opendaylight.netconf.api.DocumentedException;\r
-import org.opendaylight.netconf.api.xml.XmlElement;\r
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;\r
-import org.opendaylight.netconf.mapping.api.HandlingPriority;\r
-import org.opendaylight.netconf.mapping.api.NetconfOperation;\r
-import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-import org.w3c.dom.Document;\r
-\r
-public class SoftwareDownloadOperation implements NetconfOperation {\r
- private static final Logger logger = LoggerFactory.getLogger(SoftwareDownloadOperation.class);\r
- public static final String SOFT_MGMT_NAMESPACE = "urn:o-ran:software-management:1.0";\r
-\r
- private String deviceID;\r
-\r
- public SoftwareDownloadOperation(String deviceID) {\r
- this.deviceID = deviceID;\r
- }\r
-\r
- @Override\r
- public HandlingPriority canHandle(final Document message) throws DocumentedException {\r
- OperationNameAndNamespace operationNameAndNamespace = null;\r
- operationNameAndNamespace = new OperationNameAndNamespace(message);\r
- return canHandle(operationNameAndNamespace.getOperationName(),\r
- operationNameAndNamespace.getNamespace());\r
- }\r
-\r
- @Override\r
- public Document handle(Document requestMessage,\r
- NetconfOperationChainedExecution subsequentOperation) throws DocumentedException {\r
-\r
- logger.debug("sw-download rpc recevied in netconf server");\r
- final XmlElement requestElement = XmlElement.fromDomDocument(requestMessage);\r
-\r
- String requestXml = XmlUtility.convertDocumentToString(requestElement);\r
- logger.debug("sw-download rpc recevied requestXml = {}", requestXml);\r
- NetConfServerProperties config =\r
- NetConfServiceBooter.getApplicationContext().getBean(NetConfServerProperties.class);\r
-\r
- final String baseUrl = config.getMapperPath() + "/softwareDowload";\r
- XmlUtility.invokeMapperCall(baseUrl, requestXml, deviceID);\r
-\r
- return null;\r
- }\r
-\r
- protected HandlingPriority canHandle(final String operationName,\r
- final String operationNamespace) {\r
- return operationName.equals("software-download")\r
- && operationNamespace.equals(SOFT_MGMT_NAMESPACE)\r
- ? HandlingPriority.HANDLE_WITH_DEFAULT_PRIORITY.increasePriority(1100)\r
- : HandlingPriority.CANNOT_HANDLE;\r
- }\r
-\r
- public static final class OperationNameAndNamespace {\r
- private final String operationName;\r
- private final String namespace;\r
-\r
- private final XmlElement operationElement;\r
-\r
- public OperationNameAndNamespace(final Document message) throws DocumentedException {\r
- XmlElement requestElement = null;\r
- requestElement = getRequestElementWithCheck(message);\r
- operationElement = requestElement.getOnlyChildElement();\r
- operationName = operationElement.getName();\r
- namespace = operationElement.getNamespace();\r
- }\r
-\r
- public String getOperationName() {\r
- return operationName;\r
- }\r
-\r
- public String getNamespace() {\r
- return namespace;\r
- }\r
-\r
- public XmlElement getOperationElement() {\r
- return operationElement;\r
- }\r
-\r
- }\r
-\r
- protected static XmlElement getRequestElementWithCheck(final Document message)\r
- throws DocumentedException {\r
- return XmlElement.fromDomElementWithExpected(message.getDocumentElement(),\r
- XmlNetconfConstants.RPC_KEY, XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);\r
- }\r
-}\r
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : tr-069-adapter
+ * =================================================================================================
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.
+ * =================================================================================================
+ * This tr-069-adapter software file is distributed by CommScope Inc 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
+ *
+ * This file 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.
+ * ===============LICENSE_END=======================================================================
+ */
+
+package org.commscope.tr069adapter.netconf.rpc;
+
+import java.io.StringReader;
+
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;
+import org.commscope.tr069adapter.netconf.boot.NetConfServiceBooter;
+import org.commscope.tr069adapter.netconf.config.NetConfServerProperties;
+import org.opendaylight.netconf.api.DocumentedException;
+import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity;
+import org.opendaylight.netconf.api.DocumentedException.ErrorTag;
+import org.opendaylight.netconf.api.DocumentedException.ErrorType;
+import org.opendaylight.netconf.api.xml.XmlElement;
+import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
+import org.opendaylight.netconf.mapping.api.HandlingPriority;
+import org.opendaylight.netconf.mapping.api.NetconfOperation;
+import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+public class SoftwareDownloadOperation implements NetconfOperation {
+ private static final Logger logger = LoggerFactory.getLogger(SoftwareDownloadOperation.class);
+ public static final String SOFT_MGMT_NAMESPACE = "urn:o-ran:software-management:1.0";
+ public static final String OP_NAME = "software-download";
+
+ private String deviceID;
+ private String swVersion;
+ private String hwVersion;
+
+ public SoftwareDownloadOperation(String deviceID, String swVersion, String hwVersion) {
+ this.deviceID = deviceID;
+ this.swVersion = swVersion;
+ this.hwVersion = hwVersion;
+ }
+
+ @Override
+ public HandlingPriority canHandle(final Document message) throws DocumentedException {
+ OperationNameAndNamespace operationNameAndNamespace = null;
+ operationNameAndNamespace = new OperationNameAndNamespace(message);
+ return canHandle(operationNameAndNamespace.getOperationName(),
+ operationNameAndNamespace.getNamespace());
+ }
+
+ @Override
+ public Document handle(Document requestMessage,
+ NetconfOperationChainedExecution subsequentOperation) throws DocumentedException {
+
+ logger.debug("soft-ware download rpc is received in netconfserver");
+
+ final XmlElement requestElement = XmlElement.fromDomDocument(requestMessage);
+ final String msgId = requestElement.getAttribute(XmlNetconfConstants.MESSAGE_ID);
+
+ String requestXml = XmlUtility.convertDocumentToString(requestElement);
+ logger.debug("soft-ware download rpc requestXml= {}", requestXml);
+
+ NetConfServerProperties config =
+ NetConfServiceBooter.getApplicationContext().getBean(NetConfServerProperties.class);
+
+ final String baseUrl = config.getMapperPath() + "/softwareDowload";
+ NetConfResponse restResponse =
+ XmlUtility.invokeMapperCall(baseUrl, requestXml, deviceID, swVersion, hwVersion);
+
+ Document document = null;
+
+ ErrorCodeDetails errorCode = restResponse.getErrorCode();
+ if (errorCode != null && errorCode.getFaultCode() != null
+ && !errorCode.getFaultCode().equalsIgnoreCase("0")) {
+ logger.error("Error recevied : {}", errorCode);
+ throw new DocumentedException(errorCode.getErrorMessage(),
+ ErrorType.from(errorCode.getErrorType()), ErrorTag.from(errorCode.getErrorTag()),
+ ErrorSeverity.from(errorCode.getErrorSeverity()));
+ } else if (restResponse.getNetconfResponseXml() != null) {
+ logger.debug("soft-ware download rpc response received from mapper {}",
+ restResponse.getNetconfResponseXml());
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
+ factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
+ DocumentBuilder builder;
+ try {
+ builder = factory.newDocumentBuilder();
+ document =
+ builder.parse(new InputSource(new StringReader(restResponse.getNetconfResponseXml())));
+ document.getDocumentElement().setAttribute("xmlns:ns1", getOperationNamespace());
+ document.getDocumentElement().setAttribute("xmlns",
+ XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);
+ document.getDocumentElement().setAttribute(XmlNetconfConstants.MESSAGE_ID, msgId);
+ } catch (Exception e) {
+ logger.error("while contruscting the response; {} ", e.toString());
+ }
+ }
+
+ return document;
+ }
+
+ protected HandlingPriority canHandle(final String operationName,
+ final String operationNamespace) {
+ return operationName.equals(OP_NAME) && operationNamespace.equals(SOFT_MGMT_NAMESPACE)
+ ? HandlingPriority.HANDLE_WITH_DEFAULT_PRIORITY.increasePriority(1100)
+ : HandlingPriority.CANNOT_HANDLE;
+ }
+
+ public static final class OperationNameAndNamespace {
+ private final String operationName;
+ private final String namespace;
+
+ private final XmlElement operationElement;
+
+ public OperationNameAndNamespace(final Document message) throws DocumentedException {
+ XmlElement requestElement = null;
+ requestElement = getRequestElementWithCheck(message);
+ operationElement = requestElement.getOnlyChildElement();
+ operationName = operationElement.getName();
+ namespace = operationElement.getNamespace();
+ }
+
+ public String getOperationName() {
+ return operationName;
+ }
+
+ public String getNamespace() {
+ return namespace;
+ }
+
+ public XmlElement getOperationElement() {
+ return operationElement;
+ }
+
+ }
+
+ protected static XmlElement getRequestElementWithCheck(final Document message)
+ throws DocumentedException {
+ return XmlElement.fromDomElementWithExpected(message.getDocumentElement(),
+ XmlNetconfConstants.RPC_KEY, XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);
+ }
+
+ protected String getOperationNamespace() {
+ return SOFT_MGMT_NAMESPACE;
+ }
+
+ protected String getOperationName() {
+ return OP_NAME;
+ }
+}