add instance group support to SO
[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.accept = "application/xml"
455                         httpClient.addAdditionalHeader("Authorization", execution.getVariable("BasicAuthHeaderValuePO"))
456                         Response response = httpClient.delete(vnfAdapterRequest)
457
458                         execution.setVariable(Prefix + "deleteNetworkResponse", response.readEntity(String.class))
459                         execution.setVariable(Prefix + "networkReturnCode", response.getStatus())
460
461                 } catch (Exception ex) {
462                         // caught exception
463                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, sendRequestToVnfAdapter() - " + ex.getMessage()
464                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
465                         msoLogger.debug(exceptionMessage)
466                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
467
468                 }
469         }
470
471
472         public void prepareSDNCRequest (DelegateExecution execution) {
473
474                 execution.setVariable("prefix", Prefix)
475
476                 msoLogger.trace("Inside prepareSDNCRequest of DoDeleteNetworkInstance ")
477
478                 try {
479                         // get variables
480                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
481                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
482
483                         String networkId = ""
484                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
485                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
486                         }
487                         if (networkId == 'null') {networkId = ""}
488
489                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
490
491                         // get/set 'msoRequestId' and 'mso-request-id'
492                         String requestId = execution.getVariable("msoRequestId")
493                         if (requestId != null) {
494                                 execution.setVariable("mso-request-id", requestId)
495                         } else {
496                             requestId = execution.getVariable("mso-request-id")
497                         }
498                         execution.setVariable(Prefix + "requestId", requestId)
499                         msoLogger.debug(Prefix + "requestId " + requestId)
500                         L3Network queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
501
502                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
503                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
504                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
505                         String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "delete", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
506                     String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
507                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
508                         execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
509                         msoLogger.debug(Prefix + "deleteSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
510
511                 } catch (Exception ex) {
512                         // caught exception
513                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
514                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
515                         msoLogger.debug(exceptionMessage)
516                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
517
518                 }
519
520         }
521
522         public void prepareRpcSDNCRequest (DelegateExecution execution) {
523
524                 execution.setVariable("prefix", Prefix)
525
526                 msoLogger.trace("Inside prepareRpcSDNCRequest of DoDeleteNetworkInstance ")
527
528                 try {
529                         // get variables
530                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
531                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
532
533                         String networkId = ""
534                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
535                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
536                         }
537                         if (networkId == 'null') {networkId = ""}
538
539                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
540
541                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
542                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
543                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
544                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
545                         String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
546                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
547                         execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
548                         msoLogger.debug(Prefix + "deleteSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
549
550                 } catch (Exception ex) {
551                         // caught exception
552                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
553                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
554                         msoLogger.debug(exceptionMessage)
555                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
556
557                 }
558
559         }
560
561
562         public void prepareRpcSDNCDeactivate(DelegateExecution execution) {
563
564                 execution.setVariable("prefix",Prefix)
565
566                 msoLogger.trace("Inside prepareRpcSDNCDeactivate() of DoDeleteNetworkInstance ")
567
568                 try {
569
570                         // get variables
571                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
572                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
573                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
574                         String networkId = ""
575                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
576                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
577                         }
578                         if (networkId == 'null') {networkId = ""}
579                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
580
581                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
582                         String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
583                         execution.setVariable(Prefix + "deactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
584                         msoLogger.debug(" Preparing request for RPC SDNC Topology deactivate - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
585
586
587                 } catch (Exception ex) {
588                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
589                         msoLogger.debug(exceptionMessage)
590                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
591
592                 }
593
594         }
595
596         // **************************************************
597         //     Post or Validate Response Section
598         // **************************************************
599
600         public void validateNetworkResponse (DelegateExecution execution) {
601
602                 execution.setVariable("prefix", Prefix)
603
604                 msoLogger.trace("Inside validateNetworkResponse of DoDeleteNetworkInstance ")
605
606                 try {
607                         String returnCode = execution.getVariable(Prefix + "networkReturnCode")
608                         String networkResponse = execution.getVariable(Prefix + "deleteNetworkResponse")
609
610                         msoLogger.debug(" Network Adapter responseCode: " + returnCode)
611                         msoLogger.debug("Network Adapter Response - " + "\n" + networkResponse)
612                         msoLogger.debug(networkResponse)
613
614                         String errorMessage = ""
615                         if (returnCode == "200") {
616                                 msoLogger.debug(" Network Adapter Response is successful - " + "\n" + networkResponse)
617
618                                 // prepare rollback data
619                                 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
620                                 if ((rollbackData == null) || (rollbackData.isEmpty())) {
621                                         msoLogger.debug(" Network Adapter 'rollback' data is not Sent: " + "\n" + networkResponse)
622                                         execution.setVariable(Prefix + "rollbackNetworkRequest", "")
623                                 } else {
624                                     String rollbackNetwork =
625                                           """<NetworkAdapter:rollbackNetwork xmlns:NetworkAdapter="http://org.onap.so/network">
626                                                         ${rollbackData}
627                                                  </NetworkAdapter:rollbackNetwork>"""
628                                     String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
629                                     execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
630                                     msoLogger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
631                                 }
632
633
634                         } else { // network error
635                            if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) {   //4xx, 5xx
636                                    if (networkResponse.contains("deleteNetworkError")  ) {
637                                            networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
638                                            errorMessage  = utils.getNodeText(networkResponse, "message")
639                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
640                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
641
642                                    } else { // CatchAll exception
643                                            if (returnCode == "500") {
644                                                    errorMessage = "JBWEB000065: HTTP Status 500."
645                                        } else {
646                                                errorMessage = "Return code is " + returnCode
647                                        }
648                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
649                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
650
651                                    }
652
653                            } else { // CatchAll exception
654                                    String dataErrorMessage  = "Received error from Network Adapter. Return code is: " + returnCode
655                                    exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
656
657                            }
658
659                         }
660
661                 } catch (BpmnError e) {
662                         throw e;
663
664                 } catch (Exception ex) {
665                         // caught exception
666                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, validateNetworkResponse() - " + ex.getMessage()
667                         msoLogger.debug(exceptionMessage)
668                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
669
670                 }
671
672         }
673
674         public void validateSDNCResponse (DelegateExecution execution) {
675
676                 execution.setVariable("prefix", Prefix)
677
678                 msoLogger.trace("Inside validateSDNCResponse of DoDeleteNetworkInstance ")
679
680                 String response = execution.getVariable(Prefix + "deleteSDNCResponse")
681                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
682                 WorkflowException workflowException = execution.getVariable("WorkflowException")
683
684                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
685                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
686                 // reset variable
687                 String deleteSDNCResponseDecodeXml = execution.getVariable(Prefix + "deleteSDNCResponse")
688                 deleteSDNCResponseDecodeXml = deleteSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
689                 execution.setVariable(Prefix + "deleteSDNCResponse", deleteSDNCResponseDecodeXml)
690
691                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, prefix+'sdncResponseSuccess'
692                         execution.setVariable(Prefix + "isSdncRollbackNeeded", true)      //
693                         execution.setVariable(Prefix + "isPONR", true)
694                         msoLogger.debug("Successfully Validated SDNC Response")
695                 } else {
696                         msoLogger.debug("Did NOT Successfully Validated SDNC Response")
697                         throw new BpmnError("MSOWorkflowException")
698                 }
699
700         }
701
702         public void validateRpcSDNCDeactivateResponse (DelegateExecution execution) {
703
704                 execution.setVariable("prefix",Prefix)
705
706                 msoLogger.trace("Inside validateRpcSDNCDeactivateResponse() of DoDeleteNetworkInstance ")
707
708                 String response = execution.getVariable(Prefix + "deactivateSDNCResponse")
709                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
710                 WorkflowException workflowException = execution.getVariable("WorkflowException")
711
712                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
713                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
714                 // reset variable
715                 String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "deactivateSDNCResponse")
716                 assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
717                 execution.setVariable(Prefix + "deactivateSDNCResponse", assignSDNCResponseDecodeXml)
718
719                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, Prefix+'sdncResponseSuccess'
720                         execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", true)
721                         msoLogger.debug("Successfully Validated Rpc SDNC Activate Response")
722
723                 } else {
724                         msoLogger.debug("Did NOT Successfully Validated Rpc SDNC Deactivate Response")
725                         throw new BpmnError("MSOWorkflowException")
726                 }
727
728         }
729
730         public void prepareRpcSDNCDeactivateRollback(DelegateExecution execution) {
731
732                 execution.setVariable("prefix",Prefix)
733
734                 msoLogger.trace("Inside prepareRpcSDNCDeactivateRollback() of DoDeleteNetworkInstance ")
735
736                 try {
737
738                         // get variables
739                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
740                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
741                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
742                         String deactivateSDNCResponse = execution.getVariable(Prefix + "deactivateSDNCResponse")
743                         String networkId = utils.getNodeText(deactivateSDNCResponse, "network-id")
744                         if (networkId == 'null') {networkId = ""}
745                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
746
747                         // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
748                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
749                         String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
750                         execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
751                         msoLogger.debug(" Preparing request for RPC SDNC Topology 'activate-CreateNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
752
753
754                 } catch (Exception ex) {
755                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCDeactivateRollback() - " + ex.getMessage()
756                         msoLogger.debug(exceptionMessage)
757                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
758
759                 }
760
761         }
762
763         public void prepareRollbackData(DelegateExecution execution) {
764
765                 execution.setVariable("prefix",Prefix)
766
767                 msoLogger.trace("Inside prepareRollbackData() of DoDeleteNetworkInstance ")
768
769                 try {
770
771                         Map<String, String> rollbackData = new HashMap<String, String>();
772                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
773                         if (rollbackNetworkRequest != null) {
774                                 if (rollbackNetworkRequest != "") {
775                                    rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
776                             }
777                         }
778                         String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
779                         if (rollbackDeactivateSDNCRequest != null) {
780                                 if (rollbackDeactivateSDNCRequest != "") {
781                                 rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
782                             }
783                         }
784                         execution.setVariable("rollbackData", rollbackData)
785                         msoLogger.debug("** rollbackData : " + rollbackData)
786
787                         execution.setVariable("WorkflowException", execution.getVariable("WorkflowException"))
788                         msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
789
790                 } catch (Exception ex) {
791                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
792                         msoLogger.debug(exceptionMessage)
793                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
794
795                 }
796
797         }
798
799         public void postProcessResponse (DelegateExecution execution) {
800
801                 execution.setVariable("prefix", Prefix)
802
803                 msoLogger.trace("Inside postProcessResponse of DoDeleteNetworkInstance ")
804
805                 try {
806
807                         msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
808                         if (execution.getVariable(Prefix + "isException") == false) {
809                                 execution.setVariable(Prefix + "Success", true)
810                                 execution.setVariable("WorkflowException", null)
811                                 if (execution.getVariable(Prefix + "isSilentSuccess") == true) {
812                                         execution.setVariable("rolledBack", false)
813                                 } else {
814                                     execution.setVariable("rolledBack", true)
815                                 }
816                                 prepareSuccessRollbackData(execution) // populate rollbackData
817
818                         } else {
819                                 execution.setVariable(Prefix + "Success", false)
820                                 execution.setVariable("rollbackData", null)
821                                 String exceptionMessage = " Exception encountered in MSO Bpmn. "
822                                 if (execution.getVariable("workflowException") != null) {  // Output of Rollback flow.
823                                    msoLogger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
824                                    WorkflowException wfex = execution.getVariable("workflowException")
825                                    exceptionMessage = wfex.getErrorMessage()
826                                 } else {
827                                if (execution.getVariable(Prefix + "WorkflowException") != null) {
828                                       WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
829                                       exceptionMessage = pwfex.getErrorMessage()
830                                } else {
831                                       if (execution.getVariable("WorkflowException") != null) {
832                                              WorkflowException pwfex = execution.getVariable("WorkflowException")
833                                              exceptionMessage = pwfex.getErrorMessage()
834                                           }
835                                }
836                                 }
837
838                                 // going to the Main flow: a-la-carte or macro
839                                 msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
840                                 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
841                                 throw new BpmnError("MSOWorkflowException")
842
843                         }
844
845                 } catch(BpmnError b){
846                     msoLogger.debug("Rethrowing MSOWorkflowException")
847                     throw b
848
849                 } catch (Exception ex) {
850                         // caught exception
851                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, postProcessResponse() - " + ex.getMessage()
852                         msoLogger.debug(exceptionMessage)
853                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
854                         throw new BpmnError("MSOWorkflowException")
855
856         }
857
858         }
859
860         public void prepareSuccessRollbackData(DelegateExecution execution) {
861
862                 execution.setVariable("prefix",Prefix)
863
864                 msoLogger.trace("Inside prepareSuccessRollbackData() of DoDeleteNetworkInstance ")
865
866                 try {
867
868                         if (execution.getVariable("sdncVersion") != '1610') {
869                                 prepareRpcSDNCDeactivateRollback(execution)
870                                 prepareRpcSDNCUnassignRollback(execution)
871                         } else {
872                             prepareSDNCRollback(execution)
873                         }
874
875                         Map<String, String> rollbackData = new HashMap<String, String>();
876                         String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
877                         if (rollbackSDNCRequest != null) {
878                                 if (rollbackSDNCRequest != "") {
879                                    rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
880                                 }
881                         }
882                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
883                         if (rollbackNetworkRequest != null) {
884                                 if (rollbackNetworkRequest != "") {
885                                    rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
886                             }
887                         }
888                         String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
889                         if (rollbackDeactivateSDNCRequest != null) {
890                                 if (rollbackDeactivateSDNCRequest != "") {
891                                 rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
892                             }
893                         }
894                         execution.setVariable("rollbackData", rollbackData)
895
896                         msoLogger.debug("** rollbackData : " + rollbackData)
897                         execution.setVariable("WorkflowException", null)
898
899
900                 } catch (Exception ex) {
901                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
902                         msoLogger.debug(exceptionMessage)
903                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
904
905                 }
906
907         }
908
909         public void prepareRpcSDNCUnassignRollback(DelegateExecution execution) {
910
911                 execution.setVariable("prefix",Prefix)
912
913                 msoLogger.trace("Inside prepareRpcSDNCUnassignRollbac() of DoDeleteNetworkInstance ")
914
915                 try {
916
917                         // get variables
918                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
919                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
920
921                         String deleteSDNCResponse = execution.getVariable(Prefix + "deleteSDNCResponse")
922                         String networkId = utils.getNodeText(deleteSDNCResponse, "network-id")
923                         if (networkId == 'null') {networkId = ""}
924                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
925
926                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
927                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
928                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
929                         String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
930                         String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
931                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
932                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
933                         msoLogger.debug(Prefix + "rollbackSDNCRequest" + "\n" +  sndcTopologyDeleteRequesAsString)
934                         msoLogger.debug(" Preparing request for RPC SDNC Topology 'assign-CreateNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyDeleteRequesAsString)
935
936
937                 } catch (Exception ex) {
938                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCUnassignRollback() - " + ex.getMessage()
939                         msoLogger.debug(exceptionMessage)
940                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
941
942                 }
943
944         }
945
946         public void prepareSDNCRollback (DelegateExecution execution) {
947
948                 execution.setVariable("prefix", Prefix)
949
950                 msoLogger.trace("Inside prepareSDNCRollback of DoDeleteNetworkInstance ")
951
952                 try {
953
954                         // get variables
955                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
956                         String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
957
958                         String networkId = ""
959                         if (utils.nodeExists(deleteNetworkInput, "network-id")) {
960                                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
961                         }
962                         if (networkId == 'null') {networkId = ""}
963
964                         String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
965
966                         // get/set 'msoRequestId' and 'mso-request-id'
967                         String requestId = execution.getVariable("msoRequestId")
968                         if (requestId != null) {
969                                 execution.setVariable("mso-request-id", requestId)
970                         } else {
971                             requestId = execution.getVariable("mso-request-id")
972                         }
973                         execution.setVariable(Prefix + "requestId", requestId)
974
975                         L3Network queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
976
977                         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
978                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
979                         // 1. prepare delete topology via SDNC Adapter SUBFLOW call
980                         String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "rollback", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
981                     String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
982                         msoLogger.debug(sndcTopologyDeleteRequesAsString)
983                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
984                         msoLogger.debug(Prefix + "rollbackSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
985                         msoLogger.debug(" Preparing request for RPC SDNC Topology 'rollback-DisconnectNetworkRequest' rollback . . . - " + "\n" +  sndcTopologyDeleteRequesAsString)
986
987
988                 } catch (Exception ex) {
989                         // caught exception
990                         String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRollback() - " + ex.getMessage()
991                         msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, exceptionMessage, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception is:\n" + ex);
992                         msoLogger.debug(exceptionMessage)
993                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
994
995                 }
996
997         }
998
999         public void setExceptionFlag(DelegateExecution execution){
1000
1001                 execution.setVariable("prefix",Prefix)
1002
1003                 msoLogger.trace("Inside setExceptionFlag() of DoDeleteNetworkInstance ")
1004
1005                 try {
1006
1007                         execution.setVariable(Prefix + "isException", true)
1008
1009                         if (execution.getVariable("SavedWorkflowException1") != null) {
1010                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
1011                         } else {
1012                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
1013                         }
1014                         msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
1015
1016                 } catch(Exception ex){
1017                           String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
1018                         msoLogger.debug(exceptionMessage)
1019                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
1020                 }
1021
1022         }
1023
1024
1025         // *******************************
1026         //     Build Error Section
1027         // *******************************
1028
1029         public void processJavaException(DelegateExecution execution){
1030
1031                 execution.setVariable("prefix",Prefix)
1032                 try{
1033                         msoLogger.debug("Caught a Java Exception")
1034                         msoLogger.debug("Started processJavaException Method")
1035                         msoLogger.debug("Variables List: " + execution.getVariables())
1036                         execution.setVariable("UnexpectedError", "Caught a Java Lang Exception")  // Adding this line temporarily until this flows error handling gets updated
1037                         exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
1038
1039                 }catch(Exception e){
1040                         msoLogger.debug("Caught Exception during processJavaException Method: " + e)
1041                         execution.setVariable("UnexpectedError", "Exception in processJavaException method")  // Adding this line temporarily until this flows error handling gets updated
1042                         exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
1043                 }
1044                 msoLogger.debug("Completed processJavaException Method of " + Prefix)
1045         }
1046
1047 }