Device Software version management
[oam/tr069-adapter.git] / mapper / src / main / java / org / commscope / tr069adapter / mapper / acs / impl / PnPPreProvisioningHandler.java
index b7fee2d..3858394 100644 (file)
@@ -22,7 +22,6 @@ 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
@@ -41,7 +40,13 @@ import org.slf4j.Logger;
 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
@@ -87,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
@@ -95,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
@@ -108,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
@@ -122,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
@@ -156,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
@@ -168,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
@@ -185,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
@@ -246,12 +254,28 @@ public class PnPPreProvisioningHandler {
    * @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
@@ -286,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