Implemented OOF call in TN NSSMF for allocate flow 00/127500/5
authorsr20255772 <sravya.sherla@wipro.com>
Fri, 4 Mar 2022 05:16:45 +0000 (05:16 +0000)
committersr20255772 <sravya.sherla@wipro.com>
Mon, 14 Mar 2022 08:55:42 +0000 (08:55 +0000)
Issue-ID: SO-3866
Change-Id: I40f55a4cbd2c886a98cc7fefa49ddd478a4a1cca
Signed-off-by: sr20255772 <sravya.sherla@wipro.com>
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy
bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateTnNssiTest.groovy
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateTransportNSSI.bpmn

index 09bbb81..b1436d5 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.scripts
 
+import com.fasterxml.jackson.core.type.TypeReference
 import com.fasterxml.jackson.databind.ObjectMapper
+import org.json.JSONArray
 import com.google.gson.JsonArray
+import com.google.gson.GsonBuilder
 import com.google.gson.JsonObject
+import com.google.gson.JsonParser
 import groovy.json.JsonSlurper
+import org.onap.so.bpmn.common.scripts.OofUtils
+import com.google.gson.Gson
 import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
 import org.onap.aai.domain.yang.ServiceInstance
@@ -53,6 +59,7 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
     RequestDBUtil requestDBUtil = new RequestDBUtil()
     JsonSlurper jsonSlurper = new JsonSlurper()
     ObjectMapper objectMapper = new ObjectMapper()
+    OofUtils oofUtils = new OofUtils()
     TnNssmfUtils tnNssmfUtils = new TnNssmfUtils()
     private static final Logger logger = LoggerFactory.getLogger(TnAllocateNssi.class)
 
@@ -96,7 +103,8 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
                 msg = "Input sliceProfile is null"
                 logger.debug(msg)
                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-            } else {
+            }
+            else {
                 execution.setVariable("sliceProfile", sliceProfile)
             }
 
@@ -105,7 +113,8 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
                 msg = "Input transportSliceNetworks is null"
                 logger.debug(msg)
                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-            } else {
+            }
+            else {
                 execution.setVariable("transportSliceNetworks", transportSliceNetworks)
             }
             logger.debug("transportSliceNetworks: " + transportSliceNetworks)
@@ -115,7 +124,8 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
                 msg = "Input nsiInfo is null"
                 logger.debug(msg)
                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
-            } else {
+            }
+            else {
                 execution.setVariable("nsiInfo", nsiInfoStr)
             }
 
@@ -123,6 +133,14 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
                     "enableSdnc", "enableSdnc"))) {
                 tnNssmfUtils.setEnableSdncConfig(execution)
             }
+
+            if (isBlank(additionalPropJsonStr) ||
+                    isBlank(tnNssmfUtils.setExecVarFromJsonIfExists(execution,
+                            additionalPropJsonStr,
+                            "enableOof", "enableOof"))) {
+                tnNssmfUtils.setEnableOofConfig(execution)
+            }
+
         } catch (BpmnError e) {
             throw e
         } catch (Exception ex) {
@@ -169,6 +187,7 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
         //TN NSST decomposition
         String tnModelVersion = tnNsstServiceDecomposition.getModelInfo().getModelVersion()
         String tnModelName = tnNsstServiceDecomposition.getModelInfo().getModelName()
+
         List<ServiceProxy> serviceProxyList = tnNsstServiceDecomposition.getServiceProxy()
         List<String> nsstInfoList = new ArrayList<>()
         for (ServiceProxy serviceProxy : serviceProxyList) {
@@ -188,7 +207,8 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
             String msg = "Exception in TN NSST processDecomposition. There is no NSST associated with TN NSST "
             logger.info(msg)
             //exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-        } else {
+        }
+        else {
             execution.setVariable("tnNsstInfoList", nsstInfoList)
             execution.setVariable("tnModelVersion", tnModelVersion)
             execution.setVariable("tnModelName", tnModelName)
@@ -196,6 +216,8 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
             execution.setVariable("maxIndex", maxIndex)
         }
 
+        execution.setVariable("tnNfSliceProfile", execution.getVariable("sliceProfile"))
+        execution.setVariable("tnModelName", tnModelName)
         logger.debug("End processDecomposition")
     }
 
@@ -205,90 +227,52 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
         String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
         logger.debug("get NSSI option OOF Url: " + urlString)
         //build oof request body
+
         String requestId = execution.getVariable("msoRequestId")
-        String messageType = "NSISelectionResponse"
-        Map<String, Object> profileInfo = objectMapper.readValue(execution.getVariable("sliceProfile"), Map.class)
+        String messageType = "NSSISelectionResponse"
+        Map<String, Object> profileInfo = (Map<String, Object>) objectMapper.readValue(execution.getVariable("tnNfSliceProfile"), Map.class)
         String modelUuid = execution.getVariable("modelUuid")
         String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
         String modelName = execution.getVariable("tnModelName")
         String timeout = UrnPropertiesReader.getVariable("mso.adapters.oof.timeout", execution);
-        List<String> nsstInfoList = objectMapper.readValue(execution.getVariable("nsstInfoList"), List.class)
-        JsonArray capabilitiesList = new JsonArray()
 
-        execution.setVariable("nssiSelection_Url", "/api/oof/selection/nsi/v1")
+        execution.setVariable("nssiSelection_Url", "/api/oof/selection/nssi/v1")
         execution.setVariable("nssiSelection_messageType", messageType)
         execution.setVariable("nssiSelection_correlator", requestId)
         execution.setVariable("nssiSelection_timeout", timeout)
-        String oofRequest = buildSelectTnNssiRequest(requestId, messageType, modelUuid, modelInvariantUuid,
-                modelName, profileInfo, nsstInfoList, capabilitiesList, false)
+        String oofRequest = oofUtils.buildSelectNSSIRequest(requestId, messageType, modelUuid, modelInvariantUuid, modelName, profileInfo)
         execution.setVariable("nssiSelection_oofRequest", oofRequest)
 
         logger.debug("Finish prepareOofSelection")
     }
 
-    String buildSelectTnNssiRequest(String requestId, String messageType, String UUID, String invariantUUID,
-                                    String name, Map<String, Object> profileInfo,
-                                    List<String> nsstInfoList, JsonArray capabilitiesList, Boolean preferReuse) {
-
-        def transactionId = requestId
-        logger.debug("transactionId is: " + transactionId)
-        String correlator = requestId
-        String callbackUrl = UrnPropertiesReader.getVariable("mso.adapters.oof.callback.endpoint") + "/" + messageType + "/" + correlator
-        ObjectMapper objectMapper = new ObjectMapper()
-        String profileJson = objectMapper.writeValueAsString(profileInfo)
-        String nsstInfoListString = objectMapper.writeValueAsString(nsstInfoList)
-        //Prepare requestInfo object
-        JsonObject requestInfo = new JsonObject()
-        requestInfo.addProperty("transactionId", transactionId)
-        requestInfo.addProperty("requestId", requestId)
-        requestInfo.addProperty("callbackUrl", callbackUrl)
-        requestInfo.addProperty("sourceId", "SO")
-        requestInfo.addProperty("timeout", 600)
-        requestInfo.addProperty("numSolutions", 1)
-
-        //Prepare serviceInfo object
-        JsonObject ranNsstInfo = new JsonObject()
-        ranNsstInfo.addProperty("UUID", UUID)
-        ranNsstInfo.addProperty("invariantUUID", invariantUUID)
-        ranNsstInfo.addProperty("name", name)
-
-        JsonObject json = new JsonObject()
-        json.add("requestInfo", requestInfo)
-        json.add("NSTInfo", ranNsstInfo)
-        json.addProperty("serviceProfile", profileJson)
-        json.addProperty("NSSTInfo", nsstInfoListString)
-        json.add("subnetCapabilities", capabilitiesList)
-        json.addProperty("preferReuse", preferReuse)
-
-        return json.toString()
-    }
-
     void processOofSelection(DelegateExecution execution) {
         logger.debug(Prefix + "processOofSelection method start")
         String oofResponse = execution.getVariable("nssiSelection_asyncCallbackResponse")
         String requestStatus = jsonUtil.getJsonValue(oofResponse, "requestStatus")
         if (requestStatus.equals("completed")) {
-            List<String> solution = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(oofResponse, "solutions"))
-            boolean existingNSI = jsonUtil.getJsonValue(solution.get(0), "existingNSI")
-            if (existingNSI) {
-                def sharedNSISolution = jsonUtil.getJsonValue(solution.get(0), "sharedNSISolution")
-                execution.setVariable("sharedTnNssiSolution", sharedNSISolution)
-                logger.debug("sharedTnNssiSolution from OOF " + sharedNSISolution)
-                String tnServiceInstanceId = jsonUtil.getJsonValue(solution.get(0), "sharedNSISolution.NSIId")
-                execution.setVariable("tnServiceInstanceId", tnServiceInstanceId)
-                org.onap.so.bpmn.core.domain.ServiceInstance serviceInstance = new org.onap.so.bpmn.core.domain.ServiceInstance();
-                serviceInstance.setInstanceId(tnServiceInstanceId);
-                ServiceDecomposition serviceDecomposition = execution.getVariable("tnNsstServiceDecomposition")
-                serviceDecomposition.setServiceInstance(serviceInstance);
-                execution.setVariable("tnNsstServiceDecomposition", serviceDecomposition)
+            String solutions = jsonUtil.getJsonValue(oofResponse, "solutions")
+            JsonParser parser = new JsonParser()
+            JsonArray solution = parser.parse(solutions) as JsonArray
+            if (solution.size() >= 1) {
+                JsonObject sol = solution.get(0) as JsonObject
+                String tnNfNssiId = sol.get("NSSIId").getAsString()
+                String invariantUuid = sol.get("invariantUUID").getAsString()
+                String uuid = sol.get("UUID").getAsString()
+                String nssiName = sol.get("NSSIName").getAsString()
+                execution.setVariable("TnServiceInstanceId", tnNfNssiId)
+                execution.setVariable("TNNFInvariantUUID", invariantUuid)
+                execution.setVariable("TNNFUUID", uuid)
+                execution.setVariable("servicename", nssiName)
+                logger.debug("TnServiceInstanceId from OOF " + tnNfNssiId)
                 execution.setVariable("isOofTnNssiSelected", true)
-            } else {
-                def sliceProfiles = jsonUtil.getJsonValue(solution.get(0), "newNSISolution.sliceProfiles")
-                execution.setVariable("tnConstituentSliceProfiles", sliceProfiles)
+            }
+            else {
+                logger.debug("No solutions returned from OOF .. Create new TN NF NSSI")
                 execution.setVariable("isOofTnNssiSelected", false)
-                logger.debug("tnConstituentSliceProfiles list from OOF " + sliceProfiles)
             }
-        } else {
+        }
+        else {
             String statusMessage = jsonUtil.getJsonValue(oofResponse, "statusMessage")
             logger.error("received failed status from oof " + statusMessage)
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Received a failed Async Response from OOF : " + statusMessage)
@@ -297,6 +281,77 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
         logger.debug(Prefix + "processOofSelection method finished")
     }
 
+    void prepareModifyTnNssiInputs(DelegateExecution execution) {
+        logger.debug(Prefix + "prepareModifyTnNssiInputs method start")
+        String jobId = UUID.randomUUID().toString()
+        execution.setVariable("modifyTnNssiJobId", jobId)
+        String additionalPropJsonStr = execution.getVariable("sliceParams")
+        String sliceProfile = execution.getVariable("sliceProfile")
+        String snssaiList = jsonUtil.getJsonValue(sliceProfile, "snssaiList")
+        String sliceProfileId = jsonUtil.getJsonValue(sliceProfile, "sliceProfileId")
+        String nsiInfo = jsonUtil.getJsonValue(additionalPropJsonStr, "nsiInfo")
+        String scriptName = jsonUtil.getJsonValue(additionalPropJsonStr, "scriptName")
+        String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
+        String modelUuid = execution.getVariable("modelUuid")
+        String serviceInstanceID = execution.getVariable("TnServiceInstanceId")
+        String servicename = execution.getVariable("servicename")
+        String transportSliceNetworks = jsonUtil.getJsonValue(additionalPropJsonStr, "transportSliceNetworks")
+
+        JsonObject modifySliceParams = new JsonObject()
+        modifySliceParams.addProperty("nsiInfo", nsiInfo)
+        modifySliceParams.addProperty("serviceInstanceID", serviceInstanceID)
+        modifySliceParams.addProperty("servicename", servicename)
+        modifySliceParams.addProperty("sliceProfile", sliceProfile)
+        modifySliceParams.addProperty("sliceProfileId", sliceProfileId)
+        modifySliceParams.addProperty("modelInvariantUuid", modelInvariantUuid)
+        modifySliceParams.addProperty("modelUuid", modelUuid)
+        modifySliceParams.addProperty("scriptName", scriptName)
+        modifySliceParams.addProperty("snssaiList", snssaiList)
+        modifySliceParams.addProperty("transportSliceNetworks", transportSliceNetworks)
+
+        execution.setVariable("modifySliceParams", modifySliceParams.toString())
+
+        logger.debug(Prefix + "prepareModifyTnNssiInputs method finished")
+    }
+
+    def createModifyNssiQueryJobStatus = { DelegateExecution execution ->
+        logger.debug(Prefix + "createModifyNssiQueryJobStatus method start")
+        JsonObject esrInfo = new JsonObject()
+        esrInfo.addProperty("networkType", "tn")
+        esrInfo.addProperty("vendor", "ONAP_internal")
+
+        execution.setVariable("esrInfo", esrInfo.toString())
+
+        JsonObject serviceInfo = new JsonObject()
+        serviceInfo.addProperty("nssiId", execution.getVariable("TnServiceInstanceId") as String)
+        serviceInfo.addProperty("nsiId", execution.getVariable("nsiId") as String)
+        serviceInfo.addProperty("nssiName", execution.getVariable("servicename") as String)
+        serviceInfo.addProperty("sST", execution.getVariable("sst") as String)
+        serviceInfo.addProperty("PLMNIdList", objectMapper.writeValueAsString(execution.getVariable("pLMNIdList")))
+        serviceInfo.addProperty("globalSubscriberId", execution.getVariable("globalSubscriberId") as String)
+        serviceInfo.addProperty("subscriptionServiceType", execution.getVariable("subscriptionServiceType") as String)
+        serviceInfo.addProperty("serviceInvariantUuid", execution.getVariable("modelInvariantUuid") as String)
+        serviceInfo.addProperty("serviceUuid", execution.getVariable("modelUuid") as String)
+        execution.setVariable("serviceInfo", serviceInfo.toString())
+        execution.setVariable("responseId", "")
+    }
+
+    def processModifyJobStatusRsp = { DelegateExecution execution ->
+        logger.debug(Prefix + "processJobStatusRsp method start")
+        String jobResponse = execution.getVariable("jobResponse")
+        logger.debug("Job status response " + jobResponse)
+        String status = jsonUtil.getJsonValue(jobResponse, "status")
+        String nssi = jsonUtil.getJsonValue(jobResponse, "nssiId")
+        if (status.equalsIgnoreCase("finished")) {
+            logger.debug("Job successfully completed ... proceeding with flow for nssi : " + nssi)
+        }
+        else {
+            String statusDescription = jsonUtil.getJsonValue(jobResponse, "statusDescription")
+            logger.error("received failed status from job status query for nssi : " + nssi + " with status description : " + statusDescription)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "received failed status from job status query for nssi : " + nssi + " with status description : " + statusDescription)
+        }
+    }
+
     void updateAAIOrchStatus(DelegateExecution execution) {
         logger.debug("Start updateAAIOrchStatus")
         String sliceServiceInstanceId = execution.getVariable("sliceServiceInstanceId")
index 6ea2be8..b7cddd2 100644 (file)
@@ -31,9 +31,12 @@ 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.AAIFluentTypeBuilder.Types
+import org.onap.so.beans.nsmf.oof.TemplateInfo
 import org.onap.so.bpmn.common.scripts.MsoGroovyTest
+import org.onap.so.bpmn.common.scripts.OofUtils
 
 import static org.junit.Assert.assertNotNull
+import static org.junit.Assert.assertEquals
 import static org.mockito.ArgumentMatchers.eq
 import static org.mockito.Mockito.*
 
@@ -166,4 +169,55 @@ class DoAllocateTnNssiTest extends MsoGroovyTest {
      }"""
         return expect.replaceAll("\\\\s+", "")
     }
+
+    @Test
+    void testPrepareOofSelection() {
+        when(mockExecution.getVariable("msoRequestId")).thenReturn("10dad82d-4bd9-467a-b113-5f8ea7eaae3c")
+        when(mockExecution.getVariable("modelUuid")).thenReturn("e2eb2fe3-92a7-447b-8582-077db5cd0862")
+        when(mockExecution.getVariable("modelInvariantUuid")).thenReturn("22e6ce80-a55f-4171-a457-a7ecb1865669")
+        when(mockExecution.getVariable("tnModelName")).thenReturn("Tn_ONAP_internal_BH")
+        when(mockExecution.getVariable("mso.adapters.oof.timeout")).thenReturn("")
+        TnAllocateNssi obj = spy(TnAllocateNssi.class)
+        OofUtils oofUtils = spy(OofUtils.class)
+        String requestId = "10dad82d-4bd9-467a-b113-5f8ea7eaae3c"
+        String nsstInfo = "\"{\"UUID\":\"e2eb2fe3-92a7-447b-8582-077db5cd0862\",\"invariantUUID\":\"22e6ce80-a55f-4171-a457-a7ecb1865669\",\"name\":\"Tn_ONAP_internal_BH\"}"
+        String messageType = "NSSISelectionResponse"
+        String sliceProfile = "{\"maxBandwidth\":3000,\"sliceProfileId\":\"ab9af40f13f721b5f13539d87484098\",\"latency\":10,\"snssaiList\":[\"001-100001\"],\"pLMNIdList\":[\"460-00\",\"460-01\"],\"perfReq\":{},\"coverageAreaTAList\":[],\"resourceSharingLevel\":\"shared\"}}"
+        Integer timeout = 600
+
+        when(oofUtils.buildSelectNSSIRequest(requestId, nsstInfo as TemplateInfo, messageType, sliceProfile, timeout)).thenReturn("""
+        {
+    "apiPath": "/api/oof/selection/nssi/v1",
+    "requestDetails": "{\\"requestInfo\\":{\\"transactionId\\":\\"10dad82d-4bd9-467a-b113-5f8ea7eaae3c\\",\\"requestId\\":\\"10dad82d-4bd9-467a-b113-5f8ea7eaae3c\\",\\"callbackUrl\\":\\"http://so-oof-adapter.onap:8090/so/adapters/oof/callback/v1/NSSISelectionResponse/10dad82d-4bd9-467a-b113-5f8ea7eaae3c\\",\\"sourceId\\":\\"SO\\",\\"timeout\\":600,\\"numSolutions\\":1},\\"NSSTInfo\\":{\\"UUID\\":\\"e2eb2fe3-92a7-447b-8582-077db5cd0862\\",\\"invariantUUID\\":\\"22e6ce80-a55f-4171-a457-a7ecb1865669\\",\\"name\\":\\"Tn_ONAP_internal_BH\\"},\\"sliceProfile\\":{\\"maxBandwidth\\":3000,\\"sliceProfileId\\":\\"ab9af40f13f721b5f13539d87484098\\",\\"latency\\":10,\\"snssaiList\\":[\\"001-100001\\"],\\"pLMNIdList\\":[\\"460-00\\",\\"460-01\\"],\\"perfReq\\":{},\\"coverageAreaTAList\\":[],\\"resourceSharingLevel\\":\\"shared\\"}}"
+    }""".replaceAll("\\\\s+", ""))
+        obj.prepareOofSelection(mockExecution)
+        verify(mockExecution, times(1)).setVariable(eq("nssiSelection_oofRequest"), captor.capture())
+        String nssiSelection_oofRequest = captor.getValue()
+        assertNotNull(nssiSelection_oofRequest)
+    }
+
+    @Test
+    void testprocessOofSelection() {
+        when(mockExecution.getVariable("nssiSelection_oofRequest")).thenReturn("""
+        {
+    "requestId": "a727643a-bf89-4fd9-b33c-b7bdda18c2b7",
+    "transactionId": "a727643a-bf89-4fd9-b33c-b7bdda18c2b7",
+    "requestStatus": "completed",
+    "statusMessage": "",
+    "solutions": [
+        {
+            "UUID": "e2eb2fe3-92a7-447b-8582-077db5cd0862",
+            "invariantUUID": "22e6ce80-a55f-4171-a457-a7ecb1865669",
+            "NSSIName": "nssi_tnservice12",
+            "NSSIId": "fe26a924-3845-4001-b84e-a439a27a88c0"
+        }
+    ]
+    }""".replaceAll("\\\\s+", ""))
+        TnAllocateNssi obj = spy(TnAllocateNssi.class)
+        ArrayList<String> solution = new ArrayList<>()
+        assertEquals(1, solution.size())
+        verify(mockExecution, times(1)).setVariable(eq("isOofTnNssiSelected"), captor.capture())
+        String isOofTnNssiSelected = captor.getValue()
+        assertEquals("true", isOofTnNssiSelected)
+    }
 }
index b70569b..694be22 100644 (file)
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1wio50w" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.1.1">
+<bpmn:definitions xmlns:bpmn="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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1wio50w" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.12.0">
   <bpmn:process id="DoAllocateTransportNSSI" name="DoAllocateTransportNSSI" isExecutable="true">
     <bpmn:startEvent id="StartEvent_1nbljfd" name="Create Allocate TN NSSMF Work Flow">
       <bpmn:outgoing>SequenceFlow_03s744c</bpmn:outgoing>
     </bpmn:startEvent>
     <bpmn:intermediateCatchEvent id="IntermediateCatchEvent_0vilb24" name="OOF TN NSSI Selection">
-      <bpmn:outgoing>SequenceFlow_1fk37v7</bpmn:outgoing>
+      <bpmn:outgoing>Flow_071hnt4</bpmn:outgoing>
       <bpmn:linkEventDefinition id="LinkEventDefinition_197u5pe" name="OofTnNssiSelect" />
     </bpmn:intermediateCatchEvent>
     <bpmn:scriptTask id="ScriptTask_1tc44ge" name="PreProcess Incoming Request" scriptFormat="groovy">
@@ -22,7 +22,7 @@ css.preProcessRequest(execution)</bpmn:script>
 def css = new TnAllocateNssi()
 css.processOofSelection(execution)</bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:exclusiveGateway id="ExclusiveGateway_0elbczl" name="Use Existing TN NSSI?" default="SequenceFlow_038lb9m">
+    <bpmn:exclusiveGateway id="ExclusiveGateway_0elbczl" name="Use Existing TN NSSI?">
       <bpmn:incoming>SequenceFlow_197cm2e</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_12t5exy</bpmn:outgoing>
       <bpmn:outgoing>SequenceFlow_038lb9m</bpmn:outgoing>
@@ -73,7 +73,7 @@ runScript.prepareUpdateJobStatus(execution,"INPROGRESS","10","Allocate TN NSSI s
     </bpmn:scriptTask>
     <bpmn:intermediateThrowEvent id="IntermediateThrowEvent_1ex8ke9" name="Goto OOF TN NSSI Selection">
       <bpmn:incoming>SequenceFlow_0jrclmc</bpmn:incoming>
-      <bpmn:linkEventDefinition id="LinkEventDefinition_0de65en" name="TnAllocateNssi" />
+      <bpmn:linkEventDefinition id="LinkEventDefinition_0de65en" name="OofTnNssiSelect" />
     </bpmn:intermediateThrowEvent>
     <bpmn:scriptTask id="ScriptTask_1ssh2l9" name="Prepare Update Resource Oper Status((finish)" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0kixzdj</bpmn:incoming>
@@ -102,7 +102,7 @@ def runScript = new TnAllocateNssi()
 runScript.prepareDecomposeService(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:scriptTask id="ScriptTask_08wim95" name="Prepare OOF TN NSSI Selection" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1fk37v7</bpmn:incoming>
+      <bpmn:incoming>Flow_0nu9t8e</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0h2oree</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def css = new TnAllocateNssi()
@@ -117,7 +117,7 @@ css.prepareOofSelection(execution)</bpmn:script>
       <bpmn:linkEventDefinition id="LinkEventDefinition_16f2ri9" name="TnAllocateNssi" />
     </bpmn:intermediateThrowEvent>
     <bpmn:endEvent id="EndEvent_1oouvuh" name="End">
-      <bpmn:incoming>Flow_0pbq5q0</bpmn:incoming>
+      <bpmn:incoming>Flow_13ikwvr</bpmn:incoming>
     </bpmn:endEvent>
     <bpmn:callActivity id="CallActivity_0cxst1i" name="Call DoCreateTnNssiInstance&#10;" calledElement="DoCreateTnNssiInstance">
       <bpmn:extensionElements>
@@ -146,9 +146,11 @@ css.prepareOofSelection(execution)</bpmn:script>
     <bpmn:sequenceFlow id="SequenceFlow_1cv0wop" sourceRef="Activity_187hs2t" targetRef="ScriptTask_1jgtb0y" />
     <bpmn:sequenceFlow id="SequenceFlow_197cm2e" sourceRef="ScriptTask_1jgtb0y" targetRef="ExclusiveGateway_0elbczl" />
     <bpmn:sequenceFlow id="SequenceFlow_12t5exy" name="No" sourceRef="ExclusiveGateway_0elbczl" targetRef="IntermediateThrowEvent_0ktwpki">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isOofTnNssiSelected")  == false)}</bpmn:conditionExpression>
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("isOofTnNssiSelected") == false}</bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:sequenceFlow id="SequenceFlow_038lb9m" name="Yes" sourceRef="ExclusiveGateway_0elbczl" targetRef="Activity_07jtiau">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("isOofTnNssiSelected") == true}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_038lb9m" name="Yes" sourceRef="ExclusiveGateway_0elbczl" targetRef="Activity_1mh10j4" />
     <bpmn:sequenceFlow id="SequenceFlow_1t19ips" sourceRef="CallActivity_1bnkmaz" targetRef="ScriptTask_0l3d1ai" />
     <bpmn:sequenceFlow id="SequenceFlow_0mlrlbv" sourceRef="CallActivity_0cxst1i" targetRef="ExclusiveGateway_18eld2o" />
     <bpmn:sequenceFlow id="SequenceFlow_1c6ka9h" name="No" sourceRef="ExclusiveGateway_18eld2o" targetRef="EndEvent_0x406rw" />
@@ -160,7 +162,6 @@ css.prepareOofSelection(execution)</bpmn:script>
     <bpmn:sequenceFlow id="SequenceFlow_0q7yc2c" sourceRef="ScriptTask_0o2r07o" targetRef="CallActivity_1bnkmaz" />
     <bpmn:sequenceFlow id="SequenceFlow_0h2oree" sourceRef="ScriptTask_08wim95" targetRef="Activity_187hs2t" />
     <bpmn:sequenceFlow id="SequenceFlow_1bevt3a" sourceRef="IntermediateCatchEvent_0pkvfun" targetRef="CallActivity_0cxst1i" />
-    <bpmn:sequenceFlow id="SequenceFlow_1fk37v7" sourceRef="IntermediateCatchEvent_0vilb24" targetRef="ScriptTask_08wim95" />
     <bpmn:sequenceFlow id="SequenceFlow_0jrclmc" sourceRef="ScriptTask_0l3d1ai" targetRef="IntermediateThrowEvent_1ex8ke9" />
     <bpmn:scriptTask id="ScriptTask_19uxoi8" name="Update AAI Status" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0n4xku8</bpmn:incoming>
@@ -171,14 +172,6 @@ def runScript = new TnAllocateNssi()
 runScript.updateAAIOrchStatus(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="SequenceFlow_0kixzdj" sourceRef="ScriptTask_19uxoi8" targetRef="ScriptTask_1ssh2l9" />
-    <bpmn:scriptTask id="Activity_1mh10j4" name="Prepare Update Resource Oper Status(finish)" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_038lb9m</bpmn:incoming>
-      <bpmn:outgoing>Flow_1853sgs</bpmn:outgoing>
-      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def runScript = new TnAllocateNssi()
-runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI successfully")</bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="Flow_1853sgs" sourceRef="Activity_1mh10j4" targetRef="Activity_124z7q2" />
     <bpmn:callActivity id="Activity_187hs2t" name="Handle TN NSSI Selection OOF request" calledElement="DoHandleOofRequest">
       <bpmn:extensionElements>
         <camunda:in source="nssiSelection_Url" target="apiPath" />
@@ -192,29 +185,6 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
       <bpmn:incoming>SequenceFlow_0h2oree</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1cv0wop</bpmn:outgoing>
     </bpmn:callActivity>
-    <bpmn:serviceTask id="Activity_124z7q2" name="Update Resource Operation Status">
-      <bpmn:extensionElements>
-        <camunda:connector>
-          <camunda:inputOutput>
-            <camunda:inputParameter name="url">${dbAdapterEndpoint}</camunda:inputParameter>
-            <camunda:inputParameter name="headers">
-              <camunda:map>
-                <camunda:entry key="content-type">application/soap+xml</camunda:entry>
-                <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry>
-              </camunda:map>
-            </camunda:inputParameter>
-            <camunda:inputParameter name="payload">${updateResourceOperationStatus}</camunda:inputParameter>
-            <camunda:inputParameter name="method">POST</camunda:inputParameter>
-            <camunda:outputParameter name="NSSMF_dbResponseCode">${statusCode}</camunda:outputParameter>
-            <camunda:outputParameter name="NSSMF_dbResponse">${response}</camunda:outputParameter>
-          </camunda:inputOutput>
-          <camunda:connectorId>http-connector</camunda:connectorId>
-        </camunda:connector>
-      </bpmn:extensionElements>
-      <bpmn:incoming>Flow_1853sgs</bpmn:incoming>
-      <bpmn:outgoing>Flow_0pbq5q0</bpmn:outgoing>
-    </bpmn:serviceTask>
-    <bpmn:sequenceFlow id="Flow_0pbq5q0" sourceRef="Activity_124z7q2" targetRef="EndEvent_1oouvuh" />
     <bpmn:serviceTask id="Activity_14an583" name="Update Resource Operation Status">
       <bpmn:extensionElements>
         <camunda:connector>
@@ -261,12 +231,125 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
       <bpmn:outgoing>Flow_06rrcwf</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="Flow_06rrcwf" sourceRef="Activity_1xko5pk" targetRef="EndEvent_05h01gx" />
+    <bpmn:exclusiveGateway id="Gateway_08t9sts" name="Enable OOF?">
+      <bpmn:incoming>Flow_071hnt4</bpmn:incoming>
+      <bpmn:outgoing>Flow_0nu9t8e</bpmn:outgoing>
+      <bpmn:outgoing>Flow_0tz6v1f</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="Flow_0nu9t8e" name="yes" sourceRef="Gateway_08t9sts" targetRef="ScriptTask_08wim95">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{execution.getVariable("enableOof") == true}</bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:sequenceFlow id="Flow_071hnt4" sourceRef="IntermediateCatchEvent_0vilb24" targetRef="Gateway_08t9sts" />
+    <bpmn:sequenceFlow id="Flow_0tz6v1f" name="No" sourceRef="Gateway_08t9sts" targetRef="Event_0uq2hsq" />
+    <bpmn:intermediateThrowEvent id="Event_0uq2hsq" name="Goto Allocate TN NSSI">
+      <bpmn:incoming>Flow_0tz6v1f</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_0xfqvfe" name="TnAllocateNssi" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:scriptTask id="Activity_07jtiau" name="prepare Modify Tn NSSI inputs" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_038lb9m</bpmn:incoming>
+      <bpmn:outgoing>Flow_10etjmr</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def css = new TnAllocateNssi()
+css.prepareModifyTnNssiInputs(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:callActivity id="Activity_1mw6mcq" name="call DoModifyTransportNSSI" calledElement="DoModifyTransportNSSI">
+      <bpmn:extensionElements>
+        <camunda:in source="msoRequestId" target="msoRequestId" />
+        <camunda:in source="TnServiceInstanceId" target="serviceInstanceID" />
+        <camunda:in source="nsiId" target="nsiId" />
+        <camunda:in source="networkType" target="networkType" />
+        <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
+        <camunda:in source="subscriptionServiceType" target="subscriptionServiceType" />
+        <camunda:in source="transportSliceNetworks" target="transportSliceNetworks" />
+        <camunda:in source="modifyTnNssiJobId" target="jobId" />
+        <camunda:in source="modifySliceParams" target="sliceParams" />
+        <camunda:in source="servicename" target="servicename" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:in source="modelInvariantUuid" target="modelInvariantUuid" />
+        <camunda:in source="modelUuid" target="modelUuid" />
+        <camunda:in source="operationType" target="operationType" />
+        <camunda:in source="transportSliceNetworks" target="transportSliceNetworks" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_10etjmr</bpmn:incoming>
+      <bpmn:outgoing>Flow_01bdm61</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_0wllwek" name="prepare query job status" scriptFormat="groovy">
+      <bpmn:incoming>Flow_01bdm61</bpmn:incoming>
+      <bpmn:outgoing>Flow_0tvh0t6</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def css = new TnAllocateNssi()
+css.createModifyNssiQueryJobStatus(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_10etjmr" sourceRef="Activity_07jtiau" targetRef="Activity_1mw6mcq" />
+    <bpmn:sequenceFlow id="Flow_01bdm61" sourceRef="Activity_1mw6mcq" targetRef="Activity_0wllwek" />
+    <bpmn:callActivity id="Activity_0wx2ah5" name="Query Job status" calledElement="QueryJobStatus">
+      <bpmn:extensionElements>
+        <camunda:in source="serviceInfo" target="serviceInfo" />
+        <camunda:in source="modifyTnNssiJobId" target="jobId" />
+        <camunda:in source="responseId" target="responseId" />
+        <camunda:in source="job_timeout" target="timeout" />
+        <camunda:out source="responseDescriptor" target="jobResponse" />
+        <camunda:in source="msoRequestId" target="msoRequestId" />
+        <camunda:in source="esrInfo" target="esrInfo" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_0tvh0t6</bpmn:incoming>
+      <bpmn:outgoing>Flow_0rt0mvl</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:sequenceFlow id="Flow_0tvh0t6" sourceRef="Activity_0wllwek" targetRef="Activity_0wx2ah5" />
+    <bpmn:scriptTask id="Activity_1hhcncj" name="process Job status response" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0rt0mvl</bpmn:incoming>
+      <bpmn:outgoing>Flow_13ikwvr</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def css = new TnAllocateNssi()
+css.processModifyJobStatusRsp(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_0rt0mvl" sourceRef="Activity_0wx2ah5" targetRef="Activity_1hhcncj" />
+    <bpmn:sequenceFlow id="Flow_13ikwvr" sourceRef="Activity_1hhcncj" targetRef="EndEvent_1oouvuh" />
   </bpmn:process>
   <bpmn:message id="Message_0c4b2r5" name="SliceServiceTask" />
   <bpmn:error id="Error_03akl5v" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmn:error id="Error_0p2naox" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoAllocateTransportNSSI">
+      <bpmndi:BPMNEdge id="Flow_13ikwvr_di" bpmnElement="Flow_13ikwvr">
+        <di:waypoint x="1380" y="490" />
+        <di:waypoint x="1452" y="490" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0rt0mvl_di" bpmnElement="Flow_0rt0mvl">
+        <di:waypoint x="1240" y="490" />
+        <di:waypoint x="1280" y="490" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0tvh0t6_di" bpmnElement="Flow_0tvh0t6">
+        <di:waypoint x="1110" y="490" />
+        <di:waypoint x="1140" y="490" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_01bdm61_di" bpmnElement="Flow_01bdm61">
+        <di:waypoint x="960" y="490" />
+        <di:waypoint x="1010" y="490" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_10etjmr_di" bpmnElement="Flow_10etjmr">
+        <di:waypoint x="800" y="490" />
+        <di:waypoint x="860" y="490" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0tz6v1f_di" bpmnElement="Flow_0tz6v1f">
+        <di:waypoint x="320" y="355" />
+        <di:waypoint x="320" y="440" />
+        <di:waypoint x="342" y="440" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="328" y="395" width="15" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_071hnt4_di" bpmnElement="Flow_071hnt4">
+        <di:waypoint x="214" y="330" />
+        <di:waypoint x="295" y="330" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0nu9t8e_di" bpmnElement="Flow_0nu9t8e">
+        <di:waypoint x="345" y="330" />
+        <di:waypoint x="463" y="330" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="395" y="312" width="18" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_06rrcwf_di" bpmnElement="Flow_06rrcwf">
         <di:waypoint x="1140" y="680" />
         <di:waypoint x="1252" y="680" />
@@ -275,14 +358,6 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
         <di:waypoint x="750" y="121" />
         <di:waypoint x="850" y="121" />
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0pbq5q0_di" bpmnElement="Flow_0pbq5q0">
-        <di:waypoint x="1460" y="500" />
-        <di:waypoint x="1562" y="500" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_1853sgs_di" bpmnElement="Flow_1853sgs">
-        <di:waypoint x="1270" y="500" />
-        <di:waypoint x="1360" y="500" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0kixzdj_di" bpmnElement="SequenceFlow_0kixzdj">
         <di:waypoint x="770" y="680" />
         <di:waypoint x="860" y="680" />
@@ -291,17 +366,13 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
         <di:waypoint x="1420" y="121" />
         <di:waypoint x="1532" y="121" />
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1fk37v7_di" bpmnElement="SequenceFlow_1fk37v7">
-        <di:waypoint x="214" y="330" />
-        <di:waypoint x="320" y="330" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1bevt3a_di" bpmnElement="SequenceFlow_1bevt3a">
         <di:waypoint x="228" y="680" />
         <di:waypoint x="320" y="680" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0h2oree_di" bpmnElement="SequenceFlow_0h2oree">
-        <di:waypoint x="420" y="330" />
-        <di:waypoint x="540" y="330" />
+        <di:waypoint x="563" y="330" />
+        <di:waypoint x="630" y="330" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0q7yc2c_di" bpmnElement="SequenceFlow_0q7yc2c">
         <di:waypoint x="950" y="121" />
@@ -338,26 +409,27 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
         <di:waypoint x="1320" y="121" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_038lb9m_di" bpmnElement="SequenceFlow_038lb9m">
-        <di:waypoint x="1090" y="355" />
-        <di:waypoint x="1090" y="500" />
-        <di:waypoint x="1170" y="500" />
+        <di:waypoint x="970" y="355" />
+        <di:waypoint x="970" y="400" />
+        <di:waypoint x="740" y="400" />
+        <di:waypoint x="740" y="450" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1100" y="413" width="19" height="14" />
+          <dc:Bounds x="981" y="368" width="18" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_12t5exy_di" bpmnElement="SequenceFlow_12t5exy">
-        <di:waypoint x="1115" y="330" />
-        <di:waypoint x="1292" y="330" />
+        <di:waypoint x="995" y="330" />
+        <di:waypoint x="1092" y="330" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1183" y="313" width="14" height="14" />
+          <dc:Bounds x="1029" y="313" width="15" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_197cm2e_di" bpmnElement="SequenceFlow_197cm2e">
         <di:waypoint x="890" y="330" />
-        <di:waypoint x="1065" y="330" />
+        <di:waypoint x="945" y="330" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1cv0wop_di" bpmnElement="SequenceFlow_1cv0wop">
-        <di:waypoint x="640" y="330" />
+        <di:waypoint x="730" y="330" />
         <di:waypoint x="790" y="330" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_07e12rt_di" bpmnElement="SequenceFlow_07e12rt">
@@ -387,9 +459,9 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
         <dc:Bounds x="790" y="290" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ExclusiveGateway_0elbczl_di" bpmnElement="ExclusiveGateway_0elbczl" isMarkerVisible="true">
-        <dc:Bounds x="1065" y="305" width="50" height="50" />
+        <dc:Bounds x="945" y="305" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1050" y="276" width="79" height="27" />
+          <dc:Bounds x="930" y="276" width="79" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0l3d1ai_di" bpmnElement="ScriptTask_0l3d1ai">
@@ -404,6 +476,15 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
       <bpmndi:BPMNShape id="EndEvent_0x406rw_di" bpmnElement="EndEvent_0x406rw">
         <dc:Bounds x="495" y="762" width="36" height="36" />
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_1oouvuh_di" bpmnElement="EndEvent_1oouvuh">
+        <dc:Bounds x="1452" y="472" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1460" y="515" width="20" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0wllwek_di" bpmnElement="Activity_0wllwek">
+        <dc:Bounds x="1010" y="450" width="100" height="80" />
+      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="SubProcess_1yv9i68_di" bpmnElement="SubProcess_1yv9i68" isExpanded="true">
         <dc:Bounds x="685" y="1080" width="781" height="196" />
       </bpmndi:BPMNShape>
@@ -449,7 +530,7 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
         <dc:Bounds x="850" y="81" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_08wim95_di" bpmnElement="ScriptTask_08wim95">
-        <dc:Bounds x="320" y="290" width="100" height="80" />
+        <dc:Bounds x="463" y="290" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_0pkvfun_di" bpmnElement="IntermediateCatchEvent_0pkvfun">
         <dc:Bounds x="192" y="662" width="36" height="36" />
@@ -458,15 +539,9 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_0ktwpki_di" bpmnElement="IntermediateThrowEvent_0ktwpki">
-        <dc:Bounds x="1292" y="312" width="36" height="36" />
+        <dc:Bounds x="1092" y="312" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1280" y="353" width="84" height="27" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="EndEvent_1oouvuh_di" bpmnElement="EndEvent_1oouvuh">
-        <dc:Bounds x="1562" y="482" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1570" y="525" width="20" height="14" />
+          <dc:Bounds x="1080" y="353" width="84" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_0cxst1i_di" bpmnElement="CallActivity_0cxst1i">
@@ -475,14 +550,8 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
       <bpmndi:BPMNShape id="ScriptTask_19uxoi8_di" bpmnElement="ScriptTask_19uxoi8">
         <dc:Bounds x="670" y="640" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_1mh10j4_di" bpmnElement="Activity_1mh10j4">
-        <dc:Bounds x="1170" y="460" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_187hs2t_di" bpmnElement="Activity_187hs2t">
-        <dc:Bounds x="540" y="290" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_124z7q2_di" bpmnElement="Activity_124z7q2">
-        <dc:Bounds x="1360" y="460" width="100" height="80" />
+        <dc:Bounds x="630" y="290" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_14an583_di" bpmnElement="Activity_14an583">
         <dc:Bounds x="650" y="81" width="100" height="80" />
@@ -490,6 +559,30 @@ runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Allocated TN NSSI s
       <bpmndi:BPMNShape id="Activity_1xko5pk_di" bpmnElement="Activity_1xko5pk">
         <dc:Bounds x="1040" y="640" width="100" height="80" />
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Gateway_08t9sts_di" bpmnElement="Gateway_08t9sts" isMarkerVisible="true">
+        <dc:Bounds x="295" y="305" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="290" y="275" width="68" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_0ltl0tk_di" bpmnElement="Event_0uq2hsq">
+        <dc:Bounds x="342" y="422" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="318" y="465" width="84" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_07jtiau_di" bpmnElement="Activity_07jtiau">
+        <dc:Bounds x="700" y="450" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1mw6mcq_di" bpmnElement="Activity_1mw6mcq">
+        <dc:Bounds x="860" y="450" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0wx2ah5_di" bpmnElement="Activity_0wx2ah5">
+        <dc:Bounds x="1140" y="450" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1hhcncj_di" bpmnElement="Activity_1hhcncj">
+        <dc:Bounds x="1280" y="450" width="100" height="80" />
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>