Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / netconf-server / src / main / java / org / commscope / tr069adapter / netconf / rpc / SoftwareDownloadOperation.java
index f5b1454..a480ea4 100644 (file)
-/*\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 java.io.StringReader;\r
-\r
-import javax.xml.parsers.DocumentBuilder;\r
-import javax.xml.parsers.DocumentBuilderFactory;\r
-\r
-import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
-import org.commscope.tr069adapter.mapper.model.NetConfResponse;\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.DocumentedException.ErrorSeverity;\r
-import org.opendaylight.netconf.api.DocumentedException.ErrorTag;\r
-import org.opendaylight.netconf.api.DocumentedException.ErrorType;\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
-import org.xml.sax.InputSource;\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
-  private String swVersion;\r
-  private String hwVersion;\r
-\r
-  public SoftwareDownloadOperation(String deviceID, String swVersion, String hwVersion) {\r
-    this.deviceID = deviceID;\r
-    this.swVersion = swVersion;\r
-    this.hwVersion = hwVersion;\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("soft-ware download rpc is received in netconfserver");\r
-\r
-    final XmlElement requestElement = XmlElement.fromDomDocument(requestMessage);\r
-    final String msgId = requestElement.getAttribute(XmlNetconfConstants.MESSAGE_ID);\r
-\r
-    String requestXml = XmlUtility.convertDocumentToString(requestElement);\r
-    logger.debug("soft-ware download rpc requestXml=" + requestXml);\r
-\r
-    NetConfServerProperties config =\r
-        NetConfServiceBooter.getApplicationContext().getBean(NetConfServerProperties.class);\r
-\r
-    final String baseUrl = config.getMapperPath() + "/softwareDowload";\r
-    NetConfResponse restResponse =\r
-        XmlUtility.invokeMapperCall(baseUrl, requestXml, deviceID, swVersion, hwVersion);\r
-\r
-    Document document = null;\r
-\r
-    ErrorCodeDetails errorCode = restResponse.getErrorCode();\r
-    if (errorCode != null && errorCode.getFaultCode() != null\r
-        && !errorCode.getFaultCode().equalsIgnoreCase("0")) {\r
-      logger.error("Error recevied : " + errorCode);\r
-      throw new DocumentedException(errorCode.getErrorMessage(),\r
-          ErrorType.from(errorCode.getErrorType()), ErrorTag.from(errorCode.getErrorTag()),\r
-          ErrorSeverity.from(errorCode.getErrorSeverity()));\r
-    } else if (restResponse != null && restResponse.getNetconfResponseXml() != null) {\r
-      logger.debug("soft-ware download rpc response received from mapper "\r
-          + restResponse.getNetconfResponseXml());\r
-      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
-      DocumentBuilder builder;\r
-      try {\r
-        builder = factory.newDocumentBuilder();\r
-        document =\r
-            builder.parse(new InputSource(new StringReader(restResponse.getNetconfResponseXml())));\r
-        document.getDocumentElement().setAttribute("xmlns:ns1", getOperationNamespace());\r
-        document.getDocumentElement().setAttribute("xmlns",\r
-            XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);\r
-        document.getDocumentElement().setAttribute(XmlNetconfConstants.MESSAGE_ID, msgId);\r
-      } catch (Exception e) {\r
-        logger.error("while contruscting the response; ", e.toString());\r
-      }\r
-    }\r
-\r
-    return document;\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
-  protected String getOperationNamespace() {\r
-    return "urn:o-ran:software-management:1.0";\r
-  }\r
-\r
-  protected String getOperationName() {\r
-    return "software-download";\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;
+  }
+}