3812c081f553c53beca2d2505f3bad34c7ceab29
[so.git] / bpmn / so-bpmn-infrastructure-common / src / main / groovy / org / onap / so / bpmn / infrastructure / scripts / DoDeleteNetworkInstance.groovy
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.scripts;
22
23 import org.apache.commons.lang3.*
24 import org.camunda.bpm.engine.delegate.BpmnError
25 import org.camunda.bpm.engine.delegate.DelegateExecution
26 import org.onap.so.bpmn.common.scripts.AaiUtil
27 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
28 import org.onap.so.bpmn.common.scripts.ExceptionUtil
29 import org.onap.so.bpmn.common.scripts.MsoUtils
30 import org.onap.so.bpmn.common.scripts.NetworkUtils
31 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
32 import org.onap.so.bpmn.common.scripts.VidUtils
33 import org.onap.so.bpmn.core.UrnPropertiesReader
34 import org.onap.so.bpmn.core.WorkflowException
35 import org.onap.so.bpmn.core.json.JsonUtils
36 import org.onap.so.client.aai.AAIObjectType
37 import org.onap.so.client.aai.entities.uri.AAIResourceUri
38 import org.onap.so.client.aai.entities.uri.AAIUriFactory
39 import org.onap.so.client.graphinventory.entities.uri.Depth
40 import org.onap.so.constants.Defaults
41 import org.onap.so.logger.MessageEnum
42 import org.onap.so.logger.MsoLogger
43 import org.onap.so.rest.APIResponse;
44 import org.onap.so.rest.RESTClient
45 import org.onap.so.rest.RESTConfig
46 import org.springframework.web.util.UriUtils
47
48 import groovy.json.*
49
50 public class DoDeleteNetworkInstance extends AbstractServiceTaskProcessor {
51         private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoDeleteNetworkInstance.class);
52
53         String Prefix= "DELNWKI_"
54         String groovyClassName = "DoDeleteNetworkInstance"
55         ExceptionUtil exceptionUtil = new ExceptionUtil()
56         JsonUtils jsonUtil = new JsonUtils()
57         VidUtils vidUtils = new VidUtils(this)
58         NetworkUtils networkUtils = new NetworkUtils()
59         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
60
61         public InitializeProcessVariables(DelegateExecution execution){
62                 /* Initialize all the process variables in this block */
63
64                 execution.setVariable(Prefix + "networkRequest", "")
65                 execution.setVariable(Prefix + "isSilentSuccess", false)
66                 execution.setVariable(Prefix + "Success", false)
67
68                 execution.setVariable(Prefix + "requestId", "")
69                 execution.setVariable(Prefix + "source", "")
70                 execution.setVariable(Prefix + "lcpCloudRegion", "")
71                 execution.setVariable(Prefix + "networkInputs", "")
72                 execution.setVariable(Prefix + "tenantId", "")
73
74                 execution.setVariable(Prefix + "queryAAIRequest","")
75                 execution.setVariable(Prefix + "queryAAIResponse", "")
76                 execution.setVariable(Prefix + "aaiReturnCode", "")
77                 execution.setVariable(Prefix + "isAAIGood", false)
78                 execution.setVariable(Prefix + "isVfRelationshipExist", false)
79
80                 // AAI query Cloud Region
81                 execution.setVariable(Prefix + "queryCloudRegionRequest","")
82                 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
83                 execution.setVariable(Prefix + "queryCloudRegionResponse","")
84                 execution.setVariable(Prefix + "cloudRegionPo","")
85                 execution.setVariable(Prefix + "cloudRegionSdnc","")
86
87                 execution.setVariable(Prefix + "deleteNetworkRequest", "")
88                 execution.setVariable(Prefix + "deleteNetworkResponse", "")
89                 execution.setVariable(Prefix + "networkReturnCode", "")
90                 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
91
92                 execution.setVariable(Prefix + "deleteSDNCRequest", "")
93                 execution.setVariable(Prefix + "deleteSDNCResponse", "")
94                 execution.setVariable(Prefix + "sdncReturnCode", "")
95                 execution.setVariable(Prefix + "sdncResponseSuccess", false)
96
97                 execution.setVariable(Prefix + "deactivateSDNCRequest", "")
98                 execution.setVariable(Prefix + "deactivateSDNCResponse", "")
99                 execution.setVariable(Prefix + "deactivateSdncReturnCode", "")
100                 execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", "")
101
102                 execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", "")
103                 execution.setVariable(Prefix + "isException", false)
104
105
106         }
107
108         // **************************************************
109         //     Pre or Prepare Request Section
110         // **************************************************
111
112         public void preProcessRequest (DelegateExecution execution) {
113
114                 execution.setVariable("prefix",Prefix)
115
116                 msoLogger.trace("Inside preProcessRequest() of " + groovyClassName + " Request ")
117
118                 // initialize flow variables
119                 InitializeProcessVariables(execution)
120
121                 try {
122                         // get incoming message/input
123                         execution.setVariable("action", "DELETE")
124                         String deleteNetwork = execution.getVariable("bpmnRequest")
125                         if (deleteNetwork != null) {
126                                 if (deleteNetwork.contains("requestDetails")) {
127                                         // JSON format request is sent, create xml
128                                         try {
129                                                 def prettyJson = JsonOutput.prettyPrint(deleteNetwork.toString())
130                                                 msoLogger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
131                                                 deleteNetwork =  vidUtils.createXmlNetworkRequestInfra(execution, deleteNetwork)
132
133                                         } catch (Exception ex) {
134                                                 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
135                                                 msoLogger.debug(dataErrorMessage)
136                                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
137                                         }
138                                 } else {
139                                            // XML format request is sent
140
141                                 }
142                         } else {
143                                         // vIPR format request is sent, create xml from individual variables
144                                 deleteNetwork = vidUtils.createXmlNetworkRequestInstance(execution)
145                         }
146
147                         deleteNetwork = utils.formatXml(deleteNetwork)
148                         msoLogger.debug(deleteNetwork)
149                         execution.setVariable(Prefix + "networkRequest", deleteNetwork)
150                         msoLogger.debug(Prefix + "networkRequest - " + '\n' + deleteNetwork)
151
152                         // validate 'backout-on-failure' to override 'mso.rollback'
153                         boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, deleteNetwork)
154                         execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
155                         msoLogger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
156
157                         String networkInputs = utils.getNodeXml(deleteNetwork, "network-inputs", false).replace("tag0:","").replace(":tag0","")
158                         execution.setVariable(Prefix + "networkInputs", networkInputs)
159
160                         // prepare messageId
161                         String messageId = execution.getVariable("testMessageId")  // for testing
162                         if (messageId == null || messageId == "") {
163                                         messageId = UUID.randomUUID()
164                                         msoLogger.debug(Prefix + "messageId, random generated: " + messageId)
165                         } else {
166                                         msoLogger.debug(Prefix + "messageId, pre-assigned: " + messageId)
167                         }
168                         execution.setVariable(Prefix + "messageId", messageId)
169
170                         String source = utils.getNodeText(deleteNetwork, "source")
171                         execution.setVariable(Prefix + "source", source)
172                         msoLogger.debug(Prefix + "source - " + source)
173
174                         String networkId = ""
175                         if (utils.nodeExists(networkInputs, "network-id")) {
176                                 networkId = utils.getNodeText(networkInputs, "network-id")
177                                 if (networkId == null || networkId == "" || networkId == 'null' ) {
178                                         sendSyncError(execution)
179                                         // missing value of network-id
180                                         String dataErrorMessage = "network-request has missing 'network-id' element/value."
181                                         msoLogger.debug(" Invalid Request - " + dataErrorMessage)
182                                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
183                                 }
184                         }
185
186                         // lcpCloudRegion or tenantId not sent, will be extracted from query AA&I
187                         def lcpCloudRegion = null
188                         if (utils.nodeExists(networkInputs, "aic-cloud-region")) {
189                                 lcpCloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
190                                 if (lcpCloudRegion == 'null') {
191                                         lcpCloudRegion = null
192                                 }
193                         }
194                         execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
195                         msoLogger.debug("lcpCloudRegion : " + lcpCloudRegion)
196
197                         String tenantId = null
198                         if (utils.nodeExists(networkInputs, "tenant-id")) {
199                                 tenantId = utils.getNodeText(networkInputs, "tenant-id")
200                                 if (tenantId == 'null') {
201                                         tenantId = null
202                                 }
203
204                         }
205                         execution.setVariable(Prefix + "tenantId", tenantId)
206                         msoLogger.debug("tenantId : " + tenantId)
207
208                         String sdncVersion = execution.getVariable("sdncVersion")
209                         msoLogger.debug("sdncVersion? : " + sdncVersion)
210
211                         // PO Authorization Info / headers Authorization=
212                         String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
213
214                         try {
215                                 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
216                                 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
217                                 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
218
219                         } catch (IOException ex) {
220                                 String dataErrorMessage = " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
221                                 msoLogger.debug(dataErrorMessage )
222                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
223                         }
224
225                 } catch (BpmnError e) {
226                         throw e;
227
228                 } catch (Exception ex){
229                          // caught exception
230                         String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, PreProcessRequest() - " + ex.getMessage()
231                         msoLogger.debug(exceptionMessage)
232                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
233
234                 }
235
236         }
237
238
239         public void callRESTQueryAAI (DelegateExecution execution) {
240
241                 execution.setVariable("prefix",Prefix)
242
243                 msoLogger.debug(" ***** Inside callRESTQueryAAI() of DoDoDeleteNetworkInstance ***** " )
244
245                 // get variables
246                 String networkInputs  = execution.getVariable(Prefix + "networkInputs")
247                 String networkId   = utils.getNodeText(networkInputs, "network-id")
248                 networkId = UriUtils.encode(networkId,"UTF-8")
249
250                 // Prepare AA&I url
251                 AaiUtil aaiUriUtil = new AaiUtil(this)
252                 AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
253                 uri.depth(Depth.ALL)
254
255                 String queryAAIRequest = aaiUriUtil.createAaiUri(uri)
256                 msoLogger.debug(queryAAIRequest)
257                 execution.setVariable(Prefix + "queryAAIRequest", queryAAIRequest)
258                 msoLogger.debug(Prefix + "AAIRequest - " + "\n" + queryAAIRequest)
259
260                 RESTConfig config = new RESTConfig(queryAAIRequest);
261
262                 ExceptionUtil exceptionUtil = new ExceptionUtil()
263                 Boolean isVfRelationshipExist = false
264                 try {
265                         APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryAAIRequest)
266                         String returnCode = response.getStatusCode()
267                         execution.setVariable(Prefix + "aaiReturnCode", returnCode)
268
269                         msoLogger.debug(" ***** AAI Response Code  : " + returnCode)
270
271                         String aaiResponseAsString = response.getResponseBodyAsString()
272                         execution.setVariable(Prefix + "queryAAIResponse", aaiResponseAsString)
273
274                         if (returnCode=='200' || returnCode=='204') {
275                                 msoLogger.debug(aaiResponseAsString)
276                                 execution.setVariable(Prefix + "isAAIGood", true)
277                                 msoLogger.debug(" AAI Query Success REST Response - " + "\n" + aaiResponseAsString)
278                                 // verify if vf or vnf relationship exist
279                                 if (utils.nodeExists(aaiResponseAsString, "relationship")) {
280                                         NetworkUtils networkUtils = new NetworkUtils()
281                                 isVfRelationshipExist = networkUtils.isVfRelationshipExist(aaiResponseAsString)
282                                         execution.setVariable(Prefix + "isVfRelationshipExist", isVfRelationshipExist)
283                                         if (isVfRelationshipExist == true) {
284                                                 String relationshipMessage = "AAI Query Success Response but 'vf-module' relationship exist, not allowed to delete: network Id: " + networkId
285                                                 exceptionUtil.buildWorkflowException(execution, 2500, relationshipMessage)
286
287                                         } else {
288                                             // verify if lcpCloudRegion was sent as input, if not get value from AAI Response
289                                             if (execution.getVariable(Prefix + "lcpCloudRegion") == null ) {
290                                                         String lcpCloudRegion = networkUtils.getCloudRegion(aaiResponseAsString)
291                                                         execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
292                                                         msoLogger.debug(" Get AAI getCloudRegion()  : " + lcpCloudRegion)
293                                                 }
294                                                 if (execution.getVariable(Prefix + "tenantId") == null ) {
295                                                         String tenantId = networkUtils.getTenantId(aaiResponseAsString)
296                                                         execution.setVariable(Prefix + "tenantId", tenantId)
297                                                         msoLogger.debug(" Get AAI getTenantId()  : " + tenantId)
298                                                 }
299
300                                         }
301                                 }
302                                 msoLogger.debug(Prefix + "isVfRelationshipExist - " + isVfRelationshipExist)
303
304                         } else {
305                                 execution.setVariable(Prefix + "isAAIGood", false)
306                             if (returnCode=='404' || aaiResponseAsString == "" || aaiResponseAsString == null) {
307                                         // not found // empty aai response
308                                         execution.setVariable(Prefix + "isSilentSuccess", true)
309                                         msoLogger.debug(" AAI Query is Silent Success")
310
311                                 } else {
312                                    if (aaiResponseAsString.contains("RESTFault")) {
313                                            WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
314                                            execution.setVariable("WorkflowException", exceptionObject)
315
316                                    } else {
317                                   // aai all errors
318                                                  String dataErrorMessage = "Unexpected Error Response from callRESTQueryAAI() - " + returnCode
319                                                  msoLogger.debug(dataErrorMessage)
320                                                  exceptionUtil.buildWorkflowException(execution, 2500, dataErrorMessage)
321
322                               }
323                                 }
324                         }
325
326                         msoLogger.debug(" AAI Query call, isAAIGood? : " + execution.getVariable(Prefix + "isAAIGood"))
327
328                 } catch (Exception ex) {
329                    // caught exception
330                    String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, callRESTQueryAAI() - " + ex.getMessage()
331                    msoLogger.debug(exceptionMessage)
332                    exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
333
334                 }
335
336         }
337
338         public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
339
340                 execution.setVariable("prefix", Prefix)
341
342                 msoLogger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoDeleteNetworkInstance ***** " )
343
344                 try {
345                         String networkInputs  = execution.getVariable(Prefix + "networkInputs")
346                         // String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
347                         String cloudRegion = execution.getVariable(Prefix + "lcpCloudRegion")
348                         // Prepare AA&I url
349                         AaiUtil aaiUtil = new AaiUtil(this)
350
351                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
352                         def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
353
354                         execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
355
356                         String cloudRegionPo = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "PO", cloudRegion)
357                         String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "SDNC", cloudRegion)
358
359                         if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
360                                 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
361                                 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
362
363                         } else {
364                                 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
365                                 msoLogger.debug(dataErrorMessage)
366                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
367
368                         }
369
370                 } catch (BpmnError e) {
371                 throw e;
372
373                 } catch (Exception ex) {
374                         // caught exception
375                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, callRESTQueryAAICloudRegion(). Unexpected Response from AAI - " + ex.getMessage()
376                         msoLogger.debug(exceptionMessage)
377                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
378
379                 }
380
381         }
382
383         public void prepareNetworkRequest (DelegateExecution execution) {
384
385                 execution.setVariable("prefix", Prefix)
386
387                 msoLogger.trace("Inside prepareNetworkRequest of DoDeleteNetworkInstance ")
388                 ExceptionUtil exceptionUtil = new ExceptionUtil()
389                 try {
390                         // get variables
391                         String networkRequest = execution.getVariable(Prefix + "networkRequest")
392                         String cloudSiteId = execution.getVariable(Prefix + "cloudRegionPo")
393                         String tenantId = execution.getVariable(Prefix + "tenantId")
394
395                         String queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
396                         String networkType = utils.getNodeText(queryAAIResponse, "network-type")
397                         String networkId = utils.getNodeText(queryAAIResponse, "network-id")
398                         String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
399
400                         String networkStackId = ""
401                         networkStackId = utils.getNodeText(queryAAIResponse, "heat-stack-id")
402                         if (networkStackId == 'null' || networkStackId == "" || networkStackId == null) {
403                                 networkStackId = "force_delete"
404                         }
405
406                         String requestId = execution.getVariable("msoRequestId")
407                         if (requestId != null) {
408                                 execution.setVariable("mso-request-id", requestId)
409                         } else {
410                                 requestId = execution.getVariable("mso-request-id")
411                         }
412                         String serviceInstanceId = execution.getVariable("serviceInstanceId")
413
414                         // Added new Elements
415                         String messageId = execution.getVariable(Prefix + "messageId")
416                         String notificationUrl = ""                                   //TODO - is this coming from URN? What variable/value to use?
417                         //String notificationUrl = execution.getVariable("URN_?????") //TODO - is this coming from URN? What variable/value to use?
418
419                         String modelCustomizationUuid = ""
420                         if (utils.nodeExists(networkRequest, "networkModelInfo")) {
421                                 String networkModelInfo = utils.getNodeXml(networkRequest, "networkModelInfo", false).replace("tag0:","").replace(":tag0","")
422                                 modelCustomizationUuid = utils.getNodeText(networkModelInfo, "modelCustomizationUuid")
423                         } else {
424                             modelCustomizationUuid = utils.getNodeText(networkRequest, "modelCustomizationId")
425                         }
426
427                         String deleteNetworkRequest = """
428                                           <deleteNetworkRequest>
429                                             <cloudSiteId>${MsoUtils.xmlEscape(cloudSiteId)}</cloudSiteId>
430                                             <tenantId>${MsoUtils.xmlEscape(tenantId)}</tenantId>
431                                             <networkId>${MsoUtils.xmlEscape(networkId)}</networkId>
432                                                 <networkStackId>${MsoUtils.xmlEscape(networkStackId)}</networkStackId>
433                                             <networkType>${MsoUtils.xmlEscape(networkType)}</networkType>
434                                                 <modelCustomizationUuid>${MsoUtils.xmlEscape(modelCustomizationUuid)}</modelCustomizationUuid>
435                                                 <skipAAI>true</skipAAI>
436                                             <msoRequest>
437                                                <requestId>${MsoUtils.xmlEscape(requestId)}</requestId>
438                                                <serviceInstanceId>${MsoUtils.xmlEscape(serviceInstanceId)}</serviceInstanceId>
439                                             </msoRequest>
440                                                 <messageId>${MsoUtils.xmlEscape(messageId)}</messageId>
441                                                 <notificationUrl>${MsoUtils.xmlEscape(notificationUrl)}</notificationUrl>
442                                           </deleteNetworkRequest>
443                                                 """.trim()
444
445                         msoLogger.debug(Prefix + "deleteNetworkRequest - " + "\n" +  deleteNetworkRequest)
446                         // Format Response
447                         String buildDeleteNetworkRequestAsString = utils.formatXml(deleteNetworkRequest)
448                         msoLogger.debug(buildDeleteNetworkRequestAsString)
449                         msoLogger.debug(Prefix + "deleteNetworkRequestAsString - " + "\n" +  buildDeleteNetworkRequestAsString)
450
451                         String restURL = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint", execution)
452                         execution.setVariable("mso.adapters.network.rest.endpoint", restURL + "/" + networkId)
453                         msoLogger.debug("mso.adapters.network.rest.endpoint - " + "\n" +  restURL + "/" + networkId)
454
455                         execution.setVariable(Prefix + "deleteNetworkRequest", buildDeleteNetworkRequestAsString)
456                         msoLogger.debug(Prefix + "deleteNetworkRequest - " + "\n" +  buildDeleteNetworkRequestAsString)
457                 }
458                 catch (Exception ex) {
459                         // caught exception
460                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareNetworkRequest(). Unexpected Response from AAI - " + ex.getMessage()
461                         msoLogger.debug(exceptionMessage)
462                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
463
464                 }
465         }
466
467         /**
468          * This method is used instead of an HTTP Connector task because the
469          * connector does not allow DELETE with a body.
470          */
471         public void sendRequestToVnfAdapter(DelegateExecution execution) {
472                 def method = getClass().getSimpleName() + '.sendRequestToVnfAdapter(' +
473                         'execution=' + execution.getId() +
474                         ')'
475
476                 msoLogger.trace('Entered ' + method)
477
478                 try {
479
480                         String vnfAdapterUrl = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint",execution)
481                         String vnfAdapterRequest = execution.getVariable(Prefix + "deleteNetworkRequest")
482
483                         RESTConfig config = new RESTConfig(vnfAdapterUrl)
484                         RESTClient client = new RESTClient(config).
485                                 addHeader("Content-Type", "application/xml").
486                                 addAuthorizationHeader(execution.getVariable("BasicAuthHeaderValuePO"));
487
488                         APIResponse response;
489
490                         response = client.httpDelete(vnfAdapterRequest)
491
492                         execution.setVariable(Prefix + "networkReturnCode", response.getStatusCode())
493                         execution.setVariable(Prefix + "deleteNetworkResponse", response.getResponseBodyAsString())
494
495                 } catch (Exception ex) {
496                         // caught exception
497                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, sendRequestToVnfAdapter() - " + ex.getMessage()
498                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
499                         msoLogger.debug(exceptionMessage)
500                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
501
502                 }
503         }
504
505
506         public void prepareSDNCRequest (DelegateExecution execution) {
507
508                 execution.setVariable("prefix", Prefix)
509
510                 msoLogger.trace("Inside prepareSDNCRequest of DoDeleteNetworkInstance ")
511
512                 try {
513                         // get variables
514                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
515                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
516
517                         String networkId = ""
518                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
519                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
520                         }
521                         if (networkId == 'null') {networkId = ""}
522
523                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
524
525                         // get/set 'msoRequestId' and 'mso-request-id'
526                         String requestId = execution.getVariable("msoRequestId")
527                         if (requestId != null) {
528                                 execution.setVariable("mso-request-id", requestId)
529                         } else {
530                             requestId = execution.getVariable("mso-request-id")
531                         }
532                         execution.setVariable(Prefix + "requestId", requestId)
533                         msoLogger.debug(Prefix + "requestId " + requestId)
534                         String queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
535
536                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
537                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
538                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
539                         String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "delete", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
540                     String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
541                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
542                         execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
543                         msoLogger.debug(Prefix + "deleteSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
544
545                 } catch (Exception ex) {
546                         // caught exception
547                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
548                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
549                         msoLogger.debug(exceptionMessage)
550                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
551
552                 }
553
554         }
555
556         public void prepareRpcSDNCRequest (DelegateExecution execution) {
557
558                 execution.setVariable("prefix", Prefix)
559
560                 msoLogger.trace("Inside prepareRpcSDNCRequest of DoDeleteNetworkInstance ")
561
562                 try {
563                         // get variables
564                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
565                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
566
567                         String networkId = ""
568                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
569                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
570                         }
571                         if (networkId == 'null') {networkId = ""}
572
573                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
574
575                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
576                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
577                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
578                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
579                         String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
580                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
581                         execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
582                         msoLogger.debug(Prefix + "deleteSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
583
584                 } catch (Exception ex) {
585                         // caught exception
586                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
587                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
588                         msoLogger.debug(exceptionMessage)
589                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
590
591                 }
592
593         }
594
595
596         public void prepareRpcSDNCDeactivate(DelegateExecution execution) {
597
598                 execution.setVariable("prefix",Prefix)
599
600                 msoLogger.trace("Inside prepareRpcSDNCDeactivate() of DoDeleteNetworkInstance ")
601
602                 try {
603
604                         // get variables
605                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
606                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
607                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
608                         String networkId = ""
609                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
610                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
611                         }
612                         if (networkId == 'null') {networkId = ""}
613                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
614
615                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
616                         String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
617                         execution.setVariable(Prefix + "deactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
618                         msoLogger.debug(" Preparing request for RPC SDNC Topology deactivate - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
619
620
621                 } catch (Exception ex) {
622                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
623                         msoLogger.debug(exceptionMessage)
624                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
625
626                 }
627
628         }
629
630         // **************************************************
631         //     Post or Validate Response Section
632         // **************************************************
633
634         public void validateNetworkResponse (DelegateExecution execution) {
635
636                 execution.setVariable("prefix", Prefix)
637
638                 msoLogger.trace("Inside validateNetworkResponse of DoDeleteNetworkInstance ")
639
640                 try {
641                         String returnCode = execution.getVariable(Prefix + "networkReturnCode")
642                         String networkResponse = execution.getVariable(Prefix + "deleteNetworkResponse")
643
644                         msoLogger.debug(" Network Adapter responseCode: " + returnCode)
645                         msoLogger.debug("Network Adapter Response - " + "\n" + networkResponse)
646                         msoLogger.debug(networkResponse)
647
648                         String errorMessage = ""
649                         if (returnCode == "200") {
650                                 msoLogger.debug(" Network Adapter Response is successful - " + "\n" + networkResponse)
651
652                                 // prepare rollback data
653                                 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
654                                 if ((rollbackData == null) || (rollbackData.isEmpty())) {
655                                         msoLogger.debug(" Network Adapter 'rollback' data is not Sent: " + "\n" + networkResponse)
656                                         execution.setVariable(Prefix + "rollbackNetworkRequest", "")
657                                 } else {
658                                     String rollbackNetwork =
659                                           """<NetworkAdapter:rollbackNetwork xmlns:NetworkAdapter="http://org.onap.so/network">
660                                                         ${rollbackData}
661                                                  </NetworkAdapter:rollbackNetwork>"""
662                                     String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
663                                     execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
664                                     msoLogger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
665                                 }
666
667
668                         } else { // network error
669                            if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) {   //4xx, 5xx
670                                    if (networkResponse.contains("deleteNetworkError")  ) {
671                                            networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
672                                            errorMessage  = utils.getNodeText(networkResponse, "message")
673                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
674                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
675
676                                    } else { // CatchAll exception
677                                            if (returnCode == "500") {
678                                                    errorMessage = "JBWEB000065: HTTP Status 500."
679                                        } else {
680                                                errorMessage = "Return code is " + returnCode
681                                        }
682                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
683                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
684
685                                    }
686
687                            } else { // CatchAll exception
688                                    String dataErrorMessage  = "Received error from Network Adapter. Return code is: " + returnCode
689                                    exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
690
691                            }
692
693                         }
694
695                 } catch (BpmnError e) {
696                         throw e;
697
698                 } catch (Exception ex) {
699                         // caught exception
700                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, validateNetworkResponse() - " + ex.getMessage()
701                         msoLogger.debug(exceptionMessage)
702                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
703
704                 }
705
706         }
707
708         public void validateSDNCResponse (DelegateExecution execution) {
709
710                 execution.setVariable("prefix", Prefix)
711
712                 msoLogger.trace("Inside validateSDNCResponse of DoDeleteNetworkInstance ")
713
714                 String response = execution.getVariable(Prefix + "deleteSDNCResponse")
715                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
716                 WorkflowException workflowException = execution.getVariable("WorkflowException")
717
718                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
719                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
720                 // reset variable
721                 String deleteSDNCResponseDecodeXml = execution.getVariable(Prefix + "deleteSDNCResponse")
722                 deleteSDNCResponseDecodeXml = deleteSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
723                 execution.setVariable(Prefix + "deleteSDNCResponse", deleteSDNCResponseDecodeXml)
724
725                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, prefix+'sdncResponseSuccess'
726                         execution.setVariable(Prefix + "isSdncRollbackNeeded", true)      //
727                         execution.setVariable(Prefix + "isPONR", true)
728                         msoLogger.debug("Successfully Validated SDNC Response")
729                 } else {
730                         msoLogger.debug("Did NOT Successfully Validated SDNC Response")
731                         throw new BpmnError("MSOWorkflowException")
732                 }
733
734         }
735
736         public void validateRpcSDNCDeactivateResponse (DelegateExecution execution) {
737
738                 execution.setVariable("prefix",Prefix)
739
740                 msoLogger.trace("Inside validateRpcSDNCDeactivateResponse() of DoDeleteNetworkInstance ")
741
742                 String response = execution.getVariable(Prefix + "deactivateSDNCResponse")
743                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
744                 WorkflowException workflowException = execution.getVariable("WorkflowException")
745
746                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
747                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
748                 // reset variable
749                 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "deactivateSDNCResponse")
750                 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
751                 execution.setVariable(Prefix + "deactivateSDNCResponse", assignSDNCResponseDecodeXml)
752
753                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, Prefix+'sdncResponseSuccess'
754                         execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", true)
755                         msoLogger.debug("Successfully Validated Rpc SDNC Activate Response")
756
757                 } else {
758                         msoLogger.debug("Did NOT Successfully Validated Rpc SDNC Deactivate Response")
759                         throw new BpmnError("MSOWorkflowException")
760                 }
761
762         }
763
764         public void prepareRpcSDNCDeactivateRollback(DelegateExecution execution) {
765
766                 execution.setVariable("prefix",Prefix)
767
768                 msoLogger.trace("Inside prepareRpcSDNCDeactivateRollback() of DoDeleteNetworkInstance ")
769
770                 try {
771
772                         // get variables
773                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
774                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
775                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
776                         String deactivateSDNCResponse = execution.getVariable(Prefix + "deactivateSDNCResponse")
777                         String networkId = utils.getNodeText(deactivateSDNCResponse, "network-id")
778                         if (networkId == 'null') {networkId = ""}
779                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
780
781                         // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
782                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
783                         String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
784                         execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
785                         msoLogger.debug(" Preparing request for RPC SDNC Topology 'activate-CreateNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
786
787
788                 } catch (Exception ex) {
789                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCDeactivateRollback() - " + ex.getMessage()
790                         msoLogger.debug(exceptionMessage)
791                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
792
793                 }
794
795         }
796
797         public void prepareRollbackData(DelegateExecution execution) {
798
799                 execution.setVariable("prefix",Prefix)
800
801                 msoLogger.trace("Inside prepareRollbackData() of DoDeleteNetworkInstance ")
802
803                 try {
804
805                         Map<String, String> rollbackData = new HashMap<String, String>();
806                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
807                         if (rollbackNetworkRequest != null) {
808                                 if (rollbackNetworkRequest != "") {
809                                    rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
810                             }
811                         }
812                         String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
813                         if (rollbackDeactivateSDNCRequest != null) {
814                                 if (rollbackDeactivateSDNCRequest != "") {
815                                 rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
816                             }
817                         }
818                         execution.setVariable("rollbackData", rollbackData)
819                         msoLogger.debug("** rollbackData : " + rollbackData)
820
821                         execution.setVariable("WorkflowException", execution.getVariable("WorkflowException"))
822                         msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
823
824                 } catch (Exception ex) {
825                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
826                         msoLogger.debug(exceptionMessage)
827                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
828
829                 }
830
831         }
832
833         public void postProcessResponse (DelegateExecution execution) {
834
835                 execution.setVariable("prefix", Prefix)
836
837                 msoLogger.trace("Inside postProcessResponse of DoDeleteNetworkInstance ")
838
839                 try {
840
841                         msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
842                         if (execution.getVariable(Prefix + "isException") == false) {
843                                 execution.setVariable(Prefix + "Success", true)
844                                 execution.setVariable("WorkflowException", null)
845                                 if (execution.getVariable(Prefix + "isSilentSuccess") == true) {
846                                         execution.setVariable("rolledBack", false)
847                                 } else {
848                                     execution.setVariable("rolledBack", true)
849                                 }
850                                 prepareSuccessRollbackData(execution) // populate rollbackData
851
852                         } else {
853                                 execution.setVariable(Prefix + "Success", false)
854                                 execution.setVariable("rollbackData", null)
855                                 String exceptionMessage = " Exception encountered in MSO Bpmn. "
856                                 if (execution.getVariable("workflowException") != null) {  // Output of Rollback flow.
857                                    msoLogger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
858                                    WorkflowException wfex = execution.getVariable("workflowException")
859                                    exceptionMessage = wfex.getErrorMessage()
860                                 } else {
861                                if (execution.getVariable(Prefix + "WorkflowException") != null) {
862                                       WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
863                                       exceptionMessage = pwfex.getErrorMessage()
864                                } else {
865                                       if (execution.getVariable("WorkflowException") != null) {
866                                              WorkflowException pwfex = execution.getVariable("WorkflowException")
867                                              exceptionMessage = pwfex.getErrorMessage()
868                                           }
869                                }
870                                 }
871
872                                 // going to the Main flow: a-la-carte or macro
873                                 msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
874                                 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
875                                 throw new BpmnError("MSOWorkflowException")
876
877                         }
878
879                 } catch(BpmnError b){
880                     msoLogger.debug("Rethrowing MSOWorkflowException")
881                     throw b
882
883                 } catch (Exception ex) {
884                         // caught exception
885                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, postProcessResponse() - " + ex.getMessage()
886                         msoLogger.debug(exceptionMessage)
887                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
888                         throw new BpmnError("MSOWorkflowException")
889
890         }
891
892         }
893
894         public void prepareSuccessRollbackData(DelegateExecution execution) {
895
896                 execution.setVariable("prefix",Prefix)
897
898                 msoLogger.trace("Inside prepareSuccessRollbackData() of DoDeleteNetworkInstance ")
899
900                 try {
901
902                         if (execution.getVariable("sdncVersion") != '1610') {
903                                 prepareRpcSDNCDeactivateRollback(execution)
904                                 prepareRpcSDNCUnassignRollback(execution)
905                         } else {
906                             prepareSDNCRollback(execution)
907                         }
908
909                         Map<String, String> rollbackData = new HashMap<String, String>();
910                         String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
911                         if (rollbackSDNCRequest != null) {
912                                 if (rollbackSDNCRequest != "") {
913                                    rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
914                                 }
915                         }
916                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
917                         if (rollbackNetworkRequest != null) {
918                                 if (rollbackNetworkRequest != "") {
919                                    rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
920                             }
921                         }
922                         String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
923                         if (rollbackDeactivateSDNCRequest != null) {
924                                 if (rollbackDeactivateSDNCRequest != "") {
925                                 rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
926                             }
927                         }
928                         execution.setVariable("rollbackData", rollbackData)
929
930                         msoLogger.debug("** rollbackData : " + rollbackData)
931                         execution.setVariable("WorkflowException", null)
932
933
934                 } catch (Exception ex) {
935                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
936                         msoLogger.debug(exceptionMessage)
937                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
938
939                 }
940
941         }
942
943         public void prepareRpcSDNCUnassignRollback(DelegateExecution execution) {
944
945                 execution.setVariable("prefix",Prefix)
946
947                 msoLogger.trace("Inside prepareRpcSDNCUnassignRollbac() of DoDeleteNetworkInstance ")
948
949                 try {
950
951                         // get variables
952                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
953                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
954
955                         String deleteSDNCResponse = execution.getVariable(Prefix + "deleteSDNCResponse")
956                         String networkId = utils.getNodeText(deleteSDNCResponse, "network-id")
957                         if (networkId == 'null') {networkId = ""}
958                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
959
960                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
961                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
962                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
963                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
964                         String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
965                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
966                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
967                         msoLogger.debug(Prefix + "rollbackSDNCRequest" + "\n" +  sndcTopologyDeleteRequesAsString)
968                         msoLogger.debug(" Preparing request for RPC SDNC Topology 'assign-CreateNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyDeleteRequesAsString)
969
970
971                 } catch (Exception ex) {
972                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCUnassignRollback() - " + ex.getMessage()
973                         msoLogger.debug(exceptionMessage)
974                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
975
976                 }
977
978         }
979
980         public void prepareSDNCRollback (DelegateExecution execution) {
981
982                 execution.setVariable("prefix", Prefix)
983
984                 msoLogger.trace("Inside prepareSDNCRollback of DoDeleteNetworkInstance ")
985
986                 try {
987
988                         // get variables
989                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
990                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
991
992                         String networkId = ""
993                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
994                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
995                         }
996                         if (networkId == 'null') {networkId = ""}
997
998                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
999
1000                         // get/set 'msoRequestId' and 'mso-request-id'
1001                         String requestId = execution.getVariable("msoRequestId")
1002                         if (requestId != null) {
1003                                 execution.setVariable("mso-request-id", requestId)
1004                         } else {
1005                             requestId = execution.getVariable("mso-request-id")
1006                         }
1007                         execution.setVariable(Prefix + "requestId", requestId)
1008
1009                         String queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
1010
1011                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
1012                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
1013                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
1014                         String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "rollback", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
1015                     String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
1016                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
1017                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
1018                         msoLogger.debug(Prefix + "rollbackSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
1019                         msoLogger.debug(" Preparing request for RPC SDNC Topology 'rollback-DisconnectNetworkRequest' rollback . . . - " + "\n" +  sndcTopologyDeleteRequesAsString)
1020
1021
1022                 } catch (Exception ex) {
1023                         // caught exception
1024                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRollback() - " + ex.getMessage()
1025                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
1026                         msoLogger.debug(exceptionMessage)
1027                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
1028
1029                 }
1030
1031         }
1032
1033         public void setExceptionFlag(DelegateExecution execution){
1034
1035                 execution.setVariable("prefix",Prefix)
1036
1037                 msoLogger.trace("Inside setExceptionFlag() of DoDeleteNetworkInstance ")
1038
1039                 try {
1040
1041                         execution.setVariable(Prefix + "isException", true)
1042
1043                         if (execution.getVariable("SavedWorkflowException1") != null) {
1044                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1045                         } else {
1046                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1047                         }
1048                         msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1049
1050                 } catch(Exception ex){
1051                           String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1052                         msoLogger.debug(exceptionMessage)
1053                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1054                 }
1055
1056         }
1057
1058
1059         // *******************************
1060         //     Build Error Section
1061         // *******************************
1062
1063         public void processJavaException(DelegateExecution execution){
1064
1065                 execution.setVariable("prefix",Prefix)
1066                 try{
1067                         msoLogger.debug("Caught a Java Exception")
1068                         msoLogger.debug("Started processJavaException Method")
1069                         msoLogger.debug("Variables List: " + execution.getVariables())
1070                         execution.setVariable("UnexpectedError", "Caught a Java Lang Exception")  // Adding this line temporarily until this flows error handling gets updated
1071                         exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1072
1073                 }catch(Exception e){
1074                         msoLogger.debug("Caught Exception during processJavaException Method: " + e)
1075                         execution.setVariable("UnexpectedError", "Exception in processJavaException method")  // Adding this line temporarily until this flows error handling gets updated
1076                         exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
1077                 }
1078                 msoLogger.debug("Completed processJavaException Method of " + Prefix)
1079         }
1080
1081 }