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