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.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
47 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types
48 import org.slf4j.Logger
49 import org.slf4j.LoggerFactory
51 import javax.ws.rs.NotFoundException
53 import static org.apache.commons.lang3.StringUtils.*
56 * This groovy class supports the <class>DeleteSDNCCNetworkResource.bpmn</class> process.
57 * flow for SDNC Network Resource
59 public class DeleteSDNCNetworkResource extends AbstractServiceTaskProcessor {
60 private static final Logger logger = LoggerFactory.getLogger( DeleteSDNCNetworkResource.class);
62 String Prefix="DELSDNCRES_"
64 ExceptionUtil exceptionUtil = new ExceptionUtil()
66 JsonUtils jsonUtil = new JsonUtils()
68 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
70 MsoUtils msoUtils = new MsoUtils()
72 void preProcessRequest(DelegateExecution execution){
73 logger.info(" ***** Started preProcessRequest *****")
76 //get bpmn inputs from resource request.
77 String requestId = execution.getVariable("mso-request-id")
78 String requestAction = execution.getVariable("requestAction")
79 logger.info("The requestAction is: " + requestAction)
80 String recipeParamsFromRequest = execution.getVariable("recipeParams")
81 logger.info("The recipeParams is: " + recipeParamsFromRequest)
82 String resourceInput = execution.getVariable("resourceInput")
83 logger.info("The resourceInput is: " + resourceInput)
84 //Get ResourceInput Object
85 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
86 execution.setVariable(Prefix + "resourceInput", resourceInputObj)
88 //Deal with recipeParams
89 String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
90 String resourceModelName = resourceInputObj.getResourceModelInfo().getModelName()
91 String resourceInstanceId = resourceInputObj.getResourceInstancenUuid()
92 String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
93 String serviceType = resourceInputObj.getServiceType()
94 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
96 // fetch parent instance id for allotted resources
97 String modelType = resourceInputObj.getResourceModelInfo().getModelType()
99 // sdwanvpnattachment or sotnvpnattachment
100 case "ALLOTTED_RESOURCE":
101 String parentServiceId = fetchParentServiceInstance(globalCustomerId, serviceType, serviceInstanceId, resourceInstanceId)
102 if (null != parentServiceId) {
103 execution.setVariable("allotedParentServiceInstanceId", parentServiceId)
105 logger.warn("Alloted Resource ParentServiceInstanceId not found in AAI response for allotedId: " + resourceInstanceId)
112 //For sdnc requestAction default is "NetworkInstance"
113 String operationType = "Network"
114 if(!StringUtils.isBlank(recipeParamsFromRequest) && "null" != recipeParamsFromRequest){
115 //the operationType from worflow(first node) is second priority.
116 operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
118 if(!StringUtils.isBlank(recipeParamsFromWf)){
119 //the operationType from worflow(first node) is highest priority.
120 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
122 String operationTypeFromConfig = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() + ".operation-type")
123 if (StringUtils.isNotEmpty(operationTypeFromConfig)) {
124 // highest priority if operation type configured
125 operationType = operationTypeFromConfig
129 //For sdnc, generate svc_action and request_action
130 String sdnc_svcAction = "delete"
131 String sdnc_requestAction = StringUtils.capitalize(sdnc_svcAction) + operationType + "Instance"
132 String isActivateRequired = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() + ".activation-required")
133 execution.setVariable("isActivateRequired", isActivateRequired)
134 execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
135 execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
136 execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
137 execution.setVariable("mso-request-id", requestId)
138 execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
139 } catch (BpmnError e) {
141 } catch (Exception ex){
142 String msg = "Exception in preProcessRequest " + ex.getMessage()
144 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
146 logger.info(" ***** Exit preProcessRequest *****")
149 private String fetchParentServiceInstance(String globalCustId, String serviceType, String serviceInstanceId, String allotedResourceId ) {
150 logger.trace("Entered fetchParentServiceInstance")
152 String parentServiceId = "";
153 AAIResourcesClient resourceClient = new AAIResourcesClient();
154 AAIResourceUri serviceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(globalCustId).serviceSubscription(serviceType).serviceInstance(serviceInstanceId).allottedResource(allotedResourceId))
155 AAIResultWrapper aaiResult = resourceClient.get(serviceInstanceUri, NotFoundException.class)
156 Optional<AllottedResource> si = aaiResult.asBean(AllottedResource.class)
157 if((si.present) && (null != si.get().getRelationshipList()) && (null != si.get().getRelationshipList().getRelationship())) {
158 logger.debug("SI Data relationship-list exists")
159 List<Relationship> relationshipList = si.get().getRelationshipList().getRelationship()
160 for (Relationship relationship : relationshipList) {
161 String rt = relationship.getRelatedTo()
162 List<RelationshipData> rl_datas = relationship.getRelationshipData()
163 if(rt.equals("service-instance") ){
164 for (RelationshipData rl_data : rl_datas) {
165 String eKey = rl_data.getRelationshipKey()
166 String eValue = rl_data.getRelationshipValue()
167 if(eKey.equals("service-instance.service-instance-id") && (!eValue.equals(serviceInstanceId))){
175 logger.trace("Exited fetchParentServiceInstance")
177 logger.debug("Error occured within deleteServiceInstance method: " + e)
178 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Error occured during deleteServiceInstance from aai")
184 * Pre Process the BPMN Flow Request
186 * generate the nsOperationKey
187 * generate the nsParameters
189 void prepareSDNCRequest (DelegateExecution execution) {
190 logger.info(" ***** Started prepareSDNCRequest *****")
194 String sdnc_svcAction = execution.getVariable(Prefix + "svcAction")
195 String sdnc_requestAction = execution.getVariable(Prefix + "requestAction")
196 String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
197 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
199 String hdrRequestId = execution.getVariable("mso-request-id")
200 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
201 String source = execution.getVariable("source")
202 String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
203 String resourceInput = execution.getVariable(Prefix + "resourceInput")
204 logger.info("The resourceInput is: " + resourceInput)
205 String allotedParentServiceInstanceId = execution.getVariable("allotedParentServiceInstanceId")
206 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
207 String serviceType = resourceInputObj.getServiceType()
208 String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
209 String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
210 String serviceModelVersion = resourceInputObj.getServiceModelInfo().getModelVersion()
211 String serviceModelName = resourceInputObj.getServiceModelInfo().getModelName()
212 String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
213 String modelInvariantUuid = resourceInputObj.getResourceModelInfo().getModelInvariantUuid();
214 String modelCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
215 String modelUuid = resourceInputObj.getResourceModelInfo().getModelUuid()
216 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
217 String modelVersion = resourceInputObj.getResourceModelInfo().getModelVersion()
218 String resourceInstnaceId = resourceInputObj.getResourceInstancenUuid()
219 String modelType = resourceInputObj.getResourceModelInfo().getModelType()
221 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
222 String sdncTopologyDeleteRequest = ""
226 if(modelName.contains("UNI") && "MDONS_OTN".equals(serviceType)){
227 String serviceInstanceName = resourceInputObj.getResourceInstanceName()
228 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
229 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
230 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
231 <sdncadapter:RequestHeader>
232 <sdncadapter:RequestId>${MsoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
233 <sdncadapter:SvcInstanceId>${MsoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
234 <sdncadapter:SvcAction>${MsoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
235 <sdncadapter:SvcOperation>optical-service-delete</sdncadapter:SvcOperation>
236 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
237 <sdncadapter:MsoAction>opticalservice</sdncadapter:MsoAction>
238 </sdncadapter:RequestHeader>
239 <sdncadapterworkflow:SDNCRequestData>
240 <request-id>${msoUtils.xmlEscape(serviceInstanceId)}</request-id>
243 <name>service-name</name>
244 <value>${msoUtils.xmlEscape(serviceInstanceName)}</value>
247 </sdncadapterworkflow:SDNCRequestData>
248 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
250 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
251 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
252 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
253 <sdncadapter:RequestHeader>
254 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
255 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
256 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
257 <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
258 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
259 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
260 </sdncadapter:RequestHeader>
261 <sdncadapterworkflow:SDNCRequestData>
262 <request-information>
263 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
264 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
265 <source>${msoUtils.xmlEscape(source)}</source>
266 <notification-url></notification-url>
267 <order-number></order-number>
268 <order-version></order-version>
269 </request-information>
270 <service-information>
271 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
272 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
273 <onap-model-information>
274 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
275 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
276 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
277 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
278 </onap-model-information>
279 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
280 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
281 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
282 </service-information>
284 <vnf-id>$resourceInstnaceId</vnf-id>
285 <vnf-type></vnf-type>
286 <onap-model-information>
287 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
288 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
289 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
290 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
291 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
292 </onap-model-information>
295 <vnf-input-parameters>
296 </vnf-input-parameters>
297 <request-version></request-version>
298 <vnf-name></vnf-name>
302 </sdncadapterworkflow:SDNCRequestData>
303 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
307 //When a new resource creation request reaches SO, the parent resources information needs to be provided
308 //while creating the child resource.
309 String vnfid = resourceInputObj.getVnfId()
310 ModelInfo vfModelInfo = resourceInputObj.getVfModelInfo()
311 String vnfmodelInvariantUuid = vfModelInfo.getModelInvariantUuid()
312 String vnfmodelCustomizationUuid = vfModelInfo.getModelCustomizationUuid()
313 String vnfmodelUuid = vfModelInfo.getModelUuid()
314 String vnfmodelVersion = vfModelInfo.getModelVersion()
315 String vnfmodelName = vfModelInfo.getModelName()
317 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
318 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
319 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
320 <sdncadapter:RequestHeader>
321 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
322 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
323 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
324 <sdncadapter:SvcOperation>vf-module-topology-operation</sdncadapter:SvcOperation>
325 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
326 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
327 </sdncadapter:RequestHeader>
328 <sdncadapterworkflow:SDNCRequestData>
329 <request-information>
330 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
331 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
332 <source>${msoUtils.xmlEscape(source)}</source>
333 <notification-url></notification-url>
334 <order-number></order-number>
335 <order-version></order-version>
336 </request-information>
337 <service-information>
338 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
339 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
340 <onap-model-information>
341 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
342 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
343 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
344 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
345 </onap-model-information>
346 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
347 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
348 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
349 </service-information>
351 <vnf-id>$vnfid</vnf-id>
352 <vnf-type></vnf-type>
353 <onap-model-information>
354 <model-invariant-uuid>${msoUtils.xmlEscape(vnfmodelInvariantUuid)}</model-invariant-uuid>
355 <model-customization-uuid>${msoUtils.xmlEscape(vnfmodelCustomizationUuid)}</model-customization-uuid>
356 <model-uuid>${msoUtils.xmlEscape(vnfmodelUuid)}</model-uuid>
357 <model-version>${msoUtils.xmlEscape(vnfmodelVersion)}</model-version>
358 <model-name>${msoUtils.xmlEscape(vnfmodelName)}</model-name>
359 </onap-model-information>
361 <vf-module-information>
362 <vf-module-id>$resourceInstnaceId</vf-module-id>
363 <vf-module-type></vf-module-type>
364 <from-preload>false</from-preload>
365 <onap-model-information>
366 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
367 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
368 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
369 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
370 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
371 </onap-model-information>
372 </vf-module-information>
373 <vf-module-request-input>
374 <vf-module-input-parameters>
375 </vf-module-input-parameters>
376 </vf-module-request-input>
377 </sdncadapterworkflow:SDNCRequestData>
378 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
381 // sdwanvpnattachment or sotnvpnattachment
382 case "ALLOTTED_RESOURCE" :
383 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
384 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
385 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
386 <sdncadapter:RequestHeader>
387 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
388 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
389 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
390 <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
391 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
392 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
393 </sdncadapter:RequestHeader>
394 <sdncadapterworkflow:SDNCRequestData>
395 <request-information>
396 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
397 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
398 <source>${msoUtils.xmlEscape(source)}</source>
399 <notification-url></notification-url>
400 <order-number></order-number>
401 <order-version></order-version>
402 </request-information>
403 <service-information>
404 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
405 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
406 <onap-model-information>
407 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
408 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
409 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
410 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
411 </onap-model-information>
412 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
413 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
414 <subscriber-name></subscriber-name>
415 </service-information>
416 <allotted-resource-information>
417 <allotted-resource-id>$resourceInstnaceId</allotted-resource-id>
418 <allotted-resource-type></allotted-resource-type>
419 <parent-service-instance-id>$allotedParentServiceInstanceId</parent-service-instance-id>
420 <onap-model-information>
421 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
422 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
423 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
424 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
425 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
426 </onap-model-information>
427 </allotted-resource-information>
428 <connection-attachment-request-input>
429 </connection-attachment-request-input>
430 </sdncadapterworkflow:SDNCRequestData>
431 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
435 // for SDWANConnectivity and SOTNConnectivity:
437 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
438 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
439 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
440 <sdncadapter:RequestHeader>
441 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
442 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
443 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
444 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
445 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
446 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
447 </sdncadapter:RequestHeader>
448 <sdncadapterworkflow:SDNCRequestData>
449 <request-information>
450 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
451 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
452 <source>${msoUtils.xmlEscape(source)}</source>
453 <notification-url></notification-url>
454 <order-number></order-number>
455 <order-version></order-version>
456 </request-information>
457 <service-information>
458 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
459 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
460 <onap-model-information>
461 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
462 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
463 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
464 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
465 </onap-model-information>
466 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
467 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
468 </service-information>
469 <network-information>
470 <network-id>$resourceInstnaceId</network-id>
471 <onap-model-information>
472 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
473 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
474 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
475 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
476 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
477 </onap-model-information>
478 </network-information>
479 <network-request-input>
480 <network-input-parameters></network-input-parameters>
481 </network-request-input>
482 </sdncadapterworkflow:SDNCRequestData>
483 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
486 String sdncTopologyDeleteRequesAsString = utils.formatXml(sdncTopologyDeleteRequest)
487 execution.setVariable("sdncAdapterWorkflowRequest", sdncTopologyDeleteRequesAsString)
488 logger.info("sdncAdapterWorkflowRequest - " + "\n" + sdncTopologyDeleteRequesAsString)
490 } catch (Exception ex) {
491 String exceptionMessage = " Bpmn error encountered in DeleteSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
492 logger.debug( exceptionMessage)
493 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
496 logger.info(" ***** Exit prepareSDNCRequest *****")
499 private void setProgressUpdateVariables(DelegateExecution execution, String body) {
500 def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
501 execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
502 execution.setVariable("CVFMI_updateResOperStatusRequest", body)
505 void prepareUpdateBeforeDeleteSDNCResource(DelegateExecution execution) {
506 logger.debug(" *** prepareUpdateBeforeDeleteSDNCResource *** ")
507 String resourceInput = execution.getVariable(Prefix + "resourceInput");
508 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
509 String operType = resourceInputObj.getOperationType()
510 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
511 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
512 String operationId = resourceInputObj.getOperationId()
513 String progress = "20"
514 String status = "processing"
515 String statusDescription = "SDCN resource delete invoked"
517 //String operationId = execution.getVariable("operationId")
520 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
521 xmlns:ns="http://org.onap.so/requestsdb">
524 <ns:updateResourceOperationStatus>
525 <operType>${msoUtils.xmlEscape(operType)}</operType>
526 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
527 <progress>${msoUtils.xmlEscape(progress)}</progress>
528 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
529 <serviceId>${msoUtils.xmlEscape(serviceInstanceId)}</serviceId>
530 <status>${msoUtils.xmlEscape(status)}</status>
531 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
532 </ns:updateResourceOperationStatus>
534 </soapenv:Envelope>""";
536 setProgressUpdateVariables(execution, body)
537 logger.debug(" ***** Exit prepareUpdateBeforeDeleteSDNCResource *****")
541 void prepareUpdateAfterDeleteSDNCResource(DelegateExecution execution) {
542 logger.debug(" *** prepareUpdateAfterDeleteSDNCResource *** ")
543 String resourceInput = execution.getVariable(Prefix + "resourceInput");
544 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
545 String operType = resourceInputObj.getOperationType()
546 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
547 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
548 String operationId = resourceInputObj.getOperationId()
549 String progress = "100"
550 String status = "finished"
551 String statusDescription = "SDCN resource delete and deactivation completed"
553 //String operationId = execution.getVariable("operationId")
556 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
557 xmlns:ns="http://org.onap.so/requestsdb">
560 <ns:updateResourceOperationStatus>
561 <operType>${msoUtils.xmlEscape(operType)}</operType>
562 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
563 <progress>${msoUtils.xmlEscape(progress)}</progress>
564 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
565 <serviceId>${msoUtils.xmlEscape(serviceInstanceId)}</serviceId>
566 <status>${msoUtils.xmlEscape(status)}</status>
567 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
568 </ns:updateResourceOperationStatus>
570 </soapenv:Envelope>""";
572 setProgressUpdateVariables(execution, body)
573 logger.debug(" ***** Exit prepareUpdateAfterDeleteSDNCResource *****")
576 void postDeleteSDNCCall(DelegateExecution execution){
577 logger.info(" ***** Started postDeleteSDNCCall *****")
578 String responseCode = execution.getVariable(Prefix + "sdncDeleteReturnCode")
579 String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
581 logger.info("response from sdnc, response code :" + responseCode + " response object :" + responseObj)
582 logger.info(" ***** Exit postDeleteSDNCCall *****")
585 void sendSyncResponse (DelegateExecution execution) {
586 logger.debug( " *** sendSyncResponse *** ")
589 String operationStatus = "finished"
590 // RESTResponse for main flow
591 String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
592 logger.debug( " sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
593 sendWorkflowResponse(execution, 202, resourceOperationResp)
594 execution.setVariable("sentSyncResponse", true)
596 } catch (Exception ex) {
597 String msg = "Exception in sendSyncResponse:" + ex.getMessage()
599 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
601 logger.debug(" ***** Exit sendSyncResponse *****")