PNF service instantiation using building blocks fails 35/114135/5
authorKalkere Ramesh, Sharan (sk720x) <sk720x@att.com>
Wed, 21 Oct 2020 23:03:26 +0000 (19:03 -0400)
committerKalkere Ramesh, Sharan (sk720x) <sk720x@att.com>
Thu, 22 Oct 2020 14:51:55 +0000 (10:51 -0400)
End flow if ControllerExecutionBB is last in list

Change-Id: Ia7020572a4418e7cbd5a9d167788f6476ff3554a
Issue-ID: SO-3322
Signed-off-by: Kalkere Ramesh, Sharan <sk720x@att.com>
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/WorkflowActionBB.bpmn
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/SkipCDSBuildingBlockListener.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/listeners/SkipCDSBuildingBlockListenerTest.java

index 5fd9701..b4954e0 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.1.2">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0">
   <bpmn:process id="WorkflowActionBB" name="WorkflowActionBB" isExecutable="true">
     <bpmn:extensionElements>
       <camunda:executionListener class="org.onap.so.bpmn.core.plugins.AsyncTaskExecutorListener" event="end" />
@@ -41,7 +41,7 @@
       <bpmn:outgoing>SequenceFlow_0mqrkxv</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:exclusiveGateway id="ExclusiveGateway_Finished" default="SequenceFlow_01j184u">
-      <bpmn:incoming>SequenceFlow_1fftixk</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_16fwl31</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1m2eezj</bpmn:outgoing>
       <bpmn:outgoing>SequenceFlow_0v588sm</bpmn:outgoing>
       <bpmn:outgoing>SequenceFlow_11530ei</bpmn:outgoing>
@@ -49,7 +49,7 @@
       <bpmn:outgoing>SequenceFlow_0l7kaba</bpmn:outgoing>
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_1m2eezj" name="Completed = true" sourceRef="ExclusiveGateway_Finished" targetRef="ExclusiveGateway_isTopLevelFlowC">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("completed")==true&amp;&amp;execution.getVariable("isRollback")==false&amp;&amp;execution.getVariable("handlingCode")=="Success"}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("completed")==true&&execution.getVariable("isRollback")==false&&execution.getVariable("handlingCode")=="Success"}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:serviceTask id="Task_RetrieveBBExectuionList" name="Retrieve BB Execution List" camunda:expression="${WorkflowAction.selectExecutionList(execution)}">
       <bpmn:incoming>SequenceFlow_15s0okp</bpmn:incoming>
@@ -86,7 +86,7 @@
       </bpmn:exclusiveGateway>
       <bpmn:sequenceFlow id="SequenceFlow_024g0d1" name="no" sourceRef="ExclusiveGateway_10q79b6" targetRef="Task_UpdateDb" />
       <bpmn:sequenceFlow id="SequenceFlow_0vi883o" name="yes" sourceRef="ExclusiveGateway_10q79b6" targetRef="Task_SendSyncAckError">
-        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isTopLevelFlow")==true&amp;&amp;execution.getVariable("sentSyncResponse")==false}</bpmn:conditionExpression>
+        <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isTopLevelFlow")==true&&execution.getVariable("sentSyncResponse")==false}]]></bpmn:conditionExpression>
       </bpmn:sequenceFlow>
       <bpmn:sequenceFlow id="SequenceFlow_0eana0l" sourceRef="Task_SendSyncAckError" targetRef="Task_UpdateDb" />
       <bpmn:serviceTask id="Task_SendSyncAckError" name="Send Sync Ack API Handler" camunda:asyncAfter="true" camunda:expression="${WorkflowActionBBTasks.sendErrorSyncAck(execution)}">
       </bpmn:serviceTask>
     </bpmn:subProcess>
     <bpmn:sequenceFlow id="SequenceFlow_0v588sm" name="Rollback = true" sourceRef="ExclusiveGateway_Finished" targetRef="Task_RollbackExecutionPath">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("handlingCode")=="Rollback"||execution.getVariable("handlingCode")=="RollbackToAssigned"||execution.getVariable("handlingCode")=="RollbackToCreated"||execution.getVariable("handlingCode")=="RollbackToCreatedNoConfiguration"}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("handlingCode")=="Rollback"||execution.getVariable("handlingCode")=="RollbackToAssigned"||execution.getVariable("handlingCode")=="RollbackToCreated"||execution.getVariable("handlingCode")=="RollbackToCreatedNoConfiguration"}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_1atzsgn" sourceRef="Task_RollbackExecutionPath" targetRef="Task_SelectBB">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isRollbackNeeded")==true}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isRollbackNeeded")==true}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:serviceTask id="Task_RollbackExecutionPath" name="Rollback Execution Path" camunda:expression="${WorkflowActionBBTasks.rollbackExecutionPath(execution)}">
       <bpmn:incoming>SequenceFlow_0v588sm</bpmn:incoming>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0vc9go9" sourceRef="Task_RetrieveBBExectuionList" targetRef="ExclusiveGateway_isTopLevelFlow" />
     <bpmn:sequenceFlow id="SequenceFlow_11530ei" name="Abort = true" sourceRef="ExclusiveGateway_Finished" targetRef="ExclusiveGateway_isTopLevelFlowAbort">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("handlingCode")=="Abort"}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("handlingCode")=="Abort"}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:serviceTask id="Task_AbortAndCallErrorHandling" name="Update Request To Failed" camunda:expression="${WorkflowActionBBFailure.updateRequestStatusToFailed(execution)}">
       <bpmn:incoming>SequenceFlow_02ksbt0</bpmn:incoming>
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_0sckerv" name="yes" sourceRef="ExclusiveGateway_isTopLevelFlow" targetRef="Task_SendSync" />
     <bpmn:sequenceFlow id="SequenceFlow_0unbew4" name="no" sourceRef="ExclusiveGateway_isTopLevelFlow" targetRef="Task_PreValidateWorkflow">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isTopLevelFlow")==false}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isTopLevelFlow")==false}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:exclusiveGateway id="ExclusiveGateway_isTopLevelFlowAbort" name="Is Top-Level Flow?" default="SequenceFlow_02ksbt0">
       <bpmn:incoming>SequenceFlow_11530ei</bpmn:incoming>
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_02ksbt0" name="yes" sourceRef="ExclusiveGateway_isTopLevelFlowAbort" targetRef="Task_AbortAndCallErrorHandling" />
     <bpmn:sequenceFlow id="SequenceFlow_1r570x3" name="no" sourceRef="ExclusiveGateway_isTopLevelFlowAbort" targetRef="EndEvent_0lzz1ya">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isTopLevelFlow")==false}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isTopLevelFlow")==false}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:exclusiveGateway id="ExclusiveGateway_isTopLevelFlowC" name="Is Top-Level Flow?" default="SequenceFlow_0kf5sen">
       <bpmn:incoming>SequenceFlow_1m2eezj</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0kf5sen</bpmn:outgoing>
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_0x4urgp" name="no" sourceRef="ExclusiveGateway_isTopLevelFlowC" targetRef="End_WorkflowActionBB">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isTopLevelFlow")==false}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isTopLevelFlow")==false}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:endEvent id="End_RollbackFailed" name="end">
       <bpmn:incoming>SequenceFlow_1ui67mc</bpmn:incoming>
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_11dlyzt" name="Rollback Not Needed" sourceRef="Task_RollbackExecutionPath" targetRef="Task_UpdateRequestToFailed">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isRollbackNeeded")==false}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("isRollbackNeeded")==false}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:serviceTask id="Task_UpdateRequestToFailed" name="Update Request To Failed" camunda:expression="${WorkflowActionBBFailure.updateRequestStatusToFailedWithRollback(execution)}">
       <bpmn:incoming>SequenceFlow_11dlyzt</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1ui67mc</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0l7kaba" name="Rollback Completed" sourceRef="ExclusiveGateway_Finished" targetRef="Task_UpdateRequestToFailed">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("completed")==true&amp;&amp;execution.getVariable("isRollback")==true&amp;&amp;execution.getVariable("handlingCode")=="Success"}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("completed")==true&&execution.getVariable("isRollback")==true&&execution.getVariable("handlingCode")=="Success"}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_1ui67mc" sourceRef="Task_UpdateRequestToFailed" targetRef="End_RollbackFailed" />
     <bpmn:subProcess id="SubProcess_0fuugr9" name="Java Exception Handling Sub Process" triggeredByEvent="true">
     </bpmn:serviceTask>
     <bpmn:serviceTask id="ServiceTask_0lbkcyp" name="Post Processing Execute BB" camunda:expression="${WorkflowActionBBTasks.postProcessingExecuteBB(execution)}">
       <bpmn:incoming>SequenceFlow_1hsqed1</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1fftixk</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_0tps01a</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_1hsqed1" sourceRef="Call_ExecuteBB" targetRef="ServiceTask_0lbkcyp" />
-    <bpmn:sequenceFlow id="SequenceFlow_1fftixk" sourceRef="ServiceTask_0lbkcyp" targetRef="ExclusiveGateway_Finished" />
     <bpmn:sequenceFlow id="SequenceFlow_1pnkpim" sourceRef="Task_0a31dkf" targetRef="Task_SelectBB" />
     <bpmn:exclusiveGateway id="ExclusiveGateway_1dez26n" name="Generated Id&#39;s?">
       <bpmn:incoming>SequenceFlow_1lrz41x</bpmn:incoming>
     </bpmn:exclusiveGateway>
     <bpmn:sequenceFlow id="SequenceFlow_1lrz41x" sourceRef="Task_SendSync" targetRef="ExclusiveGateway_1dez26n" />
     <bpmn:sequenceFlow id="SequenceFlow_0etawv5" name="no" sourceRef="ExclusiveGateway_1dez26n" targetRef="Task_PreValidateWorkflow">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("generateIdsOnly") == null || execution.getVariable("generateIdsOnly")==false}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("generateIdsOnly") == null || execution.getVariable("generateIdsOnly")==false}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:endEvent id="EndEvent_12f15tu" name="End">
       <bpmn:incoming>SequenceFlow_0ilo6lo</bpmn:incoming>
     </bpmn:endEvent>
     <bpmn:sequenceFlow id="SequenceFlow_0ilo6lo" name="yes" sourceRef="ExclusiveGateway_1dez26n" targetRef="EndEvent_12f15tu" />
+    <bpmn:serviceTask id="Call_FlowManipulator" name="FlowManipulator Workflow" camunda:expression="${WorkflowActionBBTasks.runFlowManipulator(execution)}">
+      <bpmn:incoming>SequenceFlow_0tps01a</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_16fwl31</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_0tps01a" sourceRef="ServiceTask_0lbkcyp" targetRef="Call_FlowManipulator" />
+    <bpmn:sequenceFlow id="SequenceFlow_16fwl31" sourceRef="Call_FlowManipulator" targetRef="ExclusiveGateway_Finished" />
   </bpmn:process>
   <bpmn:error id="Error_0kd2o2a" name="java.lang.Exception" errorCode="java.lang.Exception" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="WorkflowActionBB">
-      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="Start_WorkflowActionBB">
-        <dc:Bounds x="156" y="378" width="36" height="36" />
+      <bpmndi:BPMNEdge id="SequenceFlow_16fwl31_di" bpmnElement="SequenceFlow_16fwl31">
+        <di:waypoint xsi:type="dc:Point" x="1590" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="1669" y="396" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="164" y="414" width="22" height="14" />
+          <dc:Bounds x="1636" y="375" width="0" height="12" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="EndEvent_1uv6erv_di" bpmnElement="End_WorkflowActionBB">
-        <dc:Bounds x="1894" y="423" width="36" height="36" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0tps01a_di" bpmnElement="SequenceFlow_0tps01a">
+        <di:waypoint xsi:type="dc:Point" x="1425" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="1490" y="396" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1903" y="403" width="19" height="14" />
+          <dc:Bounds x="1464" y="375" width="0" height="12" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_15s0okp_di" bpmnElement="SequenceFlow_15s0okp">
-        <di:waypoint x="192" y="396" />
-        <di:waypoint x="225" y="396" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0ilo6lo_di" bpmnElement="SequenceFlow_0ilo6lo">
+        <di:waypoint xsi:type="dc:Point" x="720" y="215" />
+        <di:waypoint xsi:type="dc:Point" x="720" y="142" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="-381" y="99" width="0" height="0" />
+          <dc:Bounds x="727" y="173" width="18" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="CallActivity_03m7z4y_di" bpmnElement="Call_ExecuteBB">
-        <dc:Bounds x="1150" y="356" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0mqrkxv_di" bpmnElement="SequenceFlow_0mqrkxv">
-        <di:waypoint x="929" y="396" />
-        <di:waypoint x="990" y="396" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0etawv5_di" bpmnElement="SequenceFlow_0etawv5">
+        <di:waypoint xsi:type="dc:Point" x="720" y="265" />
+        <di:waypoint xsi:type="dc:Point" x="720" y="356" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="324.5" y="105" width="90" height="0" />
+          <dc:Bounds x="729" y="305" width="13" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_1snenqk_di" bpmnElement="Task_SelectBB">
-        <dc:Bounds x="829" y="356" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ExclusiveGateway_0m1zt0q_di" bpmnElement="ExclusiveGateway_Finished" isMarkerVisible="true">
-        <dc:Bounds x="1501" y="371" width="50" height="50" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1lrz41x_di" bpmnElement="SequenceFlow_1lrz41x">
+        <di:waypoint xsi:type="dc:Point" x="590" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="695" y="240" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="850" y="42" width="90" height="0" />
+          <dc:Bounds x="52.5" y="-57" width="0" height="12" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1m2eezj_di" bpmnElement="SequenceFlow_1m2eezj">
-        <di:waypoint x="1539" y="408" />
-        <di:waypoint x="1570" y="441" />
-        <di:waypoint x="1650" y="441" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1pnkpim_di" bpmnElement="SequenceFlow_1pnkpim">
+        <di:waypoint xsi:type="dc:Point" x="1644" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="879" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="879" y="356" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1557" y="444" width="85" height="14" />
+          <dc:Bounds x="1216.5" y="219" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_0kn8jt8_di" bpmnElement="Task_RetrieveBBExectuionList">
-        <dc:Bounds x="225" y="356" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_0654g3m_di" bpmnElement="Task_SendSync">
-        <dc:Bounds x="490" y="200" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_0wzh11j_di" bpmnElement="Task_UpdateRequestComplete">
-        <dc:Bounds x="1751" y="482" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1pz6edz_di" bpmnElement="SequenceFlow_1pz6edz">
-        <di:waypoint x="1851" y="522" />
-        <di:waypoint x="1912" y="522" />
-        <di:waypoint x="1912" y="459" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1hsqed1_di" bpmnElement="SequenceFlow_1hsqed1">
+        <di:waypoint xsi:type="dc:Point" x="1250" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="1325" y="396" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1247" y="231" width="90" height="0" />
+          <dc:Bounds x="697.5" y="99" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="SubProcess_18226x4_di" bpmnElement="SubProcess_18226x4" isExpanded="true">
-        <dc:Bounds x="1088" y="720" width="438" height="297" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="StartEvent_184g7f3_di" bpmnElement="ErrorStart">
-        <dc:Bounds x="1110" y="915" width="36" height="36" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1tfizxf_di" bpmnElement="SequenceFlow_1tfizxf">
+        <di:waypoint xsi:type="dc:Point" x="770" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="801" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="801" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="829" y="396" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1116" y="958" width="24" height="14" />
+          <dc:Bounds x="226" y="120" width="0" height="0" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="EndEvent_0l4edvr_di" bpmnElement="ErrorEnd">
-        <dc:Bounds x="1470" y="915" width="36" height="36" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0kf5sen_di" bpmnElement="SequenceFlow_0kf5sen">
+        <di:waypoint xsi:type="dc:Point" x="1843" y="466" />
+        <di:waypoint xsi:type="dc:Point" x="1843" y="522" />
+        <di:waypoint xsi:type="dc:Point" x="1919" y="522" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1480" y="957" width="19" height="14" />
+          <dc:Bounds x="1850" y="494" width="19" height="12" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0v588sm_di" bpmnElement="SequenceFlow_0v588sm">
-        <di:waypoint x="1526" y="421" />
-        <di:waypoint x="1526" y="538" />
-        <di:waypoint x="929" y="538" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0mew9im_di" bpmnElement="SequenceFlow_0mew9im">
+        <di:waypoint xsi:type="dc:Point" x="1090" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="1150" y="396" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1359" y="548" width="74" height="14" />
+          <dc:Bounds x="530" y="99" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1atzsgn_di" bpmnElement="SequenceFlow_1atzsgn">
-        <di:waypoint x="879" y="498" />
-        <di:waypoint x="879" y="436" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1ui67mc_di" bpmnElement="SequenceFlow_1ui67mc">
+        <di:waypoint xsi:type="dc:Point" x="1818" y="641" />
+        <di:waypoint xsi:type="dc:Point" x="1892" y="641" />
+        <di:waypoint xsi:type="dc:Point" x="1892" y="641" />
+        <di:waypoint xsi:type="dc:Point" x="1917" y="641" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="259" y="191" width="90" height="0" />
+          <dc:Bounds x="1272" y="359" width="90" height="13" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_19t1oyr_di" bpmnElement="Task_RollbackExecutionPath">
-        <dc:Bounds x="829" y="498" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0vc9go9_di" bpmnElement="SequenceFlow_0vc9go9">
-        <di:waypoint x="325" y="396" />
-        <di:waypoint x="362" y="396" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0l7kaba_di" bpmnElement="SequenceFlow_0l7kaba">
+        <di:waypoint xsi:type="dc:Point" x="1700" y="415" />
+        <di:waypoint xsi:type="dc:Point" x="1734" y="528" />
+        <di:waypoint xsi:type="dc:Point" x="1774" y="528" />
+        <di:waypoint xsi:type="dc:Point" x="1774" y="601" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="-246" y="105" width="0" height="0" />
+          <dc:Bounds x="1716" y="531" width="55" height="24" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_11530ei_di" bpmnElement="SequenceFlow_11530ei">
-        <di:waypoint x="1536" y="381" />
-        <di:waypoint x="1573" y="320" />
-        <di:waypoint x="1650" y="321" />
+      <bpmndi:BPMNEdge id="SequenceFlow_11dlyzt_di" bpmnElement="SequenceFlow_11dlyzt">
+        <di:waypoint xsi:type="dc:Point" x="879" y="578" />
+        <di:waypoint xsi:type="dc:Point" x="879" y="644" />
+        <di:waypoint xsi:type="dc:Point" x="1718" y="644" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1565" y="293" width="58" height="14" />
+          <dc:Bounds x="1002.1713859910583" y="601" width="65" height="24" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_0jo36ez_di" bpmnElement="Task_AbortAndCallErrorHandling">
-        <dc:Bounds x="1766" y="200" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="EndEvent_0lzz1ya_di" bpmnElement="EndEvent_0lzz1ya">
-        <dc:Bounds x="1976" y="303" width="36" height="36" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0x4urgp_di" bpmnElement="SequenceFlow_0x4urgp">
+        <di:waypoint xsi:type="dc:Point" x="1868" y="441" />
+        <di:waypoint xsi:type="dc:Point" x="1978" y="441" />
+        <di:waypoint xsi:type="dc:Point" x="1978" y="441" />
+        <di:waypoint xsi:type="dc:Point" x="2062" y="441" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1985" y="343" width="19" height="14" />
+          <dc:Bounds x="2014" y="416" width="13" height="12" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1p8yxu6_di" bpmnElement="SequenceFlow_1p8yxu6">
-        <di:waypoint x="1866" y="240" />
-        <di:waypoint x="1949" y="240" />
-        <di:waypoint x="1949" y="321" />
-        <di:waypoint x="1976" y="321" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1r570x3_di" bpmnElement="SequenceFlow_1r570x3">
+        <di:waypoint xsi:type="dc:Point" x="1868" y="321" />
+        <di:waypoint xsi:type="dc:Point" x="2144" y="321" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1329" y="5" width="90" height="0" />
+          <dc:Bounds x="2000" y="296" width="13" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_01j184u_di" bpmnElement="SequenceFlow_01j184u">
-        <di:waypoint x="1526" y="371" />
-        <di:waypoint x="1526" y="331" />
-        <di:waypoint x="1526" y="331" />
-        <di:waypoint x="1526" y="280" />
+      <bpmndi:BPMNEdge id="SequenceFlow_02ksbt0_di" bpmnElement="SequenceFlow_02ksbt0">
+        <di:waypoint xsi:type="dc:Point" x="1843" y="296" />
+        <di:waypoint xsi:type="dc:Point" x="1843" y="239" />
+        <di:waypoint xsi:type="dc:Point" x="1934" y="239" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="906" y="49" width="90" height="0" />
+          <dc:Bounds x="1850" y="268" width="19" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_1c1v3p1_di" bpmnElement="Task_0a31dkf">
-        <dc:Bounds x="1476" y="200" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ExclusiveGateway_0ptb1yi_di" bpmnElement="ExclusiveGateway_isTopLevelFlow" isMarkerVisible="true">
-        <dc:Bounds x="362" y="371" width="50" height="50" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0unbew4_di" bpmnElement="SequenceFlow_0unbew4">
+        <di:waypoint xsi:type="dc:Point" x="412" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="670" y="396" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="357" y="421" width="60" height="27" />
+          <dc:Bounds x="503" y="376" width="13" height="14" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
+      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0sckerv_di" bpmnElement="SequenceFlow_0sckerv">
-        <di:waypoint x="388" y="372" />
-        <di:waypoint x="388" y="240" />
-        <di:waypoint x="490" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="388" y="372" />
+        <di:waypoint xsi:type="dc:Point" x="388" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="490" y="240" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="396" y="294" width="18" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0unbew4_di" bpmnElement="SequenceFlow_0unbew4">
-        <di:waypoint x="412" y="396" />
-        <di:waypoint x="670" y="396" />
+      <bpmndi:BPMNEdge id="SequenceFlow_01j184u_di" bpmnElement="SequenceFlow_01j184u">
+        <di:waypoint xsi:type="dc:Point" x="1694" y="371" />
+        <di:waypoint xsi:type="dc:Point" x="1694" y="331" />
+        <di:waypoint xsi:type="dc:Point" x="1694" y="331" />
+        <di:waypoint xsi:type="dc:Point" x="1694" y="280" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="503" y="376" width="13" height="14" />
+          <dc:Bounds x="1074" y="49" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ExclusiveGateway_001g41v_di" bpmnElement="ExclusiveGateway_isTopLevelFlowAbort" isMarkerVisible="true">
-        <dc:Bounds x="1650" y="296" width="50" height="50" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1p8yxu6_di" bpmnElement="SequenceFlow_1p8yxu6">
+        <di:waypoint xsi:type="dc:Point" x="2034" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="2117" y="240" />
+        <di:waypoint xsi:type="dc:Point" x="2117" y="321" />
+        <di:waypoint xsi:type="dc:Point" x="2144" y="321" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1646" y="346" width="60" height="27" />
+          <dc:Bounds x="1497" y="5" width="90" height="0" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_02ksbt0_di" bpmnElement="SequenceFlow_02ksbt0">
-        <di:waypoint x="1675" y="296" />
-        <di:waypoint x="1675" y="239" />
-        <di:waypoint x="1766" y="239" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_11530ei_di" bpmnElement="SequenceFlow_11530ei">
+        <di:waypoint xsi:type="dc:Point" x="1704" y="381" />
+        <di:waypoint xsi:type="dc:Point" x="1741" y="320" />
+        <di:waypoint xsi:type="dc:Point" x="1818" y="321" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1682" y="268" width="18" height="14" />
+          <dc:Bounds x="1732" y="293" width="61" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1r570x3_di" bpmnElement="SequenceFlow_1r570x3">
-        <di:waypoint x="1700" y="321" />
-        <di:waypoint x="1976" y="321" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0vc9go9_di" bpmnElement="SequenceFlow_0vc9go9">
+        <di:waypoint xsi:type="dc:Point" x="325" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="362" y="396" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1832" y="296" width="13" height="14" />
+          <dc:Bounds x="-246" y="105" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ExclusiveGateway_1er1kam_di" bpmnElement="ExclusiveGateway_isTopLevelFlowC" isMarkerVisible="true">
-        <dc:Bounds x="1650" y="416" width="50" height="50" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1atzsgn_di" bpmnElement="SequenceFlow_1atzsgn">
+        <di:waypoint xsi:type="dc:Point" x="879" y="498" />
+        <di:waypoint xsi:type="dc:Point" x="879" y="436" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1646" y="384" width="60" height="27" />
+          <dc:Bounds x="259" y="191" width="90" height="0" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0x4urgp_di" bpmnElement="SequenceFlow_0x4urgp">
-        <di:waypoint x="1700" y="441" />
-        <di:waypoint x="1810" y="441" />
-        <di:waypoint x="1810" y="441" />
-        <di:waypoint x="1894" y="441" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0v588sm_di" bpmnElement="SequenceFlow_0v588sm">
+        <di:waypoint xsi:type="dc:Point" x="1694" y="421" />
+        <di:waypoint xsi:type="dc:Point" x="1694" y="538" />
+        <di:waypoint xsi:type="dc:Point" x="929" y="538" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1846" y="416" width="13" height="14" />
+          <dc:Bounds x="1489.4170854271356" y="548" width="76" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="EndEvent_1q8eh5e_di" bpmnElement="End_RollbackFailed">
-        <dc:Bounds x="1749" y="623" width="36" height="36" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1pz6edz_di" bpmnElement="SequenceFlow_1pz6edz">
+        <di:waypoint xsi:type="dc:Point" x="2019" y="522" />
+        <di:waypoint xsi:type="dc:Point" x="2080" y="522" />
+        <di:waypoint xsi:type="dc:Point" x="2080" y="459" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1767" y="675" width="19" height="14" />
+          <dc:Bounds x="1415" y="231" width="90" height="0" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_11dlyzt_di" bpmnElement="SequenceFlow_11dlyzt">
-        <di:waypoint x="879" y="578" />
-        <di:waypoint x="879" y="644" />
-        <di:waypoint x="1550" y="644" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1m2eezj_di" bpmnElement="SequenceFlow_1m2eezj">
+        <di:waypoint xsi:type="dc:Point" x="1707" y="408" />
+        <di:waypoint xsi:type="dc:Point" x="1738" y="441" />
+        <di:waypoint xsi:type="dc:Point" x="1818" y="441" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="972" y="601" width="63" height="27" />
+          <dc:Bounds x="1724" y="444" width="88" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_1h154rn_di" bpmnElement="Task_UpdateDb">
-        <dc:Bounds x="1303" y="893" width="100" height="80" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0mqrkxv_di" bpmnElement="SequenceFlow_0mqrkxv">
+        <di:waypoint xsi:type="dc:Point" x="929" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="990" y="396" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="324.5" y="105" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_15s0okp_di" bpmnElement="SequenceFlow_15s0okp">
+        <di:waypoint xsi:type="dc:Point" x="192" y="396" />
+        <di:waypoint xsi:type="dc:Point" x="225" y="396" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-381" y="99" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="Start_WorkflowActionBB">
+        <dc:Bounds x="156" y="378" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="164" y="414" width="22" height="14" />
+        </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_1t8n9gd_di" bpmnElement="Task_UpdateRequestToFailed">
-        <dc:Bounds x="1550" y="601" width="100" height="80" />
+      <bpmndi:BPMNShape id="EndEvent_1uv6erv_di" bpmnElement="End_WorkflowActionBB">
+        <dc:Bounds x="2062" y="423" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="2071" y="403" width="20" height="12" />
+        </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0l7kaba_di" bpmnElement="SequenceFlow_0l7kaba">
-        <di:waypoint x="1532" y="415" />
-        <di:waypoint x="1566" y="528" />
-        <di:waypoint x="1606" y="528" />
-        <di:waypoint x="1606" y="601" />
+      <bpmndi:BPMNShape id="CallActivity_03m7z4y_di" bpmnElement="Call_ExecuteBB">
+        <dc:Bounds x="1150" y="356" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1snenqk_di" bpmnElement="Task_SelectBB">
+        <dc:Bounds x="829" y="356" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_0m1zt0q_di" bpmnElement="ExclusiveGateway_Finished" isMarkerVisible="true">
+        <dc:Bounds x="1669" y="371" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1548" y="531" width="54" height="27" />
+          <dc:Bounds x="1018" y="42" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0kn8jt8_di" bpmnElement="Task_RetrieveBBExectuionList">
+        <dc:Bounds x="225" y="356" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0654g3m_di" bpmnElement="Task_SendSync">
+        <dc:Bounds x="490" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0wzh11j_di" bpmnElement="Task_UpdateRequestComplete">
+        <dc:Bounds x="1919" y="482" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1ko47om_di" bpmnElement="Call_FlowManipulator">
+        <dc:Bounds x="1490" y="356" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="SubProcess_18226x4_di" bpmnElement="SubProcess_18226x4" isExpanded="true">
+        <dc:Bounds x="1088" y="720" width="438" height="297" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0eana0l_di" bpmnElement="SequenceFlow_0eana0l">
+        <di:waypoint xsi:type="dc:Point" x="1353" y="864" />
+        <di:waypoint xsi:type="dc:Point" x="1353" y="893" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="778" y="596.5" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1edjl5x_di" bpmnElement="SequenceFlow_1edjl5x">
-        <di:waypoint x="1146" y="933" />
-        <di:waypoint x="1192" y="933" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0vi883o_di" bpmnElement="SequenceFlow_0vi883o">
+        <di:waypoint xsi:type="dc:Point" x="1217" y="908" />
+        <di:waypoint xsi:type="dc:Point" x="1217" y="824" />
+        <di:waypoint xsi:type="dc:Point" x="1303" y="824" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="534" y="636" width="90" height="12" />
+          <dc:Bounds x="1223" y="860" width="18" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_024g0d1_di" bpmnElement="SequenceFlow_024g0d1">
+        <di:waypoint xsi:type="dc:Point" x="1242" y="933" />
+        <di:waypoint xsi:type="dc:Point" x="1273" y="933" />
+        <di:waypoint xsi:type="dc:Point" x="1273" y="933" />
+        <di:waypoint xsi:type="dc:Point" x="1303" y="933" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1267" y="910" width="13" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0wvzfgf_di" bpmnElement="SequenceFlow_0wvzfgf">
-        <di:waypoint x="1403" y="933" />
-        <di:waypoint x="1470" y="933" />
+        <di:waypoint xsi:type="dc:Point" x="1403" y="933" />
+        <di:waypoint xsi:type="dc:Point" x="1470" y="933" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="801.5" y="636" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1ui67mc_di" bpmnElement="SequenceFlow_1ui67mc">
-        <di:waypoint x="1650" y="641" />
-        <di:waypoint x="1724" y="641" />
-        <di:waypoint x="1724" y="641" />
-        <di:waypoint x="1749" y="641" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1edjl5x_di" bpmnElement="SequenceFlow_1edjl5x">
+        <di:waypoint xsi:type="dc:Point" x="1146" y="933" />
+        <di:waypoint xsi:type="dc:Point" x="1192" y="933" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1104" y="359" width="90" height="13" />
+          <dc:Bounds x="534" y="636" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="StartEvent_184g7f3_di" bpmnElement="ErrorStart">
+        <dc:Bounds x="1110" y="915" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1116" y="958" width="24" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_0l4edvr_di" bpmnElement="ErrorEnd">
+        <dc:Bounds x="1470" y="915" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1480" y="957" width="19" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1h154rn_di" bpmnElement="Task_UpdateDb">
+        <dc:Bounds x="1303" y="893" width="100" height="80" />
+      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ExclusiveGateway_10q79b6_di" bpmnElement="ExclusiveGateway_10q79b6" isMarkerVisible="true">
         <dc:Bounds x="1192" y="908" width="50" height="50" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1174" y="962" width="86" height="40" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_024g0d1_di" bpmnElement="SequenceFlow_024g0d1">
-        <di:waypoint x="1242" y="933" />
-        <di:waypoint x="1273" y="933" />
-        <di:waypoint x="1273" y="933" />
-        <di:waypoint x="1303" y="933" />
+      <bpmndi:BPMNShape id="ServiceTask_10hs368_di" bpmnElement="Task_SendSyncAckError">
+        <dc:Bounds x="1303" y="784" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_19t1oyr_di" bpmnElement="Task_RollbackExecutionPath">
+        <dc:Bounds x="829" y="498" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0jo36ez_di" bpmnElement="Task_AbortAndCallErrorHandling">
+        <dc:Bounds x="1934" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_0lzz1ya_di" bpmnElement="EndEvent_0lzz1ya">
+        <dc:Bounds x="2144" y="303" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1267" y="910" width="13" height="14" />
+          <dc:Bounds x="2153" y="343" width="20" height="12" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0vi883o_di" bpmnElement="SequenceFlow_0vi883o">
-        <di:waypoint x="1217" y="908" />
-        <di:waypoint x="1217" y="824" />
-        <di:waypoint x="1303" y="824" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1c1v3p1_di" bpmnElement="Task_0a31dkf">
+        <dc:Bounds x="1644" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_0ptb1yi_di" bpmnElement="ExclusiveGateway_isTopLevelFlow" isMarkerVisible="true">
+        <dc:Bounds x="362" y="371" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1223" y="860" width="18" height="14" />
+          <dc:Bounds x="357" y="421" width="60" height="27" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0eana0l_di" bpmnElement="SequenceFlow_0eana0l">
-        <di:waypoint x="1353" y="864" />
-        <di:waypoint x="1353" y="893" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_001g41v_di" bpmnElement="ExclusiveGateway_isTopLevelFlowAbort" isMarkerVisible="true">
+        <dc:Bounds x="1818" y="296" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="778" y="596.5" width="0" height="12" />
+          <dc:Bounds x="1813" y="346" width="62" height="24" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_10hs368_di" bpmnElement="Task_SendSyncAckError">
-        <dc:Bounds x="1303" y="784" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_1er1kam_di" bpmnElement="ExclusiveGateway_isTopLevelFlowC" isMarkerVisible="true">
+        <dc:Bounds x="1818" y="416" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1813" y="384" width="62" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_1q8eh5e_di" bpmnElement="End_RollbackFailed">
+        <dc:Bounds x="1917" y="623" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1935" y="675" width="20" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1t8n9gd_di" bpmnElement="Task_UpdateRequestToFailed">
+        <dc:Bounds x="1718" y="601" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="SubProcess_0fuugr9_di" bpmnElement="SubProcess_0fuugr9" isExpanded="true">
         <dc:Bounds x="1105" y="1068" width="404" height="165" />
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0w4sx88_di" bpmnElement="SequenceFlow_0w4sx88">
+        <di:waypoint xsi:type="dc:Point" x="1380" y="1151" />
+        <di:waypoint xsi:type="dc:Point" x="1446" y="1151" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="778" y="854" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_11d126w_di" bpmnElement="SequenceFlow_11d126w">
+        <di:waypoint xsi:type="dc:Point" x="1196" y="1151" />
+        <di:waypoint xsi:type="dc:Point" x="1280" y="1151" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="603" y="854" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="StartEvent_15qkxd7_di" bpmnElement="StartEvent_runtimeError">
         <dc:Bounds x="1160" y="1133" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="784" y="897" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_11d126w_di" bpmnElement="SequenceFlow_11d126w">
-        <di:waypoint x="1196" y="1151" />
-        <di:waypoint x="1280" y="1151" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="603" y="854" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0w4sx88_di" bpmnElement="SequenceFlow_0w4sx88">
-        <di:waypoint x="1380" y="1151" />
-        <di:waypoint x="1446" y="1151" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="778" y="854" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0e2p0xs_di" bpmnElement="ServiceTask_0e2p0xs">
         <dc:Bounds x="990" y="356" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0mew9im_di" bpmnElement="SequenceFlow_0mew9im">
-        <di:waypoint x="1090" y="396" />
-        <di:waypoint x="1150" y="396" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="530" y="99" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0kf5sen_di" bpmnElement="SequenceFlow_0kf5sen">
-        <di:waypoint x="1675" y="466" />
-        <di:waypoint x="1675" y="522" />
-        <di:waypoint x="1751" y="522" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1682" y="494" width="18" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1tfizxf_di" bpmnElement="SequenceFlow_1tfizxf">
-        <di:waypoint x="770" y="396" />
-        <di:waypoint x="801" y="396" />
-        <di:waypoint x="801" y="396" />
-        <di:waypoint x="829" y="396" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="226" y="120" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0m5xr0e_di" bpmnElement="Task_PreValidateWorkflow">
         <dc:Bounds x="670" y="356" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_0lbkcyp_di" bpmnElement="ServiceTask_0lbkcyp">
         <dc:Bounds x="1325" y="356" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1hsqed1_di" bpmnElement="SequenceFlow_1hsqed1">
-        <di:waypoint x="1250" y="396" />
-        <di:waypoint x="1325" y="396" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="697.5" y="99" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1fftixk_di" bpmnElement="SequenceFlow_1fftixk">
-        <di:waypoint x="1425" y="396" />
-        <di:waypoint x="1501" y="396" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="873" y="99" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1pnkpim_di" bpmnElement="SequenceFlow_1pnkpim">
-        <di:waypoint x="1476" y="240" />
-        <di:waypoint x="879" y="240" />
-        <di:waypoint x="879" y="356" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="587.5" y="-57" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ExclusiveGateway_1dez26n_di" bpmnElement="ExclusiveGateway_1dez26n" isMarkerVisible="true">
         <dc:Bounds x="695" y="215" width="50" height="50" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="745" y="228" width="78" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1lrz41x_di" bpmnElement="SequenceFlow_1lrz41x">
-        <di:waypoint x="590" y="240" />
-        <di:waypoint x="695" y="240" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="52.5" y="-57" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0etawv5_di" bpmnElement="SequenceFlow_0etawv5">
-        <di:waypoint x="720" y="265" />
-        <di:waypoint x="720" y="356" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="729" y="305" width="13" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_12f15tu_di" bpmnElement="EndEvent_12f15tu">
         <dc:Bounds x="702" y="106" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="710" y="81" width="20" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0ilo6lo_di" bpmnElement="SequenceFlow_0ilo6lo">
-        <di:waypoint x="720" y="215" />
-        <di:waypoint x="720" y="142" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="727" y="173" width="18" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
index 43a8505..0cb8fb2 100644 (file)
@@ -103,7 +103,6 @@ public class WorkflowActionBBTasks {
                 (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
         execution.setVariable("MacroRollback", false);
 
-        flowManipulatorListenerRunner.modifyFlows(flowsToExecute, new DelegateExecutionImpl(execution));
         int currentSequence = (int) execution.getVariable(G_CURRENT_SEQUENCE);
 
         ExecuteBuildingBlock ebb = flowsToExecute.get(currentSequence);
@@ -114,6 +113,12 @@ public class WorkflowActionBBTasks {
         execution.setVariable(G_CURRENT_SEQUENCE, currentSequence);
     }
 
+    public void runFlowManipulator(DelegateExecution execution) {
+        List<ExecuteBuildingBlock> flowsToExecute =
+                (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
+        flowManipulatorListenerRunner.modifyFlows(flowsToExecute, new DelegateExecutionImpl(execution));
+    }
+
     public void updateFlowStatistics(DelegateExecution execution) {
         try {
             int currentSequence = (int) execution.getVariable(G_CURRENT_SEQUENCE);
index 2119ced..42aab4c 100644 (file)
@@ -52,6 +52,8 @@ public class SkipCDSBuildingBlockListener implements FlowManipulator {
     private Set<String> pnfActions =
             new HashSet<>(Arrays.asList("config-assign", "config-deploy", "PnfConfigAssign", "PnfConfigDeploy"));
 
+    private static final String COMPLETED = "completed";
+
     @Override
     public boolean shouldRunFor(String currentBBName, boolean isFirst, BuildingBlockExecution execution) {
 
@@ -70,6 +72,7 @@ public class SkipCDSBuildingBlockListener implements FlowManipulator {
     public void run(List<ExecuteBuildingBlock> flowsToExecute, ExecuteBuildingBlock currentBB,
             BuildingBlockExecution execution) {
         String customizationUUID = currentBB.getBuildingBlock().getKey();
+        int flowsToExecuteSize = flowsToExecute.size();
 
         if (Strings.isEmpty(customizationUUID)) {
             return;
@@ -85,7 +88,7 @@ public class SkipCDSBuildingBlockListener implements FlowManipulator {
                         vnfResourceCustomizations);
                 if (null != vrc) {
                     boolean skipConfigVNF = vrc.isSkipPostInstConf();
-                    currentSequenceSkipCheck(execution, skipConfigVNF);
+                    currentSequenceSkipCheck(execution, skipConfigVNF, flowsToExecuteSize);
                 }
 
             }
@@ -97,7 +100,7 @@ public class SkipCDSBuildingBlockListener implements FlowManipulator {
 
             if (null != vfc) {
                 boolean skipVfModule = vfc.isSkipPostInstConf();
-                currentSequenceSkipCheck(execution, skipVfModule);
+                currentSequenceSkipCheck(execution, skipVfModule, flowsToExecuteSize);
             }
 
         } else if (currentBB.getBuildingBlock().getBpmnScope().equalsIgnoreCase("PNF")
@@ -107,7 +110,7 @@ public class SkipCDSBuildingBlockListener implements FlowManipulator {
 
             if (null != pnfResourceCustomization) {
                 boolean skipConfigPNF = pnfResourceCustomization.isSkipPostInstConf();
-                currentSequenceSkipCheck(execution, skipConfigPNF);
+                currentSequenceSkipCheck(execution, skipConfigPNF, flowsToExecuteSize);
             }
         }
     }
@@ -118,10 +121,16 @@ public class SkipCDSBuildingBlockListener implements FlowManipulator {
     }
 
 
-    private void currentSequenceSkipCheck(BuildingBlockExecution execution, boolean skipModule) {
+    private void currentSequenceSkipCheck(BuildingBlockExecution execution, boolean skipModule,
+            int flowsToExecuteSize) {
         if (skipModule) {
             int currentSequence = execution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
-            execution.setVariable(BBConstants.G_CURRENT_SEQUENCE, currentSequence + 1);
+            currentSequence++;
+            if (currentSequence >= flowsToExecuteSize) {
+                execution.setVariable(COMPLETED, true);
+            } else {
+                execution.setVariable(BBConstants.G_CURRENT_SEQUENCE, currentSequence);
+            }
         }
     }
 
index 3290bb3..b0358c5 100644 (file)
@@ -41,7 +41,6 @@ import org.onap.aai.domain.yang.ServiceInstance;
 import org.onap.aai.domain.yang.VfModule;
 import org.onap.aai.domain.yang.VolumeGroup;
 import org.onap.so.bpmn.BaseTaskTest;
-import org.onap.so.bpmn.common.listener.flowmanipulator.FlowManipulatorListenerRunner;
 import org.onap.so.bpmn.core.WorkflowException;
 import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ConfigurationResourceKeys;
@@ -90,9 +89,6 @@ public class WorkflowActionBBTasksTest extends BaseTaskTest {
     @Mock
     protected Environment environment;
 
-    @Mock
-    private FlowManipulatorListenerRunner flowManipulatorListenerRunner;
-
     @Rule
     public ExpectedException thrown = ExpectedException.none();
 
index fdf4d36..1d68cf0 100644 (file)
@@ -55,10 +55,10 @@ public class SkipCDSBuildingBlockListenerTest {
     private static final String PNFModule_TEST_ACTION = "config-assign";
     private static final String MODELCUSTOMIZATIONUUID = "123456789";
     private static final String BBNAME = "ControllerExecutionBB";
+    private static final String COMPLETED = "completed";
     private static final boolean ISFIRST = true;
 
     private int actual;
-    private List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
     private List<VnfResourceCustomization> vnfResourceCustomization;
     private List<VfModuleCustomization> vfModuleCustomization;
     private ExecuteBuildingBlock executeBuildingBlock = new ExecuteBuildingBlock();
@@ -91,6 +91,9 @@ public class SkipCDSBuildingBlockListenerTest {
 
     @Test
     public void testProcessForVNFToSkipCDSBB() {
+        List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+        flowsToExecute.add(executeBuildingBlock);
+        flowsToExecute.add(new ExecuteBuildingBlock());
         // given
         setBuildingBlockAndCurrentSequence(VNF_SCOPE, VNF_TEST_ACTION, 0);
         vnfResourceCustomization = getVnfResourceCustomizationList(true);
@@ -112,6 +115,9 @@ public class SkipCDSBuildingBlockListenerTest {
 
     @Test
     public void testProcessForVNFNotToSkipCDSBB() {
+        List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+        flowsToExecute.add(executeBuildingBlock);
+        flowsToExecute.add(new ExecuteBuildingBlock());
         // given
         setBuildingBlockAndCurrentSequence(VNF_SCOPE, VNF_TEST_ACTION, 0);
         vnfResourceCustomization = getVnfResourceCustomizationList(false);
@@ -134,6 +140,9 @@ public class SkipCDSBuildingBlockListenerTest {
 
     @Test
     public void testProcessForVFToSkipCDSBB() {
+        List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+        flowsToExecute.add(executeBuildingBlock);
+        flowsToExecute.add(new ExecuteBuildingBlock());
         // given
         setBuildingBlockAndCurrentSequence(VF_SCOPE, VFModule_TEST_ACTION, 0);
         vfModuleCustomization = getVfModuleCustomizationList(true);
@@ -153,6 +162,9 @@ public class SkipCDSBuildingBlockListenerTest {
 
     @Test
     public void testProcessForVFNotToSkipCDSBB() {
+        List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+        flowsToExecute.add(executeBuildingBlock);
+        flowsToExecute.add(new ExecuteBuildingBlock());
         // given
         setBuildingBlockAndCurrentSequence(VF_SCOPE, VFModule_TEST_ACTION, 0);
         vfModuleCustomization = getVfModuleCustomizationList(false);
@@ -172,6 +184,9 @@ public class SkipCDSBuildingBlockListenerTest {
 
     @Test
     public void testProcessForPNFToSkipCDSBB() {
+        List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+        flowsToExecute.add(executeBuildingBlock);
+        flowsToExecute.add(new ExecuteBuildingBlock());
         // given
         setBuildingBlockAndCurrentSequence(PNF_SCOPE, PNFModule_TEST_ACTION, 0);
         pnfResourceCustomization = getPnfResourceCustomization(true);
@@ -189,8 +204,33 @@ public class SkipCDSBuildingBlockListenerTest {
 
     }
 
+    @Test
+    public void testProcessForPNFToSkipCDSBBLastBBInList() {
+        List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+        flowsToExecute.add(executeBuildingBlock);
+        // given
+        setBuildingBlockAndCurrentSequence(PNF_SCOPE, PNFModule_TEST_ACTION, 0);
+        pnfResourceCustomization = getPnfResourceCustomization(true);
+
+        when(catalogDbClient
+                .getPnfResourceCustomizationByModelCustomizationUUID(executeBuildingBlock.getBuildingBlock().getKey()))
+                        .thenReturn(pnfResourceCustomization);
+
+        // when
+        skipCDSBuildingBlockListener.run(flowsToExecute, executeBuildingBlock, buildingBlockExecution);
+
+        // then
+        actual = buildingBlockExecution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
+        boolean isCompleted = buildingBlockExecution.getVariable(COMPLETED);
+        assertEquals(true, isCompleted);
+        assertEquals(0, actual);
+    }
+
     @Test
     public void testProcessForPNFNotToSkipCDSBB() {
+        List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+        flowsToExecute.add(executeBuildingBlock);
+        flowsToExecute.add(new ExecuteBuildingBlock());
         // given
         setBuildingBlockAndCurrentSequence(PNF_SCOPE, PNFModule_TEST_ACTION, 0);
         pnfResourceCustomization = getPnfResourceCustomization(false);