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.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
41 import static org.apache.commons.lang3.StringUtils.*
44 * This groovy class supports the <class>DeleteSDNCCNetworkResource.bpmn</class> process.
45 * flow for SDNC Network Resource
47 public class DeleteSDNCNetworkResource extends AbstractServiceTaskProcessor {
48 private static final Logger logger = LoggerFactory.getLogger( DeleteSDNCNetworkResource.class);
50 String Prefix="DELSDNCRES_"
52 ExceptionUtil exceptionUtil = new ExceptionUtil()
54 JsonUtils jsonUtil = new JsonUtils()
56 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
58 MsoUtils msoUtils = new MsoUtils()
60 public void preProcessRequest(DelegateExecution execution){
61 logger.info(" ***** Started preProcessRequest *****")
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)
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")
85 if(!StringUtils.isBlank(recipeParamsFromWf)){
86 //the operationType from worflow(first node) is highest priority.
87 operationType = jsonUtil.getJsonValue(recipeParamsFromWf, "operationType")
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
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) {
108 } catch (Exception ex){
109 msg = "Exception in preProcessRequest " + ex.getMessage()
111 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
113 logger.info(" ***** Exit preProcessRequest *****")
117 * Pre Process the BPMN Flow Request
119 * generate the nsOperationKey
120 * generate the nsParameters
122 public void prepareSDNCRequest (DelegateExecution execution) {
123 logger.info(" ***** Started prepareSDNCRequest *****")
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")
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()
153 // 1. prepare assign topology via SDNC Adapter SUBFLOW call
154 String sdncTopologyDeleteRequest = ""
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>
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>
203 <vnf-input-parameters>
204 </vnf-input-parameters>
205 <request-version></request-version>
206 <vnf-name></vnf-name>
210 </sdncadapterworkflow:SDNCRequestData>
211 </aetgt:SDNCAdapterWorkflowRequest>""".trim()
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()
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>
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>
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()
288 // for SDWANConnectivity and SOTNConnectivity:
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()
339 String sdncTopologyDeleteRequesAsString = utils.formatXml(sdncTopologyDeleteRequest)
340 execution.setVariable("sdncAdapterWorkflowRequest", sdncTopologyDeleteRequesAsString)
341 logger.info("sdncAdapterWorkflowRequest - " + "\n" + sdncTopologyDeleteRequesAsString)
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)
349 logger.info(" ***** Exit prepareSDNCRequest *****")
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)
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"
370 //String operationId = execution.getVariable("operationId")
373 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
374 xmlns:ns="http://org.onap.so/requestsdb">
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>
387 </soapenv:Envelope>""";
389 setProgressUpdateVariables(execution, body)
390 logger.debug(" ***** Exit prepareUpdateBeforeDeleteSDNCResource *****")
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"
406 //String operationId = execution.getVariable("operationId")
409 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
410 xmlns:ns="http://org.onap.so/requestsdb">
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>
423 </soapenv:Envelope>""";
425 setProgressUpdateVariables(execution, body)
426 logger.debug(" ***** Exit prepareUpdateAfterDeleteSDNCResource *****")
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")
434 logger.info("response from sdnc, response code :" + responseCode + " response object :" + responseObj)
435 logger.info(" ***** Exit postDeleteSDNCCall *****")
438 public void sendSyncResponse (DelegateExecution execution) {
439 logger.debug( " *** sendSyncResponse *** ")
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)
449 } catch (Exception ex) {
450 String msg = "Exception in sendSyncResponse:" + ex.getMessage()
452 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
454 logger.debug(" ***** Exit sendSyncResponse *****")