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