49f0e14d175b591e7fd0646db3bd29f9cc7e401c
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * OPENECOMP - SO
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
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
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=========================================================
21  */
22
23 package org.onap.so.bpmn.infrastructure.scripts
24
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.so.bpmn.common.recipe.ResourceInput
29 import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
30 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
31 import org.onap.so.bpmn.common.scripts.ExceptionUtil
32 import org.onap.so.bpmn.common.scripts.MsoUtils
33 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
34 import org.onap.so.bpmn.core.domain.ModelInfo
35 import org.onap.so.bpmn.core.domain.ResourceType
36 import org.onap.so.bpmn.core.json.JsonUtils
37 import org.onap.so.bpmn.core.UrnPropertiesReader
38 import org.slf4j.Logger
39 import org.slf4j.LoggerFactory
40
41 import static org.apache.commons.lang3.StringUtils.*
42
43 /**
44  * This groovy class supports the <class>DeleteSDNCCNetworkResource.bpmn</class> process.
45  * flow for SDNC Network Resource 
46  */
47 public class DeleteSDNCNetworkResource extends AbstractServiceTaskProcessor {
48     private static final Logger logger = LoggerFactory.getLogger( DeleteSDNCNetworkResource.class);
49
50     String Prefix="DELSDNCRES_"
51
52     ExceptionUtil exceptionUtil = new ExceptionUtil()
53
54     JsonUtils jsonUtil = new JsonUtils()
55
56     SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
57
58     MsoUtils msoUtils = new MsoUtils()
59
60     public void preProcessRequest(DelegateExecution execution){
61         logger.info(" ***** Started preProcessRequest *****")
62         try {
63
64             //get bpmn inputs from resource request.
65             String requestId = execution.getVariable("mso-request-id")
66             String requestAction = execution.getVariable("requestAction")
67             logger.info("The requestAction is: " + requestAction)
68             String recipeParamsFromRequest = execution.getVariable("recipeParams")
69             logger.info("The recipeParams is: " + recipeParamsFromRequest)
70             String resourceInput = execution.getVariable("resourceInput")
71             logger.info("The resourceInput is: " + resourceInput)
72             //Get ResourceInput Object
73             ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
74             execution.setVariable(Prefix + "resourceInput", resourceInputObj)
75
76             //Deal with recipeParams
77             String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
78             String resourceModelName = resourceInputObj.getResourceModelInfo().getModelName()
79             //For sdnc requestAction default is "NetworkInstance"
80             String operationType = "Network"
81             if(!StringUtils.isBlank(recipeParamsFromRequest) && "null" != recipeParamsFromRequest){
82                 //the operationType from worflow(first node) is second priority.
83                 operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
84             }
85             if(!StringUtils.isBlank(recipeParamsFromWf)){
86                 //the operationType from worflow(first node) is highest priority.
87                 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
88             }
89             String operationTypeFromConfig = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() + ".operation-type")
90             if (StringUtils.isNotEmpty(operationTypeFromConfig)) {
91                 // highest priority if operation type configured
92                 operationType = operationTypeFromConfig
93             }
94
95
96             //For sdnc, generate svc_action and request_action
97             String sdnc_svcAction = "delete"
98             String sdnc_requestAction = StringUtils.capitalize(sdnc_svcAction) + operationType + "Instance"
99             String isActivateRequired = UrnPropertiesReader.getVariable("resource-config." + resourceInputObj.resourceModelInfo.getModelName() + ".activation-required")
100             execution.setVariable("isActivateRequired", isActivateRequired)
101             execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
102             execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
103             execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
104             execution.setVariable("mso-request-id", requestId)
105             execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
106         } catch (BpmnError e) {
107             throw e;
108         } catch (Exception ex){
109             msg = "Exception in preProcessRequest " + ex.getMessage()
110             logger.debug( msg)
111             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
112         }
113         logger.info(" ***** Exit preProcessRequest *****")
114     }
115
116     /**
117      * Pre Process the BPMN Flow Request
118      * Includes:
119      * generate the nsOperationKey
120      * generate the nsParameters
121      */
122     public void prepareSDNCRequest (DelegateExecution execution) {
123         logger.info(" ***** Started prepareSDNCRequest *****")
124
125         try {
126             // get variables
127             String sdnc_svcAction = execution.getVariable(Prefix + "svcAction")
128             String sdnc_requestAction = execution.getVariable(Prefix + "requestAction")
129             String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
130             String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
131
132             String hdrRequestId = execution.getVariable("mso-request-id")
133             String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
134             String source = execution.getVariable("source")
135             String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
136             String resourceInput = execution.getVariable(Prefix + "resourceInput")
137             logger.info("The resourceInput is: " + resourceInput)
138             ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
139             String serviceType = resourceInputObj.getServiceType()
140             String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
141             String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
142             String serviceModelVersion = resourceInputObj.getServiceModelInfo().getModelVersion()
143             String serviceModelName = resourceInputObj.getServiceModelInfo().getModelName()
144             String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
145             String modelInvariantUuid = resourceInputObj.getResourceModelInfo().getModelInvariantUuid();
146             String modelCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
147             String modelUuid = resourceInputObj.getResourceModelInfo().getModelUuid()
148             String modelName = resourceInputObj.getResourceModelInfo().getModelName()
149             String modelVersion = resourceInputObj.getResourceModelInfo().getModelVersion()
150             String resourceInstnaceId = resourceInputObj.getResourceInstancenUuid()
151             String modelType = resourceInputObj.getResourceModelInfo().getModelType()
152
153             // 1. prepare assign topology via SDNC Adapter SUBFLOW call
154             String sdncTopologyDeleteRequest = ""
155
156             switch (modelType) {
157                 case "VNF":
158                     sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
159                                                               xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1" 
160                                                               xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
161                                  <sdncadapter:RequestHeader>
162                                     <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
163                                     <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
164                                     <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
165                                     <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
166                                     <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
167                                     <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
168                                  </sdncadapter:RequestHeader>
169                                  <sdncadapterworkflow:SDNCRequestData>
170                                      <request-information>
171                                         <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
172                                         <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
173                                         <source>${msoUtils.xmlEscape(source)}</source>
174                                         <notification-url></notification-url>
175                                         <order-number></order-number>
176                                         <order-version></order-version>
177                                      </request-information>
178                                      <service-information>
179                                         <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
180                                         <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
181                                         <onap-model-information>
182                                              <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
183                                              <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
184                                              <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
185                                              <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
186                                         </onap-model-information>
187                                         <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
188                                         <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
189                                         <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
190                                      </service-information>
191                                      <vnf-information>
192                                         <vnf-id>$resourceInstnaceId</vnf-id>
193                                         <vnf-type></vnf-type>
194                                         <onap-model-information>
195                                              <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
196                                              <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
197                                              <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
198                                              <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
199                                              <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
200                                         </onap-model-information>
201                                      </vnf-information>
202                                      <vnf-request-input>
203                                          <vnf-input-parameters>
204                                          </vnf-input-parameters>
205                                          <request-version></request-version>
206                                          <vnf-name></vnf-name>
207                                          <vnf-networks>
208                                         </vnf-networks>
209                                       </vnf-request-input>
210                                 </sdncadapterworkflow:SDNCRequestData>
211                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
212                     break
213                 case "GROUP" :
214                     //When a new resource creation request reaches SO, the parent resources information needs to be provided
215                     //while creating the child resource.
216                     String vnfid = resourceInputObj.getVnfId()
217                     ModelInfo vfModelInfo = resourceInputObj.getVfModelInfo()
218                     String vnfmodelInvariantUuid = vfModelInfo.getModelInvariantUuid()
219                     String vnfmodelCustomizationUuid = vfModelInfo.getModelCustomizationUuid()
220                     String vnfmodelUuid = vfModelInfo.getModelUuid()
221                     String vnfmodelVersion = vfModelInfo.getModelVersion()
222                     String vnfmodelName = vfModelInfo.getModelName()
223
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>vf-module-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>
257                                     <vnf-information>
258                                       <vnf-id>$vnfid</vnf-id>
259                                       <vnf-type></vnf-type>
260                                       <onap-model-information>
261                                         <model-invariant-uuid>${msoUtils.xmlEscape(vnfmodelInvariantUuid)}</model-invariant-uuid>
262                                         <model-customization-uuid>${msoUtils.xmlEscape(vnfmodelCustomizationUuid)}</model-customization-uuid>
263                                         <model-uuid>${msoUtils.xmlEscape(vnfmodelUuid)}</model-uuid>
264                                         <model-version>${msoUtils.xmlEscape(vnfmodelVersion)}</model-version>
265                                         <model-name>${msoUtils.xmlEscape(vnfmodelName)}</model-name>
266                                       </onap-model-information>
267                                     </vnf-information>
268                                     <vf-module-information>
269                                       <vf-module-id>$resourceInstnaceId</vf-module-id>
270                                       <vf-module-type></vf-module-type>
271                                       <from-preload>false</from-preload>
272                                       <onap-model-information>
273                                         <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
274                                         <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
275                                         <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
276                                         <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
277                                         <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
278                                       </onap-model-information>
279                                     </vf-module-information>
280                                     <vf-module-request-input>
281                                       <vf-module-input-parameters>
282                                       </vf-module-input-parameters>
283                                     </vf-module-request-input>
284                                   </sdncadapterworkflow:SDNCRequestData>
285                                 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
286                     break
287
288             // for SDWANConnectivity and SOTNConnectivity:
289                 default:
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>network-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                                      </service-information>
322                                      <network-information>
323                                         <network-id>$resourceInstnaceId</network-id>
324                                         <onap-model-information>
325                                              <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
326                                              <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
327                                              <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
328                                              <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
329                                              <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
330                                         </onap-model-information>
331                                      </network-information>
332                                      <network-request-input>
333                                        <network-input-parameters></network-input-parameters>
334                                      </network-request-input>
335                                 </sdncadapterworkflow:SDNCRequestData>
336                              </aetgt:SDNCAdapterWorkflowRequest>""".trim()
337             }
338
339             String sdncTopologyDeleteRequesAsString = utils.formatXml(sdncTopologyDeleteRequest)
340             execution.setVariable("sdncAdapterWorkflowRequest", sdncTopologyDeleteRequesAsString)
341             logger.info("sdncAdapterWorkflowRequest - " + "\n" +  sdncTopologyDeleteRequesAsString)
342
343         } catch (Exception ex) {
344             String exceptionMessage = " Bpmn error encountered in DeleteSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
345             logger.debug( exceptionMessage)
346             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
347
348         }
349         logger.info(" ***** Exit prepareSDNCRequest *****")
350     }
351
352     private void setProgressUpdateVariables(DelegateExecution execution, String body) {
353         def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
354         execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
355         execution.setVariable("CVFMI_updateResOperStatusRequest", body)
356     }
357
358     public void prepareUpdateBeforeDeleteSDNCResource(DelegateExecution execution) {
359         logger.debug(" *** prepareUpdateBeforeDeleteSDNCResource *** ")
360         String resourceInput = execution.getVariable(Prefix + "resourceInput");
361         ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
362         String operType = resourceInputObj.getOperationType()
363         String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
364         String serviceInstanceId = resourceInputObj.getServiceInstanceId()
365         String operationId = resourceInputObj.getOperationId()
366         String progress = "20"
367         String status = "processing"
368         String statusDescription = "SDCN resource delete invoked"
369
370         //String operationId = execution.getVariable("operationId")
371
372         String body = """
373                 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
374                         xmlns:ns="http://org.onap.so/requestsdb">
375                         <soapenv:Header/>
376                 <soapenv:Body>
377                     <ns:updateResourceOperationStatus>
378                                <operType>${msoUtils.xmlEscape(operType)}</operType>
379                                <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
380                                <progress>${msoUtils.xmlEscape(progress)}</progress>
381                                <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
382                                <serviceId>${msoUtils.xmlEscape(serviceInstanceId)}</serviceId>
383                                <status>${msoUtils.xmlEscape(status)}</status>
384                                <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
385                     </ns:updateResourceOperationStatus>
386                 </soapenv:Body>
387                 </soapenv:Envelope>""";
388
389         setProgressUpdateVariables(execution, body)
390         logger.debug(" ***** Exit prepareUpdateBeforeDeleteSDNCResource *****")
391
392     }
393
394     public void prepareUpdateAfterDeleteSDNCResource(DelegateExecution execution) {
395         logger.debug(" *** prepareUpdateAfterDeleteSDNCResource *** ")
396         String resourceInput = execution.getVariable(Prefix + "resourceInput");
397         ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
398         String operType = resourceInputObj.getOperationType()
399         String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
400         String serviceInstanceId = resourceInputObj.getServiceInstanceId()
401         String operationId = resourceInputObj.getOperationId()
402         String progress = "100"
403         String status = "finished"
404         String statusDescription = "SDCN resource delete and deactivation completed"
405
406         //String operationId = execution.getVariable("operationId")
407
408         String body = """
409                 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
410                         xmlns:ns="http://org.onap.so/requestsdb">
411                         <soapenv:Header/>
412                 <soapenv:Body>
413                     <ns:updateResourceOperationStatus>
414                                <operType>${msoUtils.xmlEscape(operType)}</operType>
415                                <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
416                                <progress>${msoUtils.xmlEscape(progress)}</progress>
417                                <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
418                                <serviceId>${msoUtils.xmlEscape(serviceInstanceId)}</serviceId>
419                                <status>${msoUtils.xmlEscape(status)}</status>
420                                <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
421                     </ns:updateResourceOperationStatus>
422                 </soapenv:Body>
423                 </soapenv:Envelope>""";
424
425         setProgressUpdateVariables(execution, body)
426         logger.debug(" ***** Exit prepareUpdateAfterDeleteSDNCResource *****")
427     }
428
429     public void postDeleteSDNCCall(DelegateExecution execution){
430         logger.info(" ***** Started postDeleteSDNCCall *****")
431         String responseCode = execution.getVariable(Prefix + "sdncDeleteReturnCode")
432         String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
433
434         logger.info("response from sdnc, response code :" + responseCode + "  response object :" + responseObj)
435         logger.info(" ***** Exit postDeleteSDNCCall *****")
436     }
437
438     public void sendSyncResponse (DelegateExecution execution) {
439         logger.debug( " *** sendSyncResponse *** ")
440
441         try {
442             String operationStatus = "finished"
443             // RESTResponse for main flow
444             String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
445             logger.debug( " sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
446             sendWorkflowResponse(execution, 202, resourceOperationResp)
447             execution.setVariable("sentSyncResponse", true)
448
449         } catch (Exception ex) {
450             String msg = "Exception in sendSyncResponse:" + ex.getMessage()
451             logger.debug( msg)
452             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
453         }
454         logger.debug(" ***** Exit sendSyncResponse *****")
455     }
456 }