Device Software version management
[oam/tr069-adapter.git] / mapper / src / main / java / org / commscope / tr069adapter / mapper / acs / impl / PnPPreProvisioningHandler.java
index b6327ec..3858394 100644 (file)
@@ -22,14 +22,11 @@ import java.util.ArrayList;
 import java.util.Iterator;\r
 import java.util.List;\r
 import java.util.Map;\r
-\r
 import org.commscope.tr069adapter.acs.common.DeviceInform;\r
 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
 import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
-import org.commscope.tr069adapter.acs.common.OperationOptions;\r
 import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
 import org.commscope.tr069adapter.acs.common.dto.ConfigurationData;\r
-import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;\r
 import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;\r
 import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;\r
 import org.commscope.tr069adapter.acs.common.inform.BootInform;\r
@@ -38,11 +35,18 @@ import org.commscope.tr069adapter.mapper.MOMetaData;
 import org.commscope.tr069adapter.mapper.MapperConfigProperties;\r
 import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;\r
 import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;\r
+import org.commscope.tr069adapter.mapper.util.NetconfToTr069MapperUtil;\r
 import org.slf4j.Logger;\r
 import org.slf4j.LoggerFactory;\r
 import org.slf4j.MDC;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.http.HttpEntity;\r
+import org.springframework.http.HttpHeaders;\r
+import org.springframework.http.MediaType;\r
+import org.springframework.http.ResponseEntity;\r
 import org.springframework.stereotype.Component;\r
+import org.springframework.util.LinkedMultiValueMap;\r
+import org.springframework.util.MultiValueMap;\r
 import org.springframework.util.StringUtils;\r
 import org.springframework.web.client.RestTemplate;\r
 \r
@@ -88,7 +92,9 @@ public class PnPPreProvisioningHandler {
         deviceId = bootstrapNotification.getDeviceDetails().getDeviceId();\r
         MDC.put(clientString, deviceId);\r
         logger.info("Bootstrap notification received");\r
-        performPreProvisioning(deviceId, false);\r
+        performPreProvisioning(deviceId,\r
+            bootstrapNotification.getDeviceDetails().getSoftwareVersion(),\r
+            bootstrapNotification.getDeviceDetails().getHardwareVersion(), false);\r
 \r
       } else if (notification instanceof BootInform) {\r
         BootInform bootNotification = (BootInform) notification;\r
@@ -96,7 +102,8 @@ public class PnPPreProvisioningHandler {
         MDC.put(clientString, deviceId);\r
         logger.info("Boot notification received");\r
 \r
-        performPreProvisioning(deviceId, true);\r
+        performPreProvisioning(deviceId, bootNotification.getDeviceDetails().getSoftwareVersion(),\r
+            bootNotification.getDeviceDetails().getHardwareVersion(), true);\r
       }\r
 \r
       logger.debug("Successfully completed provisioning of PnP mandatory parameters");\r
@@ -109,9 +116,10 @@ public class PnPPreProvisioningHandler {
    * @param deviceId\r
    * @param isBoot\r
    */\r
-  private void performPreProvisioning(String deviceId, boolean isBoot) {\r
+  private void performPreProvisioning(String deviceId, String swVersion, String hwVersion,\r
+      boolean isBoot) {\r
     List<DeviceRPCRequest> deviceRPCRequestList =\r
-        prepareNBIDeviceOperationrequest(deviceId, isBoot);\r
+        prepareNBIDeviceOperationrequest(deviceId, swVersion, hwVersion, isBoot);\r
     if (deviceRPCRequestList.isEmpty()) {\r
       logger.debug("No Operation requests exists to perform pre provision on the device");\r
       return;\r
@@ -123,9 +131,8 @@ public class PnPPreProvisioningHandler {
       DeviceRPCResponse deviceRPCResponse = syncHandler.performDeviceOperation(deviceRPCRequest);\r
       logger.debug("Received Provisioning Operation result");\r
       if (deviceRPCResponse == null || !StringUtils.isEmpty(deviceRPCResponse.getFaultString())) {\r
-        logger.error("Device operation failed, Reason: {}",\r
-            ((deviceRPCResponse == null) ? "Null Operation result"\r
-                : deviceRPCResponse.getFaultString()));\r
+        logger.error("Device operation failed, Reason: {}", ((deviceRPCResponse == null)\r
+            ? "Null Operation result" : deviceRPCResponse.getFaultString()));\r
         isMandatoryProvFailed = true;\r
         break;\r
       }\r
@@ -157,9 +164,8 @@ public class PnPPreProvisioningHandler {
       }\r
       DeviceRPCResponse deviceRPCResponse = syncHandler.performDeviceOperation(adminDownOpRequest);\r
       if (deviceRPCResponse == null || !StringUtils.isEmpty(deviceRPCResponse.getFaultString())) {\r
-        logger.error("Device operation failed, Reason: {}",\r
-            ((deviceRPCResponse == null) ? "Null Operation result"\r
-                : deviceRPCResponse.getFaultString()));\r
+        logger.error("Device operation failed, Reason: {}", ((deviceRPCResponse == null)\r
+            ? "Null Operation result" : deviceRPCResponse.getFaultString()));\r
       }\r
     }\r
   }\r
@@ -169,11 +175,12 @@ public class PnPPreProvisioningHandler {
    * @param isBoot\r
    * @return\r
    */\r
-  private List<DeviceRPCRequest> prepareNBIDeviceOperationrequest(String deviceId, boolean isBoot) {\r
+  private List<DeviceRPCRequest> prepareNBIDeviceOperationrequest(String deviceId, String swVersion,\r
+      String hwVersion, boolean isBoot) {\r
     logger.debug("Preparing the NBI Device Operation Request");\r
     List<DeviceRPCRequest> deviceRPCRequestList = new ArrayList<>();\r
 \r
-    ConfigurationData configData = getDeviceConfigurationData(deviceId);\r
+    ConfigurationData configData = getDeviceConfigurationData(deviceId, swVersion, hwVersion);\r
     if (configData == null || configData.getParameterMONameValueMap().isEmpty()) {\r
       logger.debug("No configuration exists for the device");\r
       return deviceRPCRequestList;\r
@@ -186,7 +193,7 @@ public class PnPPreProvisioningHandler {
     while (iter.hasNext()) {\r
       String paramName = iter.next();\r
       String paramValue = paramNameValueMap.get(paramName);\r
-      MOMetaData moMetaData = moMetaDataUtil.getMetaDataByTR69Name(paramName);\r
+      MOMetaData moMetaData = moMetaDataUtil.getMetaDataByTR69Name(paramName, swVersion, hwVersion);\r
       if ((isBoot && !paramName.endsWith(ADMIN_STATE)) || moMetaData == null)\r
         continue;\r
       ParameterDTO parameterDTO = getParameterDTO(paramName, paramValue, moMetaData);\r
@@ -238,30 +245,37 @@ public class PnPPreProvisioningHandler {
   private DeviceRPCRequest createNBIOperationRequest(String deviceId, List<ParameterDTO> params) {\r
     TR069OperationDetails opDetails = new TR069OperationDetails();\r
     opDetails.setOpCode(TR069OperationCode.SET_PARAMETER_VALUES);\r
-    opDetails.setParmeters(params);\r
-\r
-    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
-    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
-    tr069DeviceDetails.setDeviceId(deviceId);\r
-    deviceRPCRequest.setOpDetails(opDetails);\r
-    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
-    OperationOptions options = new OperationOptions();\r
-    options.setExecutionTimeout(300l);\r
-    deviceRPCRequest.setOptions(options);\r
-\r
-    return deviceRPCRequest;\r
+\r
+    return NetconfToTr069MapperUtil.handleParamsOperation(params, opDetails, deviceId);\r
+\r
   }\r
 \r
   /**\r
    * @param deviceId\r
    * @return\r
    */\r
-  private ConfigurationData getDeviceConfigurationData(String deviceId) {\r
+  private ConfigurationData getDeviceConfigurationData(String deviceId, String swVersion,\r
+      String hwVersion) {\r
     String configDBURI = getConfigDBURI();\r
-    logger.debug("Device Configuration to be fetched from Config DB URI: {}", configDBURI);\r
+    logger.debug(\r
+        "Device Configuration to be fetched from Config DB URI: {}, macId {}, swVersion {}, hwVersion {}",\r
+        configDBURI, deviceId, swVersion, hwVersion);\r
     ConfigurationData configData = null;\r
     try {\r
-      configData = restTemplate.getForObject(configDBURI + deviceId, ConfigurationData.class);\r
+\r
+      MultiValueMap<String, String> uriParams = new LinkedMultiValueMap<>();\r
+      uriParams.add("macId", deviceId);\r
+      uriParams.add("swVersion", swVersion);\r
+      uriParams.add("hwVersion", hwVersion);\r
+      HttpHeaders headers = new HttpHeaders();\r
+      headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);\r
+      final HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(uriParams, headers);\r
+\r
+      ResponseEntity<ConfigurationData> res =\r
+          restTemplate.postForEntity(configDBURI, entity, ConfigurationData.class);\r
+      configData = res.getBody();\r
+      logger.debug("Successfully retrived config data for device id{} data {}", deviceId,\r
+          configData);\r
     } catch (Exception e) {\r
       logger.error("An exception occurred to get the initial device configuration, Reason: {}",\r
           e.getMessage());\r
@@ -296,10 +310,10 @@ public class PnPPreProvisioningHandler {
    * \r
    * @return String\r
    */\r
-  public String getEnodeBName(String deviceId) {\r
+  public String getEnodeBName(String deviceId, String swVersion, String hwVersion) {\r
     String eNodeBName = null;\r
     if (isPreConfigureOnPnPEnabled()) {\r
-      ConfigurationData configData = getDeviceConfigurationData(deviceId);\r
+      ConfigurationData configData = getDeviceConfigurationData(deviceId, swVersion, hwVersion);\r
       if (configData == null || configData.getParameterMONameValueMap().isEmpty()) {\r
         logger.debug("No configuration exists for the device");\r
         return eNodeBName;\r