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