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.aaiclient.client.aai.AAIObjectType
42 import org.onap.aaiclient.client.aai.AAIResourcesClient
43 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
44 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
45 import org.onap.aaiclient.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 if(modelName.contains("UNI") && "MDONS_OTN".equals(serviceType)){
225 String serviceInstanceName = resourceInputObj.getResourceInstanceName()
226 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
227 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
228 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
229 <sdncadapter:RequestHeader>
230 <sdncadapter:RequestId>${MsoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
231 <sdncadapter:SvcInstanceId>${MsoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
232 <sdncadapter:SvcAction>${MsoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
233 <sdncadapter:SvcOperation>optical-service-delete</sdncadapter:SvcOperation>
234 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
235 <sdncadapter:MsoAction>opticalservice</sdncadapter:MsoAction>
236 </sdncadapter:RequestHeader>
237 <sdncadapterworkflow:SDNCRequestData>
238 <request-id>${msoUtils.xmlEscape(serviceInstanceId)}</request-id>
241 <name>service-name</name>
242 <value>${msoUtils.xmlEscape(serviceInstanceName)}</value>
245 </sdncadapterworkflow:SDNCRequestData>
246 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
248 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
249 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
250 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
251 <sdncadapter:RequestHeader>
252 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
253 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
254 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
255 <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
256 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
257 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
258 </sdncadapter:RequestHeader>
259 <sdncadapterworkflow:SDNCRequestData>
260 <request-information>
261 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
262 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
263 <source>${msoUtils.xmlEscape(source)}</source>
264 <notification-url></notification-url>
265 <order-number></order-number>
266 <order-version></order-version>
267 </request-information>
268 <service-information>
269 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
270 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
271 <onap-model-information>
272 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
273 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
274 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
275 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
276 </onap-model-information>
277 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
278 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
279 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
280 </service-information>
282 <vnf-id>$resourceInstnaceId</vnf-id>
283 <vnf-type></vnf-type>
284 <onap-model-information>
285 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
286 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
287 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
288 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
289 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
290 </onap-model-information>
293 <vnf-input-parameters>
294 </vnf-input-parameters>
295 <request-version></request-version>
296 <vnf-name></vnf-name>
300 </sdncadapterworkflow:SDNCRequestData>
301 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
305 //When a new resource creation request reaches SO, the parent resources information needs to be provided
306 //while creating the child resource.
307 String vnfid = resourceInputObj.getVnfId()
308 ModelInfo vfModelInfo = resourceInputObj.getVfModelInfo()
309 String vnfmodelInvariantUuid = vfModelInfo.getModelInvariantUuid()
310 String vnfmodelCustomizationUuid = vfModelInfo.getModelCustomizationUuid()
311 String vnfmodelUuid = vfModelInfo.getModelUuid()
312 String vnfmodelVersion = vfModelInfo.getModelVersion()
313 String vnfmodelName = vfModelInfo.getModelName()
315 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
316 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
317 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
318 <sdncadapter:RequestHeader>
319 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
320 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
321 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
322 <sdncadapter:SvcOperation>vf-module-topology-operation</sdncadapter:SvcOperation>
323 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
324 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
325 </sdncadapter:RequestHeader>
326 <sdncadapterworkflow:SDNCRequestData>
327 <request-information>
328 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
329 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
330 <source>${msoUtils.xmlEscape(source)}</source>
331 <notification-url></notification-url>
332 <order-number></order-number>
333 <order-version></order-version>
334 </request-information>
335 <service-information>
336 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
337 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
338 <onap-model-information>
339 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
340 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
341 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
342 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
343 </onap-model-information>
344 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
345 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
346 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
347 </service-information>
349 <vnf-id>$vnfid</vnf-id>
350 <vnf-type></vnf-type>
351 <onap-model-information>
352 <model-invariant-uuid>${msoUtils.xmlEscape(vnfmodelInvariantUuid)}</model-invariant-uuid>
353 <model-customization-uuid>${msoUtils.xmlEscape(vnfmodelCustomizationUuid)}</model-customization-uuid>
354 <model-uuid>${msoUtils.xmlEscape(vnfmodelUuid)}</model-uuid>
355 <model-version>${msoUtils.xmlEscape(vnfmodelVersion)}</model-version>
356 <model-name>${msoUtils.xmlEscape(vnfmodelName)}</model-name>
357 </onap-model-information>
359 <vf-module-information>
360 <vf-module-id>$resourceInstnaceId</vf-module-id>
361 <vf-module-type></vf-module-type>
362 <from-preload>false</from-preload>
363 <onap-model-information>
364 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
365 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
366 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
367 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
368 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
369 </onap-model-information>
370 </vf-module-information>
371 <vf-module-request-input>
372 <vf-module-input-parameters>
373 </vf-module-input-parameters>
374 </vf-module-request-input>
375 </sdncadapterworkflow:SDNCRequestData>
376 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
379 // sdwanvpnattachment or sotnvpnattachment
380 case "ALLOTTED_RESOURCE" :
381 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
382 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
383 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
384 <sdncadapter:RequestHeader>
385 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
386 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
387 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
388 <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
389 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
390 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
391 </sdncadapter:RequestHeader>
392 <sdncadapterworkflow:SDNCRequestData>
393 <request-information>
394 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
395 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
396 <source>${msoUtils.xmlEscape(source)}</source>
397 <notification-url></notification-url>
398 <order-number></order-number>
399 <order-version></order-version>
400 </request-information>
401 <service-information>
402 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
403 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
404 <onap-model-information>
405 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
406 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
407 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
408 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
409 </onap-model-information>
410 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
411 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
412 <subscriber-name></subscriber-name>
413 </service-information>
414 <allotted-resource-information>
415 <allotted-resource-id>$resourceInstnaceId</allotted-resource-id>
416 <allotted-resource-type></allotted-resource-type>
417 <parent-service-instance-id>$allotedParentServiceInstanceId</parent-service-instance-id>
418 <onap-model-information>
419 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
420 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
421 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
422 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
423 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
424 </onap-model-information>
425 </allotted-resource-information>
426 <connection-attachment-request-input>
427 </connection-attachment-request-input>
428 </sdncadapterworkflow:SDNCRequestData>
429 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
433 // for SDWANConnectivity and SOTNConnectivity:
435 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
436 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
437 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
438 <sdncadapter:RequestHeader>
439 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
440 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
441 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
442 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
443 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
444 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
445 </sdncadapter:RequestHeader>
446 <sdncadapterworkflow:SDNCRequestData>
447 <request-information>
448 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
449 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
450 <source>${msoUtils.xmlEscape(source)}</source>
451 <notification-url></notification-url>
452 <order-number></order-number>
453 <order-version></order-version>
454 </request-information>
455 <service-information>
456 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
457 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
458 <onap-model-information>
459 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
460 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
461 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
462 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
463 </onap-model-information>
464 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
465 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
466 </service-information>
467 <network-information>
468 <network-id>$resourceInstnaceId</network-id>
469 <onap-model-information>
470 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
471 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
472 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
473 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
474 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
475 </onap-model-information>
476 </network-information>
477 <network-request-input>
478 <network-input-parameters></network-input-parameters>
479 </network-request-input>
480 </sdncadapterworkflow:SDNCRequestData>
481 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
484 String sdncTopologyDeleteRequesAsString = utils.formatXml(sdncTopologyDeleteRequest)
485 execution.setVariable("sdncAdapterWorkflowRequest", sdncTopologyDeleteRequesAsString)
486 logger.info("sdncAdapterWorkflowRequest - " + "\n" + sdncTopologyDeleteRequesAsString)
488 } catch (Exception ex) {
489 String exceptionMessage = " Bpmn error encountered in DeleteSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
490 logger.debug( exceptionMessage)
491 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
494 logger.info(" ***** Exit prepareSDNCRequest *****")
497 private void setProgressUpdateVariables(DelegateExecution execution, String body) {
498 def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
499 execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
500 execution.setVariable("CVFMI_updateResOperStatusRequest", body)
503 void prepareUpdateBeforeDeleteSDNCResource(DelegateExecution execution) {
504 logger.debug(" *** prepareUpdateBeforeDeleteSDNCResource *** ")
505 String resourceInput = execution.getVariable(Prefix + "resourceInput");
506 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
507 String operType = resourceInputObj.getOperationType()
508 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
509 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
510 String operationId = resourceInputObj.getOperationId()
511 String progress = "20"
512 String status = "processing"
513 String statusDescription = "SDCN resource delete invoked"
515 //String operationId = execution.getVariable("operationId")
518 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
519 xmlns:ns="http://org.onap.so/requestsdb">
522 <ns:updateResourceOperationStatus>
523 <operType>${msoUtils.xmlEscape(operType)}</operType>
524 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
525 <progress>${msoUtils.xmlEscape(progress)}</progress>
526 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
527 <serviceId>${msoUtils.xmlEscape(serviceInstanceId)}</serviceId>
528 <status>${msoUtils.xmlEscape(status)}</status>
529 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
530 </ns:updateResourceOperationStatus>
532 </soapenv:Envelope>""";
534 setProgressUpdateVariables(execution, body)
535 logger.debug(" ***** Exit prepareUpdateBeforeDeleteSDNCResource *****")
539 void prepareUpdateAfterDeleteSDNCResource(DelegateExecution execution) {
540 logger.debug(" *** prepareUpdateAfterDeleteSDNCResource *** ")
541 String resourceInput = execution.getVariable(Prefix + "resourceInput");
542 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
543 String operType = resourceInputObj.getOperationType()
544 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
545 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
546 String operationId = resourceInputObj.getOperationId()
547 String progress = "100"
548 String status = "finished"
549 String statusDescription = "SDCN resource delete and deactivation completed"
551 //String operationId = execution.getVariable("operationId")
554 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
555 xmlns:ns="http://org.onap.so/requestsdb">
558 <ns:updateResourceOperationStatus>
559 <operType>${msoUtils.xmlEscape(operType)}</operType>
560 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
561 <progress>${msoUtils.xmlEscape(progress)}</progress>
562 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
563 <serviceId>${msoUtils.xmlEscape(serviceInstanceId)}</serviceId>
564 <status>${msoUtils.xmlEscape(status)}</status>
565 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
566 </ns:updateResourceOperationStatus>
568 </soapenv:Envelope>""";
570 setProgressUpdateVariables(execution, body)
571 logger.debug(" ***** Exit prepareUpdateAfterDeleteSDNCResource *****")
574 void postDeleteSDNCCall(DelegateExecution execution){
575 logger.info(" ***** Started postDeleteSDNCCall *****")
576 String responseCode = execution.getVariable(Prefix + "sdncDeleteReturnCode")
577 String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
579 logger.info("response from sdnc, response code :" + responseCode + " response object :" + responseObj)
580 logger.info(" ***** Exit postDeleteSDNCCall *****")
583 void sendSyncResponse (DelegateExecution execution) {
584 logger.debug( " *** sendSyncResponse *** ")
587 String operationStatus = "finished"
588 // RESTResponse for main flow
589 String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
590 logger.debug( " sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
591 sendWorkflowResponse(execution, 202, resourceOperationResp)
592 execution.setVariable("sentSyncResponse", true)
594 } catch (Exception ex) {
595 String msg = "Exception in sendSyncResponse:" + ex.getMessage()
597 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
599 logger.debug(" ***** Exit sendSyncResponse *****")