update nsmf because the oof inteface modify 94/107594/1
authorhetengjiao <hetengjiao@chinamobile.com>
Wed, 13 May 2020 03:14:19 +0000 (11:14 +0800)
committerhetengjiao <hetengjiao@chinamobile.com>
Wed, 13 May 2020 03:14:43 +0000 (11:14 +0800)
Issue-ID: SO-2919

Change-Id: I6d4b9ba0f92ed95d3d9751f1dd69b8188951e82f
Signed-off-by: hetengjiao <hetengjiao@chinamobile.com>
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateSliceServiceOption.groovy
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateSliceServiceOption.bpmn

index c66a89b..303b8c8 100644 (file)
@@ -1,13 +1,29 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ # Copyright (c) 2019, CMCC Technologies Co., Ltd.
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License")
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ #       http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
 package org.onap.so.bpmn.infrastructure.scripts
 
 import com.fasterxml.jackson.core.type.TypeReference
-import groovy.json.JsonBuilder
+import com.fasterxml.jackson.databind.ObjectMapper
 import groovy.json.JsonSlurper
-import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
-import org.onap.aai.domain.yang.Relationship
-import org.onap.aai.domain.yang.RelationshipList
-import org.onap.aai.domain.yang.ServiceInstance
 import org.onap.logging.filter.base.ONAPComponents
 import org.onap.so.beans.nsmf.SliceTaskParams
 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
@@ -24,57 +40,43 @@ import org.onap.so.client.aai.AAIResourcesClient
 import org.onap.so.client.aai.entities.AAIResultWrapper
 import org.onap.so.client.aai.entities.uri.AAIResourceUri
 import org.onap.so.client.aai.entities.uri.AAIUriFactory
-import org.onap.so.db.request.client.RequestsDbClient
-import org.onap.so.db.request.beans.OrchestrationTask
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
+
 import javax.ws.rs.NotFoundException
 import javax.ws.rs.core.Response
 
 import static org.apache.commons.lang3.StringUtils.isBlank
 
-public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
+class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
 
     private static final Logger logger = LoggerFactory.getLogger( DoCreateSliceServiceOption.class)
 
-
     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
     JsonUtils jsonUtil = new JsonUtils()
 
-    RequestsDbClient requestsDbClient = new RequestsDbClient()
-
     OofUtils oofUtils = new OofUtils()
 
-    /**
-     * Pre Process the BPMN Flow Request
-     * Inclouds:
-     * generate the nsOperationKey
-     * generate the nsParameters
-     */
-    void preProcessRequest (DelegateExecution execution) {
-        String msg = ""
-        logger.trace("Enter preProcessRequest()")
-        String taskID = execution.getVariable("taskID")
-        Boolean isSharable = true
-        String resourceSharingLevel = execution.getVariable("resourceSharingLevel")
-        if (resourceSharingLevel.equals("shared"))
-            isSharable = true
-        execution.setVariable("isSharable",isSharable)
-        logger.trace("Exit preProcessRequest")
+    ObjectMapper objectMapper = new ObjectMapper()
 
+    void preProcessRequest (DelegateExecution execution) {
     }
 
 
     void getNSIOptionfromOOF(DelegateExecution execution) {
 
+        //解析sliceProfile
+        logger.debug("start parseServiceProfile")
+        parseServiceProfile(execution)
+        logger.debug("end parseServiceProfile")
+
         String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
         logger.debug( "get NSI option OOF Url: " + urlString)
+
         boolean isNSISuggested = true
         execution.setVariable("isNSISuggested",isNSISuggested)
-        String nsiInstanceId = ""
-        String nsiName = ""
-        SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
+
         //Prepare auth for OOF - Begin
         def authHeader = ""
         String basicAuth = UrnPropertiesReader.getVariable("mso.oof.auth", execution)
@@ -100,117 +102,127 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
 
         String requestId = execution.getVariable("msoRequestId")
         Map<String, Object> profileInfo = execution.getVariable("serviceProfile")
-        String nstModelUuid = execution.getVariable("nstModelUuid")
-        String nstModelInvariantUuid = execution.getVariable("nstModelInvariantUuid")
-        String nstInfo = """"NSTInfo" : {
-        "invariantUUID":"${nstModelInvariantUuid}",
-        "UUID":"${nstModelUuid}"
+        Map<String, Object> nstSolution = execution.getVariable("nstSolution")
+        logger.debug("Get NST selection from OOF: " + nstSolution.toString())
+        String nstInfo = """{
+            "modelInvariantId":"${nstSolution.invariantUUID}",
+            "modelVersionId":"${nstSolution.UUID}",
+            "modelName":"${nstSolution.NSTName}"
          }"""
 
-        String oofRequest = oofUtils.buildSelectNSIRequest(execution, requestId, nstInfo, profileInfo)
+        String oofRequest = oofUtils.buildSelectNSIRequest(requestId, nstInfo, profileInfo)
+        logger.debug("Sending request to OOF: " + oofRequest)
 
         //send request to get NSI option - Begin
-        URL url = new URL(urlString+"/api/oof/v1/selectnsi")
+        URL url = new URL(urlString+"/api/oof/selection/nsi/v1")
         HttpClient httpClient = new HttpClientFactory().newJsonClient(url, ONAPComponents.OOF)
         httpClient.addAdditionalHeader("Authorization", authHeader)
         Response httpResponse = httpClient.post(oofRequest)
 
+        processOOFResponse(httpResponse, execution)
+    }
+
+    private void processOOFResponse(Response httpResponse, DelegateExecution execution) {
         int responseCode = httpResponse.getStatus()
         logger.debug("OOF sync response code is: " + responseCode)
 
-        if(responseCode != 200){
+        if (responseCode != 200) {
             exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from OOF.")
-            logger.debug("Info: No NSI suggested by OOF" )
+            logger.debug("Info: No NSI suggested by OOF")
         }
 
-        if(httpResponse.hasEntity()){
+        SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
+        if (httpResponse.hasEntity()) {
             String OOFResponse = httpResponse.readEntity(String.class)
+            logger.debug("NSI OOFResponse is: " + OOFResponse)
             execution.setVariable("OOFResponse", OOFResponse)
-            int index = 0   //This needs to be changed to derive a value when we add policy to decide the solution options.
+            int index = 0
+            //This needs to be changed to derive a value when we add policy to decide the solution options.
             Map OOFResponseObject = new JsonSlurper().parseText(OOFResponse)
-            if(execution.getVariable("isSharable" )  == true && OOFResponseObject.get("solutions").containsKey("sharedNSIsolutions")) {
-                nsiInstanceId = OOFResponseObject.get("solutions").get("sharedNSIsolutions").get(0).get("NSISolution").NSIId
-                nsiName = OOFResponseObject.get("solutions").get("sharedNSIsolutions").get(0).get("NSISolution").NSIName
-                sliceTaskParams.setNstId(nsiInstanceId)
-                sliceTaskParams.setSuggestNsiName(nsiName)
-                execution.setVariable("nsiInstanceId",nsiInstanceId)
-                execution.setVariable("nsiName",nsiName)
-            }else {
-                if(OOFResponseObject.get("solutions").containsKey("newNSISolutions")) {
-                    List NSSImap = OOFResponseObject.get("solutions").get("newNSISolutions").get(index).get("NSSISolutions")
-                    for(Map nssi :  NSSImap) {
-                        String nssiName = nssi.get("NSSISolution").NSSIName
-                        String nssiId = nssi.get("NSSISolution").NSSIId
-                        String domain = nssi.get("NSSISolution").domain.toUpperCase()
-                        switch (domain) {
-                            case "AN":
-                                sliceTaskParams.setAnSuggestNssiId(nssiId)
-                                sliceTaskParams.setAnSuggestNssiName(nssiName)
-                                break;
-                            case "CN":
-                                sliceTaskParams.setCnSuggestNssiId(nssiId)
-                                sliceTaskParams.setCnSuggestNssiName(nssiName)
-                                break;
-                            case "TN":
-                                sliceTaskParams.setTnSuggestNssiId(nssiId)
-                                sliceTaskParams.setTnSuggestNssiName(nssiName)
-                                break;
-                            default:
-                                break;
+            Map solutions = OOFResponseObject.get("solutions")
+
+            Boolean isSharable = false
+            String resourceSharingLevel = execution.getVariable("resourceSharingLevel")
+            if (resourceSharingLevel.equals("shared"))
+                isSharable = true
+
+            if (solutions != null) {
+                if (isSharable) {
+                    //sharedNSISolution
+                    processSharedNSISolutions(solutions, execution)
+                } else {
+                    //TODO test OOF don't implement in Frankfurt release
+                    if (solutions.containsKey("newNSISolutions")) {
+                        List<Map> newNSISolutions = solutions.get("newNSISolutions")
+                        List<Map> NSSImap = new ArrayList<>()
+                        if (newNSISolutions != null && newNSISolutions.size() > 0) {
+                            NSSImap = newNSISolutions.get(index).get("NSSISolutions") as List<Map>
                         }
+                        for (Map nssi : NSSImap) {
+                            def nssiSolution = nssi.get("NSSISolution") as Map<String, ?>
+                            String nssiName = nssiSolution.getOrDefault("NSSIName", "")
+                            String nssiId = nssiSolution.getOrDefault("NSSIId", "")
+                            String domain = nssiSolution.getOrDefault("domainName", "").toString().toUpperCase()
+                            switch (domain) {
+                                case "AN":
+                                    sliceTaskParams.setAnSuggestNssiId(nssiId)
+                                    sliceTaskParams.setAnSuggestNssiName(nssiName)
+                                    break
+                                case "CN":
+                                    sliceTaskParams.setCnSuggestNssiId(nssiId)
+                                    sliceTaskParams.setCnSuggestNssiName(nssiName)
+                                    break
+                                case "TN":
+                                    sliceTaskParams.setTnSuggestNssiId(nssiId)
+                                    sliceTaskParams.setTnSuggestNssiName(nssiName)
+                                    break
+                                default:
+                                    break
+                            }
+                        }
+                        //TODO sliceProfile
                     }
                 }
-
             }
             execution.setVariable("sliceTaskParams", sliceTaskParams)
-            logger.debug("Info: No NSI suggested by OOF" )
+            logger.debug("Info: No NSI suggested by OOF")
         }
-        //send request to get NSI option - Begin
-
+        logger.debug("*** Completed options Call to OOF ***")
+    }
 
-        //send request to get NSI service Info - Begin
-
-        /***
-         * Need to check whether its needed.
-         */
-//            logger.debug("Begin to query OOF suggetsed NSI from AAI ")
-//            if(isBlank(nsiInstanceId)){
-//                isNSISuggested = false
-//                execution.setVariable("isNSISuggested",isNSISuggested)
-//            }else
-//            {
-//                try {
-//                    String globalSubscriberId = execution.getVariable('globalSubscriberId')
-//                    String serviceType = execution.getVariable('subscriptionServiceType')
-//                    AAIResourcesClient resourceClient = new AAIResourcesClient()
-//                    AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, nsiInstanceId)
-//                    AAIResultWrapper wrapper = resourceClient.get(serviceInstanceUri, NotFoundException.class)
-//                    Optional<org.onap.aai.domain.yang.ServiceInstance> si = wrapper.asBean(org.onap.aai.domain.yang.ServiceInstance.class)
-//                    org.onap.aai.domain.yang.ServiceInstance nsiServiceInstance = si.get()
-//                    execution.setVariable("nsiServiceInstance",nsiServiceInstance)
-//                    isNSISuggested = true
-//                    execution.setVariable("isNSISuggested",isNSISuggested)
-//                    SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
-//                    sliceTaskParams.setSuggestNsiId(nsiInstanceId)
-//                    sliceTaskParams.setSuggestNsiName(si.get().getServiceInstanceName())
-//                    execution.setVariable("sliceTaskParams", sliceTaskParams)
-//                    logger.debug("Info: NSI suggested by OOF exist in AAI ")
-//                }catch(BpmnError e) {
-//                    throw e
-//                }catch(Exception ex) {
-//                    String msg = "Internal Error in getServiceInstance: " + ex.getMessage()
-//                    //exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-//                    logger.debug("Info: NSI suggested by OOF doesnt exist in AAI " + nsiInstanceId)
-//                }
-//            }
-        //send request to get NSI service Info - End
-        //${OrchestrationTaskHandler.createOrchestrationTask(execution.getVariable("OrchestrationTask"))}
-        logger.debug( "*** Completed options Call to OOF ***")
+    private void processSharedNSISolutions(Map solutions, DelegateExecution execution) {
+        if (!solutions.containsKey("sharedNSISolutions"))
+        {
+            logger.error("OOF don't return sharedNSISolutions")
+            return
+        }
+        String nsiName, nsiInstanceId, nssiId, nssiName
+        Map sliceProfile
+        SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
 
+        Map sharedNSIsolution = ((List) solutions.get("sharedNSISolutions")).get(0)
+        nsiInstanceId = sharedNSIsolution.getOrDefault("NSIId", "")
+        nsiName = sharedNSIsolution.getOrDefault("NSIName", "")
+        sliceTaskParams.setNstId(nsiInstanceId)
+        sliceTaskParams.setSuggestNsiName(nsiName)
+
+        //Temporary modification
+        List NSSIs = sharedNSIsolution.get("NSSIs")
+        if(NSSIs.size()==1){
+            Map nssi = NSSIs.get(0)
+            nssiId = nssi.getOrDefault("NSSIId","")
+            nssiName = nssi.getOrDefault("NSSIName","")
+            sliceTaskParams.setCnSuggestNssiId(nssiId)
+            sliceTaskParams.setCnSuggestNssiName(nssiName)
+            sliceProfile = ((List)nssi.get("sliceProfile"))?.get(0)
+//            execution.setVariable("sliceProfileCn", sliceProfile)
+//            sliceTaskParams.setSliceProfileCn(sliceProfile)
+        }
+        logger.debug("OOF sharedNSISolution nsiInstanceId:${nsiInstanceId}, nsiName:${nsiName}, nssiId:${nssiId}, nssiName:${nssiName}")
+        logger.debug("OOF SliceProfile:"+sliceProfile.toString())
     }
 
-
-    public void parseServiceProfile(DelegateExecution execution) {
+    void parseServiceProfile(DelegateExecution execution) {
         logger.debug("Start parseServiceProfile")
         String serviceType = execution.getVariable("serviceType")
         Map<String, Object> serviceProfile = execution.getVariable("serviceProfile")
@@ -230,9 +242,27 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
         logger.debug("Finish parseServiceProfile")
     }
 
-    public Map getSliceProfile(String serviceType, String domain, Map<String, Object> serviceProfile) {
-        String variablePath = "nsmf." + serviceType + ".profileMap" + domain
-        String profileMapStr = UrnPropertiesReader.getVariable(variablePath)
+    Map getSliceProfile(String serviceType, String domain, Map<String, Object> serviceProfile) {
+        //String variablePath = "nsmf." + serviceType + ".profileMap" + domain
+        //String profileMapStr = UrnPropertiesReader.getVariable(variablePath)
+        String profileMapStr = """ {
+            "skip_post_instantiation_configuration":"skip_post_instantiation_configuration", 
+            "controller_actor":"controller_actor", 
+            "areaTrafficCapDL":"areaTrafficCapDL", 
+            "maxNumberofUEs":"maxNumberofUEs", 
+            "latency":"latency", 
+            "expDataRateUL":"expDataRateUL", 
+            "sNSSAI":"sNSSAI", 
+            "plmnIdList":"plmnIdList", 
+            "sST":"sST", 
+            "areaTrafficCapUL":"areaTrafficCapUL", 
+            "uEMobilityLevel":"uEMobilityLevel", 
+            "expDataRateDL":"expDataRateDL", 
+            "coverageAreaTAList":"coverageAreaTAList", 
+            "activityFactor":"activityFactor", 
+            "resourceSharingLevel":"resourceSharingLevel"
+        }
+        """.trim().replaceAll(" ", "")
         logger.debug("Profile map for " + domain + " : " + profileMapStr)
         Map<String, String> profileMaps = objectMapper.readValue(profileMapStr, new TypeReference<Map<String, String>>(){})
         Map<String, Object> sliceProfileTn = [:]
@@ -243,92 +273,20 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
         return sliceProfileTn
     }
 
+    void processDecomposition(DelegateExecution execution){
+        logger.debug("Start processDecomposition")
 
-    void prepareNSSIList(DelegateExecution execution)
-    {
         ServiceDecomposition serviceDecomposition= execution.getVariable("serviceDecomposition")
-        List<String> nssiAssociated = new ArrayList<>()
-        Map<String, String> nssimap = new HashMap<>()
-        String nsiInstanceId=execution.getVariable("nsiInstanceId")
-        String globalSubscriberId = execution.getVariable("globalSubscriberId")
-        String serviceType = execution.getVariable("subscriptionServiceType")
-
-        try {
-
-            ServiceInstance si = execution.getVariable("nsiServiceInstance")
-            //List<Relationship> relationships = si.getRelationshipList().getRelationship().stream().filter(relation ->
-            //        relation.getRelatedTo().equalsIgnoreCase("service-instance"))
-            RelationshipList relationshipList = si.getRelationshipList()
-            List<Relationship> relationships = relationshipList.getRelationship()
-            for(Relationship relationship in relationships)
-            {
-                if(relationship.getRelatedTo().equalsIgnoreCase("service-instance"))
-                {
-                    String NSSIassociated = relationship.getRelatedLink().substring(relationship.getRelatedLink().lastIndexOf("/") + 1);
-                    if(!NSSIassociated.equals(nsiInstanceId))
-                        nssiAssociated.add(NSSIassociated)
-                }
-            }
-        }catch(BpmnError e) {
-            throw e
-        }catch(Exception ex) {
-            String msg = "Internal Error in getServiceInstance: " + ex.getMessage()
-            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
-        }
-        Map<String, Object> params = execution.getVariable("params")
         SliceTaskParams sliceTaskParams = execution.getVariable("sliceTaskParams")
-        for(String nssiID in nssiAssociated)
-        {
-            try {
-                AAIResourcesClient resourceClient = new AAIResourcesClient()
-                AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, globalSubscriberId, serviceType, nssiID)
-                AAIResultWrapper wrapper = resourceClient.get(serviceInstanceUri, NotFoundException.class)
-                Optional<org.onap.aai.domain.yang.ServiceInstance> si = wrapper.asBean(org.onap.aai.domain.yang.ServiceInstance.class)
-                org.onap.aai.domain.yang.ServiceInstance nssi = si.get()
-
-                String domain = nssi.getEnvironmentContext().toString().toUpperCase()
-                switch (domain) {
-                    case "AN":
-                        sliceTaskParams.setAnSuggestNssiId(nssi.getServiceInstanceId())
-                        sliceTaskParams.setAnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
-                    case "CN":
-                        sliceTaskParams.setCnSuggestNssiId(nssi.getServiceInstanceId())
-                        sliceTaskParams.setCnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
-                    case "TN":
-                        sliceTaskParams.setTnSuggestNssiId(nssi.getServiceInstanceId())
-                        sliceTaskParams.setTnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
-                    default:
-                        break;
-                }
-            }catch(NotFoundException e)
-            {
-                logger.debug("NSSI Service Instance not found in AAI: " + nssiID)
-            }catch(Exception e)
-            {
-                logger.debug("NSSI Service Instance not found in AAI: " + nssiID)
-            }
-
-        }
         String nstName = serviceDecomposition.getModelInfo().getModelName()
         sliceTaskParams.setNstName(nstName)
         String nstId = serviceDecomposition.getModelInfo().getModelUuid()
         sliceTaskParams.setNstId(nstId)
-        execution.setVariable("sliceTaskParams",sliceTaskParams)
 
+        logger.debug("End processDecomposition")
     }
 
 
-    void updateOptionsInDB(DelegateExecution execution) {
-        logger.debug("Updating options with default value since not sharable : Begin ")
-        String taskID = execution.getVariable("taskID")
-        String params = execution.getVariable("params")
-        logger.debug("Updating options with default value since not sharable : End ")
-
-    }
-
     void prepareNSTDecompose(DelegateExecution execution) {
 
         String modelUuid = execution.getVariable("nstModelUuid")
@@ -364,14 +322,6 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
     }
 
 
-    void updateStatusInDB(DelegateExecution execution) {
-
-        String taskID = execution.getVariable("taskID")
-        //OrchestrationTask orchestrationTask = requestsDbClient.getNetworkSliceOption(taskID);
-        //orchestrationTask.setTaskStage("wait to confirm")
-        //requestsDbClient.updateNetworkSliceOption(orchestrationTask)
-    }
-
     void prepareNSSTlistfromNST(DelegateExecution execution) {
         //Need to update this part from decomposition.
         logger.trace("Enter prepareNSSTlistfromNST()")
@@ -400,7 +350,6 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
 
     }
 
-
     void getNSSTOption(DelegateExecution execution) {
         ServiceDecomposition serviceDecomposition= execution.getVariable("serviceDecomposition")
         String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
@@ -483,17 +432,17 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
                     case "AN":
                         sliceTaskParams.setAnSuggestNssiId(nssi.getServiceInstanceId())
                         sliceTaskParams.setAnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
+                        break
                     case "CN":
                         sliceTaskParams.setCnSuggestNssiId(nssi.getServiceInstanceId())
                         sliceTaskParams.setCnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
+                        break
                     case "TN":
                         sliceTaskParams.setTnSuggestNssiId(nssi.getServiceInstanceId())
                         sliceTaskParams.setTnSuggestNssiName(nssi.getServiceInstanceName())
-                        break;
+                        break
                     default:
-                        break;
+                        break
                 }
             }catch(NotFoundException e)
             {
@@ -503,22 +452,6 @@ public class DoCreateSliceServiceOption extends AbstractServiceTaskProcessor{
                 logger.debug("NSSI Service Instance not found in AAI: " + nssiInstanceId)
             }
         }
-
-
-        //Prepare send request to OOF - End
-
-//        String content = serviceDecomposition.getServiceInfo().getServiceArtifact().get(0).getContent()
-//        String nsstID = jsonUtil.getJsonValue(content, "metadata.id")
-//        String vendor = jsonUtil.getJsonValue(content, "metadata.vendor")
-//        String domain = jsonUtil.getJsonValue(content, "metadata.domainType")
-//        String type = jsonUtil.getJsonValue(content, "metadata.type")
-//        String nsstContentInfo = """{
-//        "NsstID":"${nsstID}",
-//        "Vendor":"${vendor}",
-//        "type":"${type}"
-//         }"""
-
         logger.debug("Prepare NSSI option completed ")
     }
-}
-
+}
\ No newline at end of file
index 435f919..8e3bada 100644 (file)
@@ -1,13 +1,13 @@
 <?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="2.2.3">
+<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:process id="DoCreateSliceServiceOption" name="DoCreateSliceServiceOption" isExecutable="true">
     <bpmn:startEvent id="createNS_StartEvent" name="createOption_StartEvent">
       <bpmn:outgoing>SequenceFlow_1qo2pln</bpmn:outgoing>
     </bpmn:startEvent>
     <bpmn:sequenceFlow id="SequenceFlow_1qo2pln" sourceRef="createNS_StartEvent" targetRef="PreprocessIncomingRequest_task" />
-    <bpmn:sequenceFlow id="SequenceFlow_0khtova" sourceRef="PreprocessIncomingRequest_task" targetRef="ExclusiveGateway_0b9d9l0" />
+    <bpmn:sequenceFlow id="SequenceFlow_0khtova" sourceRef="PreprocessIncomingRequest_task" targetRef="Task_09nzhwk" />
     <bpmn:scriptTask id="Task_09nzhwk" name="send request to OOF for NSI options" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1h5bw41</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0khtova</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1utpplq</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def dcso = new DoCreateSliceServiceOption()
@@ -20,48 +20,12 @@ dcso.getNSIOptionfromOOF(execution)</bpmn:script>
 def dcso = new DoCreateSliceServiceOption()
 dcso.preProcessRequest(execution)</bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="SequenceFlow_0cq2q6g" sourceRef="finishNSCreate_Task" targetRef="ScriptTask_0j3wd2o" />
     <bpmn:endEvent id="EndEvent_1x6k78c">
-      <bpmn:incoming>SequenceFlow_01ak5x3</bpmn:incoming>
       <bpmn:incoming>SequenceFlow_1ap8kar</bpmn:incoming>
       <bpmn:incoming>SequenceFlow_0hnsycl</bpmn:incoming>
     </bpmn:endEvent>
-    <bpmn:scriptTask id="finishNSCreate_Task" name="prepare list of NSSI associated with NSI" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_15679e8</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0cq2q6g</bpmn:outgoing>
-      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def dcso = new DoCreateSliceServiceOption()
-dcso.prepareNSSIList(execution)</bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:exclusiveGateway id="ExclusiveGateway_0b9d9l0" default="SequenceFlow_0ueeeca">
-      <bpmn:incoming>SequenceFlow_0khtova</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1h5bw41</bpmn:outgoing>
-      <bpmn:outgoing>SequenceFlow_0ueeeca</bpmn:outgoing>
-    </bpmn:exclusiveGateway>
-    <bpmn:sequenceFlow id="SequenceFlow_1h5bw41" name="NSI Sharable" sourceRef="ExclusiveGateway_0b9d9l0" targetRef="Task_09nzhwk">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isSharable" )  == true)}</bpmn:conditionExpression>
-    </bpmn:sequenceFlow>
-    <bpmn:scriptTask id="ScriptTask_1ehyrsg" name="update task status in request DB" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0ueeeca</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0ojueqq</bpmn:outgoing>
-      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def dcso = new DoCreateSliceServiceOption()
-dcso.updateStatusInDB(execution)</bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="SequenceFlow_0ueeeca" name="NSI Not Sharable" sourceRef="ExclusiveGateway_0b9d9l0" targetRef="ScriptTask_1ehyrsg" />
-    <bpmn:endEvent id="EndEvent_00n990e">
-      <bpmn:incoming>SequenceFlow_0ojueqq</bpmn:incoming>
-    </bpmn:endEvent>
-    <bpmn:scriptTask id="ScriptTask_0j3wd2o" name="updated options in request DB" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0cq2q6g</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_01ak5x3</bpmn:outgoing>
-      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def dcso = new DoCreateSliceServiceOption()
-dcso.updateOptionsInDB(execution)</bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="SequenceFlow_01ak5x3" sourceRef="ScriptTask_0j3wd2o" targetRef="EndEvent_1x6k78c" />
     <bpmn:scriptTask id="ScriptTask_0kecvrc" name="prepare list of NSST associated with NST" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1614gtr</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0wy6oag</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0lt2cdo</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def dcso = new DoCreateSliceServiceOption()
@@ -76,7 +40,7 @@ dcso.getNSSTOption(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:exclusiveGateway id="ExclusiveGateway_1y1wzs9">
       <bpmn:incoming>SequenceFlow_0lt2cdo</bpmn:incoming>
-      <bpmn:incoming>SequenceFlow_00gq7h2</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_1r9n9ef</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1ap8kar</bpmn:outgoing>
       <bpmn:outgoing>SequenceFlow_0m2mr0o</bpmn:outgoing>
     </bpmn:exclusiveGateway>
@@ -87,44 +51,7 @@ dcso.getNSSTOption(execution)</bpmn:script>
     <bpmn:sequenceFlow id="SequenceFlow_0m2mr0o" sourceRef="ExclusiveGateway_1y1wzs9" targetRef="ScriptTask_1e5ysya">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isMoreNSSTtoProcess" )  == true)}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:scriptTask id="ScriptTask_0ojz4lj" name="save NSI and NSSI options in DB" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1r9n9ef</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_00gq7h2</bpmn:outgoing>
-      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def dcso = new DoCreateSliceServiceOption()
-dcso.updateOptionsInDB(execution)</bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="SequenceFlow_1r9n9ef" sourceRef="ScriptTask_1mlytov" targetRef="ScriptTask_0ojz4lj" />
-    <bpmn:sequenceFlow id="SequenceFlow_00gq7h2" sourceRef="ScriptTask_0ojz4lj" targetRef="ExclusiveGateway_1y1wzs9" />
-    <bpmn:sequenceFlow id="SequenceFlow_0ojueqq" sourceRef="ScriptTask_1ehyrsg" targetRef="EndEvent_00n990e" />
-    <bpmn:exclusiveGateway id="ExclusiveGateway_1mdr1l2" default="SequenceFlow_1614gtr">
-      <bpmn:incoming>SequenceFlow_041f5ne</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_15679e8</bpmn:outgoing>
-      <bpmn:outgoing>SequenceFlow_1614gtr</bpmn:outgoing>
-    </bpmn:exclusiveGateway>
-    <bpmn:sequenceFlow id="SequenceFlow_15679e8" sourceRef="ExclusiveGateway_1mdr1l2" targetRef="finishNSCreate_Task">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isNSISuggested" )  == true)}</bpmn:conditionExpression>
-    </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_1614gtr" sourceRef="ExclusiveGateway_1mdr1l2" targetRef="ScriptTask_0kecvrc" />
-    <bpmn:scriptTask id="ScriptTask_0uu3j3h" name="prepare NST decomposition" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0wy6oag</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1jnsyix</bpmn:outgoing>
-      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-def dcso = new DoCreateSliceServiceOption()
-dcso.prepareNSTDecompose(execution)</bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:callActivity id="CallActivity_1qs8xd5" name="Call Decompose Service" calledElement="DecomposeService">
-      <bpmn:extensionElements>
-        <camunda:in source="msoRequestId" target="msoRequestId" />
-        <camunda:in source="serviceInstanceId" target="serviceInstanceId" />
-        <camunda:in source="serviceModelInfo" target="serviceModelInfo" />
-        <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" />
-        <camunda:out source="serviceDecomposition" target="serviceDecomposition" />
-        <camunda:out source="WorkflowException" target="WorkflowException" />
-      </bpmn:extensionElements>
-      <bpmn:incoming>SequenceFlow_1jnsyix</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_041f5ne</bpmn:outgoing>
-    </bpmn:callActivity>
+    <bpmn:sequenceFlow id="SequenceFlow_1r9n9ef" sourceRef="ScriptTask_1mlytov" targetRef="ExclusiveGateway_1y1wzs9" />
     <bpmn:scriptTask id="ScriptTask_1e5ysya" name="prepare NSST decomposition" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0m2mr0o</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_016vi3s</bpmn:outgoing>
@@ -146,193 +73,163 @@ dcso.prepareNSSTDecompose(execution)</bpmn:script>
       <bpmn:outgoing>SequenceFlow_0a5f5y6</bpmn:outgoing>
     </bpmn:callActivity>
     <bpmn:sequenceFlow id="SequenceFlow_0a5f5y6" sourceRef="CallActivity_1rfnoe2" targetRef="ScriptTask_1mlytov" />
-    <bpmn:sequenceFlow id="SequenceFlow_1utpplq" sourceRef="Task_09nzhwk" targetRef="ExclusiveGateway_1skfk7w" />
-    <bpmn:sequenceFlow id="SequenceFlow_1jnsyix" sourceRef="ScriptTask_0uu3j3h" targetRef="CallActivity_1qs8xd5" />
-    <bpmn:sequenceFlow id="SequenceFlow_041f5ne" sourceRef="CallActivity_1qs8xd5" targetRef="ExclusiveGateway_1mdr1l2" />
+    <bpmn:sequenceFlow id="SequenceFlow_1utpplq" sourceRef="Task_09nzhwk" targetRef="ScriptTask_1umbyel" />
     <bpmn:exclusiveGateway id="ExclusiveGateway_1skfk7w" default="SequenceFlow_0wy6oag">
-      <bpmn:incoming>SequenceFlow_1utpplq</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0d774n5</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0wy6oag</bpmn:outgoing>
       <bpmn:outgoing>SequenceFlow_0hnsycl</bpmn:outgoing>
     </bpmn:exclusiveGateway>
-    <bpmn:sequenceFlow id="SequenceFlow_0wy6oag" sourceRef="ExclusiveGateway_1skfk7w" targetRef="ScriptTask_0uu3j3h" />
+    <bpmn:sequenceFlow id="SequenceFlow_0wy6oag" sourceRef="ExclusiveGateway_1skfk7w" targetRef="ScriptTask_0kecvrc" />
     <bpmn:sequenceFlow id="SequenceFlow_0hnsycl" sourceRef="ExclusiveGateway_1skfk7w" targetRef="EndEvent_1x6k78c">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("isNSISuggested" )  == true)}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
+    <bpmn:scriptTask id="ScriptTask_1umbyel" name="prepare NST decomposition" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_1utpplq</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0piifl1</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcso = new DoCreateSliceServiceOption()
+dcso.prepareNSTDecompose(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="SequenceFlow_0piifl1" sourceRef="ScriptTask_1umbyel" targetRef="CallActivity_0ly8xiw" />
+    <bpmn:callActivity id="CallActivity_0ly8xiw" name="Call Decompose Service" calledElement="DecomposeService">
+      <bpmn:extensionElements>
+        <camunda:in source="msoRequestId" target="msoRequestId" />
+        <camunda:in source="serviceInstanceId" target="serviceInstanceId" />
+        <camunda:in source="serviceModelInfo" target="serviceModelInfo" />
+        <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" />
+        <camunda:out source="serviceDecomposition" target="serviceDecomposition" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>SequenceFlow_0piifl1</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_086yszq</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:sequenceFlow id="SequenceFlow_086yszq" sourceRef="CallActivity_0ly8xiw" targetRef="Task_1k2ypj0" />
+    <bpmn:sequenceFlow id="SequenceFlow_0d774n5" sourceRef="Task_1k2ypj0" targetRef="ExclusiveGateway_1skfk7w" />
+    <bpmn:scriptTask id="Task_1k2ypj0" name="Process Decomposition" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_086yszq</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0d774n5</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcso = new DoCreateSliceServiceOption()
+dcso.processDecomposition(execution)</bpmn:script>
+    </bpmn:scriptTask>
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoCreateSliceServiceOption">
       <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="createNS_StartEvent">
-        <dc:Bounds x="175" y="187" width="36" height="36" />
+        <dc:Bounds x="175" y="107" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="150" y="223" width="87" height="27" />
+          <dc:Bounds x="151" y="143" width="86" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1qo2pln_di" bpmnElement="SequenceFlow_1qo2pln">
-        <di:waypoint x="211" y="205" />
-        <di:waypoint x="251" y="205" />
-        <di:waypoint x="251" y="205" />
-        <di:waypoint x="293" y="205" />
+        <di:waypoint x="211" y="125" />
+        <di:waypoint x="251" y="125" />
+        <di:waypoint x="251" y="125" />
+        <di:waypoint x="293" y="125" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="266" y="123" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0khtova_di" bpmnElement="SequenceFlow_0khtova">
-        <di:waypoint x="393" y="205" />
-        <di:waypoint x="448" y="205" />
+        <di:waypoint x="393" y="125" />
+        <di:waypoint x="460" y="125" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="436" y="108" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_1dw39hg_di" bpmnElement="Task_09nzhwk">
-        <dc:Bounds x="594" y="165" width="100" height="80" />
+        <dc:Bounds x="460" y="85" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_03j6ogo_di" bpmnElement="PreprocessIncomingRequest_task">
-        <dc:Bounds x="293" y="165" width="100" height="80" />
+        <dc:Bounds x="293" y="85" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0cq2q6g_di" bpmnElement="SequenceFlow_0cq2q6g">
-        <di:waypoint x="1536" y="205" />
-        <di:waypoint x="1592" y="205" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="556.5" y="574" width="90" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_15pcuuc_di" bpmnElement="EndEvent_1x6k78c">
-        <dc:Bounds x="1813" y="187" width="36" height="36" />
+        <dc:Bounds x="1813" y="107" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="412" y="617" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0xxyfku_di" bpmnElement="finishNSCreate_Task">
-        <dc:Bounds x="1436" y="165" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ExclusiveGateway_0b9d9l0_di" bpmnElement="ExclusiveGateway_0b9d9l0" isMarkerVisible="true">
-        <dc:Bounds x="448" y="180" width="50" height="50" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1h5bw41_di" bpmnElement="SequenceFlow_1h5bw41">
-        <di:waypoint x="498" y="205" />
-        <di:waypoint x="594" y="205" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="514" y="187" width="66" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_1ehyrsg_di" bpmnElement="ScriptTask_1ehyrsg">
-        <dc:Bounds x="602" y="-197" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0ueeeca_di" bpmnElement="SequenceFlow_0ueeeca">
-        <di:waypoint x="473" y="180" />
-        <di:waypoint x="473" y="-157" />
-        <di:waypoint x="602" y="-157" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="415" y="14" width="86" height="14" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="EndEvent_00n990e_di" bpmnElement="EndEvent_00n990e">
-        <dc:Bounds x="785" y="-175" width="36" height="36" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0j3wd2o_di" bpmnElement="ScriptTask_0j3wd2o">
-        <dc:Bounds x="1592" y="165" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_01ak5x3_di" bpmnElement="SequenceFlow_01ak5x3">
-        <di:waypoint x="1692" y="205" />
-        <di:waypoint x="1813" y="205" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0kecvrc_di" bpmnElement="ScriptTask_0kecvrc">
-        <dc:Bounds x="1297" y="391" width="100" height="80" />
+        <dc:Bounds x="1250" y="311" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1mlytov_di" bpmnElement="ScriptTask_1mlytov">
-        <dc:Bounds x="1781" y="533" width="100" height="80" />
+        <dc:Bounds x="1680" y="453" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ExclusiveGateway_1y1wzs9_di" bpmnElement="ExclusiveGateway_1y1wzs9" isMarkerVisible="true">
-        <dc:Bounds x="1461" y="406" width="50" height="50" />
+        <dc:Bounds x="1461" y="326" width="50" height="50" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1ap8kar_di" bpmnElement="SequenceFlow_1ap8kar">
-        <di:waypoint x="1486" y="406" />
-        <di:waypoint x="1486" y="315" />
-        <di:waypoint x="1831" y="315" />
-        <di:waypoint x="1831" y="223" />
+        <di:waypoint x="1486" y="326" />
+        <di:waypoint x="1486" y="235" />
+        <di:waypoint x="1831" y="235" />
+        <di:waypoint x="1831" y="143" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0lt2cdo_di" bpmnElement="SequenceFlow_0lt2cdo">
-        <di:waypoint x="1397" y="431" />
-        <di:waypoint x="1461" y="431" />
+        <di:waypoint x="1350" y="351" />
+        <di:waypoint x="1461" y="351" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0m2mr0o_di" bpmnElement="SequenceFlow_0m2mr0o">
-        <di:waypoint x="1511" y="431" />
-        <di:waypoint x="1592" y="431" />
+        <di:waypoint x="1511" y="351" />
+        <di:waypoint x="1592" y="351" />
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0ojz4lj_di" bpmnElement="ScriptTask_0ojz4lj">
-        <dc:Bounds x="1592" y="533" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1r9n9ef_di" bpmnElement="SequenceFlow_1r9n9ef">
-        <di:waypoint x="1781" y="573" />
-        <di:waypoint x="1692" y="573" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_00gq7h2_di" bpmnElement="SequenceFlow_00gq7h2">
-        <di:waypoint x="1592" y="573" />
-        <di:waypoint x="1486" y="573" />
-        <di:waypoint x="1486" y="456" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0ojueqq_di" bpmnElement="SequenceFlow_0ojueqq">
-        <di:waypoint x="702" y="-157" />
-        <di:waypoint x="785" y="-157" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ExclusiveGateway_1mdr1l2_di" bpmnElement="ExclusiveGateway_1mdr1l2" isMarkerVisible="true">
-        <dc:Bounds x="1322" y="180" width="50" height="50" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_15679e8_di" bpmnElement="SequenceFlow_15679e8">
-        <di:waypoint x="1372" y="205" />
-        <di:waypoint x="1436" y="205" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1614gtr_di" bpmnElement="SequenceFlow_1614gtr">
-        <di:waypoint x="1347" y="230" />
-        <di:waypoint x="1347" y="391" />
+        <di:waypoint x="1680" y="493" />
+        <di:waypoint x="1486" y="493" />
+        <di:waypoint x="1486" y="376" />
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ScriptTask_0uu3j3h_di" bpmnElement="ScriptTask_0uu3j3h">
-        <dc:Bounds x="967" y="165" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="CallActivity_1qs8xd5_di" bpmnElement="CallActivity_1qs8xd5">
-        <dc:Bounds x="1136" y="165" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1e5ysya_di" bpmnElement="ScriptTask_1e5ysya">
-        <dc:Bounds x="1592" y="391" width="100" height="80" />
+        <dc:Bounds x="1592" y="311" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_016vi3s_di" bpmnElement="SequenceFlow_016vi3s">
-        <di:waypoint x="1692" y="431" />
-        <di:waypoint x="1781" y="431" />
+        <di:waypoint x="1692" y="351" />
+        <di:waypoint x="1781" y="351" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_1rfnoe2_di" bpmnElement="CallActivity_1rfnoe2">
-        <dc:Bounds x="1781" y="391" width="100" height="80" />
+        <dc:Bounds x="1781" y="311" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0a5f5y6_di" bpmnElement="SequenceFlow_0a5f5y6">
-        <di:waypoint x="1881" y="431" />
-        <di:waypoint x="1968" y="431" />
-        <di:waypoint x="1968" y="573" />
-        <di:waypoint x="1881" y="573" />
+        <di:waypoint x="1881" y="351" />
+        <di:waypoint x="1968" y="351" />
+        <di:waypoint x="1968" y="493" />
+        <di:waypoint x="1780" y="493" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1utpplq_di" bpmnElement="SequenceFlow_1utpplq">
-        <di:waypoint x="694" y="205" />
-        <di:waypoint x="796" y="205" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1jnsyix_di" bpmnElement="SequenceFlow_1jnsyix">
-        <di:waypoint x="1067" y="205" />
-        <di:waypoint x="1136" y="205" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_041f5ne_di" bpmnElement="SequenceFlow_041f5ne">
-        <di:waypoint x="1236" y="205" />
-        <di:waypoint x="1322" y="205" />
+        <di:waypoint x="560" y="125" />
+        <di:waypoint x="620" y="125" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ExclusiveGateway_1skfk7w_di" bpmnElement="ExclusiveGateway_1skfk7w" isMarkerVisible="true">
-        <dc:Bounds x="796" y="180" width="50" height="50" />
+        <dc:Bounds x="1095" y="100" width="50" height="50" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0wy6oag_di" bpmnElement="SequenceFlow_0wy6oag">
-        <di:waypoint x="846" y="205" />
-        <di:waypoint x="967" y="205" />
+        <di:waypoint x="1120" y="150" />
+        <di:waypoint x="1120" y="351" />
+        <di:waypoint x="1250" y="351" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0hnsycl_di" bpmnElement="SequenceFlow_0hnsycl">
-        <di:waypoint x="821" y="180" />
-        <di:waypoint x="821" y="90" />
-        <di:waypoint x="1831" y="90" />
-        <di:waypoint x="1831" y="187" />
+        <di:waypoint x="1145" y="125" />
+        <di:waypoint x="1813" y="125" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_1umbyel_di" bpmnElement="ScriptTask_1umbyel">
+        <dc:Bounds x="620" y="85" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0piifl1_di" bpmnElement="SequenceFlow_0piifl1">
+        <di:waypoint x="720" y="125" />
+        <di:waypoint x="780" y="125" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="CallActivity_0ly8xiw_di" bpmnElement="CallActivity_0ly8xiw">
+        <dc:Bounds x="780" y="85" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_086yszq_di" bpmnElement="SequenceFlow_086yszq">
+        <di:waypoint x="880" y="125" />
+        <di:waypoint x="940" y="125" />
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0d774n5_di" bpmnElement="SequenceFlow_0d774n5">
+        <di:waypoint x="1040" y="125" />
+        <di:waypoint x="1095" y="125" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_1895p18_di" bpmnElement="Task_1k2ypj0">
+        <dc:Bounds x="940" y="85" width="100" height="80" />
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>