diff options
4 files changed, 159 insertions, 92 deletions
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy index 9221067cce..dd168519e5 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy @@ -297,7 +297,7 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor { List<String> linkStrList = jsonUtil.StringArrayToList(linkArrayStr) for (String linkStr : linkStrList) { - String linkId = jsonUtil.getJsonValue(linkStr, "id") + String linkId = jsonUtil.getJsonValue(linkStr, "name") if (isBlank(linkId)) { linkId = "tn-nssmf-" + UUID.randomUUID().toString() } diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyTnNssi.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyTnNssi.groovy index 9440b42124..25cb2f57f6 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyTnNssi.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoModifyTnNssi.groovy @@ -24,7 +24,11 @@ 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.* +import org.onap.aai.domain.yang.AllottedResource +import org.onap.aai.domain.yang.AllottedResources +import org.onap.aai.domain.yang.NetworkPolicy +import org.onap.aai.domain.yang.ServiceInstance +import org.onap.aai.domain.yang.SliceProfile import org.onap.aaiclient.client.aai.AAIResourcesClient import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory @@ -38,7 +42,9 @@ import org.onap.so.db.request.beans.ResourceOperationStatus import org.slf4j.Logger import org.slf4j.LoggerFactory -import static org.apache.commons.lang3.StringUtils.* +import static org.apache.commons.lang3.StringUtils.isBlank +import static org.apache.commons.lang3.StringUtils.isEmpty +import static org.apache.commons.lang3.StringUtils.isNotBlank public class DoModifyTnNssi extends AbstractServiceTaskProcessor { String Prefix = "TNMOD_" @@ -150,26 +156,31 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor { AAIResourceUri ssServiceuri = AAIUriFactory.createResourceUri(Types.SERVICE_INSTANCE.getFragment(serviceInstanceId)) try { - if (resourceClient.exists(ssServiceuri)) { - ServiceInstance ss = resourceClient.get(ServiceInstance.class, ssServiceuri) - - AllottedResources ars = ss.getAllottedResources() - List<AllottedResource> arList = ars.getAllottedResource() - List<String> arIdList = new ArrayList<>() - Map<String, String> policyMap = new HashMap<>() - Map<String, List<String>> logicalLinksMap = new HashMap<>() - for (AllottedResource ar : arList) { - String arId = ar.getId() - arIdList.add(arId) - String policyId = tnNssmfUtils.getPolicyIdFromAr(execution, serviceInstanceId, arId, true) - policyMap.put(arId, policyId) - List<String> logicalLinkList = tnNssmfUtils.getLogicalLinkNamesFromAr(execution, - serviceInstanceId, arId, true) - logicalLinksMap.put(arId, logicalLinkList) + Optional<ServiceInstance> ssOpt = resourceClient.get(ServiceInstance.class, ssServiceuri) + if (ssOpt.isPresent()) { + ServiceInstance ss = ssOpt.get() + AllottedResources ars = tnNssmfUtils.getAllottedResourcesFromAai(execution, serviceInstanceId, true) + if (ars != null) { + List<AllottedResource> arList = ars.getAllottedResource() + List<String> arIdList = new ArrayList<>() + Map<String, String> policyMap = new HashMap<>() + Map<String, List<String>> logicalLinksMap = new HashMap<>() + for (AllottedResource ar : arList) { + String arId = ar.getId() + arIdList.add(arId) + String policyId = tnNssmfUtils.getPolicyIdFromAr(execution, serviceInstanceId, arId, true) + policyMap.put(arId, policyId) + List<String> logicalLinkList = tnNssmfUtils.getLogicalLinkNamesFromAr(execution, + serviceInstanceId, arId, true) + logicalLinksMap.put(arId, logicalLinkList) + } + execution.setVariable("arIdList", arIdList) + execution.setVariable("arPolicyMap", policyMap) + execution.setVariable("arLogicalLinkMap", logicalLinksMap) + } else { + logger.error("ERROR: getExistingServiceInstance: getAllottedResources() returned null. ss=" + ss + .toString()) } - execution.setVariable("arIdList", arIdList) - execution.setVariable("arPolicyMap", policyMap) - execution.setVariable("arLogicalLinkMap", logicalLinksMap) } else { exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai to " + "associate allotted resource for service :" + serviceInstanceId) @@ -177,7 +188,7 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor { } catch (BpmnError e) { throw e; } catch (Exception ex) { - String msg = "Exception in getServiceInstance. " + ex.getMessage() + String msg = "Exception in getExistingServiceInstance. " + ex.getMessage() logger.debug(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) } @@ -195,6 +206,7 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor { //ss.setServiceInstanceId(ssInstanceId) String serviceStatus = "modified" ss.setOrchestrationStatus(serviceStatus) + ss.setEnvironmentContext("tn") AAIResourcesClient client = getAAIClient() AAIResourceUri uri = AAIUriFactory.createResourceUri( AAIFluentTypeBuilder.business() @@ -279,14 +291,15 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor { void updateLogicalLinksInNetwork(DelegateExecution execution, String networkJsonStr) { try { - String arId = getValidArId(jsonUtil.getJsonValue(networkJsonStr, "id")) + String arId = getValidArId(execution, jsonUtil.getJsonValue(networkJsonStr, "id")) String linkArrayStr = jsonUtil.getJsonValue(networkJsonStr, "connectionLinks") updateLogicalLinksInAr(execution, arId, linkArrayStr) } catch (BpmnError e) { throw e } catch (Exception ex) { - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, - "Exception in updateLogicalLinksInNetwork" + ex.getMessage()) + String msg = String.format("ERROR: updateLogicalLinksInNetwork: exception: %s", ex.getMessage()) + logger.error(msg) + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg); } } @@ -351,7 +364,7 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor { try { int maxBw = getMaxBw(execution) - String arId = getValidArId(jsonUtil.getJsonValue(networkJsonStr, "id")) + String arId = getValidArId(execution, jsonUtil.getJsonValue(networkJsonStr, "id")) Map<String, String> policyMap = execution.getVariable("arPolicyMap") String policyId = policyMap.get(arId) if (isBlank(policyId)) { @@ -365,8 +378,9 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor { } catch (BpmnError e) { throw e } catch (Exception ex) { - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, - "Exception in updateNetworkPolicy" + ex.getMessage()) + String msg = String.format("ERROR: updateNetworkPolicy: exception: %s", ex.getMessage()) + logger.error(msg) + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg); } } @@ -428,7 +442,7 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor { try { String serviceInstanceId = execution.getVariable("sliceServiceInstanceId") - String sdncRequest = tnNssmfUtils.buildSDNCRequest(execution, serviceInstanceId, "modify") + String sdncRequest = tnNssmfUtils.buildSDNCRequest(execution, serviceInstanceId, "update") execution.setVariable("TNNSSMF_SDNCRequest", sdncRequest) logger.debug("Outgoing SDNCRequest is: \n" + sdncRequest) @@ -483,6 +497,7 @@ public class DoModifyTnNssi extends AbstractServiceTaskProcessor { ResourceOperationStatus roStatus = tnNssmfUtils.buildRoStatus(modelUuid, ssInstanceId, jobId, nsiId, operType, status, progress, statusDescription) + logger.debug("prepareUpdateJobStatus: roStatus={}", roStatus) requestDBUtil.prepareUpdateResourceOperationStatus(execution, roStatus) } diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy index 4624cdafe9..fc21ed4a5e 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy @@ -22,17 +22,19 @@ package org.onap.so.bpmn.infrastructure.scripts import org.camunda.bpm.engine.delegate.BpmnError import org.camunda.bpm.engine.delegate.DelegateExecution +import org.onap.aai.domain.yang.AllottedResources import org.onap.aai.domain.yang.LogicalLink import org.onap.aai.domain.yang.NetworkPolicy import org.onap.aai.domain.yang.Relationship import org.onap.aai.domain.yang.ServiceInstance import org.onap.aaiclient.client.aai.AAIResourcesClient +import org.onap.aaiclient.client.aai.AAIVersion import org.onap.aaiclient.client.aai.entities.AAIResultWrapper import org.onap.aaiclient.client.aai.entities.Relationships +import org.onap.aaiclient.client.aai.entities.uri.AAIPluralResourceUri import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder -import org.onap.aaiclient.client.generated.fluentbuilders.Activities import org.onap.so.bpmn.common.scripts.ExceptionUtil import org.onap.so.bpmn.common.scripts.MsoUtils import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils @@ -47,7 +49,7 @@ import org.slf4j.LoggerFactory import static org.apache.commons.lang3.StringUtils.isBlank class TnNssmfUtils { - static final String AAI_VERSION = "v23" + static final String AAI_VERSION = AAIVersion.LATEST private static final Logger logger = LoggerFactory.getLogger(TnNssmfUtils.class); @@ -91,6 +93,9 @@ class TnNssmfUtils { case "deactivate": reqAction = "DeactivateTransportSliceInstance" break + case "update": + reqAction = "ModifyTransportSliceInstance" + break default: reqAction = svcAction } @@ -433,7 +438,7 @@ class TnNssmfUtils { return null } - return si.modelVersionId() + return si.getModelVersionId() } AAIResourceUri buildNetworkPolicyUri(String networkPolicyId) { @@ -456,6 +461,52 @@ class TnNssmfUtils { return allottedResourceUri } + AAIPluralResourceUri buildAllottedResourcesUri(DelegateExecution execution, String serviceInstanceId) { + + AAIPluralResourceUri arsUri = + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business() + .customer(execution.getVariable("globalSubscriberId")) + .serviceSubscription(execution.getVariable("subscriptionServiceType")) + .serviceInstance(serviceInstanceId) + .allottedResources()) + + return arsUri + } + + AllottedResources getAllottedResourcesFromAai(DelegateExecution execution, String serviceInstanceId, boolean exceptionOnErr) { + AllottedResources res + try { + AAIResourcesClient client = new AAIResourcesClient() + + AAIPluralResourceUri arsUri = buildAllottedResourcesUri(execution, serviceInstanceId) + + //AAIResultWrapper wrapperAllotted = client.get(arsUri, NotFoundException.class) + //Optional<AllottedResources> allAllotted = wrapperAllotted.asBean(AllottedResources.class) + //AllottedResources allottedResources = allAllotted.get() + + Optional<AllottedResources> arsOpt = client.get(AllottedResources.class, arsUri) + if (arsOpt.isPresent()) { + res = arsOpt.get() + return res + } else { + String msg = String.format("ERROR: getAllottedResourcesFromAai: ars not found. nssiId=%s", serviceInstanceId) + logger.error(msg) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg) + } + } catch (BpmnError e) { + if (exceptionOnErr) { + throw e; + } + } catch (Exception ex) { + if (exceptionOnErr) { + String msg = String.format("ERROR: getAllottedResourcesFromAai: %s", ex.getMessage()) + logger.error(msg) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg) + } + } + + return res + } String getPolicyIdFromAr(DelegateExecution execution, String serviceInstanceId, String arId, boolean exceptionOnErr) { @@ -464,15 +515,15 @@ class TnNssmfUtils { AAIResourcesClient client = new AAIResourcesClient() AAIResourceUri arUri = buildAllottedResourceUri(execution, serviceInstanceId, arId) - List<AAIResourceUri> logicalLinkUriList = getRelationshipUriListInAai(execution, arUri, + List<AAIResourceUri> policyUriList = getRelationshipUriListInAai(execution, arUri, AAIFluentTypeBuilder.Types.NETWORK_POLICY, exceptionOnErr) - for (AAIResourceUri logicalLinkUri : logicalLinkUriList) { - Optional<NetworkPolicy> policyOpt = client.get(NetworkPolicy.class, logicalLinkUri) + for (AAIResourceUri policyUri : policyUriList) { + Optional<NetworkPolicy> policyOpt = client.get(NetworkPolicy.class, policyUri) if (policyOpt.isPresent()) { NetworkPolicy policy = policyOpt.get() return policy.getNetworkPolicyId() } else { - String msg = String.format("ERROR: getLogicalLinkNamesFromAr: logicalLinkUri=%s", logicalLinkUri) + String msg = String.format("ERROR: getPolicyIdFromAr: arUri=%s", policyUri) logger.error(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg) } @@ -483,7 +534,7 @@ class TnNssmfUtils { } } catch (Exception ex) { if (exceptionOnErr) { - String msg = String.format("ERROR: getLogicalLinkNamesFromAr: %s", ex.getMessage()) + String msg = String.format("ERROR: getPolicyIdFromAr: %s", ex.getMessage()) logger.error(msg) exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg) } @@ -494,7 +545,8 @@ class TnNssmfUtils { List<AAIResourceUri> getRelationshipUriListInAai(DelegateExecution execution, - AAIResourceUri uri, Activities.Info info, + AAIResourceUri uri, + Object info, boolean exceptionOnErr) { AAIResourcesClient client = new AAIResourcesClient() AAIResultWrapper wrapper = client.get(uri); diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyTransportNSSI.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyTransportNSSI.bpmn index dcfd31beac..06bcb0820f 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyTransportNSSI.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoModifyTransportNSSI.bpmn @@ -29,7 +29,7 @@ ex.processJavaException(execution)</bpmn:script> <bpmn:incoming>SequenceFlow_0kixzdj</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1qv8qw1</bpmn:outgoing> <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* -def runScript = new DoActivateTnNssi() +def runScript = new DoModifyTnNssi() runScript.prepareUpdateJobStatus(execution,"FINISHED","100","Modified TN NSSI successfully")</bpmn:script> </bpmn:scriptTask> <bpmn:sequenceFlow id="SequenceFlow_03s744c" sourceRef="StartEvent_1nbljfd" targetRef="ScriptTask_1tc44ge" /> @@ -73,8 +73,8 @@ runScript.preprocessSdncModifyTnNssiRequest(execution)</bpmn:script> <bpmn:extensionElements> <camunda:in source="TNNSSMF_SDNCRequest" target="sdncAdapterWorkflowRequest" /> <camunda:in source="isDebugLogEnabled" target="isDebugLogEnabled" /> - <camunda:in source="mso-request-id" target="mso-request-id" /> - <camunda:in source="mso-service-instance-id" target="mso-service-instance-id" /> + <camunda:in source="msoRequestId" target="mso-request-id" /> + <camunda:in source="sliceServiceInstanceId" target="mso-service-instance-id" /> <camunda:out source="WorkflowException" target="WorkflowException" /> <camunda:out source="sdncAdapterResponse" target="TNNSSMF_SDNCAdapterResponse" /> <camunda:out source="SDNCA_SuccessIndicator" target="SDNCA_SuccessIndicator" /> @@ -132,6 +132,20 @@ runScript.validateSDNCResponse(execution, response, "modify")</bpmn:script> <bpmn:error id="Error_0p2naox" name="MSOWorkflowException" errorCode="MSOWorkflowException" /> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoModifyTransportNSSI"> + <bpmndi:BPMNEdge id="Flow_0b3rxne_di" bpmnElement="Flow_0b3rxne"> + <di:waypoint x="690" y="146" /> + <di:waypoint x="690" y="360" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="698" y="203" width="15" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="Flow_0cm9i4m_di" bpmnElement="Flow_0cm9i4m"> + <di:waypoint x="715" y="121" /> + <di:waypoint x="789" y="121" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="743" y="103" width="19" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_1akxvak_di" bpmnElement="Flow_1akxvak"> <di:waypoint x="1230" y="400" /> <di:waypoint x="1372" y="400" /> @@ -171,62 +185,12 @@ runScript.validateSDNCResponse(execution, response, "modify")</bpmn:script> <di:waypoint x="208" y="121" /> <di:waypoint x="290" y="121" /> </bpmndi:BPMNEdge> - <bpmndi:BPMNEdge id="Flow_0cm9i4m_di" bpmnElement="Flow_0cm9i4m"> - <di:waypoint x="715" y="121" /> - <di:waypoint x="789" y="121" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="743" y="103" width="19" height="14" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNEdge> - <bpmndi:BPMNEdge id="Flow_0b3rxne_di" bpmnElement="Flow_0b3rxne"> - <di:waypoint x="690" y="146" /> - <di:waypoint x="690" y="360" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="698" y="203" width="15" height="14" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNEdge> - <bpmndi:BPMNShape id="Activity_1vtz33q_di" bpmnElement="Activity_1vtz33q"> - <dc:Bounds x="1229" y="74" width="121" height="94" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_14ab476_di" bpmnElement="Activity_14ab476"> - <dc:Bounds x="989" y="74" width="121" height="94" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_0h1vr2l_di" bpmnElement="Activity_0h1vr2l"> - <dc:Bounds x="789" y="74" width="121" height="94" /> - </bpmndi:BPMNShape> <bpmndi:BPMNShape id="StartEvent_1nbljfd_di" bpmnElement="StartEvent_1nbljfd"> <dc:Bounds x="172" y="103" width="36" height="36" /> <bpmndi:BPMNLabel> <dc:Bounds x="155" y="146" width="86" height="40" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="ScriptTask_1tc44ge_di" bpmnElement="ScriptTask_1tc44ge"> - <dc:Bounds x="290" y="81" width="100" height="80" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5"> - <dc:Bounds x="479" y="74" width="121" height="94" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Gateway_1o68a9z_di" bpmnElement="Gateway_1o68a9z" isMarkerVisible="true"> - <dc:Bounds x="665" y="96" width="50" height="50" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="653" y="73" width="75" height="14" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="ScriptTask_19uxoi8_di" bpmnElement="ScriptTask_19uxoi8"> - <dc:Bounds x="640" y="360" width="100" height="80" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9"> - <dc:Bounds x="860" y="360" width="100" height="80" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_0ziz3ti_di" bpmnElement="Activity_0ziz3ti"> - <dc:Bounds x="1130" y="360" width="100" height="80" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="EndEvent_05h01gx_di" bpmnElement="EndEvent_05h01gx"> - <dc:Bounds x="1372" y="382" width="36" height="36" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="1380" y="425" width="20" height="14" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNShape> <bpmndi:BPMNShape id="SubProcess_1yv9i68_di" bpmnElement="SubProcess_1yv9i68" isExpanded="true"> <dc:Bounds x="735" y="1080" width="781" height="196" /> </bpmndi:BPMNShape> @@ -247,6 +211,42 @@ runScript.validateSDNCResponse(execution, response, "modify")</bpmn:script> <bpmndi:BPMNShape id="ScriptTask_1swzdpw_di" bpmnElement="ScriptTask_1swzdpw"> <dc:Bounds x="1029" y="1144" width="100" height="80" /> </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="EndEvent_05h01gx_di" bpmnElement="EndEvent_05h01gx"> + <dc:Bounds x="1372" y="382" width="36" height="36" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="1380" y="425" width="20" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9"> + <dc:Bounds x="860" y="360" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ScriptTask_19uxoi8_di" bpmnElement="ScriptTask_19uxoi8"> + <dc:Bounds x="640" y="360" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5"> + <dc:Bounds x="479" y="74" width="121" height="94" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ScriptTask_1tc44ge_di" bpmnElement="ScriptTask_1tc44ge"> + <dc:Bounds x="290" y="81" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_0h1vr2l_di" bpmnElement="Activity_0h1vr2l"> + <dc:Bounds x="789" y="74" width="121" height="94" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_14ab476_di" bpmnElement="Activity_14ab476"> + <dc:Bounds x="989" y="74" width="121" height="94" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_1vtz33q_di" bpmnElement="Activity_1vtz33q"> + <dc:Bounds x="1229" y="74" width="121" height="94" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_0ziz3ti_di" bpmnElement="Activity_0ziz3ti"> + <dc:Bounds x="1130" y="360" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Gateway_1o68a9z_di" bpmnElement="Gateway_1o68a9z" isMarkerVisible="true"> + <dc:Bounds x="665" y="96" width="50" height="50" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="653" y="73" width="75" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </bpmn:definitions> |