Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / ves-agent / src / main / java / org / commscope / tr069adapter / vesagent / controller / PnfRegMappingHandler.java
index 211e897..a3500b7 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.vesagent.controller;\r
-\r
-import com.fasterxml.jackson.core.JsonProcessingException;\r
-import com.fasterxml.jackson.databind.ObjectMapper;\r
-\r
-import java.text.SimpleDateFormat;\r
-import java.util.Date;\r
-\r
-import org.commscope.tr069adapter.acs.common.DeviceInform;\r
-import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
-import org.commscope.tr069adapter.mapper.model.VESNotification;\r
-import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
-import org.commscope.tr069adapter.vesagent.VesConfiguration;\r
-import org.commscope.tr069adapter.vesagent.fault.Parser;\r
-import org.commscope.tr069adapter.vesagent.http.HttpRequestSender;\r
-import org.commscope.tr069adapter.vesagent.model.CommonEventHeader;\r
-import org.commscope.tr069adapter.vesagent.model.Event;\r
-import org.commscope.tr069adapter.vesagent.model.EventMessage;\r
-import org.commscope.tr069adapter.vesagent.model.PnfRegEventAdditionalFeilds;\r
-import org.commscope.tr069adapter.vesagent.model.PnfRegEventFields;\r
-import org.commscope.tr069adapter.vesagent.util.EventUtil;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.stereotype.Component;\r
-\r
-@Component\r
-public class PnfRegMappingHandler {\r
-  private static final Logger logger = LoggerFactory.getLogger(PnfRegMappingHandler.class);\r
-  public static final String SSH_USERNAME = "netconf";\r
-  public static final String SSH_PSSWORD = "netconf";\r
-\r
-  @Autowired\r
-  VesConfiguration config;\r
-\r
-  @Autowired\r
-  HttpRequestSender sender;\r
-\r
-  public VESNotificationResponse handlePnfRegNotification(VESNotification vesNoti)\r
-      throws JsonProcessingException {\r
-    Event event = convertNotificationToVESEvent(vesNoti.getDevnotification(),\r
-        vesNoti.getNetconfDetails(), vesNoti.geteNodeBName());\r
-    if (null != event) {\r
-      EventMessage evMsg = new EventMessage();\r
-      evMsg.setEvent(event);\r
-\r
-      ObjectMapper mapper = new ObjectMapper();\r
-\r
-      String requestBody = mapper.writeValueAsString(evMsg);\r
-      if (requestBody.isEmpty()) {\r
-        logger.debug("VES Event body is empty");\r
-      }\r
-\r
-      String url = config.getPnfRegVesUrl();\r
-      return sender.postRequest(url, requestBody);\r
-    } else {\r
-      return new VESNotificationResponse(-1,\r
-          "unable to prepare ves event due to insufficient data");\r
-    }\r
-  }\r
-\r
-  public VESNotificationResponse handlePnfRegNotificationOnRestart(VESNotification vesNoti)\r
-      throws JsonProcessingException {\r
-    Event event = convertNotificationToVESEventOnRestart(vesNoti.getNetconfDetails());\r
-\r
-    EventMessage evMsg = new EventMessage();\r
-    evMsg.setEvent(event);\r
-\r
-    ObjectMapper mapper = new ObjectMapper();\r
-\r
-    String requestBody = mapper.writeValueAsString(evMsg);\r
-    if (requestBody.isEmpty()) {\r
-      logger.debug("VES Event body is empty");\r
-    }\r
-\r
-    String url = config.getPnfRegVesUrl();\r
-    return sender.postRequest(url, requestBody);\r
-  }\r
-\r
-  Event convertNotificationToVESEvent(DeviceInform notification,\r
-      NetConfServerDetails netconfServerDetails, String eNodeBName) {\r
-    logger.debug("Converting Notification to VES pnfevent started");\r
-    Parser parser = new Parser();\r
-\r
-\r
-    Event regEvent = new Event();\r
-    CommonEventHeader eventHeader = new CommonEventHeader();\r
-\r
-    eventHeader.setDomain("pnfRegistration");\r
-    eventHeader.setEventId(\r
-        "PnfReg" + notification.getDeviceDetails().getDeviceId() + System.currentTimeMillis());\r
-    eventHeader.setEventName("pnfReg_" + notification.getDeviceDetails().getProductClass() + "-"\r
-        + config.getVendorName());\r
-    eventHeader.setEventType(config.getPnfRegEventType());\r
-    eventHeader.setPriority("High");\r
-    EventUtil.populateEventHeaderFields(eventHeader, notification, eNodeBName, config);\r
-    regEvent.setCommonEventHeader(eventHeader);\r
-\r
-    PnfRegEventFields pnfRegistrationFields =\r
-        parser.parseNotificationParams(notification.getParameters());\r
-    populatePnfRegFeilds(netconfServerDetails, pnfRegistrationFields);\r
-    pnfRegistrationFields.setModelNumber(notification.getDeviceDetails().getProductClass());\r
-\r
-    regEvent.setPnfRegistrationFields(pnfRegistrationFields);\r
-    logger.debug("Converting Notification to VES pnfevent completed");\r
-    return regEvent;\r
-  }\r
-\r
-  Event convertNotificationToVESEventOnRestart(NetConfServerDetails netconfServerDetails) {\r
-    logger.debug("Converting Notification to VES pnfevent started");\r
-\r
-    Event regEvent = new Event();\r
-    CommonEventHeader eventHeader = new CommonEventHeader();\r
-\r
-    if (null == netconfServerDetails) {\r
-      logger.error("netconf server details as received as null {}", netconfServerDetails);\r
-      return null;\r
-    }\r
-    eventHeader.setDomain("pnfRegistration");\r
-    eventHeader\r
-        .setEventId("PnfReg" + netconfServerDetails.getDeviceId() + System.currentTimeMillis());\r
-    eventHeader.setEventName(\r
-        "pnfReg_" + netconfServerDetails.getDeviceId() + "-" + config.getVendorName());\r
-    eventHeader.setEventType(config.getPnfRegEventType());\r
-    eventHeader.setLastEpochMicrosec(System.currentTimeMillis());\r
-\r
-    eventHeader.setPriority("High");\r
-    eventHeader.setSequence(0);\r
-\r
-    if (netconfServerDetails.getEnodeBName() == null) {\r
-      eventHeader.setReportingEntityName(netconfServerDetails.getDeviceId());\r
-      eventHeader.setReportingEntityId(netconfServerDetails.getDeviceId());\r
-      eventHeader.setSourceId(netconfServerDetails.getDeviceId());\r
-      eventHeader.setSourceName(netconfServerDetails.getDeviceId());\r
-    } else {\r
-      eventHeader.setReportingEntityName(netconfServerDetails.getEnodeBName());\r
-      eventHeader.setSourceName(netconfServerDetails.getEnodeBName());\r
-\r
-      eventHeader.setReportingEntityId(netconfServerDetails.getDeviceId());\r
-      eventHeader.setSourceId(netconfServerDetails.getDeviceId());\r
-    }\r
-\r
-    eventHeader.setStartEpochMicrosec(System.currentTimeMillis()*1000);\r
-    eventHeader.setVersion(config.getEventVersion());\r
-    eventHeader.setNfNamingCode("");\r
-    eventHeader.setNfcNamingCode("");\r
-    eventHeader.setNfVendorName(config.getVendorName());\r
-    eventHeader.setVesEventListenerVersion(config.getVesVersion());\r
-    regEvent.setCommonEventHeader(eventHeader);\r
-    PnfRegEventFields pnfRegistrationFields = new PnfRegEventFields();\r
-    regEvent.setPnfRegistrationFields(\r
-        populatePnfRegFeilds(netconfServerDetails, pnfRegistrationFields));\r
-    logger.debug("Converting Notification to VES pnfevent completed");\r
-    return regEvent;\r
-  }\r
-\r
-  private PnfRegEventFields populatePnfRegFeilds(NetConfServerDetails netconfServerDetails,\r
-      PnfRegEventFields pnfRegistrationFields) {\r
-\r
-    pnfRegistrationFields.setSerialNumber(netconfServerDetails.getDeviceId());\r
-    pnfRegistrationFields.setPnfRegistrationFieldsVersion(config.getPnfFeildVersion());\r
-    pnfRegistrationFields.setMacAddress(netconfServerDetails.getDeviceId());\r
-    pnfRegistrationFields.setVendorName(config.getVendorName());\r
-    pnfRegistrationFields.setSoftwareVersion(netconfServerDetails.getSwVersion());\r
-    PnfRegEventAdditionalFeilds additionalFields = new PnfRegEventAdditionalFeilds();\r
-\r
-    pnfRegistrationFields.setOamV4IpAddress(netconfServerDetails.getListenAddress());\r
-    // TODO: since not supporting 1pv6 we are configuring empty value\r
-    pnfRegistrationFields.setOamV6IpAddress("");\r
-\r
-    pnfRegistrationFields.setManufactureDate("");\r
-    pnfRegistrationFields.setUnitType(config.getUnitType());\r
-    pnfRegistrationFields.setUnitFamily(config.getUnitFamily());\r
-    pnfRegistrationFields.setLastServiceDate(new SimpleDateFormat("ddMMyyyy").format(new Date()));\r
-    additionalFields.setOamPort(netconfServerDetails.getListenPort());\r
-    additionalFields.setProtocol("SSH");\r
-    additionalFields.setUsername(SSH_USERNAME);\r
-    additionalFields.setPassword(SSH_PSSWORD);\r
-    additionalFields.setReconnectOnChangedSchema(Boolean.FALSE.toString());\r
-    additionalFields.setSleepfactor("1.5");\r
-    additionalFields.setTcpOnly(Boolean.FALSE.toString());\r
-    additionalFields.setConnectionTimeout("20000");\r
-    additionalFields.setMaxConnectionAttempts("100");\r
-    additionalFields.setBetweenAttemptsTimeout("2000");\r
-    additionalFields.setKeepaliveDelay("120");\r
-\r
-    pnfRegistrationFields.setAdditionalFields(additionalFields);\r
-\r
-    return pnfRegistrationFields;\r
-\r
-  }\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.vesagent.controller;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+import org.commscope.tr069adapter.acs.common.DeviceInform;
+import org.commscope.tr069adapter.acs.common.ParameterDTO;
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;
+import org.commscope.tr069adapter.mapper.model.VESNotification;
+import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;
+import org.commscope.tr069adapter.vesagent.VesConfiguration;
+import org.commscope.tr069adapter.vesagent.fault.Parser;
+import org.commscope.tr069adapter.vesagent.http.HttpRequestSender;
+import org.commscope.tr069adapter.vesagent.model.CommonEventHeader;
+import org.commscope.tr069adapter.vesagent.model.Event;
+import org.commscope.tr069adapter.vesagent.model.EventMessage;
+import org.commscope.tr069adapter.vesagent.model.PnfRegEventAdditionalFeilds;
+import org.commscope.tr069adapter.vesagent.model.PnfRegEventFields;
+import org.commscope.tr069adapter.vesagent.util.EventUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PnfRegMappingHandler {
+  private static final Logger logger = LoggerFactory.getLogger(PnfRegMappingHandler.class);
+  public static final String SSH_USERNAME = "netconf";
+  public static final String SSH_PSSWORD = "netconf";
+
+  @Autowired
+  VesConfiguration config;
+
+  @Autowired
+  HttpRequestSender sender;
+
+  public VESNotificationResponse handlePnfRegNotification(VESNotification vesNoti)
+      throws JsonProcessingException {
+    Event event = convertNotificationToVESEvent(vesNoti.getDevnotification(),
+        vesNoti.getNetconfDetails(), vesNoti.geteNodeBName(), vesNoti.getNetconfParameters());
+    if (null != event) {
+      EventMessage evMsg = new EventMessage();
+      evMsg.setEvent(event);
+
+      ObjectMapper mapper = new ObjectMapper();
+
+      String requestBody = mapper.writeValueAsString(evMsg);
+      if (requestBody.isEmpty()) {
+        logger.debug("VES Event body is empty");
+      }
+      logger.debug("VES message for PnfRegistration : {}", requestBody);
+      String url = config.getPnfRegVesUrl();
+      return sender.postRequest(url, requestBody);
+    } else {
+      return new VESNotificationResponse(-1,
+          "unable to prepare ves event due to insufficient data");
+    }
+  }
+
+  public VESNotificationResponse handlePnfRegNotificationOnRestart(VESNotification vesNoti)
+      throws JsonProcessingException {
+    Event event = convertNotificationToVESEventOnRestart(vesNoti.getNetconfDetails());
+
+    EventMessage evMsg = new EventMessage();
+    evMsg.setEvent(event);
+
+    ObjectMapper mapper = new ObjectMapper();
+
+    String requestBody = mapper.writeValueAsString(evMsg);
+    if (requestBody.isEmpty()) {
+      logger.debug("VES Event body is empty");
+    }
+
+    String url = config.getPnfRegVesUrl();
+    return sender.postRequest(url, requestBody);
+  }
+
+  Event convertNotificationToVESEvent(DeviceInform notification,
+      NetConfServerDetails netconfServerDetails, String eNodeBName,
+      List<ParameterDTO> netconfParameters) {
+    logger.debug("Converting Notification to VES pnfevent started");
+    Parser parser = new Parser();
+
+
+    Event regEvent = new Event();
+    CommonEventHeader eventHeader = new CommonEventHeader();
+
+    eventHeader.setDomain("pnfRegistration");
+    eventHeader.setEventId(
+        "PnfReg" + notification.getDeviceDetails().getDeviceId() + System.currentTimeMillis());
+    eventHeader.setEventName("pnfReg_" + notification.getDeviceDetails().getProductClass() + "-"
+        + config.getVendorName());
+    eventHeader.setEventType(config.getPnfRegEventType());
+    eventHeader.setPriority("High");
+    EventUtil.populateEventHeaderFields(eventHeader, notification, eNodeBName, config);
+    regEvent.setCommonEventHeader(eventHeader);
+
+    PnfRegEventFields pnfRegistrationFields =
+        parser.parseNotificationParams(notification.getParameters());
+    populatePnfRegFeilds(netconfServerDetails, pnfRegistrationFields, netconfParameters);
+    pnfRegistrationFields.setModelNumber(notification.getDeviceDetails().getProductClass());
+
+    regEvent.setPnfRegistrationFields(pnfRegistrationFields);
+    logger.debug("Converting Notification to VES pnfevent completed");
+    return regEvent;
+  }
+
+  Event convertNotificationToVESEventOnRestart(NetConfServerDetails netconfServerDetails) {
+    logger.debug("Converting Notification to VES pnfevent started");
+
+    Event regEvent = new Event();
+    CommonEventHeader eventHeader = new CommonEventHeader();
+
+    if (null == netconfServerDetails) {
+      logger.error("netconf server details as received as null");
+      return null;
+    }
+    eventHeader.setDomain("pnfRegistration");
+    eventHeader
+        .setEventId("PnfReg" + netconfServerDetails.getDeviceId() + System.currentTimeMillis());
+    eventHeader.setEventName(
+        "pnfReg_" + netconfServerDetails.getDeviceId() + "-" + config.getVendorName());
+    eventHeader.setEventType(config.getPnfRegEventType());
+    eventHeader.setLastEpochMicrosec(System.currentTimeMillis());
+
+    eventHeader.setPriority("High");
+    eventHeader.setSequence(0);
+
+    if (netconfServerDetails.getEnodeBName() == null) {
+      eventHeader.setReportingEntityName(netconfServerDetails.getDeviceId());
+      eventHeader.setReportingEntityId(netconfServerDetails.getDeviceId());
+      eventHeader.setSourceId(netconfServerDetails.getDeviceId());
+      eventHeader.setSourceName(netconfServerDetails.getDeviceId());
+    } else {
+      eventHeader.setReportingEntityName(netconfServerDetails.getEnodeBName());
+      eventHeader.setSourceName(netconfServerDetails.getEnodeBName());
+
+      eventHeader.setReportingEntityId(netconfServerDetails.getDeviceId());
+      eventHeader.setSourceId(netconfServerDetails.getDeviceId());
+    }
+
+    eventHeader.setStartEpochMicrosec(System.currentTimeMillis() * 1000);
+    eventHeader.setVersion(config.getEventVersion());
+    eventHeader.setNfNamingCode("");
+    eventHeader.setNfcNamingCode("");
+    eventHeader.setNfVendorName(config.getVendorName());
+    eventHeader.setVesEventListenerVersion(config.getVesVersion());
+    regEvent.setCommonEventHeader(eventHeader);
+    PnfRegEventFields pnfRegistrationFields = new PnfRegEventFields();
+    regEvent.setPnfRegistrationFields(
+        populatePnfRegFeilds(netconfServerDetails, pnfRegistrationFields, new ArrayList<>()));
+    logger.debug("Converting Notification to VES pnfevent completed");
+    return regEvent;
+  }
+
+  private PnfRegEventFields populatePnfRegFeilds(NetConfServerDetails netconfServerDetails,
+      PnfRegEventFields pnfRegistrationFields, List<ParameterDTO> netconfParameters) {
+
+    pnfRegistrationFields.setSerialNumber(netconfServerDetails.getDeviceId());
+    pnfRegistrationFields.setPnfRegistrationFieldsVersion(config.getPnfFeildVersion());
+    pnfRegistrationFields.setMacAddress(netconfServerDetails.getDeviceId());
+    pnfRegistrationFields.setVendorName(config.getVendorName());
+    pnfRegistrationFields.setSoftwareVersion(netconfServerDetails.getSwVersion());
+
+    pnfRegistrationFields.setOamV4IpAddress(netconfServerDetails.getListenAddress());
+    // TODO: since not supporting 1pv6 we are configuring empty value
+    pnfRegistrationFields.setOamV6IpAddress("");
+
+    pnfRegistrationFields.setManufactureDate("");
+    pnfRegistrationFields.setUnitType(config.getUnitType());
+    pnfRegistrationFields.setUnitFamily(config.getUnitFamily());
+    pnfRegistrationFields.setLastServiceDate(new SimpleDateFormat("ddMMyyyy").format(new Date()));
+
+    // Add additional attributes and device parameters to the VES message in additionalFields
+    HashMap<String, String> additionalFieldsMap = new HashMap<>();
+    PnfRegEventAdditionalFeilds additionalFields = new PnfRegEventAdditionalFeilds();
+    additionalFields.setOamPort(netconfServerDetails.getListenPort());
+    additionalFields.setProtocol("SSH");
+    additionalFields.setUsername(SSH_USERNAME);
+    additionalFields.setPassword(SSH_PSSWORD);
+    additionalFields.setReconnectOnChangedSchema(Boolean.FALSE.toString());
+    additionalFields.setSleepfactor("1.5");
+    additionalFields.setTcpOnly(Boolean.FALSE.toString());
+    additionalFields.setConnectionTimeout("20000");
+    additionalFields.setMaxConnectionAttempts("100");
+    additionalFields.setBetweenAttemptsTimeout("2000");
+    additionalFields.setKeepaliveDelay("120");
+
+    ObjectMapper mapper = new ObjectMapper();
+    String additionalFieldsString;
+    try {
+      additionalFieldsString = mapper.writeValueAsString(additionalFields);
+      HashMap<String, String> pnfAdditionalFieldsMap = new HashMap<>();
+      pnfAdditionalFieldsMap =
+          mapper.readValue(additionalFieldsString, pnfAdditionalFieldsMap.getClass());
+      additionalFieldsMap.putAll(pnfAdditionalFieldsMap);
+    } catch (JsonProcessingException e) {
+      logger.error("Failed to add pnf Reg Additional fields {}", e.getMessage());
+    }
+
+    if (null != netconfParameters) {
+      for (ParameterDTO param : netconfParameters) {
+        additionalFieldsMap.put(param.getParamName(), param.getParamValue());
+      }
+    }
+
+    pnfRegistrationFields.setAdditionalFields(additionalFieldsMap);
+    return pnfRegistrationFields;
+
+  }
+
+}