Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / mapper / src / main / java / org / commscope / tr069adapter / mapper / acs / impl / PnPPreProvisioningHandler.java
index a3a1fd5..6cc9d7e 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.mapper.acs.impl;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\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.ParameterDTO;\r
-import org.commscope.tr069adapter.acs.common.dto.ConfigurationData;\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
-import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;\r
-import org.commscope.tr069adapter.mapper.MOMetaData;\r
-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
-@Component\r
-public class PnPPreProvisioningHandler {\r
-\r
-  private static final Logger logger = LoggerFactory.getLogger(PnPPreProvisioningHandler.class);\r
-\r
-  private static String clientString = "client";\r
-  private static final String ADMIN_STATE = "AdminState";\r
-  private static final String ENODEB_NAME = "X_0005B9_eNBName";\r
-\r
-  @Autowired\r
-  SynchronizedRequestHandler syncHandler;\r
-\r
-  @Autowired\r
-  MOMetaDataUtil moMetaDataUtil;\r
-\r
-  @Autowired\r
-  MapperConfigProperties config;\r
-\r
-  private RestTemplate restTemplate = new RestTemplate();\r
-\r
-  /**\r
-   * @param notification\r
-   */\r
-  public void onDeviceNotification(DeviceInform notification) {\r
-    String deviceId = null;\r
-    try {\r
-      if (notification instanceof BootstrapInform || notification instanceof BootInform) {\r
-        logger.debug("Checking whether the PnP pre-configuration is enabled");\r
-        if (isPreConfigureOnPnPEnabled()) {\r
-          logger.info(\r
-              "Pre-configuration during Bootstrap or Boot is enabled, hence the configuration imported in Config DB shall be provisioned to the device");\r
-        } else {\r
-          logger.debug("Pre-configuration on PnP is disabled!!!");\r
-          return;\r
-        }\r
-      }\r
-\r
-      if (notification instanceof BootstrapInform) {\r
-        BootstrapInform bootstrapNotification = (BootstrapInform) notification;\r
-        deviceId = bootstrapNotification.getDeviceDetails().getDeviceId();\r
-        MDC.put(clientString, deviceId);\r
-        logger.info("Bootstrap notification received");\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
-        deviceId = bootNotification.getDeviceDetails().getDeviceId();\r
-        MDC.put(clientString, deviceId);\r
-        logger.info("Boot notification received");\r
-\r
-        performPreProvisioning(deviceId, bootNotification.getDeviceDetails().getSoftwareVersion(),\r
-            bootNotification.getDeviceDetails().getHardwareVersion(), true);\r
-      }\r
-\r
-      logger.debug("Successfully completed provisioning of PnP mandatory parameters");\r
-    } finally {\r
-      MDC.remove(clientString);\r
-    }\r
-  }\r
-\r
-  /**\r
-   * @param deviceId\r
-   * @param isBoot\r
-   */\r
-  private void performPreProvisioning(String deviceId, String swVersion, String hwVersion,\r
-      boolean isBoot) {\r
-    List<DeviceRPCRequest> deviceRPCRequestList =\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
-    }\r
-\r
-    boolean isMandatoryProvFailed = false;\r
-    for (DeviceRPCRequest deviceRPCRequest : deviceRPCRequestList) {\r
-      logger.info("Performing PROVISION operation");\r
-      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: {}", deviceRPCResponse.getFaultString());\r
-        isMandatoryProvFailed = true;\r
-        break;\r
-      }\r
-\r
-      logger.debug("Provisioning is successful");\r
-    }\r
-\r
-    if (isMandatoryProvFailed) {\r
-      logger\r
-          .debug("Mandatory provisioning has failed, hence provisioning Admin down on the device");\r
-      provisionAdminDown(deviceRPCRequestList);\r
-      logger.debug("AdminDown Provisioning is successful");\r
-    }\r
-  }\r
-\r
-  private void provisionAdminDown(List<DeviceRPCRequest> deviceRPCRequestList) {\r
-    DeviceRPCRequest adminDownOpRequest = null;\r
-    for (DeviceRPCRequest nbiDeviceOperationRequest : deviceRPCRequestList) {\r
-      ParameterDTO param = nbiDeviceOperationRequest.getOpDetails().getParmeters().get(0);\r
-      if (param.getParamName().endsWith(ADMIN_STATE)) {\r
-        adminDownOpRequest = nbiDeviceOperationRequest;\r
-        break;\r
-      }\r
-    }\r
-    if (adminDownOpRequest != null) {\r
-      List<ParameterDTO> adminDownParams = adminDownOpRequest.getOpDetails().getParmeters();\r
-      for (ParameterDTO adminDownParam : adminDownParams) {\r
-        adminDownParam.setParamValue("0");\r
-      }\r
-      DeviceRPCResponse deviceRPCResponse = syncHandler.performDeviceOperation(adminDownOpRequest);\r
-      if (deviceRPCResponse == null || !StringUtils.isEmpty(deviceRPCResponse.getFaultString())) {\r
-        logger.error("Device operation failed, Reason: {}", ((deviceRPCResponse == null)\r
-            ? "Null Operation result" : deviceRPCResponse.getFaultString()));\r
-      }\r
-    }\r
-  }\r
-\r
-  /**\r
-   * @param deviceId\r
-   * @param isBoot\r
-   * @return\r
-   */\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, swVersion, hwVersion);\r
-    if (configData == null || configData.getParameterMONameValueMap().isEmpty()) {\r
-      logger.debug("No configuration exists for the device");\r
-      return deviceRPCRequestList;\r
-    }\r
-\r
-    List<ParameterDTO> configParams = new ArrayList<>();\r
-    List<ParameterDTO> adminStateParams = new ArrayList<>();\r
-    Map<String, String> paramNameValueMap = configData.getParameterMONameValueMap();\r
-    Iterator<String> iter = paramNameValueMap.keySet().iterator();\r
-    while (iter.hasNext()) {\r
-      String paramName = iter.next();\r
-      String paramValue = paramNameValueMap.get(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
-\r
-      if (paramName.endsWith(ADMIN_STATE)) {\r
-        adminStateParams.add(parameterDTO);\r
-      } else {\r
-        configParams.add(parameterDTO);\r
-      }\r
-      logger.debug("Param -> {} Param Value: {}", paramName, paramValue);\r
-    }\r
-\r
-    if (configParams.isEmpty() && adminStateParams.isEmpty()) {\r
-      logger.debug("Empty parameters list from config db, hence not performing pre-provision");\r
-      return deviceRPCRequestList;\r
-    }\r
-\r
-    if (!configParams.isEmpty()) {\r
-      deviceRPCRequestList.add(createNBIOperationRequest(deviceId, configParams));\r
-    }\r
-\r
-    if (!adminStateParams.isEmpty()) {\r
-      deviceRPCRequestList.add(createNBIOperationRequest(deviceId, adminStateParams));\r
-    }\r
-\r
-    return deviceRPCRequestList;\r
-  }\r
-\r
-  private ParameterDTO getParameterDTO(String paramName, String paramValue, MOMetaData moMetaData) {\r
-    String dataType = moMetaData.getDataType();\r
-    if (dataType.equals("boolean")) {\r
-      if (paramValue.equalsIgnoreCase("true")) {\r
-        paramValue = "1";\r
-      } else if (paramValue.equalsIgnoreCase("false")) {\r
-        paramValue = "0";\r
-      }\r
-    }\r
-    ParameterDTO parameterDTO = new ParameterDTO(paramName, paramValue);\r
-    parameterDTO.setDataType(dataType);\r
-\r
-    return parameterDTO;\r
-  }\r
-\r
-  /**\r
-   * @param deviceId\r
-   * @param params\r
-   * @return\r
-   */\r
-  private DeviceRPCRequest createNBIOperationRequest(String deviceId, List<ParameterDTO> params) {\r
-    TR069OperationDetails opDetails = new TR069OperationDetails();\r
-    opDetails.setOpCode(TR069OperationCode.SET_PARAMETER_VALUES);\r
-\r
-    return NetconfToTr069MapperUtil.handleParamsOperation(params, opDetails, deviceId);\r
-\r
-  }\r
-\r
-  /**\r
-   * @param deviceId\r
-   * @return\r
-   */\r
-  private ConfigurationData getDeviceConfigurationData(String deviceId, String swVersion,\r
-      String hwVersion) {\r
-    String configDBURI = getConfigDBURI();\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
-\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
-    }\r
-    return configData;\r
-  }\r
-\r
-  /**\r
-   * @return\r
-   */\r
-  private boolean isPreConfigureOnPnPEnabled() {\r
-    boolean isEnabled = false;\r
-    String preConfigureOnPnP = config.getPreConfigureOnPNP();\r
-    if (preConfigureOnPnP != null && ("true".equalsIgnoreCase(preConfigureOnPnP)\r
-        || "false".equalsIgnoreCase(preConfigureOnPnP))) {\r
-      isEnabled = Boolean.valueOf(preConfigureOnPnP);\r
-    }\r
-\r
-    return isEnabled;\r
-  }\r
-\r
-  /**\r
-   * @return\r
-   */\r
-  private String getConfigDBURI() {\r
-    return config.getConfigDBUri();\r
-\r
-  }\r
-\r
-  /**\r
-   * it will return the eNodBName if the configuration is imported\r
-   * \r
-   * @return String\r
-   */\r
-  public String getEnodeBName(String deviceId, String swVersion, String hwVersion) {\r
-    String eNodeBName = null;\r
-    if (isPreConfigureOnPnPEnabled()) {\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
-      }\r
-\r
-      Map<String, String> paramNameValueMap = configData.getParameterMONameValueMap();\r
-      Iterator<String> iter = paramNameValueMap.keySet().iterator();\r
-      while (iter.hasNext()) {\r
-        String paramName = iter.next();\r
-        if (paramName.endsWith(ENODEB_NAME)) {\r
-          eNodeBName = paramNameValueMap.get(paramName);\r
-          break;\r
-        }\r
-      }\r
-    }\r
-    return eNodeBName;\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.mapper.acs.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.commscope.tr069adapter.acs.common.DeviceInform;
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;
+import org.commscope.tr069adapter.acs.common.ParameterDTO;
+import org.commscope.tr069adapter.acs.common.dto.ConfigurationData;
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;
+import org.commscope.tr069adapter.acs.common.inform.BootInform;
+import org.commscope.tr069adapter.acs.common.inform.BootstrapInform;
+import org.commscope.tr069adapter.mapper.MOMetaData;
+import org.commscope.tr069adapter.mapper.MapperConfigProperties;
+import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;
+import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;
+import org.commscope.tr069adapter.mapper.util.NetconfToTr069MapperUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.util.StringUtils;
+import org.springframework.web.client.RestTemplate;
+
+@Component
+public class PnPPreProvisioningHandler {
+
+  private static final Logger logger = LoggerFactory.getLogger(PnPPreProvisioningHandler.class);
+
+  private static String clientString = "client";
+  private static final String ADMIN_STATE = "AdminState";
+  private static final String ENODEB_NAME = "X_0005B9_eNBName";
+
+  @Autowired
+  SynchronizedRequestHandler syncHandler;
+
+  @Autowired
+  MOMetaDataUtil moMetaDataUtil;
+
+  @Autowired
+  MapperConfigProperties config;
+
+  private RestTemplate restTemplate = new RestTemplate();
+
+  /**
+   * @param notification
+   */
+  public void onDeviceNotification(DeviceInform notification) {
+    String deviceId = null;
+    try {
+      if (notification instanceof BootstrapInform || notification instanceof BootInform) {
+        logger.debug("Checking whether the PnP pre-configuration is enabled");
+        if (isPreConfigureOnPnPEnabled()) {
+          logger.info(
+              "Pre-configuration during Bootstrap or Boot is enabled, hence the configuration imported in Config DB shall be provisioned to the device");
+        } else {
+          logger.debug("Pre-configuration on PnP is disabled!!!");
+          return;
+        }
+      }
+
+      if (notification instanceof BootstrapInform) {
+        BootstrapInform bootstrapNotification = (BootstrapInform) notification;
+        deviceId = bootstrapNotification.getDeviceDetails().getDeviceId();
+        MDC.put(clientString, deviceId);
+        logger.info("Bootstrap notification received");
+        performPreProvisioning(deviceId,
+            bootstrapNotification.getDeviceDetails().getSoftwareVersion(),
+            bootstrapNotification.getDeviceDetails().getHardwareVersion(), false);
+
+      } else if (notification instanceof BootInform) {
+        BootInform bootNotification = (BootInform) notification;
+        deviceId = bootNotification.getDeviceDetails().getDeviceId();
+        MDC.put(clientString, deviceId);
+        logger.info("Boot notification received");
+
+        performPreProvisioning(deviceId, bootNotification.getDeviceDetails().getSoftwareVersion(),
+            bootNotification.getDeviceDetails().getHardwareVersion(), true);
+      }
+
+      logger.debug("Successfully completed provisioning of PnP mandatory parameters");
+    } finally {
+      MDC.remove(clientString);
+    }
+  }
+
+  /**
+   * @param deviceId
+   * @param isBoot
+   */
+  private void performPreProvisioning(String deviceId, String swVersion, String hwVersion,
+      boolean isBoot) {
+    List<DeviceRPCRequest> deviceRPCRequestList =
+        prepareNBIDeviceOperationrequest(deviceId, swVersion, hwVersion, isBoot);
+    if (deviceRPCRequestList.isEmpty()) {
+      logger.debug("No Operation requests exists to perform pre provision on the device");
+      return;
+    }
+
+    boolean isMandatoryProvFailed = false;
+    for (DeviceRPCRequest deviceRPCRequest : deviceRPCRequestList) {
+      logger.info("Performing PROVISION operation");
+      DeviceRPCResponse deviceRPCResponse = syncHandler.performDeviceOperation(deviceRPCRequest);
+      logger.debug("Received Provisioning Operation result");
+      if (deviceRPCResponse != null && !StringUtils.isEmpty(deviceRPCResponse.getFaultString())) {
+        logger.error("Device operation failed, Reason: {}", deviceRPCResponse.getFaultString());
+        isMandatoryProvFailed = true;
+        break;
+      }
+
+      logger.debug("Provisioning is successful");
+    }
+
+    if (isMandatoryProvFailed) {
+      logger
+          .debug("Mandatory provisioning has failed, hence provisioning Admin down on the device");
+      provisionAdminDown(deviceRPCRequestList);
+      logger.debug("AdminDown Provisioning is successful");
+    }
+  }
+
+  private void provisionAdminDown(List<DeviceRPCRequest> deviceRPCRequestList) {
+    DeviceRPCRequest adminDownOpRequest = null;
+    for (DeviceRPCRequest nbiDeviceOperationRequest : deviceRPCRequestList) {
+      ParameterDTO param = nbiDeviceOperationRequest.getOpDetails().getParmeters().get(0);
+      if (param.getParamName().endsWith(ADMIN_STATE)) {
+        adminDownOpRequest = nbiDeviceOperationRequest;
+        break;
+      }
+    }
+    if (adminDownOpRequest != null) {
+      List<ParameterDTO> adminDownParams = adminDownOpRequest.getOpDetails().getParmeters();
+      for (ParameterDTO adminDownParam : adminDownParams) {
+        adminDownParam.setParamValue("0");
+      }
+      DeviceRPCResponse deviceRPCResponse = syncHandler.performDeviceOperation(adminDownOpRequest);
+      if (deviceRPCResponse == null || !StringUtils.isEmpty(deviceRPCResponse.getFaultString())) {
+        logger.error("Device operation failed, Reason: {}",
+            ((deviceRPCResponse == null) ? "Null Operation result"
+                : deviceRPCResponse.getFaultString()));
+      }
+    }
+  }
+
+  /**
+   * @param deviceId
+   * @param isBoot
+   * @return
+   */
+  private List<DeviceRPCRequest> prepareNBIDeviceOperationrequest(String deviceId, String swVersion,
+      String hwVersion, boolean isBoot) {
+    logger.debug("Preparing the NBI Device Operation Request");
+    List<DeviceRPCRequest> deviceRPCRequestList = new ArrayList<>();
+
+    ConfigurationData configData = getDeviceConfigurationData(deviceId, swVersion, hwVersion);
+    if (configData == null || configData.getParameterMONameValueMap().isEmpty()) {
+      logger.debug("No configuration exists for the device");
+      return deviceRPCRequestList;
+    }
+
+    List<ParameterDTO> configParams = new ArrayList<>();
+    List<ParameterDTO> adminStateParams = new ArrayList<>();
+    Map<String, String> paramNameValueMap = configData.getParameterMONameValueMap();
+    Iterator<String> iter = paramNameValueMap.keySet().iterator();
+    while (iter.hasNext()) {
+      String paramName = iter.next();
+      String paramValue = paramNameValueMap.get(paramName);
+      MOMetaData moMetaData = moMetaDataUtil.getMetaDataByTR69Name(paramName, swVersion, hwVersion);
+      if ((isBoot && !paramName.endsWith(ADMIN_STATE)) || moMetaData == null)
+        continue;
+      ParameterDTO parameterDTO = getParameterDTO(paramName, paramValue, moMetaData);
+
+      if (paramName.endsWith(ADMIN_STATE)) {
+        adminStateParams.add(parameterDTO);
+      } else {
+        configParams.add(parameterDTO);
+      }
+      logger.debug("Param -> {} Param Value: {}", paramName, paramValue);
+    }
+
+    if (configParams.isEmpty() && adminStateParams.isEmpty()) {
+      logger.debug("Empty parameters list from config db, hence not performing pre-provision");
+      return deviceRPCRequestList;
+    }
+
+    if (!configParams.isEmpty()) {
+      deviceRPCRequestList.add(createNBIOperationRequest(deviceId, configParams));
+    }
+
+    if (!adminStateParams.isEmpty()) {
+      deviceRPCRequestList.add(createNBIOperationRequest(deviceId, adminStateParams));
+    }
+
+    return deviceRPCRequestList;
+  }
+
+  private ParameterDTO getParameterDTO(String paramName, String paramValue, MOMetaData moMetaData) {
+    String dataType = moMetaData.getDataType();
+    if (dataType.equals("boolean")) {
+      if (paramValue.equalsIgnoreCase("true")) {
+        paramValue = "1";
+      } else if (paramValue.equalsIgnoreCase("false")) {
+        paramValue = "0";
+      }
+    }
+    ParameterDTO parameterDTO = new ParameterDTO(paramName, paramValue);
+    parameterDTO.setDataType(dataType);
+
+    return parameterDTO;
+  }
+
+  /**
+   * @param deviceId
+   * @param params
+   * @return
+   */
+  private DeviceRPCRequest createNBIOperationRequest(String deviceId, List<ParameterDTO> params) {
+    TR069OperationDetails opDetails = new TR069OperationDetails();
+    opDetails.setOpCode(TR069OperationCode.SET_PARAMETER_VALUES);
+
+    return NetconfToTr069MapperUtil.handleParamsOperation(params, opDetails, deviceId);
+
+  }
+
+  /**
+   * @param deviceId
+   * @return
+   */
+  private ConfigurationData getDeviceConfigurationData(String deviceId, String swVersion,
+      String hwVersion) {
+    String configDBURI = getConfigDBURI();
+    logger.debug(
+        "Device Configuration to be fetched from Config DB URI: {}, macId {}, swVersion {}, hwVersion {}",
+        configDBURI, deviceId, swVersion, hwVersion);
+    ConfigurationData configData = null;
+    try {
+
+      MultiValueMap<String, String> uriParams = new LinkedMultiValueMap<>();
+      uriParams.add("macId", deviceId);
+      uriParams.add("swVersion", swVersion);
+      uriParams.add("hwVersion", hwVersion);
+      HttpHeaders headers = new HttpHeaders();
+      headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+      final HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(uriParams, headers);
+
+      ResponseEntity<ConfigurationData> res =
+          restTemplate.postForEntity(configDBURI, entity, ConfigurationData.class);
+      configData = res.getBody();
+      logger.debug("Successfully retrived config data for device id{} data {}", deviceId,
+          configData);
+    } catch (Exception e) {
+      logger.error("An exception occurred to get the initial device configuration, Reason: {}",
+          e.getMessage());
+    }
+    return configData;
+  }
+
+  /**
+   * @return
+   */
+  private boolean isPreConfigureOnPnPEnabled() {
+    boolean isEnabled = false;
+    String preConfigureOnPnP = config.getPreConfigureOnPNP();
+    if (preConfigureOnPnP != null && ("true".equalsIgnoreCase(preConfigureOnPnP)
+        || "false".equalsIgnoreCase(preConfigureOnPnP))) {
+      isEnabled = Boolean.valueOf(preConfigureOnPnP);
+    }
+
+    return isEnabled;
+  }
+
+  /**
+   * @return
+   */
+  private String getConfigDBURI() {
+    return config.getConfigDBUri();
+
+  }
+
+  /**
+   * it will return the eNodBName if the configuration is imported
+   * 
+   * @return String
+   */
+  public String getEnodeBName(String deviceId, String swVersion, String hwVersion) {
+    String eNodeBName = null;
+    if (isPreConfigureOnPnPEnabled()) {
+      ConfigurationData configData = getDeviceConfigurationData(deviceId, swVersion, hwVersion);
+      if (configData == null || configData.getParameterMONameValueMap().isEmpty()) {
+        logger.debug("No configuration exists for the device");
+        return eNodeBName;
+      }
+
+      Map<String, String> paramNameValueMap = configData.getParameterMONameValueMap();
+      Iterator<String> iter = paramNameValueMap.keySet().iterator();
+      while (iter.hasNext()) {
+        String paramName = iter.next();
+        if (paramName.endsWith(ENODEB_NAME)) {
+          eNodeBName = paramNameValueMap.get(paramName);
+          break;
+        }
+      }
+    }
+    return eNodeBName;
+  }
+}