summaryrefslogtreecommitdiffstats
path: root/bpmn
diff options
context:
space:
mode:
Diffstat (limited to 'bpmn')
-rw-r--r--bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/OofHoming.groovy120
-rw-r--r--bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/OofUtils.groovy6
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilder.java9
-rw-r--r--bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/OofHomingTest.java104
-rw-r--r--bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallback2AR1Vnf6
-rw-r--r--bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallback2AR1Vnf2Net5
-rw-r--r--bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallbackInfraVnf5
-rw-r--r--bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/CloudFlavor.java55
-rw-r--r--bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/HomingSolution.java12
-rw-r--r--bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java2
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy2
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteSDNCNetworkResource.groovy222
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModule.groovy16
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteE2EServiceInstance.groovy460
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteResourcesV1.groovy238
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/properties/BPMNProperties.java61
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/properties/ResourceSequence.java30
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/resources/process/DeleteCustomE2EServiceInstance.bpmn6
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/resources/process/DeleteSDNCNetworkResource.bpmn156
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoDeleteE2EServiceInstance.bpmn380
-rw-r--r--bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoDeleteResourcesV1.bpmn304
21 files changed, 2066 insertions, 133 deletions
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/OofHoming.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/OofHoming.groovy
index 5e7ed982a6..f0f239b50f 100644
--- a/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/OofHoming.groovy
+++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/OofHoming.groovy
@@ -20,11 +20,12 @@
package org.openecomp.mso.bpmn.common.scripts
import org.camunda.bpm.engine.delegate.BpmnError
-import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.camunda.bpm.engine.delegate.DelegateExecution
import org.openecomp.mso.bpmn.common.scripts.AaiUtil
import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils
+import org.openecomp.mso.bpmn.core.domain.CloudFlavor
import org.openecomp.mso.bpmn.core.domain.InventoryType
import org.openecomp.mso.bpmn.core.domain.Resource
import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition
@@ -199,54 +200,87 @@ class OofHoming extends AbstractServiceTaskProcessor {
List<Resource> resourceList = decomposition.getServiceResources()
JSONArray arr = new JSONArray(placements)
for (int i = 0; i < arr.length(); i++) {
- JSONObject placement = arr.getJSONObject(i)
- utils.log("DEBUG", "****** JSONObject is: " + placement + " *****", "true")
- String jsonServiceResourceId = placement.getString("serviceResourceId")
- for (Resource resource : resourceList) {
- String serviceResourceId = resource.getResourceId()
- if (serviceResourceId.equalsIgnoreCase(jsonServiceResourceId)) {
- JSONObject solution = placement.getJSONObject("solution")
- String solutionType = solution.getString("identifierType")
- String inventoryType = ""
- if (solutionType.equalsIgnoreCase("serviceInstanceId")) {
- inventoryType = "service"
- } else {
- inventoryType = "cloud"
+ JSONArray arrSol = arr.getJSONArray(i)
+ for (int j = 0; j < arrSol.length(); j++) {
+ JSONObject placement = arrSol.getJSONObject(j)
+ utils.log("DEBUG", "****** JSONObject is: " + placement + " *****", "true")
+ String jsonServiceResourceId = placement.getString("serviceResourceId")
+ for (Resource resource : resourceList) {
+ String serviceResourceId = resource.getResourceId()
+ if (serviceResourceId.equalsIgnoreCase(jsonServiceResourceId)) {
+ JSONObject solution = placement.getJSONObject("solution")
+ String solutionType = solution.getString("identifierType")
+ String inventoryType = ""
+ if (solutionType.equalsIgnoreCase("serviceInstanceId")) {
+ inventoryType = "service"
+ } else {
+ inventoryType = "cloud"
+ }
+ resource.getHomingSolution().setInventoryType(InventoryType.valueOf(inventoryType))
- }
- resource.getHomingSolution().setInventoryType(InventoryType.valueOf(inventoryType))
+ // TODO Deal with Placement Solutions & Assignment Info here
+ JSONArray assignmentArr = placement.getJSONArray("assignmentInfo")
+ Integer arrayIndex = 0
+ Integer flavorsIndex = null
+ Boolean foundFlavors = false
+ String flavors = null
+ Map<String, String> flavorsMap = null
+ ArrayList<CloudFlavor> flavorsArrayList = new ArrayList<CloudFlavor>()
+ assignmentArr.each { element ->
+ JSONObject jsonObject = new JSONObject(element.toString())
+ if (jsonUtil.getJsonRawValue(jsonObject.toString(), "key") == "flavors") {
+ flavors = jsonUtil.getJsonRawValue(jsonObject.toString(), "value")
+ foundFlavors = true
+ flavorsIndex = arrayIndex
+ } else {
+ arrayIndex += 1
+ }
+ }
+ if (foundFlavors) {
+ assignmentArr.remove(flavorsIndex)
+ flavorsMap = jsonUtil.jsonStringToMap(execution, flavors.toString())
+ flavorsMap.each { label, flavor ->
+ CloudFlavor cloudFlavor = new CloudFlavor(label, flavor)
+ flavorsArrayList.add(cloudFlavor)
+ }
+ }
+ Map<String, String> assignmentMap = jsonUtil.entryArrayToMap(execution, assignmentArr.toString(), "key", "value")
+ String cloudOwner = assignmentMap.get("cloudOwner")
+ String cloudRegionId = assignmentMap.get("cloudRegionId")
+ resource.getHomingSolution().setCloudOwner(cloudOwner)
+ resource.getHomingSolution().setCloudRegionId(cloudRegionId)
+ if (flavorsArrayList != null && flavorsArrayList.size != 0) {
+ resource.getHomingSolution().setFlavors(flavorsArrayList)
+ execution.setVariable(cloudRegionId + "_flavorList", flavorsArrayList)
+ }
- // TODO Deal with Placement Solutions & Assignment Info here
- JSONArray assignmentArr = placement.getJSONArray("assignmentInfo")
- Map<String, String> assignmentMap = jsonUtil.entryArrayToMap(execution, assignmentArr.toString(), "key", "value")
- resource.getHomingSolution().setCloudOwner(assignmentMap.get("cloudOwner"))
- resource.getHomingSolution().setCloudRegionId(assignmentMap.get("cloudRegionId"))
- if (inventoryType.equalsIgnoreCase("service")) {
- resource.getHomingSolution().setRehome(assignmentMap.get("isRehome").toBoolean())
- VnfResource vnf = new VnfResource()
- vnf.setVnfHostname(assignmentMap.get("vnfHostName"))
- resource.getHomingSolution().setVnf(vnf)
- resource.getHomingSolution().setServiceInstanceId(solution.getJSONArray("identifiers")[0].toString())
+ if (inventoryType.equalsIgnoreCase("service")) {
+ resource.getHomingSolution().setRehome(assignmentMap.get("isRehome").toBoolean())
+ VnfResource vnf = new VnfResource()
+ vnf.setVnfHostname(assignmentMap.get("vnfHostName"))
+ resource.getHomingSolution().setVnf(vnf)
+ resource.getHomingSolution().setServiceInstanceId(solution.getJSONArray("identifiers")[0].toString())
+ }
}
}
}
- }
- if (JsonUtils.jsonElementExist(response, "solutions.licenseSolutions")) {
- String licenseSolutions = jsonUtil.getJsonValue(response, "solutions.licenseSolutions")
- JSONArray licenseArr = new JSONArray(licenseSolutions)
- for (int l = 0; l < licenseArr.length(); l++) {
- JSONObject license = licenseArr.getJSONObject(l)
- String jsonServiceResourceId = license.getString("serviceResourceId")
- for (Resource resource : resourceList) {
- String serviceResourceId = resource.getResourceId()
- if (serviceResourceId.equalsIgnoreCase(jsonServiceResourceId)) {
- String jsonEntitlementPoolList = jsonUtil.getJsonValue(license.toString(), "entitlementPoolUUID")
- List<String> entitlementPoolList = jsonUtil.StringArrayToList(execution, jsonEntitlementPoolList)
- resource.getHomingSolution().getLicense().setEntitlementPoolList(entitlementPoolList)
+ if (JsonUtils.jsonElementExist(response, "solutions.licenseSolutions")) {
+ String licenseSolutions = jsonUtil.getJsonValue(response, "solutions.licenseSolutions")
+ JSONArray licenseArr = new JSONArray(licenseSolutions)
+ for (int l = 0; l < licenseArr.length(); l++) {
+ JSONObject license = licenseArr.getJSONObject(l)
+ String jsonServiceResourceId = license.getString("serviceResourceId")
+ for (Resource resource : resourceList) {
+ String serviceResourceId = resource.getResourceId()
+ if (serviceResourceId.equalsIgnoreCase(jsonServiceResourceId)) {
+ String jsonEntitlementPoolList = jsonUtil.getJsonValue(license.toString(), "entitlementPoolUUID")
+ List<String> entitlementPoolList = jsonUtil.StringArrayToList(execution, jsonEntitlementPoolList)
+ resource.getHomingSolution().getLicense().setEntitlementPoolList(entitlementPoolList)
- String jsonLicenseKeyGroupList = jsonUtil.getJsonValue(license.toString(), "licenseKeyGroupUUID")
- List<String> licenseKeyGroupList = jsonUtil.StringArrayToList(execution, jsonLicenseKeyGroupList)
- resource.getHomingSolution().getLicense().setLicenseKeyGroupList(licenseKeyGroupList)
+ String jsonLicenseKeyGroupList = jsonUtil.getJsonValue(license.toString(), "licenseKeyGroupUUID")
+ List<String> licenseKeyGroupList = jsonUtil.StringArrayToList(execution, jsonLicenseKeyGroupList)
+ resource.getHomingSolution().getLicense().setLicenseKeyGroupList(licenseKeyGroupList)
+ }
}
}
}
diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/OofUtils.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/OofUtils.groovy
index fc7c62baa7..4b2b0e20ac 100644
--- a/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/OofUtils.groovy
+++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/OofUtils.groovy
@@ -311,7 +311,7 @@ class OofUtils {
sb.append(",\n" +
" \"existingCandidates\": [\n")
def existingCandidateJson = ""
- existingCandidates.each {
+ existingCandidates.each { existingCandidate ->
type = existingCandidate.get('identifierType')
if (type == 'vimId') {
def cloudOwner = existingCandidate.get('cloudOwner')
@@ -342,7 +342,7 @@ class OofUtils {
sb.append(",\n" +
" \"excludedCandidates\": [\n")
def excludedCandidateJson = ""
- excludedCandidates.each {
+ excludedCandidates.each { excludedCandidate ->
type = excludedCandidate.get('identifierType')
if (type == 'vimId') {
def cloudOwner = excludedCandidate.get('cloudOwner')
@@ -373,7 +373,7 @@ class OofUtils {
sb.append(",\n" +
" \"requiredCandidates\": [\n")
def requiredCandidatesJson = ""
- requiredCandidates.each {
+ requiredCandidates.each { requiredCandidate ->
type = requiredCandidate.get('identifierType')
if (type == 'vimId') {
def cloudOwner = requiredCandidate.get('cloudOwner')
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilder.java b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilder.java
index 74a3252768..9aa17930c0 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilder.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilder.java
@@ -93,6 +93,15 @@ public class ResourceRequestBuilder {
}
Map<String, Object> serviceInput =getJsonObject((String)JsonUtils.getJsonValue(serviceParameters, "requestInputs"), Map.class);
Map<String, Object> resourceInputsFromUuiMap = getJsonObject(resourceInputsFromUui, Map.class);
+
+ if (serviceInput == null) {
+ serviceInput = new HashMap();
+ }
+
+ if (resourceInputsFromUuiMap == null) {
+ resourceInputsFromUuiMap = new HashMap();
+ }
+
try {
Map<String, Object> resourceInputsFromServiceDeclaredLevel = buildResouceRequest(serviceUuid, resourceCustomizationUuid, serviceInput);
resourceInputsFromUuiMap.putAll(resourceInputsFromServiceDeclaredLevel);
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/OofHomingTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/OofHomingTest.java
index 45645be7cd..d7239fe0c1 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/OofHomingTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/OofHomingTest.java
@@ -28,6 +28,7 @@ import org.junit.Ignore;
import org.junit.Test;
import org.openecomp.mso.bpmn.core.WorkflowException;
import org.openecomp.mso.bpmn.core.domain.AllottedResource;
+import org.openecomp.mso.bpmn.core.domain.CloudFlavor;
import org.openecomp.mso.bpmn.core.domain.HomingSolution;
import org.openecomp.mso.bpmn.core.domain.ModelInfo;
import org.openecomp.mso.bpmn.core.domain.NetworkResource;
@@ -123,6 +124,12 @@ public class OofHomingTest extends WorkflowTest {
VnfResource vnf = new VnfResource();
vnf.setResourceId("testResourceIdVNF");
vnf.setResourceInstanceName("testVnfInstanceName");
+ ArrayList<CloudFlavor> flavors = new ArrayList<>();
+ CloudFlavor flavor1 = new CloudFlavor("flavorLabel1xxx", "vimFlavorxxx");
+ CloudFlavor flavor2 = new CloudFlavor("flavorLabel2xxx", "vimFlavorxxx");
+ flavors.add(flavor1);
+ flavors.add(flavor2);
+ vnf.getHomingSolution().setFlavors(flavors);
ModelInfo vnfModel = new ModelInfo();
vnfModel.setModelCustomizationUuid("testModelCustomizationUuidVNF");
vnfModel.setModelInvariantUuid("testModelInvariantIdVNF");
@@ -190,7 +197,7 @@ public class OofHomingTest extends WorkflowTest {
resourceARHoming2.getVnf().getResourceId(),"aic", "testCloudRegionId2",
null, null), resourceARHoming2String);
assertEquals(homingSolutionCloud("cloud","aic", "testCloudRegionId3",
- "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
+ true, "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
"\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
resourceVNFHomingString);
assertEquals(verifyOofRequest(), expectedOofRequest);
@@ -255,7 +262,7 @@ public class OofHomingTest extends WorkflowTest {
null, null), resourceARHoming2String);
assertEquals(homingSolutionCloud("cloud","aic",
"testCloudRegionId3",
- "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
+ true, "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
"\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
resourceVNFHomingString);
assertEquals(homingSolutionService("service", "testServiceInstanceIdNet",
@@ -264,7 +271,7 @@ public class OofHomingTest extends WorkflowTest {
null, null), resourceNetHomingString);
assertEquals(homingSolutionCloud("cloud", "aic",
"testCloudRegionIdNet2",
- "\"f1d563e8-e714-4393-8f99-cc480144a05n\", \"j1d563e8-e714-4393-8f99-cc480144a05n\"",
+ false, "\"f1d563e8-e714-4393-8f99-cc480144a05n\", \"j1d563e8-e714-4393-8f99-cc480144a05n\"",
"\"s1d563e8-e714-4393-8f99-cc480144a05n\", \"b1d563e8-e714-4393-8f99-cc480144a05n\""),
resourceNetHoming2String);
assertEquals(verifyOofRequest(), expectedOofRequest);
@@ -405,7 +412,7 @@ public class OofHomingTest extends WorkflowTest {
null, null), resourceARHoming2String);
assertEquals(homingSolutionCloud("cloud", "aic",
"testCloudRegionId3",
- "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
+ false, "\"91d563e8-e714-4393-8f99-cc480144a05e\", \"21d563e8-e714-4393-8f99-cc480144a05e\"",
"\"31d563e8-e714-4393-8f99-cc480144a05e\", \"71d563e8-e714-4393-8f99-cc480144a05e\""),
resourceVNFHomingString);
assertEquals(verifyOofRequestExistingLicense(), oofRequest);
@@ -625,43 +632,6 @@ public class OofHomingTest extends WorkflowTest {
}
- /*private String homingSolutionService(String resourceModuleName, String serviceInstanceId, String vnfHostname, String cloudOwner,
- String cloudRegionId, String licenseList) {
- String solution = "";
- if (licenseList == null || licenseList == "") {
- solution = "{\n" +
- " \"resourceModuleName\": \"" + resourceModuleName + "\",\n" +
- " \"serviceResourceId\": \"some_resource_id\",\n" +
- " \"solution\": {\n" +
- " \"identifierType\": \"serviceInstanceId\",\n" +
- " \"identifiers\": [\"" + serviceInstanceId + "\"]\n" +
- " }\n" +
- " \"assignmentInfo\": [\n" +
- " { \"key\": \"cloudOwner\", \"value\": \"" + cloudOwner + "\" },\n" +
- " { \"key\": \"vnfHostName\", \"value\": \"" + vnfHostname + "\" },\n" +
- " { \"key\": \"isRehome\", \"value\": \"False\" },\n" +
- " { \"key\": \"cloudRegionId\", \"value\": \"" + cloudRegionId + "\" }\n" +
- " ]\n" +
- " }";
- } else {
- solution = "{\n" +
- " \"resourceModuleName\": \"" + resourceModuleName + "\",\n" +
- " \"serviceResourceId\": \"some_resource_id\",\n" +
- " \"solution\": {\n" +
- " \"identifierType\": \"service_instance_id\",\n" +
- " \"identifiers\": [\"" + serviceInstanceId + "\"]\n" +
- " }\n" +
- " \"assignmentInfo\": [\n" +
- " { \"key\": \"cloudOwner\", \"value\": \"" + cloudOwner + "\" },\n" +
- " { \"key\": \"vnfHostName\", \"value\": \"" + vnfHostname + "\" },\n" +
- " { \"key\": \"isRehome\", \"value\": \"False\" },\n" +
- " { \"key\": \"cloudRegionId\", \"value\": \"" + cloudRegionId + "\" }\n" +
- " ], " +
- " \"licenseSolutions\" : [ {\"licenseKeyGroupUUID\": [" + licenseList + "]} ] " +
- "}";
- }
- return solution;
- }*/
private String homingSolutionService(String type, String serviceInstanceId, String vnfHostname,
String vnfResourceId, String cloudOwner,
String cloudRegionId, String enList,
@@ -687,50 +657,28 @@ public class OofHomingTest extends WorkflowTest {
return solution;
}
- /*private String homingSolutionCloud(String resourceModuleName, String cloudOwner,
- String cloudRegionId, String licenseList) {
- String solution = "";
- if (licenseList == null || licenseList == "") {
- solution = "{\n" +
- " \"resourceModuleName\": \"" + resourceModuleName + "\",\n" +
- " \"serviceResourceId\": \"some_resource_id\",\n" +
- " \"solution\": {\n" +
- " \"identifierType\": \"cloudRegionId\",\n" +
- " \"cloudOwner\": \"" + cloudOwner + "\",\n" +
- " \"identifiers\": [\"" + cloudRegionId + "\"]\n" +
- " }\n" +
- " \"assignmentInfo\": [\n" +
- " { \"key\": \"cloudOwner\", \"value\": \"" + cloudOwner + "\" },\n" +
- " { \"key\": \"cloudRegionId\", \"value\": \"" + cloudRegionId + "\" }\n" +
- " ]\n" +
- "}";
- } else {
- solution = "{\n" +
- " \"resourceModuleName\": \"" + resourceModuleName + "\",\n" +
- " \"serviceResourceId\": \"some_resource_id\",\n" +
- " \"solution\": {\n" +
- " \"identifierType\": \"cloudRegionId\",\n" +
- " \"cloudOwner\": \"" + cloudOwner + "\",\n" +
- " \"identifiers\": [\"" + cloudRegionId + "\"]\n" +
- " }\n" +
- " \"assignmentInfo\": [\n" +
- " { \"key\": \"cloudOwner\", \"value\": \"" + cloudOwner + "\" },\n" +
- " { \"key\": \"cloudRegionId\", \"value\": \"" + cloudRegionId + "\" }\n" +
- " ]," +
- " \"licenseSolutions\" : [ {\"licenseKeyGroupUUID\": [" + licenseList + "]} ] } " +
- "}";
- }
- return solution;
- }*/
private String homingSolutionCloud(String type, String cloudOwner,
- String cloudRegionId, String enList,
+ String cloudRegionId, Boolean flavors, String enList,
String licenseList){
String solution = "";
if(enList == null){
solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
"\", \"license\" : { }, \"rehome\" : false } }";
- }else{
+ } else if (flavors && enList == null){
+ solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
+ cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
+ "\", \"flavors\" : [ { \"flavorLabel\" : \"flavorLabel2xxx\", \"flavor\" : \"vimFlavorxxx\" }, " +
+ "{ \"flavorLabel\" : \"flavorLabel1xxx\", \"flavor\" : \"vimFlavorxxx\" } ], " +
+ "\"license\" : { }, \"rehome\" : false } }";
+ } else if (flavors) {
+ solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
+ cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
+ "\", \"flavors\" : [ { \"flavorLabel\" : \"flavorLabel2xxx\", \"flavor\" : \"vimFlavorxxx\" }, " +
+ "{ \"flavorLabel\" : \"flavorLabel1xxx\", \"flavor\" : \"vimFlavorxxx\" } ], " +
+ "\"license\" : { \"entitlementPoolList\" : [ " + enList + " ], \"licenseKeyGroupList\" : [ " +
+ licenseList + " ] }, \"rehome\" : false } }";
+ } else {
solution = "{ \"homingSolution\" : { \"inventoryType\" : \"" + type + "\", \"cloudOwner\" : \"" +
cloudOwner + "\", \"cloudRegionId\" : \"" + cloudRegionId +
"\", \"license\" : { \"entitlementPoolList\" : [ " + enList + " ], \"licenseKeyGroupList\" : [ " +
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallback2AR1Vnf b/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallback2AR1Vnf
index 3559708728..808723828a 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallback2AR1Vnf
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallback2AR1Vnf
@@ -31,6 +31,7 @@
}
],
"placementSolutions": [
+ [
{
"resourceModuleName": "ALLOTTED_RESOURCE",
"serviceInstanceId": "testSIID1",
@@ -101,9 +102,12 @@
{
"key": "cloudRegionId",
"value": "testCloudRegionId3"
- }
+ },
+ { "key":"flavors",
+ "value":{"flavorLabel1xxx":"vimFlavorxxx", "flavorLabel2xxx":"vimFlavorxxx"}}
]
}
]
+ ]
}
} \ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallback2AR1Vnf2Net b/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallback2AR1Vnf2Net
index 30fa09afd9..8766df8dba 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallback2AR1Vnf2Net
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallback2AR1Vnf2Net
@@ -43,6 +43,7 @@
},
],
"placementSolutions": [
+ [
{
"resourceModuleName": "ALLOTTED_RESOURCE",
"serviceResourceId": "testResourceIdAR",
@@ -108,9 +109,11 @@
},
"assignmentInfo": [
{ "key": "cloudOwner", "value": "aic" },
- { "key": "cloudRegionId", "value": "testCloudRegionId3" }
+ { "key": "cloudRegionId", "value": "testCloudRegionId3" },
+ { "key":"flavors", "value":{ "flavorLabel1xxx":"vimFlavorxxx", "flavorLabel2xxx":"vimFlavorxxx"}}
]
}
]
+ ]
}
} \ No newline at end of file
diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallbackInfraVnf b/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallbackInfraVnf
index b4e748c6e7..8e6f2d46be 100644
--- a/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallbackInfraVnf
+++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/BuildingBlocks/oofCallbackInfraVnf
@@ -5,6 +5,7 @@
"statusMessage": "success",
"solutions": {
"placementSolutions": [
+ [
{
"resourceModuleName": "vGMuxInfra",
"serviceResourceId": "some_resource_id",
@@ -29,9 +30,11 @@
},
"assignmentInfo": [
{ "key": "cloudOwner", "value": "amazon" },
- { "key": "cloudRegionId", "value": "1ac71fb8-ad43-4e16-9459-c3f372b8236d" }
+ { "key": "cloudRegionId", "value": "1ac71fb8-ad43-4e16-9459-c3f372b8236d" },
+ { "key":"flavors", "value":{ "flavorLabel1xxx":"vimFlavorxxx", "flavorLabel2xxx":"vimFlavorxxx"}}
]
}
+ ]
],
"licenseSolutions": [
{
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/CloudFlavor.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/CloudFlavor.java
new file mode 100644
index 0000000000..100d70e1b2
--- /dev/null
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/CloudFlavor.java
@@ -0,0 +1,55 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Intel Corp. Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.openecomp.mso.bpmn.core.domain;
+
+import java.io.Serializable;
+
+/**
+ * Stores Cloud Flavor information and is an attribute
+ * of a <class>HomingSolution</class>
+ *
+ */
+public class CloudFlavor extends JsonWrapper implements Serializable {
+ private String flavorLabel;
+ private String flavor;
+
+ public CloudFlavor (String flavorLabel, String flavor){
+ this.flavorLabel = flavorLabel;
+ this.flavor = flavor;
+ }
+
+ public String getFlavorLabel() {
+ return flavorLabel;
+ }
+
+ public void setFlavorLabel(String flavorLabel) {
+ this.flavorLabel = flavorLabel;
+ }
+
+ public String getFlavor() {
+ return flavor;
+ }
+
+ public void setFlavor(String flavor) {
+ this.flavor = flavor;
+ }
+
+}
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/HomingSolution.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/HomingSolution.java
index 611c8dfff9..f0193bc1c3 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/HomingSolution.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/HomingSolution.java
@@ -45,6 +45,7 @@ public class HomingSolution extends JsonWrapper implements Serializable {
private String aicVersion;
private String tenant;
private VnfResource vnf;
+ private List<CloudFlavor> flavors;
private License license = new License();
@@ -126,6 +127,17 @@ public class HomingSolution extends JsonWrapper implements Serializable {
this.vnf = vnf;
}
+ /**
+ * @return a map<string, string> key is label name, value is any flavor
+ */
+ public List<CloudFlavor> getFlavors() {
+ return flavors;
+ }
+
+ public void setFlavors(List<CloudFlavor> flavors) {
+ this.flavors = flavors;
+ }
+
public License getLicense() {
return license;
}
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java
index 79b9239015..1869b930f0 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java
@@ -931,7 +931,7 @@ public class JsonUtils {
for (int i = 0; i < arr.length(); i++){
JSONObject jo = arr.getJSONObject(i);
String key = jo.getString(keyNode);
- String value =jo.getString(valueNode);
+ String value = jo.getString(valueNode);
map.put(key, value);
}
msoLogger.debug("Outgoing Map is: " + map);
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy
index 1beb31254f..b6b1adc241 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy
@@ -65,7 +65,7 @@ public class CreateSDNCNetworkResource extends AbstractServiceTaskProcessor {
String requestAction = execution.getVariable("requestAction")
utils.log("INFO","The requestAction is: " + requestAction, isDebugEnabled)
String recipeParamsFromRequest = execution.getVariable("recipeParams")
- utils.log("INFO","The recipeParams is: " + recipeParams, isDebugEnabled)
+ utils.log("INFO","The recipeParams is: " + recipeParamsFromRequest, isDebugEnabled)
String resourceInput = execution.getVariable("requestInput")
utils.log("INFO","The resourceInput is: " + resourceInput, isDebugEnabled)
//Get ResourceInput Object
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteSDNCNetworkResource.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteSDNCNetworkResource.groovy
new file mode 100644
index 0000000000..479e091345
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteSDNCNetworkResource.groovy
@@ -0,0 +1,222 @@
+
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
+ * ================================================================================
+ * 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.openecomp.mso.bpmn.infrastructure.scripts
+
+import org.json.JSONArray
+import org.openecomp.mso.bpmn.common.resource.ResourceRequestBuilder
+import org.openecomp.mso.bpmn.core.domain.Resource
+import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition
+import org.openecomp.mso.bpmn.infrastructure.properties.BPMNProperties;
+import org.apache.http.HttpResponse
+import org.json.JSONArray
+import org.openecomp.mso.bpmn.common.recipe.BpmnRestClient
+import org.openecomp.mso.bpmn.common.recipe.ResourceInput;
+
+import static org.apache.commons.lang3.StringUtils.*;
+import groovy.xml.XmlUtil
+import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils;
+import groovy.json.*
+
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.openecomp.mso.rest.APIResponse;
+import org.openecomp.mso.rest.RESTClient
+import org.openecomp.mso.rest.RESTConfig
+
+import java.util.List;
+import java.util.UUID;
+import javax.xml.parsers.DocumentBuilder
+import javax.xml.parsers.DocumentBuilderFactory
+
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.json.JSONObject;
+import org.apache.commons.lang3.*
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.web.util.UriUtils;
+import org.w3c.dom.Document
+import org.w3c.dom.Element
+import org.w3c.dom.Node
+import org.w3c.dom.NodeList
+import org.xml.sax.InputSource
+
+import com.fasterxml.jackson.jaxrs.json.annotation.JSONP.Def;
+
+public class DeleteSDNCNetworkResource extends AbstractServiceTaskProcessor {
+ String Prefix="DDELSDNNS_"
+
+
+ public void preProcessRequest (DelegateExecution execution) {
+ def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+ utils.log("INFO"," ***** preProcessSDNCDelete *****", isDebugEnabled)
+ String msg = ""
+
+ try {
+ serviceInstanceId = execution.getVariable("serviceInstanceId")
+ serviceInstanceName = execution.getVariable("serviceInstanceName")
+ callbackURL = execution.getVariable("sdncCallbackUrl")
+ requestId = execution.getVariable("msoRequestId")
+ serviceId = execution.getVariable("productFamilyId")
+ subscriptionServiceType = execution.getVariable("subscriptionServiceType")
+ globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId
+ String recipeParamsFromRequest = execution.getVariable("recipeParams")
+ String serviceModelInfo = execution.getVariable("serviceModelInfo")
+ modelInvariantUuid = ""
+ modelVersion = ""
+ modelUuid = ""
+ modelName = ""
+
+ if (!isBlank(serviceModelInfo))
+ {
+ modelInvariantUuid = jsonUtil.getJsonValue(serviceModelInfo, "modelInvariantUuid")
+ modelVersion = jsonUtil.getJsonValue(serviceModelInfo, "modelVersion")
+ modelUuid = jsonUtil.getJsonValue(serviceModelInfo, "modelUuid")
+ modelName = jsonUtil.getJsonValue(serviceModelInfo, "modelName")
+
+ if (modelInvariantUuid == null) {
+ modelInvariantUuid = ""
+ }
+ if (modelVersion == null) {
+ modelVersion = ""
+ }
+ if (modelUuid == null) {
+ modelUuid = ""
+ }
+ if (modelName == null) {
+ modelName = ""
+ }
+ }
+ if (serviceInstanceName == null) {
+ serviceInstanceName = ""
+ }
+ if (serviceId == null) {
+ serviceId = ""
+ }
+
+ def siParamsXml = execution.getVariable("siParamsXml")
+ def serviceType = execution.getVariable("serviceType")
+ if (serviceType == null)
+ {
+ serviceType = ""
+ }
+
+ sdncRequestId = UUID.randomUUID().toString()
+
+ String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
+
+ String operationType = "Network"
+ String sdnc_svcAction = "delete"
+
+ if(!StringUtils.isBlank(recipeParamsFromRequest)){
+ //the operationType from worflow(first node) is second priority.
+ operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
+ }
+ if(!StringUtils.isBlank(recipeParamsFromWf)){
+ //the operationType from worflow(first node) is highest priority.
+ operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
+ }
+
+ operationType = "delete" + operationType + "Instance"
+
+ if(StringUtils.containsIgnoreCase(resourceInputObj.getResourceInstanceName(), "overlay")){
+ //This will be resolved in R3.
+ sdnc_svcAction ="deactivate"
+ operationType = "DeActivateDCINetworkInstance"
+ }
+ if(StringUtils.containsIgnoreCase(resourceInputObj.getResourceInstanceName(), "underlay")){
+ //This will be resolved in R3.
+ operationType ="DeleteNetworkInstance"
+ }
+
+ String sdncDelete =
+ """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+ xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+ xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1">
+ <sdncadapter:RequestHeader>
+ <sdncadapter:RequestId>${sdncRequestId}</sdncadapter:RequestId>
+ <sdncadapter:SvcInstanceId>${serviceInstanceId}</sdncadapter:SvcInstanceId>
+ <sdncadapter:SvcAction>${sdnc_svcAction}</sdncadapter:SvcAction>
+ <sdncadapter:SvcOperation>service-topology-operation</sdncadapter:SvcOperation>
+ <sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl>
+ <sdncadapter:MsoAction>${serviceType}</sdncadapter:MsoAction>
+ </sdncadapter:RequestHeader>
+ <sdncadapterworkflow:SDNCRequestData>
+ <request-information>
+ <request-id>${requestId}</request-id>
+ <source>MSO</source>
+ <notification-url/>
+ <order-number/>
+ <order-version/>
+ <request-action>${operationType}</request-action>
+ </request-information>
+ <service-information>
+ <service-id>${serviceId}</service-id>
+ <subscription-service-type>${subscriptionServiceType}</subscription-service-type>
+ <onap-model-information>
+ <model-invariant-uuid>${modelInvariantUuid}</model-invariant-uuid>
+ <model-uuid>${modelUuid}</model-uuid>
+ <model-version>${modelVersion}</model-version>
+ <model-name>${modelName}</model-name>
+ </onap-model-information>
+ <service-instance-id>${serviceInstanceId}</service-instance-id>
+ <subscriber-name/>
+ <global-customer-id>${globalSubscriberId}</global-customer-id>
+ </service-information>
+ <service-request-input>
+ <service-instance-name>${serviceInstanceName}</service-instance-name>
+ ${siParamsXml}
+ </service-request-input>
+ </sdncadapterworkflow:SDNCRequestData>
+ </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
+
+ sdncDelete = utils.formatXml(sdncDelete)
+ //def sdncRequestId2 = UUID.randomUUID().toString()
+ //String sdncDeactivate = sdncDelete.replace(">delete<", ">deactivate<").replace(">${sdncRequestId}<", ">${sdncRequestId2}<")
+ execution.setVariable("sdncDelete", sdncDelete)
+ execution.setVariable("sdncDeactivate", sdncDeactivate)
+ utils.log("INFO","sdncDeactivate:\n" + sdncDeactivate, isDebugEnabled)
+ utils.log("INFO","sdncDelete:\n" + sdncDelete, isDebugEnabled)
+
+ } catch (BpmnError e) {
+ throw e;
+ } catch(Exception ex) {
+ msg = "Exception in preProcessSDNCDelete. " + ex.getMessage()
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Exception Occured in preProcessSDNCDelete.\n" + ex.getMessage())
+ }
+ utils.log("INFO"," *****Exit preProcessSDNCDelete *****", isDebugEnabled)
+ }
+
+
+ public void postProcessSDNCDelete(DelegateExecution execution, String response) {
+
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ utils.log("INFO"," ***** postProcessSDNC " + " *****", isDebugEnabled)
+ String msg = ""
+ utils.log("INFO"," response " + response, isDebugEnabled)
+ utils.log("INFO"," *** Exit postProcessSDNC " + " ***", isDebugEnabled)
+ }
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModule.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModule.groovy
index b9319466d9..95747d5a0b 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModule.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModule.groovy
@@ -18,7 +18,9 @@
* ============LICENSE_END=========================================================
*/
-package org.openecomp.mso.bpmn.infrastructure.scripts;
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import org.openecomp.mso.bpmn.core.domain.CloudFlavor
import java.util.Map
import java.util.Currency.CurrencyNameGetter
@@ -174,6 +176,12 @@ public class DoCreateVfModule extends VfModuleBase {
execution.setVariable("DCVFM_serviceInstanceId", serviceInstanceId)
rollbackData.put("VFMODULE", "serviceInstanceId", serviceInstanceId)
logDebug("serviceInstanceId: " + serviceInstanceId, isDebugLogEnabled)
+ //flavorList
+ ArrayList<CloudFlavor> flavorList = execution.getVariable(cloudSiteId + "_flavorList")
+ if (flavorList != null) {
+ execution.setVariable("DCVFM_flavorList", flavorList)
+ logDebug("flavorList is: " + flavorList, isDebugLogEnabled)
+ }
//source - HARDCODED
def source = "VID"
execution.setVariable("DCVFM_source", source)
@@ -927,6 +935,8 @@ public class DoCreateVfModule extends VfModuleBase {
def serviceId = execution.getVariable("DCVFM_serviceId")
//serviceInstanceId
def serviceInstanceId = execution.getVariable("DCVFM_serviceInstanceId")
+ //flavorList
+ ArrayList<CloudFlavor> flavorList = execution.getVariable("DCVFM_flavorList")
//backoutOnFailure
def backoutOnFailure = execution.getVariable("DCVFM_backoutOnFailure")
//volumeGroupId
@@ -962,6 +972,10 @@ public class DoCreateVfModule extends VfModuleBase {
}
Map<String, String> vnfParamsMap = execution.getVariable("DCVFM_vnfParamsMap")
+ // Add flavorLabel List to vnfParamsMap
+ flavorList.each { cloudFlavor ->
+ vnfParamsMap.put("label_" + cloudFlavor.getFlavorLabel(), cloudFlavor.getFlavor())
+ }
String vfModuleParams = ""
//Get SDNC Response Data for VF Module Topology
String vfModuleSdncGetResponse = execution.getVariable('DCVFM_getSDNCAdapterResponse')
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteE2EServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteE2EServiceInstance.groovy
new file mode 100644
index 0000000000..1c8a5e70fe
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteE2EServiceInstance.groovy
@@ -0,0 +1,460 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
+ * ================================================================================
+ * 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.openecomp.mso.bpmn.infrastructure.scripts
+
+import org.apache.http.HttpResponse
+import org.json.JSONArray
+import org.openecomp.mso.bpmn.common.recipe.BpmnRestClient
+import org.openecomp.mso.bpmn.common.recipe.ResourceInput
+import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition;
+
+import static org.apache.commons.lang3.StringUtils.*;
+import groovy.xml.XmlUtil
+import groovy.json.*
+
+import org.openecomp.mso.bpmn.core.domain.ModelInfo
+import org.openecomp.mso.bpmn.core.domain.Resource
+import org.openecomp.mso.bpmn.core.domain.ServiceInstance
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.openecomp.mso.rest.APIResponse;
+import org.openecomp.mso.rest.RESTClient
+import org.openecomp.mso.rest.RESTConfig
+
+import java.util.List;
+import java.util.UUID;
+import javax.xml.parsers.DocumentBuilder
+import javax.xml.parsers.DocumentBuilderFactory
+
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.camunda.bpm.engine.runtime.Execution
+import org.json.JSONObject;
+import org.apache.commons.lang3.*
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.web.util.UriUtils;
+import org.w3c.dom.Document
+import org.w3c.dom.Element
+import org.w3c.dom.Node
+import org.w3c.dom.NodeList
+import org.xml.sax.InputSource
+
+import com.fasterxml.jackson.jaxrs.json.annotation.JSONP.Def;
+
+/**
+ * This groovy class supports the <class>DoDeleteE2EServiceInstance.bpmn</class> process.
+ *
+ * Inputs:
+ * @param - msoRequestId
+ * @param - globalSubscriberId - O
+ * @param - subscriptionServiceType - O
+ * @param - serviceInstanceId
+ * @param - serviceInstanceName - O
+ * @param - serviceInputParams (should contain aic_zone for serviceTypes TRANSPORT,ATM)
+ * @param - sdncVersion
+ * @param - failNotFound - TODO
+ * @param - serviceInputParams - TODO
+ *
+ * @param - delResourceList
+ * @param - serviceRelationShip
+ *
+ * Outputs:
+ * @param - WorkflowException
+ *
+ * Rollback - Deferred
+ */
+public class DoDeleteE2EServiceInstance extends AbstractServiceTaskProcessor {
+
+ String Prefix="DDEESI_"
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+ JsonUtils jsonUtil = new JsonUtils()
+
+ public void preProcessRequest (DelegateExecution execution) {
+ def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+ utils.log("INFO"," ***** preProcessRequest *****", isDebugEnabled)
+ String msg = ""
+
+ try {
+ String requestId = execution.getVariable("msoRequestId")
+ execution.setVariable("prefix",Prefix)
+
+ //Inputs
+ //requestDetails.subscriberInfo. for AAI GET & PUT & SDNC assignToplology
+ String globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId
+ if (globalSubscriberId == null)
+ {
+ execution.setVariable("globalSubscriberId", "")
+ }
+
+ //requestDetails.requestParameters. for AAI PUT & SDNC assignTopology
+ String serviceType = execution.getVariable("serviceType")
+ if (serviceType == null)
+ {
+ execution.setVariable("serviceType", "")
+ }
+
+ //Generated in parent for AAI PUT
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+ if (isBlank(serviceInstanceId)){
+ msg = "Input serviceInstanceId is null"
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+ }
+
+ String sdncCallbackUrl = execution.getVariable('URN_mso_workflow_sdncadapter_callback')
+ if (isBlank(sdncCallbackUrl)) {
+ msg = "URN_mso_workflow_sdncadapter_callback is null"
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+ }
+ execution.setVariable("sdncCallbackUrl", sdncCallbackUrl)
+ utils.log("INFO","SDNC Callback URL: " + sdncCallbackUrl, isDebugEnabled)
+
+ StringBuilder sbParams = new StringBuilder()
+ Map<String, String> paramsMap = execution.getVariable("serviceInputParams")
+ if (paramsMap != null)
+ {
+ sbParams.append("<service-input-parameters>")
+ for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
+ String paramsXml
+ String paramName = entry.getKey()
+ String paramValue = entry.getValue()
+ paramsXml =
+ """ <param>
+ <name>${paramName}</name>
+ <value>${paramValue}</value>
+ </param>
+ """
+ sbParams.append(paramsXml)
+ }
+ sbParams.append("</service-input-parameters>")
+ }
+ String siParamsXml = sbParams.toString()
+ if (siParamsXml == null)
+ siParamsXml = ""
+ execution.setVariable("siParamsXml", siParamsXml)
+
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception ex){
+ msg = "Exception in preProcessRequest " + ex.getMessage()
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+ }
+ utils.log("INFO"," ***** Exit preProcessRequest *****", isDebugEnabled)
+ }
+
+ public void postProcessAAIGET(DelegateExecution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ utils.log("INFO"," ***** postProcessAAIGET ***** ", isDebugEnabled)
+ String msg = ""
+
+ try {
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+ boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator")
+ String serviceType = ""
+
+ if(foundInAAI){
+ utils.log("INFO","Found Service-instance in AAI", isDebugEnabled)
+
+ String siData = execution.getVariable("GENGS_service")
+ utils.log("INFO", "SI Data", isDebugEnabled)
+ if (isBlank(siData))
+ {
+ msg = "Could not retrive ServiceInstance data from AAI to delete id:" + serviceInstanceId
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+ }
+ else
+ {
+ // get model invariant id
+ // Get Template uuid and version
+ if (utils.nodeExists(siData, "model-invariant-id") && utils.nodeExists(siData, "model-version-id") ) {
+ utils.log("INFO", "SI Data model-invariant-id and model-version-id exist:", isDebugEnabled)
+ def modelInvariantId = serviceXml.getElementsByTagName("model-invariant-id").item(0).getTextContent()
+ def modelVersionId = serviceXml.getElementsByTagName("model-version-id").item(0).getTextContent()
+
+ // Set Original Template info
+ execution.setVariable("model-invariant-id-original", modelInvariantId)
+ execution.setVariable("model-version-id-original", modelVersionId)
+ }
+
+ utils.log("INFO", "SI Data" + siData, isDebugEnabled)
+ //Confirm there are no related service instances (vnf/network or volume)
+ if (utils.nodeExists(siData, "relationship-list")) {
+ utils.log("INFO", "SI Data relationship-list exists:", isDebugEnabled)
+ InputSource source = new InputSource(new StringReader(siData));
+ DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
+ Document serviceXml = docBuilder.parse(source)
+ serviceXml.getDocumentElement().normalize()
+ //test(siData)
+ NodeList nodeList = serviceXml.getElementsByTagName("relationship")
+ JSONArray jArray = new JSONArray()
+ for (int x = 0; x < nodeList.getLength(); x++) {
+ Node node = nodeList.item(x)
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ Element eElement = (Element) node
+ def e = eElement.getElementsByTagName("related-to").item(0).getTextContent() //for ns
+ if(e.equals("service-instance")){
+ def relatedObject = eElement.getElementsByTagName("related-link").item(0).getTextContent()
+ utils.log("INFO", "ServiceInstance Related NS :" + relatedObject, isDebugEnabled)
+ NodeList dataList = node.getChildNodes()
+ if(null != dataList) {
+ JSONObject jObj = new JSONObject()
+ for (int i = 0; i < dataList.getLength(); i++) {
+ Node dNode = dataList.item(i)
+ if(dNode.getNodeName() == "relationship-data") {
+ Element rDataEle = (Element)dNode
+ def eKey = rDataEle.getElementsByTagName("relationship-key").item(0).getTextContent()
+ def eValue = rDataEle.getElementsByTagName("relationship-value").item(0).getTextContent()
+ if(eKey.equals("service-instance.service-instance-id")){
+ jObj.put("resourceInstanceId", eValue)
+ }
+ }
+ else if(dNode.getNodeName() == "related-to-property"){
+ Element rDataEle = (Element)dNode
+ def eKey = rDataEle.getElementsByTagName("property-key").item(0).getTextContent()
+ def eValue = rDataEle.getElementsByTagName("property-value").item(0).getTextContent()
+ if(eKey.equals("service-instance.service-instance-name")){
+ jObj.put("resourceType", eValue)
+ }
+ }
+ }
+ utils.log("INFO", "Relationship related to Resource:" + jObj.toString(), isDebugEnabled)
+ jArray.put(jObj)
+ }
+ //for overlay/underlay
+ }else if (e.equals("configuration")){
+ def relatedObject = eElement.getElementsByTagName("related-link").item(0).getTextContent()
+ utils.log("INFO", "ServiceInstance Related Configuration :" + relatedObject, isDebugEnabled)
+ NodeList dataList = node.getChildNodes()
+ if(null != dataList) {
+ JSONObject jObj = new JSONObject()
+ for (int i = 0; i < dataList.getLength(); i++) {
+ Node dNode = dataList.item(i)
+ if(dNode.getNodeName() == "relationship-data") {
+ Element rDataEle = (Element)dNode
+ def eKey = rDataEle.getElementsByTagName("relationship-key").item(0).getTextContent()
+ def eValue = rDataEle.getElementsByTagName("relationship-value").item(0).getTextContent()
+ if(eKey.equals("configuration.configuration-id")){
+ jObj.put("resourceInstanceId", eValue)
+ }
+ }
+ else if(dNode.getNodeName() == "related-to-property"){
+ Element rDataEle = (Element)dNode
+ def eKey = rDataEle.getElementsByTagName("property-key").item(0).getTextContent()
+ def eValue = rDataEle.getElementsByTagName("property-value").item(0).getTextContent()
+ if(eKey.equals("configuration.configuration-type")){
+ jObj.put("resourceType", eValue)
+ }
+ }
+ }
+ utils.log("INFO", "Relationship related to Resource:" + jObj.toString(), isDebugEnabled)
+ jArray.put(jObj)
+ }
+ }
+ }
+ }
+ execution.setVariable("serviceRelationShip", jArray.toString())
+ }
+ }
+ }else{
+ boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator")
+ if(!succInAAI){
+ utils.log("INFO","Error getting Service-instance from AAI", + serviceInstanceId, isDebugEnabled)
+ WorkflowException workflowException = execution.getVariable("WorkflowException")
+ utils.logAudit("workflowException: " + workflowException)
+ if(workflowException != null){
+ exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())
+ }
+ else
+ {
+ msg = "Failure in postProcessAAIGET GENGS_SuccessIndicator:" + succInAAI
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
+ }
+ }
+
+ utils.log("INFO","Service-instance NOT found in AAI. Silent Success", isDebugEnabled)
+ }
+ }catch (BpmnError e) {
+ throw e;
+ } catch (Exception ex) {
+ msg = "Exception in DoDeleteE2EServiceInstance.postProcessAAIGET. " + ex.getMessage()
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+ }
+ utils.log("INFO"," *** Exit postProcessAAIGET *** ", isDebugEnabled)
+ }
+
+ public void getCurrentNS(execution){
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ utils.log("INFO", "======== Start getCurrentNS Process ======== ", isDebugEnabled)
+
+ def currentIndex = execution.getVariable("currentNSIndex")
+ List<String> nsSequence = execution.getVariable("nsSequence")
+ String nsResourceType = nsSequence.get(currentIndex)
+
+ // GET AAI by Name, not ID, for process convenient
+ execution.setVariable("GENGS_type", "service-instance")
+ execution.setVariable("GENGS_serviceInstanceId", "")
+ execution.setVariable("GENGS_serviceInstanceName", nsResourceType)
+
+ utils.log("INFO", "======== COMPLETED getCurrentNS Process ======== ", isDebugEnabled)
+ }
+
+ public void prepareDecomposeService(DelegateExecution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+
+ try {
+ utils.log("DEBUG", " ***** Inside prepareDecomposeService of create generic e2e service ***** ", isDebugEnabled)
+ String modelInvariantUuid = execution.getVariable("model-invariant-id")
+ //here modelVersion is not set, we use modelUuid to decompose the service.
+ String serviceModelInfo = """{
+ "modelInvariantUuid":"${modelInvariantUuid}",
+ "modelUuid":"${modelUuid}",
+ "modelVersion":""
+ }"""
+ execution.setVariable("serviceModelInfo", serviceModelInfo)
+
+ utils.log("DEBUG", " ***** Completed prepareDecomposeService of create generic e2e service ***** ", isDebugEnabled)
+ } catch (Exception ex) {
+ // try error in method block
+ String exceptionMessage = "Bpmn error encountered in create generic e2e service flow. Unexpected Error from method prepareDecomposeService() - " + ex.getMessage()
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+ }
+ }
+
+ public void postDecomposeService(DelegateExecution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+
+ utils.log("DEBUG", " ***** Inside processDecomposition() of create generic e2e service flow ***** ", isDebugEnabled)
+ try {
+ ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+ List<Resource> deleteResourceList = serviceDecomposition.getServiceResources()
+ execution.setVariable("deleteResourceList", deleteResourceList)
+ } catch (Exception ex) {
+ String exceptionMessage = "Bpmn error encountered in create generic e2e service flow. processDecomposition() - " + ex.getMessage()
+ utils.log("DEBUG", exceptionMessage, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+ }
+ }
+
+ public void preInitResourcesOperStatus(DelegateExecution execution){
+ def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+
+ utils.log("INFO", " ======== STARTED preInitResourcesOperStatus Process ======== ", isDebugEnabled)
+ try{
+ String serviceId = execution.getVariable("serviceInstanceId")
+ String operationId = execution.getVariable("operationId")
+ String operationType = execution.getVariable("operationType")
+ String resourceTemplateUUIDs = ""
+ String result = "processing"
+ String progress = "0"
+ String reason = ""
+ String operationContent = "Prepare service creation"
+ utils.log("INFO", "Generated new operation for Service Instance serviceId:" + serviceId + " operationId:" + operationId + " operationType:" + operationType, isDebugEnabled)
+ serviceId = UriUtils.encode(serviceId,"UTF-8")
+ execution.setVariable("serviceInstanceId", serviceId)
+ execution.setVariable("operationId", operationId)
+ execution.setVariable("operationType", operationType)
+
+ String serviceRelationShip = execution.getVariable("serviceRelationShip")
+
+ def jsonSlurper = new JsonSlurper()
+ def jsonOutput = new JsonOutput()
+ List relationShipList = jsonSlurper.parseText(serviceRelationShip)
+
+ if (relationShipList != null) {
+ relationShipList.each {
+ resourceTemplateUUIDs = resourceTemplateUUIDs + it.resourceInstanceId + ":"
+ }
+ }
+ execution.setVariable("URN_mso_adapters_openecomp_db_endpoint","http://mso.mso.testlab.openecomp.org:8080/dbadapters/RequestsDbAdapter")
+
+ String payload =
+ """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:ns="http://org.openecomp.mso/requestsdb">
+ <soapenv:Header/>
+ <soapenv:Body>
+ <ns:initResourceOperationStatus xmlns:ns="http://org.openecomp.mso/requestsdb">
+ <serviceId>${serviceId}</serviceId>
+ <operationId>${operationId}</operationId>
+ <operationType>${operationType}</operationType>
+ <resourceTemplateUUIDs>${resourceTemplateUUIDs}</resourceTemplateUUIDs>
+ </ns:initResourceOperationStatus>
+ </soapenv:Body>
+ </soapenv:Envelope>"""
+
+ payload = utils.formatXml(payload)
+ execution.setVariable("CVFMI_initResOperStatusRequest", payload)
+ utils.log("INFO", "Outgoing initResourceOperationStatus: \n" + payload, isDebugEnabled)
+ utils.logAudit("CreateVfModuleInfra Outgoing initResourceOperationStatus Request: " + payload)
+
+ }catch(Exception e){
+ utils.log("ERROR", "Exception Occured Processing preInitResourcesOperStatus. Exception is:\n" + e, isDebugEnabled)
+ execution.setVariable("CVFMI_ErrorResponse", "Error Occurred during preInitResourcesOperStatus Method:\n" + e.getMessage())
+ }
+ utils.log("INFO", "======== COMPLETED preInitResourcesOperStatus Process ======== ", isDebugEnabled)
+ }
+
+ public void postProcessAAIDEL(DelegateExecution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ utils.log("INFO"," ***** postProcessAAIDEL ***** ", isDebugEnabled)
+ String msg = ""
+ try {
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+ boolean succInAAI = execution.getVariable("GENDS_SuccessIndicator")
+ if(!succInAAI){
+ msg = "Error deleting Service-instance in AAI" + serviceInstanceId
+ utils.log("INFO", msg, isDebugEnabled)
+ WorkflowException workflowException = execution.getVariable("WorkflowException")
+ utils.logAudit("workflowException: " + workflowException)
+ if(workflowException != null){
+ exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())
+ }
+ else
+ {
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg)
+ }
+ }
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception ex) {
+ msg = "Exception in DoDeleteE2EServiceInstance.postProcessAAIDEL. " + ex.getMessage()
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+ }
+ utils.log("INFO"," *** Exit postProcessAAIDEL *** ", isDebugEnabled)
+ }
+
+ /**
+ * post config request.
+ */
+ public void postConfigRequest(execution){
+ //to do
+ }
+
+}
+ \ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteResourcesV1.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteResourcesV1.groovy
new file mode 100644
index 0000000000..6c150df754
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteResourcesV1.groovy
@@ -0,0 +1,238 @@
+
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
+ * ================================================================================
+ * 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.openecomp.mso.bpmn.infrastructure.scripts
+
+import groovy.json.JsonSlurper
+import org.apache.commons.lang3.StringUtils
+import org.apache.http.HttpResponse
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.json.JSONObject
+import org.openecomp.mso.bpmn.common.recipe.BpmnRestClient
+import org.openecomp.mso.bpmn.common.recipe.ResourceInput
+import org.openecomp.mso.bpmn.common.resource.ResourceRequestBuilder
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.core.domain.Resource
+import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition
+import org.openecomp.mso.bpmn.core.domain.ServiceInstance
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.bpmn.infrastructure.properties.BPMNProperties
+
+import static org.apache.commons.lang3.StringUtils.isBlank
+import static org.apache.commons.lang3.StringUtils.isBlank
+
+public class DoDeleteResourcesV1 extends AbstractServiceTaskProcessor {
+
+ String Prefix="DDR_"
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+ JsonUtils jsonUtil = new JsonUtils()
+ CatalogDbUtils cutils = new CatalogDbUtils()
+
+ public void preProcessRequest (DelegateExecution execution) {
+ def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+ utils.log("INFO"," ***** preProcessRequest *****", isDebugEnabled)
+ String msg = ""
+
+ try {
+ String requestId = execution.getVariable("msoRequestId")
+ execution.setVariable("prefix",Prefix)
+
+ //Inputs
+ //requestDetails.subscriberInfo. for AAI GET & PUT & SDNC assignToplology
+ String globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId
+ if (globalSubscriberId == null)
+ {
+ execution.setVariable("globalSubscriberId", "")
+ }
+
+ //requestDetails.requestParameters. for AAI PUT & SDNC assignTopology
+ String serviceType = execution.getVariable("serviceType")
+ if (serviceType == null)
+ {
+ execution.setVariable("serviceType", "")
+ }
+
+ //Generated in parent for AAI PUT
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+ if (isBlank(serviceInstanceId)){
+ msg = "Input serviceInstanceId is null"
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+ }
+
+ String sdncCallbackUrl = execution.getVariable('URN_mso_workflow_sdncadapter_callback')
+ if (isBlank(sdncCallbackUrl)) {
+ msg = "URN_mso_workflow_sdncadapter_callback is null"
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+ }
+ execution.setVariable("sdncCallbackUrl", sdncCallbackUrl)
+ utils.log("INFO","SDNC Callback URL: " + sdncCallbackUrl, isDebugEnabled)
+
+ StringBuilder sbParams = new StringBuilder()
+ Map<String, String> paramsMap = execution.getVariable("serviceInputParams")
+ if (paramsMap != null)
+ {
+ sbParams.append("<service-input-parameters>")
+ for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
+ String paramsXml
+ String paramName = entry.getKey()
+ String paramValue = entry.getValue()
+ paramsXml =
+ """ <param>
+ <name>${paramName}</name>
+ <value>${paramValue}</value>
+ </param>
+ """
+ sbParams.append(paramsXml)
+ }
+ sbParams.append("</service-input-parameters>")
+ }
+ String siParamsXml = sbParams.toString()
+ if (siParamsXml == null)
+ siParamsXml = ""
+ execution.setVariable("siParamsXml", siParamsXml)
+
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception ex){
+ msg = "Exception in preProcessRequest " + ex.getMessage()
+ utils.log("INFO", msg, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+ }
+ utils.log("INFO"," ***** Exit preProcessRequest *****", isDebugEnabled)
+ }
+
+ public void sequenceResource(execution){
+ def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+
+ utils.log("INFO", " ======== STARTED sequenceResource Process ======== ", isDebugEnabled)
+ List<String> nsResources = new ArrayList<String>()
+ List<String> wanResources = new ArrayList<String>()
+ List<String> resourceSequence = new ArrayList<String>()
+
+ // get delete resource list and order list
+ List<Resource> delResourceList = execution.getVariable("delResourceList")
+ // existing resource list
+ List<ServiceInstance> existResourceList = execution.getVariable("realNSRessources")
+
+ for(ServiceInstance rc_e : existResourceList){
+
+ String muuid = rc_e.getModelInfo().getModelUuid()
+ String mIuuid = rc_e.getModelInfo().getModelInvariantUuid()
+ String mCuuid = rc_e.getModelInfo().getModelCustomizationUuid()
+ rcType = rc_e.getInstanceName()
+
+ for(Resource rc_d : delResourceList){
+
+ if(rc_d.getModelInfo().getModelUuid() == muuid
+ && rc_d.getModelInfo().getModelInvariantUuid() == mIuuid
+ && rc_d.getModelInfo().getModelCustomizationUuid() == mCuuid) {
+
+ if(StringUtils.containsIgnoreCase(rcType, "overlay")
+ || StringUtils.containsIgnoreCase(rcType, "underlay")){
+ wanResources.add(rcType)
+ }else{
+ nsResources.add(rcType)
+ }
+
+ }
+ }
+
+ }
+
+ resourceSequence.addAll(wanResources)
+ resourceSequence.addAll(nsResources)
+ String isContainsWanResource = wanResources.isEmpty() ? "false" : "true"
+ execution.setVariable("isContainsWanResource", isContainsWanResource)
+ execution.setVariable("currentResourceIndex", 0)
+ execution.setVariable("resourceSequence", resourceSequence)
+ utils.log("INFO", "resourceSequence: " + resourceSequence, isDebugEnabled)
+ execution.setVariable("wanResources", wanResources)
+ utils.log("INFO", " ======== END sequenceResource Process ======== ", isDebugEnabled)
+ }
+
+ /**
+ * prepare delete parameters
+ */
+ public void preResourceDelete(execution, resourceName){
+
+ def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+
+ utils.log("INFO", " ======== STARTED preResourceDelete Process ======== ", isDebugEnabled)
+
+ List<ServiceInstance> existResourceList = execution.getVariable("realNSRessources")
+
+ for(ServiceInstance rc_e : existResourceList){
+
+ if(StringUtils.containsIgnoreCase(rc_e.getInstanceName(), resourceName)) {
+
+ String resourceInstanceUUID = rc_e.getInstanceId()
+ String resourceTemplateUUID = rc_e.getModelInfo().getModelUuid()
+ execution.setVariable("resourceInstanceId", resourceInstanceUUID)
+ execution.setVariable("resourceTemplateId", resourceTemplateUUID)
+ execution.setVariable("resourceType", resourceName)
+ utils.log("INFO", "Delete Resource Info resourceTemplate Id :" + resourceTemplateUUID + " resourceInstanceId: "
+ + resourceInstanceUUID + " resourceType: " + resourceName, isDebugEnabled)
+ }
+ }
+
+ utils.log("INFO", " ======== END preResourceDelete Process ======== ", isDebugEnabled)
+ }
+
+
+ /**
+ * Execute delete workflow for resource
+ */
+ public void executeResourceDelete(execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ utils.log("INFO", "======== Start executeResourceDelete Process ======== ", isDebugEnabled)
+ String requestId = execution.getVariable("msoRequestId")
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+ String serviceType = execution.getVariable("serviceType")
+ ResourceInput resourceInput = execution.getVariable("resourceInput")
+ String requestAction = resourceInput.getOperationType()
+ JSONObject resourceRecipe = cutils.getResourceRecipe(execution, resourceInput.getResourceUuid(), requestAction)
+ String recipeUri = resourceRecipe.getString("orchestrationUri")
+ String recipeTimeOut = resourceRecipe.getString("recipeTimeout")
+ String recipeParamXsd = resourceRecipe.get("paramXSD")
+ HttpResponse resp = BpmnRestClient.post(recipeUri, requestId, recipeTimeout, requestAction, serviceInstanceId, serviceType, resourceInput.toString(), recipeParamXsd)
+ utils.log("INFO", " ======== END executeResourceDelete Process ======== ", isDebugEnabled)
+ }
+
+
+ public void parseNextResource(execution){
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ utils.log("INFO", "======== Start parseNextResource Process ======== ", isDebugEnabled)
+ def currentIndex = execution.getVariable("currentResourceIndex")
+ def nextIndex = currentIndex + 1
+ execution.setVariable("currentResourceIndex", nextIndex)
+ List<String> resourceSequence = execution.getVariable("resourceSequence")
+ if(nextIndex >= resourceSequence.size()){
+ execution.setVariable("allResourceFinished", "true")
+ }else{
+ execution.setVariable("allResourceFinished", "false")
+ }
+ utils.log("INFO", "======== COMPLETED parseNextResource Process ======== ", isDebugEnabled)
+ }
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/properties/BPMNProperties.java b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/properties/BPMNProperties.java
new file mode 100644
index 0000000000..70572dc94a
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/properties/BPMNProperties.java
@@ -0,0 +1,61 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.openecomp.mso.bpmn.infrastructure.properties;
+
+import org.openecomp.mso.logger.MessageEnum;
+import org.openecomp.mso.logger.MsoLogger;
+import org.openecomp.mso.properties.MsoPropertiesException;
+import org.openecomp.mso.properties.MsoPropertiesFactory;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class BPMNProperties {
+
+ public static String MSO_PROP_BPMN = "MSO_PROP_BPMN";
+
+ private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA);
+
+ public static String getProperty(String key, String defaultValue) {
+ String value;
+ try {
+ value = new MsoPropertiesFactory().getMsoJavaProperties(MSO_PROP_BPMN).getProperty(key, defaultValue);
+ } catch (MsoPropertiesException e) {
+ msoLogger.error (MessageEnum.NO_PROPERTIES, "Unknown. Mso Properties ID not found in cache: "
+ + MSO_PROP_BPMN, "BPMN", "", MsoLogger.ErrorCode.DataError,
+ "Exception - Mso Properties ID not found in cache", e);
+ return null;
+ }
+ msoLogger.debug("Config read for " + MSO_PROP_BPMN + " - key:" + key + " value:" + value);
+ return value;
+ }
+
+ public static List<String> getResourceSequenceProp() {
+ String resource_sequence = getProperty("resource_sequence", null);
+ if (resource_sequence != null) {
+ String[] resourceSequence = resource_sequence.split(",");
+ return Arrays.asList(resource_sequence);
+ }
+ return Arrays.asList(ResourceSequence.RESOURCE_EPC,
+ ResourceSequence.RESOURCE_IMS,
+ ResourceSequence.RESOUCE_OVERLAY,
+ ResourceSequence.RESOURCE_UNDERLAY);
+ }
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/properties/ResourceSequence.java b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/properties/ResourceSequence.java
new file mode 100644
index 0000000000..86e5d30b11
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/properties/ResourceSequence.java
@@ -0,0 +1,30 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.openecomp.mso.bpmn.infrastructure.properties;
+
+public final class ResourceSequence {
+
+ public static final String RESOURCE_IMS = "ims";
+ public static final String RESOURCE_EPC = "epc";
+ public static final String RESOUCE_OVERLAY = "overlay";
+ public static final String RESOURCE_UNDERLAY = "underlay";
+
+ private ResourceSequence() {}
+} \ No newline at end of file
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/DeleteCustomE2EServiceInstance.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/DeleteCustomE2EServiceInstance.bpmn
index 289128d95f..013b5b2504 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/DeleteCustomE2EServiceInstance.bpmn
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/DeleteCustomE2EServiceInstance.bpmn
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0">
+<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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3">
<bpmn:process id="DeleteCustomE2EServiceInstance" isExecutable="true">
<bpmn:startEvent id="StartEvent_00m8zen" name="Delete SI Start Flow">
<bpmn:outgoing>SequenceFlow_1wxumid</bpmn:outgoing>
@@ -22,7 +22,7 @@ ex.processJavaException(execution)]]></bpmn:script>
<bpmn:sequenceFlow id="SequenceFlow_0guajy5" name="" sourceRef="StartEvent_121296y" targetRef="ScriptTask_1c6ogpt" />
<bpmn:sequenceFlow id="SequenceFlow_0dbt753" name="" sourceRef="ScriptTask_1c6ogpt" targetRef="EndEvent_1dw3dwx" />
</bpmn:subProcess>
- <bpmn:callActivity id="CallActivity_1vyx9hu" name="Call DoCustomDeleteE2EServiceInstance&#10;" calledElement="DoCustomDeleteE2EServiceInstance">
+ <bpmn:callActivity id="CallActivity_1vyx9hu" name="Call DoCustomDeleteE2EServiceInstance&#10;" calledElement="DoDeleteE2EServiceInstance">
<bpmn:extensionElements>
<camunda:out source="WorkflowException" target="WorkflowException" />
<camunda:in source="msoRequestId" target="msoRequestId" />
@@ -139,7 +139,7 @@ csi.sendSyncResponse(execution)]]></bpmn:script>
</bpmn:process>
<bpmn:error id="Error_1erlsmy" name="MSO Workflow Exception" errorCode="MSOWorkflowException" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
- <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DeleteCustomE2EServiceInstance">
<bpmndi:BPMNShape id="StartEvent_00m8zen_di" bpmnElement="StartEvent_00m8zen">
<dc:Bounds x="577" y="209" width="36" height="36" />
<bpmndi:BPMNLabel>
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/DeleteSDNCNetworkResource.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/DeleteSDNCNetworkResource.bpmn
new file mode 100644
index 0000000000..c730c8e2de
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/DeleteSDNCNetworkResource.bpmn
@@ -0,0 +1,156 @@
+<?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="1.11.3">
+ <bpmn:process id="DeleteSDNCNetworkResource" name="DeleteSDNCNetworkResource" isExecutable="true">
+ <bpmn:startEvent id="createNS_StartEvent" name="deleteNS_StartEvent">
+ <bpmn:outgoing>SequenceFlow_1qo2pln</bpmn:outgoing>
+ </bpmn:startEvent>
+ <bpmn:sequenceFlow id="SequenceFlow_1qo2pln" sourceRef="createNS_StartEvent" targetRef="Task_1d5rrfs" />
+ <bpmn:endEvent id="EndEvent_1x6k78c" name="Delete SDNC call end">
+ <bpmn:incoming>SequenceFlow_1ba6i0r</bpmn:incoming>
+ </bpmn:endEvent>
+ <bpmn:sequenceFlow id="SequenceFlow_092fygq" sourceRef="Task_0i59nr9" targetRef="Task_1cglzlg" />
+ <bpmn:serviceTask id="Task_0i59nr9" name="Call Custom Delete SDNC Overlay" camunda:class="org.openecomp.mso.bpmn.infrastructure.workflow.serviceTask.SdncNetworkTopologyOperationTask">
+ <bpmn:incoming>SequenceFlow_1twf9nk</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_092fygq</bpmn:outgoing>
+ </bpmn:serviceTask>
+ <bpmn:subProcess id="SubProcess_0rd2egn" triggeredByEvent="true">
+ <bpmn:startEvent id="StartEvent_1dikunf">
+ <bpmn:outgoing>SequenceFlow_00oxyoj</bpmn:outgoing>
+ <bpmn:errorEventDefinition />
+ </bpmn:startEvent>
+ <bpmn:endEvent id="EndEvent_1bbyk46">
+ <bpmn:incoming>SequenceFlow_0k06srk</bpmn:incoming>
+ </bpmn:endEvent>
+ <bpmn:sequenceFlow id="SequenceFlow_00oxyoj" sourceRef="StartEvent_1dikunf" targetRef="Task_0kqrld2" />
+ <bpmn:sequenceFlow id="SequenceFlow_0k06srk" sourceRef="Task_0kqrld2" targetRef="EndEvent_1bbyk46" />
+ <bpmn:scriptTask id="Task_0kqrld2" name="Log / Print Unexpected Error">
+ <bpmn:incoming>SequenceFlow_00oxyoj</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0k06srk</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.common.scripts.*
+ExceptionUtil ex = new ExceptionUtil()
+ex.processJavaException(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ </bpmn:subProcess>
+ <bpmn:sequenceFlow id="SequenceFlow_1twf9nk" sourceRef="Task_1t687g1" targetRef="Task_0i59nr9" />
+ <bpmn:sequenceFlow id="SequenceFlow_1ba6i0r" sourceRef="Task_1cglzlg" targetRef="EndEvent_1x6k78c" />
+ <bpmn:scriptTask id="Task_1t687g1" name="Pre Resource Delete">
+ <bpmn:incoming>SequenceFlow_01medil</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1twf9nk</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dsdncr = new DeleteSDNCNetworkResource()
+dsdncr.preProcessSDNCDelete(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:scriptTask id="Task_1cglzlg" name="Post Resource Delete">
+ <bpmn:incoming>SequenceFlow_092fygq</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1ba6i0r</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dsdncr = new DeleteSDNCNetworkResource()
+dsdncr.postProcessSDNCDelete(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:sequenceFlow id="SequenceFlow_01medil" sourceRef="Task_1d5rrfs" targetRef="Task_1t687g1" />
+ <bpmn:scriptTask id="Task_1d5rrfs" name="Set RecipeParam">
+ <bpmn:incoming>SequenceFlow_1qo2pln</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_01medil</bpmn:outgoing>
+ <bpmn:script><![CDATA[String recipeParamXsdDemo="""
+{"operationType":"GRE"}"""
+
+String recipeParamXsd=""
+execution.setVariable("recipeParamXsd", recipeParamXsd)]]></bpmn:script>
+ </bpmn:scriptTask>
+ </bpmn:process>
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DeleteSDNCNetworkResource">
+ <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="createNS_StartEvent">
+ <dc:Bounds x="-168" y="111" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-193" y="147" width="88" height="25" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1qo2pln_di" bpmnElement="SequenceFlow_1qo2pln">
+ <di:waypoint xsi:type="dc:Point" x="-132" y="129" />
+ <di:waypoint xsi:type="dc:Point" x="-60" y="129" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-141" y="108" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="EndEvent_15pcuuc_di" bpmnElement="EndEvent_1x6k78c">
+ <dc:Bounds x="722" y="111" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="682" y="153" width="88" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_092fygq_di" bpmnElement="SequenceFlow_092fygq">
+ <di:waypoint xsi:type="dc:Point" x="419" y="129" />
+ <di:waypoint xsi:type="dc:Point" x="527" y="129" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="428" y="107.5" width="90" height="13" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ServiceTask_1lqz0ta_di" bpmnElement="Task_0i59nr9">
+ <dc:Bounds x="319" y="89" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="SubProcess_1u3lwl3_di" bpmnElement="SubProcess_0rd2egn" isExpanded="true">
+ <dc:Bounds x="38" y="273" width="350" height="200" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="StartEvent_0eyldml_di" bpmnElement="StartEvent_1dikunf">
+ <dc:Bounds x="69" y="340" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="41" y="378" width="90" height="13" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="EndEvent_1bbyk46_di" bpmnElement="EndEvent_1bbyk46">
+ <dc:Bounds x="333" y="340" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="306" y="379" width="90" height="13" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_00oxyoj_di" bpmnElement="SequenceFlow_00oxyoj">
+ <di:waypoint xsi:type="dc:Point" x="105" y="358" />
+ <di:waypoint xsi:type="dc:Point" x="165" y="358" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="90" y="337" width="90" height="13" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0k06srk_di" bpmnElement="SequenceFlow_0k06srk">
+ <di:waypoint xsi:type="dc:Point" x="265" y="358" />
+ <di:waypoint xsi:type="dc:Point" x="333" y="358" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="254" y="337" width="90" height="13" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ScriptTask_1b3k692_di" bpmnElement="Task_0kqrld2">
+ <dc:Bounds x="165" y="318" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1twf9nk_di" bpmnElement="SequenceFlow_1twf9nk">
+ <di:waypoint xsi:type="dc:Point" x="213" y="129" />
+ <di:waypoint xsi:type="dc:Point" x="319" y="129" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="266" y="108" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1ba6i0r_di" bpmnElement="SequenceFlow_1ba6i0r">
+ <di:waypoint xsi:type="dc:Point" x="627" y="129" />
+ <di:waypoint xsi:type="dc:Point" x="722" y="129" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="674.5" y="108" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ScriptTask_1t116cs_di" bpmnElement="Task_1t687g1">
+ <dc:Bounds x="113" y="89" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_18zliw7_di" bpmnElement="Task_1cglzlg">
+ <dc:Bounds x="527" y="89" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_01medil_di" bpmnElement="SequenceFlow_01medil">
+ <di:waypoint xsi:type="dc:Point" x="40" y="129" />
+ <di:waypoint xsi:type="dc:Point" x="113" y="129" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="76.5" y="107.5" width="0" height="13" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ScriptTask_0f9etr5_di" bpmnElement="Task_1d5rrfs">
+ <dc:Bounds x="-60" y="89" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+</bpmn:definitions>
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoDeleteE2EServiceInstance.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoDeleteE2EServiceInstance.bpmn
new file mode 100644
index 0000000000..47f3db5c9a
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoDeleteE2EServiceInstance.bpmn
@@ -0,0 +1,380 @@
+<?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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3">
+ <bpmn:process id="DoDeleteE2EServiceInstance" name="All Resources Deleted" isExecutable="true">
+ <bpmn:startEvent id="StartEvent_0212h2r" name="Start Flow">
+ <bpmn:outgoing>SequenceFlow_0vz7cd9</bpmn:outgoing>
+ </bpmn:startEvent>
+ <bpmn:scriptTask id="ScriptTask_06phzgv" name="PreProcess Incoming Request" scriptFormat="groovy">
+ <bpmn:incoming>SequenceFlow_0vz7cd9</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_11e6bfy</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def ddsi = new DoDeleteE2EServiceInstance()
+ddsi.preProcessRequest(execution)
+]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:endEvent id="EndEvent_1uqzt26">
+ <bpmn:incoming>SequenceFlow_0e7inkl</bpmn:incoming>
+ </bpmn:endEvent>
+ <bpmn:callActivity id="CallActivity_06izbke" name="Call AAI GenericDelete Service " calledElement="GenericDeleteService">
+ <bpmn:extensionElements>
+ <camunda:in source="serviceInstanceId" target="GENDS_serviceInstanceId" />
+ <camunda:in source="serviceType" target="GENDS_serviceType" />
+ <camunda:in source="globalSubscriberId" target="GENDS_globalCustomerId" />
+ <camunda:in sourceExpression="service-instance" target="GENDS_type" />
+ <camunda:out source="GENDS_FoundIndicator" target="GENDS_FoundIndicator" />
+ <camunda:in sourceExpression="&#34;&#34;" target="GENGS_serviceType" />
+ <camunda:out source="GENDS_SuccessIndicator" target="GENDS_SuccessIndicator" />
+ <camunda:out source="WorkflowException" target="WorkflowExcpeton" />
+ </bpmn:extensionElements>
+ <bpmn:incoming>SequenceFlow_1cevtpy</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0g6bxqw</bpmn:outgoing>
+ </bpmn:callActivity>
+ <bpmn:scriptTask id="ScriptTask_1rtnsh8" name="Post Process AAI GET" scriptFormat="groovy">
+ <bpmn:incoming>SequenceFlow_188ejvu</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0vi0sv6</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def ddsi = new DoDeleteE2EServiceInstance()
+ddsi.postProcessAAIGET(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:scriptTask id="ScriptTask_01erufg" name="Post Process AAI Delete" scriptFormat="groovy">
+ <bpmn:incoming>SequenceFlow_0g6bxqw</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0e7inkl</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def ddsi = new DoDeleteE2EServiceInstance()
+ddsi.postProcessAAIDEL(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:subProcess id="SubProcess_1u8zt9i" name="Sub-process for UnexpectedErrors" triggeredByEvent="true">
+ <bpmn:startEvent id="StartEvent_0sf5lpt">
+ <bpmn:outgoing>SequenceFlow_1921mo3</bpmn:outgoing>
+ <bpmn:errorEventDefinition />
+ </bpmn:startEvent>
+ <bpmn:endEvent id="EndEvent_06utmg4">
+ <bpmn:incoming>SequenceFlow_18vlzfo</bpmn:incoming>
+ </bpmn:endEvent>
+ <bpmn:scriptTask id="ScriptTask_0nha3pr" name="Log / Print Unexpected Error" scriptFormat="groovy">
+ <bpmn:incoming>SequenceFlow_1921mo3</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_18vlzfo</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.common.scripts.*
+ExceptionUtil ex = new ExceptionUtil()
+ex.processJavaException(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:sequenceFlow id="SequenceFlow_1921mo3" name="" sourceRef="StartEvent_0sf5lpt" targetRef="ScriptTask_0nha3pr" />
+ <bpmn:sequenceFlow id="SequenceFlow_18vlzfo" name="" sourceRef="ScriptTask_0nha3pr" targetRef="EndEvent_06utmg4" />
+ </bpmn:subProcess>
+ <bpmn:sequenceFlow id="SequenceFlow_0vz7cd9" sourceRef="StartEvent_0212h2r" targetRef="ScriptTask_06phzgv" />
+ <bpmn:sequenceFlow id="SequenceFlow_11e6bfy" sourceRef="ScriptTask_06phzgv" targetRef="CallActivity_076pc2z" />
+ <bpmn:sequenceFlow id="SequenceFlow_0e7inkl" sourceRef="ScriptTask_01erufg" targetRef="EndEvent_1uqzt26" />
+ <bpmn:sequenceFlow id="SequenceFlow_0g6bxqw" sourceRef="CallActivity_06izbke" targetRef="ScriptTask_01erufg" />
+ <bpmn:sequenceFlow id="SequenceFlow_0vi0sv6" sourceRef="ScriptTask_1rtnsh8" targetRef="StartEvent_1qh5a34" />
+ <bpmn:scriptTask id="ScriptTask_146jt8v" name="Prepare Resource Oper Status" scriptFormat="groovy">
+ <bpmn:incoming>SequenceFlow_1961633</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1ym9otf</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def ddsi = new DoDeleteE2EServiceInstance()
+ddsi.preInitResourcesOperStatus(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:serviceTask id="ServiceTask_00tg69u" name="Init Resource Oper Status">
+ <bpmn:extensionElements>
+ <camunda:connector>
+ <camunda:inputOutput>
+ <camunda:inputParameter name="url">${URN_mso_adapters_openecomp_db_endpoint}</camunda:inputParameter>
+ <camunda:inputParameter name="headers">
+ <camunda:map>
+ <camunda:entry key="content-type">application/soap+xml</camunda:entry>
+ <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry>
+ </camunda:map>
+ </camunda:inputParameter>
+ <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter>
+ <camunda:inputParameter name="method">POST</camunda:inputParameter>
+ <camunda:outputParameter name="CVFMI_dbResponseCode">${statusCode}</camunda:outputParameter>
+ <camunda:outputParameter name="CVFMI_dbResponse">${response}</camunda:outputParameter>
+ </camunda:inputOutput>
+ <camunda:connectorId>http-connector</camunda:connectorId>
+ </camunda:connector>
+ </bpmn:extensionElements>
+ <bpmn:incoming>SequenceFlow_1ym9otf</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1j08ko3</bpmn:outgoing>
+ </bpmn:serviceTask>
+ <bpmn:sequenceFlow id="SequenceFlow_1ym9otf" sourceRef="ScriptTask_146jt8v" targetRef="ServiceTask_00tg69u" />
+ <bpmn:callActivity id="CallActivity_076pc2z" name="Call AAI Generic GetService" calledElement="GenericGetService">
+ <bpmn:extensionElements>
+ <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
+ <camunda:in sourceExpression="service-instance" target="GENGS_type" />
+ <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
+ <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
+ <camunda:out source="WorkflowException" target="WorkflowException" />
+ <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
+ <camunda:out source="GENGS_service" target="GENGS_service" />
+ <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
+ <camunda:in source="serviceType" target="GENGS_serviceType" />
+ </bpmn:extensionElements>
+ <bpmn:incoming>SequenceFlow_11e6bfy</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_188ejvu</bpmn:outgoing>
+ </bpmn:callActivity>
+ <bpmn:sequenceFlow id="SequenceFlow_188ejvu" sourceRef="CallActivity_076pc2z" targetRef="ScriptTask_1rtnsh8" />
+ <bpmn:sequenceFlow id="SequenceFlow_1j08ko3" sourceRef="ServiceTask_00tg69u" targetRef="Task_1f5dlsv" />
+ <bpmn:intermediateCatchEvent id="StartEvent_1irom2x" name="Decompose Service">
+ <bpmn:outgoing>SequenceFlow_1q2mqnm</bpmn:outgoing>
+ <bpmn:linkEventDefinition name="DecomposeService" />
+ </bpmn:intermediateCatchEvent>
+ <bpmn:sequenceFlow id="SequenceFlow_1q2mqnm" sourceRef="StartEvent_1irom2x" targetRef="Task_1ldvug1" />
+ <bpmn:sequenceFlow id="SequenceFlow_0fo5vw5" sourceRef="Task_1ldvug1" targetRef="Task_0mhdfuu" />
+ <bpmn:sequenceFlow id="SequenceFlow_0orw2f8" sourceRef="Task_0mhdfuu" targetRef="Task_1yx1n05" />
+ <bpmn:sequenceFlow id="SequenceFlow_0ha8ix9" sourceRef="Task_1yx1n05" targetRef="IntermediateThrowEvent_0ve5ukt" />
+ <bpmn:intermediateThrowEvent id="IntermediateThrowEvent_0ve5ukt" name="Go to Delete Resources">
+ <bpmn:incoming>SequenceFlow_0ha8ix9</bpmn:incoming>
+ <bpmn:linkEventDefinition name="StartDeleteResource" />
+ </bpmn:intermediateThrowEvent>
+ <bpmn:intermediateCatchEvent id="StartEvent_09zdoq6" name="Start Delete Resources">
+ <bpmn:outgoing>SequenceFlow_1961633</bpmn:outgoing>
+ <bpmn:linkEventDefinition name="StartDeleteResource" />
+ </bpmn:intermediateCatchEvent>
+ <bpmn:intermediateThrowEvent id="StartEvent_1qh5a34" name="Go to Decompse Service">
+ <bpmn:incoming>SequenceFlow_0vi0sv6</bpmn:incoming>
+ <bpmn:linkEventDefinition name="DecomposeService" />
+ </bpmn:intermediateThrowEvent>
+ <bpmn:sequenceFlow id="SequenceFlow_1961633" sourceRef="StartEvent_09zdoq6" targetRef="ScriptTask_146jt8v" />
+ <bpmn:scriptTask id="Task_1ldvug1" name="Prepare Decompose Service">
+ <bpmn:incoming>SequenceFlow_1q2mqnm</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0fo5vw5</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dcsi= new DoDeleteE2EServiceInstance()
+dcsi.prepareDecomposeService(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:callActivity id="Task_0mhdfuu" name="Call Decompose Service" calledElement="DecomposeService">
+ <bpmn:incoming>SequenceFlow_0fo5vw5</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0orw2f8</bpmn:outgoing>
+ </bpmn:callActivity>
+ <bpmn:scriptTask id="Task_1yx1n05" name="Post Decompose Service">
+ <bpmn:incoming>SequenceFlow_0orw2f8</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0ha8ix9</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dcsi= new DoDeleteE2EServiceInstance()
+dcsi.postDecomposeService(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:callActivity id="Task_1f5dlsv" name="Delete Resources" calledElement="DoDeleteResource" camunda:calledElementTenantId="DoDeleteResources">
+ <bpmn:incoming>SequenceFlow_1j08ko3</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1cevtpy</bpmn:outgoing>
+ </bpmn:callActivity>
+ <bpmn:sequenceFlow id="SequenceFlow_1cevtpy" sourceRef="Task_1f5dlsv" targetRef="CallActivity_06izbke" />
+ </bpmn:process>
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoDeleteE2EServiceInstance">
+ <bpmndi:BPMNShape id="StartEvent_0212h2r_di" bpmnElement="StartEvent_0212h2r">
+ <dc:Bounds x="-537" y="-51" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-544" y="-10" width="52" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_06phzgv_di" bpmnElement="ScriptTask_06phzgv">
+ <dc:Bounds x="-449" y="-73" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="EndEvent_1uqzt26_di" bpmnElement="EndEvent_1uqzt26">
+ <dc:Bounds x="651" y="466" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="579" y="507" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="CallActivity_06izbke_di" bpmnElement="CallActivity_06izbke">
+ <dc:Bounds x="259" y="450" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_1rtnsh8_di" bpmnElement="ScriptTask_1rtnsh8">
+ <dc:Bounds x="-109" y="-73" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_01erufg_di" bpmnElement="ScriptTask_01erufg">
+ <dc:Bounds x="457" y="444" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="SubProcess_1u8zt9i_di" bpmnElement="SubProcess_1u8zt9i" isExpanded="true">
+ <dc:Bounds x="-166" y="672" width="467" height="193" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_0vz7cd9_di" bpmnElement="SequenceFlow_0vz7cd9">
+ <di:waypoint xsi:type="dc:Point" x="-501" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="-475" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="-475" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="-449" y="-33" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-505" y="-39" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_11e6bfy_di" bpmnElement="SequenceFlow_11e6bfy">
+ <di:waypoint xsi:type="dc:Point" x="-349" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="-318" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="-318" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="-286" y="-33" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-348" y="-39" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0e7inkl_di" bpmnElement="SequenceFlow_0e7inkl">
+ <di:waypoint xsi:type="dc:Point" x="557" y="484" />
+ <di:waypoint xsi:type="dc:Point" x="651" y="484" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="559" y="463" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0g6bxqw_di" bpmnElement="SequenceFlow_0g6bxqw">
+ <di:waypoint xsi:type="dc:Point" x="359" y="484" />
+ <di:waypoint xsi:type="dc:Point" x="407" y="484" />
+ <di:waypoint xsi:type="dc:Point" x="407" y="484" />
+ <di:waypoint xsi:type="dc:Point" x="457" y="484" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="377" y="478" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0vi0sv6_di" bpmnElement="SequenceFlow_0vi0sv6">
+ <di:waypoint xsi:type="dc:Point" x="-9" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="14" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="14" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="71" y="-33" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-16" y="-39" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="StartEvent_0sf5lpt_di" bpmnElement="StartEvent_0sf5lpt">
+ <dc:Bounds x="-98" y="739" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-170" y="780" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="EndEvent_06utmg4_di" bpmnElement="EndEvent_06utmg4">
+ <dc:Bounds x="195" y="739" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="123" y="780" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_0nha3pr_di" bpmnElement="ScriptTask_0nha3pr">
+ <dc:Bounds x="6" y="717" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1921mo3_di" bpmnElement="SequenceFlow_1921mo3">
+ <di:waypoint xsi:type="dc:Point" x="-62" y="757" />
+ <di:waypoint xsi:type="dc:Point" x="6" y="757" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-118" y="742" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_18vlzfo_di" bpmnElement="SequenceFlow_18vlzfo">
+ <di:waypoint xsi:type="dc:Point" x="106" y="757" />
+ <di:waypoint xsi:type="dc:Point" x="195" y="757" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="62" y="742" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ScriptTask_146jt8v_di" bpmnElement="ScriptTask_146jt8v">
+ <dc:Bounds x="-422" y="450" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ServiceTask_00tg69u_di" bpmnElement="ServiceTask_00tg69u">
+ <dc:Bounds x="-229" y="450" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1ym9otf_di" bpmnElement="SequenceFlow_1ym9otf">
+ <di:waypoint xsi:type="dc:Point" x="-322" y="490" />
+ <di:waypoint xsi:type="dc:Point" x="-229" y="490" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-320.5" y="469" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="CallActivity_076pc2z_di" bpmnElement="CallActivity_076pc2z">
+ <dc:Bounds x="-286" y="-73" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_188ejvu_di" bpmnElement="SequenceFlow_188ejvu">
+ <di:waypoint xsi:type="dc:Point" x="-186" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="-154" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="-154" y="-33" />
+ <di:waypoint xsi:type="dc:Point" x="-109" y="-33" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-184" y="-39" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1j08ko3_di" bpmnElement="SequenceFlow_1j08ko3">
+ <di:waypoint xsi:type="dc:Point" x="-129" y="490" />
+ <di:waypoint xsi:type="dc:Point" x="-1" y="490" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-110" y="469" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="IntermediateCatchEvent_0s6bb2d_di" bpmnElement="StartEvent_1irom2x">
+ <dc:Bounds x="-537" y="180" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-550" y="220" width="61" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1q2mqnm_di" bpmnElement="SequenceFlow_1q2mqnm">
+ <di:waypoint xsi:type="dc:Point" x="-501" y="198" />
+ <di:waypoint xsi:type="dc:Point" x="-378" y="198" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-484" y="177" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0fo5vw5_di" bpmnElement="SequenceFlow_0fo5vw5">
+ <di:waypoint xsi:type="dc:Point" x="-278" y="198" />
+ <di:waypoint xsi:type="dc:Point" x="-254" y="198" />
+ <di:waypoint xsi:type="dc:Point" x="-254" y="198" />
+ <di:waypoint xsi:type="dc:Point" x="-178" y="198" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-284" y="192" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0orw2f8_di" bpmnElement="SequenceFlow_0orw2f8">
+ <di:waypoint xsi:type="dc:Point" x="-78" y="198" />
+ <di:waypoint xsi:type="dc:Point" x="-49" y="198" />
+ <di:waypoint xsi:type="dc:Point" x="-49" y="198" />
+ <di:waypoint xsi:type="dc:Point" x="47" y="198" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-79" y="192" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0ha8ix9_di" bpmnElement="SequenceFlow_0ha8ix9">
+ <di:waypoint xsi:type="dc:Point" x="147" y="198" />
+ <di:waypoint xsi:type="dc:Point" x="181" y="198" />
+ <di:waypoint xsi:type="dc:Point" x="181" y="198" />
+ <di:waypoint xsi:type="dc:Point" x="246" y="198" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="151" y="192" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="IntermediateThrowEvent_15myvzx_di" bpmnElement="IntermediateThrowEvent_0ve5ukt">
+ <dc:Bounds x="246" y="180" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="233" y="220" width="64" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="IntermediateCatchEvent_1jcfnjr_di" bpmnElement="StartEvent_09zdoq6">
+ <dc:Bounds x="-537" y="472" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-549" y="512" width="60" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="IntermediateThrowEvent_1j1awcj_di" bpmnElement="StartEvent_1qh5a34">
+ <dc:Bounds x="71" y="-51" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="46" y="-11" width="85" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1961633_di" bpmnElement="SequenceFlow_1961633">
+ <di:waypoint xsi:type="dc:Point" x="-501" y="490" />
+ <di:waypoint xsi:type="dc:Point" x="-422" y="490" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-461.5" y="469" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ScriptTask_079nac8_di" bpmnElement="Task_1ldvug1">
+ <dc:Bounds x="-378" y="158" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="CallActivity_01b12fk_di" bpmnElement="Task_0mhdfuu">
+ <dc:Bounds x="-178" y="158" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_0msjtc4_di" bpmnElement="Task_1yx1n05">
+ <dc:Bounds x="47" y="158" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="CallActivity_16sm2op_di" bpmnElement="Task_1f5dlsv">
+ <dc:Bounds x="-1" y="450" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1cevtpy_di" bpmnElement="SequenceFlow_1cevtpy">
+ <di:waypoint xsi:type="dc:Point" x="99" y="490" />
+ <di:waypoint xsi:type="dc:Point" x="259" y="490" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="134" y="469" width="90" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+</bpmn:definitions>
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoDeleteResourcesV1.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoDeleteResourcesV1.bpmn
new file mode 100644
index 0000000000..d8dea30ad8
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoDeleteResourcesV1.bpmn
@@ -0,0 +1,304 @@
+<?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="1.11.3">
+ <bpmn:process id="DoDeleteResourceV1" name="DoDeleteResourceV1" isExecutable="true">
+ <bpmn:startEvent id="StartEvent_1" name="Start Resource Delete">
+ <bpmn:outgoing>SequenceFlow_0stqur4</bpmn:outgoing>
+ </bpmn:startEvent>
+ <bpmn:scriptTask id="ScriptTask_0ngvt9d" name="Prepare Delete Resource Recipe">
+ <bpmn:incoming>SequenceFlow_1oil1t3</bpmn:incoming>
+ <bpmn:incoming>SequenceFlow_13nyd1j</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1qm7owo</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+String resourceName = execution.getVariable("resourceType")
+def ddrs = new DoDeleteResource()
+ddrs.preResourceDelete(execution, resourceName )]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:scriptTask id="ScriptTask_15zy0jf" name="Execute Delete Resource Recipe">
+ <bpmn:incoming>SequenceFlow_1qm7owo</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1ly5jrs</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+String resourceName = execution.getVariable("resourceType")
+def ddr = new DoDeleteResource()
+ddr.executeResourceDelete(execution, resourceName )]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:scriptTask id="ScriptTask_1gf78zz" name="Parse Next Resource" scriptFormat="groovy">
+ <bpmn:incoming>SequenceFlow_1ly5jrs</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0i1gez5</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def ddr = new DoDeleteResource()
+ddsr.parseNextResource(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:exclusiveGateway id="ExclusiveGateway_0rtr0n7" name="Is All Resource Deleted">
+ <bpmn:incoming>SequenceFlow_0i1gez5</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1oil1t3</bpmn:outgoing>
+ <bpmn:outgoing>SequenceFlow_1d5mzit</bpmn:outgoing>
+ </bpmn:exclusiveGateway>
+ <bpmn:sequenceFlow id="SequenceFlow_0stqur4" sourceRef="StartEvent_1" targetRef="Task_1ue68b0" />
+ <bpmn:sequenceFlow id="SequenceFlow_1qm7owo" sourceRef="ScriptTask_0ngvt9d" targetRef="ScriptTask_15zy0jf" />
+ <bpmn:sequenceFlow id="SequenceFlow_1ly5jrs" sourceRef="ScriptTask_15zy0jf" targetRef="ScriptTask_1gf78zz" />
+ <bpmn:sequenceFlow id="SequenceFlow_0i1gez5" sourceRef="ScriptTask_1gf78zz" targetRef="ExclusiveGateway_0rtr0n7" />
+ <bpmn:sequenceFlow id="SequenceFlow_1oil1t3" name="No" sourceRef="ExclusiveGateway_0rtr0n7" targetRef="ScriptTask_0ngvt9d">
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("allResourceFinished" ) == "false" )}]]></bpmn:conditionExpression>
+ </bpmn:sequenceFlow>
+ <bpmn:subProcess id="SubProcess_0sbt4ns" name="Sub-process for UnexpectedErrors" triggeredByEvent="true">
+ <bpmn:startEvent id="StartEvent_1cjikl5">
+ <bpmn:outgoing>SequenceFlow_0rkycoj</bpmn:outgoing>
+ <bpmn:errorEventDefinition />
+ </bpmn:startEvent>
+ <bpmn:endEvent id="EndEvent_0gh3mcj">
+ <bpmn:incoming>SequenceFlow_117fiux</bpmn:incoming>
+ </bpmn:endEvent>
+ <bpmn:scriptTask id="ScriptTask_0plexin" name="Log / Print Unexpected Error" scriptFormat="groovy">
+ <bpmn:incoming>SequenceFlow_0rkycoj</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_117fiux</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.common.scripts.*
+ExceptionUtil ex = new ExceptionUtil()
+ex.processJavaException(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:sequenceFlow id="SequenceFlow_0rkycoj" name="" sourceRef="StartEvent_1cjikl5" targetRef="ScriptTask_0plexin" />
+ <bpmn:sequenceFlow id="SequenceFlow_117fiux" name="" sourceRef="ScriptTask_0plexin" targetRef="EndEvent_0gh3mcj" />
+ </bpmn:subProcess>
+ <bpmn:serviceTask id="ServiceTask_176j3rl" name="Call Delete SDNC Service Topology" camunda:class="org.openecomp.mso.bpmn.infrastructure.workflow.serviceTask.SdncServiceTopologyOperationTask">
+ <bpmn:incoming>SequenceFlow_1s1nnmj</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_174yrgl</bpmn:outgoing>
+ </bpmn:serviceTask>
+ <bpmn:exclusiveGateway id="ExclusiveGateway_1x63i6w" name="Is SDNC Service Contained">
+ <bpmn:incoming>SequenceFlow_1yrkxjm</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_1s1nnmj</bpmn:outgoing>
+ <bpmn:outgoing>SequenceFlow_0lk19rm</bpmn:outgoing>
+ </bpmn:exclusiveGateway>
+ <bpmn:sequenceFlow id="SequenceFlow_1yrkxjm" sourceRef="StartEvent_1eo3c2a" targetRef="ExclusiveGateway_1x63i6w" />
+ <bpmn:endEvent id="EndEvent_17bzayo" name="End Resource Deletion">
+ <bpmn:incoming>SequenceFlow_0o21fg8</bpmn:incoming>
+ </bpmn:endEvent>
+ <bpmn:sequenceFlow id="SequenceFlow_1s1nnmj" name="yes" sourceRef="ExclusiveGateway_1x63i6w" targetRef="ServiceTask_176j3rl">
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("isContainsWanResource" ) == "true" )}]]></bpmn:conditionExpression>
+ </bpmn:sequenceFlow>
+ <bpmn:sequenceFlow id="SequenceFlow_174yrgl" sourceRef="ServiceTask_176j3rl" targetRef="ExclusiveGateway_1jybr0n" />
+ <bpmn:sequenceFlow id="SequenceFlow_0lk19rm" name="no" sourceRef="ExclusiveGateway_1x63i6w" targetRef="ExclusiveGateway_1jybr0n">
+ <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("isContainsWanResource" ) == "false" )}]]></bpmn:conditionExpression>
+ </bpmn:sequenceFlow>
+ <bpmn:sequenceFlow id="SequenceFlow_1d5mzit" sourceRef="ExclusiveGateway_0rtr0n7" targetRef="EndEvent_17h3h92" />
+ <bpmn:intermediateThrowEvent id="EndEvent_17h3h92" name="Go To Delete SDNC Service Topology">
+ <bpmn:incoming>SequenceFlow_1d5mzit</bpmn:incoming>
+ <bpmn:linkEventDefinition name="DeleteSDNCServiceTopology" />
+ </bpmn:intermediateThrowEvent>
+ <bpmn:intermediateCatchEvent id="StartEvent_1eo3c2a" name="Delete SDNC Service Topology">
+ <bpmn:outgoing>SequenceFlow_1yrkxjm</bpmn:outgoing>
+ <bpmn:linkEventDefinition name="DeleteSDNCServiceTopology" />
+ </bpmn:intermediateCatchEvent>
+ <bpmn:exclusiveGateway id="ExclusiveGateway_1jybr0n">
+ <bpmn:incoming>SequenceFlow_174yrgl</bpmn:incoming>
+ <bpmn:incoming>SequenceFlow_0lk19rm</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_0o21fg8</bpmn:outgoing>
+ </bpmn:exclusiveGateway>
+ <bpmn:sequenceFlow id="SequenceFlow_0o21fg8" sourceRef="ExclusiveGateway_1jybr0n" targetRef="EndEvent_17bzayo" />
+ <bpmn:scriptTask id="ScriptTask_12460xo" name="Sequense Resources" scriptFormat="groovy">
+ <bpmn:incoming>SequenceFlow_14dezx8</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_13nyd1j</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def ddrs = new DoDeleteResource()
+ddrs.sequenceResource(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ <bpmn:sequenceFlow id="SequenceFlow_13nyd1j" sourceRef="ScriptTask_12460xo" targetRef="ScriptTask_0ngvt9d" />
+ <bpmn:sequenceFlow id="SequenceFlow_14dezx8" sourceRef="Task_1ue68b0" targetRef="ScriptTask_12460xo" />
+ <bpmn:scriptTask id="Task_1ue68b0" name="Preprocess Incoming Request">
+ <bpmn:incoming>SequenceFlow_0stqur4</bpmn:incoming>
+ <bpmn:outgoing>SequenceFlow_14dezx8</bpmn:outgoing>
+ <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def ddrs = new DoDeleteResource()
+ddrs.preProcessRequest(execution)]]></bpmn:script>
+ </bpmn:scriptTask>
+ </bpmn:process>
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoDeleteResourceV1">
+ <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
+ <dc:Bounds x="-70" y="255" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="-89" y="291" width="76" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_0ngvt9d_di" bpmnElement="ScriptTask_0ngvt9d">
+ <dc:Bounds x="392" y="233" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_15zy0jf_di" bpmnElement="ScriptTask_15zy0jf">
+ <dc:Bounds x="587" y="233" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_1gf78zz_di" bpmnElement="ScriptTask_1gf78zz">
+ <dc:Bounds x="802" y="233" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ExclusiveGateway_0rtr0n7_di" bpmnElement="ExclusiveGateway_0rtr0n7" isMarkerVisible="true">
+ <dc:Bounds x="1011" y="248" width="50" height="50" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="999" y="302" width="75" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_0stqur4_di" bpmnElement="SequenceFlow_0stqur4">
+ <di:waypoint xsi:type="dc:Point" x="-34" y="273" />
+ <di:waypoint xsi:type="dc:Point" x="38" y="273" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="2" y="252" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1qm7owo_di" bpmnElement="SequenceFlow_1qm7owo">
+ <di:waypoint xsi:type="dc:Point" x="492" y="273" />
+ <di:waypoint xsi:type="dc:Point" x="587" y="273" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="539.5" y="252" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1ly5jrs_di" bpmnElement="SequenceFlow_1ly5jrs">
+ <di:waypoint xsi:type="dc:Point" x="687" y="273" />
+ <di:waypoint xsi:type="dc:Point" x="802" y="273" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="744.5" y="252" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0i1gez5_di" bpmnElement="SequenceFlow_0i1gez5">
+ <di:waypoint xsi:type="dc:Point" x="902" y="273" />
+ <di:waypoint xsi:type="dc:Point" x="1011" y="273" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="956.5" y="252" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1oil1t3_di" bpmnElement="SequenceFlow_1oil1t3">
+ <di:waypoint xsi:type="dc:Point" x="1036" y="298" />
+ <di:waypoint xsi:type="dc:Point" x="1036" y="418" />
+ <di:waypoint xsi:type="dc:Point" x="442" y="418" />
+ <di:waypoint xsi:type="dc:Point" x="442" y="313" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="731" y="397" width="16" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="SubProcess_0sbt4ns_di" bpmnElement="SubProcess_0sbt4ns" isExpanded="true">
+ <dc:Bounds x="453" y="815" width="467" height="193" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="StartEvent_1cjikl5_di" bpmnElement="StartEvent_1cjikl5">
+ <dc:Bounds x="523" y="884" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="406" y="925" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="EndEvent_0gh3mcj_di" bpmnElement="EndEvent_0gh3mcj">
+ <dc:Bounds x="816" y="884" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="699" y="925" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ScriptTask_0plexin_di" bpmnElement="ScriptTask_0plexin">
+ <dc:Bounds x="627" y="862" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_0rkycoj_di" bpmnElement="SequenceFlow_0rkycoj">
+ <di:waypoint xsi:type="dc:Point" x="559" y="902" />
+ <di:waypoint xsi:type="dc:Point" x="627" y="902" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="458" y="887" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_117fiux_di" bpmnElement="SequenceFlow_117fiux">
+ <di:waypoint xsi:type="dc:Point" x="727" y="902" />
+ <di:waypoint xsi:type="dc:Point" x="816" y="902" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="639.5" y="887" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ServiceTask_176j3rl_di" bpmnElement="ServiceTask_176j3rl">
+ <dc:Bounds x="604" y="566" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ExclusiveGateway_1x63i6w_di" bpmnElement="ExclusiveGateway_1x63i6w" isMarkerVisible="true">
+ <dc:Bounds x="396" y="581" width="50" height="50" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="379" y="635" width="84" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1yrkxjm_di" bpmnElement="SequenceFlow_1yrkxjm">
+ <di:waypoint xsi:type="dc:Point" x="269" y="606" />
+ <di:waypoint xsi:type="dc:Point" x="396" y="606" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="332.5" y="585" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="EndEvent_17bzayo_di" bpmnElement="EndEvent_17bzayo">
+ <dc:Bounds x="992.2009291521485" y="588" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="977" y="628" width="72" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_1s1nnmj_di" bpmnElement="SequenceFlow_1s1nnmj">
+ <di:waypoint xsi:type="dc:Point" x="446" y="606" />
+ <di:waypoint xsi:type="dc:Point" x="604" y="606" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="516" y="585" width="20" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_174yrgl_di" bpmnElement="SequenceFlow_174yrgl">
+ <di:waypoint xsi:type="dc:Point" x="704" y="606" />
+ <di:waypoint xsi:type="dc:Point" x="827" y="606" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="765.5" y="585" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_0lk19rm_di" bpmnElement="SequenceFlow_0lk19rm">
+ <di:waypoint xsi:type="dc:Point" x="421" y="631" />
+ <di:waypoint xsi:type="dc:Point" x="421" y="721" />
+ <di:waypoint xsi:type="dc:Point" x="852" y="721" />
+ <di:waypoint xsi:type="dc:Point" x="852" y="631" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="629" y="700" width="15" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_1d5mzit_di" bpmnElement="SequenceFlow_1d5mzit">
+ <di:waypoint xsi:type="dc:Point" x="1061" y="273" />
+ <di:waypoint xsi:type="dc:Point" x="1150" y="273" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="1105.5" y="252" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="IntermediateThrowEvent_122grb2_di" bpmnElement="EndEvent_17h3h92">
+ <dc:Bounds x="1150" y="255" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="1134" y="295" width="73" height="36" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="IntermediateCatchEvent_11q62m0_di" bpmnElement="StartEvent_1eo3c2a">
+ <dc:Bounds x="233" y="588" width="36" height="36" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="209" y="628" width="87" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="ExclusiveGateway_1jybr0n_di" bpmnElement="ExclusiveGateway_1jybr0n" isMarkerVisible="true">
+ <dc:Bounds x="827" y="581" width="50" height="50" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="815" y="635" width="75" height="24" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_0o21fg8_di" bpmnElement="SequenceFlow_0o21fg8">
+ <di:waypoint xsi:type="dc:Point" x="877" y="606" />
+ <di:waypoint xsi:type="dc:Point" x="992" y="606" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="934.5" y="585" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ScriptTask_12460xo_di" bpmnElement="ScriptTask_12460xo">
+ <dc:Bounds x="219" y="233" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="SequenceFlow_13nyd1j_di" bpmnElement="SequenceFlow_13nyd1j">
+ <di:waypoint xsi:type="dc:Point" x="319" y="273" />
+ <di:waypoint xsi:type="dc:Point" x="392" y="273" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="355.5" y="252" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNEdge id="SequenceFlow_14dezx8_di" bpmnElement="SequenceFlow_14dezx8">
+ <di:waypoint xsi:type="dc:Point" x="138" y="273" />
+ <di:waypoint xsi:type="dc:Point" x="219" y="273" />
+ <bpmndi:BPMNLabel>
+ <dc:Bounds x="178.5" y="252" width="0" height="12" />
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="ScriptTask_1tdnal8_di" bpmnElement="Task_1ue68b0">
+ <dc:Bounds x="38" y="233" width="100" height="80" />
+ </bpmndi:BPMNShape>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+</bpmn:definitions> \ No newline at end of file