Core-nssmf - activate/deactivate flow 57/117657/3
authoraleemraja <ar00500721@techmahindra.com>
Sun, 28 Feb 2021 05:10:17 +0000 (10:40 +0530)
committeraleemraja <ar00500721@techmahindra.com>
Sun, 28 Feb 2021 05:10:47 +0000 (10:40 +0530)
To fix the issues noticed during testing
- in activate and deactivate flow
- in allocate non-shared: update requestdb correctly when flow is
successful.

Issue-ID: SO-3527
Signed-off-by: aleemraja <ar00500721@techmahindra.com>
Change-Id: I37ce7d61eaba8ea60a95a9517509696b2cf3a357

bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateCoreNSSI.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateCoreNonSharedSlice.groovy
bpmn/so-bpmn-infrastructure-common/src/test/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateCoreNSSITest.groovy
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoActivateCoreNSSI.bpmn

index 5e50b9d..2d18108 100644 (file)
@@ -78,30 +78,19 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
 
         String operationType = execution.getVariable("operationType")
         String oStatus= ""
-
         if(operationType.equals("activateInstance")) {
             oStatus ="activated"
         } else {
             oStatus ="deactivated"
         }
-
         execution.setVariable("oStatus", oStatus)
         String sNssaiListAsString = jsonUtil.getJsonValue(execution.getVariable("sliceParams"), "snssaiList")
-
-        logger.debug("sNssaiListAsString "+sNssaiListAsString)
-
         List<String> sNssaiList = jsonUtil.StringArrayToList(sNssaiListAsString)
-
-        logger.debug("sNssaiList "+sNssaiList)
-
-
         String sNssai = sNssaiList.get(0)
         execution.setVariable("sNssai", sNssai)
-
-        logger.debug("sNssai: "+sNssai)
-
         String serviceType = execution.getVariable("subscriptionServiceType")
         execution.setVariable("serviceType", serviceType)
+        logger.debug("operationType: {} , sNssai: {}, serviceType: {}.",operationType, sNssai, serviceType)
         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: preProcessRequest ****")
     }
 
@@ -117,31 +106,30 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
         if(nsi.isPresent()) {
             List<Relationship> relationshipList = nsi.get().getRelationshipList()?.getRelationship()
             List spiWithsNssaiAndOrchStatusList = new ArrayList<>()
-
             for (Relationship relationship : relationshipList) {
                 String relatedTo = relationship.getRelatedTo()
-                if (relatedTo == "service-instance") {
+                if (("service-instance").equals(relatedTo)) {
                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
                     List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
                     for (RelationshipData relationshipData : relationshipDataList) {
-                        if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
+                        if (("service-instance.service-instance-id").equals(relationshipData.getRelationshipKey())) {
                             execution.setVariable("networkServiceInstanceId", relationshipData.getRelationshipValue())
                         }
                     }
                     for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
-                        if (relatedToProperty.getPropertyKey() == "service-instance.service-instance-name") {
+                        if (("service-instance.service-instance-name").equals(relatedToProperty.getPropertyKey())) {
                             execution.setVariable("networkServiceInstanceName", relatedToProperty.getPropertyValue())
                         }
                     }
                 }
 
                 //If related to is allotted-Resource
-                if (relatedTo == "allotted-resource") {
+                if (("allotted-resource").equals(relatedTo)) {
                     //get slice Profile Instance Id from allotted resource in list by nssi
                     List<String> sliceProfileInstanceIdList = new ArrayList<>()
                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
                     for (RelationshipData relationshipData : relationshipDataList) {
-                        if (relationshipData.getRelationshipKey() == "service-instance.service-instance-id") {
+                        if (relationshipData.getRelationshipKey().equals("service-instance.service-instance-id")) {
                             sliceProfileInstanceIdList.add(relationshipData.getRelationshipValue())
                         }
                     }
@@ -153,13 +141,13 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
                         Optional<ServiceInstance> sliceProfileServiceInstance = sliceProfileInstanceWrapper.asBean(ServiceInstance.class)
                         if (sliceProfileServiceInstance.isPresent()) {
                             String orchestrationStatus= sliceProfileServiceInstance.get().getOrchestrationStatus()
-                            String sNssai = sliceProfileServiceInstance.get().getSliceProfiles().getSliceProfile().get(0).getSNssai()
-                            if(sNssai.equals(execution.getVariable("sNssai"))) {
+                            String sNssai = sliceProfileServiceInstance.get().getEnvironmentContext()
+                            String sNssaiValueFromRequest = execution.getVariable("sNssai")
+                            if(sNssai.equals(sNssaiValueFromRequest)) {
                                 orchestrationStatus = execution.getVariable("oStatus")
                                 //Slice Profile Service Instance to be updated in AAI
-                                execution.setVariable("sliceProfileServiceInstance", sliceProfileServiceInstance)
+                                execution.setVariable("sliceProfileServiceInstance", sliceProfileServiceInstance.get())
                             }
-
                             Map<String, Object> spiWithsNssaiAndOrchStatus = new LinkedHashMap<>()
                             spiWithsNssaiAndOrchStatus.put("snssai", sNssai)
                             spiWithsNssaiAndOrchStatus.put("status", orchestrationStatus)
@@ -185,18 +173,13 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
         Map<String, Object> nSsai= new LinkedHashMap<>()
         nSsai.put("sNssai", instanceParamsvalues)
         String supportedsNssaiJson = mapper.writeValueAsString(nSsai)
-        //SupportedNssai
-        Map<String, Object> supportedNssai= new LinkedHashMap<>()
-        supportedNssai.put("supportedNssai", supportedsNssaiJson)
-        logger.debug("****  supportedsNssaiJson**** "+supportedNssai)
-        logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
-        return supportedNssai
+        logger.debug(Prefix+" **** Exit DoActivateCoreNSSI ::: prepareVnfInstanceParamsJson ****")
+        return supportedsNssaiJson
     }
 
     private void getServiceInstanceRelationships(DelegateExecution execution) {
         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: getServiceInstanceRelationships ****")
         String serviceInstanceId = execution.getVariable("networkServiceInstanceId")
-        logger.debug("**** serviceInstanceId :: getServiceInstanceRelationships  :: "+serviceInstanceId)
         String errorMsg = "query Network Service Instance from AAI failed"
         AAIResultWrapper wrapper = queryAAI(execution, Types.SERVICE_INSTANCE, serviceInstanceId, errorMsg)
         Optional<ServiceInstance> si = wrapper.asBean(ServiceInstance.class)
@@ -207,29 +190,33 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
             List<Relationship> relationshipList = si.get().getRelationshipList()?.getRelationship()
             for (Relationship relationship : relationshipList) {
                 String relatedTo = relationship.getRelatedTo()
-                if (relatedTo == "owning-entity") {
+                if (("owning-entity").equals(relatedTo)) {
                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
                     for (RelationshipData relationshipData : relationshipDataList) {
-                        if (relationshipData.getRelationshipKey() == "owning-entity.owning-entity-id") {
+                        if (("owning-entity.owning-entity-id").equals(relationshipData.getRelationshipKey())) {
                             execution.setVariable("owningEntityId", relationshipData.getRelationshipValue())
                         }
                     }
-                } else if (relatedTo == "generic-vnf") {
+                } else if (("generic-vnf").equals(relatedTo)) {
                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
                     List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToProperty()
 
                     //Get VnfId
                     for (RelationshipData relationshipData : relationshipDataList) {
-                        if (relationshipData.getRelationshipKey() == "generic-vnf.vnf-id") {
+                        if (("generic-vnf.vnf-id").equals(relationshipData.getRelationshipKey())) {
                             execution.setVariable("vnfId", relationshipData.getRelationshipValue())
-                            String vnfId = relationshipData.getRelationshipValue()
-                            logger.debug("vnfId   :"+vnfId)
                         }
                     }
-                } else if (relatedTo == "project") {
+                    //Get Vnf Name Check If necessary
+                    for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
+                        if (("generic-vnf.vnf-name").equals(relatedToProperty.getPropertyKey())) {
+                            execution.setVariable("vnfName", relatedToProperty.getPropertyValue())
+                        }
+                    }
+                } else if (("project").equals(relatedTo)) {
                     List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
                     for (RelationshipData relationshipData : relationshipDataList) {
-                        if (relationshipData.getRelationshipKey() == "project.project-name") {
+                        if (("project.project-name").equals(relationshipData.getRelationshipKey())) {
                             execution.setVariable("projectName", relationshipData.getRelationshipValue())
                         }
                     }
@@ -254,34 +241,34 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
                 List<Relationship> relationshipList = vnf.get().getRelationshipList()?.getRelationship()
                 for (Relationship relationship : relationshipList) {
                     String relatedTo = relationship.getRelatedTo()
-                    if (relatedTo == "tenant") {
+                    if (("tenant").equals(relatedTo)) {
                         List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
                         for (RelationshipData relationshipData : relationshipDataList) {
-                            if (relationshipData.getRelationshipKey() == "tenant.tenant-id") {
+                            if (("tenant.tenant-id").equals(relationshipData.getRelationshipKey())) {
                                 execution.setVariable("tenantId", relationshipData.getRelationshipValue())
                             }
                         }
-                    } else if (relatedTo == "cloud-region") {
+                    } else if (("cloud-region").equals(relatedTo)) {
                         List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
 
                         for (RelationshipData relationshipData : relationshipDataList) {
-                            if (relationshipData.getRelationshipKey() == "cloud-region.cloud-owner") {
+                            if (("cloud-region.cloud-owner").equals(relationshipData.getRelationshipKey())) {
                                 execution.setVariable("cloudOwner", relationshipData.getRelationshipValue())
-                            } else if (relationshipData.getRelationshipKey() == "cloud-region.cloud-region-id") {
+                            } else if (("cloud-region.cloud-region-id").equals(relationshipData.getRelationshipKey())) {
                                 execution.setVariable("lcpCloudRegionId", relationshipData.getRelationshipValue())
                             }
                         }
-                    } else if (relatedTo == "platform") {
+                    } else if (("platform").equals(relatedTo)) {
                         List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
                         for (RelationshipData relationshipData : relationshipDataList) {
-                            if (relationshipData.getRelationshipKey() == "platform.platform-name") {
+                            if (("platform.platform-name").equals(relationshipData.getRelationshipKey())) {
                                 execution.setVariable("platformName", relationshipData.getRelationshipValue())
                             }
                         }
-                    } else if (relatedTo == "line-of-business") {
+                    } else if (("line-of-business").equals(relatedTo)) {
                         List<RelationshipData> relationshipDataList = relationship.getRelationshipData()
                         for (RelationshipData relationshipData : relationshipDataList) {
-                            if (relationshipData.getRelationshipKey() == "line-of-business.line-of-business-name") {
+                            if (("line-of-business.line-of-business-name").equals(relationshipData.getRelationshipKey())) {
                                 execution.setVariable("lineOfBusinessName", relationshipData.getRelationshipValue())
                             }
                         }
@@ -334,11 +321,9 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
 
             String serviceVnfs = jsonUtil.getJsonValue(json, "serviceResources.serviceVnfs") ?: ""
             String serviceModelInfo = jsonUtil.getJsonValue(json, "serviceResources.modelInfo") ?: ""
-
-
             execution.setVariable("serviceVnfs",serviceVnfs)
             execution.setVariable("serviceModelInfo", serviceModelInfo)
-            logger.debug(Prefix +" ***** serviceVnfs is: "+ serviceVnfs)
+            logger.debug(Prefix +" ***** serviceVnfs : "+ serviceVnfs)
         }catch(BpmnError e){
             throw e
         } catch (Exception ex){
@@ -352,9 +337,7 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
     public void prepareSOMacroRequestPayLoad(DelegateExecution execution) {
         logger.debug("**** Enter DoActivateCoreNSSI ::: prepareSOMacroRequestPayLoad ****")
         String json = execution.getVariable("serviceVnfs")
-        logger.debug(">>>> json "+json)
         List<Object> vnfList = mapper.readValue(json, List.class);
-        logger.debug("vnfList:  "+vnfList)
         Map<String,Object> serviceMap = mapper.readValue(execution.getVariable("serviceModelInfo"), Map.class);
         ModelInfo serviceModelInfo = new ModelInfo()
         serviceModelInfo.setModelType(ModelType.service)
@@ -362,18 +345,12 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
         serviceModelInfo.setModelVersionId(serviceMap.get("modelUuid"))
         serviceModelInfo.setModelName(serviceMap.get("modelName"))
         serviceModelInfo.setModelVersion(serviceMap.get("modelVersion"))
-
-        logger.debug("serviceModelInfo:  "+serviceModelInfo)
         //List of Vnfs
         List<Object> vnfModelInfoList = new ArrayList<>()
 
         Map vnfMap = vnfList.get(0)
-        ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
-        logger.debug("vnfModelInfo "+vnfModelInfo)
-
         //List of VFModules
         List<Map<String, Object>> vfModuleList = vnfMap.get("vfModules")
-        logger.debug("vfModuleList "+vfModuleList)
 
         //List of VfModules
         List<ModelInfo> vfModelInfoList = new ArrayList<>()
@@ -381,17 +358,19 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
         //Traverse VFModules List and add in vfModelInfoList
         for (vfModule in vfModuleList) {
             ModelInfo vfModelInfo = vfModule.get("modelInfo")
-            logger.debug("vfModelInfo "+vfModelInfo)
+            vfModelInfo.setModelCustomizationId(vfModelInfo.getModelCustomizationUuid())
+            vfModelInfo.setModelVersionId(vfModelInfo.getModelId())
             vfModelInfoList.add(vfModelInfo)
         }
 
+        String networkServiceInstanceName = execution.getVariable("networkServiceInstanceName")
         //RequestInfo
         RequestInfo requestInfo = new RequestInfo()
 
         //Dummy Product FamilyId
         requestInfo.setProductFamilyId("test1234")
         requestInfo.setSource("VID")
-        requestInfo.setInstanceName(execution.getVariable("networkServiceInstanceName"))
+        requestInfo.setInstanceName(networkServiceInstanceName)
         requestInfo.setSuppressRollback(false)
         requestInfo.setRequestorId("NBI")
 
@@ -401,10 +380,13 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
         serviceParams.add(serviceParamsValues)
 
         //Cloud Configuration
+        String lcpCloudRegionId = execution.getVariable("lcpCloudRegionId")
+        String tenantId = execution.getVariable("tenantId")
+        String cloudOwner = execution.getVariable("cloudOwner")
         CloudConfiguration cloudConfiguration = new CloudConfiguration()
-        cloudConfiguration.setLcpCloudRegionId(execution.getVariable("lcpCloudRegionId"))
-        cloudConfiguration.setTenantId(execution.getVariable("tenantId"))
-        cloudConfiguration.setCloudOwner(execution.getVariable("cloudOwner"))
+        cloudConfiguration.setLcpCloudRegionId(lcpCloudRegionId)
+        cloudConfiguration.setTenantId(tenantId)
+        cloudConfiguration.setCloudOwner(cloudOwner)
 
         //VFModules List
         List<Map<String, Object>> vfModules = new ArrayList<>()
@@ -412,26 +394,33 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
             //Individual VFModule List
             Map<String, Object> vfModuleValues = new LinkedHashMap<>()
             vfModuleValues.put("modelInfo", vfModuleModelInfo)
-            vfModuleValues.put("instanceName", vfModuleModelInfo.getModelInstanceName())
+            vfModuleValues.put("instanceName", vfModuleModelInfo.getModelName())
 
             //VFModule InstanceParams should be empty or this field should not be there?
             List<Map<String, Object>> vfModuleInstanceParams = new ArrayList<>()
             vfModuleValues.put("instanceParams", vfModuleInstanceParams)
+            vfModules.add(vfModuleValues)
         }
 
         //Vnf intsanceParams
-        ObjectMapper objectMapper = new ObjectMapper();
-        Map<String, Object> sliceProfile = objectMapper.readValue(execution.getVariable("sliceProfile"), Map.class);
-
-        List vnfInstanceParamsList = new ArrayList<>()
+        List<Map<String, Object>> vnfInstanceParamsList = new ArrayList<>()
         String supportedsNssaiJson= prepareVnfInstanceParamsJson(execution)
-        vnfInstanceParamsList.add(supportedsNssaiJson)
+
+        Map<String, Object> supportedNssai= new LinkedHashMap<>()
+        supportedNssai.put("supportedsNssai", supportedsNssaiJson)
+        vnfInstanceParamsList.add(supportedNssai)
 
         Platform platform = new Platform()
-        platform.setPlatformName(execution.getVariable("platform"))
+        String platformName = execution.getVariable("platformName")
+        platform.setPlatformName(platformName)
 
         LineOfBusiness lineOfbusiness = new LineOfBusiness()
-        lineOfbusiness.setLineOfBusinessName(execution.getVariable("lineOfBusiness"))
+        String lineOfBusinessName = execution.getVariable("lineOfBusinessName")
+        lineOfbusiness.setLineOfBusinessName(lineOfBusinessName)
+
+        ModelInfo vnfModelInfo = vnfMap.get("modelInfo")
+        vnfModelInfo.setModelCustomizationId(vnfModelInfo.getModelCustomizationUuid())
+        vnfModelInfo.setModelVersionId(vnfModelInfo.getModelId())
 
         //Vnf Values
         Map<String, Object> vnfValues = new LinkedHashMap<>()
@@ -441,7 +430,7 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
         vnfValues.put("cloudConfiguration", cloudConfiguration)
         vnfValues.put("vfModules", vfModules)
         vnfValues.put("modelInfo", vnfModelInfo)
-        vnfValues.put("instanceName", execution.getVariable("vnfInstanceName"))
+        vnfValues.put("instanceName", vnfModelInfo.getModelInstanceName())
         vnfValues.put("instanceParams",vnfInstanceParamsList)
 
         vnfModelInfoList.add(vnfValues)
@@ -450,9 +439,10 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
         serviceResources.put("vnfs", vnfModelInfoList)
 
         //Service Values
+        String serviceInstanceName = execution.getVariable("networkServiceInstanceName")
         Map<String, Object> serviceValues = new LinkedHashMap<>()
         serviceValues.put("modelInfo", serviceModelInfo)
-        serviceValues.put("instanceName", execution.getVariable("networkServiceInstanceName"))
+        serviceValues.put("instanceName", serviceInstanceName)
         serviceValues.put("resources", serviceResources)
         serviceValues.put("instanceParams", serviceParams)
 
@@ -470,22 +460,26 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
         userParams.add(userParamsValues)
 
         //Request Parameters
+        String serviceType = execution.getVariable("serviceType")
         RequestParameters requestParameters = new RequestParameters()
         requestParameters.setaLaCarte(false)
-        requestParameters.setSubscriptionServiceType(execution.getVariable("serviceType"))
+        requestParameters.setSubscriptionServiceType(serviceType)
         requestParameters.setUserParams(userParams)
 
         //SubscriberInfo
+        String globalSubscriberId = execution.getVariable("globalSubscriberId")
         SubscriberInfo subscriberInfo = new SubscriberInfo()
-        subscriberInfo.setGlobalSubscriberId(execution.getVariable("globalSubscriberId"))
+        subscriberInfo.setGlobalSubscriberId(globalSubscriberId)
 
         //Owning Entity
+        String owningEntityId = execution.getVariable("owningEntityId")
         OwningEntity owningEntity = new OwningEntity()
-        owningEntity.setOwningEntityId(execution.getVariable("owningEntityId"))
+        owningEntity.setOwningEntityId(owningEntityId)
 
         //Project
+        String projectName = execution.getVariable("projectName")
         Project project = new Project()
-        project.setProjectName(execution.getVariable("projectName"))
+        project.setProjectName(projectName)
 
         RequestDetails requestDetails = new RequestDetails()
         requestDetails.setModelInfo(serviceModelInfo)
@@ -498,8 +492,7 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
 
         Map<String, Object> requestDetailsMap = new LinkedHashMap<>()
         requestDetailsMap.put("requestDetails", requestDetails)
-        String requestPayload = objectMapper.writeValueAsString(requestDetailsMap)
-
+        String requestPayload = mapper.writeValueAsString(requestDetailsMap)
         logger.debug("requestDetails "+requestPayload)
         execution.setVariable("requestPayload", requestPayload)
 
@@ -511,23 +504,23 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: sendPutRequestToSOMacro ****")
         try {
             String msoEndpoint = UrnPropertiesReader.getVariable("mso.infra.endpoint.url", execution)
-            String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+execution.getVariable("networkServiceInstanceId")+"/vnfs/"+execution.getVariable("vnfId")
+            String networkServiceInstanceId = execution.getVariable("networkServiceInstanceId")
+            String vnfId = execution.getVariable("vnfId")
+            String url = msoEndpoint+"/serviceInstantiation/v7/serviceInstances/"+networkServiceInstanceId+"/vnfs/"+vnfId
             String requestBody = execution.getVariable("requestPayload")
             String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
-            String basicAuth =  UrnPropertiesReader.getVariable("mso.infra.endpoint.auth", execution)
-            String basicAuthValue = utils.encrypt(basicAuth, msoKey)
-            String encodeString = utils.getBasicAuth(basicAuthValue, msoKey)
-
+            String basicAuth =  UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
+            String encodeString = utils.getBasicAuth(basicAuth, msoKey)
+            logger.debug("msoEndpoint: "+msoEndpoint +"  "+ "url: "+url  +" requestBody: "+requestBody +"  "+ "encodeString: "+encodeString)
             HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
             httpClient.addAdditionalHeader("Authorization", encodeString)
             httpClient.addAdditionalHeader("Accept", "application/json")
             Response httpResponse = httpClient.put(requestBody)
             handleSOResponse(httpResponse, execution)
-
         } catch (BpmnError e) {
             throw e
         } catch (any) {
-            String msg = "Exception in DoActivateCoreNSSSI " + any.getCause()
+            String msg = Prefix+" Exception in DoActivateCoreNSSI " + any.getCause()
             logger.error(msg)
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
         }
@@ -546,15 +539,15 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
 
         if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
             String soResponse = httpResponse.readEntity(String.class)
-            String operationId = execution.getVariable("operationId")
-            def macroOperationId = jsonUtil.getJsonValue(soResponse, "operationId")
+            logger.debug("soResponse: "+soResponse)
+            String macroOperationId = jsonUtil.getJsonValue(soResponse, "requestReferences.requestId")
+            String requestSelfLink = jsonUtil.getJsonValue(soResponse, "requestReferences.requestSelfLink")
             execution.setVariable("macroOperationId", macroOperationId)
+            execution.setVariable("requestSelfLink", requestSelfLink)
             execution.setVariable("isSOTimeOut", "no")
             execution.setVariable("isSOResponseSucceed","yes")
         }
-        else
-        {
-            String serviceName = execution.getVariable("serviceInstanceName")
+        else {
             execution.setVariable("isSOResponseSucceed","no")
             prepareFailedOperationStatusUpdate(execution)
         }
@@ -562,37 +555,58 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: handleSOResponse ****")
     }
 
-    /**
-     * prepare to call sub process CheckProcessStatus
-     * @param execution
-     */
-    void prepareCallCheckProcessStatus(DelegateExecution execution){
-        logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareCallCheckProcessStatus ****")
-        def successConditions = new ArrayList<>()
-        successConditions.add("finished")
-        execution.setVariable("successConditions", successConditions)
-        def errorConditions = new ArrayList<>()
-        errorConditions.add("error")
-        execution.setVariable("errorConditions", errorConditions)
-        execution.setVariable("processServiceType", "Network service")
-        execution.setVariable("subOperationType", "PUT")
-        execution.setVariable("initProgress", 20)
-        execution.setVariable("endProgress",90)
-        execution.setVariable("timeOut", TIMEOUT)
-        logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareCallCheckProcessStatus ****")
+    public void getSOPUTProgress(DelegateExecution execution) {
+        logger.debug(Prefix+ " **** Enter DoActivateCoreNSSI ::: getSOPUTProgress ****")
+        String url= execution.getVariable("requestSelfLink")
+        HttpClient httpClient = getHttpClientFactory().newJsonClient(new URL(url), ONAPComponents.SO)
+        String msoKey = UrnPropertiesReader.getVariable("mso.msoKey", execution)
+        String basicAuth =  UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
+        String encodeString = utils.getBasicAuth(basicAuth, msoKey)
+        httpClient.addAdditionalHeader("Authorization", encodeString)
+        httpClient.addAdditionalHeader("Accept", "application/json")
+        Response httpResponse = httpClient.get()
+        logger.debug("httpResponse "+httpResponse)
+        int soResponseCode = httpResponse.getStatus()
+        logger.debug("soResponseCode : "+soResponseCode)
+        if (soResponseCode >= 200 && soResponseCode < 204 && httpResponse.hasEntity()) {
+            String soResponse = httpResponse.readEntity(String.class)
+            logger.debug("soResponse: "+soResponse)
+            String requestState= jsonUtil.getJsonValue(soResponse, "request.requestStatus.requestState")
+            logger.debug("requestState: "+requestState)
+            execution.setVariable("requestState", requestState)
+        } else {
+            execution.setVariable("isSOResponseSucceed","no")
+            prepareFailedOperationStatusUpdate(execution)
+        }
+        logger.debug(Prefix+ " **** Exit DoActivateCoreNSSI ::: getSOPUTProgress ****")
     }
 
+       public void timeDelay() {
+               try {
+                       logger.debug(Prefix+ " **** DoActivateCoreNSSI ::: timeDelay going to sleep for 5 sec")
+                       Thread.sleep(5000)
+                       logger.debug("**** DoActivateCoreNSSI ::: timeDelay wakeup after 5 sec")
+               } catch(InterruptedException e) {
+                       logger.error(Prefix+ " **** DoActivateCoreNSSI ::: timeDelay exception" + e)
+               }
+       }
+
     void prepareUpdateResourceOperationStatus(DelegateExecution execution) {
 
         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
 
-        String nssiOperationId = execution.getVariable("nssiOperationId")
-        execution.setVariable("operationId", nssiOperationId)
+        String soRequestState = execution.getVariable("requestState")
         //Prepare Update Status for PUT failure and success
-        if(execution.getVariable("isTimeOut").equals("YES")) {
-            logger.debug("TIMEOUT - SO PUT Failure")
+        if("COMPLETE".equalsIgnoreCase(soRequestState)) {
+            execution.setVariable("progress", "100")
+            execution.setVariable("status", "finished")
+            execution.setVariable("operationContent", "AllocteCoreNSSI successful.")
+            logger.debug("Success ,result:${execution.getVariable("result")}, reason: ${execution.getVariable("reason")}")
+        } else {
+            logger.debug("SO PUT Failure with State: "+soRequestState)
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "SO PUT Failure")
         }
+        setResourceOperationStatus(execution)
         logger.debug(Prefix +" **** Exit DoActivateCoreNSSI ::: prepareUpdateResourceOperationStatus ****")
     }
 
@@ -610,14 +624,8 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
 
         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalCustId).serviceSubscription(serviceType).serviceInstance(sliceProfileInstanceId))
         try {
-
-            Response response = getAAIClient().update(uri, si)
-
-            if(response.getStatus()!=200 || response.getStatus()!=201 || response.getStatus()!=202) {
-                exceptionUtil.buildAndThrowWorkflowException(execution, response.getStatus(), "AAI failed to update sliceProlie service Instance orchestration status")
-            } else {
-                setResourceOperationStatus(execution)
-            }
+            getAAIClient().update(uri, si)
+            setResourceOperationStatus(execution)
         } catch (Exception e) {
             logger.info("Update OrchestrationStatus in AAI failed")
             String msg = "Update OrchestrationStatus in AAI failed, " + e.getMessage()
@@ -636,14 +644,17 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
 
         logger.debug(Prefix +" **** Enter DoActivateCoreNSSI ::: setResourceOperationStatus ****")
 
-        String serviceId = execution.getVariable("nssiId")
+        String serviceId = execution.getVariable("nsiId")
         String jobId = execution.getVariable("jobId")
-        String nsiId = execution.getVariable("nsiId")
+        String nssiId = execution.getVariable("serviceInstanceID")
+        String modelUuid= execution.getVariable("modelUuid")
         String operationType = execution.getVariable("operationType")
         ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
         resourceOperationStatus.setServiceId(serviceId)
+        resourceOperationStatus.setJobId(jobId)
         resourceOperationStatus.setOperationId(jobId)
-        resourceOperationStatus.setResourceTemplateUUID(nsiId)
+        resourceOperationStatus.setResourceTemplateUUID(modelUuid)
+        resourceOperationStatus.setResourceInstanceID(nssiId)
         resourceOperationStatus.setOperType(operationType)
         resourceOperationStatus.setStatus("finished")
         resourceOperationStatus.setProgress("100")
@@ -656,17 +667,20 @@ class DoActivateCoreNSSI extends AbstractServiceTaskProcessor {
     void prepareFailedOperationStatusUpdate(DelegateExecution execution){
         logger.debug(Prefix + " **** Enter DoActivateCoreNSSI ::: prepareFailedOperationStatusUpdate ****")
 
-        String serviceId = execution.getVariable("nssiId")
+        String serviceId = execution.getVariable("nsiId")
         String jobId = execution.getVariable("jobId")
-        String nsiId = execution.getVariable("nsiId")
+        String nssiId = execution.getVariable("serviceInstanceID")
         String operationType = execution.getVariable("operationType")
+        String modelUuid= execution.getVariable("modelUuid")
 
         ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
         resourceOperationStatus.setServiceId(serviceId)
+        resourceOperationStatus.setJobId(jobId)
         resourceOperationStatus.setOperationId(jobId)
-        resourceOperationStatus.setResourceTemplateUUID(nsiId)
+        resourceOperationStatus.setResourceInstanceID(nssiId)
+        resourceOperationStatus.setResourceTemplateUUID(modelUuid)
         resourceOperationStatus.setOperType(operationType)
-        resourceOperationStatus.setProgress(0)
+        resourceOperationStatus.setProgress("0")
         resourceOperationStatus.setStatus("failed")
         resourceOperationStatus.setStatusDescription("Core NSSI Activation Failed")
         requestDBUtil.prepareUpdateResourceOperationStatus(execution, resourceOperationStatus)
index 9159970..a1afe9a 100644 (file)
@@ -368,7 +368,7 @@ class DoAllocateCoreNonSharedSlice extends AbstractServiceTaskProcessor {
         String nssiId = execution.getVariable("nssiServiceInstanceId")
         String globalCustId = execution.getVariable("globalSubscriberId")
         String serviceType = execution.getVariable("subscriptionServiceType")
-        logger.debug("networkServiceInstanceId:  "+networkServiceInstanceId +" nssiId:  "+nssiId  +" globalCustId:  "+globalCustId+  " serviceType:  "+serviceType)
+        logger.debug("networkServiceInstanceId: {},  nssiId: {}, globalCustId: {}, serviceType: {}", networkServiceInstanceId, nssiId, globalCustId, serviceType)
         try{
             //Update NSSI orchestration status nssiServiceInstance
             ServiceInstance si = execution.getVariable("nssiServiceInstance")
@@ -424,7 +424,7 @@ class DoAllocateCoreNonSharedSlice extends AbstractServiceTaskProcessor {
         String LogicalLinkId = jsonUtil.getJsonValue(bh_endpoint, "LogicalLinkId")
         String nextHopInfo = jsonUtil.getJsonValue(bh_endpoint, "nextHopInfo")
         NetworkRoute bh_ep = new NetworkRoute()
-        logger.debug("bh_endpoint: "+bh_endpoint  +"  "+ "bh_routeId: "+bh_routeId  +"  "+ "cnIpAddress: "+cnIpAddress  +"   "+ "role: "+role  +"  "+  "cnIpAddress: "+cnIpAddress +"  "+ "LogicalLinkId: "+LogicalLinkId  +"  "+  "nextHopInfo: "+nextHopInfo  +"  "+  "bh_ep: "+bh_ep)
+        logger.debug("bh_endpoint: {}, bh_routeId: {}, cnIpAddress: {}, role: {}, LogicalLinkId: {}, nextHopInfo: {}, bh_ep: {}", bh_endpoint, bh_routeId, cnIpAddress, role, LogicalLinkId, nextHopInfo, bh_ep)
         bh_ep.setRouteId(bh_routeId)
         bh_ep.setFunction(function)
         bh_ep.setRole(role)
@@ -448,7 +448,7 @@ class DoAllocateCoreNonSharedSlice extends AbstractServiceTaskProcessor {
             relationship.setRelatedLink(relatedLink)
             relationship.setRelatedTo("network-route")
             relationship.setRelationshipLabel("org.onap.relationships.inventory.ComposedOf")
-            logger.debug("networkRouteUri: "+networkRouteUri+"relationship: "+relationship)
+            logger.debug("networkRouteUri: {}, relationship: {}",networkRouteUri,relationship)
             try {
                 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalSubscriberId).serviceSubscription(subscriptionServiceType).serviceInstance(coreNssi)).relationshipAPI()
                 logger.debug("uri: "+uri)
@@ -473,13 +473,14 @@ class DoAllocateCoreNonSharedSlice extends AbstractServiceTaskProcessor {
         logger.debug(Prefix+ " **** Enter DoAllocateCoreNonSharedSlice ::: setResourceOperationStatus ****")
         String serviceId = execution.getVariable("nsiId")
         String jobId = execution.getVariable("jobId")
-        String nsiId = execution.getVariable("nsiId")
         String nssiId = execution.getVariable("nssiServiceInstanceId")
         String operationType = "ALLOCATE"
+        String modelUuid= execution.getVariable("modelUuid")
         ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
         resourceOperationStatus.setServiceId(serviceId)
+        resourceOperationStatus.setJobId(jobId)
         resourceOperationStatus.setOperationId(jobId)
-        resourceOperationStatus.setResourceTemplateUUID(nsiId)
+        resourceOperationStatus.setResourceTemplateUUID(modelUuid)
         resourceOperationStatus.setResourceInstanceID(nssiId)
         resourceOperationStatus.setOperType(operationType)
         resourceOperationStatus.setStatus(execution.getVariable("status"))
@@ -493,17 +494,15 @@ class DoAllocateCoreNonSharedSlice extends AbstractServiceTaskProcessor {
         logger.debug(Prefix + " **** Enter DoAllocateCoreNonSharedSlice ::: prepareFailedOperationStatusUpdate ****")
         String serviceId = execution.getVariable("nsiId")
         String jobId = execution.getVariable("jobId")
-        String nsiId = execution.getVariable("nsiId")
         String nssiId = execution.getVariable("nssiServiceInstanceId")
         String operationType = "ALLOCATE"
         //modelUuid
         String modelUuid= execution.getVariable("modelUuid")
-        logger.debug("serviceId: "+serviceId +"  "+ "jobId: "+jobId   +"  "+  "nsiId: "+nsiId +"   "+  "nssiId: "+nssiId +"   "+  "operationType: "+operationType)
+        logger.debug("serviceId: {}, jobId: {}, nssiId: {}, operationType: {}.", serviceId, jobId, nssiId, operationType)
         ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus()
         resourceOperationStatus.setServiceId(serviceId)
         resourceOperationStatus.setJobId(jobId)
         resourceOperationStatus.setOperationId(jobId)
-        resourceOperationStatus.setResourceTemplateUUID(nsiId)
         resourceOperationStatus.setResourceInstanceID(nssiId)
         resourceOperationStatus.setResourceTemplateUUID(modelUuid)
         resourceOperationStatus.setOperType(operationType)
index 6978093..e4c6fe5 100644 (file)
@@ -184,10 +184,9 @@ class DoActivateCoreNSSITest extends MsoGroovyTest {
         when(mockExecution.getVariable("snssaiAndOrchStatusList")).thenReturn(snssaiList)
 
         String returnedJsonAsString= doActivate.prepareVnfInstanceParamsJson(mockExecution)
-
-        String expectedJsonAsString = """{supportedNssai={"sNssai":[{"snssai":"01-5C83F071","status":"activated"},{"snssai":"01-5B179BD4","status":"activated"}]}}"""
+        String expectedJsonAsString = """{"sNssai":[{"snssai":"01-5C83F071","status":"activated"},{"snssai":"01-5B179BD4","status":"activated"}]}"""
         assertEquals(expectedJsonAsString, returnedJsonAsString)
-    }
+   }
 
 
     String mockQueryNS() {
index b422545..9ce25ed 100644 (file)
@@ -4,7 +4,7 @@
     <bpmn:startEvent id="StartEvent_0lgslwq" name="Start">
       <bpmn:outgoing>SequenceFlow_0wwo1lh</bpmn:outgoing>
     </bpmn:startEvent>
-    <bpmn:scriptTask id="ScriptTask_1x13jc1" name="Pre-process Â request&#10;Check operationType" scriptFormat="groovy">
+    <bpmn:scriptTask id="ScriptTask_1x13jc1" name="Pre-process Ã‚ request&#10;Check operationType" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0wwo1lh</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_139ejmn</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
@@ -25,8 +25,8 @@ activateNssi.getServiceVNFAndVFsFromCatalogDB(execution)</bpmn:script>
 def activateNssi = new DoActivateCoreNSSI()
 activateNssi.prepareSOMacroRequestPayLoad(execution)</bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_0lxbaxd" name="Call AAI &#10;update sliceProlie service Instance status" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1e20i9g</bpmn:incoming>
+    <bpmn:scriptTask id="ScriptTask_0lxbaxd" name="Call AAI &#10;update sliceProlie service Instance status" scriptFormat="groovy">
+      <bpmn:incoming>Flow_09eevay</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0j0egoi</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def activateNssi = new DoActivateCoreNSSI()
@@ -46,38 +46,9 @@ activateNssi.getNetworkInstanceWithSPInstanceAssociatedWithNssiId(execution)</bp
 def activateNssi = new DoActivateCoreNSSI()
 activateNssi.sendPutRequestToSOMacro(execution)</bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_1frasll" name="Prepare Call CheckServiceProcessStatus" scriptFormat="groovy">
-      <bpmn:incoming>Flow_039sx2v</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_18x9gdi</bpmn:outgoing>
-      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def activateNssi = new DoActivateCoreNSSI()
-activateNssi.prepareCallCheckProcessStatus(execution)</bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:callActivity id="CallActivity_11hntoj" name="CallCheckServiceProcessStatus" calledElement="CheckServiceProcessStatus">
-      <bpmn:extensionElements>
-        <camunda:in source="networkServiceInstanceId" target="serviceInstanceId" />
-        <camunda:in source="macroOperationId" target="operationId" />
-        <camunda:in source="successConditions" target="successConditions" />
-        <camunda:in source="errorConditions" target="errorConditions" />
-        <camunda:in source="processServiceType" target="processServiceType" />
-        <camunda:in source="timeOut" target="timeOut" />
-        <camunda:out source="operationStatus" target="result" />
-        <camunda:out source="operationContent" target="reason" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-        <camunda:out source="isTimeOut" target="isTimeOut" />
-        <camunda:in source="subOperationType" target="operationType" />
-        <camunda:in source="initProgress" target="initProgress" />
-        <camunda:in source="endProgress" target="endProgress" />
-        <camunda:in source="serviceInstanceID" target="parentServiceInstanceId" />
-        <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
-        <camunda:in source="operationId" target="parentOperationId" />
-      </bpmn:extensionElements>
-      <bpmn:incoming>SequenceFlow_18x9gdi</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1l9ry0a</bpmn:outgoing>
-    </bpmn:callActivity>
-    <bpmn:scriptTask id="ScriptTask_1sfn88d" name="Prepare update Service operation status " scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1l9ry0a</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0wx21io</bpmn:outgoing>
+    <bpmn:scriptTask id="ScriptTask_1sfn88d" name="Prepare update Service operation status " scriptFormat="groovy">
+      <bpmn:incoming>Flow_1a7o8s7</bpmn:incoming>
+      <bpmn:outgoing>Flow_09eevay</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def activateNssi = new DoActivateCoreNSSI()
 activateNssi.prepareUpdateResourceOperationStatus(execution)</bpmn:script>
@@ -86,7 +57,6 @@ activateNssi.prepareUpdateResourceOperationStatus(execution)</bpmn:script>
     <bpmn:sequenceFlow id="SequenceFlow_139ejmn" sourceRef="ScriptTask_1x13jc1" targetRef="ScriptTask_1rjha8r" />
     <bpmn:sequenceFlow id="SequenceFlow_1654pt0" sourceRef="ScriptTask_1rjha8r" targetRef="ScriptTask_0usuysi" />
     <bpmn:sequenceFlow id="SequenceFlow_09nihof" sourceRef="ScriptTask_0usuysi" targetRef="ScriptTask_1t06mlw" />
-    <bpmn:sequenceFlow id="SequenceFlow_1l9ry0a" sourceRef="CallActivity_11hntoj" targetRef="ScriptTask_1sfn88d" />
     <bpmn:sequenceFlow id="SequenceFlow_0fbr356" sourceRef="ScriptTask_1t06mlw" targetRef="IntermediateThrowEvent_0gueutz" />
     <bpmn:intermediateThrowEvent id="IntermediateThrowEvent_0gueutz" name="Call SO macro api">
       <bpmn:incoming>SequenceFlow_0fbr356</bpmn:incoming>
@@ -98,25 +68,15 @@ activateNssi.prepareUpdateResourceOperationStatus(execution)</bpmn:script>
       <bpmn:linkEventDefinition name="CallSO" />
     </bpmn:intermediateCatchEvent>
     <bpmn:sequenceFlow id="SequenceFlow_0rjd7tg" sourceRef="ScriptTask_1tfpgcs" targetRef="Gateway_03lo8jx" />
-    <bpmn:exclusiveGateway id="ExclusiveGateway_02nqn2k" name="is TimeOut?" default="SequenceFlow_07u1gfw">
-      <bpmn:incoming>SequenceFlow_0wx21io</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1e20i9g</bpmn:outgoing>
-      <bpmn:outgoing>SequenceFlow_07u1gfw</bpmn:outgoing>
-    </bpmn:exclusiveGateway>
-    <bpmn:sequenceFlow id="SequenceFlow_0wx21io" sourceRef="ScriptTask_1sfn88d" targetRef="ExclusiveGateway_02nqn2k" />
-    <bpmn:sequenceFlow id="SequenceFlow_1e20i9g" name="No" sourceRef="ExclusiveGateway_02nqn2k" targetRef="ScriptTask_0lxbaxd">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isTimeOut") == "NO")}</bpmn:conditionExpression>
-    </bpmn:sequenceFlow>
     <bpmn:endEvent id="EndEvent_1061mty" name="End">
       <bpmn:incoming>SequenceFlow_0v0dntm</bpmn:incoming>
     </bpmn:endEvent>
-    <bpmn:sequenceFlow id="SequenceFlow_18x9gdi" sourceRef="ScriptTask_1frasll" targetRef="CallActivity_11hntoj" />
     <bpmn:exclusiveGateway id="Gateway_03lo8jx" name="is SO Response OK?" default="Flow_1jchhgj">
       <bpmn:incoming>SequenceFlow_0rjd7tg</bpmn:incoming>
       <bpmn:outgoing>Flow_039sx2v</bpmn:outgoing>
       <bpmn:outgoing>Flow_1jchhgj</bpmn:outgoing>
     </bpmn:exclusiveGateway>
-    <bpmn:sequenceFlow id="Flow_039sx2v" name="Yes" sourceRef="Gateway_03lo8jx" targetRef="ScriptTask_1frasll">
+    <bpmn:sequenceFlow id="Flow_039sx2v" name="Yes" sourceRef="Gateway_03lo8jx" targetRef="Activity_14jev2r">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isSOResponseSucceed" )  == "yes")}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
     <bpmn:serviceTask id="ServiceTask_02x7eqy" name="Update Service Operation Status">
@@ -130,7 +90,7 @@ activateNssi.prepareUpdateResourceOperationStatus(execution)</bpmn:script>
                 <camunda:entry key="Authorization">Basic YnBlbDpwYXNzd29yZDEk</camunda:entry>
               </camunda:map>
             </camunda:inputParameter>
-            <camunda:inputParameter name="payload">${updateOperationStatus}</camunda:inputParameter>
+            <camunda:inputParameter name="payload">${updateResourceOperationStatus}</camunda:inputParameter>
             <camunda:inputParameter name="method">POST</camunda:inputParameter>
             <camunda:outputParameter name="NSSMF_dbResponseCode">${statusCode}</camunda:outputParameter>
             <camunda:outputParameter name="NSSMF_dbResponse">${response}</camunda:outputParameter>
@@ -140,13 +100,11 @@ activateNssi.prepareUpdateResourceOperationStatus(execution)</bpmn:script>
       </bpmn:extensionElements>
       <bpmn:incoming>Flow_1jchhgj</bpmn:incoming>
       <bpmn:incoming>SequenceFlow_0j0egoi</bpmn:incoming>
-      <bpmn:incoming>SequenceFlow_07u1gfw</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0v0dntm</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0v0dntm" sourceRef="ServiceTask_02x7eqy" targetRef="EndEvent_1061mty" />
     <bpmn:sequenceFlow id="Flow_1jchhgj" name="No" sourceRef="Gateway_03lo8jx" targetRef="ServiceTask_02x7eqy" />
     <bpmn:sequenceFlow id="SequenceFlow_0j0egoi" sourceRef="ScriptTask_0lxbaxd" targetRef="ServiceTask_02x7eqy" />
-    <bpmn:sequenceFlow id="SequenceFlow_07u1gfw" name="Yes" sourceRef="ExclusiveGateway_02nqn2k" targetRef="ServiceTask_02x7eqy" />
     <bpmn:subProcess id="Activity_1tmdw60" name="Sub-process for FalloutHandler and Rollback" triggeredByEvent="true">
       <bpmn:startEvent id="Event_159txw2">
         <bpmn:outgoing>Flow_149oqyp</bpmn:outgoing>
@@ -196,225 +154,236 @@ activateNssi.prepareFailedOperationStatusUpdate(execution)</bpmn:script>
       <bpmn:sequenceFlow id="Flow_149oqyp" sourceRef="Event_159txw2" targetRef="Activity_0u4a0ry" />
       <bpmn:sequenceFlow id="Flow_1qooaff" sourceRef="Activity_0u3yna7" targetRef="Event_0c1ec2y" />
     </bpmn:subProcess>
+    <bpmn:scriptTask id="Activity_14jev2r" name="Call Get SO PUT progress" scriptFormat="groovy">
+      <bpmn:incoming>Flow_0q5mlhf</bpmn:incoming>
+      <bpmn:incoming>Flow_039sx2v</bpmn:incoming>
+      <bpmn:outgoing>Flow_1mtsx52</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def activateNssi = new DoActivateCoreNSSI()
+activateNssi.getSOPUTProgress(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:exclusiveGateway id="Gateway_0fdseyg" default="Flow_1a7o8s7">
+      <bpmn:incoming>Flow_1mtsx52</bpmn:incoming>
+      <bpmn:outgoing>Flow_1ocji6k</bpmn:outgoing>
+      <bpmn:outgoing>Flow_1a7o8s7</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:scriptTask id="Activity_0fbp09r" name="Time Delay 5s" scriptFormat="groovy">
+      <bpmn:incoming>Flow_1ocji6k</bpmn:incoming>
+      <bpmn:outgoing>Flow_0q5mlhf</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def activateNssi = new DoActivateCoreNSSI()
+activateNssi.timeDelay()</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="Flow_0q5mlhf" sourceRef="Activity_0fbp09r" targetRef="Activity_14jev2r" />
+    <bpmn:sequenceFlow id="Flow_1ocji6k" name="requestState=IN_PROGRESS" sourceRef="Gateway_0fdseyg" targetRef="Activity_0fbp09r">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("requestState" ) == "IN_PROGRESS")}</bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:sequenceFlow id="Flow_1mtsx52" sourceRef="Activity_14jev2r" targetRef="Gateway_0fdseyg" />
+    <bpmn:sequenceFlow id="Flow_1a7o8s7" sourceRef="Gateway_0fdseyg" targetRef="ScriptTask_1sfn88d" />
+    <bpmn:sequenceFlow id="Flow_09eevay" sourceRef="ScriptTask_1sfn88d" targetRef="ScriptTask_0lxbaxd" />
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoActivateCoreNSSI">
-      <bpmndi:BPMNEdge id="SequenceFlow_07u1gfw_di" bpmnElement="SequenceFlow_07u1gfw">
-        <di:waypoint x="976" y="319" />
-        <di:waypoint x="1123" y="319" />
+      <bpmndi:BPMNEdge id="Flow_09eevay_di" bpmnElement="Flow_09eevay">
+        <di:waypoint x="1020" y="319" />
+        <di:waypoint x="1090" y="319" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1a7o8s7_di" bpmnElement="Flow_1a7o8s7">
+        <di:waypoint x="845" y="319" />
+        <di:waypoint x="920" y="319" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1mtsx52_di" bpmnElement="Flow_1mtsx52">
+        <di:waypoint x="690" y="319" />
+        <di:waypoint x="795" y="319" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1ocji6k_di" bpmnElement="Flow_1ocji6k">
+        <di:waypoint x="820" y="344" />
+        <di:waypoint x="820" y="378" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1041" y="301" width="18" height="14" />
+          <dc:Bounds x="743" y="342" width="78" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_0q5mlhf_di" bpmnElement="Flow_0q5mlhf">
+        <di:waypoint x="770" y="418" />
+        <di:waypoint x="640" y="418" />
+        <di:waypoint x="640" y="359" />
+      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0j0egoi_di" bpmnElement="SequenceFlow_0j0egoi">
-        <di:waypoint x="1099" y="258" />
-        <di:waypoint x="1173" y="258" />
-        <di:waypoint x="1173" y="279" />
+        <di:waypoint x="1190" y="319" />
+        <di:waypoint x="1253" y="319" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="376" y="387" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1jchhgj_di" bpmnElement="Flow_1jchhgj">
-        <di:waypoint x="400" y="344" />
-        <di:waypoint x="400" y="450" />
-        <di:waypoint x="1190" y="450" />
-        <di:waypoint x="1190" y="360" />
+        <di:waypoint x="460" y="344" />
+        <di:waypoint x="460" y="480" />
+        <di:waypoint x="1320" y="480" />
+        <di:waypoint x="1320" y="359" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="788" y="432" width="15" height="14" />
+          <dc:Bounds x="883" y="462" width="15" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0v0dntm_di" bpmnElement="SequenceFlow_0v0dntm">
-        <di:waypoint x="1223" y="319" />
-        <di:waypoint x="1263" y="319" />
+        <di:waypoint x="1353" y="319" />
+        <di:waypoint x="1393" y="319" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="483" y="448" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_039sx2v_di" bpmnElement="Flow_039sx2v">
-        <di:waypoint x="425" y="319" />
-        <di:waypoint x="470" y="319" />
+        <di:waypoint x="485" y="319" />
+        <di:waypoint x="590" y="319" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="439" y="301" width="18" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_18x9gdi_di" bpmnElement="SequenceFlow_18x9gdi">
-        <di:waypoint x="570" y="319" />
-        <di:waypoint x="610" y="319" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="-180.5" y="448" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1e20i9g_di" bpmnElement="SequenceFlow_1e20i9g">
-        <di:waypoint x="951" y="294" />
-        <di:waypoint x="951" y="258" />
-        <di:waypoint x="999" y="258" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="959" y="273" width="15" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0wx21io_di" bpmnElement="SequenceFlow_0wx21io">
-        <di:waypoint x="868" y="319" />
-        <di:waypoint x="926" y="319" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="137" y="448" width="0" height="12" />
+          <dc:Bounds x="532" y="301" width="18" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0rjd7tg_di" bpmnElement="SequenceFlow_0rjd7tg">
-        <di:waypoint x="330" y="319" />
-        <di:waypoint x="375" y="319" />
+        <di:waypoint x="380" y="319" />
+        <di:waypoint x="435" y="319" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-336" y="448" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1mi4waj_di" bpmnElement="SequenceFlow_1mi4waj">
-        <di:waypoint x="178" y="319" />
-        <di:waypoint x="230" y="319" />
+        <di:waypoint x="218" y="319" />
+        <di:waypoint x="280" y="319" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-489.5" y="448" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0fbr356_di" bpmnElement="SequenceFlow_0fbr356">
-        <di:waypoint x="1020" y="120" />
-        <di:waypoint x="1132" y="120" />
+        <di:waypoint x="1150" y="120" />
+        <di:waypoint x="1262" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="384" y="249" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1l9ry0a_di" bpmnElement="SequenceFlow_1l9ry0a">
-        <di:waypoint x="710" y="319" />
-        <di:waypoint x="768" y="319" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="-21" y="448" width="0" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_09nihof_di" bpmnElement="SequenceFlow_09nihof">
-        <di:waypoint x="820" y="120" />
-        <di:waypoint x="920" y="120" />
+        <di:waypoint x="950" y="120" />
+        <di:waypoint x="1050" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-460" y="189" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1654pt0_di" bpmnElement="SequenceFlow_1654pt0">
-        <di:waypoint x="610" y="120" />
-        <di:waypoint x="720" y="120" />
+        <di:waypoint x="740" y="120" />
+        <di:waypoint x="850" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-910" y="189" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_139ejmn_di" bpmnElement="SequenceFlow_139ejmn">
-        <di:waypoint x="430" y="120" />
-        <di:waypoint x="510" y="120" />
+        <di:waypoint x="560" y="120" />
+        <di:waypoint x="640" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-381" y="245" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0wwo1lh_di" bpmnElement="SequenceFlow_0wwo1lh">
-        <di:waypoint x="242" y="120" />
-        <di:waypoint x="330" y="120" />
+        <di:waypoint x="372" y="120" />
+        <di:waypoint x="460" y="120" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-489.5" y="249" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="StartEvent_0lgslwq_di" bpmnElement="StartEvent_0lgslwq">
-        <dc:Bounds x="206" y="102" width="36" height="36" />
+        <dc:Bounds x="336" y="102" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="211" y="142" width="25" height="14" />
+          <dc:Bounds x="341" y="142" width="25" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1x13jc1_di" bpmnElement="ScriptTask_1x13jc1">
-        <dc:Bounds x="330" y="80" width="100" height="80" />
+        <dc:Bounds x="460" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0usuysi_di" bpmnElement="ScriptTask_0usuysi">
-        <dc:Bounds x="720" y="80" width="100" height="80" />
+        <dc:Bounds x="850" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1t06mlw_di" bpmnElement="ScriptTask_1t06mlw">
-        <dc:Bounds x="920" y="80" width="100" height="80" />
+        <dc:Bounds x="1050" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0lxbaxd_di" bpmnElement="ScriptTask_0lxbaxd">
-        <dc:Bounds x="999" y="218" width="100" height="80" />
+        <dc:Bounds x="1090" y="279" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1rjha8r_di" bpmnElement="ScriptTask_1rjha8r">
-        <dc:Bounds x="510" y="80" width="100" height="80" />
+        <dc:Bounds x="640" y="80" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1tfpgcs_di" bpmnElement="ScriptTask_1tfpgcs">
-        <dc:Bounds x="230" y="279" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1frasll_di" bpmnElement="ScriptTask_1frasll">
-        <dc:Bounds x="470" y="279" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="CallActivity_11hntoj_di" bpmnElement="CallActivity_11hntoj">
-        <dc:Bounds x="610" y="279" width="100" height="80" />
+        <dc:Bounds x="280" y="279" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1sfn88d_di" bpmnElement="ScriptTask_1sfn88d">
-        <dc:Bounds x="768" y="279" width="100" height="80" />
+        <dc:Bounds x="920" y="279" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_1808y0j_di" bpmnElement="IntermediateThrowEvent_0gueutz">
-        <dc:Bounds x="1132" y="102" width="36" height="36" />
+        <dc:Bounds x="1262" y="102" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1106" y="142" width="90" height="14" />
+          <dc:Bounds x="1236" y="142" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateCatchEvent_11m7660_di" bpmnElement="IntermediateThrowEvent_150o0dl">
-        <dc:Bounds x="142" y="301" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="115" y="341" width="90" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ExclusiveGateway_02nqn2k_di" bpmnElement="ExclusiveGateway_02nqn2k" isMarkerVisible="true">
-        <dc:Bounds x="926" y="294" width="50" height="50" />
+        <dc:Bounds x="182" y="301" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="922" y="354" width="59" height="14" />
+          <dc:Bounds x="155" y="341" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_1061mty_di" bpmnElement="EndEvent_1061mty">
-        <dc:Bounds x="1263" y="301" width="36" height="36" />
+        <dc:Bounds x="1393" y="301" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1271" y="344" width="20" height="14" />
+          <dc:Bounds x="1401" y="344" width="20" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Gateway_03lo8jx_di" bpmnElement="Gateway_03lo8jx" isMarkerVisible="true">
-        <dc:Bounds x="375" y="294" width="50" height="50" />
+        <dc:Bounds x="435" y="294" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="360" y="264" width="80" height="27" />
+          <dc:Bounds x="420" y="256.5" width="80" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_02x7eqy_di" bpmnElement="ServiceTask_02x7eqy">
-        <dc:Bounds x="1123" y="279" width="100" height="80" />
+        <dc:Bounds x="1253" y="279" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1tmdw60_di" bpmnElement="Activity_1tmdw60" isExpanded="true">
-        <dc:Bounds x="400" y="560" width="781" height="196" />
+        <dc:Bounds x="530" y="560" width="781" height="196" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="Flow_1qooaff_di" bpmnElement="Flow_1qooaff">
-        <di:waypoint x="960" y="664" />
-        <di:waypoint x="1068" y="664" />
+        <di:waypoint x="1090" y="664" />
+        <di:waypoint x="1198" y="664" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_149oqyp_di" bpmnElement="Flow_149oqyp">
-        <di:waypoint x="466" y="664" />
-        <di:waypoint x="530" y="664" />
+        <di:waypoint x="596" y="664" />
+        <di:waypoint x="660" y="664" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1dh5sht_di" bpmnElement="Flow_1dh5sht">
-        <di:waypoint x="630" y="664" />
-        <di:waypoint x="690" y="664" />
+        <di:waypoint x="760" y="664" />
+        <di:waypoint x="820" y="664" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="Flow_1iqw69c_di" bpmnElement="Flow_1iqw69c">
-        <di:waypoint x="790" y="664" />
-        <di:waypoint x="860" y="664" />
+        <di:waypoint x="920" y="664" />
+        <di:waypoint x="990" y="664" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="Event_159txw2_di" bpmnElement="Event_159txw2">
-        <dc:Bounds x="430" y="646" width="36" height="36" />
+        <dc:Bounds x="560" y="646" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Event_0c1ec2y_di" bpmnElement="Event_0c1ec2y">
-        <dc:Bounds x="1068" y="646" width="36" height="36" />
+        <dc:Bounds x="1198" y="646" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0u3yna7_di" bpmnElement="Activity_0u3yna7">
-        <dc:Bounds x="860" y="624" width="100" height="80" />
+        <dc:Bounds x="990" y="624" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_0u4a0ry_di" bpmnElement="Activity_0u4a0ry">
-        <dc:Bounds x="530" y="624" width="100" height="80" />
+        <dc:Bounds x="660" y="624" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_11422x1_di" bpmnElement="Activity_11422x1">
-        <dc:Bounds x="690" y="624" width="100" height="80" />
+        <dc:Bounds x="820" y="624" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_14jev2r_di" bpmnElement="Activity_14jev2r">
+        <dc:Bounds x="590" y="279" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Gateway_0fdseyg_di" bpmnElement="Gateway_0fdseyg" isMarkerVisible="true">
+        <dc:Bounds x="795" y="294" width="50" height="50" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Activity_0fbp09r_di" bpmnElement="Activity_0fbp09r">
+        <dc:Bounds x="770" y="378" width="100" height="80" />
       </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
-</bpmn:definitions>
+</bpmn:definitions>
\ No newline at end of file