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