Development of NETCONF RPCs for tr-069 adapter to
[oam/tr069-adapter.git] / acs / requestprocessor / src / main / java / org / commscope / tr069adapter / acs / requestprocessor / util / TR069RequestProcessorUtility.java
index 1ce4a44..5268908 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
-\r
-package org.commscope.tr069adapter.acs.requestprocessor.util;\r
-\r
-import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS;\r
-\r
-import com.google.gson.Gson;\r
-import com.google.gson.reflect.TypeToken;\r
-\r
-import java.lang.reflect.Type;\r
-import java.util.ArrayList;\r
-import java.util.Date;\r
-import java.util.List;\r
-\r
-import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
-import org.commscope.tr069adapter.acs.common.OperationCode;\r
-import org.commscope.tr069adapter.acs.common.OperationDetails;\r
-import org.commscope.tr069adapter.acs.common.OperationOptions;\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.ParameterAttributeDTO;\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.exception.TR069EventProcessingException;\r
-import org.commscope.tr069adapter.acs.common.utils.ErrorCode;\r
-import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;\r
-\r
-public class TR069RequestProcessorUtility {\r
-\r
-  protected static final int BLOCK_SIZE = 3999;\r
-  protected static final int MAX_SIZE = 11998;\r
-  public static final int DEVICE_REACHABLE_STATUS_CODE = 100;\r
-  public static final String ADMIN_STATE = "FAPControl.LTE.AdminState";\r
-  public static final String ADMIN_STATUS = "FAPControl.LTE.AdminStatus";\r
-\r
-\r
-  private TR069RequestProcessorUtility() {\r
-    super();\r
-  }\r
-\r
-  /**\r
-   * Converts entity object to DTO\r
-   * \r
-   * @param entityList\r
-   * @return\r
-   */\r
-  public static DeviceRPCRequest convertToDTO(List<TR069DeviceRPCRequestEntity> entityList) {\r
-    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();\r
-    OperationDetails operationDetails = new TR069OperationDetails();\r
-\r
-    boolean isCustomOperation = true;\r
-    OperationCode opCode = null;\r
-\r
-    TR069DeviceRPCRequestEntity entity = entityList.get(0);\r
-    if (CustomOperationCode.getByOperationCode(entity.getOpCode()) != null) {\r
-      opCode = CustomOperationCode.getByOperationCode(entity.getOpCode());\r
-    } else {\r
-      opCode = TR069OperationCode.getByOperationCode(entity.getOpCode());\r
-      isCustomOperation = false;\r
-    }\r
-\r
-    operationDetails.setOpCode(opCode);\r
-    dtoFromEntityJson(operationDetails, entityList, isCustomOperation);\r
-    deviceRPCRequest.setOpDetails(operationDetails);\r
-\r
-    OperationOptions opOptions = new OperationOptions();\r
-    opOptions.setExecutionTimeout(entity.getRequestTimeOut());\r
-    deviceRPCRequest.setOptions(opOptions);\r
-\r
-    TR069DeviceDetails deviceDetails = new TR069DeviceDetails();\r
-    deviceDetails.setDeviceId(entity.getDeviceId());\r
-\r
-    deviceRPCRequest.setDeviceDetails(deviceDetails);\r
-    deviceRPCRequest.setOperationId(entity.getOperationId());\r
-    return deviceRPCRequest;\r
-  }\r
-\r
-  /**\r
-   * Converts DTO to entity object\r
-   * \r
-   * @param deviceRPCRequest\r
-   * @return\r
-   * @throws TR069EventProcessingException\r
-   */\r
-  public static List<TR069DeviceRPCRequestEntity> convertToEntity(DeviceRPCRequest deviceRPCRequest)\r
-      throws TR069EventProcessingException {\r
-\r
-    if (deviceRPCRequest.getOpDetails() == null\r
-        || deviceRPCRequest.getOpDetails().getOpCode() == null) {\r
-      throw new TR069EventProcessingException(ErrorCode.MISSING_OPERATION_DETAILS);\r
-    }\r
-\r
-    Integer opCode = null;\r
-    boolean isCustomOperation = true;\r
-    OperationCode operationCode = deviceRPCRequest.getOpDetails().getOpCode();\r
-    if (CustomOperationCode.getByOperationCode(operationCode.getOperationCode()) != null) {\r
-      CustomOperationCode customOperationCode =\r
-          CustomOperationCode.getByOperationCode(operationCode.getOperationCode());\r
-      opCode = customOperationCode.getOperationCode();\r
-    } else {\r
-      TR069OperationCode tr069OperationCode =\r
-          (TR069OperationCode) deviceRPCRequest.getOpDetails().getOpCode();\r
-      opCode = tr069OperationCode.getOperationCode();\r
-      isCustomOperation = false;\r
-    }\r
-\r
-    String paramListJSON = paramListToJson(deviceRPCRequest, isCustomOperation);\r
-    List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities =\r
-        getTR069DeviceRPCRequestEntities(paramListJSON);\r
-\r
-    for (TR069DeviceRPCRequestEntity entity : tr069DeviceRPCRequestEntities) {\r
-      entity.setOpCode(opCode);\r
-      entity.setCreateTime(new Date());\r
-      entity.setDeviceId(deviceRPCRequest.getDeviceDetails().getDeviceId());\r
-      entity.setOperationId(deviceRPCRequest.getOperationId());\r
-      entity.setIsProcessed(0);\r
-      if (deviceRPCRequest.getOptions() != null\r
-          && deviceRPCRequest.getOptions().getExecutionTimeout() != 0L) {\r
-        entity.setRequestTimeOut(deviceRPCRequest.getOptions().getExecutionTimeout());\r
-      } else {\r
-        entity.setRequestTimeOut(DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS);\r
-        OperationOptions options = new OperationOptions();\r
-        options.setExecutionTimeout(DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS);\r
-        deviceRPCRequest.setOptions(options);\r
-      }\r
-    }\r
-\r
-    return tr069DeviceRPCRequestEntities;\r
-  }\r
-\r
-  /**\r
-   * @param entity\r
-   * @param dto\r
-   * @param isCustomOperation\r
-   */\r
-  private static String paramListToJson(DeviceRPCRequest dto, boolean isCustomOperation) {\r
-    String attrJsonString = null;\r
-    if (isCustomOperation) {\r
-      TR069OperationDetails operationDetails = (TR069OperationDetails) dto.getOpDetails();\r
-      StringBuilder buffer = new StringBuilder();\r
-\r
-      List<ParameterDTO> deletParamList = operationDetails.getDeleteParamList();\r
-      List<ParameterDTO> modifyParamList = operationDetails.getModifyParamList();\r
-      List<ParameterDTO> setParamList = operationDetails.getSetParamList();\r
-\r
-      if (deletParamList != null && !deletParamList.isEmpty()) {\r
-        convertBooleanValues(deletParamList);\r
-        buffer.append(toJson(deletParamList));\r
-      } else {\r
-        buffer.append(toJson(new ArrayList<>()));\r
-      }\r
-\r
-      if (modifyParamList != null && !modifyParamList.isEmpty()) {\r
-        convertBooleanValues(modifyParamList);\r
-        buffer.append(toJson(modifyParamList));\r
-      } else {\r
-        buffer.append(toJson(new ArrayList<>()));\r
-      }\r
-\r
-      if (setParamList != null && !setParamList.isEmpty()) {\r
-        convertBooleanValues(setParamList);\r
-        buffer.append(toJson(setParamList));\r
-      } else {\r
-        buffer.append(toJson(new ArrayList<>()));\r
-      }\r
-\r
-      attrJsonString = buffer.toString();\r
-    } else {\r
-      List<ParameterDTO> parameterDTOs = dto.getOpDetails().getParmeters();\r
-      attrJsonString = toJson(parameterDTOs);\r
-    }\r
-\r
-    return attrJsonString;\r
-  }\r
-\r
-  /**\r
-   * @param paramListJSON\r
-   * @return\r
-   */\r
-  private static List<TR069DeviceRPCRequestEntity> getTR069DeviceRPCRequestEntities(\r
-      String paramListJSON) {\r
-    List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities = new ArrayList<>();\r
-\r
-    if (paramListJSON.length() < MAX_SIZE) {\r
-      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
-      entity.setAttributeJson1(getAttriuteJsonData(paramListJSON, 0));\r
-      entity.setAttributeJson2(getAttriuteJsonData(paramListJSON, 1));\r
-      entity.setAttributeJson3(getAttriuteJsonData(paramListJSON, 2));\r
-\r
-      tr069DeviceRPCRequestEntities.add(entity);\r
-    } else {\r
-      int noOfEntities = 0;\r
-      while (true) {\r
-        int i = 3 * noOfEntities;\r
-        TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();\r
-        entity.setAttributeJson1(getAttriuteJsonData(paramListJSON, i));\r
-        entity.setAttributeJson2(getAttriuteJsonData(paramListJSON, ++i));\r
-        entity.setAttributeJson3(getAttriuteJsonData(paramListJSON, ++i));\r
-\r
-        if (entity.getAttributeJson1() != null) {\r
-          tr069DeviceRPCRequestEntities.add(entity);\r
-        }\r
-\r
-        if (entity.getAttributeJson1() == null || entity.getAttributeJson2() == null\r
-            || entity.getAttributeJson3() == null) {\r
-          break;\r
-        }\r
-\r
-        noOfEntities++;\r
-      }\r
-\r
-    }\r
-    return tr069DeviceRPCRequestEntities;\r
-  }\r
-\r
-  /**\r
-   * @param eventData\r
-   * @param blockNum\r
-   * @return\r
-   */\r
-  private static String getAttriuteJsonData(String eventData, int blockNum) {\r
-    int eventDataSize = eventData.length();\r
-    int startIndex = blockNum * BLOCK_SIZE;\r
-    if (startIndex > eventDataSize) {\r
-      return null;\r
-    }\r
-    int endIndex = startIndex + BLOCK_SIZE;\r
-    endIndex = endIndex < eventDataSize ? endIndex : eventDataSize;\r
-    return eventData.substring(startIndex, endIndex);\r
-  }\r
-\r
-  /**\r
-   * @param opDetails\r
-   * @param entity\r
-   * @param isCustomOperation\r
-   */\r
-  private static void dtoFromEntityJson(OperationDetails opDetails,\r
-      List<TR069DeviceRPCRequestEntity> entityList, boolean isCustomOperation) {\r
-    StringBuilder sb = new StringBuilder();\r
-    for (TR069DeviceRPCRequestEntity entity : entityList) {\r
-      append(sb, entity.getAttributeJson1());\r
-      append(sb, entity.getAttributeJson2());\r
-      append(sb, entity.getAttributeJson3());\r
-    }\r
-\r
-    if (isCustomOperation) {\r
-      String[] splitStringArray = sb.toString().split("]\\[");\r
-      List<ParameterDTO> deleteParamList = new ArrayList<>();\r
-      List<ParameterDTO> modifyParamList = new ArrayList<>();\r
-      List<ParameterDTO> setParamList = new ArrayList<>();\r
-      for (int i = 0; i < splitStringArray.length; i++) {\r
-        String data = splitStringArray[i];\r
-        if (i == 0) {\r
-          data = data + "]";\r
-          deleteParamList.addAll(fromJson(data));\r
-        } else if ((i + 1) == splitStringArray.length) {\r
-          data = "[" + data;\r
-          setParamList.addAll(fromJson(data));\r
-        } else {\r
-          data = "[" + data + "]";\r
-          modifyParamList.addAll(fromJson(data));\r
-        }\r
-      }\r
-      TR069OperationDetails tr069OperationDetails = (TR069OperationDetails) opDetails;\r
-      tr069OperationDetails.setDeleteParamList(deleteParamList);\r
-      tr069OperationDetails.setModifyParamList(modifyParamList);\r
-      tr069OperationDetails.setSetParamList(setParamList);\r
-    } else {\r
-      if (TR069OperationCode.SET_PARAMETER_ATTRIBUTES.equals(opDetails.getOpCode())) {\r
-        List<ParameterDTO> list = fromJsonToParameterAttribute(sb.toString());\r
-        opDetails.setParmeters(list);\r
-      } else {\r
-        List<ParameterDTO> list = fromJson(sb.toString());\r
-        opDetails.setParmeters(list);\r
-      }\r
-    }\r
-  }\r
-\r
-  /**\r
-   * @param sb\r
-   * @param temp\r
-   */\r
-  private static void append(StringBuilder sb, String temp) {\r
-    if (temp != null && !temp.isEmpty()) {\r
-      sb.append(temp);\r
-    }\r
-  }\r
-\r
-  /**\r
-   * @param jsonString\r
-   * @return\r
-   */\r
-  private static List<ParameterDTO> fromJson(String jsonString) {\r
-    Gson gson = new Gson();\r
-    Type collectionType = new TypeToken<List<ParameterDTO>>() {}.getType();\r
-    return gson.fromJson(jsonString, collectionType);\r
-  }\r
-\r
-  /**\r
-   * @param jsonString\r
-   * @return\r
-   */\r
-  private static List<ParameterDTO> fromJsonToParameterAttribute(String jsonString) {\r
-    Gson gson = new Gson();\r
-    Type collectionType = new TypeToken<List<ParameterAttributeDTO>>() {}.getType();\r
-    return gson.fromJson(jsonString, collectionType);\r
-  }\r
-\r
-  /**\r
-   * @param entity\r
-   * @return\r
-   */\r
-  private static <T> String toJson(T entity) {\r
-    Gson gson = new Gson();\r
-    return gson.toJson(entity);\r
-  }\r
-\r
-  /**\r
-   * @param parameterDTOs\r
-   */\r
-  private static void convertBooleanValues(List<ParameterDTO> parameterDTOs) {\r
-    for (ParameterDTO param : parameterDTOs) {\r
-      if (param.getDataType() != null && param.getDataType().equalsIgnoreCase("boolean")) {\r
-        if (param.getParamValue() != null && (param.getParamValue().equalsIgnoreCase("true")\r
-            || param.getParamValue().equalsIgnoreCase("1"))) {\r
-          param.setParamValue("1");\r
-        } else {\r
-          param.setParamValue("0");\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-}\r
+/*
+ * ============LICENSE_START========================================================================
+ * ONAP : tr-069-adapter
+ * =================================================================================================
+ * Copyright (C) 2020 CommScope Inc Intellectual Property.
+ * =================================================================================================
+ * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
+ * may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ===============LICENSE_END=======================================================================
+ */
+
+
+package org.commscope.tr069adapter.acs.requestprocessor.util;
+
+import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;
+import org.commscope.tr069adapter.acs.common.OperationCode;
+import org.commscope.tr069adapter.acs.common.OperationDetails;
+import org.commscope.tr069adapter.acs.common.OperationOptions;
+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.exception.TR069EventProcessingException;
+import org.commscope.tr069adapter.acs.common.utils.ErrorCode;
+import org.commscope.tr069adapter.acs.requestprocessor.entity.TR069DeviceRPCRequestEntity;
+
+public class TR069RequestProcessorUtility {
+
+  protected static final int BLOCK_SIZE = 3999;
+  protected static final int MAX_SIZE = 11998;
+  public static final int DEVICE_REACHABLE_STATUS_CODE = 100;
+  public static final String ADMIN_STATE = "FAPControl.LTE.AdminState";
+  public static final String ADMIN_STATUS = "FAPControl.LTE.AdminStatus";
+
+
+  private TR069RequestProcessorUtility() {
+    super();
+  }
+
+  /**
+   * Converts entity object to DTO
+   * 
+   * @param entityList
+   * @return
+   */
+  public static DeviceRPCRequest convertToDTO(List<TR069DeviceRPCRequestEntity> entityList) {
+    DeviceRPCRequest deviceRPCRequest = new DeviceRPCRequest();
+    OperationDetails operationDetails = new TR069OperationDetails();
+
+    boolean isCustomOperation = true;
+    OperationCode opCode = null;
+
+    TR069DeviceRPCRequestEntity entity = entityList.get(0);
+    if (CustomOperationCode.getByOperationCode(entity.getOpCode()) != null) {
+      opCode = CustomOperationCode.getByOperationCode(entity.getOpCode());
+    } else {
+      opCode = TR069OperationCode.getByOperationCode(entity.getOpCode());
+      isCustomOperation = false;
+    }
+
+    operationDetails.setOpCode(opCode);
+    dtoFromEntityJson(operationDetails, entityList, isCustomOperation);
+    deviceRPCRequest.setOpDetails(operationDetails);
+
+    OperationOptions opOptions = new OperationOptions();
+    opOptions.setExecutionTimeout(entity.getRequestTimeOut());
+    deviceRPCRequest.setOptions(opOptions);
+
+    TR069DeviceDetails deviceDetails = new TR069DeviceDetails();
+    deviceDetails.setDeviceId(entity.getDeviceId());
+
+    deviceRPCRequest.setDeviceDetails(deviceDetails);
+    deviceRPCRequest.setOperationId(entity.getOperationId());
+    return deviceRPCRequest;
+  }
+
+  /**
+   * Converts DTO to entity object
+   * 
+   * @param deviceRPCRequest
+   * @return
+   * @throws TR069EventProcessingException
+   */
+  public static List<TR069DeviceRPCRequestEntity> convertToEntity(DeviceRPCRequest deviceRPCRequest)
+      throws TR069EventProcessingException {
+
+    if (deviceRPCRequest.getOpDetails() == null
+        || deviceRPCRequest.getOpDetails().getOpCode() == null) {
+      throw new TR069EventProcessingException(ErrorCode.MISSING_OPERATION_DETAILS);
+    }
+
+    Integer opCode = null;
+    boolean isCustomOperation = true;
+    OperationCode operationCode = deviceRPCRequest.getOpDetails().getOpCode();
+    if (CustomOperationCode.getByOperationCode(operationCode.getOperationCode()) != null) {
+      CustomOperationCode customOperationCode =
+          CustomOperationCode.getByOperationCode(operationCode.getOperationCode());
+      opCode = customOperationCode.getOperationCode();
+    } else {
+      TR069OperationCode tr069OperationCode =
+          (TR069OperationCode) deviceRPCRequest.getOpDetails().getOpCode();
+      opCode = tr069OperationCode.getOperationCode();
+      isCustomOperation = false;
+    }
+
+    String paramListJSON = paramListToJson(deviceRPCRequest, isCustomOperation);
+    List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities =
+        getTR069DeviceRPCRequestEntities(paramListJSON);
+
+    for (TR069DeviceRPCRequestEntity entity : tr069DeviceRPCRequestEntities) {
+      entity.setOpCode(opCode);
+      entity.setCreateTime(new Date());
+      entity.setDeviceId(deviceRPCRequest.getDeviceDetails().getDeviceId());
+      entity.setOperationId(deviceRPCRequest.getOperationId());
+      entity.setIsProcessed(0);
+      if (deviceRPCRequest.getOptions() != null
+          && deviceRPCRequest.getOptions().getExecutionTimeout() != 0L) {
+        entity.setRequestTimeOut(deviceRPCRequest.getOptions().getExecutionTimeout());
+      } else {
+        entity.setRequestTimeOut(DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS);
+        OperationOptions options = new OperationOptions();
+        options.setExecutionTimeout(DEVICE_RPC_EXECUTION_TIMEOUT_SECONDS);
+        deviceRPCRequest.setOptions(options);
+      }
+    }
+
+    return tr069DeviceRPCRequestEntities;
+  }
+
+  /**
+   * @param entity
+   * @param dto
+   * @param isCustomOperation
+   */
+  private static String paramListToJson(DeviceRPCRequest dto, boolean isCustomOperation) {
+    String attrJsonString = null;
+    if (isCustomOperation) {
+      TR069OperationDetails operationDetails = (TR069OperationDetails) dto.getOpDetails();
+      StringBuilder buffer = new StringBuilder();
+
+      List<ParameterDTO> deletParamList = operationDetails.getDeleteParamList();
+      List<ParameterDTO> modifyParamList = operationDetails.getModifyParamList();
+      List<ParameterDTO> setParamList = operationDetails.getSetParamList();
+
+      if (deletParamList != null && !deletParamList.isEmpty()) {
+        convertBooleanValues(deletParamList);
+        buffer.append(toJson(deletParamList));
+      } else {
+        buffer.append(toJson(new ArrayList<>()));
+      }
+
+      if (modifyParamList != null && !modifyParamList.isEmpty()) {
+        convertBooleanValues(modifyParamList);
+        buffer.append(toJson(modifyParamList));
+      } else {
+        buffer.append(toJson(new ArrayList<>()));
+      }
+
+      if (setParamList != null && !setParamList.isEmpty()) {
+        convertBooleanValues(setParamList);
+        buffer.append(toJson(setParamList));
+      } else {
+        buffer.append(toJson(new ArrayList<>()));
+      }
+
+      attrJsonString = buffer.toString();
+    } else {
+      List<ParameterDTO> parameterDTOs = dto.getOpDetails().getParmeters();
+      attrJsonString = toJson(parameterDTOs);
+    }
+
+    return attrJsonString;
+  }
+
+  /**
+   * @param paramListJSON
+   * @return
+   */
+  private static List<TR069DeviceRPCRequestEntity> getTR069DeviceRPCRequestEntities(
+      String paramListJSON) {
+    List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntities = new ArrayList<>();
+
+    if (paramListJSON.length() < MAX_SIZE) {
+      TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();
+      entity.setAttributeJson1(getAttriuteJsonData(paramListJSON, 0));
+      entity.setAttributeJson2(getAttriuteJsonData(paramListJSON, 1));
+      entity.setAttributeJson3(getAttriuteJsonData(paramListJSON, 2));
+
+      tr069DeviceRPCRequestEntities.add(entity);
+    } else {
+      int noOfEntities = 0;
+      while (true) {
+        int i = 3 * noOfEntities;
+        TR069DeviceRPCRequestEntity entity = new TR069DeviceRPCRequestEntity();
+        entity.setAttributeJson1(getAttriuteJsonData(paramListJSON, i));
+        entity.setAttributeJson2(getAttriuteJsonData(paramListJSON, ++i));
+        entity.setAttributeJson3(getAttriuteJsonData(paramListJSON, ++i));
+
+        if (entity.getAttributeJson1() != null) {
+          tr069DeviceRPCRequestEntities.add(entity);
+        }
+
+        if (entity.getAttributeJson1() == null || entity.getAttributeJson2() == null
+            || entity.getAttributeJson3() == null) {
+          break;
+        }
+
+        noOfEntities++;
+      }
+
+    }
+    return tr069DeviceRPCRequestEntities;
+  }
+
+  /**
+   * @param eventData
+   * @param blockNum
+   * @return
+   */
+  private static String getAttriuteJsonData(String eventData, int blockNum) {
+    int eventDataSize = eventData.length();
+    int startIndex = blockNum * BLOCK_SIZE;
+    if (startIndex > eventDataSize) {
+      return null;
+    }
+    int endIndex = startIndex + BLOCK_SIZE;
+    endIndex = endIndex < eventDataSize ? endIndex : eventDataSize;
+    return eventData.substring(startIndex, endIndex);
+  }
+
+  /**
+   * @param opDetails
+   * @param entity
+   * @param isCustomOperation
+   */
+  private static void dtoFromEntityJson(OperationDetails opDetails,
+      List<TR069DeviceRPCRequestEntity> entityList, boolean isCustomOperation) {
+    StringBuilder sb = new StringBuilder();
+    for (TR069DeviceRPCRequestEntity entity : entityList) {
+      append(sb, entity.getAttributeJson1());
+      append(sb, entity.getAttributeJson2());
+      append(sb, entity.getAttributeJson3());
+    }
+
+    if (isCustomOperation) {
+      String[] splitStringArray = sb.toString().split("]\\[");
+      List<ParameterDTO> deleteParamList = new ArrayList<>();
+      List<ParameterDTO> modifyParamList = new ArrayList<>();
+      List<ParameterDTO> setParamList = new ArrayList<>();
+      for (int i = 0; i < splitStringArray.length; i++) {
+        String data = splitStringArray[i];
+        if (i == 0) {
+          data = data + "]";
+          deleteParamList.addAll(fromJson(data));
+        } else if ((i + 1) == splitStringArray.length) {
+          data = "[" + data;
+          setParamList.addAll(fromJson(data));
+        } else {
+          data = "[" + data + "]";
+          modifyParamList.addAll(fromJson(data));
+        }
+      }
+      TR069OperationDetails tr069OperationDetails = (TR069OperationDetails) opDetails;
+      tr069OperationDetails.setDeleteParamList(deleteParamList);
+      tr069OperationDetails.setModifyParamList(modifyParamList);
+      tr069OperationDetails.setSetParamList(setParamList);
+    } else {
+      if (TR069OperationCode.SET_PARAMETER_ATTRIBUTES.equals(opDetails.getOpCode())) {
+        List<ParameterDTO> list = fromJsonToParameterAttribute(sb.toString());
+        opDetails.setParmeters(list);
+      } else {
+        List<ParameterDTO> list = fromJson(sb.toString());
+        opDetails.setParmeters(list);
+      }
+    }
+  }
+
+  /**
+   * @param sb
+   * @param temp
+   */
+  private static void append(StringBuilder sb, String temp) {
+    if (temp != null && !temp.isEmpty()) {
+      sb.append(temp);
+    }
+  }
+
+  /**
+   * @param jsonString
+   * @return
+   */
+  private static List<ParameterDTO> fromJson(String jsonString) {
+    Gson gson = new Gson();
+    Type collectionType = new TypeToken<List<ParameterDTO>>() {}.getType();
+    return gson.fromJson(jsonString, collectionType);
+  }
+
+  /**
+   * @param jsonString
+   * @return
+   */
+  private static List<ParameterDTO> fromJsonToParameterAttribute(String jsonString) {
+    Gson gson = new Gson();
+    Type collectionType = new TypeToken<List<ParameterAttributeDTO>>() {}.getType();
+    return gson.fromJson(jsonString, collectionType);
+  }
+
+  /**
+   * @param entity
+   * @return
+   */
+  private static <T> String toJson(T entity) {
+    Gson gson = new Gson();
+    return gson.toJson(entity);
+  }
+
+  /**
+   * @param parameterDTOs
+   */
+  private static void convertBooleanValues(List<ParameterDTO> parameterDTOs) {
+    for (ParameterDTO param : parameterDTOs) {
+      if (param.getDataType() != null && param.getDataType().equalsIgnoreCase("boolean")) {
+        if (param.getParamValue() != null && (param.getParamValue().equalsIgnoreCase("true")
+            || param.getParamValue().equalsIgnoreCase("1"))) {
+          param.setParamValue("1");
+        } else {
+          param.setParamValue("0");
+        }
+      }
+    }
+  }
+
+}