2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.so.bpmn.infrastructure.scripts
25 import org.apache.commons.lang3.*
26 import org.camunda.bpm.engine.delegate.BpmnError
27 import org.camunda.bpm.engine.delegate.DelegateExecution
28 import org.onap.aai.domain.yang.AllottedResource
29 import org.onap.aai.domain.yang.Relationship
30 import org.onap.aai.domain.yang.RelationshipData
31 import org.onap.so.bpmn.common.recipe.ResourceInput
32 import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
33 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
34 import org.onap.so.bpmn.common.scripts.ExceptionUtil
35 import org.onap.so.bpmn.common.scripts.MsoUtils
36 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
37 import org.onap.so.bpmn.core.domain.ModelInfo
38 import org.onap.so.bpmn.core.domain.ResourceType
39 import org.onap.so.bpmn.core.json.JsonUtils
40 import org.onap.so.bpmn.core.UrnPropertiesReader
41 import org.onap.so.client.aai.AAIObjectType
42 import org.onap.so.client.aai.AAIResourcesClient
43 import org.onap.so.client.aai.entities.AAIResultWrapper
44 import org.onap.so.client.aai.entities.uri.AAIResourceUri
45 import org.onap.so.client.aai.entities.uri.AAIUriFactory
46 import org.slf4j.Logger
47 import org.slf4j.LoggerFactory
49 import javax.ws.rs.NotFoundException
51 import static org.apache.commons.lang3.StringUtils.*
54 * This groovy class supports the <class>DeleteSDNCCNetworkResource.bpmn</class> process.
55 * flow for SDNC Network Resource
57 public class DeleteSDNCNetworkResource extends AbstractServiceTaskProcessor {
58 private static final Logger logger = LoggerFactory.getLogger( DeleteSDNCNetworkResource.class);
60 String Prefix="DELSDNCRES_"
62 ExceptionUtil exceptionUtil = new ExceptionUtil()
64 JsonUtils jsonUtil = new JsonUtils()
66 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
68 MsoUtils msoUtils = new MsoUtils()
70 void preProcessRequest(DelegateExecution execution){
71 logger.info(" ***** Started preProcessRequest *****")
74 //get bpmn inputs from resource request.
75 String requestId = execution.getVariable("mso-request-id")
76 String requestAction = execution.getVariable("requestAction")
77 logger.info("The requestAction is: " + requestAction)
78 String recipeParamsFromRequest = execution.getVariable("recipeParams")
79 logger.info("The recipeParams is: " + recipeParamsFromRequest)
80 String resourceInput = execution.getVariable("resourceInput")
81 logger.info("The resourceInput is: " + resourceInput)
82 //Get ResourceInput Object
83 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
84 execution.setVariable(Prefix + "resourceInput", resourceInputObj)
86 //Deal with recipeParams
87 String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
88 String resourceModelName = resourceInputObj.getResourceModelInfo().getModelName()
89 String resourceInstanceId = resourceInputObj.getResourceInstancenUuid()
90 String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
91 String serviceType = resourceInputObj.getServiceType()
92 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
94 // fetch parent instance id for allotted resources
95 String modelType = resourceInputObj.getResourceModelInfo().getModelType()
97 // sdwanvpnattachment or sotnvpnattachment
98 case "ALLOTTED_RESOURCE":
99 String parentServiceId = fetchParentServiceInstance(globalCustomerId, serviceType, serviceInstanceId, resourceInstanceId)
100 if (null != parentServiceId) {
101 execution.setVariable("allotedParentServiceInstanceId", parentServiceId)
103 logger.warn("Alloted Resource ParentServiceInstanceId not found in AAI response for allotedId: " + resourceInstanceId)
110 //For sdnc requestAction default is "NetworkInstance"
111 String operationType = "Network"
112 if(!StringUtils.isBlank(recipeParamsFromRequest) && "null" != recipeParamsFromRequest){
113 //the operationType from worflow(first node) is second priority.
114 operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
116 if(!StringUtils.isBlank(recipeParamsFromWf)){
117 //the operationType from worflow(first node) is highest priority.
118 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
120 String operationTypeFromConfig = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() + ".operation-type")
121 if (StringUtils.isNotEmpty(operationTypeFromConfig)) {
122 // highest priority if operation type configured
123 operationType = operationTypeFromConfig
127 //For sdnc, generate svc_action and request_action
128 String sdnc_svcAction = "delete"
129 String sdnc_requestAction = StringUtils.capitalize(sdnc_svcAction) + operationType + "Instance"
130 String isActivateRequired = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() + ".activation-required")
131 execution.setVariable("isActivateRequired", isActivateRequired)
132 execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
133 execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
134 execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
135 execution.setVariable("mso-request-id", requestId)
136 execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
137 } catch (BpmnError e) {
139 } catch (Exception ex){
140 String msg = "Exception in preProcessRequest " + ex.getMessage()
142 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
144 logger.info(" ***** Exit preProcessRequest *****")
147 private String fetchParentServiceInstance(String globalCustId, String serviceType, String serviceInstanceId, String allotedResourceId ) {
148 logger.trace("Entered fetchParentServiceInstance")
150 String parentServiceId = "";
151 AAIResourcesClient resourceClient = new AAIResourcesClient();
152 AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIObjectType.ALLOTTED_RESOURCE, globalCustId, serviceType, serviceInstanceId, allotedResourceId)
153 AAIResultWrapper aaiResult = resourceClient.get(serviceInstanceUri, NotFoundException.class)
154 Optional<AllottedResource> si = aaiResult.asBean(AllottedResource.class)
155 if((si.present) && (null != si.get().getRelationshipList()) && (null != si.get().getRelationshipList().getRelationship())) {
156 logger.debug("SI Data relationship-list exists")
157 List<Relationship> relationshipList = si.get().getRelationshipList().getRelationship()
158 for (Relationship relationship : relationshipList) {
159 String rt = relationship.getRelatedTo()
160 List<RelationshipData> rl_datas = relationship.getRelationshipData()
161 if(rt.equals("service-instance") ){
162 for (RelationshipData rl_data : rl_datas) {
163 String eKey = rl_data.getRelationshipKey()
164 String eValue = rl_data.getRelationshipValue()
165 if(eKey.equals("service-instance.service-instance-id") && (!eValue.equals(serviceInstanceId))){
173 logger.trace("Exited fetchParentServiceInstance")
175 logger.debug("Error occured within deleteServiceInstance method: " + e)
176 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Error occured during deleteServiceInstance from aai")
182 * Pre Process the BPMN Flow Request
184 * generate the nsOperationKey
185 * generate the nsParameters
187 void prepareSDNCRequest (DelegateExecution execution) {
188 logger.info(" ***** Started prepareSDNCRequest *****")
192 String sdnc_svcAction = execution.getVariable(Prefix + "svcAction")
193 String sdnc_requestAction = execution.getVariable(Prefix + "requestAction")
194 String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
195 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
197 String hdrRequestId = execution.getVariable("mso-request-id")
198 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
199 String source = execution.getVariable("source")
200 String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
201 String resourceInput = execution.getVariable(Prefix + "resourceInput")
202 logger.info("The resourceInput is: " + resourceInput)
203 String allotedParentServiceInstanceId = execution.getVariable("allotedParentServiceInstanceId")
204 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
205 String serviceType = resourceInputObj.getServiceType()
206 String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
207 String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
208 String serviceModelVersion = resourceInputObj.getServiceModelInfo().getModelVersion()
209 String serviceModelName = resourceInputObj.getServiceModelInfo().getModelName()
210 String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
211 String modelInvariantUuid = resourceInputObj.getResourceModelInfo().getModelInvariantUuid();
212 String modelCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
213 String modelUuid = resourceInputObj.getResourceModelInfo().getModelUuid()
214 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
215 String modelVersion = resourceInputObj.getResourceModelInfo().getModelVersion()
216 String resourceInstnaceId = resourceInputObj.getResourceInstancenUuid()
217 String modelType = resourceInputObj.getResourceModelInfo().getModelType()
219 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
220 String sdncTopologyDeleteRequest = ""
224 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
225 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
226 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
227 <sdncadapter:RequestHeader>
228 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
229 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
230 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
231 <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
232 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
233 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
234 </sdncadapter:RequestHeader>
235 <sdncadapterworkflow:SDNCRequestData>
236 <request-information>
237 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
238 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
239 <source>${msoUtils.xmlEscape(source)}</source>
240 <notification-url></notification-url>
241 <order-number></order-number>
242 <order-version></order-version>
243 </request-information>
244 <service-information>
245 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
246 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
247 <onap-model-information>
248 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
249 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
250 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
251 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
252 </onap-model-information>
253 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
254 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
255 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
256 </service-information>
258 <vnf-id>$resourceInstnaceId</vnf-id>
259 <vnf-type></vnf-type>
260 <onap-model-information>
261 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
262 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
263 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
264 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
265 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
266 </onap-model-information>
269 <vnf-input-parameters>
270 </vnf-input-parameters>
271 <request-version></request-version>
272 <vnf-name></vnf-name>
276 </sdncadapterworkflow:SDNCRequestData>
277 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
280 //When a new resource creation request reaches SO, the parent resources information needs to be provided
281 //while creating the child resource.
282 String vnfid = resourceInputObj.getVnfId()
283 ModelInfo vfModelInfo = resourceInputObj.getVfModelInfo()
284 String vnfmodelInvariantUuid = vfModelInfo.getModelInvariantUuid()
285 String vnfmodelCustomizationUuid = vfModelInfo.getModelCustomizationUuid()
286 String vnfmodelUuid = vfModelInfo.getModelUuid()
287 String vnfmodelVersion = vfModelInfo.getModelVersion()
288 String vnfmodelName = vfModelInfo.getModelName()
290 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
291 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
292 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
293 <sdncadapter:RequestHeader>
294 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
295 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
296 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
297 <sdncadapter:SvcOperation>vf-module-topology-operation</sdncadapter:SvcOperation>
298 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
299 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
300 </sdncadapter:RequestHeader>
301 <sdncadapterworkflow:SDNCRequestData>
302 <request-information>
303 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
304 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
305 <source>${msoUtils.xmlEscape(source)}</source>
306 <notification-url></notification-url>
307 <order-number></order-number>
308 <order-version></order-version>
309 </request-information>
310 <service-information>
311 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
312 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
313 <onap-model-information>
314 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
315 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
316 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
317 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
318 </onap-model-information>
319 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
320 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
321 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
322 </service-information>
324 <vnf-id>$vnfid</vnf-id>
325 <vnf-type></vnf-type>
326 <onap-model-information>
327 <model-invariant-uuid>${msoUtils.xmlEscape(vnfmodelInvariantUuid)}</model-invariant-uuid>
328 <model-customization-uuid>${msoUtils.xmlEscape(vnfmodelCustomizationUuid)}</model-customization-uuid>
329 <model-uuid>${msoUtils.xmlEscape(vnfmodelUuid)}</model-uuid>
330 <model-version>${msoUtils.xmlEscape(vnfmodelVersion)}</model-version>
331 <model-name>${msoUtils.xmlEscape(vnfmodelName)}</model-name>
332 </onap-model-information>
334 <vf-module-information>
335 <vf-module-id>$resourceInstnaceId</vf-module-id>
336 <vf-module-type></vf-module-type>
337 <from-preload>false</from-preload>
338 <onap-model-information>
339 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
340 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
341 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
342 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
343 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
344 </onap-model-information>
345 </vf-module-information>
346 <vf-module-request-input>
347 <vf-module-input-parameters>
348 </vf-module-input-parameters>
349 </vf-module-request-input>
350 </sdncadapterworkflow:SDNCRequestData>
351 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
354 // sdwanvpnattachment or sotnvpnattachment
355 case "ALLOTTED_RESOURCE" :
356 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
357 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
358 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
359 <sdncadapter:RequestHeader>
360 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
361 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
362 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
363 <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
364 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
365 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
366 </sdncadapter:RequestHeader>
367 <sdncadapterworkflow:SDNCRequestData>
368 <request-information>
369 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
370 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
371 <source>${msoUtils.xmlEscape(source)}</source>
372 <notification-url></notification-url>
373 <order-number></order-number>
374 <order-version></order-version>
375 </request-information>
376 <service-information>
377 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
378 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
379 <onap-model-information>
380 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
381 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
382 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
383 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
384 </onap-model-information>
385 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
386 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
387 <subscriber-name></subscriber-name>
388 </service-information>
389 <allotted-resource-information>
390 <allotted-resource-id>$resourceInstnaceId</allotted-resource-id>
391 <allotted-resource-type></allotted-resource-type>
392 <parent-service-instance-id>$allotedParentServiceInstanceId</parent-service-instance-id>
393 <onap-model-information>
394 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
395 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
396 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
397 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
398 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
399 </onap-model-information>
400 </allotted-resource-information>
401 <connection-attachment-request-input>
402 </connection-attachment-request-input>
403 </sdncadapterworkflow:SDNCRequestData>
404 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
408 // for SDWANConnectivity and SOTNConnectivity:
410 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
411 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
412 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
413 <sdncadapter:RequestHeader>
414 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
415 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
416 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
417 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
418 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
419 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
420 </sdncadapter:RequestHeader>
421 <sdncadapterworkflow:SDNCRequestData>
422 <request-information>
423 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
424 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
425 <source>${msoUtils.xmlEscape(source)}</source>
426 <notification-url></notification-url>
427 <order-number></order-number>
428 <order-version></order-version>
429 </request-information>
430 <service-information>
431 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
432 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
433 <onap-model-information>
434 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
435 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
436 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
437 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
438 </onap-model-information>
439 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
440 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
441 </service-information>
442 <network-information>
443 <network-id>$resourceInstnaceId</network-id>
444 <onap-model-information>
445 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
446 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
447 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
448 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
449 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
450 </onap-model-information>
451 </network-information>
452 <network-request-input>
453 <network-input-parameters></network-input-parameters>
454 </network-request-input>
455 </sdncadapterworkflow:SDNCRequestData>
456 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
459 String sdncTopologyDeleteRequesAsString = utils.formatXml(sdncTopologyDeleteRequest)
460 execution.setVariable("sdncAdapterWorkflowRequest", sdncTopologyDeleteRequesAsString)
461 logger.info("sdncAdapterWorkflowRequest - " + "\n" + sdncTopologyDeleteRequesAsString)
463 } catch (Exception ex) {
464 String exceptionMessage = " Bpmn error encountered in DeleteSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
465 logger.debug( exceptionMessage)
466 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
469 logger.info(" ***** Exit prepareSDNCRequest *****")
472 private void setProgressUpdateVariables(DelegateExecution execution, String body) {
473 def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
474 execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
475 execution.setVariable("CVFMI_updateResOperStatusRequest", body)
478 void prepareUpdateBeforeDeleteSDNCResource(DelegateExecution execution) {
479 logger.debug(" *** prepareUpdateBeforeDeleteSDNCResource *** ")
480 String resourceInput = execution.getVariable(Prefix + "resourceInput");
481 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
482 String operType = resourceInputObj.getOperationType()
483 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
484 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
485 String operationId = resourceInputObj.getOperationId()
486 String progress = "20"
487 String status = "processing"
488 String statusDescription = "SDCN resource delete invoked"
490 //String operationId = execution.getVariable("operationId")
493 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
494 xmlns:ns="http://org.onap.so/requestsdb">
497 <ns:updateResourceOperationStatus>
498 <operType>${msoUtils.xmlEscape(operType)}</operType>
499 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
500 <progress>${msoUtils.xmlEscape(progress)}</progress>
501 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
502 <serviceId>${msoUtils.xmlEscape(serviceInstanceId)}</serviceId>
503 <status>${msoUtils.xmlEscape(status)}</status>
504 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
505 </ns:updateResourceOperationStatus>
507 </soapenv:Envelope>""";
509 setProgressUpdateVariables(execution, body)
510 logger.debug(" ***** Exit prepareUpdateBeforeDeleteSDNCResource *****")
514 void prepareUpdateAfterDeleteSDNCResource(DelegateExecution execution) {
515 logger.debug(" *** prepareUpdateAfterDeleteSDNCResource *** ")
516 String resourceInput = execution.getVariable(Prefix + "resourceInput");
517 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
518 String operType = resourceInputObj.getOperationType()
519 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
520 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
521 String operationId = resourceInputObj.getOperationId()
522 String progress = "100"
523 String status = "finished"
524 String statusDescription = "SDCN resource delete and deactivation completed"
526 //String operationId = execution.getVariable("operationId")
529 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
530 xmlns:ns="http://org.onap.so/requestsdb">
533 <ns:updateResourceOperationStatus>
534 <operType>${msoUtils.xmlEscape(operType)}</operType>
535 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
536 <progress>${msoUtils.xmlEscape(progress)}</progress>
537 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
538 <serviceId>${msoUtils.xmlEscape(serviceInstanceId)}</serviceId>
539 <status>${msoUtils.xmlEscape(status)}</status>
540 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
541 </ns:updateResourceOperationStatus>
543 </soapenv:Envelope>""";
545 setProgressUpdateVariables(execution, body)
546 logger.debug(" ***** Exit prepareUpdateAfterDeleteSDNCResource *****")
549 void postDeleteSDNCCall(DelegateExecution execution){
550 logger.info(" ***** Started postDeleteSDNCCall *****")
551 String responseCode = execution.getVariable(Prefix + "sdncDeleteReturnCode")
552 String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
554 logger.info("response from sdnc, response code :" + responseCode + " response object :" + responseObj)
555 logger.info(" ***** Exit postDeleteSDNCCall *****")
558 void sendSyncResponse (DelegateExecution execution) {
559 logger.debug( " *** sendSyncResponse *** ")
562 String operationStatus = "finished"
563 // RESTResponse for main flow
564 String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
565 logger.debug( " sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
566 sendWorkflowResponse(execution, 202, resourceOperationResp)
567 execution.setVariable("sentSyncResponse", true)
569 } catch (Exception ex) {
570 String msg = "Exception in sendSyncResponse:" + ex.getMessage()
572 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
574 logger.debug(" ***** Exit sendSyncResponse *****")