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.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.json.JsonUtils
35 import org.onap.so.bpmn.core.UrnPropertiesReader
36 import org.slf4j.Logger
37 import org.slf4j.LoggerFactory
39 import static org.apache.commons.lang3.StringUtils.*
42 * This groovy class supports the <class>DeleteSDNCCNetworkResource.bpmn</class> process.
43 * flow for SDNC Network Resource
45 public class DeleteSDNCNetworkResource extends AbstractServiceTaskProcessor {
46 private static final Logger logger = LoggerFactory.getLogger( DeleteSDNCNetworkResource.class);
48 String Prefix="DELSDNCRES_"
50 ExceptionUtil exceptionUtil = new ExceptionUtil()
52 JsonUtils jsonUtil = new JsonUtils()
54 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
56 MsoUtils msoUtils = new MsoUtils()
58 public void preProcessRequest(DelegateExecution execution){
59 logger.info(" ***** Started preProcessRequest *****")
62 //get bpmn inputs from resource request.
63 String requestId = execution.getVariable("mso-request-id")
64 String requestAction = execution.getVariable("requestAction")
65 logger.info("The requestAction is: " + requestAction)
66 String recipeParamsFromRequest = execution.getVariable("recipeParams")
67 logger.info("The recipeParams is: " + recipeParamsFromRequest)
68 String resourceInput = execution.getVariable("resourceInput")
69 logger.info("The resourceInput is: " + resourceInput)
70 //Get ResourceInput Object
71 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
72 execution.setVariable(Prefix + "resourceInput", resourceInputObj)
74 //Deal with recipeParams
75 String recipeParamsFromWf = execution.getVariable("recipeParamXsd")
76 String resourceModelName = resourceInputObj.getResourceModelInfo().getModelName()
77 //For sdnc requestAction default is "NetworkInstance"
78 String operationType = "Network"
79 if(!StringUtils.isBlank(recipeParamsFromRequest) && "null" != recipeParamsFromRequest){
80 //the operationType from worflow(first node) is second priority.
81 operationType = jsonUtil.getJsonValue(recipeParamsFromRequest, "operationType")
83 if(!StringUtils.isBlank(recipeParamsFromWf)){
84 //the operationType from worflow(first node) is highest priority.
85 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
89 //For sdnc, generate svc_action and request_action
90 String sdnc_svcAction = "delete"
91 switch (resourceInputObj.getResourceModelInfo().getModelName()) {
93 case ~/[\w\s\W]*overlay[\w\s\W]*/ :
94 ///This will be resolved in R3.
95 sdnc_svcAction ="deactivate"
96 operationType = "NCINetwork"
99 case ~/[\w\s\W]*underlay[\w\s\W]*/ :
100 //This will be resolved in R3.
101 operationType ="Network"
104 case ~/[\w\s\W]*SOTNConnectivity[\w\s\W]*/ :
105 operationType = "SOTNConnectivity"
106 execution.setVariable("isActivateRequired", "true")
109 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
110 operationType = "SOTNAttachment"
111 execution.setVariable("isActivateRequired", "true")
114 case ~/[\w\s\W]*SiteVF[\w\s\W]*/ :
115 operationType = "Site"
116 execution.setVariable("isActivateRequired", "true")
119 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
120 operationType = "SDWANDevice"
121 execution.setVariable("isActivateRequired", "true")
124 case ~/[\w\s\W]*SDWANConnectivity[\w\s\W]*/ :
125 operationType = "SDWANConnectivity"
126 execution.setVariable("isActivateRequired", "true")
129 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
130 operationType = "SDWANAttachment"
131 execution.setVariable("isActivateRequired", "true")
134 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
135 operationType = "SDWANPort"
136 execution.setVariable("isActivateRequired", "true")
142 String sdnc_requestAction = StringUtils.capitalize(sdnc_svcAction) + operationType +"Instance"
143 execution.setVariable(Prefix + "svcAction", sdnc_svcAction)
144 execution.setVariable(Prefix + "requestAction", sdnc_requestAction)
145 execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
146 execution.setVariable("mso-request-id", requestId)
147 execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
148 } catch (BpmnError e) {
150 } catch (Exception ex){
151 msg = "Exception in preProcessRequest " + ex.getMessage()
153 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
155 logger.info(" ***** Exit preProcessRequest *****")
159 * Pre Process the BPMN Flow Request
161 * generate the nsOperationKey
162 * generate the nsParameters
164 public void prepareSDNCRequest (DelegateExecution execution) {
165 logger.info(" ***** Started prepareSDNCRequest *****")
169 String sdnc_svcAction = execution.getVariable(Prefix + "svcAction")
170 String sdnc_requestAction = execution.getVariable(Prefix + "requestAction")
171 String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
172 String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
174 String hdrRequestId = execution.getVariable("mso-request-id")
175 String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
176 String source = execution.getVariable("source")
177 String sdnc_service_id = execution.getVariable(Prefix + "sdncServiceId")
178 String resourceInput = execution.getVariable(Prefix + "resourceInput")
179 logger.info("The resourceInput is: " + resourceInput)
180 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
181 String serviceType = resourceInputObj.getServiceType()
182 String serviceModelInvariantUuid = resourceInputObj.getServiceModelInfo().getModelInvariantUuid()
183 String serviceModelUuid = resourceInputObj.getServiceModelInfo().getModelUuid()
184 String serviceModelVersion = resourceInputObj.getServiceModelInfo().getModelVersion()
185 String serviceModelName = resourceInputObj.getServiceModelInfo().getModelName()
186 String globalCustomerId = resourceInputObj.getGlobalSubscriberId()
187 String modelInvariantUuid = resourceInputObj.getResourceModelInfo().getModelInvariantUuid();
188 String modelCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
189 String modelUuid = resourceInputObj.getResourceModelInfo().getModelUuid()
190 String modelName = resourceInputObj.getResourceModelInfo().getModelName()
191 String modelVersion = resourceInputObj.getResourceModelInfo().getModelVersion()
192 String resourceInstnaceId = resourceInputObj.getResourceInstancenUuid()
193 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
194 String sdncTopologyDeleteRequest = ""
197 case ~/[\w\s\W]*deviceVF[\w\s\W]*/ :
198 case ~/[\w\s\W]*SiteWANVF[\w\s\W]*/ :
199 case ~/[\w\s\W]*SiteVF[\w\s\W]*/:
200 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
201 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
202 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
203 <sdncadapter:RequestHeader>
204 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
205 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
206 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
207 <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
208 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
209 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
210 </sdncadapter:RequestHeader>
211 <sdncadapterworkflow:SDNCRequestData>
212 <request-information>
213 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
214 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
215 <source>${msoUtils.xmlEscape(source)}</source>
216 <notification-url></notification-url>
217 <order-number></order-number>
218 <order-version></order-version>
219 </request-information>
220 <service-information>
221 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
222 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
223 <onap-model-information>
224 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
225 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
226 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
227 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
228 </onap-model-information>
229 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
230 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
231 <subscriber-name>${msoUtils.xmlEscape(globalCustomerId)}</subscriber-name>
232 </service-information>
234 <vnf-id>$resourceInstnaceId</vnf-id>
235 <vnf-type></vnf-type>
236 <onap-model-information>
237 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
238 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
239 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
240 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
241 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
242 </onap-model-information>
245 <vnf-input-parameters>
246 </vnf-input-parameters>
247 <request-version></request-version>
248 <vnf-name></vnf-name>
252 </sdncadapterworkflow:SDNCRequestData>
253 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
256 case ~/[\w\s\W]*sdwanvpnattachment[\w\s\W]*/ :
257 case ~/[\w\s\W]*sotnvpnattachment[\w\s\W]*/ :
258 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
259 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
260 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
261 <sdncadapter:RequestHeader>
262 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
263 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
264 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
265 <sdncadapter:SvcOperation>connection-attachment-topology-operation</sdncadapter:SvcOperation>
266 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
267 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
268 </sdncadapter:RequestHeader>
269 <sdncadapterworkflow:SDNCRequestData>
270 <request-information>
271 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
272 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
273 <source>${msoUtils.xmlEscape(source)}</source>
274 <notification-url></notification-url>
275 <order-number></order-number>
276 <order-version></order-version>
277 </request-information>
278 <service-information>
279 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
280 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
281 <onap-model-information>
282 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
283 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
284 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
285 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
286 </onap-model-information>
287 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
288 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
289 <subscriber-name></subscriber-name>
290 </service-information>
291 <allotted-resource-information>
292 <allotted-resource-id>$resourceInstnaceId</allotted-resource-id>
293 <allotted-resource-type></allotted-resource-type>
294 <parent-service-instance-id></parent-service-instance-id>
295 <onap-model-information>
296 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
297 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
298 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
299 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
300 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
301 </onap-model-information>
302 </allotted-resource-information>
303 <connection-attachment-request-input>
304 </connection-attachment-request-input>
305 </sdncadapterworkflow:SDNCRequestData>
306 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
310 sdncTopologyDeleteRequest = """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
311 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1"
312 xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1">
313 <sdncadapter:RequestHeader>
314 <sdncadapter:RequestId>${msoUtils.xmlEscape(hdrRequestId)}</sdncadapter:RequestId>
315 <sdncadapter:SvcInstanceId>${msoUtils.xmlEscape(serviceInstanceId)}</sdncadapter:SvcInstanceId>
316 <sdncadapter:SvcAction>${msoUtils.xmlEscape(sdnc_svcAction)}</sdncadapter:SvcAction>
317 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
318 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
319 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
320 </sdncadapter:RequestHeader>
321 <sdncadapterworkflow:SDNCRequestData>
322 <request-information>
323 <request-id>${msoUtils.xmlEscape(hdrRequestId)}</request-id>
324 <request-action>${msoUtils.xmlEscape(sdnc_requestAction)}</request-action>
325 <source>${msoUtils.xmlEscape(source)}</source>
326 <notification-url></notification-url>
327 <order-number></order-number>
328 <order-version></order-version>
329 </request-information>
330 <service-information>
331 <service-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-id>
332 <subscription-service-type>${msoUtils.xmlEscape(serviceType)}</subscription-service-type>
333 <onap-model-information>
334 <model-invariant-uuid>${msoUtils.xmlEscape(serviceModelInvariantUuid)}</model-invariant-uuid>
335 <model-uuid>${msoUtils.xmlEscape(serviceModelUuid)}</model-uuid>
336 <model-version>${msoUtils.xmlEscape(serviceModelVersion)}</model-version>
337 <model-name>${msoUtils.xmlEscape(serviceModelName)}</model-name>
338 </onap-model-information>
339 <service-instance-id>${msoUtils.xmlEscape(serviceInstanceId)}</service-instance-id>
340 <global-customer-id>${msoUtils.xmlEscape(globalCustomerId)}</global-customer-id>
341 </service-information>
342 <network-information>
343 <network-id>$resourceInstnaceId</network-id>
344 <onap-model-information>
345 <model-invariant-uuid>${msoUtils.xmlEscape(modelInvariantUuid)}</model-invariant-uuid>
346 <model-customization-uuid>${msoUtils.xmlEscape(modelCustomizationUuid)}</model-customization-uuid>
347 <model-uuid>${msoUtils.xmlEscape(modelUuid)}</model-uuid>
348 <model-version>${msoUtils.xmlEscape(modelVersion)}</model-version>
349 <model-name>${msoUtils.xmlEscape(modelName)}</model-name>
350 </onap-model-information>
351 </network-information>
352 <network-request-input>
353 <network-input-parameters></network-input-parameters>
354 </network-request-input>
355 </sdncadapterworkflow:SDNCRequestData>
356 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
359 String sdncTopologyDeleteRequesAsString = utils.formatXml(sdncTopologyDeleteRequest)
360 execution.setVariable("sdncAdapterWorkflowRequest", sdncTopologyDeleteRequesAsString)
361 logger.info("sdncAdapterWorkflowRequest - " + "\n" + sdncTopologyDeleteRequesAsString)
363 } catch (Exception ex) {
364 String exceptionMessage = " Bpmn error encountered in DeleteSDNCCNetworkResource flow. prepareSDNCRequest() - " + ex.getMessage()
365 logger.debug( exceptionMessage)
366 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
369 logger.info(" ***** Exit prepareSDNCRequest *****")
372 private void setProgressUpdateVariables(DelegateExecution execution, String body) {
373 def dbAdapterEndpoint = UrnPropertiesReader.getVariable("mso.adapters.openecomp.db.endpoint", execution)
374 execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
375 execution.setVariable("CVFMI_updateResOperStatusRequest", body)
378 public void prepareUpdateBeforeDeleteSDNCResource(DelegateExecution execution) {
379 logger.debug( " *** prepareUpdateBeforeDeleteSDNCResource *** ")
380 String resourceInput = execution.getVariable(Prefix + "resourceInput");
381 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
382 String operType = resourceInputObj.getOperationType()
383 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
384 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
385 String operationId = resourceInputObj.getOperationId()
386 String progress = "20"
387 String status = "processing"
388 String statusDescription = "SDCN resource delete invoked"
390 //String operationId = execution.getVariable("operationId")
393 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
394 xmlns:ns="http://org.onap.so/requestsdb">
397 <ns:updateResourceOperationStatus>
398 <operType>${msoUtils.xmlEscape(operType)}</operType>
399 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
400 <progress>${msoUtils.xmlEscape(progress)}</progress>
401 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
402 <serviceId>${msoUtils.xmlEscape(serviceInstanceId)}</serviceId>
403 <status>${msoUtils.xmlEscape(status)}</status>
404 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
405 </ns:updateResourceOperationStatus>
407 </soapenv:Envelope>""";
409 setProgressUpdateVariables(execution, body)
410 logger.debug(" ***** Exit prepareUpdateBeforeDeleteSDNCResource *****")
414 public void prepareUpdateAfterDeleteSDNCResource(DelegateExecution execution) {
415 logger.debug( " *** prepareUpdateAfterDeleteSDNCResource *** ")
416 String resourceInput = execution.getVariable(Prefix + "resourceInput");
417 ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)
418 String operType = resourceInputObj.getOperationType()
419 String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
420 String serviceInstanceId = resourceInputObj.getServiceInstanceId()
421 String operationId = resourceInputObj.getOperationId()
422 String progress = "100"
423 String status = "finished"
424 String statusDescription = "SDCN resource delete and deactivation completed"
426 //String operationId = execution.getVariable("operationId")
429 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
430 xmlns:ns="http://org.onap.so/requestsdb">
433 <ns:updateResourceOperationStatus>
434 <operType>${msoUtils.xmlEscape(operType)}</operType>
435 <operationId>${msoUtils.xmlEscape(operationId)}</operationId>
436 <progress>${msoUtils.xmlEscape(progress)}</progress>
437 <resourceTemplateUUID>${msoUtils.xmlEscape(resourceCustomizationUuid)}</resourceTemplateUUID>
438 <serviceId>${msoUtils.xmlEscape(serviceInstanceId)}</serviceId>
439 <status>${msoUtils.xmlEscape(status)}</status>
440 <statusDescription>${msoUtils.xmlEscape(statusDescription)}</statusDescription>
441 </ns:updateResourceOperationStatus>
443 </soapenv:Envelope>""";
445 setProgressUpdateVariables(execution, body)
446 logger.debug(" ***** Exit prepareUpdateAfterDeleteSDNCResource *****")
449 public void postDeleteSDNCCall(DelegateExecution execution){
450 logger.info(" ***** Started postDeleteSDNCCall *****")
451 String responseCode = execution.getVariable(Prefix + "sdncDeleteReturnCode")
452 String responseObj = execution.getVariable(Prefix + "SuccessIndicator")
454 logger.info("response from sdnc, response code :" + responseCode + " response object :" + responseObj)
455 logger.info(" ***** Exit postDeleteSDNCCall *****")
458 public void sendSyncResponse (DelegateExecution execution) {
459 logger.debug( " *** sendSyncResponse *** ")
462 String operationStatus = "finished"
463 // RESTResponse for main flow
464 String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
465 logger.debug( " sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
466 sendWorkflowResponse(execution, 202, resourceOperationResp)
467 execution.setVariable("sentSyncResponse", true)
469 } catch (Exception ex) {
470 String msg = "Exception in sendSyncResponse:" + ex.getMessage()
472 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
474 logger.debug(" ***** Exit sendSyncResponse *****")