Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / mapper / src / main / java / org / commscope / tr069adapter / mapper / netconf / impl / NetConfRequestHandlerImpl.java
index 9ae1196..53cae0f 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.netconf.impl;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import java.util.Map;\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.OperationResponse;\r
-import org.commscope.tr069adapter.acs.common.ParameterDTO;\r
-import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;\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.response.SetParameterValueResponse;\r
-import org.commscope.tr069adapter.mapper.MOMetaData;\r
-import org.commscope.tr069adapter.mapper.dao.DeviceOperationsDAO;\r
-import org.commscope.tr069adapter.mapper.entity.DeviceOperationDetails;\r
-import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;\r
-import org.commscope.tr069adapter.mapper.model.NetConfRequest;\r
-import org.commscope.tr069adapter.mapper.model.NetConfResponse;\r
-import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;\r
-import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;\r
-import org.commscope.tr069adapter.mapper.netconf.NetConfRequestHandler;\r
-import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;\r
-import org.commscope.tr069adapter.mapper.util.ErrorCodeUtil;\r
-import org.commscope.tr069adapter.mapper.util.FirwareUpgradeStatus;\r
-import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;\r
-import org.commscope.tr069adapter.mapper.util.MapperConstants;\r
-import org.commscope.tr069adapter.mapper.util.MapperValidator;\r
-import org.commscope.tr069adapter.mapper.util.NetconfToTr069MapperUtil;\r
-import org.commscope.tr069adapter.mapper.ves.VESNotificationSender;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.http.HttpStatus;\r
-import org.springframework.stereotype.Component;\r
-import org.springframework.util.StringUtils;\r
-import org.w3c.dom.Document;\r
-import org.w3c.dom.Element;\r
-\r
-@Component\r
-public class NetConfRequestHandlerImpl implements NetConfRequestHandler {\r
-\r
-  private static final Logger LOG = LoggerFactory.getLogger(NetConfRequestHandlerImpl.class);\r
-  private static final String BOOLEAN_TRUE_VALUE = "1";\r
-  private static final String BOOLEAN_FALSE_VALUE = "0";\r
-  private static final String BOOLEAN_DATA_TYPE = "boolean";\r
-\r
-  @Autowired\r
-  SynchronizedRequestHandler syncHandler;\r
-\r
-  @Autowired\r
-  NetconfToTr069MapperUtil mapperUtil;\r
-\r
-  @Autowired\r
-  MOMetaDataUtil metaDataUtil;\r
-\r
-  @Autowired\r
-  ErrorCodeUtil errorCodeUtil;\r
-\r
-  @Autowired\r
-  VESNotificationSender vesnotiSender;\r
-\r
-  @Autowired\r
-  DeviceOperationsDAO deviceOperDAO;\r
-\r
-  @Override\r
-  public NetConfResponse handleSetConfigRequest(NetConfRequest netConfRequest) {\r
-    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
-    NetConfResponse response = null;\r
-    DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil.prepareTR069Request(\r
-        netConfRequest.getDeviceId(), el, "config", TR069OperationCode.SET_PARAMETER_VALUES);\r
-\r
-    if (deviceRPCRequest == null) {\r
-      LOG.debug("There are no supported device parameters found for edit-config.");\r
-      return getEmptyResponse();\r
-    }\r
-    List<ParameterDTO> requestParams = deviceRPCRequest.getOpDetails().getParmeters();\r
-    List<ParameterDTO> filteredParams = new ArrayList<>();\r
-    List<ParameterDTO> vesRequestParams = new ArrayList<>();\r
-\r
-    if (null != requestParams) {\r
-      for (ParameterDTO param : requestParams) {\r
-        if (null == param.getParamValue() || StringUtils.isEmpty(param.getParamValue())) {\r
-          continue;\r
-        }\r
-        if (isVesNotificationRequest(param)) {\r
-          vesRequestParams.add(param);\r
-        }\r
-        filteredParams.add(param);\r
-      }\r
-      deviceRPCRequest.getOpDetails().setParmeters(filteredParams);\r
-    }\r
-\r
-    if (deviceRPCRequest.getOpDetails() == null\r
-        || deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {\r
-      LOG.debug("There are no device parameters found for edit-config.");\r
-      return getEmptyResponse();\r
-    } else if (deviceRPCRequest.getOpDetails() != null) {\r
-      deviceRPCRequest.getOpDetails()\r
-          .setParmeters(filteredSetParameters(deviceRPCRequest.getOpDetails().getParmeters(),\r
-              netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));\r
-      if (deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {\r
-        LOG.debug("There are no supported device parameters found for edit-config.");\r
-        return getEmptyResponse();\r
-      }\r
-    }\r
-\r
-    handleBooleanParametersReverse(deviceRPCRequest.getOpDetails().getParmeters(),\r
-        netConfRequest.getSwVersion(), netConfRequest.getHwVersion());\r
-    LOG.debug("Prepared NBI request for edit-config {}", deviceRPCRequest);\r
-\r
-    DeviceRPCResponse deviceRPCResponseVes = null;\r
-    List<ParameterDTO> allParamList = deviceRPCRequest.getOpDetails().getParmeters();\r
-\r
-    if (!vesRequestParams.isEmpty()) {\r
-      if (!MapperValidator.isCountDownTimerValid(vesRequestParams)) {\r
-        return getErrorResponse(MapperConstants.INVALID_PARAM_VAL_ERROR_CODE,\r
-            MapperConstants.INVALID_COUNT_DOWN_TIMER_MSG);\r
-      }\r
-\r
-      deviceRPCRequest.getOpDetails().setParmeters(vesRequestParams);\r
-      deviceRPCResponseVes = vesnotiSender.sendEditConfigNotification(deviceRPCRequest);\r
-\r
-      if (null == deviceRPCResponseVes) {\r
-        return getTimeOutResponse();\r
-      }\r
-    }\r
-\r
-    allParamList.removeAll(vesRequestParams);\r
-\r
-    DeviceRPCResponse deviceRPCResponseDevice = null;\r
-    if (null != allParamList && !allParamList.isEmpty()) {\r
-      deviceRPCRequest.getOpDetails().setParmeters(allParamList);\r
-      if (isAdminStateOverriden(allParamList)) {\r
-        deviceRPCRequest.getOpDetails().setOpCode(CustomOperationCode.CONFIGURE_MULTIPLE_OBJECTS);\r
-        TR069OperationDetails tr069OperationDetails =\r
-            (TR069OperationDetails) deviceRPCRequest.getOpDetails();\r
-        tr069OperationDetails.setModifyParamList(allParamList);\r
-        tr069OperationDetails.setSetParamList(null);\r
-\r
-        deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);\r
-        convertResposeToSPVResponse(deviceRPCResponseDevice);\r
-      } else {\r
-        deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);\r
-      }\r
-\r
-      if (null == deviceRPCResponseDevice) {\r
-        return getTimeOutResponse();\r
-      }\r
-    }\r
-\r
-    DeviceRPCResponse deviceRPCResponse =\r
-        mergeSetConfigDeviceRPCResponse(deviceRPCResponseVes, deviceRPCResponseDevice);\r
-    if (null == deviceRPCResponse) {\r
-      return getTimeOutResponse();\r
-    }\r
-    response = mapperUtil.getNetconfResponse(deviceRPCResponse, netConfRequest.getSwVersion(),\r
-        netConfRequest.getHwVersion(), false);\r
-    return response;\r
-  }\r
-\r
-  @Override\r
-  public NetConfResponse handleDelConfigRequest(NetConfRequest netConfRequest) {\r
-    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
-    NetConfResponse response = null;\r
-    DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(\r
-        netConfRequest.getDeviceId(), el, "config", TR069OperationCode.DELETE_OBJECT);\r
-\r
-    if (request == null) {\r
-      LOG.debug("There are no supported device parameters found for delete-config.");\r
-      return getEmptyResponse();\r
-    }\r
-\r
-    List<ParameterDTO> requestParams = request.getOpDetails().getParmeters();\r
-    List<ParameterDTO> filteredParams = new ArrayList<>();\r
-    if (null != requestParams) {\r
-      for (ParameterDTO param : requestParams) {\r
-        filteredParams.add(param);\r
-      }\r
-      request.getOpDetails().setParmeters(filteredParams);\r
-    }\r
-\r
-    if (request.getOpDetails() == null || request.getOpDetails().getParmeters().isEmpty()) {\r
-      LOG.debug("There are no device parameters found for delete-config.");\r
-      return getEmptyResponse();\r
-    } else if (request.getOpDetails() != null) {\r
-      request.getOpDetails()\r
-          .setParmeters(filteredSetParameters(request.getOpDetails().getParmeters(),\r
-              netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));\r
-      if (request.getOpDetails().getParmeters().isEmpty()) {\r
-        LOG.debug("There are no supported device parameters found for delete-config.");\r
-        return getEmptyResponse();\r
-      }\r
-    }\r
-    LOG.debug("Prepared NBI request for delete-config {}", request);\r
-\r
-    DeviceRPCResponse opResult;\r
-    opResult = syncHandler.performDeviceOperation(request);\r
-    if (null == opResult) {\r
-      return getTimeOutResponse();\r
-    }\r
-    response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),\r
-        netConfRequest.getHwVersion(), false);\r
-    return response;\r
-  }\r
-\r
-  @Override\r
-  public NetConfResponse handleGetRequest(NetConfRequest netConfRequest) {\r
-    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
-    NetConfResponse response = null;\r
-    DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(\r
-        netConfRequest.getDeviceId(), el, "filter", TR069OperationCode.GET_PARAMETER_VALUES);\r
-\r
-    if (request == null || request.getOpDetails() == null\r
-        || request.getOpDetails().getParmeters().isEmpty()) {\r
-      LOG.debug("There are no device parameters found for get.");\r
-      return getEmptyResponse();\r
-    } else if (request.getOpDetails() != null) {\r
-\r
-      request.getOpDetails()\r
-          .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters(),\r
-              netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));\r
-\r
-      if (request.getOpDetails().getParmeters().isEmpty()) {\r
-        LOG.debug("There are no supported device parameters found for get.");\r
-        return getEmptyResponse();\r
-      }\r
-    }\r
-    LOG.debug("Prepared NBI request for get {}", request);\r
-\r
-    DeviceRPCResponse opResult;\r
-    opResult = syncHandler.performDeviceOperation(request);\r
-    if (null == opResult) {\r
-      return getTimeOutResponse();\r
-    }\r
-    response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),\r
-        netConfRequest.getHwVersion(), false);\r
-    return response;\r
-  }\r
-\r
-  @Override\r
-  public NetConfResponse handleGetConfigRequest(NetConfRequest netConfRequest) {\r
-    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());\r
-    NetConfResponse response = null;\r
-    List<ParameterDTO> vesRequestParams = new ArrayList<>();\r
-\r
-    boolean isSoftwareInventory = false;\r
-    if (netConfRequest.getRequestXml().contains("software-inventory")) {\r
-      LOG.info("XML Contains software-inventory");\r
-      isSoftwareInventory = true;\r
-    }\r
-\r
-    DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(\r
-        netConfRequest.getDeviceId(), el, "filter", TR069OperationCode.GET_PARAMETER_VALUES);\r
-\r
-    if (request == null || request.getOpDetails() == null\r
-        || request.getOpDetails().getParmeters().isEmpty()) {\r
-      LOG.debug("There are no device parameters found for get-config.");\r
-      return getEmptyResponse();\r
-    } else if (request.getOpDetails() != null) {\r
-      request.getOpDetails()\r
-          .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters(),\r
-              netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));\r
-\r
-      if (request.getOpDetails().getParmeters().isEmpty()) {\r
-        LOG.debug("There are no supported device parameters found for get-config.");\r
-        return getEmptyResponse();\r
-      }\r
-      for (ParameterDTO param : request.getOpDetails().getParmeters()) {\r
-        if (isVesNotificationRequest(param)) {\r
-          vesRequestParams.add(param);\r
-        }\r
-      }\r
-    }\r
-    LOG.debug("Prepared NBI request for get-config {}", request);\r
-\r
-    DeviceRPCResponse opResultVes = null;\r
-    List<ParameterDTO> allParamList = request.getOpDetails().getParmeters();\r
-\r
-    if (!vesRequestParams.isEmpty()) {\r
-      request.getOpDetails().setParmeters(vesRequestParams);\r
-      opResultVes = vesnotiSender.sendGetConfigNotification(request);\r
-\r
-      if (null == opResultVes) {\r
-        return getTimeOutResponse();\r
-      }\r
-    }\r
-\r
-\r
-    allParamList.removeAll(vesRequestParams);\r
-\r
-    DeviceRPCResponse opResultDevice = null;\r
-    if (!allParamList.isEmpty()) {\r
-      request.getOpDetails().setParmeters(allParamList);\r
-      opResultDevice = syncHandler.performDeviceOperation(request);\r
-\r
-      if (null == opResultDevice) {\r
-        return getTimeOutResponse();\r
-      }\r
-    }\r
-\r
-    DeviceRPCResponse opResult = mergeGetConfigDeviceRPCResponse(opResultVes, opResultDevice);\r
-\r
-    if (null == opResult) {\r
-      return getTimeOutResponse();\r
-    }\r
-    LOG.debug("Received GPV response : FaultKey = " + opResult.getFaultKey() + ", FaultString = "\r
-        + opResult.getFaultString() + ", Parameters :"\r
-        + opResult.getOperationResponse().getParameterDTOs());\r
-    if (null != opResult.getOperationResponse().getParameterDTOs())\r
-      handleBooleanParameters(opResult.getOperationResponse().getParameterDTOs(),\r
-          netConfRequest.getSwVersion(), netConfRequest.getHwVersion());\r
-\r
-    if (isSoftwareInventory) {\r
-      response = mapperUtil.getNetconfResponseForSoftwareInventory(opResult,\r
-          netConfRequest.getSwVersion(), netConfRequest.getHwVersion());\r
-    } else {\r
-      response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),\r
-          netConfRequest.getHwVersion(), false);\r
-    }\r
-\r
-    if (opResult.getFaultKey() != null && opResult.getFaultKey().equalsIgnoreCase("9005")) {\r
-      // check for tabular\r
-      LOG.debug("Tabualr Entry not exist in the device; we need to add it now");\r
-      MOMetaData data = metaDataUtil.getMetaDataByTR69Name(\r
-          request.getOpDetails().getParmeters().get(0).getParamName(),\r
-          netConfRequest.getSwVersion(), netConfRequest.getHwVersion());\r
-      if (data.isTabluarObj()) {\r
-        return getEmptyResponse();\r
-      }\r
-    }\r
-\r
-    return response;\r
-  }\r
-\r
-  @Override\r
-  public NetConfResponse handleSWDownloadRequest(NetConfRequest request) {\r
-    LOG.debug("request received fro sw-download");\r
-    Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());\r
-    NetConfResponse response = null;\r
-    Map<String, String> map =\r
-        NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "software-download");\r
-    if (map == null || map.size() <= 0) {\r
-      LOG.debug("There are no device parameters found for get.");\r
-      return getEmptyResponse();\r
-    }\r
-\r
-    TR069OperationDetails opDetails = new TR069OperationDetails();\r
-    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
-    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();\r
-    tr069DeviceDetails.setDeviceId(request.getDeviceId());\r
-    deviceRPCRequest.setOpDetails(opDetails);\r
-    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);\r
-    OperationOptions options = new OperationOptions();\r
-    options.setExecutionTimeout(60l);\r
-    deviceRPCRequest.setOptions(options);\r
-    String fileName = map.get("rpc.software-download.remote-file-path");\r
-    String password = map.get("rpc.software-download.password.password");\r
-\r
-    if (fileName == null || password == null || getDownloadFileURI(fileName) == null\r
-        || getDownloadUserName(fileName) == null) {\r
-      LOG.error(\r
-          "remote-file-path value is not as per yang model reference. Allowed pattern sftp://<username>@<host>[:<port>]/path");\r
-      return getOperationAbortedResponse(\r
-          "remote-file-path value is not as per yang model reference. Allowed pattern sftp://<username>@<host>[:<port>]/path");\r
-    }\r
-\r
-    List<ParameterDTO> paramDTOList = new ArrayList<>();\r
-    paramDTOList.add(new ParameterDTO("FileType", "1 Firmware Upgrade Image"));\r
-    paramDTOList.add(new ParameterDTO("URL", getDownloadFileURI(fileName)));\r
-    paramDTOList.add(new ParameterDTO("Username", getDownloadUserName(fileName)));\r
-    paramDTOList.add(new ParameterDTO("Password", password));\r
-    paramDTOList.add(new ParameterDTO("FileSize", "0"));\r
-    paramDTOList.add(new ParameterDTO("TargetFileName", ""));\r
-    paramDTOList.add(new ParameterDTO("DelaySeconds", "1"));\r
-    paramDTOList.add(new ParameterDTO("SuccessURL", ""));\r
-    paramDTOList.add(new ParameterDTO("FailureURL", ""));\r
-\r
-    deviceRPCRequest.getOpDetails().setParmeters(paramDTOList);\r
-    deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.DOWNLOAD);\r
-\r
-    LOG.debug("Prepared NBI request for download " + deviceRPCRequest);\r
-\r
-    DeviceOperationDetails fwDetails = deviceOperDAO.findByDeviceId(request.getDeviceId());\r
-    if (fwDetails == null) {\r
-      String errorMsg = "TR069 device request has been aborted,due to device not identified";\r
-      return getOperationAbortedResponse(errorMsg);\r
-    }\r
-\r
-    if (fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus()\r
-        && fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_COMPLETED.getStatus()) {\r
-\r
-      LOG.debug("persisting the fw details " + fwDetails.toString());\r
-\r
-      DeviceRPCResponse opResult;\r
-      opResult = syncHandler.performDeviceOperation(deviceRPCRequest);\r
-      if (null == opResult) {\r
-        return getTimeOutResponse();\r
-      }\r
-      fwDetails.setFileName(fileName);\r
-      fwDetails.setDownLoadStatus(FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus());\r
-      deviceOperDAO.save(fwDetails);\r
-      ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();\r
-\r
-      if (opResult.getOperationResponse().getStatus() == 1) {\r
-        responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:status", "STARTED"));\r
-      } else {\r
-        responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:status", "FAILED"));\r
-        responseParamDTOList\r
-            .add(new ParameterDTO("rpc-reply.ns1:error-message", opResult.getFaultString()));\r
-      }\r
-      responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:notification-timeout", "1200"));\r
-\r
-      opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);\r
-      response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),\r
-          request.getHwVersion(), true);\r
-\r
-      LOG.debug("update the status for fw details " + fwDetails.toString());\r
-    } else {\r
-      LOG.debug("FirmWare Upgrade is in progress");\r
-      String errorMsg = "TR069 device request has been aborted as Firmware Upgrade is inProgress";\r
-      return getOperationAbortedResponse(errorMsg);\r
-    }\r
-\r
-    return response;\r
-  }\r
-\r
-  protected DeviceRPCResponse mergeGetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,\r
-      DeviceRPCResponse opResultDevice) {\r
-    if (null == opResultVes) {\r
-      return opResultDevice;\r
-    }\r
-\r
-    if (null == opResultDevice) {\r
-      return opResultVes;\r
-    }\r
-\r
-    if (null != opResultVes.getFaultKey()\r
-        && !opResultVes.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {\r
-      return opResultVes;\r
-    } else if (null != opResultDevice.getFaultKey()\r
-        && !opResultDevice.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {\r
-      return opResultDevice;\r
-    }\r
-\r
-    opResultDevice.getOperationResponse().getParameterDTOs()\r
-        .addAll(opResultVes.getOperationResponse().getParameterDTOs());\r
-    return opResultDevice;\r
-  }\r
-\r
-  protected DeviceRPCResponse mergeSetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,\r
-      DeviceRPCResponse opResultDevice) {\r
-    if (null == opResultVes) {\r
-      return opResultDevice;\r
-    }\r
-\r
-    if (null == opResultDevice) {\r
-      return opResultVes;\r
-    }\r
-\r
-    return opResultDevice;\r
-  }\r
-\r
-  protected boolean isVesNotificationRequest(ParameterDTO param) {\r
-    if (null == param.getParamName() || param.getParamName().isEmpty()) {\r
-      return false;\r
-    }\r
-\r
-    if (param.getParamName().toLowerCase().contains(MapperConstants.HEART_BEAT_PERIOD.toLowerCase())\r
-        || param.getParamName().toLowerCase()\r
-            .contains(MapperConstants.COUNT_DOWN_TIMER.toLowerCase())\r
-        || param.getParamName().toLowerCase().contains(MapperConstants.HEART_BEAT.toLowerCase())) {\r
-      return true;\r
-    }\r
-\r
-    return false;\r
-  }\r
-\r
-  protected void handleBooleanParameters(List<ParameterDTO> parameterDTOs, String swVersion,\r
-      String hwVersion) {\r
-\r
-    for (ParameterDTO param : parameterDTOs) {\r
-      MOMetaData metaData =\r
-          metaDataUtil.getMetaDataByTR69Name(param.getParamName(), swVersion, hwVersion);\r
-      if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {\r
-        if (BOOLEAN_TRUE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {\r
-          param.setParamValue(Boolean.TRUE.toString());\r
-        } else if (BOOLEAN_FALSE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {\r
-          param.setParamValue(Boolean.FALSE.toString());\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  protected void handleBooleanParametersReverse(List<ParameterDTO> parameterDTOs, String swVersion,\r
-      String hwVersion) {\r
-\r
-    for (ParameterDTO param : parameterDTOs) {\r
-      MOMetaData metaData =\r
-          metaDataUtil.getMetaDataByTR69Name(param.getParamName(), swVersion, hwVersion);\r
-      if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {\r
-        if (Boolean.TRUE.toString().equalsIgnoreCase(param.getParamValue().trim())) {\r
-          param.setParamValue(BOOLEAN_TRUE_VALUE);\r
-        } else if (Boolean.FALSE.toString().equalsIgnoreCase(param.getParamValue().trim())) {\r
-          param.setParamValue(BOOLEAN_FALSE_VALUE);\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  protected NetConfResponse getEmptyResponse() {\r
-    NetConfResponse response = new NetConfResponse();\r
-    ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("0");\r
-    ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
-    errorCode.setFaultCode("0");\r
-    errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
-    errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
-    errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
-    errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
-    response.setErrorCode(errorCode);\r
-    return response;\r
-  }\r
-\r
-  protected NetConfResponse getTimeOutResponse() {\r
-    // prepare timeout error response\r
-    NetConfResponse timeOutErrorResponse = new NetConfResponse();\r
-    ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
-    ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
-\r
-    errorCode.setFaultCode("8006");\r
-    errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
-    errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
-    errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
-    errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
-    timeOutErrorResponse.setErrorCode(errorCode);\r
-    timeOutErrorResponse.setErrorMessage("TR069 device request has been timed out.");\r
-    return timeOutErrorResponse;\r
-  }\r
-\r
-  protected NetConfResponse getErrorResponse(String errCode, String errorMsg) {\r
-    NetConfResponse errorResponse = new NetConfResponse();\r
-    ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
-    ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
-    if (errorCodeMetaData != null) {\r
-      errorCode.setFaultCode(errCode);\r
-      errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
-      errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
-      errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
-      errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
-    }\r
-    errorResponse.setErrorCode(errorCode);\r
-    errorResponse.setErrorMessage(errorMsg);\r
-    return errorResponse;\r
-  }\r
-\r
-  protected NetConfResponse getOperationAbortedResponse(String errorMessage) {\r
-    // prepare timeout error response\r
-    NetConfResponse timeOutErrorResponse = new NetConfResponse();\r
-    ErrorCodeDetails errorCode = new ErrorCodeDetails();\r
-    ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");\r
-    if (errorCodeMetaData != null) {\r
-      errorCode.setFaultCode("8002");\r
-      errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());\r
-      errorCode.setErrorType(errorCodeMetaData.getErrorType());\r
-      errorCode.setErrorTag(errorCodeMetaData.getErrorTag());\r
-      errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());\r
-    }\r
-    timeOutErrorResponse.setErrorCode(errorCode);\r
-    timeOutErrorResponse.setErrorMessage(errorMessage);\r
-    return timeOutErrorResponse;\r
-  }\r
-\r
-  public List<ParameterDTO> filteredSetParameters(List<ParameterDTO> parameters, String swVersion,\r
-      String hwVersion) {\r
-    List<ParameterDTO> result = new ArrayList<>();\r
-    for (ParameterDTO param : parameters) {\r
-      MOMetaData metaData =\r
-          metaDataUtil.getMetaDataByNetConfName(param.getParamName(), swVersion, hwVersion);\r
-      if (null != metaData && !metaData.isReadOnly()) {\r
-        String tr069MoName =\r
-            MOMetaDataUtil.getTR69MOByReplacingIndexes(param.getParamName(), metaData.getMoName());\r
-        param.setDataType(metaData.getDataType());\r
-        param.setParamName(tr069MoName);\r
-        result.add(param);\r
-      }\r
-    }\r
-    return result;\r
-  }\r
-\r
-  protected List<ParameterDTO> filteredGetParameters(List<ParameterDTO> parameters,\r
-      String swVersion, String hwVersion) {\r
-    return metaDataUtil.getSupportedChildParameters(parameters, swVersion, hwVersion);\r
-  }\r
-\r
-  @Override\r
-  public boolean handelRegisterEvent(NetConfServerDetails request) {\r
-    LOG.debug("processing the handelRegisterEvent started");\r
-    try {\r
-      VESNotificationResponse vesRsponse = vesnotiSender.sendNotification(null, request);\r
-      if (HttpStatus.valueOf(vesRsponse.getStatusCode()).is2xxSuccessful()) {\r
-        LOG.debug("processing the handelRegisterEvent completed");\r
-        return true;\r
-      } else {\r
-        LOG.error("processing the handelRegisterEvent error code recevived: {}",\r
-            vesRsponse.getStatusCode());\r
-        return false;\r
-      }\r
-    } catch (Exception e) {\r
-      LOG.error("processing the handelRegisterEvent exception occurred");\r
-      return false;\r
-    }\r
-  }\r
-\r
-  protected static String getDownloadFileURI(String filepath) {\r
-\r
-    if (filepath.contains("@") && filepath.contains("//")) {\r
-      String[] str = filepath.split("@");\r
-      String[] strForUserName = str[0].split("//");\r
-      if (str.length > 1) {\r
-        String Url = strForUserName[0] + "//" + str[1];\r
-        return Url;\r
-      }\r
-    }\r
-    return null;\r
-  }\r
-\r
-  protected static String getDownloadUserName(String filepath) {\r
-\r
-    if (filepath.contains("@") && filepath.contains("//")) {\r
-      String[] str = filepath.split("@");\r
-      String[] strForUserName = str[0].split("//");\r
-      if (strForUserName.length > 1)\r
-        return strForUserName[1];\r
-    }\r
-    return null;\r
-  }\r
-\r
-  protected boolean isAdminStateOverriden(List<ParameterDTO> paramList) {\r
-    for (ParameterDTO paramDTO : paramList) {\r
-      if (paramDTO.getParamName().contains(MapperConstants.ADMIN_STATE)\r
-          || paramDTO.getParamName().contains(MapperConstants.ADMIN_STATUS)) {\r
-        return true;\r
-      }\r
-    }\r
-    return false;\r
-  }\r
-\r
-  protected void convertResposeToSPVResponse(DeviceRPCResponse deviceRPCResponse) {\r
-    if (null == deviceRPCResponse) {\r
-      return;\r
-    }\r
-\r
-    OperationResponse operationResponse = new SetParameterValueResponse();\r
-    operationResponse.setParameterDTOs(new ArrayList<ParameterDTO>());\r
-\r
-    if (null == deviceRPCResponse.getFaultKey()) {\r
-      operationResponse.setStatus(MapperConstants.RPC_SUCCESS_CODE);\r
-    } else {\r
-      operationResponse.setStatus(MapperConstants.RPC_FAILED_CODE);\r
-    }\r
-\r
-    deviceRPCResponse.setOperationResponse(operationResponse);\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.netconf.impl;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
+import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;
+import org.commscope.tr069adapter.acs.common.OperationOptions;
+import org.commscope.tr069adapter.acs.common.OperationResponse;
+import org.commscope.tr069adapter.acs.common.ParameterDTO;
+import org.commscope.tr069adapter.acs.common.dto.CustomOperationCode;
+import org.commscope.tr069adapter.acs.common.dto.ParameterAttributeDTO;
+import org.commscope.tr069adapter.acs.common.dto.TR069DeviceDetails;
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationCode;
+import org.commscope.tr069adapter.acs.common.dto.TR069OperationDetails;
+import org.commscope.tr069adapter.acs.common.response.AddObjectResponse;
+import org.commscope.tr069adapter.acs.common.response.SetParameterValueResponse;
+import org.commscope.tr069adapter.acs.common.utils.ConnectionStatusPOJO;
+import org.commscope.tr069adapter.mapper.MOMetaData;
+import org.commscope.tr069adapter.mapper.acs.ACSRequestSender;
+import org.commscope.tr069adapter.mapper.dao.DeviceOperationsDAO;
+import org.commscope.tr069adapter.mapper.entity.DeviceOperationDetails;
+import org.commscope.tr069adapter.mapper.model.ErrorCodeDetails;
+import org.commscope.tr069adapter.mapper.model.NetConfRequest;
+import org.commscope.tr069adapter.mapper.model.NetConfResponse;
+import org.commscope.tr069adapter.mapper.model.NetConfServerDetails;
+import org.commscope.tr069adapter.mapper.model.VESNotificationResponse;
+import org.commscope.tr069adapter.mapper.netconf.NetConfRequestHandler;
+import org.commscope.tr069adapter.mapper.sync.SynchronizedRequestHandler;
+import org.commscope.tr069adapter.mapper.util.ErrorCodeUtil;
+import org.commscope.tr069adapter.mapper.util.FirwareUpgradeStatus;
+import org.commscope.tr069adapter.mapper.util.MOMetaDataUtil;
+import org.commscope.tr069adapter.mapper.util.MapperConstants;
+import org.commscope.tr069adapter.mapper.util.NetconfToTr069MapperUtil;
+import org.commscope.tr069adapter.mapper.ves.VESNotificationSender;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+@Component
+public class NetConfRequestHandlerImpl implements NetConfRequestHandler {
+
+  private static final Logger LOG = LoggerFactory.getLogger(NetConfRequestHandlerImpl.class);
+  private static final String BOOLEAN_TRUE_VALUE = "1";
+  private static final String BOOLEAN_FALSE_VALUE = "0";
+  private static final String BOOLEAN_DATA_TYPE = "boolean";
+  private static final String CONFIG = "config";
+  private static final String FILTER = "filter";
+  private static final String NO_DEVICE_PARAM_FOUND =
+      "There are no device parameters found for get.";
+  private static final String RPC_REPLY_STATUS = "rpc-reply.ns1:status";
+  private static final String RPC_REPLY_ERROR = "rpc-reply.ns1:error-message";
+  private static final String FAILED = "FAILED";
+  private static final String PARAMETER = "parameter";
+
+  @Autowired
+  SynchronizedRequestHandler syncHandler;
+
+  @Autowired
+  NetconfToTr069MapperUtil mapperUtil;
+
+  @Autowired
+  MOMetaDataUtil metaDataUtil;
+
+  @Autowired
+  ErrorCodeUtil errorCodeUtil;
+
+  @Autowired
+  VESNotificationSender vesnotiSender;
+
+  @Autowired
+  DeviceOperationsDAO deviceOperDAO;
+
+  @Autowired
+  ACSRequestSender tr069ReqSender;
+
+  @Override
+  public NetConfResponse handleSetConfigRequest(NetConfRequest netConfRequest) {
+    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());
+    NetConfResponse response = null;
+    DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil.prepareTR069Request(
+        netConfRequest.getDeviceId(), el, CONFIG, TR069OperationCode.SET_PARAMETER_VALUES);
+
+    if (deviceRPCRequest == null) {
+      LOG.debug("There are no supported device parameters found for edit-config.");
+      return getEmptyResponse();
+    }
+    List<ParameterDTO> requestParams = deviceRPCRequest.getOpDetails().getParmeters();
+    List<ParameterDTO> filteredParams = new ArrayList<>();
+    List<ParameterDTO> vesRequestParams = new ArrayList<>();
+
+    if (null != requestParams) {
+      for (ParameterDTO param : requestParams) {
+        if (null == param.getParamValue() || StringUtils.isEmpty(param.getParamValue())) {
+          continue;
+        }
+        if (isVesNotificationRequest(param)) {
+          vesRequestParams.add(param);
+        }
+        filteredParams.add(param);
+      }
+      deviceRPCRequest.getOpDetails().setParmeters(filteredParams);
+    }
+
+    if (deviceRPCRequest.getOpDetails() == null
+        || deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
+      LOG.debug("There are no device parameters found for edit-config.");
+      return getEmptyResponse();
+    } else if (deviceRPCRequest.getOpDetails() != null) {
+      deviceRPCRequest.getOpDetails()
+          .setParmeters(filteredSetParameters(deviceRPCRequest.getOpDetails().getParmeters(),
+              netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));
+      if (deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
+        LOG.debug("There are no supported device parameters found for edit-config.");
+        return getEmptyResponse();
+      }
+    }
+
+    handleBooleanParametersReverse(deviceRPCRequest.getOpDetails().getParmeters(),
+        netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
+    LOG.debug("Prepared NBI request for edit-config {}", deviceRPCRequest);
+
+    DeviceRPCResponse deviceRPCResponseVes = null;
+    List<ParameterDTO> allParamList = deviceRPCRequest.getOpDetails().getParmeters();
+
+    if (!vesRequestParams.isEmpty()) {
+      deviceRPCRequest.getOpDetails().setParmeters(vesRequestParams);
+      deviceRPCResponseVes = vesnotiSender.sendEditConfigNotification(deviceRPCRequest);
+
+      if (null == deviceRPCResponseVes) {
+        return getTimeOutResponse();
+      }
+    }
+
+    allParamList.removeAll(vesRequestParams);
+
+    DeviceRPCResponse deviceRPCResponseDevice = null;
+    if (null != allParamList && !allParamList.isEmpty()) {
+      deviceRPCRequest.getOpDetails().setParmeters(allParamList);
+      if (isAdminStateOverriden(allParamList)) {
+        deviceRPCRequest.getOpDetails().setOpCode(CustomOperationCode.CONFIGURE_MULTIPLE_OBJECTS);
+        TR069OperationDetails tr069OperationDetails =
+            (TR069OperationDetails) deviceRPCRequest.getOpDetails();
+        tr069OperationDetails.setModifyParamList(allParamList);
+        tr069OperationDetails.setSetParamList(null);
+
+        deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);
+        convertResposeToSPVResponse(deviceRPCResponseDevice);
+      } else {
+        deviceRPCResponseDevice = syncHandler.performDeviceOperation(deviceRPCRequest);
+      }
+
+      if (null == deviceRPCResponseDevice) {
+        return getTimeOutResponse();
+      }
+    }
+
+    DeviceRPCResponse deviceRPCResponse =
+        mergeSetConfigDeviceRPCResponse(deviceRPCResponseVes, deviceRPCResponseDevice);
+    if (null == deviceRPCResponse) {
+      return getTimeOutResponse();
+    }
+    response = mapperUtil.getNetconfResponse(deviceRPCResponse, netConfRequest.getSwVersion(),
+        netConfRequest.getHwVersion(), false);
+    return response;
+  }
+
+  @Override
+  public NetConfResponse handleDelConfigRequest(NetConfRequest netConfRequest) {
+    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());
+    NetConfResponse response = null;
+    DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(
+        netConfRequest.getDeviceId(), el, CONFIG, TR069OperationCode.DELETE_OBJECT);
+
+    if (request == null) {
+      LOG.debug("There are no supported device parameters found for delete-config.");
+      return getEmptyResponse();
+    }
+
+    List<ParameterDTO> requestParams = request.getOpDetails().getParmeters();
+    List<ParameterDTO> filteredParams = new ArrayList<>();
+    if (null != requestParams) {
+      for (ParameterDTO param : requestParams) {
+        filteredParams.add(param);
+      }
+      request.getOpDetails().setParmeters(filteredParams);
+    }
+
+    if (request.getOpDetails() == null || request.getOpDetails().getParmeters().isEmpty()) {
+      LOG.debug("There are no device parameters found for delete-config.");
+      return getEmptyResponse();
+    } else if (request.getOpDetails() != null) {
+      request.getOpDetails()
+          .setParmeters(filteredSetParameters(request.getOpDetails().getParmeters(),
+              netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));
+      if (request.getOpDetails().getParmeters().isEmpty()) {
+        LOG.debug("There are no supported device parameters found for delete-config.");
+        return getEmptyResponse();
+      }
+    }
+    LOG.debug("Prepared NBI request for delete-config {}", request);
+
+    DeviceRPCResponse opResult;
+    opResult = syncHandler.performDeviceOperation(request);
+    if (null == opResult) {
+      return getTimeOutResponse();
+    }
+    response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),
+        netConfRequest.getHwVersion(), false);
+    return response;
+  }
+
+  @Override
+  public NetConfResponse handleGetRequest(NetConfRequest netConfRequest) {
+    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());
+    NetConfResponse response = null;
+    DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(
+        netConfRequest.getDeviceId(), el, FILTER, TR069OperationCode.GET_PARAMETER_VALUES);
+
+    if (request == null || request.getOpDetails() == null
+        || request.getOpDetails().getParmeters().isEmpty()) {
+      LOG.debug(NO_DEVICE_PARAM_FOUND);
+      return getEmptyResponse();
+    } else if (request.getOpDetails() != null) {
+
+      request.getOpDetails()
+          .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters(),
+              netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));
+
+      if (request.getOpDetails().getParmeters().isEmpty()) {
+        LOG.debug("There are no supported device parameters found for get.");
+        return getEmptyResponse();
+      }
+    }
+    LOG.debug("Prepared NBI request for get {}", request);
+
+    DeviceRPCResponse opResult;
+    opResult = syncHandler.performDeviceOperation(request);
+    if (null == opResult) {
+      return getTimeOutResponse();
+    }
+    response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),
+        netConfRequest.getHwVersion(), false);
+    return response;
+  }
+
+  @Override
+  public NetConfResponse handleGetConfigRequest(NetConfRequest netConfRequest) {
+    Element el = NetconfToTr069MapperUtil.convertStringToDocument(netConfRequest.getRequestXml());
+    NetConfResponse response = null;
+    List<ParameterDTO> vesRequestParams = new ArrayList<>();
+
+    boolean isSoftwareInventory = false;
+    if (netConfRequest.getRequestXml().contains("software-inventory")) {
+      LOG.info("XML Contains software-inventory");
+      isSoftwareInventory = true;
+    }
+
+    DeviceRPCRequest request = NetconfToTr069MapperUtil.prepareTR069Request(
+        netConfRequest.getDeviceId(), el, FILTER, TR069OperationCode.GET_PARAMETER_VALUES);
+
+    if (request == null || request.getOpDetails() == null
+        || request.getOpDetails().getParmeters().isEmpty()) {
+      LOG.debug("There are no device parameters found for get-config.");
+      return getEmptyResponse();
+    } else if (request.getOpDetails() != null) {
+      request.getOpDetails()
+          .setParmeters(filteredGetParameters(request.getOpDetails().getParmeters(),
+              netConfRequest.getSwVersion(), netConfRequest.getHwVersion()));
+
+      if (request.getOpDetails().getParmeters().isEmpty()) {
+        LOG.debug("There are no supported device parameters found for get-config.");
+        return getEmptyResponse();
+      }
+      for (ParameterDTO param : request.getOpDetails().getParmeters()) {
+        if (isVesNotificationRequest(param)) {
+          vesRequestParams.add(param);
+        }
+      }
+    }
+    LOG.debug("Prepared NBI request for get-config {}", request);
+
+    DeviceRPCResponse opResultVes = null;
+    List<ParameterDTO> allParamList = request.getOpDetails().getParmeters();
+
+    if (!vesRequestParams.isEmpty()) {
+      request.getOpDetails().setParmeters(vesRequestParams);
+      opResultVes = vesnotiSender.sendGetConfigNotification(request);
+
+      if (null == opResultVes) {
+        return getTimeOutResponse();
+      }
+    }
+
+    allParamList.removeAll(vesRequestParams);
+
+    DeviceRPCResponse opResultDevice = null;
+    if (!allParamList.isEmpty()) {
+      request.getOpDetails().setParmeters(allParamList);
+      opResultDevice = syncHandler.performDeviceOperation(request);
+
+      if (null == opResultDevice) {
+        return getTimeOutResponse();
+      }
+    }
+
+    DeviceRPCResponse opResult = mergeGetConfigDeviceRPCResponse(opResultVes, opResultDevice);
+
+    if (null == opResult) {
+      return getTimeOutResponse();
+    }
+    LOG.debug("Received GPV response : FaultKey = {}, FaultString = {}, Parameters : {}",
+        opResult.getFaultKey(), opResult.getFaultString(),
+        opResult.getOperationResponse().getParameterDTOs());
+    if (null != opResult.getOperationResponse().getParameterDTOs())
+      handleBooleanParameters(opResult.getOperationResponse().getParameterDTOs(),
+          netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
+
+    if (isSoftwareInventory) {
+      response = mapperUtil.getNetconfResponseForSoftwareInventory(opResult,
+          netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
+    } else {
+      response = mapperUtil.getNetconfResponse(opResult, netConfRequest.getSwVersion(),
+          netConfRequest.getHwVersion(), false);
+    }
+
+    if (opResult.getFaultKey() != null && opResult.getFaultKey().equalsIgnoreCase("9005")) {
+      // check for tabular
+      LOG.debug("Tabualr Entry not exist in the device; we need to add it now");
+      MOMetaData data = metaDataUtil.getMetaDataByTR69Name(
+          request.getOpDetails().getParmeters().get(0).getParamName(),
+          netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
+      if (data.isTabluarObj()) {
+        return getEmptyResponse();
+      }
+    }
+
+    return response;
+  }
+
+  @Override
+  public NetConfResponse handleSWDownloadRequest(NetConfRequest request) {
+    LOG.debug("request received fro sw-download");
+    Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
+    NetConfResponse response = null;
+    Map<String, String> map =
+        NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "software-download");
+    if (map == null || map.size() <= 0) {
+      LOG.debug(NO_DEVICE_PARAM_FOUND);
+      return getEmptyResponse();
+    }
+
+    TR069OperationDetails opDetails = new TR069OperationDetails();
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
+    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
+    tr069DeviceDetails.setDeviceId(request.getDeviceId());
+    deviceRPCRequest.setOpDetails(opDetails);
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
+    OperationOptions options = new OperationOptions();
+    options.setExecutionTimeout(60l);
+    deviceRPCRequest.setOptions(options);
+    String fileName = map.get("rpc.software-download.remote-file-path");
+    String password = map.get("rpc.software-download.password.password");
+
+    if (fileName == null || password == null || getDownloadFileURI(fileName) == null
+        || getDownloadUserName(fileName) == null) {
+      LOG.error(
+          "remote-file-path value is not as per yang model reference. Allowed pattern sftp://<username>@<host>[:<port>]/path");
+      return getOperationAbortedResponse(
+          "remote-file-path value is not as per yang model reference. Allowed pattern sftp://<username>@<host>[:<port>]/path");
+    }
+
+    List<ParameterDTO> paramDTOList = new ArrayList<>();
+    paramDTOList.add(new ParameterDTO("FileType", "1 Firmware Upgrade Image"));
+    paramDTOList.add(new ParameterDTO("URL", getDownloadFileURI(fileName)));
+    paramDTOList.add(new ParameterDTO("Username", getDownloadUserName(fileName)));
+    paramDTOList.add(new ParameterDTO("Password", password));
+    paramDTOList.add(new ParameterDTO("FileSize", "0"));
+    paramDTOList.add(new ParameterDTO("TargetFileName", ""));
+    paramDTOList.add(new ParameterDTO("DelaySeconds", "1"));
+    paramDTOList.add(new ParameterDTO("SuccessURL", ""));
+    paramDTOList.add(new ParameterDTO("FailureURL", ""));
+
+    deviceRPCRequest.getOpDetails().setParmeters(paramDTOList);
+    deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.DOWNLOAD);
+
+    LOG.debug("Prepared NBI request for download {}", deviceRPCRequest);
+
+    DeviceOperationDetails fwDetails = deviceOperDAO.findByDeviceId(request.getDeviceId());
+    if (fwDetails == null) {
+      String errorMsg = "TR069 device request has been aborted,due to device not identified";
+      return getOperationAbortedResponse(errorMsg);
+    }
+
+    if (fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus()
+        && fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_COMPLETED.getStatus()) {
+
+      LOG.debug("persisting the fw details {}", fwDetails);
+
+      DeviceRPCResponse opResult;
+      opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
+      if (null == opResult) {
+        return getTimeOutResponse();
+      }
+      fwDetails.setFileName(fileName);
+      fwDetails.setDownLoadStatus(FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus());
+      fwDetails.setOrigin("sdnr");
+      deviceOperDAO.save(fwDetails);
+      ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
+
+      if (opResult.getOperationResponse().getStatus() == 1) {
+        responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, "STARTED"));
+      } else {
+        responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, FAILED));
+        responseParamDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, opResult.getFaultString()));
+      }
+      responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:notification-timeout", "1200"));
+
+      opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
+      response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
+          request.getHwVersion(), true);
+
+      LOG.debug("update the status for fw details {}", fwDetails);
+    } else {
+      LOG.debug("FirmWare Upgrade is in progress");
+      String errorMsg = "TR069 device request has been aborted as Firmware Upgrade is inProgress";
+      return getOperationAbortedResponse(errorMsg);
+    }
+
+    return response;
+  }
+
+  @Override
+  public NetConfResponse handleAddObjectRequest(NetConfRequest request) {
+    LOG.debug("request received for addObject");
+    Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
+    NetConfResponse response = null;
+    Map<String, String> map =
+        NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "add-object");
+    if (map == null || map.size() <= 0) {
+      LOG.debug(NO_DEVICE_PARAM_FOUND);
+      return getEmptyResponse();
+    }
+
+    Element el = NetconfToTr069MapperUtil.convertStringToDocument(request.getRequestXml());
+    DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil
+        .prepareTR069Request(request.getDeviceId(), el, PARAMETER, TR069OperationCode.ADD_OBJECT);
+
+    if (deviceRPCRequest == null || deviceRPCRequest.getOpDetails() == null
+        || deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
+      LOG.debug("There are no device parameters found for addobject.");
+      return getEmptyResponse();
+    } else if (deviceRPCRequest.getOpDetails() != null) {
+      deviceRPCRequest.getOpDetails()
+          .setParmeters(filteredGetParameters(deviceRPCRequest.getOpDetails().getParmeters(),
+              request.getSwVersion(), request.getHwVersion()));
+      if (deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
+        LOG.debug("There are no supported device parameters found for addobject.");
+        return getEmptyResponse();
+      }
+    }
+
+    LOG.debug("Prepared NBI request for addobject {}", deviceRPCRequest);
+
+    DeviceRPCResponse opResult;
+    opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
+    if (null == opResult) {
+      return getTimeOutResponse();
+    }
+    if (null == opResult.getOperationResponse()) {
+      return getTimeOutResponse();
+    }
+    AddObjectResponse addOpresult = (AddObjectResponse) opResult.getOperationResponse();
+
+    ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
+
+    if (opResult.getFaultKey() == null) {
+      String status = String.valueOf(opResult.getOperationResponse().getStatus());
+      responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, status));
+      String instanceNumber = String.valueOf(addOpresult.getInstanceNumber());
+      LOG.info("AddObject Passed : Instance Number: {}", instanceNumber);
+      responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:instance-number", instanceNumber));
+    }
+    LOG.info("AddObject Label value: {}", addOpresult.getLabel());
+    if (null == addOpresult.getLabel()) {
+      responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:label", ""));
+    } else {
+      responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:label", addOpresult.getLabel()));
+    }
+
+    opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
+    response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
+        request.getHwVersion(), true);
+
+    return response;
+  }
+
+  @Override
+  public NetConfResponse handleDeleteObjectRequest(NetConfRequest request) {
+    LOG.debug("request received for deleteObject");
+    Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
+    NetConfResponse response = null;
+    Map<String, String> map =
+        NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "delete-object");
+    if (map == null || map.size() <= 0) {
+      LOG.debug(NO_DEVICE_PARAM_FOUND);
+      return getEmptyResponse();
+    }
+
+    Element el = NetconfToTr069MapperUtil.convertStringToDocument(request.getRequestXml());
+    DeviceRPCRequest deviceRPCRequest = NetconfToTr069MapperUtil.prepareTR069Request(
+        request.getDeviceId(), el, PARAMETER, TR069OperationCode.DELETE_OBJECT);
+
+    if (deviceRPCRequest == null || deviceRPCRequest.getOpDetails() == null
+        || deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
+      LOG.debug("There are no device parameters found for deleteobject.");
+      return getEmptyResponse();
+    } else if (deviceRPCRequest.getOpDetails() != null) {
+      deviceRPCRequest.getOpDetails()
+          .setParmeters(filteredGetParameters(deviceRPCRequest.getOpDetails().getParmeters(),
+              request.getSwVersion(), request.getHwVersion()));
+
+      if (deviceRPCRequest.getOpDetails().getParmeters().isEmpty()) {
+        LOG.debug("There are no supported device parameters found for deleteobject.");
+        return getEmptyResponse();
+      }
+    }
+
+    LOG.debug("Prepared NBI request for addobject: {}", deviceRPCRequest);
+
+    DeviceRPCResponse opResult;
+    opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
+    if (null == opResult) {
+      return getTimeOutResponse();
+    }
+    if (null == opResult.getOperationResponse()) {
+      return getTimeOutResponse();
+    }
+
+    ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
+
+    if (opResult.getFaultKey() == null) {
+      String status = String.valueOf(opResult.getOperationResponse().getStatus());
+      responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, status));
+    }
+    opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
+    response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
+        request.getHwVersion(), true);
+
+    return response;
+  }
+
+  @Override
+  public NetConfResponse handleRequestWithoutInputParams(NetConfRequest request) {
+    Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
+    NetConfResponse response = null;
+    TR069OperationDetails opDetails = new TR069OperationDetails();
+    Map<String, String> map = null;
+
+    if (request.getRequestXml().contains("reboot")) {
+      LOG.info("Request Contains Reboot");
+      map = NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "reboot");
+      opDetails.setOpCode(TR069OperationCode.REBOOT);
+    } else if (request.getRequestXml().contains("reset")) {
+      LOG.info("Request Contains Reset");
+      map = NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "reset");
+      opDetails.setOpCode(TR069OperationCode.FACTORY_RESET);
+    }
+
+    if (map == null || map.size() <= 0) {
+      LOG.debug(NO_DEVICE_PARAM_FOUND);
+      return getEmptyResponse();
+    }
+
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
+    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
+    tr069DeviceDetails.setDeviceId(request.getDeviceId());
+    deviceRPCRequest.setOpDetails(opDetails);
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
+    OperationOptions options = new OperationOptions();
+    options.setExecutionTimeout(60l);
+    deviceRPCRequest.setOptions(options);
+
+    DeviceRPCResponse opResult;
+    opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
+    if (null == opResult) {
+      return getTimeOutResponse();
+    }
+    LOG.debug("Received response for request without input params : FaultKey = {}",
+        opResult.getFaultKey());
+
+    response = mapperUtil.getNetconfResponseForRequestWithoutInputParams(opResult);
+
+    return response;
+  }
+
+  @Override
+  public NetConfResponse handleSPAObjectRequest(NetConfRequest request) {
+    LOG.debug("request received for spaObject");
+    Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
+    NetConfResponse response = null;
+    Map<String, String> map =
+        NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "set-parameter-attributes");
+    if (map == null || map.size() <= 0) {
+      LOG.debug(NO_DEVICE_PARAM_FOUND);
+      return getEmptyResponse();
+    }
+    List<ParameterDTO> params = new ArrayList<>();
+    NodeList nl = d1.getElementsByTagName(CONFIG);
+    int len = nl.getLength();
+    for (int i = 0; i < len; i++) {
+      Element elm = (Element) nl.item(i);
+      ParameterAttributeDTO param = mapperUtil.getParamNameAndValueForSPA(elm, CONFIG,
+          request.getSwVersion(), request.getHwVersion());
+
+      if (param == null) {
+        LOG.debug("There are no device parameters found for spaconfig.");
+        return getEmptyResponse();
+      }
+
+      params.add(param);
+    }
+
+    TR069OperationDetails opDetails = new TR069OperationDetails();
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
+    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
+    tr069DeviceDetails.setDeviceId(request.getDeviceId());
+    deviceRPCRequest.setOpDetails(opDetails);
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
+    OperationOptions options = new OperationOptions();
+    options.setExecutionTimeout(60l);
+    deviceRPCRequest.setOptions(options);
+
+    deviceRPCRequest.getOpDetails().setParmeters(params);
+    deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.SET_PARAMETER_ATTRIBUTES);
+
+    LOG.debug("Prepared NBI request for spaobject {} ", deviceRPCRequest);
+
+    DeviceRPCResponse opResult;
+    opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
+    if (null == opResult) {
+      return getTimeOutResponse();
+    }
+
+    ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
+
+    if (opResult.getFaultKey() == null) {
+      responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, "SUCCESS"));
+    } else {
+      responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, FAILED));
+      responseParamDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, opResult.getFaultString()));
+    }
+
+    opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
+    response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
+        request.getHwVersion(), true);
+
+    return response;
+  }
+
+  @Override
+  public NetConfResponse handleGPAObjectRequest(NetConfRequest netConfRequest) {
+    LOG.debug("request received for gpaObject");
+    Document d1 =
+        NetconfToTr069MapperUtil.convertStringToDocumentXml(netConfRequest.getRequestXml());
+    NetConfResponse response = null;
+    Map<String, String> map =
+        NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "get-parameter-attributes");
+    if (map == null || map.size() <= 0) {
+      LOG.debug(NO_DEVICE_PARAM_FOUND);
+      return getEmptyResponse();
+    }
+    List<ParameterDTO> params = new ArrayList<>();
+    NodeList nl = d1.getElementsByTagName(FILTER);
+    int len = nl.getLength();
+    for (int i = 0; i < len; i++) {
+      Element elm = (Element) nl.item(i);
+      ParameterDTO param = mapperUtil.getParamNameAndValueForGPA(elm, PARAMETER,
+          netConfRequest.getSwVersion(), netConfRequest.getHwVersion());
+
+      if (param == null) {
+        LOG.debug("There are no device parameters found for GPA.");
+        return getEmptyResponse();
+      }
+
+      params.add(param);
+    }
+
+    TR069OperationDetails opDetails = new TR069OperationDetails();
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
+    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
+    tr069DeviceDetails.setDeviceId(netConfRequest.getDeviceId());
+    deviceRPCRequest.setOpDetails(opDetails);
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
+    OperationOptions options = new OperationOptions();
+    options.setExecutionTimeout(60l);
+    deviceRPCRequest.setOptions(options);
+
+    deviceRPCRequest.getOpDetails().setParmeters(params);
+    deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.GET_PARAMETER_ATTRIBUTES);
+
+    LOG.debug("Prepared NBI request for gpaobject {}", deviceRPCRequest);
+
+    DeviceRPCResponse opResult;
+    opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
+    if (null == opResult) {
+      return getTimeOutResponse();
+    }
+
+    response = mapperUtil.getNetconfResponseForGPA(opResult, netConfRequest.getSwVersion(),
+        netConfRequest.getHwVersion());
+
+    return response;
+  }
+
+  @Override
+  public NetConfResponse handleConnectionStatusRequest(NetConfRequest request) {
+    NetConfResponse netConfResponse = new NetConfResponse();
+    ConnectionStatusPOJO connStatusPOJO =
+        tr069ReqSender.sendConnectionStatusReq(request.getDeviceId());
+
+    List<ParameterDTO> paramDTOList = new ArrayList<>();
+    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+    if (connStatusPOJO.isStatus()) {
+      paramDTOList.add(new ParameterDTO("rpc-reply.ns1:last-access-status", "SUCCESS"));
+    } else {
+      paramDTOList.add(new ParameterDTO("rpc-reply.ns1:last-access-status", FAILED));
+      paramDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, connStatusPOJO.getErrorMessage()));
+    }
+    String lastContactDate = dateFormat.format(connStatusPOJO.getLastContactTime());
+    paramDTOList.add(new ParameterDTO("rpc-reply.ns1:last-contact-time", lastContactDate));
+
+    String lastFailedAttemptDate = dateFormat.format(connStatusPOJO.getLastFailedAttemptTime());
+    paramDTOList
+        .add(new ParameterDTO("rpc-reply.ns1:last-failure-attempt-time", lastFailedAttemptDate));
+
+    String xml = mapperUtil.getNetconfResponseXML(paramDTOList, request.getSwVersion(),
+        request.getHwVersion(), true);
+    LOG.debug("handleConnectionStatusRequest XML String: {}", xml);
+    netConfResponse.setNetconfResponseXml(xml);
+    return netConfResponse;
+  }
+
+  @Override
+  public NetConfResponse handleDownloadRequest(NetConfRequest request) {
+    LOG.debug("request received for download");
+    Document d1 = NetconfToTr069MapperUtil.convertStringToDocumentXml(request.getRequestXml());
+    NetConfResponse response = null;
+    Map<String, String> map =
+        NetconfToTr069MapperUtil.extractRequestParamters(d1, "rpc", "download");
+    if (map == null || map.size() <= 0) {
+      LOG.debug(NO_DEVICE_PARAM_FOUND);
+      return getEmptyResponse();
+    }
+
+    TR069OperationDetails opDetails = new TR069OperationDetails();
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
+    TR069DeviceDetails tr069DeviceDetails = new TR069DeviceDetails();
+    tr069DeviceDetails.setDeviceId(request.getDeviceId());
+    deviceRPCRequest.setOpDetails(opDetails);
+    deviceRPCRequest.setDeviceDetails(tr069DeviceDetails);
+    OperationOptions options = new OperationOptions();
+    options.setExecutionTimeout(60l);
+    deviceRPCRequest.setOptions(options);
+    String fileName = map.get("rpc.download.target-file-name");
+    String password = map.get("rpc.download.password");
+    String url = map.get("rpc.download.url");
+    String userName = map.get("rpc.download.username");
+
+    if (fileName == null || password == null || url == null || userName == null) {
+      LOG.error("fileName or password or url or userName is not as per yang model");
+      return getOperationAbortedResponse(
+          "fileName or password or url or userName is not as per yang model");
+    }
+
+    List<ParameterDTO> paramDTOList = new ArrayList<>();
+    paramDTOList.add(new ParameterDTO("FileType", map.get("rpc.download.file-type")));
+    paramDTOList.add(new ParameterDTO("URL", url));
+    paramDTOList.add(new ParameterDTO("Username", userName));
+    paramDTOList.add(new ParameterDTO("Password", password));
+    paramDTOList.add(new ParameterDTO("FileSize", map.get("rpc.download.file-size")));
+    paramDTOList.add(new ParameterDTO("TargetFileName", fileName));
+    paramDTOList.add(new ParameterDTO("DelaySeconds", map.get("rpc.download.delay-in-seconds")));
+    paramDTOList.add(new ParameterDTO("SuccessURL", map.get("rpc.download.success-url")));
+    paramDTOList.add(new ParameterDTO("FailureURL", map.get("rpc.download.failure-url")));
+    paramDTOList.add(new ParameterDTO("CommandKey", map.get("rpc.download.command-key")));
+
+    deviceRPCRequest.getOpDetails().setParmeters(paramDTOList);
+    deviceRPCRequest.getOpDetails().setOpCode(TR069OperationCode.DOWNLOAD);
+
+    LOG.debug("Prepared NBI request for download {} ", deviceRPCRequest);
+
+    DeviceOperationDetails fwDetails = deviceOperDAO.findByDeviceId(request.getDeviceId());
+    if (fwDetails == null) {
+      String errorMsg = "TR069 device request has been aborted,due to device not identified";
+      return getOperationAbortedResponse(errorMsg);
+    }
+
+    if (fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus()
+        && fwDetails.getDownLoadStatus() != FirwareUpgradeStatus.DOWNLOAD_COMPLETED.getStatus()) {
+
+      LOG.debug("persisting the fw details {}", fwDetails);
+
+      DeviceRPCResponse opResult;
+      opResult = syncHandler.performDeviceOperation(deviceRPCRequest);
+      if (null == opResult) {
+        return getTimeOutResponse();
+      }
+      fwDetails.setFileName(fileName);
+      fwDetails.setDownLoadStatus(FirwareUpgradeStatus.DOWNLOAD_INTIATED.getStatus());
+      fwDetails.setOrigin("csem");
+      deviceOperDAO.save(fwDetails);
+      ArrayList<ParameterDTO> responseParamDTOList = new ArrayList<>();
+
+      if (opResult.getOperationResponse().getStatus() == 1) {
+        responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, "STARTED"));
+      } else {
+        responseParamDTOList.add(new ParameterDTO(RPC_REPLY_STATUS, FAILED));
+        responseParamDTOList.add(new ParameterDTO(RPC_REPLY_ERROR, opResult.getFaultString()));
+      }
+      responseParamDTOList.add(new ParameterDTO("rpc-reply.ns1:notification-timeout", "1200"));
+
+      opResult.getOperationResponse().setParameterDTOs(responseParamDTOList);
+      response = mapperUtil.getNetconfResponse(opResult, request.getSwVersion(),
+          request.getHwVersion(), true);
+
+      LOG.debug("update the status for fw details {} ", fwDetails);
+    } else {
+      LOG.debug("FirmWare Upgrade is in progress");
+      String errorMsg = "TR069 device request has been aborted as Firmware Upgrade is inProgress";
+      return getOperationAbortedResponse(errorMsg);
+    }
+
+    return response;
+  }
+
+  protected DeviceRPCResponse mergeGetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,
+      DeviceRPCResponse opResultDevice) {
+    if (null == opResultVes) {
+      return opResultDevice;
+    }
+
+    if (null == opResultDevice) {
+      return opResultVes;
+    }
+
+    if (null != opResultVes.getFaultKey()
+        && !opResultVes.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {
+      return opResultVes;
+    } else if (null != opResultDevice.getFaultKey()
+        && !opResultDevice.getFaultKey().equals(MapperConstants.RPC_SUCCESS)) {
+      return opResultDevice;
+    }
+
+    opResultDevice.getOperationResponse().getParameterDTOs()
+        .addAll(opResultVes.getOperationResponse().getParameterDTOs());
+    return opResultDevice;
+  }
+
+  protected DeviceRPCResponse mergeSetConfigDeviceRPCResponse(DeviceRPCResponse opResultVes,
+      DeviceRPCResponse opResultDevice) {
+    if (null == opResultVes) {
+      return opResultDevice;
+    }
+
+    if (null == opResultDevice) {
+      return opResultVes;
+    }
+
+    return opResultDevice;
+  }
+
+  protected boolean isVesNotificationRequest(ParameterDTO param) {
+    if (null == param.getParamName() || param.getParamName().isEmpty()) {
+      return false;
+    }
+
+    if (param.getParamName().toLowerCase().contains(MapperConstants.HEART_BEAT_PERIOD.toLowerCase())
+        || param.getParamName().toLowerCase()
+            .contains(MapperConstants.COUNT_DOWN_TIMER.toLowerCase())
+        || param.getParamName().toLowerCase().contains(MapperConstants.HEART_BEAT.toLowerCase())) {
+      return true;
+    }
+
+    return false;
+  }
+
+  protected void handleBooleanParameters(List<ParameterDTO> parameterDTOs, String swVersion,
+      String hwVersion) {
+
+    for (ParameterDTO param : parameterDTOs) {
+      MOMetaData metaData =
+          metaDataUtil.getMetaDataByTR69Name(param.getParamName(), swVersion, hwVersion);
+      if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {
+        if (BOOLEAN_TRUE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {
+          param.setParamValue(Boolean.TRUE.toString());
+        } else if (BOOLEAN_FALSE_VALUE.equalsIgnoreCase(param.getParamValue().trim())) {
+          param.setParamValue(Boolean.FALSE.toString());
+        }
+      }
+    }
+  }
+
+  protected void handleBooleanParametersReverse(List<ParameterDTO> parameterDTOs, String swVersion,
+      String hwVersion) {
+
+    for (ParameterDTO param : parameterDTOs) {
+      MOMetaData metaData =
+          metaDataUtil.getMetaDataByTR69Name(param.getParamName(), swVersion, hwVersion);
+      if (null != metaData && BOOLEAN_DATA_TYPE.equalsIgnoreCase(metaData.getDataType())) {
+        if (Boolean.TRUE.toString().equalsIgnoreCase(param.getParamValue().trim())) {
+          param.setParamValue(BOOLEAN_TRUE_VALUE);
+        } else if (Boolean.FALSE.toString().equalsIgnoreCase(param.getParamValue().trim())) {
+          param.setParamValue(BOOLEAN_FALSE_VALUE);
+        }
+      }
+    }
+  }
+
+  protected NetConfResponse getEmptyResponse() {
+    NetConfResponse response = new NetConfResponse();
+    ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("0");
+    ErrorCodeDetails errorCode = new ErrorCodeDetails();
+    errorCode.setFaultCode("0");
+    errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());
+    errorCode.setErrorType(errorCodeMetaData.getErrorType());
+    errorCode.setErrorTag(errorCodeMetaData.getErrorTag());
+    errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());
+    response.setErrorCode(errorCode);
+    return response;
+  }
+
+  protected NetConfResponse getTimeOutResponse() {
+    // prepare timeout error response
+    NetConfResponse timeOutErrorResponse = new NetConfResponse();
+    ErrorCodeDetails errorCode = new ErrorCodeDetails();
+    ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");
+
+    errorCode.setFaultCode("8006");
+    errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());
+    errorCode.setErrorType(errorCodeMetaData.getErrorType());
+    errorCode.setErrorTag(errorCodeMetaData.getErrorTag());
+    errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());
+    timeOutErrorResponse.setErrorCode(errorCode);
+    timeOutErrorResponse.setErrorMessage("TR069 device request has been timed out.");
+    return timeOutErrorResponse;
+  }
+
+  protected NetConfResponse getErrorResponse(String errCode, String errorMsg) {
+    NetConfResponse errorResponse = new NetConfResponse();
+    ErrorCodeDetails errorCode = new ErrorCodeDetails();
+    ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");
+    if (errorCodeMetaData != null) {
+      errorCode.setFaultCode(errCode);
+      errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());
+      errorCode.setErrorType(errorCodeMetaData.getErrorType());
+      errorCode.setErrorTag(errorCodeMetaData.getErrorTag());
+      errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());
+    }
+    errorResponse.setErrorCode(errorCode);
+    errorResponse.setErrorMessage(errorMsg);
+    return errorResponse;
+  }
+
+  protected NetConfResponse getOperationAbortedResponse(String errorMessage) {
+    // prepare timeout error response
+    NetConfResponse timeOutErrorResponse = new NetConfResponse();
+    ErrorCodeDetails errorCode = new ErrorCodeDetails();
+    ErrorCodeDetails errorCodeMetaData = errorCodeUtil.getErrorCodeMetaData("8006");
+    if (errorCodeMetaData != null) {
+      errorCode.setFaultCode("8002");
+      errorCode.setErrorMessage(errorCodeMetaData.getErrorMessage());
+      errorCode.setErrorType(errorCodeMetaData.getErrorType());
+      errorCode.setErrorTag(errorCodeMetaData.getErrorTag());
+      errorCode.setErrorSeverity(errorCodeMetaData.getErrorSeverity());
+    }
+    timeOutErrorResponse.setErrorCode(errorCode);
+    timeOutErrorResponse.setErrorMessage(errorMessage);
+    return timeOutErrorResponse;
+  }
+
+  public List<ParameterDTO> filteredSetParameters(List<ParameterDTO> parameters, String swVersion,
+      String hwVersion) {
+    List<ParameterDTO> result = new ArrayList<>();
+    for (ParameterDTO param : parameters) {
+      MOMetaData metaData =
+          metaDataUtil.getMetaDataByNetConfName(param.getParamName(), swVersion, hwVersion);
+      if (null != metaData && !metaData.isReadOnly()) {
+        String tr069MoName =
+            MOMetaDataUtil.getTR69MOByReplacingIndexes(param.getParamName(), metaData.getMoName());
+        param.setDataType(metaData.getDataType());
+        param.setParamName(tr069MoName);
+        result.add(param);
+      }
+    }
+    return result;
+  }
+
+  protected List<ParameterDTO> filteredGetParameters(List<ParameterDTO> parameters,
+      String swVersion, String hwVersion) {
+    return metaDataUtil.getSupportedChildParameters(parameters, swVersion, hwVersion);
+  }
+
+  @Override
+  public boolean handelRegisterEvent(NetConfServerDetails request) {
+    LOG.debug("processing the handelRegisterEvent started");
+    try {
+      VESNotificationResponse vesRsponse = vesnotiSender.sendNotification(null, request);
+      if (HttpStatus.valueOf(vesRsponse.getStatusCode()).is2xxSuccessful()) {
+        LOG.debug("processing the handelRegisterEvent completed");
+        return true;
+      } else {
+        LOG.error("processing the handelRegisterEvent error code recevived: {}",
+            vesRsponse.getStatusCode());
+        return false;
+      }
+    } catch (Exception e) {
+      LOG.error("processing the handelRegisterEvent exception occurred");
+      return false;
+    }
+  }
+
+  protected static String getDownloadFileURI(String filepath) {
+
+    if (filepath.contains("@") && filepath.contains("//")) {
+      String[] str = filepath.split("@");
+      String[] strForUserName = str[0].split("//");
+      if (str.length > 1) {
+        return strForUserName[0] + "//" + str[1];
+      }
+    }
+    return null;
+  }
+
+  protected static String getDownloadUserName(String filepath) {
+
+    if (filepath.contains("@") && filepath.contains("//")) {
+      String[] str = filepath.split("@");
+      String[] strForUserName = str[0].split("//");
+      if (strForUserName.length > 1)
+        return strForUserName[1];
+    }
+    return null;
+  }
+
+  protected boolean isAdminStateOverriden(List<ParameterDTO> paramList) {
+    for (ParameterDTO paramDTO : paramList) {
+      if (paramDTO.getParamName().contains(MapperConstants.ADMIN_STATE)
+          || paramDTO.getParamName().contains(MapperConstants.ADMIN_STATUS)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  protected void convertResposeToSPVResponse(DeviceRPCResponse deviceRPCResponse) {
+    if (null == deviceRPCResponse) {
+      return;
+    }
+
+    OperationResponse operationResponse = new SetParameterValueResponse();
+    operationResponse.setParameterDTOs(new ArrayList<>());
+
+    if (null == deviceRPCResponse.getFaultKey()) {
+      operationResponse.setStatus(MapperConstants.RPC_SUCCESS_CODE);
+    } else {
+      operationResponse.setStatus(MapperConstants.RPC_FAILED_CODE);
+    }
+
+    deviceRPCResponse.setOperationResponse(operationResponse);
+  }
+}