Merge "fixed aai response code in updateAAIVfModule"
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / bpmn / infrastructure / workflow / tasks / WorkflowActionBBTasks.java
index 4e02ca3..d9125e4 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.so.bpmn.infrastructure.workflow.tasks;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import org.camunda.bpm.engine.delegate.BpmnError;
 import org.camunda.bpm.engine.delegate.DelegateExecution;
@@ -57,6 +58,8 @@ public class WorkflowActionBBTasks {
        private RequestsDbClient requestDbclient;
        @Autowired
        private WorkflowAction workflowAction;
+       @Autowired
+       private WorkflowActionBBFailure workflowActionBBFailure;
        
        public void selectBB(DelegateExecution execution) {
                List<ExecuteBuildingBlock> flowsToExecute = (List<ExecuteBuildingBlock>) execution
@@ -109,7 +112,7 @@ public class WorkflowActionBBTasks {
                String statusMessage = this.getStatusMessage(completedBB.getBuildingBlock().getBpmnFlowName(), 
                                nextBB.getBuildingBlock().getBpmnFlowName(), completedBBs, remainingBBs);
                Long percentProgress = this.getPercentProgress(completedBBs, totalBBs);
-               request.setStatusMessage(statusMessage);
+               request.setFlowStatus(statusMessage);
                request.setProgress(percentProgress);
                request.setLastModifiedBy("CamundaBPMN");
                return request;
@@ -201,30 +204,20 @@ public class WorkflowActionBBTasks {
                execution.setVariable("mso-service-instance-id", resourceId);
        }
 
-       public void setupFalloutHandler(DelegateExecution execution) {
-               final String requestId = (String) execution.getVariable(G_REQUEST_ID);
-               final String action = (String) execution.getVariable(G_ACTION);
-               final String resourceId = (String) execution.getVariable("resourceId");
-               String exceptionMsg = "";
-               if (execution.getVariable("WorkflowActionErrorMessage") != null) {
-                       exceptionMsg = (String) execution.getVariable("WorkflowActionErrorMessage");
-               } else {
-                       exceptionMsg = "Error in WorkflowAction";
-               }
-               execution.setVariable("mso-service-instance-id", resourceId);
-               execution.setVariable("mso-request-id", requestId);
-               String falloutRequest = "<aetgt:FalloutHandlerRequest xmlns:aetgt=\"http://org.onap/so/workflow/schema/v1\"xmlns:ns=\"http://org.onap/so/request/types/v1\"xmlns:wfsch=\"http://org.onap/so/workflow/schema/v1\"><request-info xmlns=\"http://org.onap/so/infra/vnf-request/v1\"><request-id>"
-                               + requestId + "</request-id><action>" + action
-                               + "</action><source>VID</source></request-info><aetgt:WorkflowException xmlns:aetgt=\"http://org.onap/so/workflow/schema/v1\"><aetgt:ErrorMessage>"
-                               + exceptionMsg
-                               + "</aetgt:ErrorMessage><aetgt:ErrorCode>7000</aetgt:ErrorCode></aetgt:WorkflowException></aetgt:FalloutHandlerRequest>";
-               execution.setVariable("falloutRequest", falloutRequest);
-       }
-
        public void checkRetryStatus(DelegateExecution execution) {
                String handlingCode = (String) execution.getVariable("handlingCode");
+               String requestId = (String) execution.getVariable(G_REQUEST_ID);
+               String retryDuration = (String) execution.getVariable("RetryDuration");
                int retryCount = (int) execution.getVariable(RETRY_COUNT);
                if (handlingCode.equals("Retry")){
+                       workflowActionBBFailure.updateRequestErrorStatusMessage(execution);
+                       try{
+                               InfraActiveRequests request = requestDbclient.getInfraActiveRequestbyRequestId(requestId);
+                               request.setRetryStatusMessage("Retry " + retryCount+1 + "/5 will be started in " + retryDuration);
+                               requestDbclient.updateInfraActiveRequests(request); 
+                       } catch(Exception ex){
+                               logger.warn("Failed to update Request Db Infra Active Requests with Retry Status",ex);
+                       }
                        if(retryCount<5){
                                int currSequence = (int) execution.getVariable("gCurrentSequence");
                                execution.setVariable("gCurrentSequence", currSequence-1);
@@ -266,6 +259,19 @@ public class WorkflowActionBBTasks {
                                        rollbackFlows.add(flowsToExecute.get(i));
                                }
                        }
+                       
+                       int flowSize = rollbackFlows.size();
+                       String handlingCode = (String) execution.getVariable("handlingCode");
+                       if(handlingCode.equals("RollbackToAssigned")){
+                               for(int i = 0; i<flowSize -1; i++){
+                                       if(rollbackFlows.get(i).getBuildingBlock().getBpmnFlowName().contains("Unassign")){
+                                               rollbackFlows.remove(i);
+                                       }
+                               }
+                       }
+                       
+                       workflowActionBBFailure.updateRequestErrorStatusMessage(execution);
+                       
                        if (rollbackFlows.isEmpty())
                                execution.setVariable("isRollbackNeeded", false);
                        else
@@ -274,55 +280,9 @@ public class WorkflowActionBBTasks {
                        execution.setVariable("handlingCode", "PreformingRollback");
                        execution.setVariable("isRollback", true);
                        execution.setVariable("gCurrentSequence", 0);
+                       execution.setVariable(RETRY_COUNT, 0);
                }else{
                        workflowAction.buildAndThrowException(execution, "Rollback has already been called. Cannot rollback a request that is currently in the rollback state.");
                }
        }
-
-       public void abortCallErrorHandling(DelegateExecution execution) {
-               String msg = "Flow has failed. Rainy day handler has decided to abort the process.";
-               logger.error(msg);
-               throw new BpmnError(msg);
-       }
-
-       public void updateRequestStatusToFailed(DelegateExecution execution) {
-               try {
-                       String requestId = (String) execution.getVariable(G_REQUEST_ID);
-                       InfraActiveRequests request = requestDbclient.getInfraActiveRequestbyRequestId(requestId);
-                       String errorMsg = null;
-                       boolean rollback = (boolean) execution.getVariable("isRollbackComplete");
-                       try {
-                               WorkflowException exception = (WorkflowException) execution.getVariable("WorkflowException");
-                               if(exception != null && (exception.getErrorMessage()!=null || !exception.getErrorMessage().equals(""))){
-                                       errorMsg = exception.getErrorMessage();
-                               }
-                       } catch (Exception ex) {
-                               //log error and attempt to extact WorkflowExceptionMessage
-                               logger.error("Failed to extract workflow exception from execution.",ex);
-                       }
-                       if (errorMsg == null){
-                               try {
-                                       errorMsg = (String) execution.getVariable("WorkflowExceptionErrorMessage");
-                               } catch (Exception ex) {
-                                       logger.error("Failed to extract workflow exception message from WorkflowException",ex);
-                                       errorMsg = "Unexpected Error in BPMN.";
-                               }
-                       }
-                       if(rollback){
-                               errorMsg = errorMsg + " + Rollback has been completed successfully.";
-                       }
-                       request.setProgress(Long.valueOf(100));
-                       request.setStatusMessage(errorMsg);
-                       request.setRequestStatus("FAILED");
-                       request.setLastModifiedBy("CamundaBPMN");
-                       requestDbclient.updateInfraActiveRequests(request);
-               } catch (Exception e) {
-                       workflowAction.buildAndThrowException(execution, "Error Updating Request Database", e);
-               }
-       }
-       
-       public void updateRequestStatusToFailedWithRollback(DelegateExecution execution) {
-               execution.setVariable("isRollbackComplete", true);
-               updateRequestStatusToFailed(execution);
-       }
 }