Fixes exceptions found in modifying transport slices 54/120854/5
authorhyu2010 <hyu2010b@gmail.com>
Thu, 22 Apr 2021 14:43:23 +0000 (10:43 -0400)
committerhyu2010 <hyu2010b@gmail.com>
Tue, 22 Jun 2021 20:30:55 +0000 (16:30 -0400)
This update fixes the exceptions found in the integration tests
of transport slicing in Istanbul release

Issue-ID: SO-3631

Signed-off-by: hyu2010 <hyu2010b@gmail.com>
Change-Id: Ib085742f09f6c31bc6d238d1b9f4c12b3e16d04e
Signed-off-by: hyu2010 <hyu2010b@gmail.com>
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyTnNssi.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyTransportNSSI.bpmn

index 9221067..dd16851 100644 (file)
@@ -297,7 +297,7 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor {
             List<String> linkStrList = jsonUtil.StringArrayToList(linkArrayStr)
 
             for (String linkStr : linkStrList) {
-                String linkId = jsonUtil.getJsonValue(linkStr, "id")
+                String linkId = jsonUtil.getJsonValue(linkStr, "name")
                 if (isBlank(linkId)) {
                     linkId = "tn-nssmf-" + UUID.randomUUID().toString()
                 }
index 9440b42..25cb2f5 100644 (file)
@@ -24,7 +24,11 @@ import com.fasterxml.jackson.databind.ObjectMapper
 import groovy.json.JsonSlurper
 import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
-import org.onap.aai.domain.yang.*
+import org.onap.aai.domain.yang.AllottedResource
+import org.onap.aai.domain.yang.AllottedResources
+import org.onap.aai.domain.yang.NetworkPolicy
+import org.onap.aai.domain.yang.ServiceInstance
+import org.onap.aai.domain.yang.SliceProfile
 import org.onap.aaiclient.client.aai.AAIResourcesClient
 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
@@ -38,7 +42,9 @@ import org.onap.so.db.request.beans.ResourceOperationStatus
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 
-import static org.apache.commons.lang3.StringUtils.*
+import static org.apache.commons.lang3.StringUtils.isBlank
+import static org.apache.commons.lang3.StringUtils.isEmpty
+import static org.apache.commons.lang3.StringUtils.isNotBlank
 
 public class DoModifyTnNssi extends AbstractServiceTaskProcessor {
     String Prefix = "TNMOD_"
@@ -150,26 +156,31 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor {
         AAIResourceUri ssServiceuri = AAIUriFactory.createResourceUri(Types.SERVICE_INSTANCE.getFragment(serviceInstanceId))
 
         try {
-            if (resourceClient.exists(ssServiceuri)) {
-                ServiceInstance ss = resourceClient.get(ServiceInstance.class, ssServiceuri)
-
-                AllottedResources ars = ss.getAllottedResources()
-                List<AllottedResource> arList = ars.getAllottedResource()
-                List<String> arIdList = new ArrayList<>()
-                Map<String, String> policyMap = new HashMap<>()
-                Map<String, List<String>> logicalLinksMap = new HashMap<>()
-                for (AllottedResource ar : arList) {
-                    String arId = ar.getId()
-                    arIdList.add(arId)
-                    String policyId = tnNssmfUtils.getPolicyIdFromAr(execution, serviceInstanceId, arId, true)
-                    policyMap.put(arId, policyId)
-                    List<String> logicalLinkList = tnNssmfUtils.getLogicalLinkNamesFromAr(execution,
-                            serviceInstanceId, arId, true)
-                    logicalLinksMap.put(arId, logicalLinkList)
+            Optional<ServiceInstance> ssOpt = resourceClient.get(ServiceInstance.class, ssServiceuri)
+            if (ssOpt.isPresent()) {
+                ServiceInstance ss = ssOpt.get()
+                AllottedResources ars = tnNssmfUtils.getAllottedResourcesFromAai(execution, serviceInstanceId, true)
+                if (ars != null) {
+                    List<AllottedResource> arList = ars.getAllottedResource()
+                    List<String> arIdList = new ArrayList<>()
+                    Map<String, String> policyMap = new HashMap<>()
+                    Map<String, List<String>> logicalLinksMap = new HashMap<>()
+                    for (AllottedResource ar : arList) {
+                        String arId = ar.getId()
+                        arIdList.add(arId)
+                        String policyId = tnNssmfUtils.getPolicyIdFromAr(execution, serviceInstanceId, arId, true)
+                        policyMap.put(arId, policyId)
+                        List<String> logicalLinkList = tnNssmfUtils.getLogicalLinkNamesFromAr(execution,
+                                serviceInstanceId, arId, true)
+                        logicalLinksMap.put(arId, logicalLinkList)
+                    }
+                    execution.setVariable("arIdList", arIdList)
+                    execution.setVariable("arPolicyMap", policyMap)
+                    execution.setVariable("arLogicalLinkMap", logicalLinksMap)
+                } else {
+                    logger.error("ERROR: getExistingServiceInstance: getAllottedResources() returned null. ss=" + ss
+                            .toString())
                 }
-                execution.setVariable("arIdList", arIdList)
-                execution.setVariable("arPolicyMap", policyMap)
-                execution.setVariable("arLogicalLinkMap", logicalLinksMap)
             } else {
                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai to " +
                         "associate allotted resource for service :" + serviceInstanceId)
@@ -177,7 +188,7 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor {
         } catch (BpmnError e) {
             throw e;
         } catch (Exception ex) {
-            String msg = "Exception in getServiceInstance. " + ex.getMessage()
+            String msg = "Exception in getExistingServiceInstance. " + ex.getMessage()
             logger.debug(msg)
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
         }
@@ -195,6 +206,7 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor {
             //ss.setServiceInstanceId(ssInstanceId)
             String serviceStatus = "modified"
             ss.setOrchestrationStatus(serviceStatus)
+            ss.setEnvironmentContext("tn")
             AAIResourcesClient client = getAAIClient()
             AAIResourceUri uri = AAIUriFactory.createResourceUri(
                     AAIFluentTypeBuilder.business()
@@ -279,14 +291,15 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor {
 
     void updateLogicalLinksInNetwork(DelegateExecution execution, String networkJsonStr) {
         try {
-            String arId = getValidArId(jsonUtil.getJsonValue(networkJsonStr, "id"))
+            String arId = getValidArId(execution, jsonUtil.getJsonValue(networkJsonStr, "id"))
             String linkArrayStr = jsonUtil.getJsonValue(networkJsonStr, "connectionLinks")
             updateLogicalLinksInAr(execution, arId, linkArrayStr)
         } catch (BpmnError e) {
             throw e
         } catch (Exception ex) {
-            exceptionUtil.buildAndThrowWorkflowException(execution, 7000,
-                    "Exception in updateLogicalLinksInNetwork" + ex.getMessage())
+            String msg = String.format("ERROR: updateLogicalLinksInNetwork: exception: %s", ex.getMessage())
+            logger.error(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg);
         }
     }
 
@@ -351,7 +364,7 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor {
         try {
             int maxBw = getMaxBw(execution)
 
-            String arId = getValidArId(jsonUtil.getJsonValue(networkJsonStr, "id"))
+            String arId = getValidArId(execution, jsonUtil.getJsonValue(networkJsonStr, "id"))
             Map<String, String> policyMap = execution.getVariable("arPolicyMap")
             String policyId = policyMap.get(arId)
             if (isBlank(policyId)) {
@@ -365,8 +378,9 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor {
         } catch (BpmnError e) {
             throw e
         } catch (Exception ex) {
-            exceptionUtil.buildAndThrowWorkflowException(execution, 7000,
-                    "Exception in updateNetworkPolicy" + ex.getMessage())
+            String msg = String.format("ERROR: updateNetworkPolicy: exception: %s", ex.getMessage())
+            logger.error(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg);
         }
     }
 
@@ -428,7 +442,7 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor {
         try {
             String serviceInstanceId = execution.getVariable("sliceServiceInstanceId")
 
-            String sdncRequest = tnNssmfUtils.buildSDNCRequest(execution, serviceInstanceId, "modify")
+            String sdncRequest = tnNssmfUtils.buildSDNCRequest(execution, serviceInstanceId, "update")
 
             execution.setVariable("TNNSSMF_SDNCRequest", sdncRequest)
             logger.debug("Outgoing SDNCRequest is: \n" + sdncRequest)
@@ -483,6 +497,7 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor {
         ResourceOperationStatus roStatus = tnNssmfUtils.buildRoStatus(modelUuid, ssInstanceId,
                 jobId, nsiId, operType, status, progress, statusDescription)
 
+        logger.debug("prepareUpdateJobStatus: roStatus={}", roStatus)
         requestDBUtil.prepareUpdateResourceOperationStatus(execution, roStatus)
     }
 
index 4624cda..fc21ed4 100644 (file)
@@ -22,17 +22,19 @@ package org.onap.so.bpmn.infrastructure.scripts
 
 import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.onap.aai.domain.yang.AllottedResources
 import org.onap.aai.domain.yang.LogicalLink
 import org.onap.aai.domain.yang.NetworkPolicy
 import org.onap.aai.domain.yang.Relationship
 import org.onap.aai.domain.yang.ServiceInstance
 import org.onap.aaiclient.client.aai.AAIResourcesClient
+import org.onap.aaiclient.client.aai.AAIVersion
 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
 import org.onap.aaiclient.client.aai.entities.Relationships
+import org.onap.aaiclient.client.aai.entities.uri.AAIPluralResourceUri
 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
-import org.onap.aaiclient.client.generated.fluentbuilders.Activities
 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 import org.onap.so.bpmn.common.scripts.MsoUtils
 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
@@ -47,7 +49,7 @@ import org.slf4j.LoggerFactory
 import static org.apache.commons.lang3.StringUtils.isBlank
 
 class TnNssmfUtils {
-    static final String AAI_VERSION = "v23"
+    static final String AAI_VERSION = AAIVersion.LATEST
     private static final Logger logger = LoggerFactory.getLogger(TnNssmfUtils.class);
 
 
@@ -91,6 +93,9 @@ class TnNssmfUtils {
             case "deactivate":
                 reqAction = "DeactivateTransportSliceInstance"
                 break
+            case "update":
+                reqAction = "ModifyTransportSliceInstance"
+                break
             default:
                 reqAction = svcAction
         }
@@ -433,7 +438,7 @@ class TnNssmfUtils {
             return null
         }
 
-        return si.modelVersionId()
+        return si.getModelVersionId()
     }
 
     AAIResourceUri buildNetworkPolicyUri(String networkPolicyId) {
@@ -456,6 +461,52 @@ class TnNssmfUtils {
         return allottedResourceUri
     }
 
+    AAIPluralResourceUri buildAllottedResourcesUri(DelegateExecution execution, String serviceInstanceId) {
+
+        AAIPluralResourceUri arsUri =
+                AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+                        .customer(execution.getVariable("globalSubscriberId"))
+                        .serviceSubscription(execution.getVariable("subscriptionServiceType"))
+                        .serviceInstance(serviceInstanceId)
+                        .allottedResources())
+
+        return arsUri
+    }
+
+    AllottedResources getAllottedResourcesFromAai(DelegateExecution execution, String serviceInstanceId, boolean exceptionOnErr) {
+        AllottedResources res
+        try {
+            AAIResourcesClient client = new AAIResourcesClient()
+
+            AAIPluralResourceUri arsUri = buildAllottedResourcesUri(execution, serviceInstanceId)
+
+            //AAIResultWrapper wrapperAllotted = client.get(arsUri, NotFoundException.class)
+            //Optional<AllottedResources> allAllotted = wrapperAllotted.asBean(AllottedResources.class)
+            //AllottedResources allottedResources = allAllotted.get()
+
+            Optional<AllottedResources> arsOpt = client.get(AllottedResources.class, arsUri)
+            if (arsOpt.isPresent()) {
+                res = arsOpt.get()
+                return res
+            } else {
+                String msg = String.format("ERROR: getAllottedResourcesFromAai: ars not found. nssiId=%s", serviceInstanceId)
+                logger.error(msg)
+                exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
+            }
+        } catch (BpmnError e) {
+            if (exceptionOnErr) {
+                throw e;
+            }
+        } catch (Exception ex) {
+            if (exceptionOnErr) {
+                String msg = String.format("ERROR: getAllottedResourcesFromAai: %s", ex.getMessage())
+                logger.error(msg)
+                exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
+            }
+        }
+
+        return res
+    }
 
     String getPolicyIdFromAr(DelegateExecution execution, String serviceInstanceId,
                              String arId, boolean exceptionOnErr) {
@@ -464,15 +515,15 @@ class TnNssmfUtils {
             AAIResourcesClient client = new AAIResourcesClient()
 
             AAIResourceUri arUri = buildAllottedResourceUri(execution, serviceInstanceId, arId)
-            List<AAIResourceUri> logicalLinkUriList = getRelationshipUriListInAai(execution, arUri,
+            List<AAIResourceUri> policyUriList = getRelationshipUriListInAai(execution, arUri,
                     AAIFluentTypeBuilder.Types.NETWORK_POLICY, exceptionOnErr)
-            for (AAIResourceUri logicalLinkUri : logicalLinkUriList) {
-                Optional<NetworkPolicy> policyOpt = client.get(NetworkPolicy.class, logicalLinkUri)
+            for (AAIResourceUri policyUri : policyUriList) {
+                Optional<NetworkPolicy> policyOpt = client.get(NetworkPolicy.class, policyUri)
                 if (policyOpt.isPresent()) {
                     NetworkPolicy policy = policyOpt.get()
                     return policy.getNetworkPolicyId()
                 } else {
-                    String msg = String.format("ERROR: getLogicalLinkNamesFromAr: logicalLinkUri=%s", logicalLinkUri)
+                    String msg = String.format("ERROR: getPolicyIdFromAr: arUri=%s", policyUri)
                     logger.error(msg)
                     exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
                 }
@@ -483,7 +534,7 @@ class TnNssmfUtils {
             }
         } catch (Exception ex) {
             if (exceptionOnErr) {
-                String msg = String.format("ERROR: getLogicalLinkNamesFromAr: %s", ex.getMessage())
+                String msg = String.format("ERROR: getPolicyIdFromAr: %s", ex.getMessage())
                 logger.error(msg)
                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
             }
@@ -494,7 +545,8 @@ class TnNssmfUtils {
 
 
     List<AAIResourceUri> getRelationshipUriListInAai(DelegateExecution execution,
-                                                     AAIResourceUri uri, Activities.Info info,
+                                                     AAIResourceUri uri,
+                                                     Object info,
                                                      boolean exceptionOnErr) {
         AAIResourcesClient client = new AAIResourcesClient()
         AAIResultWrapper wrapper = client.get(uri);
index dcfd31b..06bcb08 100644 (file)
@@ -29,7 +29,7 @@ ex.processJavaException(execution)</bpmn:script>
       <bpmn:incoming>SequenceFlow_0kixzdj</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1qv8qw1</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def runScript = new DoActivateTnNssi()
+def runScript = new DoModifyTnNssi()
 runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Modified TN NSSI successfully")</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="SequenceFlow_03s744c" sourceRef="StartEvent_1nbljfd" targetRef="ScriptTask_1tc44ge" />
@@ -73,8 +73,8 @@ runScript.preprocessSdncModifyTnNssiRequest(execution)</bpmn:script>
       <bpmn:extensionElements>
         <camunda:in source="TNNSSMF_SDNCRequest" target="sdncAdapterWorkflowRequest" />
         <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" />
-        <camunda:in source="mso-request-id" target="mso-request-id" />
-        <camunda:in source="mso-service-instance-id" target="mso-service-instance-id" />
+        <camunda:in source="msoRequestId" target="mso-request-id" />
+        <camunda:in source="sliceServiceInstanceId" target="mso-service-instance-id" />
         <camunda:out source="WorkflowException" target="WorkflowException" />
         <camunda:out source="sdncAdapterResponse" target="TNNSSMF_SDNCAdapterResponse" />
         <camunda:out source="SDNCA_SuccessIndicator" target="SDNCA_SuccessIndicator" />
@@ -132,6 +132,20 @@ runScript.validateSDNCResponse(execution, response, "modify")</bpmn:script>
   <bpmn:error id="Error_0p2naox" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoModifyTransportNSSI">
+      <bpmndi:BPMNEdge id="Flow_0b3rxne_di" bpmnElement="Flow_0b3rxne">
+        <di:waypoint x="690" y="146" />
+        <di:waypoint x="690" y="360" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="698" y="203" width="15" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0cm9i4m_di" bpmnElement="Flow_0cm9i4m">
+        <di:waypoint x="715" y="121" />
+        <di:waypoint x="789" y="121" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="743" y="103" width="19" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1akxvak_di" bpmnElement="Flow_1akxvak">
         <di:waypoint x="1230" y="400" />
         <di:waypoint x="1372" y="400" />
@@ -171,62 +185,12 @@ runScript.validateSDNCResponse(execution, response, "modify")</bpmn:script>
         <di:waypoint x="208" y="121" />
         <di:waypoint x="290" y="121" />
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0cm9i4m_di" bpmnElement="Flow_0cm9i4m">
-        <di:waypoint x="715" y="121" />
-        <di:waypoint x="789" y="121" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="743" y="103" width="19" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0b3rxne_di" bpmnElement="Flow_0b3rxne">
-        <di:waypoint x="690" y="146" />
-        <di:waypoint x="690" y="360" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="698" y="203" width="15" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="Activity_1vtz33q_di" bpmnElement="Activity_1vtz33q">
-        <dc:Bounds x="1229" y="74" width="121" height="94" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_14ab476_di" bpmnElement="Activity_14ab476">
-        <dc:Bounds x="989" y="74" width="121" height="94" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_0h1vr2l_di" bpmnElement="Activity_0h1vr2l">
-        <dc:Bounds x="789" y="74" width="121" height="94" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="StartEvent_1nbljfd_di" bpmnElement="StartEvent_1nbljfd">
         <dc:Bounds x="172" y="103" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="155" y="146" width="86" height="40" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1tc44ge_di" bpmnElement="ScriptTask_1tc44ge">
-        <dc:Bounds x="290" y="81" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5">
-        <dc:Bounds x="479" y="74" width="121" height="94" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Gateway_1o68a9z_di" bpmnElement="Gateway_1o68a9z" isMarkerVisible="true">
-        <dc:Bounds x="665" y="96" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="653" y="73" width="75" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_19uxoi8_di" bpmnElement="ScriptTask_19uxoi8">
-        <dc:Bounds x="640" y="360" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9">
-        <dc:Bounds x="860" y="360" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_0ziz3ti_di" bpmnElement="Activity_0ziz3ti">
-        <dc:Bounds x="1130" y="360" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="EndEvent_05h01gx_di" bpmnElement="EndEvent_05h01gx">
-        <dc:Bounds x="1372" y="382" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1380" y="425" width="20" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="SubProcess_1yv9i68_di" bpmnElement="SubProcess_1yv9i68" isExpanded="true">
         <dc:Bounds x="735" y="1080" width="781" height="196" />
       </bpmndi:BPMNShape>
@@ -247,6 +211,42 @@ runScript.validateSDNCResponse(execution, response, "modify")</bpmn:script>
       <bpmndi:BPMNShape id="ScriptTask_1swzdpw_di" bpmnElement="ScriptTask_1swzdpw">
         <dc:Bounds x="1029" y="1144" width="100" height="80" />
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_05h01gx_di" bpmnElement="EndEvent_05h01gx">
+        <dc:Bounds x="1372" y="382" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1380" y="425" width="20" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9">
+        <dc:Bounds x="860" y="360" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_19uxoi8_di" bpmnElement="ScriptTask_19uxoi8">
+        <dc:Bounds x="640" y="360" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5">
+        <dc:Bounds x="479" y="74" width="121" height="94" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_1tc44ge_di" bpmnElement="ScriptTask_1tc44ge">
+        <dc:Bounds x="290" y="81" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0h1vr2l_di" bpmnElement="Activity_0h1vr2l">
+        <dc:Bounds x="789" y="74" width="121" height="94" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_14ab476_di" bpmnElement="Activity_14ab476">
+        <dc:Bounds x="989" y="74" width="121" height="94" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1vtz33q_di" bpmnElement="Activity_1vtz33q">
+        <dc:Bounds x="1229" y="74" width="121" height="94" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0ziz3ti_di" bpmnElement="Activity_0ziz3ti">
+        <dc:Bounds x="1130" y="360" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Gateway_1o68a9z_di" bpmnElement="Gateway_1o68a9z" isMarkerVisible="true">
+        <dc:Bounds x="665" y="96" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="653" y="73" width="75" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>