Add feature to Support NSMF based TN slices 22/124322/4
authorkrishnaa96 <krishna.moorthy6@wipro.com>
Fri, 17 Sep 2021 08:31:07 +0000 (14:01 +0530)
committerkrishnaa96 <krishna.moorthy6@wipro.com>
Tue, 12 Oct 2021 14:11:04 +0000 (19:41 +0530)
Issue-ID: SO-3764
Signed-off-by: krishnaa96 <krishna.moorthy6@wipro.com>
Change-Id: I57f6db8fab6cbd0032f58ca8254d3f93d7a78147

13 files changed:
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceInstance.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy
bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateSliceService.bpmn
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateAccessNSSI.bpmn
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateNSIandNSSI.bpmn
common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java
common/src/main/java/org/onap/so/beans/nsmf/SliceTaskParamsAdapter.java
common/src/main/java/org/onap/so/beans/nsmf/oof/SubnetType.java

index 07a2348..f17bfc2 100644 (file)
@@ -153,6 +153,52 @@ public void createDomainWiseSliceProfiles(List<String> ranConstituentSliceProfil
 
 public void createSliceProfilesInAai(DelegateExecution execution) {
        
+       String serviceCategory = execution.getVariable("serviceCategory")
+       if (execution.getVariable("IsRANNfAlonePresent")) {
+               ServiceInstance ANNF_sliceProfileInstance = new ServiceInstance();
+               String ANNF_sliceProfileInstanceId = UUID.randomUUID().toString()
+               String ANNF_sliceProfileId = UUID.randomUUID().toString()
+               execution.setVariable("ANNF_sliceProfileInstanceId", ANNF_sliceProfileInstanceId)
+               execution.setVariable("ANNF_sliceProfileId", ANNF_sliceProfileId)
+               SliceProfiles ANNF_SliceProfiles = new SliceProfiles()
+               SliceProfile ANNF_SliceProfile = createSliceProfile("AN_NF", execution)
+               ANNF_SliceProfiles.getSliceProfile().add(ANNF_SliceProfile)
+               logger.debug("sliceProfiles : 1. " + ANNF_SliceProfiles.toString())
+               //ANNF slice profile instance creation
+               ANNF_sliceProfileInstance.setServiceInstanceId(ANNF_sliceProfileInstanceId)
+               String sliceInstanceName = "sliceprofile_" + ANNF_sliceProfileId
+               ANNF_sliceProfileInstance.setServiceInstanceName(sliceInstanceName)
+               String serviceType = execution.getVariable("sst") as String
+               ANNF_sliceProfileInstance.setServiceType(serviceType)
+               String serviceStatus = "deactivated"
+               ANNF_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
+               String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile") as String, "pLMNIdList")
+               ANNF_sliceProfileInstance.setServiceInstanceLocationId(jsonUtil.StringArrayToList(serviceInstanceLocationid).get(0))
+               String serviceRole = "slice-profile-instance"
+               ANNF_sliceProfileInstance.setServiceRole(serviceRole)
+               ArrayList<String> snssaiList = jsonUtil.StringArrayToList(execution.getVariable("snssaiList") as String)
+               String snssai = snssaiList.get(0)
+               ANNF_sliceProfileInstance.setEnvironmentContext(snssai)
+               ANNF_sliceProfileInstance.setWorkloadContext("AN_NF")
+               ANNF_sliceProfileInstance.setSliceProfiles(ANNF_SliceProfiles)
+               String serviceFunctionAnnf = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile") as String, "resourceSharingLevel")
+               ANNF_sliceProfileInstance.setServiceFunction(serviceFunctionAnnf)
+               logger.debug("completed ANNF sliceprofileinstance build : " + ANNF_sliceProfileInstance.toString())
+               String msg = ""
+               try {
+
+                       AAIResourcesClient client = new AAIResourcesClient()
+                       AAIResourceUri sliceProfileUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId") as String).serviceSubscription(execution.getVariable("subscriptionServiceType") as String).serviceInstance(ANNF_sliceProfileInstanceId))
+                       client.create(sliceProfileUri, ANNF_sliceProfileInstance)
+               } catch (BpmnError e) {
+                       throw e
+               } catch (Exception ex) {
+                       msg = "Exception in AnNssmfUtils.createSliceProfilesInAai " + ex.getMessage()
+                       logger.info(msg)
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+               }
+       }
+else{
        org.onap.aai.domain.yang.ServiceInstance ANNF_sliceProfileInstance = new ServiceInstance();
        org.onap.aai.domain.yang.ServiceInstance TNFH_sliceProfileInstance = new ServiceInstance();
        org.onap.aai.domain.yang.ServiceInstance TNMH_sliceProfileInstance = new ServiceInstance();
@@ -163,12 +209,12 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        String TNFH_sliceProfileId = UUID.randomUUID().toString()
        String TNMH_sliceProfileInstanceId = UUID.randomUUID().toString()
        String TNMH_sliceProfileId = UUID.randomUUID().toString()
-       execution.setVariable("ANNF_sliceProfileInstanceId",ANNF_sliceProfileInstanceId)
-       execution.setVariable("ANNF_sliceProfileId",ANNF_sliceProfileId)
-       execution.setVariable("TNFH_sliceProfileInstanceId",TNFH_sliceProfileInstanceId)
-       execution.setVariable("TNFH_sliceProfileId",TNFH_sliceProfileId)
-       execution.setVariable("TNMH_sliceProfileInstanceId",TNMH_sliceProfileInstanceId)
-       execution.setVariable("TNMH_sliceProfileId",TNMH_sliceProfileId)
+       execution.setVariable("ANNF_sliceProfileInstanceId", ANNF_sliceProfileInstanceId)
+       execution.setVariable("ANNF_sliceProfileId", ANNF_sliceProfileId)
+       execution.setVariable("TNFH_sliceProfileInstanceId", TNFH_sliceProfileInstanceId)
+       execution.setVariable("TNFH_sliceProfileId", TNFH_sliceProfileId)
+       execution.setVariable("TNMH_sliceProfileInstanceId", TNMH_sliceProfileInstanceId)
+       execution.setVariable("TNMH_sliceProfileId", TNMH_sliceProfileId)
        //slice profiles assignment
        org.onap.aai.domain.yang.SliceProfiles ANNF_SliceProfiles = new SliceProfiles()
        org.onap.aai.domain.yang.SliceProfiles TNFH_SliceProfiles = new SliceProfiles()
@@ -177,17 +223,17 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        org.onap.aai.domain.yang.SliceProfile TNFH_SliceProfile = new SliceProfile()
        org.onap.aai.domain.yang.SliceProfile TNMH_SliceProfile = new SliceProfile()
        ANNF_SliceProfile = createSliceProfile("AN_NF", execution)
-       TNFH_SliceProfile = createSliceProfile("TN_FH",execution)
-       TNMH_SliceProfile = createSliceProfile("TN_MH",execution)
-       
+       TNFH_SliceProfile = createSliceProfile("TN_FH", execution)
+       TNMH_SliceProfile = createSliceProfile("TN_MH", execution)
+
        ANNF_SliceProfiles.getSliceProfile().add(ANNF_SliceProfile)
        TNFH_SliceProfiles.getSliceProfile().add(TNFH_SliceProfile)
        TNMH_SliceProfiles.getSliceProfile().add(TNMH_SliceProfile)
-       
-       logger.debug("sliceProfiles : 1. "+ANNF_SliceProfiles.toString()+"\n 2. "+TNFH_SliceProfiles.toString()+"\n 3. "+TNMH_SliceProfiles.toString())
+
+       logger.debug("sliceProfiles : 1. " + ANNF_SliceProfiles.toString() + "\n 2. " + TNFH_SliceProfiles.toString() + "\n 3. " + TNMH_SliceProfiles.toString())
        //ANNF slice profile instance creation
        ANNF_sliceProfileInstance.setServiceInstanceId(ANNF_sliceProfileInstanceId)
-       String sliceInstanceName = "sliceprofile_"+ANNF_sliceProfileId
+       String sliceInstanceName = "sliceprofile_" + ANNF_sliceProfileId
        ANNF_sliceProfileInstance.setServiceInstanceName(sliceInstanceName)
        String serviceType = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "sST")
        ANNF_sliceProfileInstance.setServiceType(serviceType)
@@ -197,18 +243,18 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
         ANNF_sliceProfileInstance.setServiceInstanceLocationId(jsonUtil.StringArrayToList(serviceInstanceLocationid).get(0))
        String serviceRole = "slice-profile-instance"
        ANNF_sliceProfileInstance.setServiceRole(serviceRole)
-        ArrayList<String> snssaiList = execution.getVariable("snssaiList")
+       ArrayList<String> snssaiList = jsonUtil.StringArrayToList(execution.getVariable("snssaiList") as String)
        String snssai = snssaiList.get(0)
        ANNF_sliceProfileInstance.setEnvironmentContext(snssai)
-       ANNF_sliceProfileInstance.setWorkloadContext("AN_NF")    
+       ANNF_sliceProfileInstance.setWorkloadContext("AN_NF")
        ANNF_sliceProfileInstance.setSliceProfiles(ANNF_SliceProfiles)
        String serviceFunctionAnnf = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "resourceSharingLevel")
        ANNF_sliceProfileInstance.setServiceFunction(serviceFunctionAnnf)
-       logger.debug("completed ANNF sliceprofileinstance build : "+ ANNF_sliceProfileInstance.toString())
+       logger.debug("completed ANNF sliceprofileinstance build :  "+ ANNF_sliceProfileInstance.toString())
        
        //TNFH slice profile instance creation
        TNFH_sliceProfileInstance.setServiceInstanceId(TNFH_sliceProfileInstanceId)
-       sliceInstanceName = "sliceprofile_"+TNFH_sliceProfileId
+       sliceInstanceName = "sliceprofile _ "+TNFH_sliceProfileId
        TNFH_sliceProfileInstance.setServiceInstanceName(sliceInstanceName)
        serviceType = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "sST")
        TNFH_sliceProfileInstance.setServiceType(serviceType)
@@ -221,11 +267,11 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        TNFH_sliceProfileInstance.setSliceProfiles(TNFH_SliceProfiles)
        String serviceFunctionTnFH = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "resourceSharingLevel")
        TNFH_sliceProfileInstance.setServiceFunction(serviceFunctionTnFH)
-       logger.debug("completed TNFH sliceprofileinstance build : "+TNFH_sliceProfileInstance)
+       logger.debug("completed TNFH sliceprofileinstance build :   "+TNFH_sliceProfileInstance)
        
        //TNMH slice profile instance creation
        TNMH_sliceProfileInstance.setServiceInstanceId(TNMH_sliceProfileInstanceId)
-       sliceInstanceName = "sliceprofile_"+TNMH_sliceProfileId
+       sliceInstanceName = "sliceprofile _ "+TNMH_sliceProfileId
        TNMH_sliceProfileInstance.setServiceInstanceName(sliceInstanceName)
        serviceType = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "sST")
        TNMH_sliceProfileInstance.setServiceType(serviceType)
@@ -238,7 +284,7 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        TNMH_sliceProfileInstance.setSliceProfiles(TNMH_SliceProfiles)
        String serviceFunctionTnMH = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "resourceSharingLevel")
        TNMH_sliceProfileInstance.setServiceFunction(serviceFunctionTnMH)
-       logger.debug("completed TNMH sliceprofileinstance build : "+TNMH_sliceProfileInstance)
+       logger.debug("completed TNMH sliceprofileinstance build :   "+TNMH_sliceProfileInstance)
        
        String msg = ""
        try {
@@ -260,6 +306,7 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
                logger.info(msg)
                exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
        }
+       }
 
 }
 private SliceProfile createSliceProfile(String domainType, DelegateExecution execution) {
@@ -439,10 +486,10 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
                String globalSubscriberId = execution.getVariable("globalSubscriberId")
                String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
-                List<String> sNssaiList =  execution.getVariable("snssaiList")
+                List<String> sNssaiList =  execution.getVariable("snssaiList") as List<String>
 
                DeAllocateNssi deallocateNssi = new DeAllocateNssi()
-               deallocateNssi.setNsiId(execution.getVariable("nsiId"))
+               deallocateNssi.setNsiId(execution.getVariable("nsiId") as String)
                deallocateNssi.setScriptName("TN1")
                deallocateNssi.setSnssaiList(sNssaiList)
                 deallocateNssi.setTerminateNssiOption(0)
@@ -457,13 +504,13 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
                        serviceInfo.addProperty("modifyAction", true)
 
                 if(domainType.equals("TN_FH")) {
-                       deallocateNssi.setNssiId(execution.getVariable("TNFH_NSSI"))
-                       deallocateNssi.setSliceProfileId(execution.getVariable("TNFH_sliceProfileInstanceId"))
-                        serviceInfo.addProperty("nssiId", execution.getVariable("TNFH_NSSI"))
+                       deallocateNssi.setNssiId(execution.getVariable("TNFH_NSSI") as String)
+                       deallocateNssi.setSliceProfileId(execution.getVariable("TNFH_sliceProfileInstanceId") as String)
+                        serviceInfo.addProperty("nssiId", execution.getVariable("TNFH_NSSI") as String)
                 }else if(domainType.equals("TN_MH")) {
-                       deallocateNssi.setNssiId(execution.getVariable("TNMH_NSSI"))
-                       deallocateNssi.setSliceProfileId(execution.getVariable("TNMH_sliceProfileInstanceId"))
-                        serviceInfo.addProperty("nssiId", execution.getVariable("TNMH_NSSI"))
+                       deallocateNssi.setNssiId(execution.getVariable("TNMH_NSSI") as String)
+                       deallocateNssi.setSliceProfileId(execution.getVariable("TNMH_sliceProfileInstanceId") as String)
+                        serviceInfo.addProperty("nssiId", execution.getVariable("TNMH_NSSI") as String)
                 }
 
                JsonObject json = new JsonObject()
index ba87614..e55ea13 100644 (file)
@@ -371,7 +371,9 @@ public class CreateSliceService extends AbstractServiceTaskProcessor {
         String taskStatus = execution.getVariable("taskStatus")
         SliceTaskParamsAdapter sliceTaskParams =
                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
-
+        int nsstCount=execution.getVariable("nsstCount") as int
+       nsstCount=nsstCount+1
+        execution.setVariable("nsstCount", nsstCount)
         execution.setVariable("CSSOT_status", taskStatus)
         execution.setVariable("CSSOT_paramJson", objectMapper.writeValueAsString(sliceTaskParams))
         execution.setVariable("CSSOT_requestMethod", requestMethod)
index d5c1320..ed1c2b2 100644 (file)
@@ -190,6 +190,8 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                //RAN NSST decomposition
                String ranModelVersion = ranNsstServiceDecomposition.getModelInfo().getModelVersion()
                String ranModelName = ranNsstServiceDecomposition.getModelInfo().getModelName()
+               String serviceCategory=ranNsstServiceDecomposition.getServiceCategory()
+               logger.debug("serviceCategory : "+serviceCategory)
                List<ServiceProxy> serviceProxyList = ranNsstServiceDecomposition.getServiceProxy()
                List<String> nsstInfoList = new ArrayList<>()
                for(ServiceProxy serviceProxy : serviceProxyList)
@@ -198,10 +200,10 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                        String nsstModelInvariantUuid = serviceProxy.getModelInfo().getModelInvariantUuid()
                        String name = serviceProxy.getModelInfo().getModelName()
                        String nsstServiceModelInfo = """{
-            "UUID":"${nsstModelUuid}",
-            "invariantUUID":"${nsstModelInvariantUuid}",
-            "name":"${name}"
-             }"""
+                               "UUID":"${nsstModelUuid}",
+                               "invariantUUID":"${nsstModelInvariantUuid}",
+                               "name":"${name}"
+                        }"""
                        nsstInfoList.add(nsstServiceModelInfo)
                }
                int currentIndex=0
@@ -212,12 +214,19 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                        logger.info(msg)
                        exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
                }
+                if(maxIndex == 1) {
+                        logger.info("RAN NSST have only RAN NF NSST")
+                        execution.setVariable("ranNfSliceProfile", execution.getVariable("sliceProfile"))
+                        execution.setVariable("IsRANNfAlonePresent", true)
+                }
                execution.setVariable("ranNsstInfoList", objectMapper.writeValueAsString(nsstInfoList))
-               execution.setVariable("ranModelVersion", ranModelVersion)
-               execution.setVariable("ranModelName", ranModelName)
                execution.setVariable("currentIndex",currentIndex)
                execution.setVariable("maxIndex",maxIndex)
+               execution.setVariable("ranModelVersion", ranModelVersion)
+               execution.setVariable("ranModelName", ranModelName)
                logger.debug(Prefix+"processDecomposition maxIndex value - "+maxIndex)
+
+               execution.setVariable("serviceCategory",serviceCategory)
        }
 
        /*
@@ -428,28 +437,28 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                ServiceDecomposition decomposedNsst = execution.getVariable("nsstServiceDecomposition")
                logger.debug("decomposedNsst : "+decomposedNsst.toString())
                
-               String nsstType = decomposedNsst.getServiceRole() //domainType
+               String nsstType = decomposedNsst.getServiceCategory() //domainType
                String modelVersion = decomposedNsst.getModelInfo().getModelVersion()
                String modelName = decomposedNsst.getModelInfo().getModelName()
                String modelUuid = decomposedNsst.getModelInfo().getModelUuid()
                String modelInvariantUuid = decomposedNsst.getModelInfo().getModelInvariantUuid()
                
                switch(nsstType) {
-                       case "AN_NF":
+                       case "AN NF NSST":
                                execution.setVariable("ANNF_modelInvariantUuid", modelInvariantUuid)
                                execution.setVariable("ANNF_modelUuid", modelUuid)
                                execution.setVariable("ANNF_modelVersion", modelVersion)
                                execution.setVariable("ANNF_modelName", modelName)
                                execution.setVariable("ANNF_ServiceDecomposition", decomposedNsst)
                                break
-                       case "TN_FH":
+                       case "TN FH NSST":
                                execution.setVariable("TNFH_modelInvariantUuid", modelInvariantUuid)
                                execution.setVariable("TNFH_modelUuid", modelUuid)
                                execution.setVariable("TNFH_modelVersion", modelVersion)
                                execution.setVariable("TNFH_modelName", modelName)
                                execution.setVariable("TNFH_ServiceDecomposition", decomposedNsst)
                                break
-                       case "TN_MH":
+                       case "TN MH NSST":
                                execution.setVariable("TNMH_modelInvariantUuid", modelInvariantUuid)
                                execution.setVariable("TNMH_modelUuid", modelUuid)
                                execution.setVariable("TNMH_modelVersion", modelVersion)
@@ -480,9 +489,12 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                //build oof request body
                boolean ranNfNssiPreferReuse = execution.getVariable("ranNfNssiPreferReuse");
                String requestId = execution.getVariable("msoRequestId")
+               String serviceCategory = execution.getVariable("serviceCategory")
                String messageType = "NSSISelectionResponse"
-               List<String> ranConstituentSliceProfiles = jsonUtil.StringArrayToList(execution.getVariable("RanConstituentSliceProfiles"))
-               anNssmfUtils.createDomainWiseSliceProfiles(ranConstituentSliceProfiles, execution)
+                if(execution.getVariable("maxIndex") > 1) {
+                    List<String> ranConstituentSliceProfiles = jsonUtil.StringArrayToList(execution.getVariable("RanConstituentSliceProfiles") as String)
+                    anNssmfUtils.createDomainWiseSliceProfiles(ranConstituentSliceProfiles, execution)
+                }
                Map<String, Object> profileInfo = objectMapper.readValue(execution.getVariable("ranNfSliceProfile"), Map.class)
                profileInfo.put("sST",execution.getVariable("sst"))
                String modelUuid = execution.getVariable("ANNF_modelUuid")
@@ -617,48 +629,45 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                //create RAN NSSI 
                org.onap.aai.domain.yang.ServiceInstance ANServiceInstance = new org.onap.aai.domain.yang.ServiceInstance();
                org.onap.aai.domain.yang.ServiceInstance ANNFServiceInstance = new org.onap.aai.domain.yang.ServiceInstance();
+               String serviceCategory = execution.getVariable("serviceCategory")
+               String serviceStatus = "deactivated"
+               String serviceRole = "nssi"
                //AN instance creation
-               ANServiceInstance.setServiceInstanceId(execution.getVariable("RANServiceInstanceId"))
+               ANServiceInstance.setServiceInstanceId(execution.getVariable("RANServiceInstanceId") as String)
                String sliceInstanceName = execution.getVariable("servicename")
                ANServiceInstance.setServiceInstanceName(sliceInstanceName)
-               String serviceType = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "sST")
-                ANServiceInstance.setServiceType(execution.getVariable("sst"))
-               String serviceStatus = "deactivated"
+               ANServiceInstance.setServiceType(execution.getVariable("sst") as String)
                ANServiceInstance.setOrchestrationStatus(serviceStatus)
-               String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "pLMNIdList")
+               String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "pLMNIdList") as String
                ANServiceInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
-               String serviceRole = "nssi"
                ANServiceInstance.setServiceRole(serviceRole)
-               List<String> snssaiList = execution.getVariable("snssaiList")
+               List<String> snssaiList = jsonUtil.StringArrayToList(execution.getVariable("snssaiList") as String)
                String snssai = snssaiList.get(0)
-               //ANServiceInstance.setEnvironmentContext(snssai)
-                ANServiceInstance.setEnvironmentContext(execution.getVariable("networkType"))
-                String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
-                String modelUuid = execution.getVariable("modelUuid")
-                ANServiceInstance.setModelInvariantId(modelInvariantUuid)
-                ANServiceInstance.setModelVersionId(modelUuid)
+               ANServiceInstance.setEnvironmentContext(snssai)
+               String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
+               String modelUuid = execution.getVariable("modelUuid") as String
+               ANServiceInstance.setModelInvariantId(modelInvariantUuid)
+               ANServiceInstance.setModelVersionId(modelUuid)
                ANServiceInstance.setWorkloadContext("AN")
-               String serviceFunctionAn = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "resourceSharingLevel")
+               String serviceFunctionAn = jsonUtil.getJsonValue(execution.getVariable("sliceProfile") as String, "resourceSharingLevel")
                ANServiceInstance.setServiceFunction(serviceFunctionAn)
-               logger.debug("completed AN service instance build "+ ANServiceInstance.toString())
+               logger.debug("completed AN service instance build " + ANServiceInstance.toString())
                //create RAN NF NSSI
-               ANNFServiceInstance.setServiceInstanceId(execution.getVariable("RANNFServiceInstanceId"))
-                String ANNF_nssiInstanceId = UUID.randomUUID().toString()
-                sliceInstanceName = "nssi_an_nf_"+ANNF_nssiInstanceId
+               ANNFServiceInstance.setServiceInstanceId(execution.getVariable("RANNFServiceInstanceId") as String)
+               sliceInstanceName = "nssi_"+execution.getVariable("ANNF_modelName")
                ANNFServiceInstance.setServiceInstanceName(sliceInstanceName)
-               ANNFServiceInstance.setServiceType(execution.getVariable("sst"))
+               ANNFServiceInstance.setServiceType(execution.getVariable("sst") as String)
                ANNFServiceInstance.setOrchestrationStatus(serviceStatus)
-               serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "pLMNIdList")
+               serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile") as String, "pLMNIdList")
                 ANNFServiceInstance.setServiceInstanceLocationId(jsonUtil.StringArrayToList(serviceInstanceLocationid).get(0))
                ANNFServiceInstance.setServiceRole(serviceRole)
-               snssaiList = execution.getVariable("snssaiList")
+               snssaiList = jsonUtil.StringArrayToList(execution.getVariable("snssaiList") as String)
                snssai = snssaiList.get(0)
-               //ANNFServiceInstance.setEnvironmentContext(snssai)
-                ANNFServiceInstance.setEnvironmentContext(execution.getVariable("networkType"))
+               ANNFServiceInstance.setEnvironmentContext(snssai)
                 ANNFServiceInstance.setModelInvariantId(execution.getVariable("ANNF_modelInvariantUuid"))
                 ANNFServiceInstance.setModelVersionId(execution.getVariable("ANNF_modelUuid"))
                ANNFServiceInstance.setWorkloadContext("AN_NF")
-               String serviceFunctionAnnf = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "resourceSharingLevel")
+               String serviceFunctionAnnf = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile") as String, "resourceSharingLevel")
                ANNFServiceInstance.setServiceFunction(serviceFunctionAnnf)
                logger.debug("completed AN service instance build "+ ANNFServiceInstance.toString())
                
@@ -666,10 +675,10 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                try {
        
                        AAIResourcesClient client = new AAIResourcesClient()
-                       AAIResourceUri nssiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(execution.getVariable("RANServiceInstanceId")))
+                       AAIResourceUri nssiServiceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId") as String).serviceSubscription(execution.getVariable("subscriptionServiceType") as String).serviceInstance(execution.getVariable("RANServiceInstanceId") as String))
                        client.create(nssiServiceUri, ANServiceInstance)
        
-                       AAIResourceUri nssiServiceUri1 = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(execution.getVariable("RANNFServiceInstanceId")))
+                       AAIResourceUri nssiServiceUri1 = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId") as String).serviceSubscription(execution.getVariable("subscriptionServiceType") as String).serviceInstance(execution.getVariable("RANNFServiceInstanceId") as String))
                        client.create(nssiServiceUri1, ANNFServiceInstance)
        
                } catch (BpmnError e) {
@@ -680,7 +689,9 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                        exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
                }
                //end point update
-               createEndPointsInAai(execution)
+               if (!execution.getVariable("IsRANNfAlonePresent")) {
+                       createEndPointsInAai(execution)
+               }
        }
        def prepareTnFhRequest = { DelegateExecution execution ->
                logger.debug(Prefix+"prepareTnFhRequest method start")
@@ -804,64 +815,96 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
 
        def updateAairelationships = { DelegateExecution execution ->
                logger.debug(Prefix + "updateAairelationships Start")
+               String serviceCategory = execution.getVariable("serviceCategory")
                String msg = ""
-               try {
-                       def ANNF_serviceInstanceId = execution.getVariable("RANNFServiceInstanceId")
-                       def TNFH_serviceInstanceId = execution.getVariable("TNFH_NSSI")
-                       def TNMH_serviceInstanceId = execution.getVariable("TNMH_NSSI")
-                       def AN_profileInstanceId = execution.getVariable("sliceProfileId")
-                       def AN_NSSI = execution.getVariable("RANServiceInstanceId")
-                       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/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${ANNF_profileInstanceId}"
-                       String TNFH_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${TNFH_profileInstanceId}"
-                       String TNMH_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${TNMH_profileInstanceId}"
-                       
-                       String ANNF_NSSI_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${ANNF_serviceInstanceId}"
-                       String TNFH_NSSI_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${TNFH_serviceInstanceId}"
-                       String TNMH_NSSI_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${TNMH_serviceInstanceId}"
-                       
-                       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)
-                       
-                       //create AN NSSI and ANNF,TNFH,TNMH relationship in AAI
-                       ANNF_relationship.setRelatedLink(ANNF_NSSI_relatedLink)
-                       TNFH_relationship.setRelatedLink(TNFH_NSSI_relatedLink)
-                       TNMH_relationship.setRelatedLink(TNMH_NSSI_relatedLink)
-                       anNssmfUtils.createRelationShipInAAI(execution, ANNF_relationship,AN_NSSI)
-                       anNssmfUtils.createRelationShipInAAI(execution, TNFH_relationship,AN_NSSI)
-                       anNssmfUtils.createRelationShipInAAI(execution, TNMH_relationship,AN_NSSI)
+               if (execution.getVariable("IsRANNfAlonePresent")) {
+                       try {
+                               def ANNF_serviceInstanceId = execution.getVariable("RANNFServiceInstanceId")
+                               def AN_profileInstanceId = execution.getVariable("sliceProfileId")
+                                def AN_NSSI = execution.getVariable("RANServiceInstanceId")
+                               def ANNF_profileInstanceId = execution.getVariable("ANNF_sliceProfileInstanceId")
+                               String globalSubscriberId = execution.getVariable("globalSubscriberId")
+                               String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
 
-               } catch (BpmnError e) {
-                       throw e
-               } catch (Exception ex) {
+                               Relationship ANNF_relationship = new Relationship()
+                               String ANNF_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${ANNF_profileInstanceId}"
+                               String ANNF_NSSI_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${ANNF_serviceInstanceId}"
+                               ANNF_relationship.setRelatedLink(ANNF_relatedLink)
+                               ANNF_relationship.setRelatedTo("service-instance")
+                               ANNF_relationship.setRelationshipLabel("org.onap.relationships.inventory.ComposedOf")
+                               anNssmfUtils.createRelationShipInAAI(execution, ANNF_relationship, ANNF_serviceInstanceId)
+                               anNssmfUtils.createRelationShipInAAI(execution, ANNF_relationship, AN_profileInstanceId)
+                               ANNF_relationship.setRelatedLink(ANNF_NSSI_relatedLink)
+                               anNssmfUtils.createRelationShipInAAI(execution, ANNF_relationship, AN_NSSI)
 
-                       msg = "Exception in DoCreateE2EServiceInstance.createCustomRelationship. " + ex.getMessage()
-                       logger.info(msg)
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+                       } catch (BpmnError e) {
+                               throw e
+                       } catch (Exception ex) {
+
+                               msg = "Exception in DoCreateE2EServiceInstance.createCustomRelationship. " + ex.getMessage()
+                               logger.info(msg)
+                               exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+                       }
+               }
+               else {
+                       try {
+                               def ANNF_serviceInstanceId = execution.getVariable("RANNFServiceInstanceId")
+                               def TNFH_serviceInstanceId = execution.getVariable("TNFH_NSSI")
+                               def TNMH_serviceInstanceId = execution.getVariable("TNMH_NSSI")
+                               def AN_profileInstanceId = execution.getVariable("sliceProfileId")
+                               def AN_NSSI = execution.getVariable("RANServiceInstanceId")
+                               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/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${ANNF_profileInstanceId}"
+                               String TNFH_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${TNFH_profileInstanceId}"
+                               String TNMH_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${TNMH_profileInstanceId}"
+
+                               String ANNF_NSSI_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${ANNF_serviceInstanceId}"
+                               String TNFH_NSSI_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${TNFH_serviceInstanceId}"
+                               String TNMH_NSSI_relatedLink = "aai/v21/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${subscriptionServiceType}/service-instances/service-instance/${TNMH_serviceInstanceId}"
+
+                               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)
+
+                               //create AN NSSI and ANNF,TNFH,TNMH relationship in AAI
+                               ANNF_relationship.setRelatedLink(ANNF_NSSI_relatedLink)
+                               TNFH_relationship.setRelatedLink(TNFH_NSSI_relatedLink)
+                               TNMH_relationship.setRelatedLink(TNMH_NSSI_relatedLink)
+                               anNssmfUtils.createRelationShipInAAI(execution, ANNF_relationship, AN_NSSI)
+                               anNssmfUtils.createRelationShipInAAI(execution, TNFH_relationship, AN_NSSI)
+                               anNssmfUtils.createRelationShipInAAI(execution, TNMH_relationship, AN_NSSI)
+
+                       } catch (BpmnError e) {
+                               throw e
+                       } catch (Exception ex) {
+
+                               msg = "Exception in DoCreateE2EServiceInstance.createCustomRelationship. " + ex.getMessage()
+                               logger.info(msg)
+                               exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+                       }
                }
        }
        
index 0088ed4..bc155c5 100644 (file)
@@ -34,6 +34,7 @@ import org.camunda.bpm.engine.delegate.DelegateExecution
 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.AAINamespaceConstants
 import org.onap.aaiclient.client.aai.AAIResourcesClient
 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
@@ -53,6 +54,7 @@ import org.onap.so.bpmn.core.json.JsonUtils
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 import static org.apache.commons.lang3.StringUtils.isBlank
+import org.onap.aaiclient.client.aai.AAIObjectType
 
 class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
 
@@ -62,6 +64,8 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
 
     JsonUtils jsonUtil = new JsonUtils()
 
+    AnNssmfUtils anNssmfUtils = new AnNssmfUtils()
+
     AAIResourcesClient client = getAAIClient()
 
     /**
@@ -75,6 +79,13 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
         String msg = ""
         logger.trace("Enter preProcessRequest()")
         Map<String, Object> nssiMap = new HashMap<>()
+        int nsstCount=execution.getVariable("nsstCount") as int
+        if(nsstCount==5){
+            execution.setVariable("processFHandMH", true)
+        }
+        else{
+            execution.setVariable("processFHandMH", false)
+        }
         execution.setVariable("nssiMap", nssiMap)
         boolean isMoreNSSTtoProcess = true
         execution.setVariable("isMoreNSSTtoProcess", isMoreNSSTtoProcess)
@@ -393,26 +404,26 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
         //todo:
         SliceTaskParamsAdapter sliceParams =
                 execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
-        SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
+        SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getAnSliceTaskInfo()
 
         NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
 
         AllocateAnNssi allocateAnNssi = new AllocateAnNssi()
-        allocateAnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2AnProfile()
-        allocateAnNssi.sliceProfile.sliceProfileId = sliceTaskInfo.sliceInstanceId
-        allocateAnNssi.nsstId = sliceTaskInfo.NSSTInfo.UUID
-        allocateAnNssi.nssiId = sliceTaskInfo.suggestNssiId
-        allocateAnNssi.nssiName = "nssi_an" + execution.getVariable("sliceServiceInstanceName")
-        allocateAnNssi.scriptName = sliceTaskInfo.getScriptName()
+        allocateAnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2AnProfile())
+        allocateAnNssi.getSliceProfile().setSliceProfileId(sliceTaskInfo.getSliceInstanceId())
+        allocateAnNssi.setNsstId(sliceTaskInfo.getNSSTInfo().getUUID())
+        allocateAnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
+        allocateAnNssi.setNssiName("nssi_an" + execution.getVariable("sliceServiceInstanceName") as String)
+        allocateAnNssi.setScriptName(sliceTaskInfo.getScriptName())
         NsiInfo nsiInfo = new NsiInfo()
-        nsiInfo.nsiId = sliceParams.suggestNsiId
-        nsiInfo.nsiName = sliceParams.suggestNsiName
-        allocateAnNssi.nsiInfo = nsiInfo
+        nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
+        nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
+        allocateAnNssi.setNsiInfo(nsiInfo)
         //endPoint
         EndPoint endPoint = new EndPoint()
-        endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
-        endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
-        endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
+        endPoint.setIpAddress(sliceTaskInfo.getSliceProfile().getIpAddress())
+        endPoint.setLogicInterfaceId(sliceTaskInfo.getSliceProfile().getLogicInterfaceId())
+        endPoint.setNextHopInfo(sliceTaskInfo.getSliceProfile().getNextHopInfo())
         allocateAnNssi.setEndPoint(endPoint)
 
         EsrInfo esrInfo = new EsrInfo()
@@ -420,19 +431,20 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
         esrInfo.setVendor(sliceTaskInfo.getVendor())
         esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
 
-        String globalSubscriberId = execution.getVariable("globalSubscriberId")
-        String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+        String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
+        String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
 
         //todo: service info
-        ServiceInfo serviceInfo = new ServiceInfo()
-        serviceInfo.globalSubscriberId = globalSubscriberId
-        serviceInfo.subscriptionServiceType = subscriptionServiceType
-        serviceInfo.nsiId = sliceParams.suggestNsiId
-        serviceInfo.serviceInvariantUuid = sliceTaskInfo.NSSTInfo.invariantUUID
-        serviceInfo.serviceUuid = sliceTaskInfo.NSSTInfo.UUID
-        serviceInfo.sST = sliceTaskInfo.sliceProfile.sST ?: sliceParams.serviceProfile.get("sST")
-        serviceInfo.nssiName = sliceTaskInfo.suggestNssiId ? sliceTaskInfo.NSSTInfo.name : allocateAnNssi.nssiName
-        serviceInfo.nssiId = sliceTaskInfo.suggestNssiId
+        ServiceInfo serviceInfo = ServiceInfo.builder()
+                .globalSubscriberId(globalSubscriberId)
+                .subscriptionServiceType(subscriptionServiceType)
+                .nsiId(sliceParams.getSuggestNsiId())
+                .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
+                .serviceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
+                .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST") as String)
+                .nssiName(sliceTaskInfo.getSuggestNssiId() ? sliceTaskInfo.getNSSTInfo().getName() : allocateAnNssi.getNssiName())
+                .nssiId(sliceTaskInfo.getSuggestNssiId())
+                .build()
 
         nbiRequest.setServiceInfo(serviceInfo)
         nbiRequest.setEsrInfo(esrInfo)
@@ -956,4 +968,450 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
         return rspi
     }
 
+    public void createTNEndPoints(DelegateExecution execution) {
+        String type = "endpoint"
+        String function = "transport_EP"
+        int prefixLength = 24
+        String addressFamily = "ipv4"
+        //BH RAN end point update
+        //set BH end point
+        String sliceParams = execution.getVariable("sliceParams")
+        List<String> BH_endPoints = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceParams, "endPoints"))
+        logger.debug("BH end points list : "+BH_endPoints)
+        if(BH_endPoints.empty) {
+            String msg = "End point info is empty"
+            logger.debug(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+        }
+        String bh_routeId = UUID.randomUUID().toString()
+        execution.setVariable("tranportEp_ID_bh", bh_routeId)
+        String role = "CU"
+        String CU_IpAddress = jsonUtil.getJsonValue(bh_endpoint, "IpAddress")
+        String LogicalLinkId = jsonUtil.getJsonValue(bh_endpoint, "LogicalLinkId")
+        String nextHopInfo = jsonUtil.getJsonValue(bh_endpoint, "nextHopInfo")
+        NetworkRoute bh_ep = new NetworkRoute()
+        bh_ep.setRouteId(bh_routeId)
+        bh_ep.setFunction(function)
+        bh_ep.setRole(role)
+        bh_ep.setType(type)
+        bh_ep.setIpAddress(CU_IpAddress)
+        bh_ep.setLogicalInterfaceId(LogicalLinkId)
+        bh_ep.setNextHop(nextHopInfo)
+        bh_ep.setPrefixLength(prefixLength)
+        bh_ep.setAddressFamily(addressFamily)
+        //FH RAN end points update
+        //RU
+        String RU_routeId = UUID.randomUUID().toString()
+        execution.setVariable("tranportEp_ID_RU", RU_routeId)
+        role = "RU"
+        NetworkRoute RU_ep = new NetworkRoute()
+        RU_ep.setRouteId(RU_routeId)
+        RU_ep.setFunction(function)
+        RU_ep.setRole(role)
+        RU_ep.setType(type)
+        RU_ep.setIpAddress("192.168.100.4")
+        RU_ep.setLogicalInterfaceId("1234")
+        RU_ep.setNextHop("Host1")
+        RU_ep.setPrefixLength(prefixLength)
+        RU_ep.setAddressFamily(addressFamily)
+        //DU Ingress
+        String DUIN_routeId = UUID.randomUUID().toString()
+        execution.setVariable("tranportEp_ID_DUIN", DUIN_routeId)
+        role = "DU"
+        NetworkRoute DU_ep = new NetworkRoute()
+        DU_ep.setRouteId(DUIN_routeId)
+        DU_ep.setFunction(function)
+        DU_ep.setRole(role)
+        DU_ep.setType(type)
+        DU_ep.setIpAddress("192.168.100.5")
+        DU_ep.setLogicalInterfaceId("1234")
+        DU_ep.setNextHop("Host2")
+        DU_ep.setPrefixLength(prefixLength)
+        DU_ep.setAddressFamily(addressFamily)
+        //MH RAN end point update
+        //DUEG
+        String DUEG_routeId = UUID.randomUUID().toString()
+        execution.setVariable("tranportEp_ID_DUEG", DUEG_routeId)
+        NetworkRoute DUEG_ep = new NetworkRoute()
+        DUEG_ep.setRouteId(DUEG_routeId)
+        DUEG_ep.setFunction(function)
+        DUEG_ep.setRole(role)
+        DUEG_ep.setType(type)
+        DUEG_ep.setIpAddress("192.168.100.5")
+        DUEG_ep.setLogicalInterfaceId("1234")
+        DUEG_ep.setPrefixLength(prefixLength)
+        DUEG_ep.setAddressFamily(addressFamily)
+        DUEG_ep.setNextHop("Host3")
+        //CUIN
+        String CUIN_routeId = UUID.randomUUID().toString()
+        execution.setVariable("tranportEp_ID_CUIN", CUIN_routeId)
+        NetworkRoute CUIN_ep = new NetworkRoute()
+        CUIN_ep.setRouteId(CUIN_routeId)
+        CUIN_ep.setFunction(function)
+        CUIN_ep.setRole(role)
+        CUIN_ep.setType(type)
+        CUIN_ep.setIpAddress("192.168.100.6")
+        CUIN_ep.setLogicalInterfaceId("1234")
+        CUIN_ep.setNextHop("Host4")
+        CUIN_ep.setPrefixLength(prefixLength)
+        CUIN_ep.setAddressFamily(addressFamily)
+        try {
+            AAIResourcesClient client = new AAIResourcesClient()
+            logger.debug("creating bh endpoint . ID : "+bh_routeId+" node details : "+bh_ep.toString())
+            AAIResourceUri networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(bh_routeId))
+            client.create(networkRouteUri, bh_ep)
+            logger.debug("creating RU endpoint . ID : "+RU_routeId+" node details : "+RU_ep.toString())
+            networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(RU_routeId))
+            client.create(networkRouteUri, RU_ep)
+            logger.debug("creating DUIN endpoint . ID : "+DUIN_routeId+" node details : "+DU_ep.toString())
+            networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(DUIN_routeId))
+            client.create(networkRouteUri, DU_ep)
+            logger.debug("creating DUEG endpoint . ID : "+DUEG_routeId+" node details : "+DUEG_ep.toString())
+            networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(DUEG_routeId))
+            client.create(networkRouteUri, DUEG_ep)
+            logger.debug("creating CUIN endpoint . ID : "+CUIN_routeId+" node details : "+CUIN_ep.toString())
+            networkRouteUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(CUIN_routeId))
+            client.create(networkRouteUri, CUIN_ep)
+            //relationship b/w bh_ep and RAN NSSI
+            def AN_NSSI = execution.getVariable("RANServiceInstanceId")
+            Relationship relationship = new Relationship()
+            String relatedLink = "aai/v21/network/network-routes/network-route/${bh_routeId}"
+            relationship.setRelatedLink(relatedLink)
+            relationship.setRelatedTo("network-route")
+            relationship.setRelationshipLabel("org.onap.relationships.inventory.ComposedOf")
+            anNssmfUtils.createRelationShipInAAI(execution, relationship, AN_NSSI)
+            def ANNF_serviceInstanceId = execution.getVariable("RANNFServiceInstanceId")
+            relatedLink = "aai/v21/network/network-routes/network-route/${RU_routeId}"
+            relationship.setRelatedLink(relatedLink)
+            anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
+            relatedLink = "aai/v21/network/network-routes/network-route/${DUIN_routeId}"
+            relationship.setRelatedLink(relatedLink)
+            anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
+            relatedLink = "aai/v21/network/network-routes/network-route/${DUEG_routeId}"
+            relationship.setRelatedLink(relatedLink)
+            anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
+            relatedLink = "aai/v21/network/network-routes/network-route/${CUIN_routeId}"
+            relationship.setRelatedLink(relatedLink)
+            anNssmfUtils.createRelationShipInAAI(execution, relationship, ANNF_serviceInstanceId)
+        } catch (BpmnError e) {
+            throw e
+        } catch (Exception ex) {
+            String msg = "Exception in createEndPointsInAai " + ex.getMessage()
+            logger.info(msg)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+        }
+    }
+
+    /**
+     * create TN Slice Profile Instance
+     * @param execution
+     */
+    void createTnFHSliceProfileInstance(DelegateExecution execution) {
+        String globalSubscriberId = execution.getVariable("globalSubscriberId")
+        String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+
+        String oStatus = "deactivated"
+
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+
+        SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnFHSliceTaskInfo
+        String serviceInstanceId = UUID.randomUUID().toString()
+
+        sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
+        String sliceProfileName = "tn_fh" + sliceParams.serviceName
+        //execution.setVariable("cnSliceProfileInstanceId", serviceInstanceId) //todo:
+
+        // create slice profile
+        ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
+
+        //timestamp format YYYY-MM-DD hh:mm:ss
+        rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
+
+        execution.setVariable("communicationServiceInstance", rspi)
+
+        AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+                .customer(globalSubscriberId)
+                .serviceSubscription(subscriptionServiceType)
+                .serviceInstance(serviceInstanceId))
+        client.create(uri, rspi)
+
+        execution.setVariable("sliceTaskParams", sliceParams)
+    }
+
+    /**
+     * create Tn Slice Profile
+     * @param execution
+     */
+    void createTnFHSliceProfile(DelegateExecution execution) {
+
+        String globalSubscriberId = execution.getVariable("globalSubscriberId")
+        String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+
+        SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnFHSliceTaskInfo
+
+        SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
+        String profileId = UUID.randomUUID().toString()
+        tnSliceProfile.setSliceProfileId(profileId)
+
+        SliceProfile sliceProfile = new SliceProfile()
+        sliceProfile.setProfileId(profileId)
+        sliceProfile.setLatency(tnSliceProfile.latency)
+        sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
+        sliceProfile.setJitter(tnSliceProfile.jitter)
+
+        AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+                .customer(globalSubscriberId)
+                .serviceSubscription(subscriptionServiceType)
+                .serviceInstance(sliceTaskInfo.sliceInstanceId)
+                .sliceProfile(profileId))
+        client.create(uri, sliceProfile)
+
+        execution.setVariable("sliceTaskParams", sliceParams)
+    }
+
+    /**
+     * prepare AllocateCnNssi
+     * @param execution
+     */
+    void prepareAllocateTnFHNssi(DelegateExecution execution) {
+
+        //todo:
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+        SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getTnFHSliceTaskInfo()
+
+        NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
+
+        AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
+        allocateTnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
+        //todo: AllocateTnNssi
+        //todo: endPointId -> set into tn
+        List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
+        TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
+        List<ConnectionLink> connectionLinks = new ArrayList<>()
+        ConnectionLink connectionLink = new ConnectionLink()
+        connectionLink.setTransportEndpointA(execution.getVariable("tranportEp_ID_RU") as String)
+        connectionLink.setTransportEndpointB(execution.getVariable("tranportEp_ID_DUIN") as String)
+        connectionLinks.add(connectionLink)
+        transportSliceNetwork.setConnectionLinks(connectionLinks)
+        transportSliceNetworks.add(transportSliceNetwork)
+        allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
+
+        allocateTnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2TnProfile())
+        NsiInfo nsiInfo = new NsiInfo()
+        nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
+        nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
+        allocateTnNssi.setNsiInfo(nsiInfo)
+
+        EsrInfo esrInfo = new EsrInfo()
+        esrInfo.setVendor(sliceTaskInfo.getVendor())
+        esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
+
+        String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
+        String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
+
+        ServiceInfo serviceInfo = ServiceInfo.builder()
+                .globalSubscriberId(globalSubscriberId)
+                .subscriptionServiceType(subscriptionServiceType)
+                .nsiId(sliceParams.getSuggestNsiId())
+                .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
+                .setServiceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
+                .nssiId(sliceTaskInfo.getSuggestNssiId())
+                .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST"))
+                .nssiName("nssi_tn_fh_" + execution.getVariable("sliceServiceInstanceName") as String)
+                .build()
+
+        nbiRequest.setServiceInfo(serviceInfo)
+        nbiRequest.setEsrInfo(esrInfo)
+        nbiRequest.setAllocateTnNssi(allocateTnNssi)
+
+        execution.setVariable("TnFHAllocateNssiNbiRequest", nbiRequest)
+        execution.setVariable("tnFHSliceTaskInfo", sliceTaskInfo)
+        execution.setVariable("tnFHSubnetType", SubnetType.TN_BH)
+    }
+
+    /**
+     * Update relationship between
+     * 1. NSI and NSSI
+     * 2. Slice Profile and Service Profile
+     * 3. SliceProfile and NSSI
+     *
+     * @param execution
+     */
+    public void updateTnFHRelationship(DelegateExecution execution) {
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+
+        NssiResponse result = execution.getVariable("tnFHNssiAllocateResult") as NssiResponse
+        String nssiId = result.getNssiId()
+        String nsiId = sliceParams.getSuggestNsiId()
+        String sliceProfileInstanceId = sliceParams.tnFHSliceTaskInfo.sliceInstanceId
+        String serviceProfileInstanceId = sliceParams.serviceId
+
+        updateRelationship(execution, nsiId, nssiId)
+
+        updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
+
+        updateRelationship(execution,sliceProfileInstanceId, nssiId)
+
+        sliceParams.tnFHSliceTaskInfo.suggestNssiId = nssiId
+        execution.setVariable("sliceTaskParams", sliceParams)
+    }
+
+    /**
+     * create TN Slice Profile Instance
+     * @param execution
+     */
+    void createTnMHSliceProfileInstance(DelegateExecution execution) {
+        String globalSubscriberId = execution.getVariable("globalSubscriberId")
+        String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+
+        String oStatus = "deactivated"
+
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+
+        SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnMHSliceTaskInfo
+        String serviceInstanceId = UUID.randomUUID().toString()
+
+        sliceTaskInfo.setSliceInstanceId(serviceInstanceId)
+        String sliceProfileName = "tn_mh_" + sliceParams.serviceName
+        ServiceInstance rspi = createSliceProfileInstance(sliceTaskInfo, sliceProfileName, oStatus)
+
+        rspi.setCreatedAt(new Date(System.currentTimeMillis()).format("yyyy-MM-dd HH:mm:ss", TimeZone.getDefault()))
+
+        execution.setVariable("communicationServiceInstance", rspi)
+
+        AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+                .customer(globalSubscriberId)
+                .serviceSubscription(subscriptionServiceType)
+                .serviceInstance(serviceInstanceId))
+        client.create(uri, rspi)
+
+        execution.setVariable("sliceTaskParams", sliceParams)
+    }
+
+    /**
+     * create Tn Slice Profile
+     * @param execution
+     */
+    void createTnMHSliceProfile(DelegateExecution execution) {
+
+        String globalSubscriberId = execution.getVariable("globalSubscriberId")
+        String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+
+        SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.tnMHSliceTaskInfo
+
+        SliceProfileAdapter tnSliceProfile = sliceTaskInfo.sliceProfile
+        String profileId = UUID.randomUUID().toString()
+        tnSliceProfile.setSliceProfileId(profileId)
+
+        SliceProfile sliceProfile = new SliceProfile()
+        sliceProfile.setProfileId(profileId)
+        sliceProfile.setLatency(tnSliceProfile.latency)
+        sliceProfile.setMaxBandwidth(tnSliceProfile.maxBandwidth)
+        sliceProfile.setJitter(tnSliceProfile.jitter)
+
+        AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+                .customer(globalSubscriberId)
+                .serviceSubscription(subscriptionServiceType)
+                .serviceInstance(sliceTaskInfo.sliceInstanceId)
+                .sliceProfile(profileId))
+        client.create(uri, sliceProfile)
+
+        execution.setVariable("sliceTaskParams", sliceParams)
+    }
+
+    /**
+     * prepare AllocateCnNssi
+     * @param execution
+     */
+    void prepareAllocateTnMHNssi(DelegateExecution execution) {
+
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+        SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.getTnMHSliceTaskInfo()
+
+        NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest()
+
+        AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
+        allocateTnNssi.setNssiId(sliceTaskInfo.getSuggestNssiId())
+        List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
+        TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
+        List<ConnectionLink> connectionLinks = new ArrayList<>()
+        ConnectionLink connectionLink = new ConnectionLink()
+        connectionLink.setTransportEndpointA(execution.getVariable("tranportEp_ID_DUEG") as String)
+        connectionLink.setTransportEndpointB(execution.getVariable("tranportEp_ID_CUIN") as String)
+        connectionLinks.add(connectionLink)
+        transportSliceNetwork.setConnectionLinks(connectionLinks)
+        transportSliceNetworks.add(transportSliceNetwork)
+        allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
+
+        allocateTnNssi.setSliceProfile(sliceTaskInfo.getSliceProfile().trans2TnProfile())
+        NsiInfo nsiInfo = new NsiInfo()
+        nsiInfo.setNsiId(sliceParams.getSuggestNsiId())
+        nsiInfo.setNsiName(sliceParams.getSuggestNsiName())
+        allocateTnNssi.setNsiInfo(nsiInfo)
+
+        EsrInfo esrInfo = new EsrInfo()
+        esrInfo.setVendor(sliceTaskInfo.getVendor())
+        esrInfo.setNetworkType(sliceTaskInfo.getNetworkType())
+
+        String globalSubscriberId = execution.getVariable("globalSubscriberId") as String
+        String subscriptionServiceType = execution.getVariable("subscriptionServiceType") as String
+
+        ServiceInfo serviceInfo = ServiceInfo.builder()
+                .globalSubscriberId(globalSubscriberId)
+                .subscriptionServiceType(subscriptionServiceType)
+                .nsiId(sliceParams.getSuggestNsiId())
+                .serviceInvariantUuid(sliceTaskInfo.getNSSTInfo().getInvariantUUID())
+                .serviceUuid(sliceTaskInfo.getNSSTInfo().getUUID())
+                .nssiId(sliceTaskInfo.getSuggestNssiId())
+                .sST(sliceTaskInfo.getSliceProfile().getSST() ?: sliceParams.getServiceProfile().get("sST"))
+                .nssiName("nssi_tn_bh_" + execution.getVariable("sliceServiceInstanceName") as String)
+                .build()
+
+        nbiRequest.setServiceInfo(serviceInfo)
+        nbiRequest.setEsrInfo(esrInfo)
+        nbiRequest.setAllocateTnNssi(allocateTnNssi)
+
+        execution.setVariable("TnMHAllocateNssiNbiRequest", nbiRequest)
+        execution.setVariable("tnMHSliceTaskInfo", sliceTaskInfo)
+        execution.setVariable("tnMHSubnetType", SubnetType.TN_BH)
+    }
+
+    /**
+     * Update relationship between
+     * 1. NSI and NSSI
+     * 2. Slice Profile and Service Profile
+     * 3. SliceProfile and NSSI
+     *
+     * @param execution
+     */
+    public void updateTnMHRelationship(DelegateExecution execution) {
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+
+        NssiResponse result = execution.getVariable("tnMHNssiAllocateResult") as NssiResponse
+        String nssiId = result.getNssiId()
+        String nsiId = sliceParams.getSuggestNsiId()
+        String sliceProfileInstanceId = sliceParams.tnMHSliceTaskInfo.sliceInstanceId
+        String serviceProfileInstanceId = sliceParams.serviceId
+
+        updateRelationship(execution, nsiId, nssiId)
+
+        updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
+
+        updateRelationship(execution,sliceProfileInstanceId, nssiId)
+
+        sliceParams.tnMHSliceTaskInfo.suggestNssiId = nssiId
+        execution.setVariable("sliceTaskParams", sliceParams)
+    }
 }
index 5476cb5..35b4199 100644 (file)
@@ -117,7 +117,7 @@ class DoCreateSliceServiceInstance extends AbstractServiceTaskProcessor{
             String modelUuid = modelInfo.getModelUuid()
             ss.setModelInvariantId(modelInvariantUuid)
             ss.setModelVersionId(modelUuid)
-            String serviceInstanceLocationid = serviceProfile.get("plmnIdList")
+            String serviceInstanceLocationid = serviceProfile.get("pLMNIdList")
             ss.setServiceInstanceLocationId(serviceInstanceLocationid)
             String snssai = serviceProfile.get("sNSSAI")
             ss.setEnvironmentContext(snssai)
index ac95954..2588d07 100644 (file)
@@ -213,6 +213,22 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
                 sliceParams.tnMHSliceTaskInfo.NSSTInfo.invariantUUID = modelInfo.getModelInvariantUuid()
                 sliceParams.tnMHSliceTaskInfo.NSSTInfo.name = modelInfo.getModelName()
                 break
+            case SubnetType.TN_FH:
+                sliceParams.tnFHSliceTaskInfo.vendor = vendor
+                sliceParams.tnFHSliceTaskInfo.subnetType = subnetType
+                sliceParams.tnFHSliceTaskInfo.networkType = subnetType.networkType
+                sliceParams.tnFHSliceTaskInfo.NSSTInfo.UUID = modelInfo.getModelUuid()
+                sliceParams.tnFHSliceTaskInfo.NSSTInfo.invariantUUID = modelInfo.getModelInvariantUuid()
+                sliceParams.tnFHSliceTaskInfo.NSSTInfo.name = modelInfo.getModelName()
+                break
+            case SubnetType.AN_NF:
+                sliceParams.anNFSliceTaskInfo.vendor = vendor
+                sliceParams.anNFSliceTaskInfo.subnetType = subnetType
+                sliceParams.anNFSliceTaskInfo.networkType = subnetType.networkType
+                sliceParams.anNFSliceTaskInfo.NSSTInfo.UUID = modelInfo.getModelUuid()
+                sliceParams.anNFSliceTaskInfo.NSSTInfo.invariantUUID = modelInfo.getModelInvariantUuid()
+                sliceParams.anNFSliceTaskInfo.NSSTInfo.name = modelInfo.getModelName()
+                break
             case SubnetType.AN:
                 sliceParams.anSliceTaskInfo.vendor = vendor
                 sliceParams.anSliceTaskInfo.subnetType = subnetType
@@ -255,18 +271,24 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
      * @return
      */
     private SubnetType convertServiceCategory(String serviceCategory){
-        if(serviceCategory ==~ /CN.*/){
+        if("CN NSST".equals(serviceCategory)){
             return SubnetType.CN
         }
-        if (serviceCategory ==~ /AN.*/){
+        if ("AN NF NSST".equals(serviceCategory)){
+            return SubnetType.AN_NF
+        }
+        if ("AN NSST".equals(serviceCategory)){
             return SubnetType.AN
         }
-        if (serviceCategory ==~ /TN.*BH.*/){
+        if ("TN BH NSST".equals(serviceCategory)){
             return SubnetType.TN_BH
         }
-        if(serviceCategory ==~ /TN.*MH.*/){
+        if("TN MH NSST".equals(serviceCategory)){
             return SubnetType.TN_MH
         }
+        if("TN FH NSST".equals(serviceCategory)){
+            return SubnetType.TN_FH
+        }
         return null
     }
 
@@ -426,7 +448,15 @@ class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
                 case "tn_bh":
                     sliceParams.tnBHSliceTaskInfo.sliceProfile = adapter
                     break
+                case "tn_fh":
+                    sliceParams.tnFHSliceTaskInfo.sliceProfile = adapter
+                    break
+                case "tn_mh":
+                    sliceParams.tnMHSliceTaskInfo.sliceProfile = adapter
+                    break
                 case "an_nf":
+                    sliceParams.anNFSliceTaskInfo.sliceProfile = adapter
+                    break
                 case "an":
                     sliceParams.anSliceTaskInfo.sliceProfile = adapter
                     break
index 08c03b0..e0c2b77 100644 (file)
@@ -377,7 +377,7 @@ class TnNssmfUtils {
             logger.debug("mso.workflow.TnNssmf.enableSDNCNetworkConfig is undefined, so use default value (true)")
             enableSdnc = "true"
         }
-
+       enableSdnc = "false"
         logger.debug("setEnableSdncConfig: enableSdnc=" + enableSdnc)
 
         execution.setVariable("enableSdnc", enableSdnc)
index 290e13d..4d452aa 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1wio50w" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.4.1">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1wio50w" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.8.1">
   <bpmn:process id="CreateSliceService" name="CreateSliceService" isExecutable="true">
     <bpmn:startEvent id="StartEvent_1nbljfd" name="Create Slice Service Creation Flow">
       <bpmn:outgoing>SequenceFlow_03s744c</bpmn:outgoing>
@@ -283,6 +283,7 @@ css.prepareUpdateOrchestrationTask(execution)</bpmn:script>
         <camunda:in source="allottedResourceId" target="allottedResourceId" />
         <camunda:out source="sliceTaskParams" target="sliceTaskParams" />
         <camunda:in source="allottedResourceUri" target="allottedResourceUri" />
+        <camunda:in source="nsstCount" target="nsstCount" />
       </bpmn:extensionElements>
       <bpmn:incoming>SequenceFlow_1bevt3a</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0mlrlbv</bpmn:outgoing>
@@ -319,6 +320,7 @@ css.prepareUpdateOrchestrationTask(execution)</bpmn:script>
         <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
         <camunda:in source="subscriptionServiceType" target="subscriptionServiceType" />
         <camunda:in source="serviceType" target="serviceType" />
+        <camunda:out source="maxNsstIndex" target="nsstCount" />
       </bpmn:extensionElements>
       <bpmn:incoming>SequenceFlow_1f6dyxo</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1aaozcg</bpmn:outgoing>
@@ -452,6 +454,66 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
   <bpmn:message id="Message_0c4b2r5" name="SliceServiceTask" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateSliceService">
+      <bpmndi:BPMNEdge id="SequenceFlow_031cwkd_di" bpmnElement="SequenceFlow_031cwkd">
+        <di:waypoint x="520" y="620" />
+        <di:waypoint x="550" y="620" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0sub2c2_di" bpmnElement="SequenceFlow_0sub2c2">
+        <di:waypoint x="213" y="620" />
+        <di:waypoint x="240" y="620" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1fk2cn3_di" bpmnElement="SequenceFlow_1fk2cn3">
+        <di:waypoint x="372" y="718" />
+        <di:waypoint x="372" y="772" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_02sve8o_di" bpmnElement="SequenceFlow_02sve8o">
+        <di:waypoint x="410" y="350" />
+        <di:waypoint x="520" y="350" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1r2jtal_di" bpmnElement="SequenceFlow_1r2jtal">
+        <di:waypoint x="620" y="350" />
+        <di:waypoint x="710" y="350" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1whq7vc_di" bpmnElement="SequenceFlow_1whq7vc">
+        <di:waypoint x="788" y="620" />
+        <di:waypoint x="830" y="620" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0ti386y_di" bpmnElement="SequenceFlow_0ti386y">
+        <di:waypoint x="650" y="620" />
+        <di:waypoint x="688" y="620" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1f6dyxo_di" bpmnElement="SequenceFlow_1f6dyxo">
+        <di:waypoint x="810" y="350" />
+        <di:waypoint x="880" y="350" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_12wo878_di" bpmnElement="SequenceFlow_12wo878">
+        <di:waypoint x="1330" y="124" />
+        <di:waypoint x="1402" y="124" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_00kcej9_di" bpmnElement="SequenceFlow_00kcej9">
+        <di:waypoint x="1320" y="350" />
+        <di:waypoint x="1402" y="350" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_14c2tav_di" bpmnElement="SequenceFlow_14c2tav">
+        <di:waypoint x="204" y="350" />
+        <di:waypoint x="310" y="350" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0jhqtls_di" bpmnElement="SequenceFlow_0jhqtls">
+        <di:waypoint x="1160" y="124" />
+        <di:waypoint x="1230" y="124" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1dfon41_di" bpmnElement="SequenceFlow_1dfon41">
+        <di:waypoint x="990" y="122" />
+        <di:waypoint x="1060" y="122" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1x4n7an_di" bpmnElement="SequenceFlow_1x4n7an">
+        <di:waypoint x="820" y="122" />
+        <di:waypoint x="890" y="122" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0xmvg4v_di" bpmnElement="SequenceFlow_0xmvg4v">
+        <di:waypoint x="664" y="122" />
+        <di:waypoint x="720" y="122" />
+      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0kixzdj_di" bpmnElement="SequenceFlow_0kixzdj">
         <di:waypoint x="684" y="965" />
         <di:waypoint x="764" y="965" />
@@ -561,6 +623,9 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
           <dc:Bounds x="167" y="645" width="60" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_1tc44ge_di" bpmnElement="ScriptTask_1tc44ge">
+        <dc:Bounds x="250" y="82" width="100" height="80" />
+      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1jgtb0y_di" bpmnElement="ScriptTask_1jgtb0y">
         <dc:Bounds x="830" y="580" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -591,15 +656,6 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
       <bpmndi:BPMNShape id="EndEvent_0x406rw_di" bpmnElement="EndEvent_0x406rw">
         <dc:Bounds x="446" y="1090" width="36" height="36" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1tc44ge_di" bpmnElement="ScriptTask_1tc44ge">
-        <dc:Bounds x="250" y="82" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_0kd6p6p_di" bpmnElement="ServiceTask_0kd6p6p">
-        <dc:Bounds x="564" y="82" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1xxag1o_di" bpmnElement="ScriptTask_1xxag1o">
-        <dc:Bounds x="410" y="82" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="SubProcess_1yv9i68_di" bpmnElement="SubProcess_1yv9i68" isExpanded="true">
         <dc:Bounds x="688" y="1072" width="781" height="196" />
       </bpmndi:BPMNShape>
@@ -629,9 +685,15 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
           <dc:Bounds x="1404" y="990" width="20" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_1xxag1o_di" bpmnElement="ScriptTask_1xxag1o">
+        <dc:Bounds x="410" y="82" width="100" height="80" />
+      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9">
         <dc:Bounds x="1074" y="925" width="100" height="80" />
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0kd6p6p_di" bpmnElement="ServiceTask_0kd6p6p">
+        <dc:Bounds x="564" y="82" width="100" height="80" />
+      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_0h88mep_di" bpmnElement="CallActivity_0h88mep">
         <dc:Bounds x="890" y="82" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -689,93 +751,47 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
       <bpmndi:BPMNShape id="ScriptTask_1ac05ww_di" bpmnElement="ScriptTask_1ac05ww">
         <dc:Bounds x="720" y="82" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0xmvg4v_di" bpmnElement="SequenceFlow_0xmvg4v">
-        <di:waypoint x="664" y="122" />
-        <di:waypoint x="720" y="122" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1x4n7an_di" bpmnElement="SequenceFlow_1x4n7an">
-        <di:waypoint x="820" y="122" />
-        <di:waypoint x="890" y="122" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1dfon41_di" bpmnElement="SequenceFlow_1dfon41">
-        <di:waypoint x="990" y="122" />
-        <di:waypoint x="1060" y="122" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0jhqtls_di" bpmnElement="SequenceFlow_0jhqtls">
-        <di:waypoint x="1160" y="124" />
-        <di:waypoint x="1230" y="124" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_0gceuxu_di" bpmnElement="IntermediateCatchEvent_0gceuxu">
         <dc:Bounds x="168" y="332" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="161" y="375" width="60" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_14c2tav_di" bpmnElement="SequenceFlow_14c2tav">
-        <di:waypoint x="204" y="350" />
-        <di:waypoint x="310" y="350" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_00kcej9_di" bpmnElement="SequenceFlow_00kcej9">
-        <di:waypoint x="1320" y="350" />
-        <di:waypoint x="1402" y="350" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_0lpvnze_di" bpmnElement="IntermediateThrowEvent_0lpvnze">
         <dc:Bounds x="1402" y="106" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1382" y="147" width="87" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_12wo878_di" bpmnElement="SequenceFlow_12wo878">
-        <di:waypoint x="1330" y="124" />
-        <di:waypoint x="1402" y="124" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_13roglo_di" bpmnElement="ScriptTask_13roglo">
         <dc:Bounds x="710" y="310" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1f6dyxo_di" bpmnElement="SequenceFlow_1f6dyxo">
-        <di:waypoint x="810" y="350" />
-        <di:waypoint x="880" y="350" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_0bz8a65_di" bpmnElement="EndEvent_0bz8a65">
         <dc:Bounds x="354" y="772" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_04qudo2_di" bpmnElement="ScriptTask_04qudo2">
         <dc:Bounds x="550" y="580" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0ti386y_di" bpmnElement="SequenceFlow_0ti386y">
-        <di:waypoint x="650" y="620" />
-        <di:waypoint x="688" y="620" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_1vu3zcv_di" bpmnElement="CallActivity_1vu3zcv">
         <dc:Bounds x="688" y="580" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1whq7vc_di" bpmnElement="SequenceFlow_1whq7vc">
-        <di:waypoint x="788" y="620" />
-        <di:waypoint x="830" y="620" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_0xf2g6c_di" bpmnElement="CallActivity_0xf2g6c">
         <dc:Bounds x="520" y="310" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1r2jtal_di" bpmnElement="SequenceFlow_1r2jtal">
-        <di:waypoint x="620" y="350" />
-        <di:waypoint x="710" y="350" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_1ayg9y8_di" bpmnElement="ScriptTask_1ayg9y8">
         <dc:Bounds x="310" y="310" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_02sve8o_di" bpmnElement="SequenceFlow_02sve8o">
-        <di:waypoint x="410" y="350" />
-        <di:waypoint x="520" y="350" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_1sxkpqq_di" bpmnElement="SubProcess_1sxkpqq" isExpanded="true">
         <dc:Bounds x="240" y="540" width="280" height="160" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="BoundaryEvent_0xqq1ch_di" bpmnElement="BoundaryEvent_0xqq1ch">
-        <dc:Bounds x="354" y="682" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="395" y="712" width="40" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0recnor_di" bpmnElement="SequenceFlow_0recnor">
+        <di:waypoint x="308" y="620" />
+        <di:waypoint x="367" y="620" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1htsa6t_di" bpmnElement="SequenceFlow_1htsa6t">
+        <di:waypoint x="403" y="620" />
+        <di:waypoint x="460" y="620" />
+      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="StartEvent_1hd68zf_di" bpmnElement="StartEvent_1hd68zf">
         <dc:Bounds x="272" y="602" width="36" height="36" />
       </bpmndi:BPMNShape>
@@ -788,26 +804,12 @@ css.prepareSelectNSTRequest(execution)</bpmn:script>
           <dc:Bounds x="353" y="644" width="67" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1htsa6t_di" bpmnElement="SequenceFlow_1htsa6t">
-        <di:waypoint x="403" y="620" />
-        <di:waypoint x="460" y="620" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0recnor_di" bpmnElement="SequenceFlow_0recnor">
-        <di:waypoint x="308" y="620" />
-        <di:waypoint x="367" y="620" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1fk2cn3_di" bpmnElement="SequenceFlow_1fk2cn3">
-        <di:waypoint x="372" y="718" />
-        <di:waypoint x="372" y="772" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0sub2c2_di" bpmnElement="SequenceFlow_0sub2c2">
-        <di:waypoint x="213" y="620" />
-        <di:waypoint x="240" y="620" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_031cwkd_di" bpmnElement="SequenceFlow_031cwkd">
-        <di:waypoint x="520" y="620" />
-        <di:waypoint x="550" y="620" />
-      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="BoundaryEvent_0xqq1ch_di" bpmnElement="BoundaryEvent_0xqq1ch">
+        <dc:Bounds x="354" y="682" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="395" y="712" width="40" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
index 9df7398..85aa7c2 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns: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_05od9yd" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.1">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns: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_05od9yd" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.10.0">
   <bpmn:process id="DoAllocateAccessNSSI" name="DoAllocateAccessNSSI" isExecutable="true">
     <bpmn:startEvent id="StartEvent_1" name="Start">
       <bpmn:outgoing>Flow_163f3sq</bpmn:outgoing>
@@ -12,14 +12,14 @@ def nss = new DoAllocateAccessNSSI()
 nss.preProcessRequest(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:scriptTask id="Activity_0vhvubq" name="Get Subnet capabilities" scriptFormat="groovy">
-      <bpmn:incoming>Flow_00f37fu</bpmn:incoming>
+      <bpmn:incoming>Flow_1xcjj1m</bpmn:incoming>
       <bpmn:outgoing>Flow_1w8whur</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def nss = new DoAllocateAccessNSSI()
 nss.getSubnetCapabilities(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:scriptTask id="Activity_11vdo22" name="Prepare Resource Operation Status Update" scriptFormat="groovy">
-      <bpmn:incoming>Flow_0833cha</bpmn:incoming>
+      <bpmn:incoming>Flow_1gxbsoi</bpmn:incoming>
       <bpmn:outgoing>Flow_1xw4abx</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def nss = new DoAllocateAccessNSSI()
@@ -50,12 +50,12 @@ nss.prepareOperationStatusUpdate(execution)</bpmn:script>
     <bpmn:endEvent id="Event_0vh1hs2">
       <bpmn:incoming>Flow_0ll5x3u</bpmn:incoming>
     </bpmn:endEvent>
-    <bpmn:sequenceFlow id="Flow_0833cha" sourceRef="Event_05jtdqp" targetRef="Activity_11vdo22" />
+    <bpmn:sequenceFlow id="Flow_0833cha" sourceRef="Event_05jtdqp" targetRef="Activity_0vf28ld" />
     <bpmn:sequenceFlow id="Flow_1xw4abx" sourceRef="Activity_11vdo22" targetRef="Activity_1nfx154" />
     <bpmn:sequenceFlow id="Flow_0ll5x3u" sourceRef="Activity_1nfx154" targetRef="Event_0vh1hs2" />
     <bpmn:sequenceFlow id="Flow_1x3y2tg" sourceRef="Event_18r5xkz" targetRef="Activity_03dgcg5" />
     <bpmn:scriptTask id="Activity_19laorl" name="prepare OOF request for RAN NF NSSI selection" scriptFormat="groovy">
-      <bpmn:incoming>Flow_0rb4j9r</bpmn:incoming>
+      <bpmn:incoming>Flow_1eo3bed</bpmn:incoming>
       <bpmn:outgoing>Flow_0d0f3ie</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def nss = new DoAllocateAccessNSSI()
@@ -80,7 +80,7 @@ nss.prepareTnMhRequest(execution)</bpmn:script>
       <bpmn:linkEventDefinition id="LinkEventDefinition_05sogjc" name="OperationStatusUpdate" />
     </bpmn:intermediateCatchEvent>
     <bpmn:intermediateThrowEvent id="Event_0u9308h" name="Go to start  Â operation status update">
-      <bpmn:incoming>Flow_0kcvava</bpmn:incoming>
+      <bpmn:incoming>Flow_0bd6dhi</bpmn:incoming>
       <bpmn:linkEventDefinition id="LinkEventDefinition_1o9trjv" name="OperationStatusUpdate" />
     </bpmn:intermediateThrowEvent>
     <bpmn:intermediateCatchEvent id="Event_18r5xkz" name="start TN allocate">
@@ -120,7 +120,7 @@ nss.prepareOofRequestForRanNSS(execution)</bpmn:script>
       <bpmn:linkEventDefinition id="LinkEventDefinition_08wuatj" name="OperationStatusUpdate" />
     </bpmn:intermediateThrowEvent>
     <bpmn:intermediateThrowEvent id="Event_15zn4zi" name="Goto start TN allocate">
-      <bpmn:incoming>Flow_1exjm0h</bpmn:incoming>
+      <bpmn:incoming>Flow_0d40k12</bpmn:incoming>
       <bpmn:linkEventDefinition id="LinkEventDefinition_13crcza" name="startTnAllocate" />
     </bpmn:intermediateThrowEvent>
     <bpmn:scriptTask id="Activity_1pxd5wf" name="Process OOF response" scriptFormat="groovy">
@@ -256,12 +256,11 @@ nss.processMhAllocateNssiJobStatusRsp(execution)</bpmn:script>
     <bpmn:sequenceFlow id="Flow_1v3wpa2" sourceRef="Activity_0c0cq9d" targetRef="Activity_0zn4e4n" />
     <bpmn:scriptTask id="Activity_1ll0nr1" name="Process Decomposition" scriptFormat="groovy">
       <bpmn:incoming>Flow_1i10qog</bpmn:incoming>
-      <bpmn:outgoing>Flow_00f37fu</bpmn:outgoing>
+      <bpmn:outgoing>Flow_1f0furp</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def nss = new DoAllocateAccessNSSI()
 nss.processDecomposition(execution)</bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="Flow_00f37fu" sourceRef="Activity_1ll0nr1" targetRef="Activity_0vhvubq" />
     <bpmn:callActivity id="Activity_06hcbu6" name="Call Decompose Service" calledElement="DecomposeService">
       <bpmn:extensionElements>
         <camunda:in source="msoRequestId" target="msoRequestId" />
@@ -278,7 +277,7 @@ nss.processDecomposition(execution)</bpmn:script>
     <bpmn:sequenceFlow id="Flow_1i10qog" sourceRef="Activity_06hcbu6" targetRef="Activity_1ll0nr1" />
     <bpmn:scriptTask id="Activity_1aweui4" name="post process RAN NF NSSI modify" scriptFormat="groovy">
       <bpmn:incoming>Flow_1k3vqxg</bpmn:incoming>
-      <bpmn:outgoing>Flow_0n1mh5c</bpmn:outgoing>
+      <bpmn:outgoing>Flow_1tx240t</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def nss = new DoAllocateAccessNSSI()
 nss.processRanNfModifyRsp(execution)</bpmn:script>
@@ -395,7 +394,7 @@ nss.processNsstDecomposition(execution)</bpmn:script>
     <bpmn:sequenceFlow id="Flow_0reg6l5" sourceRef="Activity_0fdm3in" targetRef="Activity_0a7a04p" />
     <bpmn:sequenceFlow id="Flow_0jdjta3" sourceRef="Activity_0a7a04p" targetRef="Activity_1nmk2rt" />
     <bpmn:sequenceFlow id="Flow_0y78v1q" sourceRef="Activity_1nmk2rt" targetRef="Gateway_1cmraqs" />
-    <bpmn:sequenceFlow id="Flow_0rb4j9r" name="yes" sourceRef="Gateway_1cmraqs" targetRef="Activity_19laorl">
+    <bpmn:sequenceFlow id="Flow_0rb4j9r" name="yes" sourceRef="Gateway_1cmraqs" targetRef="Event_0lx9qhs">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isAllNsstsDecomposed" )  == true)}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:sequenceFlow id="Flow_0d0f3ie" sourceRef="Activity_19laorl" targetRef="Activity_0y9xgkl" />
@@ -432,12 +431,11 @@ def nss = new DoAllocateAccessNSSI()
 nss.updateAaiWithRANInstances(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="Flow_0ikdlkf" sourceRef="Activity_118je0o" targetRef="Activity_0pa8al6" />
-    <bpmn:sequenceFlow id="Flow_1exjm0h" sourceRef="Activity_0pa8al6" targetRef="Event_15zn4zi" />
-    <bpmn:sequenceFlow id="Flow_0bd6dhi" sourceRef="Activity_0zn4e4n" targetRef="Activity_0vf28ld" />
-    <bpmn:sequenceFlow id="Flow_0kcvava" sourceRef="Activity_0vf28ld" targetRef="Event_0u9308h" />
+    <bpmn:sequenceFlow id="Flow_1exjm0h" sourceRef="Activity_0pa8al6" targetRef="Gateway_1832fz7" />
+    <bpmn:sequenceFlow id="Flow_0bd6dhi" sourceRef="Activity_0zn4e4n" targetRef="Event_0u9308h" />
     <bpmn:scriptTask id="Activity_0vf28ld" name="update AAI relationships" scriptFormat="groovy">
-      <bpmn:incoming>Flow_0bd6dhi</bpmn:incoming>
-      <bpmn:outgoing>Flow_0kcvava</bpmn:outgoing>
+      <bpmn:incoming>Flow_0833cha</bpmn:incoming>
+      <bpmn:outgoing>Flow_1gxbsoi</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def nss = new DoAllocateAccessNSSI()
 nss.updateAairelationships(execution)</bpmn:script>
@@ -492,10 +490,9 @@ nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
       <bpmn:sequenceFlow id="Flow_0umohws" sourceRef="Activity_0p0mwue" targetRef="Activity_084fqbd" />
     </bpmn:subProcess>
     <bpmn:intermediateThrowEvent id="Event_1cqde7p" name="Goto start TN allocate">
-      <bpmn:incoming>Flow_0n1mh5c</bpmn:incoming>
+      <bpmn:incoming>Flow_15uux8j</bpmn:incoming>
       <bpmn:linkEventDefinition id="LinkEventDefinition_0da795k" name="startTnAllocate" />
     </bpmn:intermediateThrowEvent>
-    <bpmn:sequenceFlow id="Flow_0n1mh5c" sourceRef="Activity_1aweui4" targetRef="Event_1cqde7p" />
     <bpmn:callActivity id="Activity_08i0hzk" name="DoModifyRanNfNssi" calledElement="DoModifyRanNfNssi">
       <bpmn:extensionElements>
         <camunda:in source="msoRequestId" target="msoRequestId" />
@@ -513,52 +510,125 @@ nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
     </bpmn:callActivity>
     <bpmn:sequenceFlow id="Flow_1k3vqxg" sourceRef="Activity_08i0hzk" targetRef="Activity_1aweui4" />
     <bpmn:sequenceFlow id="Flow_083bb3k" sourceRef="Gateway_1cmraqs" targetRef="Activity_0fdm3in" />
+    <bpmn:sequenceFlow id="Flow_1gxbsoi" sourceRef="Activity_0vf28ld" targetRef="Activity_11vdo22" />
+    <bpmn:intermediateThrowEvent id="Event_0lx9qhs" name="Goto start RANNF Allocate">
+      <bpmn:incoming>Flow_0rb4j9r</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_0s0j5kx" name="startRANNFAllocate" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:intermediateCatchEvent id="Event_0idp63x" name="start RANNF Allocate">
+      <bpmn:outgoing>Flow_1eo3bed</bpmn:outgoing>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_0zk2eis" name="startRANNFAllocate" />
+    </bpmn:intermediateCatchEvent>
+    <bpmn:sequenceFlow id="Flow_1eo3bed" sourceRef="Event_0idp63x" targetRef="Activity_19laorl" />
+    <bpmn:exclusiveGateway id="Gateway_1832fz7" name="Is TN Present?" default="Flow_0d40k12">
+      <bpmn:incoming>Flow_1exjm0h</bpmn:incoming>
+      <bpmn:outgoing>Flow_0d40k12</bpmn:outgoing>
+      <bpmn:outgoing>Flow_024x74t</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="Flow_0d40k12" name="Yes" sourceRef="Gateway_1832fz7" targetRef="Event_15zn4zi" />
+    <bpmn:intermediateThrowEvent id="Event_11t655f" name="Go to start  Â operation status update">
+      <bpmn:incoming>Flow_024x74t</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_0f0lmkf" name="OperationStatusUpdate" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:sequenceFlow id="Flow_024x74t" name="No" sourceRef="Gateway_1832fz7" targetRef="Event_11t655f">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("IsRANNfAlonePresent" )  == true)}</bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:exclusiveGateway id="Gateway_0qnxawk" name="Is TOP RAN has TN NSSTs?" default="Flow_1xcjj1m">
+      <bpmn:incoming>Flow_1f0furp</bpmn:incoming>
+      <bpmn:outgoing>Flow_1xcjj1m</bpmn:outgoing>
+      <bpmn:outgoing>Flow_0twvyso</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="Flow_1xcjj1m" name="yes" sourceRef="Gateway_0qnxawk" targetRef="Activity_0vhvubq" />
+    <bpmn:intermediateThrowEvent id="Event_0htr86v" name="Go to start NSSI allocate">
+      <bpmn:incoming>Flow_0twvyso</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_02ffzy2" name="NSSIAllocate" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:sequenceFlow id="Flow_0twvyso" name="No" sourceRef="Gateway_0qnxawk" targetRef="Event_0htr86v">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("IsRANNfAlonePresent" )  == true)}</bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:sequenceFlow id="Flow_1f0furp" sourceRef="Activity_1ll0nr1" targetRef="Gateway_0qnxawk" />
+    <bpmn:exclusiveGateway id="Gateway_0rm6svp" name="Is TN present?" default="Flow_15uux8j">
+      <bpmn:incoming>Flow_1tx240t</bpmn:incoming>
+      <bpmn:outgoing>Flow_15uux8j</bpmn:outgoing>
+      <bpmn:outgoing>Flow_1ryf352</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="Flow_1tx240t" sourceRef="Activity_1aweui4" targetRef="Gateway_0rm6svp" />
+    <bpmn:sequenceFlow id="Flow_15uux8j" name="Yes" sourceRef="Gateway_0rm6svp" targetRef="Event_1cqde7p" />
+    <bpmn:intermediateThrowEvent id="Event_0f7ueve" name="Go to start  Â operation status update">
+      <bpmn:incoming>Flow_1ryf352</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_1qz179m" name="OperationStatusUpdate" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:sequenceFlow id="Flow_1ryf352" name="No" sourceRef="Gateway_0rm6svp" targetRef="Event_0f7ueve">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("IsRANNfAlonePresent" )  == true)}</bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
   </bpmn:process>
   <bpmn:message id="Message_1r7nv8u" name="WorkflowMessage" />
   <bpmn:error id="Error_047rteq" name="MSO Workflow Exception" errorCode="MSOWorkflowException" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoAllocateAccessNSSI">
-      <bpmndi:BPMNEdge id="Flow_0kcvava_di" bpmnElement="Flow_0kcvava">
-        <di:waypoint x="1800" y="820" />
-        <di:waypoint x="1882" y="820" />
+      <bpmndi:BPMNEdge id="Flow_1f0furp_di" bpmnElement="Flow_1f0furp">
+        <di:waypoint x="790" y="120" />
+        <di:waypoint x="875" y="120" />
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0bd6dhi_di" bpmnElement="Flow_0bd6dhi">
-        <di:waypoint x="1620" y="820" />
-        <di:waypoint x="1700" y="820" />
+      <bpmndi:BPMNEdge id="Flow_0twvyso_di" bpmnElement="Flow_0twvyso">
+        <di:waypoint x="900" y="145" />
+        <di:waypoint x="900" y="192" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="908" y="166" width="15" height="14" />
+        </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_1exjm0h_di" bpmnElement="Flow_1exjm0h">
-        <di:waypoint x="1850" y="680" />
-        <di:waypoint x="1882" y="680" />
+      <bpmndi:BPMNEdge id="Flow_1xcjj1m_di" bpmnElement="Flow_1xcjj1m">
+        <di:waypoint x="925" y="120" />
+        <di:waypoint x="1030" y="120" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="970" y="102" width="17" height="14" />
+        </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0ikdlkf_di" bpmnElement="Flow_0ikdlkf">
-        <di:waypoint x="1720" y="680" />
-        <di:waypoint x="1750" y="680" />
+      <bpmndi:BPMNEdge id="Flow_1eo3bed_di" bpmnElement="Flow_1eo3bed">
+        <di:waypoint x="228" y="819" />
+        <di:waypoint x="300" y="819" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1gxbsoi_di" bpmnElement="Flow_1gxbsoi">
+        <di:waypoint x="430" y="1440" />
+        <di:waypoint x="490" y="1440" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_083bb3k_di" bpmnElement="Flow_083bb3k">
+        <di:waypoint x="790" y="554" />
+        <di:waypoint x="790" y="660" />
+        <di:waypoint x="420" y="660" />
+        <di:waypoint x="420" y="569" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1k3vqxg_di" bpmnElement="Flow_1k3vqxg">
+        <di:waypoint x="1010" y="818" />
+        <di:waypoint x="1040" y="818" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0bd6dhi_di" bpmnElement="Flow_0bd6dhi">
+        <di:waypoint x="1620" y="1260" />
+        <di:waypoint x="1722" y="1260" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0fdetmo_di" bpmnElement="Flow_0fdetmo">
-        <di:waypoint x="1260" y="820" />
-        <di:waypoint x="1340" y="820" />
+        <di:waypoint x="1260" y="1260" />
+        <di:waypoint x="1340" y="1260" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1p48xbl_di" bpmnElement="Flow_1p48xbl">
-        <di:waypoint x="580" y="820" />
-        <di:waypoint x="640" y="820" />
+        <di:waypoint x="580" y="1260" />
+        <di:waypoint x="640" y="1260" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1ryi6ym_di" bpmnElement="Flow_1ryi6ym">
-        <di:waypoint x="1330" y="531" />
-        <di:waypoint x="1355" y="531" />
+        <di:waypoint x="780" y="820" />
+        <di:waypoint x="805" y="820" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1f9rw3m_di" bpmnElement="Flow_1f9rw3m">
-        <di:waypoint x="1210" y="531" />
-        <di:waypoint x="1230" y="531" />
+        <di:waypoint x="660" y="820" />
+        <di:waypoint x="680" y="820" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0d0f3ie_di" bpmnElement="Flow_0d0f3ie">
-        <di:waypoint x="950" y="530" />
-        <di:waypoint x="980" y="530" />
+        <di:waypoint x="400" y="819" />
+        <di:waypoint x="430" y="819" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0rb4j9r_di" bpmnElement="Flow_0rb4j9r">
         <di:waypoint x="815" y="529" />
-        <di:waypoint x="833" y="529" />
-        <di:waypoint x="833" y="530" />
-        <di:waypoint x="850" y="530" />
+        <di:waypoint x="882" y="529" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="824" y="543" width="17" height="14" />
         </bpmndi:BPMNLabel>
@@ -609,48 +679,36 @@ nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
         <di:waypoint x="480" y="120" />
         <di:waypoint x="530" y="120" />
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_00f37fu_di" bpmnElement="Flow_00f37fu">
-        <di:waypoint x="790" y="120" />
-        <di:waypoint x="830" y="120" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1v3wpa2_di" bpmnElement="Flow_1v3wpa2">
-        <di:waypoint x="1440" y="820" />
-        <di:waypoint x="1520" y="820" />
+        <di:waypoint x="1440" y="1260" />
+        <di:waypoint x="1520" y="1260" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_04thflx_di" bpmnElement="Flow_04thflx">
-        <di:waypoint x="1100" y="820" />
-        <di:waypoint x="1160" y="820" />
+        <di:waypoint x="1100" y="1260" />
+        <di:waypoint x="1160" y="1260" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0qhjtre_di" bpmnElement="Flow_0qhjtre">
-        <di:waypoint x="410" y="820" />
-        <di:waypoint x="480" y="820" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_05yqmnj_di" bpmnElement="Flow_05yqmnj">
-        <di:waypoint x="1580" y="680" />
-        <di:waypoint x="1620" y="680" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_1pbiznt_di" bpmnElement="Flow_1pbiznt">
-        <di:waypoint x="1430" y="680" />
-        <di:waypoint x="1480" y="680" />
+        <di:waypoint x="410" y="1260" />
+        <di:waypoint x="480" y="1260" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0kn30g3_di" bpmnElement="Flow_0kn30g3">
-        <di:waypoint x="1403" y="529" />
-        <di:waypoint x="1460" y="529" />
+        <di:waypoint x="853" y="818" />
+        <di:waypoint x="910" y="818" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1413" y="513" width="17" height="14" />
+          <dc:Bounds x="863" y="802" width="17" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1nkqrpd_di" bpmnElement="Flow_1nkqrpd">
-        <di:waypoint x="1080" y="531" />
-        <di:waypoint x="1110" y="531" />
+        <di:waypoint x="530" y="820" />
+        <di:waypoint x="560" y="820" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_16z59pu_di" bpmnElement="Flow_16z59pu">
-        <di:waypoint x="740" y="820" />
-        <di:waypoint x="810" y="820" />
+        <di:waypoint x="740" y="1260" />
+        <di:waypoint x="810" y="1260" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1b14415_di" bpmnElement="Flow_1b14415">
-        <di:waypoint x="1200" y="120" />
-        <di:waypoint x="1240" y="120" />
+        <di:waypoint x="1400" y="120" />
+        <di:waypoint x="1440" y="120" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0tica8m_di" bpmnElement="Flow_0tica8m">
         <di:waypoint x="340" y="120" />
@@ -669,22 +727,22 @@ nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
         <di:waypoint x="245" y="380" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1h7iq8l_di" bpmnElement="Flow_1h7iq8l">
-        <di:waypoint x="1340" y="120" />
-        <di:waypoint x="1372" y="120" />
+        <di:waypoint x="1540" y="120" />
+        <di:waypoint x="1572" y="120" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0tkzfhb_di" bpmnElement="Flow_0tkzfhb">
-        <di:waypoint x="1060" y="120" />
-        <di:waypoint x="1100" y="120" />
+        <di:waypoint x="1260" y="120" />
+        <di:waypoint x="1300" y="120" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1w8whur_di" bpmnElement="Flow_1w8whur">
-        <di:waypoint x="930" y="120" />
-        <di:waypoint x="960" y="120" />
+        <di:waypoint x="1130" y="120" />
+        <di:waypoint x="1160" y="120" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_178fenq_di" bpmnElement="Flow_178fenq">
-        <di:waypoint x="1380" y="556" />
-        <di:waypoint x="1380" y="640" />
+        <di:waypoint x="830" y="845" />
+        <di:waypoint x="830" y="977" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1386" y="574" width="15" height="14" />
+          <dc:Bounds x="836" y="863" width="15" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1ipsxgh_di" bpmnElement="Flow_1ipsxgh">
@@ -699,38 +757,72 @@ nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
         <di:waypoint x="240" y="120" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0zhr499_di" bpmnElement="Flow_0zhr499">
-        <di:waypoint x="910" y="820" />
-        <di:waypoint x="1000" y="820" />
+        <di:waypoint x="910" y="1260" />
+        <di:waypoint x="1000" y="1260" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1x3y2tg_di" bpmnElement="Flow_1x3y2tg">
-        <di:waypoint x="228" y="820" />
-        <di:waypoint x="310" y="820" />
+        <di:waypoint x="228" y="1260" />
+        <di:waypoint x="310" y="1260" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0ll5x3u_di" bpmnElement="Flow_0ll5x3u">
-        <di:waypoint x="600" y="1010" />
-        <di:waypoint x="692" y="1010" />
+        <di:waypoint x="760" y="1440" />
+        <di:waypoint x="862" y="1440" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1xw4abx_di" bpmnElement="Flow_1xw4abx">
-        <di:waypoint x="420" y="1010" />
-        <di:waypoint x="500" y="1010" />
+        <di:waypoint x="590" y="1440" />
+        <di:waypoint x="660" y="1440" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0833cha_di" bpmnElement="Flow_0833cha">
-        <di:waypoint x="228" y="1010" />
-        <di:waypoint x="320" y="1010" />
+        <di:waypoint x="228" y="1440" />
+        <di:waypoint x="330" y="1440" />
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_0n1mh5c_di" bpmnElement="Flow_0n1mh5c">
-        <di:waypoint x="1690" y="529" />
-        <di:waypoint x="1742" y="529" />
+      <bpmndi:BPMNEdge id="Flow_1tx240t_di" bpmnElement="Flow_1tx240t">
+        <di:waypoint x="1140" y="818" />
+        <di:waypoint x="1245" y="818" />
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_1k3vqxg_di" bpmnElement="Flow_1k3vqxg">
-        <di:waypoint x="1560" y="529" />
-        <di:waypoint x="1590" y="529" />
+      <bpmndi:BPMNEdge id="Flow_15uux8j_di" bpmnElement="Flow_15uux8j">
+        <di:waypoint x="1295" y="818" />
+        <di:waypoint x="1392" y="818" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1335" y="800" width="18" height="14" />
+        </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_083bb3k_di" bpmnElement="Flow_083bb3k">
-        <di:waypoint x="790" y="554" />
-        <di:waypoint x="790" y="730" />
-        <di:waypoint x="420" y="730" />
-        <di:waypoint x="420" y="569" />
+      <bpmndi:BPMNEdge id="Flow_0d40k12_di" bpmnElement="Flow_0d40k12">
+        <di:waypoint x="1375" y="1017" />
+        <di:waypoint x="1452" y="1017" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1406" y="999" width="18" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1pbiznt_di" bpmnElement="Flow_1pbiznt">
+        <di:waypoint x="880" y="1017" />
+        <di:waypoint x="930" y="1017" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_05yqmnj_di" bpmnElement="Flow_05yqmnj">
+        <di:waypoint x="1030" y="1017" />
+        <di:waypoint x="1070" y="1017" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0ikdlkf_di" bpmnElement="Flow_0ikdlkf">
+        <di:waypoint x="1170" y="1017" />
+        <di:waypoint x="1200" y="1017" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1exjm0h_di" bpmnElement="Flow_1exjm0h">
+        <di:waypoint x="1300" y="1017" />
+        <di:waypoint x="1325" y="1017" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_024x74t_di" bpmnElement="Flow_024x74t">
+        <di:waypoint x="1350" y="1042" />
+        <di:waypoint x="1350" y="1100" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1358" y="1068" width="15" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1ryf352_di" bpmnElement="Flow_1ryf352">
+        <di:waypoint x="1270" y="843" />
+        <di:waypoint x="1270" y="865" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1278" y="851" width="15" height="14" />
+        </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
         <dc:Bounds x="162" y="102" width="36" height="36" />
@@ -742,52 +834,52 @@ nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
         <dc:Bounds x="240" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1gdi5bo_di" bpmnElement="Activity_0vhvubq">
-        <dc:Bounds x="830" y="80" width="100" height="80" />
+        <dc:Bounds x="1030" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_11vdo22_di" bpmnElement="Activity_11vdo22">
-        <dc:Bounds x="320" y="970" width="100" height="80" />
+        <dc:Bounds x="490" y="1400" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1nfx154_di" bpmnElement="Activity_1nfx154">
-        <dc:Bounds x="500" y="970" width="100" height="80" />
+        <dc:Bounds x="660" y="1400" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_0vh1hs2_di" bpmnElement="Event_0vh1hs2">
-        <dc:Bounds x="692" y="992" width="36" height="36" />
+        <dc:Bounds x="862" y="1422" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0icw8wt_di" bpmnElement="Activity_19laorl">
-        <dc:Bounds x="850" y="490" width="100" height="80" />
+        <dc:Bounds x="300" y="779" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_10z6k5t_di" bpmnElement="Activity_03dgcg5">
-        <dc:Bounds x="310" y="780" width="100" height="80" />
+        <dc:Bounds x="310" y="1220" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1dracjc_di" bpmnElement="Activity_18y4ijb">
-        <dc:Bounds x="1000" y="780" width="100" height="80" />
+        <dc:Bounds x="1000" y="1220" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_0g0i472_di" bpmnElement="Event_05jtdqp">
-        <dc:Bounds x="192" y="992" width="36" height="36" />
+        <dc:Bounds x="192" y="1422" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="174" y="1035" width="73" height="27" />
+          <dc:Bounds x="174" y="1465" width="73" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_1ea1h0i_di" bpmnElement="Event_0u9308h">
-        <dc:Bounds x="1882" y="802" width="36" height="36" />
+        <dc:Bounds x="1722" y="1242" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1860" y="850" width="79" height="40" />
+          <dc:Bounds x="1700" y="1290" width="79" height="40" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_1fj3anx_di" bpmnElement="Event_18r5xkz">
-        <dc:Bounds x="192" y="802" width="36" height="36" />
+        <dc:Bounds x="192" y="1242" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="170" y="845" width="81" height="14" />
+          <dc:Bounds x="170" y="1285" width="81" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0nm8unl_di" bpmnElement="Activity_0qn2fvh">
-        <dc:Bounds x="810" y="780" width="100" height="80" />
+        <dc:Bounds x="810" y="1220" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_12szahe_di" bpmnElement="Activity_12szahe">
-        <dc:Bounds x="1240" y="80" width="100" height="80" />
+        <dc:Bounds x="1440" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1oepxwk_di" bpmnElement="Activity_0vwhzem">
-        <dc:Bounds x="960" y="80" width="100" height="80" />
+        <dc:Bounds x="1160" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Gateway_1aesepd_di" bpmnElement="Gateway_1aesepd" isMarkerVisible="true">
         <dc:Bounds x="245" y="355" width="50" height="50" />
@@ -801,31 +893,19 @@ nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
           <dc:Bounds x="1220" y="397" width="79" height="40" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Event_15zn4zi_di" bpmnElement="Event_15zn4zi">
-        <dc:Bounds x="1882" y="662" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1868" y="705" width="67" height="27" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1pxd5wf_di" bpmnElement="Activity_1pxd5wf">
-        <dc:Bounds x="1110" y="491" width="100" height="80" />
+        <dc:Bounds x="560" y="780" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Gateway_0en9ki5_di" bpmnElement="Gateway_0en9ki5" isMarkerVisible="true">
-        <dc:Bounds x="1355" y="506" width="50" height="50" />
+        <dc:Bounds x="805" y="795" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1349" y="476" width="62" height="27" />
+          <dc:Bounds x="799" y="765" width="62" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_0a95zgv_di" bpmnElement="Activity_0a95zgv">
-        <dc:Bounds x="1330" y="640" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_118je0o_di" bpmnElement="Activity_118je0o">
-        <dc:Bounds x="1620" y="640" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_0qwruv5_di" bpmnElement="Event_0s8t1ji">
-        <dc:Bounds x="1372" y="102" width="36" height="36" />
+        <dc:Bounds x="1572" y="102" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1351" y="145" width="81" height="27" />
+          <dc:Bounds x="1551" y="145" width="81" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_1vfrb2l_di" bpmnElement="Event_1glt41l">
@@ -838,22 +918,19 @@ nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
         <dc:Bounds x="380" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1u28lyv_di" bpmnElement="Activity_1u28lyv">
-        <dc:Bounds x="1100" y="80" width="100" height="80" />
+        <dc:Bounds x="1300" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1ux83hz_di" bpmnElement="Activity_1ux83hz">
-        <dc:Bounds x="640" y="780" width="100" height="80" />
+        <dc:Bounds x="640" y="1220" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0c0cq9d_di" bpmnElement="Activity_0c0cq9d">
-        <dc:Bounds x="1340" y="780" width="100" height="80" />
+        <dc:Bounds x="1340" y="1220" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0y9xgkl_di" bpmnElement="Activity_0y9xgkl">
-        <dc:Bounds x="980" y="491" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_0vbzhej_di" bpmnElement="Activity_0vbzhej">
-        <dc:Bounds x="1480" y="640" width="100" height="80" />
+        <dc:Bounds x="430" y="780" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0zn4e4n_di" bpmnElement="Activity_0zn4e4n">
-        <dc:Bounds x="1520" y="780" width="100" height="80" />
+        <dc:Bounds x="1520" y="1220" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1ll0nr1_di" bpmnElement="Activity_1ll0nr1">
         <dc:Bounds x="690" y="80" width="100" height="80" />
@@ -861,9 +938,6 @@ nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
       <bpmndi:BPMNShape id="Activity_06hcbu6_di" bpmnElement="Activity_06hcbu6">
         <dc:Bounds x="530" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_1xke4xc_di" bpmnElement="Activity_1aweui4">
-        <dc:Bounds x="1590" y="489" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1bjike9_di" bpmnElement="Activity_1bjike9">
         <dc:Bounds x="530" y="340" width="100" height="80" />
       </bpmndi:BPMNShape>
@@ -898,62 +972,128 @@ nss.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
         <dc:Bounds x="620" y="489" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_027ic3j_di" bpmnElement="Activity_027ic3j">
-        <dc:Bounds x="1230" y="491" width="100" height="80" />
+        <dc:Bounds x="680" y="780" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_12vtq69_di" bpmnElement="Activity_12vtq69">
-        <dc:Bounds x="480" y="780" width="100" height="80" />
+        <dc:Bounds x="480" y="1220" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0qpy2sg_di" bpmnElement="Activity_0qpy2sg">
-        <dc:Bounds x="1160" y="780" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_0pa8al6_di" bpmnElement="Activity_0pa8al6">
-        <dc:Bounds x="1750" y="640" width="100" height="80" />
+        <dc:Bounds x="1160" y="1220" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1riw9uv_di" bpmnElement="Activity_0vf28ld">
-        <dc:Bounds x="1700" y="780" width="100" height="80" />
+        <dc:Bounds x="330" y="1400" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_1cqde7p_di" bpmnElement="Event_1cqde7p">
-        <dc:Bounds x="1742" y="511" width="36" height="36" />
+        <dc:Bounds x="1392" y="800" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1728" y="554" width="67" height="27" />
+          <dc:Bounds x="1378" y="843" width="67" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="Activity_08i0hzk_di" bpmnElement="Activity_08i0hzk">
-        <dc:Bounds x="1460" y="489" width="100" height="80" />
+      <bpmndi:BPMNShape id="Activity_1xke4xc_di" bpmnElement="Activity_1aweui4">
+        <dc:Bounds x="1040" y="778" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Gateway_0rm6svp_di" bpmnElement="Gateway_0rm6svp" isMarkerVisible="true">
+        <dc:Bounds x="1245" y="793" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1235" y="763" width="73" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_15zn4zi_di" bpmnElement="Event_15zn4zi">
+        <dc:Bounds x="1452" y="999" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1438" y="1042" width="67" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0a95zgv_di" bpmnElement="Activity_0a95zgv">
+        <dc:Bounds x="780" y="977" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_118je0o_di" bpmnElement="Activity_118je0o">
+        <dc:Bounds x="1070" y="977" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0vbzhej_di" bpmnElement="Activity_0vbzhej">
+        <dc:Bounds x="930" y="977" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0pa8al6_di" bpmnElement="Activity_0pa8al6">
+        <dc:Bounds x="1200" y="977" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Gateway_1832fz7_di" bpmnElement="Gateway_1832fz7" isMarkerVisible="true">
+        <dc:Bounds x="1325" y="992" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1313" y="971" width="74" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_11t655f_di" bpmnElement="Event_11t655f">
+        <dc:Bounds x="1332" y="1100" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1310" y="1148" width="79" height="40" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_0f7ueve_di" bpmnElement="Event_0f7ueve">
+        <dc:Bounds x="1252" y="865" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1230" y="913" width="79" height="40" />
+        </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0bcs8g1_di" bpmnElement="Activity_0bcs8g1" isExpanded="true">
-        <dc:Bounds x="410" y="1160" width="781" height="196" />
+        <dc:Bounds x="390" y="1530" width="781" height="196" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="Flow_0umohws_di" bpmnElement="Flow_0umohws">
-        <di:waypoint x="800" y="1264" />
-        <di:waypoint x="870" y="1264" />
+        <di:waypoint x="780" y="1634" />
+        <di:waypoint x="850" y="1634" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_11qgtdm_di" bpmnElement="Flow_11qgtdm">
-        <di:waypoint x="640" y="1264" />
-        <di:waypoint x="700" y="1264" />
+        <di:waypoint x="620" y="1634" />
+        <di:waypoint x="680" y="1634" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_18rrdsq_di" bpmnElement="Flow_18rrdsq">
-        <di:waypoint x="476" y="1264" />
-        <di:waypoint x="540" y="1264" />
+        <di:waypoint x="456" y="1634" />
+        <di:waypoint x="520" y="1634" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_0c9dr7z_di" bpmnElement="Flow_0c9dr7z">
-        <di:waypoint x="970" y="1264" />
-        <di:waypoint x="1078" y="1264" />
+        <di:waypoint x="950" y="1634" />
+        <di:waypoint x="1058" y="1634" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="Event_077lf7i_di" bpmnElement="Event_077lf7i">
-        <dc:Bounds x="440" y="1246" width="36" height="36" />
+        <dc:Bounds x="420" y="1616" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_1p00v8c_di" bpmnElement="Event_1p00v8c">
-        <dc:Bounds x="1078" y="1246" width="36" height="36" />
+        <dc:Bounds x="1058" y="1616" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_084fqbd_di" bpmnElement="Activity_084fqbd">
-        <dc:Bounds x="870" y="1224" width="100" height="80" />
+        <dc:Bounds x="850" y="1594" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1adxijg_di" bpmnElement="Activity_1adxijg">
-        <dc:Bounds x="540" y="1224" width="100" height="80" />
+        <dc:Bounds x="520" y="1594" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0p0mwue_di" bpmnElement="Activity_0p0mwue">
-        <dc:Bounds x="700" y="1224" width="100" height="80" />
+        <dc:Bounds x="680" y="1594" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_08i0hzk_di" bpmnElement="Activity_08i0hzk">
+        <dc:Bounds x="910" y="778" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_0lx9qhs_di" bpmnElement="Event_0lx9qhs">
+        <dc:Bounds x="882" y="511" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="855" y="546" width="90" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_0idp63x_di" bpmnElement="Event_0idp63x">
+        <dc:Bounds x="192" y="801" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="180" y="844" width="63" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Gateway_0qnxawk_di" bpmnElement="Gateway_0qnxawk" isMarkerVisible="true">
+        <dc:Bounds x="875" y="95" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="860" y="65" width="82" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_0htr86v_di" bpmnElement="Event_0htr86v">
+        <dc:Bounds x="882" y="192" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="860" y="227" width="81" height="27" />
+        </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
index c6268d3..51f96ee 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.4.1">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.8.1">
   <bpmn:process id="DoAllocateNSIandNSSI" name="DoAllocateNSIandNSSI" isExecutable="true">
     <bpmn:startEvent id="StartEvent_1ym3sha" name="Start">
       <bpmn:outgoing>SequenceFlow_0xgfj7z</bpmn:outgoing>
@@ -155,7 +155,7 @@ dcnsio.createCnSliceProfileInstance(execution)</bpmn:script>
 def dcnsio = new DoAllocateNSIandNSSI()
 dcnsio.createCnSliceProfile(execution)</bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="SequenceFlow_0ax2c4p" sourceRef="ExclusiveGateway_19ru3hp" targetRef="EndEvent_02c8wsp" />
+    <bpmn:sequenceFlow id="SequenceFlow_0ax2c4p" sourceRef="ExclusiveGateway_19ru3hp" targetRef="Gateway_0tpcoai" />
     <bpmn:scriptTask id="ScriptTask_0stnvp3" name="Create TN (BH) Slice Profile" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0paqrtx</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1d48cil</bpmn:outgoing>
@@ -230,7 +230,7 @@ dcnsio.updateCnRelationship(execution)</bpmn:script>
       <bpmn:incoming>SequenceFlow_150xio1</bpmn:incoming>
     </bpmn:endEvent>
     <bpmn:intermediateThrowEvent id="EndEvent_02c8wsp" name="GoTo Create Tn SliceProfile">
-      <bpmn:incoming>SequenceFlow_0ax2c4p</bpmn:incoming>
+      <bpmn:incoming>Flow_0ehx22x</bpmn:incoming>
       <bpmn:linkEventDefinition name="CreateTnSliceProfile" />
     </bpmn:intermediateThrowEvent>
     <bpmn:scriptTask id="ScriptTask_0s8vhha" name="prepare Allocate An Nssi" scriptFormat="groovy">
@@ -274,56 +274,363 @@ dcnsio.createANEndpoint(execution)</bpmn:script>
 def dcnsio = new DoAllocateNSIandNSSI()
 dcnsio.createCNEndpoint(execution)</bpmn:script>
     </bpmn:scriptTask>
+    <bpmn:intermediateCatchEvent id="Event_0mxnhe0" name="Create Tn FH SliceProfile">
+      <bpmn:outgoing>Flow_19564hj</bpmn:outgoing>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_03yk2ml" name="CreateTnFHSliceProfile" />
+    </bpmn:intermediateCatchEvent>
+    <bpmn:scriptTask id="Activity_0z1ympd" name="Create TN (FH) Slice Profile" scriptFormat="groovy">
+      <bpmn:incoming>Flow_19564hj</bpmn:incoming>
+      <bpmn:outgoing>Flow_1j649ha</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcnsio = new DoAllocateNSIandNSSI()
+dcnsio.createTnFHSliceProfileInstance(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_1xwl7x0" name="Create TN(FH) Slice Profile" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1j649ha</bpmn:incoming>
+      <bpmn:outgoing>Flow_1hhipma</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcnsio = new DoAllocateNSIandNSSI()
+dcnsio.createTnFHSliceProfile(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_14td7ux" name="prepare Allocate Tn-FH Nssi" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1hhipma</bpmn:incoming>
+      <bpmn:outgoing>Flow_00n25jt</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcnsio = new DoAllocateNSIandNSSI()
+dcnsio.prepareAllocateTnFHNssi(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:callActivity id="Activity_129ztck" name="Call DoAllocateNSSI(TN)" calledElement="DoAllocateNSSI">
+      <bpmn:extensionElements>
+        <camunda:in source="msoRequestId" target="msoRequestId" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:in source="nsstInput" target="nsstInput" />
+        <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
+        <camunda:in source="subscriptionServiceType" target="subscriptionServiceType" />
+        <camunda:in source="uuiRequest" target="uuiRequest" />
+        <camunda:in source="sliceTaskParams" target="sliceTaskParams" />
+        <camunda:in source="taskId" target="CSSOT_taskId" />
+        <camunda:in source="taskName" target="CSSOT_name" />
+        <camunda:in source="taskStatus" target="CSSOT_status" />
+        <camunda:in source="isManual" target="CSSOT_isManual" />
+        <camunda:in source="isNSIOptionAvailable" target="isNSIOptionAvailable" />
+        <camunda:in source="tnFHSliceTaskInfo" target="sliceTaskInfo" />
+        <camunda:out source="nssiAllocateResult" target="tnFHNssiAllocateResult" />
+        <camunda:in source="TnFHAllocateNssiNbiRequest" target="nbiRequest" />
+        <camunda:out source="sliceTaskParams" target="sliceTaskParams" />
+        <camunda:in source="tnFHSubnetType" target="subnetType" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_00n25jt</bpmn:incoming>
+      <bpmn:outgoing>Flow_1b3a4vn</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_0e7x5rm" name="Update relationship between NSI and NSSI" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1b3a4vn</bpmn:incoming>
+      <bpmn:outgoing>Flow_0dpbero</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcnsio = new DoAllocateNSIandNSSI()
+dcnsio.updateTnFHRelationship(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_19564hj" sourceRef="Event_0mxnhe0" targetRef="Activity_0z1ympd" />
+    <bpmn:sequenceFlow id="Flow_1j649ha" sourceRef="Activity_0z1ympd" targetRef="Activity_1xwl7x0" />
+    <bpmn:sequenceFlow id="Flow_1hhipma" sourceRef="Activity_1xwl7x0" targetRef="Activity_14td7ux" />
+    <bpmn:sequenceFlow id="Flow_00n25jt" sourceRef="Activity_14td7ux" targetRef="Activity_129ztck" />
+    <bpmn:sequenceFlow id="Flow_1b3a4vn" sourceRef="Activity_129ztck" targetRef="Activity_0e7x5rm" />
+    <bpmn:intermediateCatchEvent id="Event_0grj24z" name="Create Tn MH SliceProfile">
+      <bpmn:outgoing>Flow_0bu5pc9</bpmn:outgoing>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_0vmyjtc" name="CreateTnMHSliceProfile" />
+    </bpmn:intermediateCatchEvent>
+    <bpmn:scriptTask id="Activity_0zlfgf5" name="Create TN (MH) Slice Profile" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0bu5pc9</bpmn:incoming>
+      <bpmn:outgoing>Flow_04gnit7</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcnsio = new DoAllocateNSIandNSSI()
+dcnsio.createTnMHSliceProfileInstance(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_0j9tjaf" name="Create TN(MH) Slice Profile" scriptFormat="groovy">
+      <bpmn:incoming>Flow_04gnit7</bpmn:incoming>
+      <bpmn:outgoing>Flow_1i02ybs</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcnsio = new DoAllocateNSIandNSSI()
+dcnsio.createTnMHSliceProfile(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="Activity_147twno" name="prepare Allocate Tn-MH Nssi" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1i02ybs</bpmn:incoming>
+      <bpmn:outgoing>Flow_0shgflm</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcnsio = new DoAllocateNSIandNSSI()
+dcnsio.prepareAllocateTnMHNssi(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:callActivity id="Activity_0fvj9vy" name="Call DoAllocateNSSI(TN)" calledElement="DoAllocateNSSI">
+      <bpmn:extensionElements>
+        <camunda:in source="msoRequestId" target="msoRequestId" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:in source="nsstInput" target="nsstInput" />
+        <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
+        <camunda:in source="subscriptionServiceType" target="subscriptionServiceType" />
+        <camunda:in source="uuiRequest" target="uuiRequest" />
+        <camunda:in source="sliceTaskParams" target="sliceTaskParams" />
+        <camunda:in source="taskId" target="CSSOT_taskId" />
+        <camunda:in source="taskName" target="CSSOT_name" />
+        <camunda:in source="taskStatus" target="CSSOT_status" />
+        <camunda:in source="isManual" target="CSSOT_isManual" />
+        <camunda:in source="isNSIOptionAvailable" target="isNSIOptionAvailable" />
+        <camunda:in source="tnMHSliceTaskInfo" target="sliceTaskInfo" />
+        <camunda:out source="nssiAllocateResult" target="tnMHNssiAllocateResult" />
+        <camunda:in source="TnMHAllocateNssiNbiRequest" target="nbiRequest" />
+        <camunda:out source="sliceTaskParams" target="sliceTaskParams" />
+        <camunda:in source="tnMHSubnetType" target="subnetType" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>Flow_0shgflm</bpmn:incoming>
+      <bpmn:outgoing>Flow_05lgxne</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:scriptTask id="Activity_08n2y6k" name="Update relationship between NSI and NSSI" scriptFormat="groovy">
+      <bpmn:incoming>Flow_05lgxne</bpmn:incoming>
+      <bpmn:outgoing>Flow_0imtsjm</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcnsio = new DoAllocateNSIandNSSI()
+dcnsio.updateTnMHRelationship(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_0bu5pc9" sourceRef="Event_0grj24z" targetRef="Activity_0zlfgf5" />
+    <bpmn:sequenceFlow id="Flow_04gnit7" sourceRef="Activity_0zlfgf5" targetRef="Activity_0j9tjaf" />
+    <bpmn:sequenceFlow id="Flow_1i02ybs" sourceRef="Activity_0j9tjaf" targetRef="Activity_147twno" />
+    <bpmn:sequenceFlow id="Flow_0shgflm" sourceRef="Activity_147twno" targetRef="Activity_0fvj9vy" />
+    <bpmn:sequenceFlow id="Flow_05lgxne" sourceRef="Activity_0fvj9vy" targetRef="Activity_08n2y6k" />
+    <bpmn:sequenceFlow id="Flow_0imtsjm" sourceRef="Activity_08n2y6k" targetRef="Event_09ptj1a" />
+    <bpmn:intermediateThrowEvent id="Event_0th2geo" name="GoTo Create Tn MH SliceProfile">
+      <bpmn:incoming>Flow_0dpbero</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_18xcdzv" name="CreateTnMHSliceProfile" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:sequenceFlow id="Flow_0dpbero" sourceRef="Activity_0e7x5rm" targetRef="Event_0th2geo" />
+    <bpmn:intermediateThrowEvent id="Event_09ptj1a" name="GoTo Create Tn SliceProfile">
+      <bpmn:incoming>Flow_0imtsjm</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_0pcw91e" name="CreateTnSliceProfile" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:exclusiveGateway id="Gateway_0tpcoai" name="Is FH/MH need to be process?">
+      <bpmn:incoming>SequenceFlow_0ax2c4p</bpmn:incoming>
+      <bpmn:outgoing>Flow_0ehx22x</bpmn:outgoing>
+      <bpmn:outgoing>Flow_13i03hb</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:intermediateThrowEvent id="Event_1hemevb" name="GoTo Create Tn FH SliceProfile">
+      <bpmn:incoming>Flow_13i03hb</bpmn:incoming>
+      <bpmn:linkEventDefinition id="LinkEventDefinition_1rscmuw" name="CreateTnFHSliceProfile" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:sequenceFlow id="Flow_0ehx22x" sourceRef="Gateway_0tpcoai" targetRef="EndEvent_02c8wsp" />
+    <bpmn:sequenceFlow id="Flow_13i03hb" name="yes" sourceRef="Gateway_0tpcoai" targetRef="Event_1hemevb">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("processFHandMH" )  == true)}</bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
   </bpmn:process>
   <bpmn:message id="Message_1i10pf1" name="Message_2mc69tg" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoAllocateNSIandNSSI">
+      <bpmndi:BPMNEdge id="SequenceFlow_17r1oa0_di" bpmnElement="SequenceFlow_17r1oa0">
+        <di:waypoint x="750" y="630" />
+        <di:waypoint x="830" y="630" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1rwy8q7_di" bpmnElement="SequenceFlow_1rwy8q7">
+        <di:waypoint x="750" y="440" />
+        <di:waypoint x="830" y="440" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1wffel4_di" bpmnElement="SequenceFlow_1wffel4">
+        <di:waypoint x="580" y="630" />
+        <di:waypoint x="650" y="630" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0cwbtmr_di" bpmnElement="SequenceFlow_0cwbtmr">
+        <di:waypoint x="930" y="630" />
+        <di:waypoint x="1030" y="630" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0npsyye_di" bpmnElement="SequenceFlow_0npsyye">
+        <di:waypoint x="930" y="440" />
+        <di:waypoint x="1030" y="440" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0jqxxjq_di" bpmnElement="SequenceFlow_0jqxxjq">
+        <di:waypoint x="1310" y="630" />
+        <di:waypoint x="1430" y="630" />
+        <di:waypoint x="1430" y="555" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1l74seh_di" bpmnElement="SequenceFlow_1l74seh">
+        <di:waypoint x="1130" y="630" />
+        <di:waypoint x="1210" y="630" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0xx5bwa_di" bpmnElement="SequenceFlow_0xx5bwa">
+        <di:waypoint x="1310" y="440" />
+        <di:waypoint x="1430" y="440" />
+        <di:waypoint x="1430" y="505" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0ax2c4p_di" bpmnElement="SequenceFlow_0ax2c4p">
+        <di:waypoint x="1455" y="530" />
+        <di:waypoint x="1505" y="530" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0zbd2tq_di" bpmnElement="SequenceFlow_0zbd2tq">
+        <di:waypoint x="580" y="440" />
+        <di:waypoint x="650" y="440" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_05ovikm_di" bpmnElement="SequenceFlow_05ovikm">
+        <di:waypoint x="1070" y="140" />
+        <di:waypoint x="1412" y="140" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0t0wddg_di" bpmnElement="SequenceFlow_0t0wddg">
+        <di:waypoint x="1030" y="260" />
+        <di:waypoint x="1430" y="260" />
+        <di:waypoint x="1430" y="158" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1xb5nx1_di" bpmnElement="SequenceFlow_1xb5nx1">
+        <di:waypoint x="1130" y="440" />
+        <di:waypoint x="1210" y="440" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0f36cu2_di" bpmnElement="SequenceFlow_0f36cu2">
+        <di:waypoint x="410" y="630" />
+        <di:waypoint x="480" y="630" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1hfjn79_di" bpmnElement="SequenceFlow_1hfjn79">
+        <di:waypoint x="410" y="440" />
+        <di:waypoint x="480" y="440" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0k5iu2n_di" bpmnElement="SequenceFlow_0k5iu2n">
+        <di:waypoint x="264" y="545" />
+        <di:waypoint x="264" y="630" />
+        <di:waypoint x="310" y="630" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1m68yca_di" bpmnElement="SequenceFlow_1m68yca">
+        <di:waypoint x="264" y="495" />
+        <di:waypoint x="264" y="440" />
+        <di:waypoint x="310" y="440" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0ct8yh4_di" bpmnElement="SequenceFlow_0ct8yh4">
+        <di:waypoint x="174" y="520" />
+        <di:waypoint x="239" y="520" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_03ye8m4_di" bpmnElement="SequenceFlow_03ye8m4">
+        <di:waypoint x="634" y="165" />
+        <di:waypoint x="634" y="260" />
+        <di:waypoint x="930" y="260" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1k3cspv_di" bpmnElement="SequenceFlow_1k3cspv">
+        <di:waypoint x="900" y="140" />
+        <di:waypoint x="970" y="140" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0c986i9_di" bpmnElement="SequenceFlow_0c986i9">
+        <di:waypoint x="659" y="140" />
+        <di:waypoint x="800" y="140" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1ggo6s5_di" bpmnElement="SequenceFlow_1ggo6s5">
+        <di:waypoint x="504" y="140" />
+        <di:waypoint x="609" y="140" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_00aukg6_di" bpmnElement="SequenceFlow_00aukg6">
+        <di:waypoint x="324" y="140" />
+        <di:waypoint x="404" y="140" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0xgfj7z_di" bpmnElement="SequenceFlow_0xgfj7z">
+        <di:waypoint x="174" y="140" />
+        <di:waypoint x="224" y="140" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_19564hj_di" bpmnElement="Flow_19564hj">
+        <di:waypoint x="174" y="760" />
+        <di:waypoint x="310" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1j649ha_di" bpmnElement="Flow_1j649ha">
+        <di:waypoint x="410" y="760" />
+        <di:waypoint x="530" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1hhipma_di" bpmnElement="Flow_1hhipma">
+        <di:waypoint x="630" y="760" />
+        <di:waypoint x="730" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_00n25jt_di" bpmnElement="Flow_00n25jt">
+        <di:waypoint x="830" y="760" />
+        <di:waypoint x="930" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1b3a4vn_di" bpmnElement="Flow_1b3a4vn">
+        <di:waypoint x="1030" y="760" />
+        <di:waypoint x="1140" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0dpbero_di" bpmnElement="Flow_0dpbero">
+        <di:waypoint x="1240" y="760" />
+        <di:waypoint x="1422" y="760" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0paqrtx_di" bpmnElement="SequenceFlow_0paqrtx">
+        <di:waypoint x="174" y="1060" />
+        <di:waypoint x="310" y="1060" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1d48cil_di" bpmnElement="SequenceFlow_1d48cil">
+        <di:waypoint x="410" y="1060" />
+        <di:waypoint x="530" y="1060" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_00dexhy_di" bpmnElement="SequenceFlow_00dexhy">
+        <di:waypoint x="630" y="1060" />
+        <di:waypoint x="730" y="1060" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_01isn2q_di" bpmnElement="SequenceFlow_01isn2q">
+        <di:waypoint x="830" y="1060" />
+        <di:waypoint x="930" y="1060" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1omynpt_di" bpmnElement="SequenceFlow_1omynpt">
+        <di:waypoint x="1030" y="1060" />
+        <di:waypoint x="1140" y="1060" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_150xio1_di" bpmnElement="SequenceFlow_150xio1">
+        <di:waypoint x="1240" y="1060" />
+        <di:waypoint x="1412" y="1060" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0bu5pc9_di" bpmnElement="Flow_0bu5pc9">
+        <di:waypoint x="174" y="920" />
+        <di:waypoint x="310" y="920" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_04gnit7_di" bpmnElement="Flow_04gnit7">
+        <di:waypoint x="410" y="920" />
+        <di:waypoint x="530" y="920" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1i02ybs_di" bpmnElement="Flow_1i02ybs">
+        <di:waypoint x="630" y="920" />
+        <di:waypoint x="730" y="920" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0shgflm_di" bpmnElement="Flow_0shgflm">
+        <di:waypoint x="830" y="920" />
+        <di:waypoint x="930" y="920" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_05lgxne_di" bpmnElement="Flow_05lgxne">
+        <di:waypoint x="1030" y="920" />
+        <di:waypoint x="1140" y="920" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0imtsjm_di" bpmnElement="Flow_0imtsjm">
+        <di:waypoint x="1240" y="920" />
+        <di:waypoint x="1432" y="920" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0ehx22x_di" bpmnElement="Flow_0ehx22x">
+        <di:waypoint x="1555" y="530" />
+        <di:waypoint x="1602" y="530" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1572" y="512" width="13" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_13i03hb_di" bpmnElement="Flow_13i03hb">
+        <di:waypoint x="1530" y="555" />
+        <di:waypoint x="1530" y="620" />
+        <di:waypoint x="1602" y="620" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1537" y="585" width="17" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="StartEvent_1ym3sha_di" bpmnElement="StartEvent_1ym3sha">
         <dc:Bounds x="138" y="122" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="144" y="165" width="25" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0xgfj7z_di" bpmnElement="SequenceFlow_0xgfj7z">
-        <di:waypoint x="174" y="140" />
-        <di:waypoint x="224" y="140" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0q0td74_di" bpmnElement="Task_027u6m6">
         <dc:Bounds x="224" y="100" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0qorxd9_di" bpmnElement="ScriptTask_0qorxd9">
         <dc:Bounds x="404" y="100" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_00aukg6_di" bpmnElement="SequenceFlow_00aukg6">
-        <di:waypoint x="324" y="140" />
-        <di:waypoint x="404" y="140" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ExclusiveGateway_00pt1ek_di" bpmnElement="ExclusiveGateway_00pt1ek" isMarkerVisible="true">
         <dc:Bounds x="609" y="115" width="50" height="50" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="604" y="78" width="59" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1ggo6s5_di" bpmnElement="SequenceFlow_1ggo6s5">
-        <di:waypoint x="504" y="140" />
-        <di:waypoint x="609" y="140" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0c986i9_di" bpmnElement="SequenceFlow_0c986i9">
-        <di:waypoint x="659" y="140" />
-        <di:waypoint x="800" y="140" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_1tizl6b_di" bpmnElement="ScriptTask_1tizl6b">
         <dc:Bounds x="800" y="100" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1k3cspv_di" bpmnElement="SequenceFlow_1k3cspv">
-        <di:waypoint x="900" y="140" />
-        <di:waypoint x="970" y="140" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_03ye8m4_di" bpmnElement="SequenceFlow_03ye8m4">
-        <di:waypoint x="634" y="165" />
-        <di:waypoint x="634" y="260" />
-        <di:waypoint x="930" y="260" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_0zuxkap_di" bpmnElement="IntermediateThrowEvent_0fx1nyj">
         <dc:Bounds x="1412" y="122" width="36" height="36" />
         <bpmndi:BPMNLabel>
@@ -336,184 +643,149 @@ dcnsio.createCNEndpoint(execution)</bpmn:script>
           <dc:Bounds x="126" y="545" width="60" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0ct8yh4_di" bpmnElement="SequenceFlow_0ct8yh4">
-        <di:waypoint x="174" y="520" />
-        <di:waypoint x="239" y="520" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ParallelGateway_0q9h79n_di" bpmnElement="ExclusiveGateway_00ufetn">
         <dc:Bounds x="239" y="495" width="50" height="50" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1m68yca_di" bpmnElement="SequenceFlow_1m68yca">
-        <di:waypoint x="264" y="495" />
-        <di:waypoint x="264" y="440" />
-        <di:waypoint x="310" y="440" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0k5iu2n_di" bpmnElement="SequenceFlow_0k5iu2n">
-        <di:waypoint x="264" y="545" />
-        <di:waypoint x="264" y="630" />
-        <di:waypoint x="310" y="630" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_1yh9tiq_di" bpmnElement="CallActivity_1yh9tiq">
         <dc:Bounds x="1030" y="400" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1hfjn79_di" bpmnElement="SequenceFlow_1hfjn79">
-        <di:waypoint x="410" y="440" />
-        <di:waypoint x="480" y="440" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_1ixah3o_di" bpmnElement="CallActivity_1ixah3o">
         <dc:Bounds x="1030" y="590" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0f36cu2_di" bpmnElement="SequenceFlow_0f36cu2">
-        <di:waypoint x="410" y="630" />
-        <di:waypoint x="480" y="630" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1xb5nx1_di" bpmnElement="SequenceFlow_1xb5nx1">
-        <di:waypoint x="1130" y="440" />
-        <di:waypoint x="1210" y="440" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ParallelGateway_15vgf7c_di" bpmnElement="ExclusiveGateway_19ru3hp">
         <dc:Bounds x="1405" y="505" width="50" height="50" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_07sgklo_di" bpmnElement="ScriptTask_07sgklo">
         <dc:Bounds x="930" y="220" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0t0wddg_di" bpmnElement="SequenceFlow_0t0wddg">
-        <di:waypoint x="1030" y="260" />
-        <di:waypoint x="1430" y="260" />
-        <di:waypoint x="1430" y="158" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_1r6kuwy_di" bpmnElement="ScriptTask_1r6kuwy">
         <dc:Bounds x="970" y="100" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_05ovikm_di" bpmnElement="SequenceFlow_05ovikm">
-        <di:waypoint x="1070" y="140" />
-        <di:waypoint x="1412" y="140" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_17cq3xj_di" bpmnElement="Task_1tv7jy5">
         <dc:Bounds x="310" y="400" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1r2li91_di" bpmnElement="ScriptTask_1r2li91">
         <dc:Bounds x="480" y="400" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0zbd2tq_di" bpmnElement="SequenceFlow_0zbd2tq">
-        <di:waypoint x="580" y="440" />
-        <di:waypoint x="650" y="440" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_01n5nmt_di" bpmnElement="Task_1en3luv">
         <dc:Bounds x="310" y="590" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0juh1xy_di" bpmnElement="Task_1g8n8iz">
         <dc:Bounds x="480" y="590" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0ax2c4p_di" bpmnElement="SequenceFlow_0ax2c4p">
-        <di:waypoint x="1455" y="530" />
-        <di:waypoint x="1512" y="530" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0stnvp3_di" bpmnElement="ScriptTask_0stnvp3">
-        <dc:Bounds x="310" y="840" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_0mls87v_di" bpmnElement="ScriptTask_0mls87v">
+        <dc:Bounds x="1210" y="400" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1f4o46q_di" bpmnElement="ScriptTask_1f4o46q">
-        <dc:Bounds x="530" y="840" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_0z9x5uh_di" bpmnElement="ScriptTask_0z9x5uh">
+        <dc:Bounds x="1210" y="590" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="CallActivity_0b28wlb_di" bpmnElement="CallActivity_0b28wlb">
-        <dc:Bounds x="930" y="840" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_0s8vhha_di" bpmnElement="ScriptTask_0s8vhha">
+        <dc:Bounds x="830" y="400" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0z0ec5b_di" bpmnElement="ScriptTask_0z0ec5b">
+        <dc:Bounds x="830" y="590" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0x8r537_di" bpmnElement="Task_0dkfe9n">
+        <dc:Bounds x="650" y="400" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0mlyx1u_di" bpmnElement="Task_0fwhsq2">
+        <dc:Bounds x="650" y="590" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_0mxnhe0_di" bpmnElement="Event_0mxnhe0">
+        <dc:Bounds x="138" y="742" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="124" y="785" width="67" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0z1ympd_di" bpmnElement="Activity_0z1ympd">
+        <dc:Bounds x="310" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_1xwl7x0_di" bpmnElement="Activity_1xwl7x0">
+        <dc:Bounds x="530" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_14td7ux_di" bpmnElement="Activity_14td7ux">
+        <dc:Bounds x="730" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_129ztck_di" bpmnElement="Activity_129ztck">
+        <dc:Bounds x="930" y="720" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0e7x5rm_di" bpmnElement="Activity_0e7x5rm">
+        <dc:Bounds x="1140" y="720" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1d48cil_di" bpmnElement="SequenceFlow_1d48cil">
-        <di:waypoint x="410" y="880" />
-        <di:waypoint x="530" y="880" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_00dexhy_di" bpmnElement="SequenceFlow_00dexhy">
-        <di:waypoint x="630" y="880" />
-        <di:waypoint x="730" y="880" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_08wpvhs_di" bpmnElement="IntermediateCatchEvent_08wpvhs">
-        <dc:Bounds x="138" y="862" width="36" height="36" />
+        <dc:Bounds x="138" y="1042" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="129" y="905" width="56" height="27" />
+          <dc:Bounds x="129" y="1085" width="56" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0paqrtx_di" bpmnElement="SequenceFlow_0paqrtx">
-        <di:waypoint x="174" y="880" />
-        <di:waypoint x="310" y="880" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0sssiii_di" bpmnElement="ScriptTask_0sssiii">
-        <dc:Bounds x="1140" y="840" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_0stnvp3_di" bpmnElement="ScriptTask_0stnvp3">
+        <dc:Bounds x="310" y="1020" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_150xio1_di" bpmnElement="SequenceFlow_150xio1">
-        <di:waypoint x="1240" y="880" />
-        <di:waypoint x="1412" y="880" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0mls87v_di" bpmnElement="ScriptTask_0mls87v">
-        <dc:Bounds x="1210" y="400" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_1f4o46q_di" bpmnElement="ScriptTask_1f4o46q">
+        <dc:Bounds x="530" y="1020" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0xx5bwa_di" bpmnElement="SequenceFlow_0xx5bwa">
-        <di:waypoint x="1310" y="440" />
-        <di:waypoint x="1430" y="440" />
-        <di:waypoint x="1430" y="505" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0z9x5uh_di" bpmnElement="ScriptTask_0z9x5uh">
-        <dc:Bounds x="1210" y="590" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_0ci5g6y_di" bpmnElement="ScriptTask_0ci5g6y">
+        <dc:Bounds x="730" y="1020" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="CallActivity_0b28wlb_di" bpmnElement="CallActivity_0b28wlb">
+        <dc:Bounds x="930" y="1020" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0sssiii_di" bpmnElement="ScriptTask_0sssiii">
+        <dc:Bounds x="1140" y="1020" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1l74seh_di" bpmnElement="SequenceFlow_1l74seh">
-        <di:waypoint x="1130" y="630" />
-        <di:waypoint x="1210" y="630" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0jqxxjq_di" bpmnElement="SequenceFlow_0jqxxjq">
-        <di:waypoint x="1310" y="630" />
-        <di:waypoint x="1430" y="630" />
-        <di:waypoint x="1430" y="555" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1omynpt_di" bpmnElement="SequenceFlow_1omynpt">
-        <di:waypoint x="1030" y="880" />
-        <di:waypoint x="1140" y="880" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_0elqlhv_di" bpmnElement="EndEvent_0elqlhv">
-        <dc:Bounds x="1412" y="862" width="36" height="36" />
+        <dc:Bounds x="1412" y="1042" width="36" height="36" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="IntermediateThrowEvent_0gz4vi6_di" bpmnElement="EndEvent_02c8wsp">
-        <dc:Bounds x="1512" y="512" width="36" height="36" />
+      <bpmndi:BPMNShape id="Event_0grj24z_di" bpmnElement="Event_0grj24z">
+        <dc:Bounds x="138" y="902" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1492" y="555" width="79" height="27" />
+          <dc:Bounds x="123" y="945" width="70" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0s8vhha_di" bpmnElement="ScriptTask_0s8vhha">
-        <dc:Bounds x="830" y="400" width="100" height="80" />
+      <bpmndi:BPMNShape id="Activity_0zlfgf5_di" bpmnElement="Activity_0zlfgf5">
+        <dc:Bounds x="310" y="880" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0npsyye_di" bpmnElement="SequenceFlow_0npsyye">
-        <di:waypoint x="930" y="440" />
-        <di:waypoint x="1030" y="440" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0z0ec5b_di" bpmnElement="ScriptTask_0z0ec5b">
-        <dc:Bounds x="830" y="590" width="100" height="80" />
+      <bpmndi:BPMNShape id="Activity_0j9tjaf_di" bpmnElement="Activity_0j9tjaf">
+        <dc:Bounds x="530" y="880" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0cwbtmr_di" bpmnElement="SequenceFlow_0cwbtmr">
-        <di:waypoint x="930" y="630" />
-        <di:waypoint x="1030" y="630" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1wffel4_di" bpmnElement="SequenceFlow_1wffel4">
-        <di:waypoint x="580" y="630" />
-        <di:waypoint x="650" y="630" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0ci5g6y_di" bpmnElement="ScriptTask_0ci5g6y">
-        <dc:Bounds x="730" y="840" width="100" height="80" />
+      <bpmndi:BPMNShape id="Activity_147twno_di" bpmnElement="Activity_147twno">
+        <dc:Bounds x="730" y="880" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_01isn2q_di" bpmnElement="SequenceFlow_01isn2q">
-        <di:waypoint x="830" y="880" />
-        <di:waypoint x="930" y="880" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1rwy8q7_di" bpmnElement="SequenceFlow_1rwy8q7">
-        <di:waypoint x="750" y="440" />
-        <di:waypoint x="830" y="440" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0x8r537_di" bpmnElement="Task_0dkfe9n">
-        <dc:Bounds x="650" y="400" width="100" height="80" />
+      <bpmndi:BPMNShape id="Activity_0fvj9vy_di" bpmnElement="Activity_0fvj9vy">
+        <dc:Bounds x="930" y="880" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_17r1oa0_di" bpmnElement="SequenceFlow_17r1oa0">
-        <di:waypoint x="750" y="630" />
-        <di:waypoint x="830" y="630" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0mlyx1u_di" bpmnElement="Task_0fwhsq2">
-        <dc:Bounds x="650" y="590" width="100" height="80" />
+      <bpmndi:BPMNShape id="Activity_08n2y6k_di" bpmnElement="Activity_08n2y6k">
+        <dc:Bounds x="1140" y="880" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_0th2geo_di" bpmnElement="Event_0th2geo">
+        <dc:Bounds x="1422" y="742" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1402" y="785" width="79" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_09ptj1a_di" bpmnElement="Event_09ptj1a">
+        <dc:Bounds x="1432" y="902" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1412" y="945" width="79" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Gateway_0tpcoai_di" bpmnElement="Gateway_0tpcoai" isMarkerVisible="true">
+        <dc:Bounds x="1505" y="505" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1488" y="468" width="87" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_0gz4vi6_di" bpmnElement="EndEvent_02c8wsp">
+        <dc:Bounds x="1602" y="512" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1582" y="555" width="79" height="27" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Event_1hemevb_di" bpmnElement="Event_1hemevb">
+        <dc:Bounds x="1602" y="602" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1582" y="645" width="79" height="27" />
+        </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
index 81d64b5..7cc940d 100644 (file)
@@ -63,7 +63,7 @@ public class SliceProfileAdapter implements Serializable {
     private int maxBandwidth;
 
     @JsonProperty(value = "sST")
-    private String sST;
+    private String sST = "embb";
 
     @JsonProperty(value = "activityFactor")
     private int activityFactor;
index bfd4627..15dd2f7 100644 (file)
@@ -67,150 +67,7 @@ public class SliceTaskParamsAdapter implements Serializable {
 
     private SliceTaskInfo<SliceProfileAdapter> anSliceTaskInfo = new SliceTaskInfo<>();
 
-    @SuppressWarnings("unchecked")
-    public void convertFromJson(String jsonString) throws IOException {
-        ObjectMapper mapper = new ObjectMapper();
-        Map<String, String> paramMap = (Map<String, String>) mapper.readValue(jsonString, Map.class);
-
-        this.setServiceName(paramMap.get("ServiceName"));
-        this.setServiceId(paramMap.get("ServiceId"));
-        this.setNstId(paramMap.get("NSTId"));
-        this.setNstName(paramMap.get("NSTName"));
-        this.setSuggestNsiId(paramMap.get("suggestNSIId"));
-        this.setSuggestNsiName(paramMap.get("suggestNSIName"));
-
-        this.setServiceProfile(replaceHeader(paramMap, "ServiceProfile."));
-
-        SliceProfileAdapter tnBHSliceProfile = mapper.readValue(
-                mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.BH.")), SliceProfileAdapter.class);
-        this.tnBHSliceTaskInfo.setSliceProfile(tnBHSliceProfile);
-
-        SliceProfileAdapter tnMHSliceProfile = mapper.readValue(
-                mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.MH.")), SliceProfileAdapter.class);
-        this.tnMHSliceTaskInfo.setSliceProfile(tnMHSliceProfile);
-
-        SliceProfileAdapter tnFHSliceProfile = mapper.readValue(
-                mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.TN.FH.")), SliceProfileAdapter.class);
-        this.tnFHSliceTaskInfo.setSliceProfile(tnFHSliceProfile);
-
-        SliceProfileAdapter cnSliceProfile = mapper.readValue(
-                mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.CN.")), SliceProfileAdapter.class);
-        this.cnSliceTaskInfo.setSliceProfile(cnSliceProfile);
-
-        SliceProfileAdapter anSliceProfile = mapper.readValue(
-                mapper.writeValueAsString(replaceHeader(paramMap, "SliceProfile.AN.")), SliceProfileAdapter.class);
-        this.anSliceTaskInfo.setSliceProfile(anSliceProfile);
-
-        this.tnBHSliceTaskInfo.setSuggestNssiId(paramMap.get("TN.BH.SuggestNSSIId"));
-        this.tnBHSliceTaskInfo.setSuggestNssiName(paramMap.get("TN.BH.SuggestNSSIName"));
-        this.tnBHSliceTaskInfo.setProgress(paramMap.get("TN.BH.progress"));
-        this.tnBHSliceTaskInfo.setStatus(paramMap.get("TN.BH.status"));
-        this.tnBHSliceTaskInfo.setStatusDescription(paramMap.get("TN.BH.statusDescription"));
-        this.tnBHSliceTaskInfo.setScriptName(paramMap.get("TN.BH.ScriptName"));
-
-        this.tnMHSliceTaskInfo.setSuggestNssiId(paramMap.get("TN.MH.SuggestNSSIId"));
-        this.tnMHSliceTaskInfo.setSuggestNssiName(paramMap.get("TN.MH.SuggestNSSIName"));
-        this.tnMHSliceTaskInfo.setProgress(paramMap.get("TN.MH.progress"));
-        this.tnMHSliceTaskInfo.setStatus(paramMap.get("TN.MH.status"));
-        this.tnMHSliceTaskInfo.setStatusDescription(paramMap.get("TN.MH.statusDescription"));
-        this.tnMHSliceTaskInfo.setScriptName(paramMap.get("TN.MH.ScriptName"));
-
-        this.tnFHSliceTaskInfo.setSuggestNssiId(paramMap.get("TN.FH.SuggestNSSIId"));
-        this.tnFHSliceTaskInfo.setSuggestNssiName(paramMap.get("TN.FH.SuggestNSSIName"));
-        this.tnFHSliceTaskInfo.setProgress(paramMap.get("TN.FH.progress"));
-        this.tnFHSliceTaskInfo.setStatus(paramMap.get("TN.FH.status"));
-        this.tnFHSliceTaskInfo.setStatusDescription(paramMap.get("TN.FH.statusDescription"));
-        this.tnFHSliceTaskInfo.setScriptName(paramMap.get("TN.FH.ScriptName"));
-
-        this.cnSliceTaskInfo.setSuggestNssiId(paramMap.get("CN.SuggestNSSIId"));
-        this.cnSliceTaskInfo.setSuggestNssiName(paramMap.get("CN.SuggestNSSIName"));
-        this.cnSliceTaskInfo.setProgress(paramMap.get("CN.progress"));
-        this.cnSliceTaskInfo.setStatus(paramMap.get("CN.status"));
-        this.cnSliceTaskInfo.setStatusDescription(paramMap.get("CN.statusDescription"));
-        this.cnSliceTaskInfo.setScriptName(paramMap.get("CN.ScriptName"));
-
-        this.anSliceTaskInfo.setSuggestNssiId(paramMap.get("AN.SuggestNSSIId"));
-        this.anSliceTaskInfo.setSuggestNssiName(paramMap.get("AN.SuggestNSSIName"));
-        this.anSliceTaskInfo.setProgress(paramMap.get("AN.progress"));
-        this.anSliceTaskInfo.setStatus(paramMap.get("AN.status"));
-        this.anSliceTaskInfo.setStatusDescription(paramMap.get("AN.statusDescription"));
-        this.anSliceTaskInfo.setScriptName(paramMap.get("AN.ScriptName"));
-    }
-
-    public String convertToJson() {
-        JsonObject jsonObject = new JsonObject();
-        jsonObject.addProperty("ServiceId", serviceId);
-        jsonObject.addProperty("ServiceName", serviceName);
-        jsonObject.addProperty("NSTId", nstId);
-        jsonObject.addProperty("NSTName", nstName);
-        jsonObject.addProperty("suggestNSIId", suggestNsiId);
-        jsonObject.addProperty("suggestNSIName", suggestNsiName);
-
-        for (Map.Entry<String, Object> entry : serviceProfile.entrySet()) {
-            jsonObject.addProperty("ServiceProfile." + entry.getKey(), entry.getValue().toString());
-        }
-        Map<String, Object> sliceProfileAn = bean2Map(anSliceTaskInfo.getSliceProfile());
-        for (Map.Entry<String, Object> entry : sliceProfileAn.entrySet()) {
-            String value = entry.getValue() == null ? "" : entry.getValue().toString();
-            jsonObject.addProperty("SliceProfile.AN." + entry.getKey(), value);
-        }
-        Map<String, Object> sliceProfileCn = bean2Map(cnSliceTaskInfo.getSliceProfile());
-        for (Map.Entry<String, Object> entry : sliceProfileCn.entrySet()) {
-            String value = entry.getValue() == null ? "" : entry.getValue().toString();
-            jsonObject.addProperty("SliceProfile.CN." + entry.getKey(), value);
-        }
-        Map<String, Object> sliceProfileTnBH = bean2Map(tnBHSliceTaskInfo.getSliceProfile());
-        for (Map.Entry<String, Object> entry : sliceProfileTnBH.entrySet()) {
-            String value = entry.getValue() == null ? "" : entry.getValue().toString();
-            jsonObject.addProperty("SliceProfile.TN.BH." + entry.getKey(), value);
-        }
-        Map<String, Object> sliceProfileTnMH = bean2Map(tnMHSliceTaskInfo.getSliceProfile());
-        for (Map.Entry<String, Object> entry : sliceProfileTnMH.entrySet()) {
-            String value = entry.getValue() == null ? "" : entry.getValue().toString();
-            jsonObject.addProperty("SliceProfile.TN.MH." + entry.getKey(), value);
-        }
-        Map<String, Object> sliceProfileTnFH = bean2Map(tnFHSliceTaskInfo.getSliceProfile());
-        for (Map.Entry<String, Object> entry : sliceProfileTnFH.entrySet()) {
-            String value = entry.getValue() == null ? "" : entry.getValue().toString();
-            jsonObject.addProperty("SliceProfile.TN.FH." + entry.getKey(), value);
-        }
-        jsonObject.addProperty("TN.BH.SuggestNSSIId", tnBHSliceTaskInfo.getSuggestNssiId());
-        jsonObject.addProperty("TN.BH.SuggestNSSIName", tnBHSliceTaskInfo.getSuggestNssiName());
-        jsonObject.addProperty("TN.BH.progress", tnBHSliceTaskInfo.getProgress());
-        jsonObject.addProperty("TN.BH.status", tnBHSliceTaskInfo.getStatus());
-        jsonObject.addProperty("TN.BH.statusDescription", tnBHSliceTaskInfo.getStatusDescription());
-        jsonObject.addProperty("TN.BH.ScriptName", tnBHSliceTaskInfo.getScriptName());
-
-        jsonObject.addProperty("TN.MH.SuggestNSSIId", tnMHSliceTaskInfo.getSuggestNssiId());
-        jsonObject.addProperty("TN.MH.SuggestNSSIName", tnMHSliceTaskInfo.getSuggestNssiName());
-        jsonObject.addProperty("TN.MH.progress", tnMHSliceTaskInfo.getProgress());
-        jsonObject.addProperty("TN.MH.status", tnMHSliceTaskInfo.getStatus());
-        jsonObject.addProperty("TN.MH.statusDescription", tnMHSliceTaskInfo.getStatusDescription());
-        jsonObject.addProperty("TN.MH.ScriptName", tnMHSliceTaskInfo.getScriptName());
-
-        jsonObject.addProperty("TN.FH.SuggestNSSIId", tnFHSliceTaskInfo.getSuggestNssiId());
-        jsonObject.addProperty("TN.FH.SuggestNSSIName", tnFHSliceTaskInfo.getSuggestNssiName());
-        jsonObject.addProperty("TN.FH.progress", tnFHSliceTaskInfo.getProgress());
-        jsonObject.addProperty("TN.FH.status", tnFHSliceTaskInfo.getStatus());
-        jsonObject.addProperty("TN.FH.statusDescription", tnFHSliceTaskInfo.getStatusDescription());
-        jsonObject.addProperty("TN.FH.ScriptName", tnFHSliceTaskInfo.getScriptName());
-
-        jsonObject.addProperty("CN.SuggestNSSIId", cnSliceTaskInfo.getSuggestNssiId());
-        jsonObject.addProperty("CN.SuggestNSSIName", cnSliceTaskInfo.getSuggestNssiName());
-        jsonObject.addProperty("CN.progress", cnSliceTaskInfo.getProgress());
-        jsonObject.addProperty("CN.status", cnSliceTaskInfo.getStatus());
-        jsonObject.addProperty("CN.statusDescription", cnSliceTaskInfo.getStatusDescription());
-        jsonObject.addProperty("CN.ScriptName", cnSliceTaskInfo.getScriptName());
-
-        jsonObject.addProperty("AN.SuggestNSSIId", anSliceTaskInfo.getSuggestNssiId());
-        jsonObject.addProperty("AN.SuggestNSSIName", anSliceTaskInfo.getSuggestNssiName());
-        jsonObject.addProperty("AN.progress", anSliceTaskInfo.getProgress());
-        jsonObject.addProperty("AN.status", anSliceTaskInfo.getStatus());
-        jsonObject.addProperty("AN.statusDescription", anSliceTaskInfo.getStatusDescription());
-        jsonObject.addProperty("AN.ScriptName", anSliceTaskInfo.getScriptName());
-
-        return jsonObject.toString();
-    }
+    private SliceTaskInfo<SliceProfileAdapter> anNFSliceTaskInfo = new SliceTaskInfo<>();
 
     /**
      * change T t to {@link Map}
@@ -266,3 +123,4 @@ public class SliceTaskParamsAdapter implements Serializable {
         return sliceProfileMap;
     }
 }
+
index 536bb04..6f56a72 100644 (file)
@@ -26,6 +26,8 @@ import org.onap.so.beans.nsmf.NetworkType;
 public enum SubnetType {
     AN("AN", NetworkType.ACCESS),
 
+    AN_NF("AN_NF", NetworkType.ACCESS),
+
     CN("CN", NetworkType.CORE),
 
     TN_FH("TN_FH", NetworkType.TRANSPORT),