SPV is failing if Admin state
[oam/tr069-adapter.git] / acs / requestprocessor / src / main / java / org / commscope / tr069adapter / acs / requestprocessor / custom / ConfigureMultipleObject.java
index 768edf3..5b36b88 100644 (file)
@@ -20,12 +20,10 @@ package org.commscope.tr069adapter.acs.requestprocessor.custom;
 \r
 import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.NUMBER_REGEX;\r
 import static org.commscope.tr069adapter.acs.common.utils.AcsConstants.SUCCESS;\r
-\r
 import java.util.ArrayList;\r
 import java.util.List;\r
 import java.util.regex.Matcher;\r
 import java.util.regex.Pattern;\r
-\r
 import org.commscope.tr069adapter.acs.common.DeviceRPCRequest;\r
 import org.commscope.tr069adapter.acs.common.DeviceRPCResponse;\r
 import org.commscope.tr069adapter.acs.common.OperationDetails;\r
@@ -252,6 +250,20 @@ public class ConfigureMultipleObject implements CustomOperation {
       } else if (opResponse instanceof SetParameterValueResponse) {\r
         logger.debug("Received Set parameter value response");\r
         isPendingOperationExists = false;\r
+        for (ParameterDTO setParam : tr069modifyParamList) {\r
+          if (Boolean.TRUE.equals(setParam.isInitiated())\r
+              && Boolean.FALSE.equals(setParam.isProcessed())) {\r
+            setParam.setInitiated(Boolean.FALSE);\r
+            setParam.setProcessed(Boolean.TRUE);\r
+          } else if (Boolean.FALSE.equals(setParam.isInitiated())\r
+              && Boolean.FALSE.equals(setParam.isProcessed())) {\r
+            isPendingOperationExists = true;\r
+            nextOperation = OperationOrder.SET_PARAMETER_VALUE;\r
+          }\r
+        }\r
+\r
+        updateParamChangedFlagInDb(deviceDetails.getDeviceId(), nbiDeviceOperationRequest);\r
+        logger.debug("Next operation to be executed is : {}", nextOperation);\r
       }\r
     }\r
 \r
@@ -323,7 +335,39 @@ public class ConfigureMultipleObject implements CustomOperation {
               clonedOpRequest.setOpDetails(null);\r
               OperationDetails opDetails = new OperationDetails();\r
               opDetails.setOpCode(TR069OperationCode.SET_PARAMETER_VALUES);\r
-              opDetails.setParmeters(tr069modifyParamList);\r
+              List<ParameterDTO> unprocessedParamList = new ArrayList<>();\r
+              ParameterDTO adminStateParam = null;\r
+              for (ParameterDTO paramDTO : tr069modifyParamList) {\r
+                if (!paramDTO.isProcessed()) {\r
+                  if (isAdminStateExists(paramDTO)) {\r
+                    adminStateParam = paramDTO;\r
+                  } else {\r
+                    unprocessedParamList.add(paramDTO);\r
+                  }\r
+                }\r
+              }\r
+\r
+              if (null != adminStateParam && isAdminStateFalse(adminStateParam.getParamValue())) {\r
+                List<ParameterDTO> adminStateParamList = new ArrayList<>();\r
+                adminStateParam.setInitiated(Boolean.TRUE);\r
+                adminStateParamList.add(adminStateParam);\r
+                opDetails.setParmeters(adminStateParamList);\r
+                updateParamChangedFlagInDb(deviceDetails.getDeviceId(), nbiDeviceOperationRequest);\r
+              } else if (!unprocessedParamList.isEmpty()) {\r
+                setInititedFlagTrue(unprocessedParamList);\r
+                opDetails.setParmeters(unprocessedParamList);\r
+                updateParamChangedFlagInDb(deviceDetails.getDeviceId(), nbiDeviceOperationRequest);\r
+              } else if (null != adminStateParam\r
+                  && isAdminStateTrue(adminStateParam.getParamValue())) {\r
+                List<ParameterDTO> paramList = new ArrayList<>();\r
+                adminStateParam.setInitiated(Boolean.TRUE);\r
+                paramList.add(adminStateParam);\r
+                opDetails.setParmeters(paramList);\r
+                updateParamChangedFlagInDb(deviceDetails.getDeviceId(), nbiDeviceOperationRequest);\r
+              } else {\r
+                isPendingOperationExists = false;\r
+              }\r
+\r
               clonedOpRequest.setOpDetails(opDetails);\r
               operRequest = clonedOpRequest;\r
             } else {\r
@@ -383,6 +427,7 @@ public class ConfigureMultipleObject implements CustomOperation {
     return customOperationData;\r
   }\r
 \r
+\r
   enum OperationOrder {\r
 \r
     SET_PARAMETER_VALUE(null), ADD_OBJECT(SET_PARAMETER_VALUE), DELETE_OBJECT(ADD_OBJECT);\r
@@ -421,4 +466,37 @@ public class ConfigureMultipleObject implements CustomOperation {
     return parameterDTO;\r
   }\r
 \r
+  private boolean isAdminStateExists(ParameterDTO paramDTO) {\r
+    return (paramDTO.getParamName().contains(TR069RequestProcessorUtility.ADMIN_STATE)\r
+        || paramDTO.getParamName().contains(TR069RequestProcessorUtility.ADMIN_STATUS));\r
+  }\r
+\r
+  private void updateParamChangedFlagInDb(String deviceId,\r
+      DeviceRPCRequest nbiDeviceOperationRequest) throws TR069EventProcessingException {\r
+    List<TR069DeviceRPCRequestEntity> entityList = deviceRPCRequestRepositoryHelper\r
+        .findByDeviceIdAndOperationId(deviceId, nbiDeviceOperationRequest.getOperationId());\r
+    List<TR069DeviceRPCRequestEntity> tr069DeviceRPCRequestEntityList =\r
+        TR069RequestProcessorUtility.convertToEntity(nbiDeviceOperationRequest);\r
+    for (int i = 0; i < entityList.size(); i++) {\r
+      tr069DeviceRPCRequestEntityList.get(i).setId(entityList.get(i).getId());\r
+    }\r
+    deviceRPCRequestRepositoryHelper.saveAll(tr069DeviceRPCRequestEntityList);\r
+  }\r
+\r
+  private void setInititedFlagTrue(List<ParameterDTO> unprocessedParamList) {\r
+    for (ParameterDTO paramDTO : unprocessedParamList) {\r
+      paramDTO.setInitiated(Boolean.TRUE);\r
+    }\r
+  }\r
+\r
+  private boolean isAdminStateFalse(String adminState) {\r
+    return (null != adminState && (adminState.equalsIgnoreCase(Boolean.FALSE.toString())\r
+        || adminState.equalsIgnoreCase("0")));\r
+  }\r
+\r
+  private boolean isAdminStateTrue(String adminState) {\r
+    return (null != adminState && (adminState.equalsIgnoreCase(Boolean.TRUE.toString())\r
+        || adminState.equalsIgnoreCase("1")));\r
+  }\r
+\r
 }\r