Imlpement RAN NSSMF Modify Workflow 70/112470/3
authorReshmasree <reshmasree.chamarthi2@wipro.com>
Thu, 10 Sep 2020 10:47:24 +0000 (03:47 -0700)
committerReshmasree c <reshmasree.chamarthi2@wipro.com>
Wed, 16 Sep 2020 14:34:55 +0000 (14:34 +0000)
Issue-ID: SO-3228
Signed-off-by: Reshmasree <reshmasree.chamarthi2@wipro.com>
Change-Id: I49b99cfb0afbdd34a83ef81dac6a62301e79e4fd

bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyAccessNSSI.groovy [new file with mode: 0644]
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyRanNfNssi.groovy [new file with mode: 0644]
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyAccessNSSI.bpmn [new file with mode: 0644]
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyRanNfNssi.bpmn [new file with mode: 0644]

diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyAccessNSSI.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyAccessNSSI.groovy
new file mode 100644 (file)
index 0000000..2e7e728
--- /dev/null
@@ -0,0 +1,656 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ # Copyright (c) 2020, Wipro Limited.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License")
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ #       http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.scripts
+
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.onap.so.bpmn.common.scripts.ExceptionUtil
+import org.onap.so.bpmn.common.scripts.NssmfAdapterUtils
+import org.onap.so.bpmn.common.scripts.OofUtils
+import org.onap.so.bpmn.common.scripts.RequestDBUtil
+import org.onap.so.bpmn.core.json.JsonUtils
+import org.onap.so.db.request.beans.ResourceOperationStatus
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+import java.sql.Timestamp
+import java.util.List
+import static org.apache.commons.lang3.StringUtils.isBlank
+import com.google.gson.JsonObject
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.google.gson.JsonArray
+import org.onap.so.beans.nsmf.AllocateTnNssi
+import org.onap.so.beans.nsmf.EsrInfo
+import org.onap.so.bpmn.core.UrnPropertiesReader
+import org.onap.so.bpmn.core.domain.ServiceDecomposition
+import org.onap.so.bpmn.core.domain.ServiceProxy
+
+import org.onap.aai.domain.yang.Relationship
+import org.onap.aai.domain.yang.ServiceInstance
+import org.onap.aai.domain.yang.SliceProfile
+import org.onap.aaiclient.client.aai.AAIObjectType
+import org.onap.aaiclient.client.aai.AAIResourcesClient
+import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
+import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
+import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
+import javax.ws.rs.NotFoundException
+
+class DoModifyAccessNSSI extends AbstractServiceTaskProcessor {
+
+       String Prefix="MASS_"
+       ExceptionUtil exceptionUtil = new ExceptionUtil()
+       RequestDBUtil requestDBUtil = new RequestDBUtil()
+       JsonUtils jsonUtil = new JsonUtils()
+       OofUtils oofUtils = new OofUtils()
+       ObjectMapper objectMapper = new ObjectMapper();
+       AnNssmfUtils anNssmfUtils = new AnNssmfUtils()
+       private NssmfAdapterUtils nssmfAdapterUtils = new NssmfAdapterUtils(httpClientFactory, jsonUtil)
+
+       private static final Logger logger = LoggerFactory.getLogger(DoModifyAccessNSSI.class)
+
+       @Override
+       void preProcessRequest(DelegateExecution execution) {
+               logger.debug(Prefix + "preProcessRequest Start")
+               execution.setVariable("prefix", Prefix)
+               execution.setVariable("startTime", System.currentTimeMillis())
+               def msg
+               try {
+
+                       logger.debug("input variables : msoRequestId - "+execution.getVariable("msoRequestId")+
+                                       " globalSubscriberId - "+execution.getVariable("globalSubscriberId")+
+                                       " serviceInstanceID - "+execution.getVariable("serviceInstanceID")+
+                                       " nsiId - "+execution.getVariable("nsiId")+
+                                       " networkType - "+execution.getVariable("networkType")+
+                                       " subscriptionServiceType - "+execution.getVariable("subscriptionServiceType")+
+                                       " jobId - "+execution.getVariable("jobId")+
+                                       " sliceParams - "+execution.getVariable("sliceParams")+
+                                       " servicename - "+ execution.getVariable("servicename"))
+
+                       //validate slice subnet inputs
+
+                       String sliceParams = execution.getVariable("sliceParams")
+                       String modifyAction = jsonUtil.getJsonValue(sliceParams, "modifyAction")
+                       if (isBlank(modifyAction)) {
+                               msg = "Input modifyAction is null"
+                               logger.debug(msg)
+                               exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+                       } else {
+                               execution.setVariable("modifyAction", modifyAction)
+                               switch(modifyAction) {
+                                       case "allocate":
+                                               execution.setVariable("isModifyallocate", true)
+                                               break
+                                       case "deallocate":
+                                               execution.setVariable("isModifydeallocate", true)
+                                               break
+                                       case "reconfigure":
+                                               execution.setVariable("isModifyreconfigure", true)
+                                               String resourceConfig = jsonUtil.getJsonValue(sliceParams, "resourceConfig")
+                                               execution.setVariable("additionalProperties", resourceConfig)
+                                               break
+                                       default:
+                                               logger.debug("Invalid modify Action")
+                                               exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Invalid modify Action : "+modifyAction)
+                               }
+                       }
+                       List<String> snssaiList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceParams, "snssaiList"))
+                       String sliceProfileId = jsonUtil.getJsonValue(sliceParams, "sliceProfileId")
+                       if (isBlank(sliceProfileId) || (snssaiList.empty)) {
+                               msg = "Mandatory fields are empty"
+                               logger.debug(msg)
+                               exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+                       } else {
+                               execution.setVariable("sliceProfileId", sliceProfileId)
+                               execution.setVariable("snssaiList", snssaiList)
+                       }
+                       String nsiName = jsonUtil.getJsonValue(sliceParams, "nsiInfo.nsiName")
+                       String scriptName = jsonUtil.getJsonValue(sliceParams, "scriptName")
+                       execution.setVariable("nsiName", nsiName)
+                       execution.setVariable("scriptName", scriptName)
+                       execution.setVariable("job_timeout", 10)
+                       execution.setVariable("ranNssiPreferReuse", false)
+               } catch(BpmnError e) {
+                       throw e
+               } catch(Exception ex) {
+                       msg = "Exception in DoModifyAccessNSSI.preProcessRequest " + ex.getMessage()
+                       logger.debug(msg)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+               }
+               logger.debug(Prefix + "preProcessRequest Exit")
+       }
+       
+       def getSliceProfile = { DelegateExecution execution ->
+               logger.debug(Prefix + "getSliceProfiles Start")
+               String instanceId = execution.getVariable("sliceProfileId")
+               ServiceInstance sliceProfileInstance = getServiceInstance(execution, instanceId)
+               SliceProfile ranSliceProfile = sliceProfileInstance.getSliceProfiles().getSliceProfile().get(0)
+               logger.debug("RAN slice profile : "+ranSliceProfile.toString())
+               execution.setVariable("RANSliceProfile", ranSliceProfile)
+               execution.setVariable("ranSliceProfileInstance", sliceProfileInstance)
+       }
+       
+       /*
+        * Function to subnet capabilities from nssmf adapter
+        */
+       def getSubnetCapabilities = { DelegateExecution execution ->
+               logger.debug(Prefix+"getSubnetCapabilities method start")
+
+               String tnNssmfRequest = anNssmfUtils.buildCreateTNNSSMFSubnetCapabilityRequest()
+
+               String urlString = "/api/rest/provMns/v1/NSS/subnetCapabilityQuery"
+
+               String tnNssmfResponse = nssmfAdapterUtils.sendPostRequestNSSMF(execution, urlString, tnNssmfRequest)
+
+               if (tnNssmfResponse != null) {
+                       String FHCapabilities= jsonUtil.getJsonValue(tnNssmfResponse, "TN_FH")
+                       String MHCapabilities = jsonUtil.getJsonValue(tnNssmfResponse, "TN_MH")
+                       execution.setVariable("FHCapabilities",FHCapabilities)
+                       execution.setVariable("MHCapabilities",MHCapabilities)
+
+               } else {
+                       logger.error("received error message from NSSMF : "+ tnNssmfResponse)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"Received a Bad Sync Response from NSSMF.")
+               }
+               String anNssmfRequest = anNssmfUtils.buildCreateANNFNSSMFSubnetCapabilityRequest()
+
+               String anNssmfResponse = nssmfAdapterUtils.sendPostRequestNSSMF(execution, urlString, anNssmfRequest)
+
+               if (anNssmfResponse != null) {
+                       String ANNFCapabilities = jsonUtil.getJsonValue(anNssmfResponse, "AN_NF")
+                       execution.setVariable("ANNFCapabilities",ANNFCapabilities)
+
+               } else {
+                       logger.error("received error message from NSSMF : "+ anNssmfResponse)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"Received a Bad Sync Response from NSSMF.")
+               }
+       }
+
+       
+       /*
+        * prepare OOF request for RAN NSSI selection
+        */
+       def prepareOofRequestForRanNSS = { DelegateExecution execution ->
+               logger.debug(Prefix+"prepareOofRequestForRanNSS method start")
+
+               String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
+               logger.debug( "get NSSI option OOF Url: " + urlString)
+
+               //build oof request body
+               boolean ranNssiPreferReuse = execution.getVariable("ranNssiPreferReuse");
+               String requestId = execution.getVariable("msoRequestId")
+               String messageType = "NSISelectionResponse"
+               Map<String, Object> profileInfo = objectMapper.readValue(execution.getVariable("RANSliceProfile"), Map.class)
+               ServiceInstance ranSliceProfileInstance = objectMapper.readValue(execution.getVariable("ranSliceProfileInstance"), ServiceInstance.class)
+               String modelUuid = ranSliceProfileInstance.getModelVersionId()
+               String modelInvariantUuid = ranSliceProfileInstance.getModelInvariantId()
+               String modelName = execution.getVariable("servicename")
+               String timeout = UrnPropertiesReader.getVariable("mso.adapters.oof.timeout", execution);
+               List<String> nsstInfoList =  new ArrayList<>()
+               JsonArray capabilitiesList = new JsonArray()
+               String FHCapabilities = execution.getVariable("FHCapabilities")
+               String MHCapabilities = execution.getVariable("MHCapabilities")
+               String ANNFCapabilities = execution.getVariable("ANNFCapabilities")
+               JsonObject FH = new JsonObject()
+               JsonObject MH = new JsonObject()
+               JsonObject ANNF = new JsonObject()
+               FH.addProperty("domainType", "TN_FH")
+               FH.addProperty("capabilityDetails", FHCapabilities)
+               MH.addProperty("domainType", "TN_MH")
+               MH.addProperty("capabilityDetails", MHCapabilities)
+               ANNF.addProperty("domainType", "AN_NF")
+               ANNF.addProperty("capabilityDetails", FHCapabilities)
+               capabilitiesList.add(FH)
+               capabilitiesList.add(MH)
+               capabilitiesList.add(ANNF)
+
+               execution.setVariable("nssiSelection_Url", "/api/oof/selection/nsi/v1")
+               execution.setVariable("nssiSelection_messageType",messageType)
+               execution.setVariable("nssiSelection_correlator",requestId)
+               execution.setVariable("nssiSelection_timeout",timeout)
+               String oofRequest = anNssmfUtils.buildSelectRANNSSIRequest(requestId, messageType, modelUuid,modelInvariantUuid,
+                               modelName, profileInfo, nsstInfoList, capabilitiesList, ranNssiPreferReuse)
+
+               execution.setVariable("nssiSelection_oofRequest",oofRequest)
+               logger.debug("Sending request to OOF: " + oofRequest)
+       }
+       
+       /*
+        * process OOF response for RAN NSSI selection
+        */
+       def processOofResponseForRanNSS = { DelegateExecution execution ->
+               logger.debug(Prefix+"processOofResponseForRanNSS 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 sliceProfiles = jsonUtil.getJsonValue(solution.get(0), "newNSISolution.sliceProfiles")
+                               execution.setVariable("RanConstituentSliceProfiles", sliceProfiles)
+                               List<String> ranConstituentSliceProfiles = jsonUtil.StringArrayToList(sliceProfiles)
+                               anNssmfUtils.createDomainWiseSliceProfiles(ranConstituentSliceProfiles, execution)
+                               logger.debug("RanConstituentSliceProfiles list from OOF "+sliceProfiles)
+                       }else {
+                               String statusMessage = jsonUtil.getJsonValue(oofResponse, "statusMessage")
+                               logger.error("failed to get slice profiles from oof "+ statusMessage)
+                               exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"failed to get slice profiles from oof "+statusMessage)
+                       }
+               }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)
+               }
+
+       }
+       def getNssisFromAai = { DelegateExecution execution ->
+               logger.debug(Prefix+"getNssisFromAai method start")
+               String instanceId = execution.getVariable("serviceInstanceID")
+               String role = "nssi"
+               Map<String,ServiceInstance> ranConstituentNssis = getRelatedInstancesByRole(execution, role, instanceId)
+               logger.debug("getNssisFromAai ranConstituentNssis : "+ranConstituentNssis.toString())
+               ranConstituentNssis.each { key, val -> 
+                       switch(key) {
+                               case "AN-NF":
+                                       execution.setVariable("ANNF_NSSI", val.getServiceInstanceId())
+                                       execution.setVariable("ANNF_nssiName", val.getServiceInstanceName())
+                                       break
+                               case "TN-FH":
+                                       execution.setVariable("TNFH_NSSI", val.getServiceInstanceId())
+                                       execution.setVariable("TNFH_nssiName", val.getServiceInstanceName())
+                                       break
+                               case "TN-MH":
+                                       execution.setVariable("TNMH_NSSI", val.getServiceInstanceId())
+                                       execution.setVariable("TNMH_nssiName", val.getServiceInstanceName())
+                                       break
+                               default:
+                                       logger.error("No expected match found for current domainType "+ key)
+                                       exceptionUtil.buildAndThrowWorkflowException(execution, 1000,"No expected match found for current domainType "+ key)
+                       }
+               }
+               
+       }
+       def createSliceProfiles = { DelegateExecution execution ->
+               logger.debug(Prefix+"createSliceProfiles method start")
+               anNssmfUtils.createSliceProfilesInAai(execution)
+       }
+       def updateRelationshipInAai = { DelegateExecution execution ->
+               logger.debug(Prefix+"updateRelationshipInAai method start")
+               String msg = ""
+               try {
+                       def ANNF_serviceInstanceId = execution.getVariable("ANNF_NSSI")
+                       def TNFH_serviceInstanceId = execution.getVariable("TNFH_NSSI")
+                       def TNMH_serviceInstanceId = execution.getVariable("TNMH_NSSI")
+                       def AN_profileInstanceId = execution.getVariable("sliceProfileId")
+                       def ANNF_profileInstanceId = execution.getVariable("ANNF_sliceProfileInstanceId")
+                       def TNFH_profileInstanceId = execution.getVariable("TNFH_sliceProfileInstanceId")
+                       def TNMH_profileInstanceId = execution.getVariable("TNMH_sliceProfileInstanceId")
+                       String globalSubscriberId = execution.getVariable("globalSubscriberId")
+                       String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+
+                       Relationship ANNF_relationship = new Relationship()
+                       Relationship TNFH_relationship = new Relationship()
+                       Relationship TNMH_relationship = new Relationship()
+                       
+                       String ANNF_relatedLink = "aai/v16/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${ANNF_profileInstanceId}"
+                       String TNFH_relatedLink = "aai/v16/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${TNFH_profileInstanceId}"
+                       String TNMH_relatedLink = "aai/v16/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${TNMH_profileInstanceId}"
+                       
+                       ANNF_relationship.setRelatedLink(ANNF_relatedLink)
+                       ANNF_relationship.setRelatedTo("service-instance")
+                       ANNF_relationship.setRelationshipLabel("org.onap.relationships.inventory.ComposedOf")
+                       TNFH_relationship.setRelatedLink(TNFH_relatedLink)
+                       TNFH_relationship.setRelatedTo("service-instance")
+                       TNFH_relationship.setRelationshipLabel("org.onap.relationships.inventory.ComposedOf")
+                       TNMH_relationship.setRelatedLink(TNMH_relatedLink)
+                       TNMH_relationship.setRelatedTo("service-instance")
+                       TNMH_relationship.setRelationshipLabel("org.onap.relationships.inventory.ComposedOf")
+                       
+                       // create SliceProfile and NSSI relationship in AAI
+                       anNssmfUtils.createRelationShipInAAI(execution, ANNF_relationship,ANNF_serviceInstanceId)
+                       anNssmfUtils.createRelationShipInAAI(execution, TNFH_relationship,TNFH_serviceInstanceId)
+                       anNssmfUtils.createRelationShipInAAI(execution, TNMH_relationship,TNMH_serviceInstanceId)
+                       anNssmfUtils.createRelationShipInAAI(execution, ANNF_relationship,AN_profileInstanceId)
+                       anNssmfUtils.createRelationShipInAAI(execution, TNFH_relationship,AN_profileInstanceId)
+                       anNssmfUtils.createRelationShipInAAI(execution, TNMH_relationship,AN_profileInstanceId)
+
+               } catch (BpmnError e) {
+                       throw e
+               } catch (Exception ex) {
+
+                       msg = "Exception in DoCreateE2EServiceInstance.createCustomRelationship. " + ex.getMessage()
+                       logger.info(msg)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+               }
+       }
+       
+       def processRanNfModifyRsp = { DelegateExecution execution ->
+               logger.debug(Prefix+"processRanNfModifyRsp method start")
+               anNssmfUtils.processRanNfModifyRsp(execution)
+       }
+       
+       def prepareTnFhRequest = { DelegateExecution execution ->
+               logger.debug(Prefix+"prepareTnFhRequest method start")
+
+               String nssmfRequest = anNssmfUtils.buildCreateNSSMFRequest(execution, "TN_FH", "modify-allocate")
+               String urlString = "/api/rest/provMns/v1/NSS/SliceProfiles"
+               String nssmfResponse = nssmfAdapterUtils.sendPostRequestNSSMF(execution, urlString, nssmfRequest)
+
+               if (nssmfResponse != null) {
+                       execution.setVariable("nssmfResponse", nssmfResponse)
+                       String jobId = jsonUtil.getJsonValue(nssmfResponse, "jobId")
+                       execution.setVariable("TNFH_jobId",jobId)
+               } else {
+                       logger.error("received error message from NSSMF : "+ nssmfResponse)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"Received a Bad Sync Response from NSSMF.")
+               }
+               logger.debug("Exit prepareTnFhRequest")
+
+       }
+       def prepareTnMhRequest = { DelegateExecution execution ->
+               logger.debug(Prefix+"prepareTnMhRequest method start")
+
+               String nssmfRequest = anNssmfUtils.buildCreateNSSMFRequest(execution, "TN_MH", "modify-allocate")
+               String urlString = "/api/rest/provMns/v1/NSS/SliceProfiles"
+               String nssmfResponse = nssmfAdapterUtils.sendPostRequestNSSMF(execution, urlString, nssmfRequest)
+
+               if (nssmfResponse != null) {
+                       execution.setVariable("nssmfResponse", nssmfResponse)
+                       String jobId = jsonUtil.getJsonValue(nssmfResponse, "jobId")
+                       execution.setVariable("TNMH_jobId",jobId)
+               } else {
+                       logger.error("received error message from NSSMF : "+ nssmfResponse)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"Received a Bad Sync Response from NSSMF.")
+               }
+               logger.debug("Exit prepareTnMhRequest")
+       }
+       
+       def createFhAllocateNssiJobQuery = { DelegateExecution execution ->
+               logger.debug(Prefix+"createModifyNssiQueryJobStatus method start")
+               createTnAllocateNssiJobQuery(execution, "TN_FH")
+       }
+       
+       def createMhAllocateNssiJobQuery = { DelegateExecution execution ->
+               logger.debug(Prefix+"createModifyNssiQueryJobStatus method start")
+               createTnAllocateNssiJobQuery(execution, "TN_MH")
+       }
+       
+       private void createTnAllocateNssiJobQuery(DelegateExecution execution, String domainType) {
+               EsrInfo esrInfo = new EsrInfo()
+               esrInfo.setNetworkType("TN")
+               esrInfo.setVendor("ONAP")
+               String esrInfoString = objectMapper.writeValueAsString(esrInfo)
+               execution.setVariable("esrInfo", esrInfoString)
+               JsonObject serviceInfo = new JsonObject()
+               
+               serviceInfo.addProperty("nsiId", execution.getVariable("nsiId"))
+               String sST = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "sST")
+               serviceInfo.addProperty("sST", sST)
+               serviceInfo.addProperty("PLMNIdList", objectMapper.writeValueAsString(execution.getVariable("plmnIdList")))
+               serviceInfo.addProperty("globalSubscriberId", execution.getVariable("globalSubscriberId"))
+               serviceInfo.addProperty("subscriptionServiceType", execution.getVariable("subscriptionServiceType"))
+               serviceInfo.addProperty("serviceInvariantUuid", null)
+               serviceInfo.addProperty("serviceUuid", null)
+               if(domainType.equals("TN_FH")) {
+                       serviceInfo.addProperty("nssiId", execution.getVariable("TNFH_NSSI"))
+                       serviceInfo.addProperty("nssiName", execution.getVariable("TNFH_nssiName"))
+               }else if(domainType.equals("TN_MH")) {
+                       serviceInfo.addProperty("nssiId", execution.getVariable("TNMH_NSSI"))
+                       serviceInfo.addProperty("nssiName", execution.getVariable("TNMH_nssiName"))
+               }
+               execution.setVariable("serviceInfo", serviceInfo.toString())
+               execution.setVariable("responseId", "")
+       }
+       
+       def processFhAllocateNssiJobStatusRsp = { DelegateExecution execution ->
+               logger.debug(Prefix+"processJobStatusRsp method start")
+               String jobResponse = execution.getVariable("TNFH_jobResponse")
+               logger.debug("Job status response "+jobResponse)
+               String status = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.status")
+               String nssi = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.nssi")
+               if(status.equalsIgnoreCase("finished")) {
+                       logger.debug("Job successfully completed ... proceeding with flow for nssi : "+nssi)
+               }
+               else {
+                       String statusDescription = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.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)
+               }
+       }
+       
+       def processMhAllocateNssiJobStatusRsp = { DelegateExecution execution ->
+               logger.debug(Prefix+"processJobStatusRsp method start")
+               String jobResponse = execution.getVariable("TNMH_jobResponse")
+               logger.debug("Job status response "+jobResponse)
+               String status = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.status")
+               String nssi = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.nssi")
+               if(status.equalsIgnoreCase("finished")) {
+                       logger.debug("Job successfully completed ... proceeding with flow for nssi : "+nssi)
+               }
+               else {
+                       String statusDescription = jsonUtil.getJsonValue(jobResponse, "responseDescriptor.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)
+               }
+       }
+       
+       def getSliceProfilesFromAai = { DelegateExecution execution ->
+               logger.debug(Prefix+"getSliceProfilesFromAai method start")
+               String instanceId = execution.getVariable("sliceProfileId")
+               String role = "slice-profile-instance"
+               Map<String,ServiceInstance> ranConstituentSliceProfiles = getRelatedInstancesByRole(execution, role, instanceId)
+               logger.debug("getSliceProfilesFromAai ranConstituentSliceProfiles : "+ranConstituentSliceProfiles.toString())
+               ranConstituentSliceProfiles.each { key, val ->
+                       switch(key) {
+                               case "AN-NF":
+                                       execution.setVariable("ANNF_sliceProfileInstanceId", val.getServiceInstanceId())
+                                       break
+                               case "TN-FH":
+                                       execution.setVariable("TNFH_sliceProfileInstanceId", val.getServiceInstanceId())
+                                       break
+                               case "TN-MH":
+                                       execution.setVariable("TNMH_sliceProfileInstanceId", val.getServiceInstanceId())
+                                       break
+                               default:
+                                       logger.error("No expected match found for current domainType "+ key)
+                                       exceptionUtil.buildAndThrowWorkflowException(execution, 1000,"No expected match found for current domainType "+ key)
+                       }
+               }
+       }
+       
+       def prepareTnFhDeallocateRequest = { DelegateExecution execution ->
+               logger.debug(Prefix+"prepareTnFhDeallocateRequest method start")
+               String nssmfRequest = anNssmfUtils.buildDeallocateNssiRequest(execution, "TN_FH")
+               String nssiId = execution.getVariable("TNFH_NSSI")
+               execution.setVariable("tnFHNSSIId", nssiId)
+               String urlString = "/api/rest/provMns/v1/NSS/nssi/" + nssiId
+                               String nssmfResponse = nssmfAdapterUtils.sendPostRequestNSSMF(execution, urlString, nssmfRequest)
+                               if (nssmfResponse != null) {
+                                       String jobId = jsonUtil.getJsonValue(nssmfResponse, "jobId")
+                                       execution.setVariable("TN_FH_jobId",jobId)
+                               } else {
+                                       logger.error("received error message from NSSMF : "+ nssmfResponse)
+                                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"Received a Bad Sync Response from NSSMF.")
+                               }
+       }
+       
+       def prepareTnMhDeallocateRequest = { DelegateExecution execution ->
+               logger.debug(Prefix+"prepareTnFhDeallocateRequest method start")
+               String nssmfRequest = anNssmfUtils.buildDeallocateNssiRequest(execution, "TN_FH")
+               String nssiId = execution.getVariable("TNFH_NSSI")
+               execution.setVariable("tnFHNSSIId", nssiId)
+               String urlString = "/api/rest/provMns/v1/NSS/nssi/" + nssiId
+                               String nssmfResponse = nssmfAdapterUtils.sendPostRequestNSSMF(execution, urlString, nssmfRequest)
+                               if (nssmfResponse != null) {
+                                       String jobId = jsonUtil.getJsonValue(nssmfResponse, "jobId")
+                                       execution.setVariable("TN_MH_jobId",jobId)
+                               } else {
+                                       logger.error("received error message from NSSMF : "+ nssmfResponse)
+                                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"Received a Bad Sync Response from NSSMF.")
+                               }
+       }
+       
+       def createFhDeAllocateNssiJobQuery = { DelegateExecution execution ->
+               logger.debug(Prefix+"createModifyNssiQueryJobStatus method start")
+               createTnAllocateNssiJobQuery(execution, "TN_FH")
+       }
+       
+       def createMhDeAllocateNssiJobQuery = { DelegateExecution execution ->
+               logger.debug(Prefix+"createModifyNssiQueryJobStatus method start")
+               createTnAllocateNssiJobQuery(execution, "TN_MH")
+       }
+       def deleteFhSliceProfile = { DelegateExecution execution ->
+               logger.debug(Prefix+"deleteFhSliceProfile method start")
+               deleteServiceInstanceInAAI(execution,execution.getVariable("TNFH_sliceProfileInstanceId"))
+       }
+       def deleteMhSliceProfile = { DelegateExecution execution ->
+               logger.debug(Prefix+"deleteMhSliceProfile method start")
+               deleteServiceInstanceInAAI(execution,execution.getVariable("TNMH_sliceProfileInstanceId"))      
+       }
+       def deleteAnSliceProfile = { DelegateExecution execution ->
+               logger.debug(Prefix+"deleteAnSliceProfile method start")
+               deleteServiceInstanceInAAI(execution,execution.getVariable("ANNF_sliceProfileInstanceId"))
+       }
+       /**
+        * update operation status in request db
+        *
+        */
+       def prepareOperationStatusUpdate = { DelegateExecution execution ->
+               logger.debug(Prefix + "prepareOperationStatusUpdate Start")
+
+               String serviceId = execution.getVariable("serviceInstanceID")
+               String jobId = execution.getVariable("jobId")
+               String nsiId = execution.getVariable("nsiId")
+               String nssiId = execution.getVariable("serviceInstanceID")
+               logger.debug("Service Instance serviceId:" + serviceId + " jobId:" + jobId)
+
+               ResourceOperationStatus updateStatus = new ResourceOperationStatus()
+               updateStatus.setServiceId(serviceId)
+               updateStatus.setOperationId(jobId)
+               updateStatus.setResourceTemplateUUID(nsiId)
+               updateStatus.setResourceInstanceID(nssiId)
+               updateStatus.setOperType("Modify")
+               updateStatus.setProgress(100)
+               updateStatus.setStatus("finished")
+               requestDBUtil.prepareUpdateResourceOperationStatus(execution, updateStatus)
+
+               logger.debug(Prefix + "prepareOperationStatusUpdate Exit")
+       }
+
+       def prepareFailedOperationStatusUpdate = { DelegateExecution execution ->
+               logger.debug(Prefix + "prepareFailedOperationStatusUpdate Start")
+               
+               String serviceId = execution.getVariable("serviceInstanceID")
+               String jobId = execution.getVariable("jobId")
+               String nsiId = execution.getVariable("nsiId")
+               String nssiId = execution.getVariable("serviceInstanceID")
+               logger.debug("Service Instance serviceId:" + serviceId + " jobId:" + jobId)
+
+               ResourceOperationStatus updateStatus = new ResourceOperationStatus()
+               updateStatus.setServiceId(serviceId)
+               updateStatus.setOperationId(jobId)
+               updateStatus.setResourceTemplateUUID(nsiId)
+               updateStatus.setResourceInstanceID(nssiId)
+               updateStatus.setOperType("Modify")
+               updateStatus.setProgress(0)
+               updateStatus.setStatus("failed")
+               requestDBUtil.prepareUpdateResourceOperationStatus(execution, updateStatus)
+       }
+       
+       /**
+        * @param execution
+        * @param role            - nssi/slice profile instance
+        * @param instanceId    - id to which the related list to be found
+        * @return
+        */
+       private Map<String,ServiceInstance> getRelatedInstancesByRole(DelegateExecution execution,String role,String instanceId) {
+               logger.debug("${Prefix} - Fetching related ${role} from AAI")
+               String globalSubscriberId = execution.getVariable("globalSubscriberId")
+               String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+               
+               Map<String,ServiceInstance> relatedInstances = new HashMap<>()
+               
+               AAIResourcesClient client = new AAIResourcesClient()
+               AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
+                               globalSubscriberId, subscriptionServiceType, instanceId)
+               if (!client.exists(uri)) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai : ${instanceId}")
+               }
+               AAIResultWrapper wrapper = client.get(uri, NotFoundException.class)
+               Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
+               if(si.isPresent()) {
+               List<Relationship> relationshipList = si.get().getRelationshipList().getRelationship()
+               for (Relationship relationship : relationshipList) {
+                       String relatedTo = relationship.getRelatedTo()
+                       if (relatedTo.toLowerCase() == "service-instance") {
+                               String relatioshipurl = relationship.getRelatedLink()
+                               String serviceInstanceId =
+                                               relatioshipurl.substring(relatioshipurl.lastIndexOf("/") + 1, relatioshipurl.length())
+
+                               AAIResourcesClient client01 = new AAIResourcesClient()
+                               AAIResourceUri uri01 = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
+                                               globalSubscriberId, subscriptionServiceType, serviceInstanceId)
+                               if (!client.exists(uri01)) {
+                                       exceptionUtil.buildAndThrowWorkflowException(execution, 2500,
+                                                       "Service Instance was not found in aai: ${serviceInstanceId} related to ${instanceId}")
+                               }
+                               AAIResultWrapper wrapper01 = client01.get(uri01, NotFoundException.class)
+                               Optional<ServiceInstance> serviceInstance = wrapper01.asBean(ServiceInstance.class)
+                               if (serviceInstance.isPresent()) {
+                                       ServiceInstance instance = serviceInstance.get()
+                                       if (role.equalsIgnoreCase(instance.getServiceRole())) {
+                                               relatedInstances.put(instance.getWorkloadContext(),instance)
+                                       }
+                               }
+                       }
+               }
+               }
+               logger.debug("Found ${relatedInstances.size()} ${role} related to ${instanceId} ")
+               return relatedInstances
+       }
+       
+       private ServiceInstance getServiceInstance(DelegateExecution execution, String instanceId) {
+               String globalSubscriberId = execution.getVariable("globalSubscriberId")
+               String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+               ServiceInstance serviceInstance = new ServiceInstance()
+               AAIResourcesClient client = new AAIResourcesClient()
+               AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
+                               globalSubscriberId, subscriptionServiceType, instanceId)
+               if (!client.exists(uri)) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service Instance was not found in aai : ${instanceId}")
+               }
+               AAIResultWrapper wrapper = client.get(uri, NotFoundException.class)
+               Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
+               
+               if(si.isPresent()) {
+                       serviceInstance = si
+               }
+               return serviceInstance
+       }
+       private void deleteServiceInstanceInAAI(DelegateExecution execution,String instanceId) {
+               try {
+                       AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, execution.getVariable("globalSubscriberId"), execution.getVariable("serviceType"), instanceId)
+                       getAAIClient().delete(serviceInstanceUri)
+                       logger.debug("${Prefix} Exited deleteServiceInstance")
+               }catch(Exception e){
+                       logger.debug("Error occured within deleteServiceInstance method: " + e)
+               }
+       }
+}
\ No newline at end of file
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyRanNfNssi.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyRanNfNssi.groovy
new file mode 100644 (file)
index 0000000..6fdfbe3
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ # Copyright (c) 2020, Wipro Limited.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License")
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ #       http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.scripts
+
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.onap.so.bpmn.common.scripts.ExceptionUtil
+import org.onap.so.bpmn.core.json.JsonUtils
+import com.fasterxml.jackson.databind.ObjectMapper
+import com.google.gson.JsonObject
+import java.sql.Timestamp
+
+import static org.apache.commons.lang3.StringUtils.isBlank
+import org.onap.so.bpmn.core.UrnPropertiesReader
+
+class DoModifyRanNfNssi extends AbstractServiceTaskProcessor {
+
+       String Prefix="MANNFNSS_"
+       ExceptionUtil exceptionUtil = new ExceptionUtil()
+       JsonUtils jsonUtil = new JsonUtils()
+       ObjectMapper objectMapper = new ObjectMapper();
+       AnNssmfUtils anNssmfUtils = new AnNssmfUtils()
+
+       private static final Logger logger = LoggerFactory.getLogger(DoModifyRanNfNssi.class)
+
+       @Override
+       void preProcessRequest(DelegateExecution execution) {
+               logger.debug(Prefix + "preProcessRequest Start")
+               execution.setVariable("prefix", Prefix)
+               execution.setVariable("startTime", System.currentTimeMillis())
+               def msg
+               try {
+
+                       logger.debug("input variables : msoRequestId - "+execution.getVariable("msoRequestId")+
+                                       " globalSubscriberId - "+execution.getVariable("globalSubscriberId")+
+                                       " serviceInstanceID - "+execution.getVariable("serviceInstanceID")+
+                                       " subscriptionServiceType - "+execution.getVariable("subscriptionServiceType")+
+                                       " sliceProfileId - "+execution.getVariable("sliceProfileId")+
+                                       " snssaiList - "+execution.getVariable("snssaiList")+
+                                       " modifyAction - "+execution.getVariable("modifyAction"))
+
+                       //validate RAN NF slice subnet inputs
+
+                       String modifyAction = execution.getVariable("modifyAction")
+                       if (isBlank(modifyAction)) {
+                               msg = "Input modifyAction is null"
+                               logger.debug(msg)
+                               exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+                       } else {
+                               execution.setVariable("modifyAction", modifyAction)
+                               switch(modifyAction) {
+                                       case "allocate":
+                                               String sliceProfile = execution.getVariable("additionalProperties")
+                                               execution.setVariable("sliceProfile", sliceProfile)
+                                               break
+                                       case "reconfigure":
+                                               String resourceConfig = execution.getVariable("additionalProperties")
+                                               execution.setVariable("resourceConfig", resourceConfig)
+                                               break
+                                       default:
+                                               logger.debug("Invalid modify Action")
+                                               exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Invalid modify Action : "+modifyAction)
+                               }
+                       }
+                       List<String> snssaiList = objectMapper.readValue(execution.getVariable("snssaiList"), List.class)
+                       String sliceProfileId = execution.getVariable("sliceProfileId")
+                       if (isBlank(sliceProfileId) || (snssaiList.empty)) {
+                               msg = "Mandatory fields are empty"
+                               logger.debug(msg)
+                               exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+                       } else {
+                               execution.setVariable("sliceProfileId", sliceProfileId)
+                               execution.setVariable("snssaiList", snssaiList)
+                               execution.setVariable("snssai", snssaiList.get(0))
+                       }
+                       
+               } catch(BpmnError e) {
+                       throw e
+               } catch(Exception ex) {
+                       msg = "Exception in DoModifyAccessNssi.preProcessRequest " + ex.getMessage()
+                       logger.debug(msg)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+               }
+               logger.debug(Prefix + "preProcessRequest Exit")
+       }
+       
+       def createSdnrRequest = { DelegateExecution execution ->
+               logger.debug(Prefix+"createSdnrRequest method start")
+               String callbackUrl = UrnPropertiesReader.getVariable("mso.workflow.message.endpoint") + "/AsyncSdnrResponse/"+execution.getVariable("msoRequestId")
+               String modifyAction = execution.getVariable("modifyAction")
+               String sdnrRequest = buildSdnrAllocateRequest(execution, modifyAction, "InstantiateRANSlice", callbackUrl)
+               execution.setVariable("createNSSI_sdnrRequest", sdnrRequest)
+               execution.setVariable("createNSSI_timeout", "PT10M")
+               execution.setVariable("createNSSI_correlator", execution.getVariable("msoRequestId"))
+               execution.setVariable("createNSSI_messageType", "AsyncSdnrResponse");
+       }
+       
+       def processSdnrResponse = { DelegateExecution execution ->
+               logger.debug(Prefix+"processSdnrResponse method start")
+               String SDNRResponse = execution.getVariable("SDNR_asyncCallbackResponse")
+               String status = jsonUtil.getJsonValue(SDNRResponse, "status")
+               if(status.equalsIgnoreCase("success")) {
+                       String nfIds = jsonUtil.getJsonValue(SDNRResponse, "nfIds")
+                       execution.setVariable("ranNfIdsJson", nfIds)
+               }else {
+                       String reason = jsonUtil.getJsonValue(SDNRResponse, "reason")
+                       logger.error("received failed status from SDNR "+ reason)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000,"received failed status from SDNR "+ reason)
+               }
+               logger.debug("response from SDNR "+SDNRResponse)
+       }
+       
+       private String buildSdnrAllocateRequest(DelegateExecution execution, String action, String rpcName, String callbackUrl) {
+               
+               String requestId = execution.getVariable("msoRequestId")
+               Date date = new Date().getTime()
+               Timestamp time = new Timestamp(date)
+               String sliceProfileString
+               JsonObject response = new JsonObject()
+               JsonObject body = new JsonObject()
+               JsonObject input = new JsonObject()
+               JsonObject commonHeader = new JsonObject()
+               JsonObject payload = new JsonObject()
+               JsonObject payloadInput = new JsonObject()
+               if(action.equals("allocate")) {
+                       Map<String,Object> sliceProfile = objectMapper.readValue(execution.getVariable("sliceProfile"), Map.class)
+                       sliceProfile.put("sliceProfileId", execution.getVariable("sliceProfileId"))
+                       sliceProfile.put("maxNumberofConns", sliceProfile.get("maxNumberofPDUSessions"))
+                       sliceProfile.put("uLThptPerSlice", sliceProfile.get("expDataRateUL"))
+                       sliceProfile.put("dLThptPerSlice", sliceProfile.get("expDataRateDL"))
+                       sliceProfileString = objectMapper.writeValueAsString(sliceProfile)
+                       action = "modify-"+action
+                       payloadInput.add("additionalproperties", new JsonObject())
+               }else if(action.equals("deallocate")) {
+                       action = "modify-"+action
+                       Map<String,Object> sliceProfile = new HashMap<>()
+                       sliceProfile.put("sliceProfileId", execution.getVariable("sliceProfileId"))
+                       sliceProfile.put("sNSSAI", execution.getVariable("snssai"))
+                       sliceProfileString = objectMapper.writeValueAsString(sliceProfile)
+                       payloadInput.add("additionalproperties", new JsonObject())
+               }else if(action.equals("reconfigure")) {
+                       Map<String,Object> sliceProfile = new HashMap<>()
+                       sliceProfile.put("sliceProfileId", execution.getVariable("sliceProfileId"))
+                       sliceProfile.put("sNSSAI", execution.getVariable("snssai"))
+                       sliceProfileString = objectMapper.writeValueAsString(sliceProfile)
+                       JsonObject resourceconfig = new JsonObject()
+                       resourceconfig.addProperty("resourceConfig", execution.getVariable("resourceConfig"))
+                       payloadInput.add("additionalproperties", resourceconfig)
+               }
+               commonHeader.addProperty("TimeStamp", time.toString())
+               commonHeader.addProperty("APIver", "1.0")
+               commonHeader.addProperty("RequestID", requestId)
+               commonHeader.addProperty("SubRequestID", "1")
+               commonHeader.add("RequestTrack", new JsonObject())
+               commonHeader.add("Flags", new JsonObject())
+               payloadInput.addProperty("sliceProfile", sliceProfileString)
+               payloadInput.addProperty("RANNFNSSIId", execution.getVariable("serviceInstanceID"))
+               payloadInput.addProperty("callbackURL", callbackUrl)
+               payload.add("input", payloadInput)
+               input.add("CommonHeader", commonHeader)
+               input.addProperty("Action", action)
+               input.add("Payload", payload)
+               body.add("input", input)
+               response.add("body", body)
+               response.addProperty("version", "1.0")
+               response.addProperty("rpc-name", rpcName)
+               response.addProperty("correlation-id", requestId+"-1")
+               response.addProperty("type", "request")
+               return response.toString()
+       }
+       
+}
\ No newline at end of file
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyAccessNSSI.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyAccessNSSI.bpmn
new file mode 100644 (file)
index 0000000..c62b143
--- /dev/null
@@ -0,0 +1,886 @@
+<?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:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1igy8ns" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.1">
+  <bpmn:process id="DoModifyAccessNSSI" name="DoModifyAccessNSSI" isExecutable="true">
+    <bpmn:startEvent id="Event_1sy6p6u" name="Start">
+      <bpmn:outgoing>Flow_1yfvjui</bpmn:outgoing>
+    </bpmn:startEvent>
+    <bpmn:scriptTask id="Activity_1eiktpg" name="preprocess request" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1yfvjui</bpmn:incoming>
+      <bpmn:outgoing>Flow_09sxq6k</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.preProcessRequest(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_00u5sgf" name="prepare OOF request for RAN NSS slice profiles" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0hzibw4</bpmn:incoming>
+      <bpmn:outgoing>Flow_0714cfa</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.prepareOofRequestForRanNSS(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:callActivity id="Activity_1qswyrk" name="Call DoCreateSubnetOption" calledElement="DoHandleOofRequest">
+      <bpmn:extensionElements>
+        <camunda:in source="nssiSelection_Url" target="apiPath" />
+        <camunda:in source="nssiSelection_correlator" target="correlator" />
+        <camunda:in source="nssiSelection_messageType" target="messageType" />
+        <camunda:in source="nssiSelection_timeout" target="timeout" />
+        <camunda:in source="nssiSelection_oofRequest" target="oofRequest" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:out source="asyncCallbackResponse" target="nssiSelection_asyncCallbackResponse" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_0714cfa</bpmn:incoming>
+      <bpmn:outgoing>Flow_0ei9866</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_1w537ie" name="Process OOF response" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0ei9866</bpmn:incoming>
+      <bpmn:outgoing>Flow_14xj79h</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.processOofResponseForRanNSS(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_1yfvjui" sourceRef="Event_1sy6p6u" targetRef="Activity_1eiktpg" />
+    <bpmn:sequenceFlow id="Flow_0714cfa" sourceRef="Activity_00u5sgf" targetRef="Activity_1qswyrk" />
+    <bpmn:sequenceFlow id="Flow_0ei9866" sourceRef="Activity_1qswyrk" targetRef="Activity_1w537ie" />
+    <bpmn:exclusiveGateway id="Gateway_0gi40v8" name="check modify action">
+      <bpmn:incoming>Flow_09sxq6k</bpmn:incoming>
+      <bpmn:outgoing>Flow_1ycw1zo</bpmn:outgoing>
+      <bpmn:outgoing>Flow_1orjrjp</bpmn:outgoing>
+      <bpmn:outgoing>Flow_1p5ruyv</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="Flow_1ycw1zo" name="allocate" sourceRef="Gateway_0gi40v8" targetRef="Activity_0vki9dw">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isModifyallocate" )  == true)}</bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:sequenceFlow id="Flow_1orjrjp" name="deallocate" sourceRef="Gateway_0gi40v8" targetRef="Activity_10zcvcv">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isModifydeallocate" )  == true)}</bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:scriptTask id="Activity_0vki9dw" name="query AAI for slice profile" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1ycw1zo</bpmn:incoming>
+      <bpmn:outgoing>Flow_1ym755g</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.getSliceProfile(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_14xj79h" sourceRef="Activity_1w537ie" targetRef="Activity_0c8tzf1" />
+    <bpmn:sequenceFlow id="Flow_1p5ruyv" name="reconfigure" sourceRef="Gateway_0gi40v8" targetRef="Activity_0kcrid0">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isModifyreconfigure" )  == true)}</bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:scriptTask id="Activity_0c8tzf1" name="get NSSIs from AAI" scriptFormat="groovy">
+      <bpmn:incoming>Flow_14xj79h</bpmn:incoming>
+      <bpmn:outgoing>Flow_1fpw4gf</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.getNssisFromAai(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_1fpw4gf" sourceRef="Activity_0c8tzf1" targetRef="Activity_1so8vif" />
+    <bpmn:sequenceFlow id="Flow_05cl21h" sourceRef="Activity_1so8vif" targetRef="Activity_0uxxkp1" />
+    <bpmn:scriptTask id="Activity_0uxxkp1" name="update AAI relationships">
+      <bpmn:incoming>Flow_05cl21h</bpmn:incoming>
+      <bpmn:outgoing>Flow_1jwk3jy</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.updateRelationshipInAai(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_1so8vif" name="create slice profiles in AAI" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1fpw4gf</bpmn:incoming>
+      <bpmn:outgoing>Flow_05cl21h</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.createSliceProfiles(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_1jwk3jy" sourceRef="Activity_0uxxkp1" targetRef="Event_1wm97cy" />
+    <bpmn:intermediateThrowEvent id="Event_1wm97cy" name="Go to modify allocate">
+      <bpmn:incoming>Flow_1jwk3jy</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_02uw07i" name="modifyAllocate" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:intermediateCatchEvent id="Event_058xrlc" name="Modify allocate">
+      <bpmn:outgoing>Flow_06hymr5</bpmn:outgoing>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_0j8kv6s" name="modifyAllocate" />
+    </bpmn:intermediateCatchEvent>
+    <bpmn:callActivity id="Activity_1nexxhu" name="DoModifyRanNfNssi" calledElement="DoModifyRanNfNssi">
+      <bpmn:extensionElements>
+        <camunda:in source="msoRequestId" target="msoRequestId" />
+        <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
+        <camunda:in source="ANNF_NSSI" target="serviceInstanceID" />
+        <camunda:in source="subscriptionServiceType" target="subscriptionServiceType" />
+        <camunda:in source="ANNF_sliceProfileInstanceId" target="sliceProfileId" />
+        <camunda:in source="snssaiList" target="snssaiList" />
+        <camunda:out source="ranNfStatus" target="ranNfStatus" />
+        <camunda:in source="modifyAction" target="modifyAction" />
+        <camunda:in source="ranNfSliceProfile" target="additionalProperties" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_06hymr5</bpmn:incoming>
+      <bpmn:outgoing>Flow_19p3d5t</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_1rweifb" name="post process RAN NF NSSI modify" scriptFormat="groovy">
+      <bpmn:incoming>Flow_19p3d5t</bpmn:incoming>
+      <bpmn:outgoing>Flow_0t8y3x5</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.processRanNfModifyRsp(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_19p3d5t" sourceRef="Activity_1nexxhu" targetRef="Activity_1rweifb" />
+    <bpmn:sequenceFlow id="Flow_06hymr5" sourceRef="Event_058xrlc" targetRef="Activity_1nexxhu" />
+    <bpmn:scriptTask id="Activity_0dr4umy" name="send modify allocate FH NSSI request" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0t8y3x5</bpmn:incoming>
+      <bpmn:outgoing>Flow_0cd38vb</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.prepareTnFhRequest(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_0e0ldfk" name="prepare query job status" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0cd38vb</bpmn:incoming>
+      <bpmn:outgoing>Flow_1yfkps3</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.createFhAllocateNssiJobQuery(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:callActivity id="Activity_07kzsym" name="Query Job status" calledElement="QueryJobStatus ">
+      <bpmn:extensionElements>
+        <camunda:in source="esrInfo" target="esrInfo" />
+        <camunda:in source="serviceInfo" target="serviceInfo" />
+        <camunda:in source="TNFH_jobId" target="jobId" />
+        <camunda:out source="jobResponse" target="TNFH_jobResponse" />
+        <camunda:in source="responseId" target="responseId" />
+        <camunda:in source="job_timeout" target="timeout" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_1yfkps3</bpmn:incoming>
+      <bpmn:outgoing>Flow_0tkrh8z</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_06pgtv8" name="process Job status response" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0tkrh8z</bpmn:incoming>
+      <bpmn:outgoing>Flow_0ygfojp</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.processFhAllocateNssiJobStatusRsp(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_0cd38vb" sourceRef="Activity_0dr4umy" targetRef="Activity_0e0ldfk" />
+    <bpmn:sequenceFlow id="Flow_1yfkps3" sourceRef="Activity_0e0ldfk" targetRef="Activity_07kzsym" />
+    <bpmn:sequenceFlow id="Flow_0tkrh8z" sourceRef="Activity_07kzsym" targetRef="Activity_06pgtv8" />
+    <bpmn:sequenceFlow id="Flow_0t8y3x5" sourceRef="Activity_1rweifb" targetRef="Activity_0dr4umy" />
+    <bpmn:scriptTask id="Activity_11ohmvk" name="send modify allocate MH NSSI request" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0ygfojp</bpmn:incoming>
+      <bpmn:outgoing>Flow_1702ljm</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.prepareTnMhRequest(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_11kv5jk" name="prepare query job status" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1702ljm</bpmn:incoming>
+      <bpmn:outgoing>Flow_1hzswil</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.createMhAllocateNssiJobQuery(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:callActivity id="Activity_031x96n" name="Query Job status" calledElement="QueryJobStatus ">
+      <bpmn:extensionElements>
+        <camunda:in source="esrInfo" target="esrInfo" />
+        <camunda:in source="serviceInfo" target="serviceInfo" />
+        <camunda:in source="TNMH_jobId" target="jobId" />
+        <camunda:out source="jobResponse" target="TNMH_jobResponse" />
+        <camunda:in source="responseId" target="responseId" />
+        <camunda:in source="job_timeout" target="timeout" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_1hzswil</bpmn:incoming>
+      <bpmn:outgoing>Flow_0zh5p33</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_1x48i50" name="process Job status response" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0zh5p33</bpmn:incoming>
+      <bpmn:outgoing>Flow_0wgumc4</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.processMhAllocateNssiJobStatusRsp(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_1702ljm" sourceRef="Activity_11ohmvk" targetRef="Activity_11kv5jk" />
+    <bpmn:sequenceFlow id="Flow_1hzswil" sourceRef="Activity_11kv5jk" targetRef="Activity_031x96n" />
+    <bpmn:sequenceFlow id="Flow_0zh5p33" sourceRef="Activity_031x96n" targetRef="Activity_1x48i50" />
+    <bpmn:sequenceFlow id="Flow_0ygfojp" sourceRef="Activity_06pgtv8" targetRef="Activity_11ohmvk" />
+    <bpmn:callActivity id="Activity_1pqb2g0" name="DoModifyRanNfNssi" calledElement="DoModifyRanNfNssi">
+      <bpmn:extensionElements>
+        <camunda:in source="msoRequestId" target="msoRequestId" />
+        <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
+        <camunda:in source="ANNF_NSSI" target="serviceInstanceID" />
+        <camunda:in source="subscriptionServiceType" target="subscriptionServiceType" />
+        <camunda:in source="ANNF_sliceProfileInstanceId" target="sliceProfileId" />
+        <camunda:in source="snssaiList" target="snssaiList" />
+        <camunda:out source="ranNfStatus" target="ranNfStatus" />
+        <camunda:in source="modifyAction" target="modifyAction" />
+        <camunda:in source="additionalProperties" target="additionalProperties" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_09p79e6</bpmn:incoming>
+      <bpmn:outgoing>Flow_0ks2ut4</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_0mleulg" name="post process RAN NF NSSI modify" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0ks2ut4</bpmn:incoming>
+      <bpmn:outgoing>Flow_1mu3zgb</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.processRanNfModifyRsp(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_0ks2ut4" sourceRef="Activity_1pqb2g0" targetRef="Activity_0mleulg" />
+    <bpmn:scriptTask id="Activity_1xdke18" name="send modify deallocate FH NSSI request" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1mu3zgb</bpmn:incoming>
+      <bpmn:outgoing>Flow_01vilkh</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.prepareTnFhDeallocateRequest(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_06meubi" name="prepare query job status" scriptFormat="groovy">
+      <bpmn:incoming>Flow_01vilkh</bpmn:incoming>
+      <bpmn:outgoing>Flow_0r7bejs</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.createFhAllocateNssiJobQuery(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:callActivity id="Activity_0sjyngn" name="Query Job status" calledElement="QueryJobStatus ">
+      <bpmn:extensionElements>
+        <camunda:in source="esrInfo" target="esrInfo" />
+        <camunda:in source="serviceInfo" target="serviceInfo" />
+        <camunda:in source="TN_FH_jobId" target="jobId" />
+        <camunda:out source="jobResponse" target="TNFH_jobResponse" />
+        <camunda:in source="responseId" target="responseId" />
+        <camunda:in source="job_timeout" target="timeout" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_0r7bejs</bpmn:incoming>
+      <bpmn:outgoing>Flow_06lgxk9</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_0j3bxt8" name="process Job status response" scriptFormat="groovy">
+      <bpmn:incoming>Flow_06lgxk9</bpmn:incoming>
+      <bpmn:outgoing>Flow_120fe2z</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.processFhAllocateNssiJobStatusRsp(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_01vilkh" sourceRef="Activity_1xdke18" targetRef="Activity_06meubi" />
+    <bpmn:sequenceFlow id="Flow_0r7bejs" sourceRef="Activity_06meubi" targetRef="Activity_0sjyngn" />
+    <bpmn:sequenceFlow id="Flow_06lgxk9" sourceRef="Activity_0sjyngn" targetRef="Activity_0j3bxt8" />
+    <bpmn:sequenceFlow id="Flow_1mu3zgb" sourceRef="Activity_0mleulg" targetRef="Activity_1xdke18" />
+    <bpmn:scriptTask id="Activity_10zcvcv" name="get NSSIs from AAI" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1orjrjp</bpmn:incoming>
+      <bpmn:outgoing>Flow_1atfnov</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.getNssisFromAai(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_0m97fsi" name="send modify deallocate MH NSSI request" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1489mpe</bpmn:incoming>
+      <bpmn:outgoing>Flow_1ueq9wo</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.prepareTnMhDeallocateRequest(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_1wwt0yj" name="prepare query job status" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1ueq9wo</bpmn:incoming>
+      <bpmn:outgoing>Flow_05junp8</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.createMhAllocateNssiJobQuery(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:callActivity id="Activity_18gqpmg" name="Query Job status" calledElement="QueryJobStatus ">
+      <bpmn:extensionElements>
+        <camunda:in source="esrInfo" target="esrInfo" />
+        <camunda:in source="serviceInfo" target="serviceInfo" />
+        <camunda:in source="TN_MH_jobId" target="jobId" />
+        <camunda:out source="jobResponse" target="TNMH_jobResponse" />
+        <camunda:in source="responseId" target="responseId" />
+        <camunda:in source="job_timeout" target="timeout" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_05junp8</bpmn:incoming>
+      <bpmn:outgoing>Flow_1xchogr</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_1j4c00v" name="process Job status response" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1xchogr</bpmn:incoming>
+      <bpmn:outgoing>Flow_11aacst</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.processMhAllocateNssiJobStatusRsp(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_1ueq9wo" sourceRef="Activity_0m97fsi" targetRef="Activity_1wwt0yj" />
+    <bpmn:sequenceFlow id="Flow_05junp8" sourceRef="Activity_1wwt0yj" targetRef="Activity_18gqpmg" />
+    <bpmn:sequenceFlow id="Flow_1xchogr" sourceRef="Activity_18gqpmg" targetRef="Activity_1j4c00v" />
+    <bpmn:sequenceFlow id="Flow_120fe2z" sourceRef="Activity_0j3bxt8" targetRef="Event_1x3sb7x" />
+    <bpmn:intermediateThrowEvent id="Event_1x3sb7x" name="Go to modify deallocate">
+      <bpmn:incoming>Flow_120fe2z</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_1wixp6w" name="modifydeAllocate" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:sequenceFlow id="Flow_16lc641" sourceRef="Event_1vdrrdl" targetRef="Activity_0w9oree" />
+    <bpmn:intermediateCatchEvent id="Event_1vdrrdl" name="Modify deallocate">
+      <bpmn:outgoing>Flow_16lc641</bpmn:outgoing>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_1aw5yul" name="modifydeAllocate" />
+    </bpmn:intermediateCatchEvent>
+    <bpmn:scriptTask id="Activity_09ku290" name="remove TN MH slice profile" scriptFormat="groovy">
+      <bpmn:incoming>Flow_11aacst</bpmn:incoming>
+      <bpmn:outgoing>Flow_05gp3p7</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.deleteMhSliceProfile(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_1489mpe" sourceRef="Activity_0w9oree" targetRef="Activity_0m97fsi" />
+    <bpmn:scriptTask id="Activity_0w9oree" name="remove TN FH slice profile" scriptFormat="groovy">
+      <bpmn:incoming>Flow_16lc641</bpmn:incoming>
+      <bpmn:outgoing>Flow_1489mpe</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.deleteFhSliceProfile(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_11aacst" sourceRef="Activity_1j4c00v" targetRef="Activity_09ku290" />
+    <bpmn:scriptTask id="Activity_121aiqf" name="remove RAN slice profile" scriptFormat="groovy">
+      <bpmn:incoming>Flow_05gp3p7</bpmn:incoming>
+      <bpmn:outgoing>Flow_1nyp1l1</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.deleteAnSliceProfile(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_05gp3p7" sourceRef="Activity_09ku290" targetRef="Activity_121aiqf" />
+    <bpmn:subProcess id="Activity_0sp6bx7" name="Sub-process for FalloutHandler and Rollback" triggeredByEvent="true">
+      <bpmn:startEvent id="Event_0gr296x">
+        <bpmn:outgoing>Flow_0yj2tlu</bpmn:outgoing>
+        <bpmn:errorEventDefinition id="ErrorEventDefinition_1do1xse" />
+      </bpmn:startEvent>
+      <bpmn:endEvent id="Event_1hq0k3q">
+        <bpmn:incoming>Flow_07c6g27</bpmn:incoming>
+      </bpmn:endEvent>
+      <bpmn:scriptTask id="Activity_1awhkox" name="Handle Unexpected Error" scriptFormat="groovy">
+        <bpmn:incoming>Flow_0dafrg8</bpmn:incoming>
+        <bpmn:outgoing>Flow_07c6g27</bpmn:outgoing>
+        <bpmn:script>import org.onap.so.bpmn.common.scripts.*
+ExceptionUtil ex = new ExceptionUtil()
+ex.processJavaException(execution)</bpmn:script>
+      </bpmn:scriptTask>
+      <bpmn:scriptTask id="Activity_16up0r1" name="Prepare Resource Operation Status Update" scriptFormat="groovy">
+        <bpmn:incoming>Flow_0yj2tlu</bpmn:incoming>
+        <bpmn:outgoing>Flow_0jar916</bpmn:outgoing>
+        <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
+      </bpmn:scriptTask>
+      <bpmn:serviceTask id="Activity_1h1crsr" 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_0jar916</bpmn:incoming>
+        <bpmn:outgoing>Flow_0dafrg8</bpmn:outgoing>
+      </bpmn:serviceTask>
+      <bpmn:sequenceFlow id="Flow_07c6g27" sourceRef="Activity_1awhkox" targetRef="Event_1hq0k3q" />
+      <bpmn:sequenceFlow id="Flow_0yj2tlu" sourceRef="Event_0gr296x" targetRef="Activity_16up0r1" />
+      <bpmn:sequenceFlow id="Flow_0jar916" sourceRef="Activity_16up0r1" targetRef="Activity_1h1crsr" />
+      <bpmn:sequenceFlow id="Flow_0dafrg8" sourceRef="Activity_1h1crsr" targetRef="Activity_1awhkox" />
+    </bpmn:subProcess>
+    <bpmn:callActivity id="Activity_0kcrid0" name="DoModifyRanNfNssi" calledElement="DoModifyRanNfNssi">
+      <bpmn:extensionElements>
+        <camunda:in source="msoRequestId" target="msoRequestId" />
+        <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
+        <camunda:in source="serviceInstanceID" target="serviceInstanceID" />
+        <camunda:in source="subscriptionServiceType" target="subscriptionServiceType" />
+        <camunda:in source="sliceProfileId" target="sliceProfileId" />
+        <camunda:in source="snssaiList" target="snssaiList" />
+        <camunda:out source="ranNfStatus" target="ranNfStatus" />
+        <camunda:in source="modifyAction" target="modifyAction" />
+        <camunda:in source="additionalProperties" target="additionalProperties" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_1p5ruyv</bpmn:incoming>
+      <bpmn:outgoing>Flow_0fkl1gv</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_05m354s" name="post process RAN NF NSSI modify" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0fkl1gv</bpmn:incoming>
+      <bpmn:outgoing>Flow_17dxvu5</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.processRanNfModifyRsp(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_0fkl1gv" sourceRef="Activity_0kcrid0" targetRef="Activity_05m354s" />
+    <bpmn:sequenceFlow id="Flow_09sxq6k" sourceRef="Activity_1eiktpg" targetRef="Gateway_0gi40v8" />
+    <bpmn:scriptTask id="Activity_1w8iqt0" name="Get Subnet capabilities" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1ym755g</bpmn:incoming>
+      <bpmn:outgoing>Flow_0hzibw4</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.getSubnetCapabilities(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_1ym755g" sourceRef="Activity_0vki9dw" targetRef="Activity_1w8iqt0" />
+    <bpmn:sequenceFlow id="Flow_0hzibw4" sourceRef="Activity_1w8iqt0" targetRef="Activity_00u5sgf" />
+    <bpmn:scriptTask id="Activity_137i4pg" name="get sice profiles from AAI" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1atfnov</bpmn:incoming>
+      <bpmn:outgoing>Flow_09p79e6</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.getSliceProfilesFromAai(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_1atfnov" sourceRef="Activity_10zcvcv" targetRef="Activity_137i4pg" />
+    <bpmn:sequenceFlow id="Flow_09p79e6" sourceRef="Activity_137i4pg" targetRef="Activity_1pqb2g0" />
+    <bpmn:intermediateCatchEvent id="Event_00zdcuh" name="Start operation status update">
+      <bpmn:outgoing>Flow_0ei2q6r</bpmn:outgoing>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_1ohe6f7" name="OperationStatusUpdate" />
+    </bpmn:intermediateCatchEvent>
+    <bpmn:scriptTask id="Activity_0mr7bh2" name="Prepare Resource Operation Status Update" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0ei2q6r</bpmn:incoming>
+      <bpmn:outgoing>Flow_1giua78</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyAccessNSSI()
+nss.prepareOperationStatusUpdate(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:serviceTask id="Activity_125mjhq" 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_1giua78</bpmn:incoming>
+      <bpmn:outgoing>Flow_1oubjfe</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:endEvent id="Event_159m6y8">
+      <bpmn:incoming>Flow_1oubjfe</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:sequenceFlow id="Flow_1giua78" sourceRef="Activity_0mr7bh2" targetRef="Activity_125mjhq" />
+    <bpmn:sequenceFlow id="Flow_1oubjfe" sourceRef="Activity_125mjhq" targetRef="Event_159m6y8" />
+    <bpmn:intermediateThrowEvent id="Event_1gy8um0" name="Go to start  Â operation status update">
+      <bpmn:incoming>Flow_0wgumc4</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_0kburcf" name="OperationStatusUpdate" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:sequenceFlow id="Flow_0wgumc4" sourceRef="Activity_1x48i50" targetRef="Event_1gy8um0" />
+    <bpmn:sequenceFlow id="Flow_0ei2q6r" sourceRef="Event_00zdcuh" targetRef="Activity_0mr7bh2" />
+    <bpmn:intermediateThrowEvent id="Event_1304mrw" name="Go to start  Â operation status update">
+      <bpmn:incoming>Flow_1nyp1l1</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_1rrc1x9" name="OperationStatusUpdate" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:sequenceFlow id="Flow_1nyp1l1" sourceRef="Activity_121aiqf" targetRef="Event_1304mrw" />
+    <bpmn:intermediateThrowEvent id="Event_00vqmnl" name="Go to start  Â operation status update">
+      <bpmn:incoming>Flow_17dxvu5</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_158e1rq" name="OperationStatusUpdate" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:sequenceFlow id="Flow_17dxvu5" sourceRef="Activity_05m354s" targetRef="Event_00vqmnl" />
+  </bpmn:process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoModifyAccessNSSI">
+      <bpmndi:BPMNEdge id="Flow_09sxq6k_di" bpmnElement="Flow_09sxq6k">
+        <di:waypoint x="330" y="240" />
+        <di:waypoint x="395" y="240" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0fkl1gv_di" bpmnElement="Flow_0fkl1gv">
+        <di:waypoint x="620" y="120" />
+        <di:waypoint x="680" y="120" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_05gp3p7_di" bpmnElement="Flow_05gp3p7">
+        <di:waypoint x="1080" y="760" />
+        <di:waypoint x="1130" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_11aacst_di" bpmnElement="Flow_11aacst">
+        <di:waypoint x="940" y="760" />
+        <di:waypoint x="980" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1489mpe_di" bpmnElement="Flow_1489mpe">
+        <di:waypoint x="360" y="760" />
+        <di:waypoint x="400" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_16lc641_di" bpmnElement="Flow_16lc641">
+        <di:waypoint x="188" y="760" />
+        <di:waypoint x="260" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_120fe2z_di" bpmnElement="Flow_120fe2z">
+        <di:waypoint x="1610" y="380" />
+        <di:waypoint x="1652" y="380" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1xchogr_di" bpmnElement="Flow_1xchogr">
+        <di:waypoint x="780" y="760" />
+        <di:waypoint x="840" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_05junp8_di" bpmnElement="Flow_05junp8">
+        <di:waypoint x="640" y="760" />
+        <di:waypoint x="680" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1ueq9wo_di" bpmnElement="Flow_1ueq9wo">
+        <di:waypoint x="500" y="760" />
+        <di:waypoint x="540" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1mu3zgb_di" bpmnElement="Flow_1mu3zgb">
+        <di:waypoint x="1060" y="380" />
+        <di:waypoint x="1100" y="380" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_06lgxk9_di" bpmnElement="Flow_06lgxk9">
+        <di:waypoint x="1470" y="380" />
+        <di:waypoint x="1510" y="380" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0r7bejs_di" bpmnElement="Flow_0r7bejs">
+        <di:waypoint x="1330" y="380" />
+        <di:waypoint x="1370" y="380" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_01vilkh_di" bpmnElement="Flow_01vilkh">
+        <di:waypoint x="1200" y="380" />
+        <di:waypoint x="1230" y="380" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0ks2ut4_di" bpmnElement="Flow_0ks2ut4">
+        <di:waypoint x="920" y="380" />
+        <di:waypoint x="960" y="380" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0ygfojp_di" bpmnElement="Flow_0ygfojp">
+        <di:waypoint x="940" y="570" />
+        <di:waypoint x="960" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0zh5p33_di" bpmnElement="Flow_0zh5p33">
+        <di:waypoint x="1300" y="570" />
+        <di:waypoint x="1330" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1hzswil_di" bpmnElement="Flow_1hzswil">
+        <di:waypoint x="1180" y="570" />
+        <di:waypoint x="1200" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1702ljm_di" bpmnElement="Flow_1702ljm">
+        <di:waypoint x="1060" y="570" />
+        <di:waypoint x="1080" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0t8y3x5_di" bpmnElement="Flow_0t8y3x5">
+        <di:waypoint x="450" y="570" />
+        <di:waypoint x="480" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0tkrh8z_di" bpmnElement="Flow_0tkrh8z">
+        <di:waypoint x="820" y="570" />
+        <di:waypoint x="840" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1yfkps3_di" bpmnElement="Flow_1yfkps3">
+        <di:waypoint x="700" y="570" />
+        <di:waypoint x="720" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0cd38vb_di" bpmnElement="Flow_0cd38vb">
+        <di:waypoint x="580" y="570" />
+        <di:waypoint x="600" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_06hymr5_di" bpmnElement="Flow_06hymr5">
+        <di:waypoint x="188" y="570" />
+        <di:waypoint x="220" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_19p3d5t_di" bpmnElement="Flow_19p3d5t">
+        <di:waypoint x="320" y="570" />
+        <di:waypoint x="350" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1jwk3jy_di" bpmnElement="Flow_1jwk3jy">
+        <di:waypoint x="1620" y="240" />
+        <di:waypoint x="1652" y="240" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_05cl21h_di" bpmnElement="Flow_05cl21h">
+        <di:waypoint x="1480" y="240" />
+        <di:waypoint x="1520" y="240" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1fpw4gf_di" bpmnElement="Flow_1fpw4gf">
+        <di:waypoint x="1340" y="240" />
+        <di:waypoint x="1380" y="240" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1p5ruyv_di" bpmnElement="Flow_1p5ruyv">
+        <di:waypoint x="420" y="215" />
+        <di:waypoint x="420" y="120" />
+        <di:waypoint x="520" y="120" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="409" y="103" width="56" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_14xj79h_di" bpmnElement="Flow_14xj79h">
+        <di:waypoint x="1200" y="240" />
+        <di:waypoint x="1240" y="240" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1orjrjp_di" bpmnElement="Flow_1orjrjp">
+        <di:waypoint x="420" y="265" />
+        <di:waypoint x="420" y="380" />
+        <di:waypoint x="520" y="380" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="437" y="363" width="51" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1ycw1zo_di" bpmnElement="Flow_1ycw1zo">
+        <di:waypoint x="445" y="240" />
+        <di:waypoint x="520" y="240" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="463" y="222" width="39" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0ei9866_di" bpmnElement="Flow_0ei9866">
+        <di:waypoint x="1050" y="240" />
+        <di:waypoint x="1100" y="240" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0714cfa_di" bpmnElement="Flow_0714cfa">
+        <di:waypoint x="890" y="240" />
+        <di:waypoint x="950" y="240" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1yfvjui_di" bpmnElement="Flow_1yfvjui">
+        <di:waypoint x="188" y="240" />
+        <di:waypoint x="230" y="240" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1ym755g_di" bpmnElement="Flow_1ym755g">
+        <di:waypoint x="620" y="240" />
+        <di:waypoint x="660" y="240" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0hzibw4_di" bpmnElement="Flow_0hzibw4">
+        <di:waypoint x="760" y="240" />
+        <di:waypoint x="790" y="240" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1atfnov_di" bpmnElement="Flow_1atfnov">
+        <di:waypoint x="620" y="380" />
+        <di:waypoint x="670" y="380" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_09p79e6_di" bpmnElement="Flow_09p79e6">
+        <di:waypoint x="770" y="380" />
+        <di:waypoint x="820" y="380" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1giua78_di" bpmnElement="Flow_1giua78">
+        <di:waypoint x="340" y="920" />
+        <di:waypoint x="380" y="920" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1oubjfe_di" bpmnElement="Flow_1oubjfe">
+        <di:waypoint x="480" y="920" />
+        <di:waypoint x="512" y="920" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0wgumc4_di" bpmnElement="Flow_0wgumc4">
+        <di:waypoint x="1430" y="570" />
+        <di:waypoint x="1482" y="570" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0ei2q6r_di" bpmnElement="Flow_0ei2q6r">
+        <di:waypoint x="198" y="920" />
+        <di:waypoint x="240" y="920" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1nyp1l1_di" bpmnElement="Flow_1nyp1l1">
+        <di:waypoint x="1230" y="760" />
+        <di:waypoint x="1282" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_17dxvu5_di" bpmnElement="Flow_17dxvu5">
+        <di:waypoint x="780" y="120" />
+        <di:waypoint x="832" y="120" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="Event_1sy6p6u_di" bpmnElement="Event_1sy6p6u">
+        <dc:Bounds x="152" y="222" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="158" y="265" width="25" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_01kasfm_di" bpmnElement="Activity_1eiktpg">
+        <dc:Bounds x="230" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Gateway_0gi40v8_di" bpmnElement="Gateway_0gi40v8" isMarkerVisible="true">
+        <dc:Bounds x="395" y="215" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="347" y="265.5" width="65" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1djbf1x_di" bpmnElement="Activity_0vki9dw">
+        <dc:Bounds x="520" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_09vilc7_di" bpmnElement="Event_058xrlc">
+        <dc:Bounds x="152" y="552" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="133" y="595" width="74" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1nexxhu_di" bpmnElement="Activity_1nexxhu">
+        <dc:Bounds x="220" y="530" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1rweifb_di" bpmnElement="Activity_1rweifb">
+        <dc:Bounds x="350" y="530" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0dr4umy_di" bpmnElement="Activity_0dr4umy">
+        <dc:Bounds x="480" y="530" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0e0ldfk_di" bpmnElement="Activity_0e0ldfk">
+        <dc:Bounds x="600" y="530" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_07kzsym_di" bpmnElement="Activity_07kzsym">
+        <dc:Bounds x="720" y="530" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_06pgtv8_di" bpmnElement="Activity_06pgtv8">
+        <dc:Bounds x="840" y="530" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_11ohmvk_di" bpmnElement="Activity_11ohmvk">
+        <dc:Bounds x="960" y="530" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_11kv5jk_di" bpmnElement="Activity_11kv5jk">
+        <dc:Bounds x="1080" y="530" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_031x96n_di" bpmnElement="Activity_031x96n">
+        <dc:Bounds x="1200" y="530" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1x48i50_di" bpmnElement="Activity_1x48i50">
+        <dc:Bounds x="1330" y="530" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_10zcvcv_di" bpmnElement="Activity_10zcvcv">
+        <dc:Bounds x="520" y="340" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0m97fsi_di" bpmnElement="Activity_0m97fsi">
+        <dc:Bounds x="400" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1wwt0yj_di" bpmnElement="Activity_1wwt0yj">
+        <dc:Bounds x="540" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_18gqpmg_di" bpmnElement="Activity_18gqpmg">
+        <dc:Bounds x="680" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1j4c00v_di" bpmnElement="Activity_1j4c00v">
+        <dc:Bounds x="840" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_1uqka61_di" bpmnElement="Event_1vdrrdl">
+        <dc:Bounds x="152" y="742" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="127" y="785" width="86" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_09ku290_di" bpmnElement="Activity_09ku290">
+        <dc:Bounds x="980" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1de2pwc_di" bpmnElement="Activity_0w9oree">
+        <dc:Bounds x="260" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_06x7003_di" bpmnElement="Activity_121aiqf">
+        <dc:Bounds x="1130" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1w8iqt0_di" bpmnElement="Activity_1w8iqt0">
+        <dc:Bounds x="660" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_00u5sgf_di" bpmnElement="Activity_00u5sgf">
+        <dc:Bounds x="790" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1qswyrk_di" bpmnElement="Activity_1qswyrk">
+        <dc:Bounds x="950" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1w537ie_di" bpmnElement="Activity_1w537ie">
+        <dc:Bounds x="1100" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1yl3g1d_di" bpmnElement="Activity_0c8tzf1">
+        <dc:Bounds x="1240" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_12zdzs0_di" bpmnElement="Activity_1so8vif">
+        <dc:Bounds x="1380" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_1j6uaol_di" bpmnElement="Event_1wm97cy">
+        <dc:Bounds x="1652" y="222" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1639" y="265" width="63" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_07pdl82_di" bpmnElement="Activity_0uxxkp1">
+        <dc:Bounds x="1520" y="200" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_0p57tcv_di" bpmnElement="Event_1x3sb7x">
+        <dc:Bounds x="1652" y="362" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1642" y="405" width="63" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0j3bxt8_di" bpmnElement="Activity_0j3bxt8">
+        <dc:Bounds x="1510" y="340" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0sjyngn_di" bpmnElement="Activity_0sjyngn">
+        <dc:Bounds x="1370" y="340" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_06meubi_di" bpmnElement="Activity_06meubi">
+        <dc:Bounds x="1230" y="340" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1xdke18_di" bpmnElement="Activity_1xdke18">
+        <dc:Bounds x="1100" y="340" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0mleulg_di" bpmnElement="Activity_0mleulg">
+        <dc:Bounds x="960" y="340" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1pqb2g0_di" bpmnElement="Activity_1pqb2g0">
+        <dc:Bounds x="820" y="340" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_171ya99_di" bpmnElement="Activity_137i4pg">
+        <dc:Bounds x="670" y="340" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_00zdcuh_di" bpmnElement="Event_00zdcuh">
+        <dc:Bounds x="162" y="902" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="144" y="945" width="73" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0mr7bh2_di" bpmnElement="Activity_0mr7bh2">
+        <dc:Bounds x="240" y="880" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_125mjhq_di" bpmnElement="Activity_125mjhq">
+        <dc:Bounds x="380" y="880" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_159m6y8_di" bpmnElement="Event_159m6y8">
+        <dc:Bounds x="512" y="902" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_1gy8um0_di" bpmnElement="Event_1gy8um0">
+        <dc:Bounds x="1482" y="552" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1460" y="587" width="79" height="40" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_1304mrw_di" bpmnElement="Event_1304mrw">
+        <dc:Bounds x="1282" y="742" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1260" y="777" width="79" height="40" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0kcrid0_di" bpmnElement="Activity_0kcrid0">
+        <dc:Bounds x="520" y="80" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_05m354s_di" bpmnElement="Activity_05m354s">
+        <dc:Bounds x="680" y="80" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_00vqmnl_di" bpmnElement="Event_00vqmnl">
+        <dc:Bounds x="832" y="102" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="810" y="137" width="79" height="40" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0sp6bx7_di" bpmnElement="Activity_0sp6bx7" isExpanded="true">
+        <dc:Bounds x="430" y="1070" width="781" height="196" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="Flow_0dafrg8_di" bpmnElement="Flow_0dafrg8">
+        <di:waypoint x="820" y="1174" />
+        <di:waypoint x="890" y="1174" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0jar916_di" bpmnElement="Flow_0jar916">
+        <di:waypoint x="660" y="1174" />
+        <di:waypoint x="720" y="1174" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0yj2tlu_di" bpmnElement="Flow_0yj2tlu">
+        <di:waypoint x="496" y="1174" />
+        <di:waypoint x="560" y="1174" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_07c6g27_di" bpmnElement="Flow_07c6g27">
+        <di:waypoint x="990" y="1174" />
+        <di:waypoint x="1098" y="1174" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="Event_0gr296x_di" bpmnElement="Event_0gr296x">
+        <dc:Bounds x="460" y="1156" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_1hq0k3q_di" bpmnElement="Event_1hq0k3q">
+        <dc:Bounds x="1098" y="1156" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1awhkox_di" bpmnElement="Activity_1awhkox">
+        <dc:Bounds x="890" y="1134" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_16up0r1_di" bpmnElement="Activity_16up0r1">
+        <dc:Bounds x="560" y="1134" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1h1crsr_di" bpmnElement="Activity_1h1crsr">
+        <dc:Bounds x="720" y="1134" width="100" height="80" />
+      </bpmndi:BPMNShape>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn:definitions>
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyRanNfNssi.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyRanNfNssi.bpmn
new file mode 100644 (file)
index 0000000..1af4ff9
--- /dev/null
@@ -0,0 +1,91 @@
+<?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:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0misy4e" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.1">
+  <bpmn:process id="DoModifyRanNfNssi" isExecutable="true">
+    <bpmn:startEvent id="StartEvent_1">
+      <bpmn:outgoing>Flow_0f9s9j7</bpmn:outgoing>
+    </bpmn:startEvent>
+    <bpmn:scriptTask id="Activity_0bbh5uy" name="preprocess request" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0f9s9j7</bpmn:incoming>
+      <bpmn:outgoing>Flow_1kdh0gl</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyRanNfNssi()
+nss.preProcessRequest(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_0f9s9j7" sourceRef="StartEvent_1" targetRef="Activity_0bbh5uy" />
+    <bpmn:sequenceFlow id="Flow_1kdh0gl" sourceRef="Activity_0bbh5uy" targetRef="Activity_1rs1l5c" />
+    <bpmn:scriptTask id="Activity_1rs1l5c" name="prepare SDNR request" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1kdh0gl</bpmn:incoming>
+      <bpmn:outgoing>Flow_0n0zzp4</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyRanNfNssi()
+nss.createSdnrRequest(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:callActivity id="Activity_1jpoqws" name="call sdnr for RAN NF NSSI creation" calledElement="DoHandleSdnrDmaapRequest">
+      <bpmn:extensionElements>
+        <camunda:in source="createNSSI_sdnrRequest" target="sdnrRequest" />
+        <camunda:out source="asyncCallbackResponse" target="SDNR_asyncCallbackResponse" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:in source="createNSSI_correlator" target="correlator" />
+        <camunda:in source="createNSSI_messageType" target="messageType" />
+        <camunda:in source="createNSSI_timeout" target="timeout" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_0n0zzp4</bpmn:incoming>
+      <bpmn:outgoing>Flow_1b0cez1</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_03xcmka" name="process SDNR response" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1b0cez1</bpmn:incoming>
+      <bpmn:outgoing>Flow_1ngijid</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def nss = new DoModifyRanNfNssi()
+nss.processSdnrResponse(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_0n0zzp4" sourceRef="Activity_1rs1l5c" targetRef="Activity_1jpoqws" />
+    <bpmn:sequenceFlow id="Flow_1b0cez1" sourceRef="Activity_1jpoqws" targetRef="Activity_03xcmka" />
+    <bpmn:sequenceFlow id="Flow_1ngijid" sourceRef="Activity_03xcmka" targetRef="Event_086qr2t" />
+    <bpmn:endEvent id="Event_086qr2t">
+      <bpmn:incoming>Flow_1ngijid</bpmn:incoming>
+    </bpmn:endEvent>
+  </bpmn:process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoModifyRanNfNssi">
+      <bpmndi:BPMNEdge id="Flow_1ngijid_di" bpmnElement="Flow_1ngijid">
+        <di:waypoint x="730" y="100" />
+        <di:waypoint x="772" y="100" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1b0cez1_di" bpmnElement="Flow_1b0cez1">
+        <di:waypoint x="590" y="100" />
+        <di:waypoint x="630" y="100" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0n0zzp4_di" bpmnElement="Flow_0n0zzp4">
+        <di:waypoint x="460" y="100" />
+        <di:waypoint x="490" y="100" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1kdh0gl_di" bpmnElement="Flow_1kdh0gl">
+        <di:waypoint x="320" y="100" />
+        <di:waypoint x="360" y="100" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0f9s9j7_di" bpmnElement="Flow_0f9s9j7">
+        <di:waypoint x="188" y="100" />
+        <di:waypoint x="220" y="100" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
+        <dc:Bounds x="152" y="82" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0bbh5uy_di" bpmnElement="Activity_0bbh5uy">
+        <dc:Bounds x="220" y="60" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1rs1l5c_di" bpmnElement="Activity_1rs1l5c">
+        <dc:Bounds x="360" y="60" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1jpoqws_di" bpmnElement="Activity_1jpoqws">
+        <dc:Bounds x="490" y="60" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_03xcmka_di" bpmnElement="Activity_03xcmka">
+        <dc:Bounds x="630" y="60" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_086qr2t_di" bpmnElement="Event_086qr2t">
+        <dc:Bounds x="772" y="82" width="36" height="36" />
+      </bpmndi:BPMNShape>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn:definitions>