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