Add homing to CreateGenericALaCarteService flow 23/65323/6
authorSrivahni Chivukula <srivahni.chivukula@intel.com>
Tue, 18 Sep 2018 15:32:49 +0000 (08:32 -0700)
committerSrivahni Chivukula <srivahni.chivukula@intel.com>
Tue, 18 Sep 2018 15:44:30 +0000 (08:44 -0700)
Created HomingBB.bpmn in so-bpmn-building-blocks
and updated AssignVnfBB to use HomingBB.bpmn.
HomingBB.bpmn is made capable of using Sniro/OOF

Issue-ID: SO-927
Change-Id: I19c8ada96485f563c2756a22ad3bee4c9367953b
Signed-off-by: Marcus G K Williams <marcus.williams@intel.com>
Signed-off-by: Srivahni Chivukula <srivahni.chivukula@intel.com>
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/AssignVnfBB.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/HomingBB.bpmn [new file with mode: 0644]
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateGenericALaCarteServiceInstance.groovy [changed mode: 0644->0755]
bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateGenericALaCarteServiceInstance.bpmn [changed mode: 0644->0755]

index 8765bca..eaee539 100644 (file)
@@ -33,7 +33,7 @@
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[${execution.getVariable("callHoming")}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="SequenceFlow_0v8d14a" sourceRef="Task_callHoming" targetRef="ExclusiveGateway_1blf52g" />
-    <bpmn:callActivity id="Task_callHoming" name="Call Homing" calledElement="HomingV2">
+    <bpmn:callActivity id="Task_callHoming" name="Call Homing" calledElement="HomingBB">
       <bpmn:extensionElements>
         <camunda:in source="gBuildingBlockExecution" target="gBuildingBlockExecution" />
         <camunda:in source="mso-request-id" target="mso-request-id" />
diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/HomingBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/HomingBB.bpmn
new file mode 100644 (file)
index 0000000..67ee5d0
--- /dev/null
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="_vwRmIBsREeeIQtzUKIjH4g" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.16.2" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+  <bpmn2:process id="Homing" name="Homing" isExecutable="true">
+    <bpmn2:startEvent id="StartEvent_1">
+      <bpmn2:outgoing>SequenceFlow_1x9usa6</bpmn2:outgoing>
+    </bpmn2:startEvent>
+    <bpmn2:scriptTask id="callSniro" name="&#10;Call&#10;Sniro/Oof&#10;" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1x9usa6</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0lc15i7</bpmn2:outgoing>
+      <bpmn2:script>import org.onap.so.bpmn.common.scripts.*
+if(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")).getVariable("homingService") == "oof"){
+  OofHoming oofHoming = new OofHoming()
+  oofHoming.callOof(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))
+}else{
+  SniroHomingV2 sniroHoming = new SniroHomingV2()
+  SniroHoming.callSniro(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))
+}</bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_1x9usa6" sourceRef="StartEvent_1" targetRef="callSniro" />
+    <bpmn2:subProcess id="bpmnErrorSubprocess" name="Error Handling Subprocess" triggeredByEvent="true">
+      <bpmn2:endEvent id="EndEvent_07tjq3v">
+        <bpmn2:incoming>SequenceFlow_1rf4vs8</bpmn2:incoming>
+        <bpmn2:terminateEventDefinition />
+      </bpmn2:endEvent>
+      <bpmn2:startEvent id="StartEvent_1qiitb2">
+        <bpmn2:outgoing>SequenceFlow_00nlh7l</bpmn2:outgoing>
+        <bpmn2:errorEventDefinition />
+      </bpmn2:startEvent>
+      <bpmn2:scriptTask id="processMsoWorkflowException" name="Process Error" scriptFormat="groovy">
+        <bpmn2:incoming>SequenceFlow_00nlh7l</bpmn2:incoming>
+        <bpmn2:outgoing>SequenceFlow_1rf4vs8</bpmn2:outgoing>
+        <bpmn2:script>import org.onap.so.bpmn.common.scripts.*
+ExceptionUtil ex = new ExceptionUtil()
+ex.processSubflowsBPMNException(execution)</bpmn2:script>
+      </bpmn2:scriptTask>
+      <bpmn2:sequenceFlow id="SequenceFlow_1rf4vs8" sourceRef="processMsoWorkflowException" targetRef="EndEvent_07tjq3v" />
+      <bpmn2:sequenceFlow id="SequenceFlow_00nlh7l" sourceRef="StartEvent_1qiitb2" targetRef="processMsoWorkflowException" />
+    </bpmn2:subProcess>
+    <bpmn2:subProcess id="javaExceptionSubProcess" name="Java Exception Sub Process" triggeredByEvent="true">
+      <bpmn2:scriptTask id="processJavaException" name="Process Error" scriptFormat="groovy">
+        <bpmn2:incoming>SequenceFlow_0kamg53</bpmn2:incoming>
+        <bpmn2:outgoing>SequenceFlow_1o7154s</bpmn2:outgoing>
+        <bpmn2:script>import org.onap.so.bpmn.common.scripts.*
+ExceptionUtil ex = new ExceptionUtil()
+ex.processJavaException(execution)</bpmn2:script>
+      </bpmn2:scriptTask>
+      <bpmn2:startEvent id="StartEvent_1fbpeuw">
+        <bpmn2:outgoing>SequenceFlow_0kamg53</bpmn2:outgoing>
+        <bpmn2:errorEventDefinition errorRef="Error_1lwpypa" />
+      </bpmn2:startEvent>
+      <bpmn2:endEvent id="EndEvent_0jbvnr0">
+        <bpmn2:incoming>SequenceFlow_1o7154s</bpmn2:incoming>
+        <bpmn2:terminateEventDefinition />
+      </bpmn2:endEvent>
+      <bpmn2:sequenceFlow id="SequenceFlow_0kamg53" name="" sourceRef="StartEvent_1fbpeuw" targetRef="processJavaException" />
+      <bpmn2:sequenceFlow id="SequenceFlow_1o7154s" name="" sourceRef="processJavaException" targetRef="EndEvent_0jbvnr0" />
+    </bpmn2:subProcess>
+    <bpmn2:scriptTask id="processSniroHomingSolution" name="&#10;Process Solution&#10;" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1fipbmk</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_01apjvo</bpmn2:outgoing>
+      <bpmn2:script>import org.onap.so.bpmn.common.scripts.*
+if(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")).getVariable("homingService") == "oof"){
+  OofHoming oofHoming = new OofHoming()
+  oofHoming.processHomingSolution(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))
+}else{
+  SniroHomingV2  sniroHoming = new SniroHomingV2 ()
+  sniroHoming.processSolution(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")), asyncResponse)
+}</bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:callActivity id="receiveAsyncCallback" name="Receive Async Callback" camunda:modelerTemplate="receiveWorkflowMessage" calledElement="ReceiveWorkflowMessage">
+      <bpmn2:extensionElements>
+        <camunda:in source="true" target="isDebugLogEnabled" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:in source="asyncMessageType" target="RCVWFMSG_messageType" />
+        <camunda:in source="asyncCorrelator" target="RCVWFMSG_correlator" />
+        <camunda:in source="asyncTimeout" target="RCVWFMSG_timeout" />
+        <camunda:out source="WorkflowResponse" target="asyncCallbackResponse" />
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>SequenceFlow_0lc15i7</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1fipbmk</bpmn2:outgoing>
+    </bpmn2:callActivity>
+    <bpmn2:sequenceFlow id="SequenceFlow_1fipbmk" sourceRef="receiveAsyncCallback" targetRef="processSniroHomingSolution" />
+    <bpmn2:sequenceFlow id="SequenceFlow_01apjvo" sourceRef="processSniroHomingSolution" targetRef="EndEvent_0rrbz2a" />
+    <bpmn2:endEvent id="EndEvent_0rrbz2a">
+      <bpmn2:incoming>SequenceFlow_01apjvo</bpmn2:incoming>
+      <bpmn2:terminateEventDefinition />
+    </bpmn2:endEvent>
+    <bpmn2:sequenceFlow id="SequenceFlow_0lc15i7" sourceRef="callSniro" targetRef="receiveAsyncCallback" />
+  </bpmn2:process>
+  <bpmn2:error id="Error_10hit0u" name="MSO Workflow Exception" errorCode="MSOWorkflowException" />
+  <bpmn2:error id="Error_1lwpypa" name="Java Lang Exception" errorCode="java.lang.Exception" />
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Homing">
+      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
+        <dc:Bounds x="147" y="275" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0qmfpdr_di" bpmnElement="callSniro">
+        <dc:Bounds x="313" y="253" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1x9usa6_di" bpmnElement="SequenceFlow_1x9usa6">
+        <di:waypoint x="183" y="293" />
+        <di:waypoint x="313" y="293" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="203" y="278" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="SubProcess_16p12qo_di" bpmnElement="bpmnErrorSubprocess" isExpanded="true">
+        <dc:Bounds x="254" y="449" width="409" height="168" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="SubProcess_12gjiy8_di" bpmnElement="javaExceptionSubProcess" isExpanded="true">
+        <dc:Bounds x="284" y="632" width="350" height="159" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_07tjq3v_di" bpmnElement="EndEvent_07tjq3v">
+        <dc:Bounds x="579" y="523" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="552" y="564" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="StartEvent_1qiitb2_di" bpmnElement="StartEvent_1qiitb2">
+        <dc:Bounds x="299" y="523" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="272" y="564" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_03hs6s9_di" bpmnElement="processMsoWorkflowException">
+        <dc:Bounds x="406" y="501" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_19gqykh_di" bpmnElement="processJavaException">
+        <dc:Bounds x="410" y="680" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="StartEvent_1fbpeuw_di" bpmnElement="StartEvent_1fbpeuw">
+        <dc:Bounds x="318" y="702" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="291" y="743" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_0jbvnr0_di" bpmnElement="EndEvent_0jbvnr0">
+        <dc:Bounds x="567" y="702" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="540" y="743" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1rf4vs8_di" bpmnElement="SequenceFlow_1rf4vs8">
+        <di:waypoint x="506" y="541" />
+        <di:waypoint x="579" y="541" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="498" y="526" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_00nlh7l_di" bpmnElement="SequenceFlow_00nlh7l">
+        <di:waypoint x="335" y="541" />
+        <di:waypoint x="363" y="541" />
+        <di:waypoint x="363" y="541" />
+        <di:waypoint x="406" y="541" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="333" y="541" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0kamg53_di" bpmnElement="SequenceFlow_0kamg53">
+        <di:waypoint x="354" y="720" />
+        <di:waypoint x="410" y="720" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="337" y="705" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1o7154s_di" bpmnElement="SequenceFlow_1o7154s">
+        <di:waypoint x="510" y="720" />
+        <di:waypoint x="567" y="720" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="494" y="705" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_1aapkvq_di" bpmnElement="processSniroHomingSolution">
+        <dc:Bounds x="597" y="253" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="CallActivity_031b5m3_di" bpmnElement="receiveAsyncCallback">
+        <dc:Bounds x="455" y="253" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1fipbmk_di" bpmnElement="SequenceFlow_1fipbmk">
+        <di:waypoint x="555" y="293" />
+        <di:waypoint x="597" y="293" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="531" y="272" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_01apjvo_di" bpmnElement="SequenceFlow_01apjvo">
+        <di:waypoint x="697" y="293" />
+        <di:waypoint x="860" y="293" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="778.5" y="272" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="EndEvent_07i1a5x_di" bpmnElement="EndEvent_0rrbz2a">
+        <dc:Bounds x="860" y="275" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="877.17" y="315" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0lc15i7_di" bpmnElement="SequenceFlow_0lc15i7">
+        <di:waypoint x="413" y="293" />
+        <di:waypoint x="455" y="293" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="434" y="272" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn2:definitions>
old mode 100644 (file)
new mode 100755 (executable)
index 4405718..9686123
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.bpmn.infrastructure.scripts;
+package org.onap.so.bpmn.infrastructure.scripts
+
+import org.onap.so.bpmn.core.domain.ModelInfo
+import org.onap.so.bpmn.core.domain.VnfResource;
 
 import static org.apache.commons.lang3.StringUtils.*;
 
@@ -43,315 +46,358 @@ import groovy.json.*
  *
  */
 public class CreateGenericALaCarteServiceInstance extends AbstractServiceTaskProcessor {
-       String Prefix="CRESI_"
-       ExceptionUtil exceptionUtil = new ExceptionUtil()
-       JsonUtils jsonUtil = new JsonUtils()
-       private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, CreateGenericALaCarteServiceInstance.class);
-
-       public void preProcessRequest (DelegateExecution execution) {
-               def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-               execution.setVariable("prefix",Prefix)
-               String msg = ""
-
-               try {
-
-                       String siRequest = execution.getVariable("bpmnRequest")
-                       msoLogger.debug(siRequest)
-
-                       String requestId = execution.getVariable("mso-request-id")
-                       execution.setVariable("msoRequestId", requestId)
-                       msoLogger.debug("Input Request:" + siRequest + " reqId:" + requestId)
-
-                       String serviceInstanceId = execution.getVariable("serviceInstanceId")
-                       if (isBlank(serviceInstanceId)) {
-                               serviceInstanceId = UUID.randomUUID().toString()
-                               msoLogger.debug("Generated new Service Instance ID:" + serviceInstanceId)
-                       } else {
-                               msoLogger.debug("Using provided Service Instance ID:" + serviceInstanceId)
-                       }
-
-                       serviceInstanceId = UriUtils.encode(serviceInstanceId,"UTF-8")
-                       execution.setVariable("serviceInstanceId", serviceInstanceId)
-
-                       //subscriberInfo
-                       String globalSubscriberId = jsonUtil.getJsonValue(siRequest, "requestDetails.subscriberInfo.globalSubscriberId")
-                       if (isBlank(globalSubscriberId)) {
-                               msg = "Input globalSubscriberId' is null"
-                               exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-                       } else {
-                               execution.setVariable("globalSubscriberId", globalSubscriberId)
-                       }
-
-                       //requestInfo
-                       execution.setVariable("source", jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.source"))
-                       execution.setVariable("serviceInstanceName", jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.instanceName"))
-                       execution.setVariable("disableRollback", jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.suppressRollback"))
-                       String productFamilyId = null;
-                       try { 
-                               productFamilyId = jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.productFamilyId")
-                       } catch (JSONException e) {
-                               productFamilyId = null;
-                       }
-                       if (isBlank(productFamilyId))
-                       {
-                               msg = "Input productFamilyId is null"
-                               msoLogger.debug(msg)
-                               //exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-                       } else {
-                               execution.setVariable("productFamilyId", productFamilyId)
-                       }
-
-                       //modelInfo
-                       String serviceModelInfo = jsonUtil.getJsonValue(siRequest, "requestDetails.modelInfo")
-                       if (isBlank(serviceModelInfo)) {
-                               msg = "Input serviceModelInfo is null"
-                               msoLogger.debug(msg)
-                               exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-                       } else
-                       {
-                               execution.setVariable("serviceModelInfo", serviceModelInfo)
-                       }
-
-                       msoLogger.debug("modelInfo" + serviceModelInfo)
-               
-                       //requestParameters
-                       String subscriptionServiceType = jsonUtil.getJsonValue(siRequest, "requestDetails.requestParameters.subscriptionServiceType")
-                       if (isBlank(subscriptionServiceType)) {
-                               msg = "Input subscriptionServiceType is null"
-                               msoLogger.debug(msg)
-                               exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-                       } else {
-                               execution.setVariable("subscriptionServiceType", subscriptionServiceType)
-                       }
-
-                       
-                       /*
-                        * Extracting User Parameters from incoming Request and converting into a Map
-                        */
-                       def jsonSlurper = new JsonSlurper()
-                       def jsonOutput = new JsonOutput()
-
-                       Map reqMap = jsonSlurper.parseText(siRequest)
-
-                       //InputParams
-                       def userParams = reqMap.requestDetails?.requestParameters?.userParams
-
-                       Map<String, String> inputMap = [:]
-                       if (userParams) {
-                               userParams.each {
-                                       userParam -> inputMap.put(userParam.name, userParam.value.toString())
-                               }
-                       }
-                       
-                       msoLogger.debug("User Input Parameters map: " + userParams.toString())
-                       execution.setVariable("serviceInputParams", inputMap)
-                       
-                       //TODO
-                       //execution.setVariable("failExists", true)
-
-               } catch (BpmnError e) {
-                       throw e;
-               } catch (Exception ex){
-                       msg = "Exception in preProcessRequest " + ex.getMessage()
-                       msoLogger.debug(msg)
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-               }
-               msoLogger.trace("Exit preProcessRequest")
-       }
-
-       public void sendSyncResponse (DelegateExecution execution) {
-               def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-               msoLogger.trace("Start sendSyncResponse")
-
-               try {
-                       String requestId = execution.getVariable("msoRequestId")
-                       String serviceInstanceId = execution.getVariable("serviceInstanceId")
-                       // RESTResponse for API Handler (APIH) Reply Task
-                       String createServiceRestRequest = """{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim()
-                       msoLogger.debug(" sendSyncResponse to APIH:" + "\n" + createServiceRestRequest)
-                       sendWorkflowResponse(execution, 202, createServiceRestRequest)
-                       execution.setVariable("sentSyncResponse", true)
-
-               } catch (Exception ex) {
-                       String msg = "Exceptuion in sendSyncResponse:" + ex.getMessage()
-                       msoLogger.debug(msg)
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-               }
-               msoLogger.trace("Exit sendSyncResopnse")
-       }
-
-
-       public void sendSyncError (DelegateExecution execution) {
-               def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-               msoLogger.trace("Start sendSyncError")
-
-               try {
-                       String errorMessage = ""
-                       if (execution.getVariable("WorkflowException") instanceof WorkflowException) {
-                               WorkflowException wfe = execution.getVariable("WorkflowException")
-                               errorMessage = wfe.getErrorMessage()
-                       } else {
-                               errorMessage = "Sending Sync Error."
-                       }
-
-                       String buildworkflowException =
-                                       """<aetgt:WorkflowException xmlns:aetgt="http://org.onap/so/workflow/schema/v1">
-                                       <aetgt:ErrorMessage>${MsoUtils.xmlEscape(errorMessage)}</aetgt:ErrorMessage>
-                                       <aetgt:ErrorCode>7000</aetgt:ErrorCode>
-                                  </aetgt:WorkflowException>"""
-
-                       msoLogger.debug(buildworkflowException)
-                       sendWorkflowResponse(execution, 500, buildworkflowException)
-
-               } catch (Exception ex) {
-                       msoLogger.debug(" Sending Sync Error Activity Failed. " + "\n" + ex.getMessage())
-               }
-
-       }
-
-       // *******************************
-       //
-       // *******************************
-       public void prepareDecomposeService(DelegateExecution execution) {
-               def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-               msoLogger.trace("Inside prepareDecomposeService of CreateGenericALaCarteServiceInstance ")
-               try {
-                       String siRequest = execution.getVariable("bpmnRequest")
-                       String serviceModelInfo = jsonUtil.getJsonValue(siRequest, "requestDetails.modelInfo")
-                       execution.setVariable("serviceModelInfo", serviceModelInfo)
-               } catch (Exception ex) {
-                       // try error in method block
-                       String exceptionMessage = "Bpmn error encountered in CreateGenericALaCarteServiceInstance flow. Unexpected Error from method prepareDecomposeService() - " + ex.getMessage()
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
-               }
-               msoLogger.trace("Completed prepareDecomposeService of CreateGenericALaCarteServiceInstance")
-        }
-        
-        
-        // *******************************
-        //
-        // *******************************
-        public void prepareCreateServiceInstance(DelegateExecution execution) {
-                def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+    String Prefix="CRESI_"
+    ExceptionUtil exceptionUtil = new ExceptionUtil()
+    JsonUtils jsonUtil = new JsonUtils()
+    private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, CreateGenericALaCarteServiceInstance.class);
+
+    public void preProcessRequest (DelegateExecution execution) {
+        def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+        execution.setVariable("prefix",Prefix)
+        String msg = ""
+
+        try {
+
+            String siRequest = execution.getVariable("bpmnRequest")
+            msoLogger.debug(siRequest)
+
+            String requestId = execution.getVariable("mso-request-id")
+            execution.setVariable("msoRequestId", requestId)
+            msoLogger.debug("Input Request:" + siRequest + " reqId:" + requestId)
+
+            String serviceInstanceId = execution.getVariable("serviceInstanceId")
+            if (isBlank(serviceInstanceId)) {
+                serviceInstanceId = UUID.randomUUID().toString()
+                msoLogger.debug("Generated new Service Instance ID:" + serviceInstanceId)
+            } else {
+                msoLogger.debug("Using provided Service Instance ID:" + serviceInstanceId)
+            }
+
+            serviceInstanceId = UriUtils.encode(serviceInstanceId,"UTF-8")
+            execution.setVariable("serviceInstanceId", serviceInstanceId)
+
+            //subscriberInfo
+            String globalSubscriberId = jsonUtil.getJsonValue(siRequest, "requestDetails.subscriberInfo.globalSubscriberId")
+            if (isBlank(globalSubscriberId)) {
+                msg = "Input globalSubscriberId' is null"
+                exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+            } else {
+                execution.setVariable("globalSubscriberId", globalSubscriberId)
+            }
+
+            //requestInfo
+            execution.setVariable("source", jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.source"))
+            execution.setVariable("serviceInstanceName", jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.instanceName"))
+            execution.setVariable("disableRollback", jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.suppressRollback"))
+            String productFamilyId = null;
+            try {
+                productFamilyId = jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.productFamilyId")
+            } catch (JSONException e) {
+                productFamilyId = null;
+            }
+            if (isBlank(productFamilyId))
+            {
+                msg = "Input productFamilyId is null"
+                msoLogger.debug(msg)
+                //exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+            } else {
+                execution.setVariable("productFamilyId", productFamilyId)
+            }
+
+            //modelInfo
+            String serviceModelInfo = jsonUtil.getJsonValue(siRequest, "requestDetails.modelInfo")
+            if (isBlank(serviceModelInfo)) {
+                msg = "Input serviceModelInfo is null"
+                msoLogger.debug(msg)
+                exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+            } else
+            {
+                execution.setVariable("serviceModelInfo", serviceModelInfo)
+            }
+
+            msoLogger.debug("modelInfo" + serviceModelInfo)
+
+            //requestParameters
+            String subscriptionServiceType = jsonUtil.getJsonValue(siRequest, "requestDetails.requestParameters.subscriptionServiceType")
+            if (isBlank(subscriptionServiceType)) {
+                msg = "Input subscriptionServiceType is null"
+                msoLogger.debug(msg)
+                exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+            } else {
+                execution.setVariable("subscriptionServiceType", subscriptionServiceType)
+            }
+
+
+            /*
+             * Extracting User Parameters from incoming Request and converting into a Map
+             */
+            def jsonSlurper = new JsonSlurper()
+            def jsonOutput = new JsonOutput()
+
+            Map reqMap = jsonSlurper.parseText(siRequest)
+
+            //InputParams
+            def userParams = reqMap.requestDetails?.requestParameters?.userParams
+
+            Map<String, String> inputMap = [:]
+            if (userParams) {
+                userParams.each {
+                    userParam -> inputMap.put(userParam.name, userParam.value.toString())
+                }
+            }
+
+            msoLogger.debug("User Input Parameters map: " + userParams.toString())
+            execution.setVariable("serviceInputParams", inputMap)
+
+            //TODO
+            //execution.setVariable("failExists", true)
+
+        } catch (BpmnError e) {
+            throw e;
+        } catch (Exception ex){
+            msg = "Exception in preProcessRequest " + ex.getMessage()
+            msoLogger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+        msoLogger.trace("Exit preProcessRequest")
+    }
+
+    public void sendSyncResponse (DelegateExecution execution) {
+        def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+        msoLogger.trace("Start sendSyncResponse")
+
+        try {
+            String requestId = execution.getVariable("msoRequestId")
+            String serviceInstanceId = execution.getVariable("serviceInstanceId")
+            // RESTResponse for API Handler (APIH) Reply Task
+            String createServiceRestRequest = """{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim()
+            msoLogger.debug(" sendSyncResponse to APIH:" + "\n" + createServiceRestRequest)
+            sendWorkflowResponse(execution, 202, createServiceRestRequest)
+            execution.setVariable("sentSyncResponse", true)
+
+        } catch (Exception ex) {
+            String msg = "Exceptuion in sendSyncResponse:" + ex.getMessage()
+            msoLogger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+        msoLogger.trace("Exit sendSyncResopnse")
+    }
+
+
+    public void sendSyncError (DelegateExecution execution) {
+        def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+        msoLogger.trace("Start sendSyncError")
+
+        try {
+            String errorMessage = ""
+            if (execution.getVariable("WorkflowException") instanceof WorkflowException) {
+                WorkflowException wfe = execution.getVariable("WorkflowException")
+                errorMessage = wfe.getErrorMessage()
+            } else {
+                errorMessage = "Sending Sync Error."
+            }
+
+            String buildworkflowException =
+                    """<aetgt:WorkflowException xmlns:aetgt="http://org.onap/so/workflow/schema/v1">
+                    <aetgt:ErrorMessage>${MsoUtils.xmlEscape(errorMessage)}</aetgt:ErrorMessage>
+                    <aetgt:ErrorCode>7000</aetgt:ErrorCode>
+                   </aetgt:WorkflowException>"""
+
+            msoLogger.debug(buildworkflowException)
+            sendWorkflowResponse(execution, 500, buildworkflowException)
+
+        } catch (Exception ex) {
+            msoLogger.debug(" Sending Sync Error Activity Failed. " + "\n" + ex.getMessage())
+        }
+
+    }
+
+    // *******************************
+    //
+    // *******************************
+    public void prepareDecomposeService(DelegateExecution execution) {
+        def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+        msoLogger.trace("Inside prepareDecomposeService of CreateGenericALaCarteServiceInstance ")
+        try {
+            String siRequest = execution.getVariable("bpmnRequest")
+            String serviceModelInfo = jsonUtil.getJsonValue(siRequest, "requestDetails.modelInfo")
+            execution.setVariable("serviceModelInfo", serviceModelInfo)
+        } catch (Exception ex) {
+            // try error in method block
+            String exceptionMessage = "Bpmn error encountered in CreateGenericALaCarteServiceInstance flow. Unexpected Error from method prepareDecomposeService() - " + ex.getMessage()
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+        msoLogger.trace("Completed prepareDecomposeService of CreateGenericALaCarteServiceInstance")
+     }
+
+    public void processDecomposition(DelegateExecution execution) {
+        def isDebugEnabled = execution.getVariable(DebugFlag)
+
+        msoLogger.trace("Inside processDecomposition() of CreateGenericALaCarteServiceInstance  ")
+
+        try {
+
+            ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+
+            // VNFs
+            List<VnfResource> vnfList = serviceDecomposition.getVnfResources()
+            filterVnfs(vnfList)
+            serviceDecomposition.setVnfResources(vnfList)
+
+            execution.setVariable("vnfList", vnfList)
+            execution.setVariable("vnfListString", vnfList.toString())
+
+            String vnfModelInfoString = ""
+            if (vnfList != null && vnfList.size() > 0) {
+                execution.setVariable(Prefix + "VNFsCount", vnfList.size())
+                msoLogger.debug("vnfs to create: " + vnfList.size())
+                ModelInfo vnfModelInfo = vnfList[0].getModelInfo()
+
+                vnfModelInfoString = vnfModelInfo.toString()
+                String vnfModelInfoWithRoot = vnfModelInfo.toString()
+                vnfModelInfoString = jsonUtil.getJsonValue(vnfModelInfoWithRoot, "modelInfo")
+            } else {
+                execution.setVariable(Prefix + "VNFsCount", 0)
+                msoLogger.debug("no vnfs to create based upon serviceDecomposition content")
+            }
+
+            execution.setVariable("vnfModelInfo", vnfModelInfoString)
+            execution.setVariable("vnfModelInfoString", vnfModelInfoString)
+            msoLogger.debug(" vnfModelInfoString :" + vnfModelInfoString)
+
+            msoLogger.trace("Completed processDecomposition() of CreateGenericALaCarteServiceInstance ")
+        } catch (Exception ex) {
+            sendSyncError(execution)
+            String exceptionMessage = "Bpmn error encountered in CreateGenericALaCarteServiceInstance flow. processDecomposition() - " + ex.getMessage()
+            msoLogger.debug(exceptionMessage)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+    }
+
+     // *******************************
+     //
+     // *******************************
+     public void prepareCreateServiceInstance(DelegateExecution execution) {
+         def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
  
-                try {
-                        msoLogger.trace("Inside prepareCreateServiceInstance of CreateGenericALaCarteServiceInstance")
+         try {
+             msoLogger.trace("Inside prepareCreateServiceInstance of CreateGenericALaCarteServiceInstance")
  
-                        /*
-                         * Extracting User Parameters from incoming Request and converting into a Map
-                         */
-                        def jsonSlurper = new JsonSlurper()
-                        def jsonOutput = new JsonOutput()
-                        def siRequest = execution.getVariable("bpmnRequest")
-                        Map reqMap = jsonSlurper.parseText(siRequest)
-                        //InputParams
-                        def userParams = reqMap.requestDetails?.requestParameters?.userParams
-                        Map<String, String> inputMap = [:]
-                        if (userParams != null) {
-                                userParams.each {
-                                        userParam -> inputMap.put(userParam.name, userParam.value)
-                                }
-                        }
-                        
-                        msoLogger.debug("User Input Parameters map: " + userParams.toString())
-                        execution.setVariable("serviceInputParams", inputMap)
-                        
-                        ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
-                       
-                        String serviceInstanceId = execution.getVariable("serviceInstanceId")
-                        serviceDecomposition.getServiceInstance().setInstanceId(serviceInstanceId)
-                        
-                        String serviceInstanceName = jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.instanceName")
-                        serviceDecomposition.getServiceInstance().setInstanceName(serviceInstanceName)
-                        execution.setVariable("serviceInstanceName", serviceInstanceName)
-                        execution.setVariable("serviceDecomposition", serviceDecomposition)
-                        execution.setVariable("serviceDecompositionString", serviceDecomposition.toJsonString())
-                        msoLogger.debug("serviceDecomposition.serviceInstanceName: " + serviceDecomposition.getServiceInstance().getInstanceName())
-                                                
-                        msoLogger.trace("Completed prepareCreateServiceInstance of CreateGenericALaCarteServiceInstance ***** ")
-                } catch (Exception ex) {
-                        // try error in method block
-                        String exceptionMessage = "Bpmn error encountered in CreateGenericALaCarteServiceInstance flow. Unexpected Error from method prepareCreateServiceInstance() - " + ex.getMessage()
-                        exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
-                }
-         }
-         
-         
-       public void prepareCompletionRequest (DelegateExecution execution) {
-               def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-               msoLogger.trace("prepareCompletion *** ")
-
-               try {
-                       String requestId = execution.getVariable("msoRequestId")
-                       String serviceInstanceId = execution.getVariable("serviceInstanceId")
-                       String source = execution.getVariable("source")
-                       
-                       String msoCompletionRequest =
-                                       """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
-                                                               xmlns:ns="http://org.onap/so/request/types/v1">
-                                               <request-info xmlns="http://org.onap/so/infra/vnf-request/v1">
-                                                       <request-id>${MsoUtils.xmlEscape(requestId)}</request-id>
-                                                       <action>CREATE</action>
-                                                       <source>${MsoUtils.xmlEscape(source)}</source>
-                                               </request-info>
-                                               <status-message>Service Instance was created successfully.</status-message>
-                                               <serviceInstanceId>${MsoUtils.xmlEscape(serviceInstanceId)}</serviceInstanceId>
-                                               <mso-bpel-name>CreateGenericALaCarteServiceInstance</mso-bpel-name>
-                                       </aetgt:MsoCompletionRequest>"""
-
-                       // Format Response
-                       String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest)
-
-                       execution.setVariable("completionRequest", xmlMsoCompletionRequest)
-                       msoLogger.debug(" Overall SUCCESS Response going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest)
-
-               } catch (Exception ex) {
-                       String msg = " Exception in prepareCompletion:" + ex.getMessage()
-                       msoLogger.debug(msg)
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-               }
-               msoLogger.trace("Exit prepareCompletionRequest")
-       }
-
-       public void prepareFalloutRequest(DelegateExecution execution){
-               def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-               msoLogger.trace("prepareFalloutRequest")
-
-               try {
-                       WorkflowException wfex = execution.getVariable("WorkflowException")
-                       msoLogger.debug(" Input Workflow Exception: " + wfex.toString())
-                       String requestId = execution.getVariable("msoRequestId")
-                       String source = execution.getVariable("source")
-                       String requestInfo =
-                                       """<request-info xmlns="http://org.onap/so/infra/vnf-request/v1">
-                                       <request-id>${MsoUtils.xmlEscape(requestId)}</request-id>
-                                       <action>CREATE</action>
-                                       <source>${MsoUtils.xmlEscape(source)}</source>
-                                  </request-info>"""
-
-                       String falloutRequest = exceptionUtil.processMainflowsBPMNException(execution, requestInfo)
-                       execution.setVariable("falloutRequest", falloutRequest)
-               } catch (Exception ex) {
-                       msoLogger.debug("Exception prepareFalloutRequest:" + ex.getMessage())
-                       String errorException = "  Bpmn error encountered in CreateGenericALaCarteServiceInstance flow. FalloutHandlerRequest,  buildErrorResponse() - " + ex.getMessage()
-                       String requestId = execution.getVariable("msoRequestId")
-                       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>${MsoUtils.xmlEscape(requestId)}</request-id>
-                                             <action>CREATE</action>
-                                             <source>VID</source>
-                                          </request-info>
-                                               <aetgt:WorkflowException xmlns:aetgt="http://org.onap/so/workflow/schema/v1">
-                                                       <aetgt:ErrorMessage>${MsoUtils.xmlEscape(errorException)}</aetgt:ErrorMessage>
-                                                       <aetgt:ErrorCode>7000</aetgt:ErrorCode>
-                                               </aetgt:WorkflowException>
-                                       </aetgt:FalloutHandlerRequest>"""
-
-                       execution.setVariable("falloutRequest", falloutRequest)
-               }
-               msoLogger.trace("Exit prepareFalloutRequest")
-       }
+             /*
+              * Extracting User Parameters from incoming Request and converting into a Map
+              */
+             def jsonSlurper = new JsonSlurper()
+             def jsonOutput = new JsonOutput()
+             def siRequest = execution.getVariable("bpmnRequest")
+             Map reqMap = jsonSlurper.parseText(siRequest)
+             //InputParams
+             def userParams = reqMap.requestDetails?.requestParameters?.userParams
+             Map<String, String> inputMap = [:]
+             if (userParams != null) {
+                 userParams.each {
+                     userParam -> inputMap.put(userParam.name, userParam.value)
+                 }
+             }
+
+             msoLogger.debug("User Input Parameters map: " + userParams.toString())
+             execution.setVariable("serviceInputParams", inputMap)
+
+             ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+
+             String serviceInstanceId = execution.getVariable("serviceInstanceId")
+             serviceDecomposition.getServiceInstance().setInstanceId(serviceInstanceId)
+
+             String serviceInstanceName = jsonUtil.getJsonValue(siRequest, "requestDetails.requestInfo.instanceName")
+             serviceDecomposition.getServiceInstance().setInstanceName(serviceInstanceName)
+             execution.setVariable("serviceInstanceName", serviceInstanceName)
+             execution.setVariable("serviceDecomposition", serviceDecomposition)
+             execution.setVariable("serviceDecompositionString", serviceDecomposition.toJsonString())
+             msoLogger.debug("serviceDecomposition.serviceInstanceName: " + serviceDecomposition.getServiceInstance().getInstanceName())
+
+             msoLogger.trace("Completed prepareCreateServiceInstance of CreateGenericALaCarteServiceInstance ***** ")
+         } catch (Exception ex) {
+             // try error in method block
+             String exceptionMessage = "Bpmn error encountered in CreateGenericALaCarteServiceInstance flow. Unexpected Error from method prepareCreateServiceInstance() - " + ex.getMessage()
+             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+         }
+      }
+
+
+    public void prepareCompletionRequest (DelegateExecution execution) {
+        def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+        msoLogger.trace("prepareCompletion *** ")
+
+        try {
+            String requestId = execution.getVariable("msoRequestId")
+            String serviceInstanceId = execution.getVariable("serviceInstanceId")
+            String source = execution.getVariable("source")
+
+            String msoCompletionRequest =
+                    """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
+                                xmlns:ns="http://org.onap/so/request/types/v1">
+                        <request-info xmlns="http://org.onap/so/infra/vnf-request/v1">
+                            <request-id>${MsoUtils.xmlEscape(requestId)}</request-id>
+                            <action>CREATE</action>
+                            <source>${MsoUtils.xmlEscape(source)}</source>
+                        </request-info>
+                        <status-message>Service Instance was created successfully.</status-message>
+                        <serviceInstanceId>${MsoUtils.xmlEscape(serviceInstanceId)}</serviceInstanceId>
+                        <mso-bpel-name>CreateGenericALaCarteServiceInstance</mso-bpel-name>
+                    </aetgt:MsoCompletionRequest>"""
+
+            // Format Response
+            String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest)
+
+            execution.setVariable("completionRequest", xmlMsoCompletionRequest)
+            msoLogger.debug(" Overall SUCCESS Response going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest)
+
+        } catch (Exception ex) {
+            String msg = " Exception in prepareCompletion:" + ex.getMessage()
+            msoLogger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+        msoLogger.trace("Exit prepareCompletionRequest")
+    }
+
+    public void prepareFalloutRequest(DelegateExecution execution){
+        def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+        msoLogger.trace("prepareFalloutRequest")
+
+        try {
+            WorkflowException wfex = execution.getVariable("WorkflowException")
+            msoLogger.debug(" Input Workflow Exception: " + wfex.toString())
+            String requestId = execution.getVariable("msoRequestId")
+            String source = execution.getVariable("source")
+            String requestInfo =
+                    """<request-info xmlns="http://org.onap/so/infra/vnf-request/v1">
+                    <request-id>${MsoUtils.xmlEscape(requestId)}</request-id>
+                    <action>CREATE</action>
+                    <source>${MsoUtils.xmlEscape(source)}</source>
+                   </request-info>"""
+
+            String falloutRequest = exceptionUtil.processMainflowsBPMNException(execution, requestInfo)
+            execution.setVariable("falloutRequest", falloutRequest)
+        } catch (Exception ex) {
+            msoLogger.debug("Exception prepareFalloutRequest:" + ex.getMessage())
+            String errorException = "  Bpmn error encountered in CreateGenericALaCarteServiceInstance flow. FalloutHandlerRequest,  buildErrorResponse() - " + ex.getMessage()
+            String requestId = execution.getVariable("msoRequestId")
+            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>${MsoUtils.xmlEscape(requestId)}</request-id>
+                          <action>CREATE</action>
+                          <source>VID</source>
+                       </request-info>
+                        <aetgt:WorkflowException xmlns:aetgt="http://org.onap/so/workflow/schema/v1">
+                            <aetgt:ErrorMessage>${MsoUtils.xmlEscape(errorException)}</aetgt:ErrorMessage>
+                            <aetgt:ErrorCode>7000</aetgt:ErrorCode>
+                        </aetgt:WorkflowException>
+                    </aetgt:FalloutHandlerRequest>"""
+
+            execution.setVariable("falloutRequest", falloutRequest)
+        }
+        msoLogger.trace("Exit prepareFalloutRequest")
+    }
 }
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 50e65dc..9e20497
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.7.1" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="CreateGenericALaCarteServiceInstance" name="CreateGenericALaCarteServiceInstance" isExecutable="true">
     <bpmn2:startEvent id="createSI_startEvent" name="Create SI Start Flow">
       <bpmn2:outgoing>SequenceFlow_0lp2z7l</bpmn2:outgoing>
@@ -39,7 +39,7 @@ ex.processJavaException(execution)]]></bpmn2:script>
         <camunda:in source="serviceDecomposition" target="serviceDecomposition" />
         <camunda:in source="bpmnRequest" target="requestJson" />
       </bpmn2:extensionElements>
-      <bpmn2:incoming>SequenceFlow_1hjh5zy</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_1fv5tk6</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_1lj31zp</bpmn2:outgoing>
     </bpmn2:callActivity>
     <bpmn2:endEvent id="EndEvent_0o440av" name="End">
@@ -174,17 +174,62 @@ csi.prepareDecomposeService(execution)]]></bpmn2:script>
       <bpmn2:outgoing>SequenceFlow_1o3ihrh</bpmn2:outgoing>
     </bpmn2:callActivity>
     <bpmn2:scriptTask id="ScriptTask_04zaa1o" name="Prepare&#10;Create&#10;Service&#10;" scriptFormat="groovy">
-      <bpmn2:incoming>SequenceFlow_1o3ihrh</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_14ajbme</bpmn2:outgoing>
+      <bpmn2:incoming>SequenceFlow_1hjh5zy</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1fv5tk6</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def csi= new CreateGenericALaCarteServiceInstance()
 csi.prepareCreateServiceInstance(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_0xhu1k3" sourceRef="ScriptTask_1vr3ks5" targetRef="CallActivity_1oc1h9q" />
-    <bpmn2:sequenceFlow id="SequenceFlow_1o3ihrh" sourceRef="CallActivity_1oc1h9q" targetRef="ScriptTask_04zaa1o" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1o3ihrh" sourceRef="CallActivity_1oc1h9q" targetRef="ExclusiveGateway_0h0cq5k" />
     <bpmn2:sequenceFlow id="SequenceFlow_1tfe975" sourceRef="IntermediateCatchEvent_00tv706" targetRef="ScriptTask_1vr3ks5" />
-    <bpmn2:sequenceFlow id="SequenceFlow_14ajbme" sourceRef="ScriptTask_04zaa1o" targetRef="IntermediateThrowEvent_1tbopzu" />
-    <bpmn2:sequenceFlow id="SequenceFlow_1hjh5zy" sourceRef="IntermediateCatchEvent_1aouco1" targetRef="doCreateServiceInstance_CallActivity" />
+    <bpmn2:sequenceFlow id="SequenceFlow_14ajbme" sourceRef="CallActivity_1y1p4bd" targetRef="IntermediateThrowEvent_1tbopzu" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1hjh5zy" sourceRef="IntermediateCatchEvent_1aouco1" targetRef="ScriptTask_04zaa1o" />
+    <bpmn2:callActivity id="CallActivity_1y1p4bd" name="Call Homing Service" camunda:modelerTemplate="homingBlock" calledElement="Homing">
+      <bpmn2:extensionElements>
+        <camunda:in source="true" target="isDebugLogEnabled" />
+        <camunda:in source="null" target="timeout" />
+        <camunda:out source="serviceDecomposition" target="serviceDecomposition" />
+        <camunda:out source="rolledBack" target="rolledBack" />
+        <camunda:out source="rollbackData" target="rollbackData" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:in source="msoRequestId" target="msoRequestId" />
+        <camunda:in source="serviceInstanceId" target="serviceInstanceId" />
+        <camunda:in source="serviceDecomposition" target="serviceDecomposition" />
+        <camunda:in source="subscriberInfo" target="subscriberInfo" />
+        <camunda:in source="homingService" target="homingService" />
+        <camunda:in source="customerLocation" target="customerLocation" />
+        <camunda:in source="cloudOwner" target="cloudOwner" />
+        <camunda:in source="cloudRegionId" target="cloudRegionId" />
+        <camunda:in source="serviceInstanceName" target="serviceInstanceName" />
+        <camunda:in source="homingModelIds" target="homingModelIds" />
+        <camunda:in source="subscriptionServiceType" target="subscriptionServiceType" />
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>SequenceFlow_0bng27u</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_14ajbme</bpmn2:outgoing>
+    </bpmn2:callActivity>
+    <bpmn2:scriptTask id="ScriptTask_1imcb54" name="PostProcess&#10;Decompose&#10;Service&#10;" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_0vcumrm</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0bng27u</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def csi= new CreateGenericALaCarteServiceInstance()
+csi.processDecomposition(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_0bng27u" sourceRef="ScriptTask_1imcb54" targetRef="CallActivity_1y1p4bd" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1fv5tk6" sourceRef="ScriptTask_04zaa1o" targetRef="doCreateServiceInstance_CallActivity" />
+    <bpmn2:exclusiveGateway id="ExclusiveGateway_0h0cq5k" name="Home Service?">
+      <bpmn2:incoming>SequenceFlow_1o3ihrh</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0vcumrm</bpmn2:outgoing>
+      <bpmn2:outgoing>SequenceFlow_0xrox26</bpmn2:outgoing>
+    </bpmn2:exclusiveGateway>
+    <bpmn2:sequenceFlow id="SequenceFlow_0vcumrm" sourceRef="ExclusiveGateway_0h0cq5k" targetRef="ScriptTask_1imcb54">
+      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{execution.getVariable("homingService") == "oof"}]]></bpmn2:conditionExpression>
+    </bpmn2:sequenceFlow>
+    <bpmn2:intermediateThrowEvent id="IntermediateThrowEvent_0hhmvlw" name="GoToCreateSI">
+      <bpmn2:incoming>SequenceFlow_0xrox26</bpmn2:incoming>
+      <bpmn2:linkEventDefinition name="CreateSI" />
+    </bpmn2:intermediateThrowEvent>
+    <bpmn2:sequenceFlow id="SequenceFlow_0xrox26" sourceRef="ExclusiveGateway_0h0cq5k" targetRef="IntermediateThrowEvent_0hhmvlw" />
   </bpmn2:process>
   <bpmn2:error id="Error_2" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmn2:error id="Error_1" name="java.lang.Exception" errorCode="java.lang.Exception" />
@@ -229,19 +274,19 @@ csi.prepareCreateServiceInstance(execution)]]></bpmn2:script>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="_BPMNShape_CallActivity_72" bpmnElement="doCreateServiceInstance_CallActivity">
-        <dc:Bounds x="112" y="452" width="100" height="80" />
+        <dc:Bounds x="321" y="452" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_0o440av_di" bpmnElement="EndEvent_0o440av">
-        <dc:Bounds x="852" y="474" width="36" height="36" />
+        <dc:Bounds x="1004" y="474" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="863" y="510" width="20" height="14" />
+          <dc:Bounds x="1015" y="510" width="20" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1lj31zp_di" bpmnElement="SequenceFlow_1lj31zp">
-        <di:waypoint xsi:type="dc:Point" x="212" y="492" />
-        <di:waypoint xsi:type="dc:Point" x="314" y="492" />
+        <di:waypoint xsi:type="dc:Point" x="421" y="492" />
+        <di:waypoint xsi:type="dc:Point" x="500" y="492" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="263" y="477" width="0" height="0" />
+          <dc:Bounds x="415.5" y="477" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0pvcr6j_di" bpmnElement="ScriptTask_0pvcr6j">
@@ -255,16 +300,16 @@ csi.prepareCreateServiceInstance(execution)]]></bpmn2:script>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0cihgpv_di" bpmnElement="ScriptTask_0cihgpv">
-        <dc:Bounds x="449" y="452" width="100" height="80" />
+        <dc:Bounds x="637" y="452" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_0sevgre_di" bpmnElement="CallActivity_0sevgre">
-        <dc:Bounds x="637" y="452" width="100" height="80" />
+        <dc:Bounds x="820" y="452" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0xxvjxq_di" bpmnElement="SequenceFlow_0xxvjxq">
-        <di:waypoint xsi:type="dc:Point" x="549" y="492" />
-        <di:waypoint xsi:type="dc:Point" x="637" y="492" />
+        <di:waypoint xsi:type="dc:Point" x="737" y="492" />
+        <di:waypoint xsi:type="dc:Point" x="820" y="492" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="593" y="477" width="0" height="0" />
+          <dc:Bounds x="733.5" y="477" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_1hql91g_di" bpmnElement="ScriptTask_1hql91g">
@@ -303,10 +348,10 @@ csi.prepareCreateServiceInstance(execution)]]></bpmn2:script>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_095crcd_di" bpmnElement="SequenceFlow_095crcd">
-        <di:waypoint xsi:type="dc:Point" x="737" y="492" />
-        <di:waypoint xsi:type="dc:Point" x="852" y="492" />
+        <di:waypoint xsi:type="dc:Point" x="920" y="492" />
+        <di:waypoint xsi:type="dc:Point" x="1004" y="492" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="795" y="477" width="0" height="0" />
+          <dc:Bounds x="917" y="477" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0n4umjf_di" bpmnElement="SequenceFlow_0n4umjf">
@@ -341,33 +386,31 @@ csi.prepareCreateServiceInstance(execution)]]></bpmn2:script>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ExclusiveGateway_1x5i9c1_di" bpmnElement="ExclusiveGateway_1x5i9c1" isMarkerVisible="true">
-        <dc:Bounds x="314" y="467" width="50" height="50" />
+        <dc:Bounds x="500" y="467" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="314" y="439" width="50" height="14" />
+          <dc:Bounds x="501" y="439" width="49" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_143akoz_di" bpmnElement="EndEvent_143akoz">
-        <dc:Bounds x="321" y="580" width="36" height="36" />
+        <dc:Bounds x="507" y="580" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="417" y="965" width="0" height="0" />
+          <dc:Bounds x="558" y="965" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1o4wwba_di" bpmnElement="SequenceFlow_1o4wwba">
-        <di:waypoint xsi:type="dc:Point" x="364" y="492" />
-        <di:waypoint xsi:type="dc:Point" x="401" y="492" />
-        <di:waypoint xsi:type="dc:Point" x="401" y="492" />
-        <di:waypoint xsi:type="dc:Point" x="449" y="492" />
+        <di:waypoint xsi:type="dc:Point" x="550" y="492" />
+        <di:waypoint xsi:type="dc:Point" x="637" y="492" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="399" y="489" width="18" height="14" />
+          <dc:Bounds x="554.09375" y="489" width="19" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1mdnv3l_di" bpmnElement="SequenceFlow_1mdnv3l">
-        <di:waypoint xsi:type="dc:Point" x="339" y="517" />
-        <di:waypoint xsi:type="dc:Point" x="339" y="544" />
-        <di:waypoint xsi:type="dc:Point" x="339" y="544" />
-        <di:waypoint xsi:type="dc:Point" x="339" y="580" />
+        <di:waypoint xsi:type="dc:Point" x="525" y="517" />
+        <di:waypoint xsi:type="dc:Point" x="525" y="549" />
+        <di:waypoint xsi:type="dc:Point" x="525" y="549" />
+        <di:waypoint xsi:type="dc:Point" x="525" y="580" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="313" y="522" width="12" height="14" />
+          <dc:Bounds x="514" y="524.0370370370371" width="13" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_0y5991s_di" bpmnElement="IntermediateThrowEvent_0y5991s">
@@ -396,9 +439,9 @@ csi.prepareCreateServiceInstance(execution)]]></bpmn2:script>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_1tbopzu_di" bpmnElement="IntermediateThrowEvent_1tbopzu">
-        <dc:Bounds x="852" y="272" width="36" height="36" />
+        <dc:Bounds x="1004" y="272" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="835" y="313" width="70" height="12" />
+          <dc:Bounds x="986" y="313" width="72" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1vr3ks5_di" bpmnElement="ScriptTask_1vr3ks5">
@@ -408,7 +451,7 @@ csi.prepareCreateServiceInstance(execution)]]></bpmn2:script>
         <dc:Bounds x="342" y="250" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_04zaa1o_di" bpmnElement="ScriptTask_04zaa1o">
-        <dc:Bounds x="555" y="250" width="100" height="80" />
+        <dc:Bounds x="112" y="452" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0xhu1k3_di" bpmnElement="SequenceFlow_0xhu1k3">
         <di:waypoint xsi:type="dc:Point" x="212" y="290" />
@@ -419,9 +462,9 @@ csi.prepareCreateServiceInstance(execution)]]></bpmn2:script>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1o3ihrh_di" bpmnElement="SequenceFlow_1o3ihrh">
         <di:waypoint xsi:type="dc:Point" x="442" y="290" />
-        <di:waypoint xsi:type="dc:Point" x="555" y="290" />
+        <di:waypoint xsi:type="dc:Point" x="500" y="290" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="499" y="275" width="0" height="0" />
+          <dc:Bounds x="426" y="275" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1tfe975_di" bpmnElement="SequenceFlow_1tfe975">
@@ -434,17 +477,63 @@ csi.prepareCreateServiceInstance(execution)]]></bpmn2:script>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_14ajbme_di" bpmnElement="SequenceFlow_14ajbme">
-        <di:waypoint xsi:type="dc:Point" x="655" y="290" />
-        <di:waypoint xsi:type="dc:Point" x="852" y="290" />
+        <di:waypoint xsi:type="dc:Point" x="930" y="290" />
+        <di:waypoint xsi:type="dc:Point" x="1004" y="290" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="754" y="265" width="0" height="0" />
+          <dc:Bounds x="922" y="275" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1hjh5zy_di" bpmnElement="SequenceFlow_1hjh5zy">
         <di:waypoint xsi:type="dc:Point" x="30" y="492" />
         <di:waypoint xsi:type="dc:Point" x="112" y="492" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="71" y="467" width="0" height="0" />
+          <dc:Bounds x="26" y="477" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="CallActivity_1y1p4bd_di" bpmnElement="CallActivity_1y1p4bd">
+        <dc:Bounds x="830" y="250" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_1imcb54_di" bpmnElement="ScriptTask_1imcb54">
+        <dc:Bounds x="637" y="250" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0bng27u_di" bpmnElement="SequenceFlow_0bng27u">
+        <di:waypoint xsi:type="dc:Point" x="737" y="290" />
+        <di:waypoint xsi:type="dc:Point" x="830" y="290" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="783.5" y="269" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1fv5tk6_di" bpmnElement="SequenceFlow_1fv5tk6">
+        <di:waypoint xsi:type="dc:Point" x="212" y="492" />
+        <di:waypoint xsi:type="dc:Point" x="321" y="492" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="266.5" y="471" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ExclusiveGateway_0h0cq5k_di" bpmnElement="ExclusiveGateway_0h0cq5k" isMarkerVisible="true">
+        <dc:Bounds x="499.52351097178683" y="265" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="488" y="319" width="77" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0vcumrm_di" bpmnElement="SequenceFlow_0vcumrm">
+        <di:waypoint xsi:type="dc:Point" x="550" y="290" />
+        <di:waypoint xsi:type="dc:Point" x="637" y="290" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="593.5" y="269" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_0hhmvlw_di" bpmnElement="IntermediateThrowEvent_0hhmvlw">
+        <dc:Bounds x="507" y="342" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="489" y="383" width="72" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0xrox26_di" bpmnElement="SequenceFlow_0xrox26">
+        <di:waypoint xsi:type="dc:Point" x="525" y="315" />
+        <di:waypoint xsi:type="dc:Point" x="525" y="342" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="540" y="322.5" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>