2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 
   6  * ================================================================================
 
   7  * Modifications Copyright (c) 2019 Samsung
 
   8  * ================================================================================
 
   9  * Licensed under the Apache License, Version 2.0 (the "License");
 
  10  * you may not use this file except in compliance with the License.
 
  11  * You may obtain a copy of the License at
 
  13  *      http://www.apache.org/licenses/LICENSE-2.0
 
  15  * Unless required by applicable law or agreed to in writing, software
 
  16  * distributed under the License is distributed on an "AS IS" BASIS,
 
  17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  18  * See the License for the specific language governing permissions and
 
  19  * limitations under the License.
 
  20  * ============LICENSE_END=========================================================
 
  23 package org.onap.so.bpmn.infrastructure.scripts
 
  25 import javax.ws.rs.core.Response
 
  26 import org.camunda.bpm.engine.delegate.BpmnError
 
  27 import org.camunda.bpm.engine.delegate.DelegateExecution
 
  28 import org.onap.aai.domain.yang.L3Network
 
  29 import org.onap.aaiclient.client.aai.AAIObjectType
 
  30 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
 
  31 import org.onap.aaiclient.client.aai.entities.Relationships
 
  32 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 
  33 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
 
  34 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
 
  35 import org.onap.aaiclient.client.graphinventory.entities.uri.Depth
 
  36 import org.onap.logging.filter.base.ErrorCode
 
  37 import org.onap.logging.filter.base.ONAPComponents;
 
  38 import org.onap.so.bpmn.common.scripts.AaiUtil
 
  39 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  40 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  41 import org.onap.so.bpmn.common.scripts.MsoUtils
 
  42 import org.onap.so.bpmn.common.scripts.NetworkUtils
 
  43 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
 
  44 import org.onap.so.bpmn.common.scripts.VidUtils
 
  45 import org.onap.so.bpmn.core.UrnPropertiesReader
 
  46 import org.onap.so.bpmn.core.WorkflowException
 
  47 import org.onap.so.bpmn.core.json.JsonUtils
 
  48 import org.onap.so.client.HttpClient
 
  49 import org.onap.so.client.HttpClientFactory
 
  50 import org.onap.so.constants.Defaults
 
  51 import org.onap.so.logger.LoggingAnchor
 
  52 import org.onap.so.logger.MessageEnum
 
  53 import org.slf4j.Logger
 
  54 import org.slf4j.LoggerFactory
 
  55 import org.springframework.web.util.UriUtils
 
  56 import groovy.json.JsonOutput
 
  58 public class DoDeleteNetworkInstance extends AbstractServiceTaskProcessor {
 
  59     private static final Logger logger = LoggerFactory.getLogger( DoDeleteNetworkInstance.class);
 
  61     String Prefix= "DELNWKI_"
 
  62     String groovyClassName = "DoDeleteNetworkInstance"
 
  63     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  64     JsonUtils jsonUtil = new JsonUtils()
 
  65     VidUtils vidUtils = new VidUtils(this)
 
  66     NetworkUtils networkUtils = new NetworkUtils()
 
  67     SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
  69     public InitializeProcessVariables(DelegateExecution execution){
 
  70         /* Initialize all the process variables in this block */
 
  72         execution.setVariable(Prefix + "networkRequest", "")
 
  73         execution.setVariable(Prefix + "isSilentSuccess", false)
 
  74         execution.setVariable(Prefix + "Success", false)
 
  76         execution.setVariable(Prefix + "requestId", "")
 
  77         execution.setVariable(Prefix + "source", "")
 
  78         execution.setVariable(Prefix + "lcpCloudRegion", "")
 
  79         execution.setVariable(Prefix + "networkInputs", "")
 
  80         execution.setVariable(Prefix + "tenantId", "")
 
  82         execution.setVariable(Prefix + "queryAAIResponse", "")
 
  83         execution.setVariable(Prefix + "aaiReturnCode", "")
 
  84         execution.setVariable(Prefix + "isAAIGood", false)
 
  85         execution.setVariable(Prefix + "isVfRelationshipExist", false)
 
  87         // AAI query Cloud Region
 
  88         execution.setVariable(Prefix + "queryCloudRegionRequest","")
 
  89         execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
 
  90         execution.setVariable(Prefix + "queryCloudRegionResponse","")
 
  91         execution.setVariable(Prefix + "cloudRegionPo","")
 
  92         execution.setVariable(Prefix + "cloudRegionSdnc","")
 
  94         execution.setVariable(Prefix + "deleteNetworkRequest", "")
 
  95         execution.setVariable(Prefix + "deleteNetworkResponse", "")
 
  96         execution.setVariable(Prefix + "networkReturnCode", "")
 
  97         execution.setVariable(Prefix + "rollbackNetworkRequest", "")
 
  99         execution.setVariable(Prefix + "deleteSDNCRequest", "")
 
 100         execution.setVariable(Prefix + "deleteSDNCResponse", "")
 
 101         execution.setVariable(Prefix + "sdncReturnCode", "")
 
 102         execution.setVariable(Prefix + "sdncResponseSuccess", false)
 
 104         execution.setVariable(Prefix + "deactivateSDNCRequest", "")
 
 105         execution.setVariable(Prefix + "deactivateSDNCResponse", "")
 
 106         execution.setVariable(Prefix + "deactivateSdncReturnCode", "")
 
 107         execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", "")
 
 109         execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", "")
 
 110         execution.setVariable(Prefix + "isException", false)
 
 115     // **************************************************
 
 116     //     Pre or Prepare Request Section
 
 117     // **************************************************
 
 119     public void preProcessRequest (DelegateExecution execution) {
 
 121         execution.setVariable("prefix",Prefix)
 
 123         logger.trace("Inside preProcessRequest() of " + groovyClassName + " Request ")
 
 125         // initialize flow variables
 
 126         InitializeProcessVariables(execution)
 
 129             // get incoming message/input
 
 130             execution.setVariable("action", "DELETE")
 
 131             String deleteNetwork = execution.getVariable("bpmnRequest")
 
 132             if (deleteNetwork != null) {
 
 133                 if (deleteNetwork.contains("requestDetails")) {
 
 134                     // JSON format request is sent, create xml
 
 136                         def prettyJson = JsonOutput.prettyPrint(deleteNetwork.toString())
 
 137                         logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
 
 138                         deleteNetwork =  vidUtils.createXmlNetworkRequestInfra(execution, deleteNetwork)
 
 140                     } catch (Exception ex) {
 
 141                         String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
 
 142                         logger.debug(dataErrorMessage)
 
 143                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 146                     // XML format request is sent
 
 150                 // vIPR format request is sent, create xml from individual variables
 
 151                 deleteNetwork = vidUtils.createXmlNetworkRequestInstance(execution)
 
 154             deleteNetwork = utils.formatXml(deleteNetwork)
 
 155             logger.debug(deleteNetwork)
 
 156             execution.setVariable(Prefix + "networkRequest", deleteNetwork)
 
 157             logger.debug(Prefix + "networkRequest - " + '\n' + deleteNetwork)
 
 159             // validate 'backout-on-failure' to override 'mso.rollback'
 
 160             boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, deleteNetwork)
 
 161             execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
 
 162             logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
 
 164             String networkInputs = utils.getNodeXml(deleteNetwork, "network-inputs", false).replace("tag0:","").replace(":tag0","")
 
 165             execution.setVariable(Prefix + "networkInputs", networkInputs)
 
 168             String messageId = execution.getVariable("testMessageId")  // for testing
 
 169             if (messageId == null || messageId == "") {
 
 170                 messageId = UUID.randomUUID()
 
 171                 logger.debug(Prefix + "messageId, random generated: " + messageId)
 
 173                 logger.debug(Prefix + "messageId, pre-assigned: " + messageId)
 
 175             execution.setVariable(Prefix + "messageId", messageId)
 
 177             String source = utils.getNodeText(deleteNetwork, "source")
 
 178             execution.setVariable(Prefix + "source", source)
 
 179             logger.debug(Prefix + "source - " + source)
 
 181             String networkId = ""
 
 182             if (utils.nodeExists(networkInputs, "network-id")) {
 
 183                 networkId = utils.getNodeText(networkInputs, "network-id")
 
 184                 if (networkId == null || networkId == "" || networkId == 'null' ) {
 
 185                     sendSyncError(execution)
 
 186                     // missing value of network-id
 
 187                     String dataErrorMessage = "network-request has missing 'network-id' element/value."
 
 188                     logger.debug(" Invalid Request - " + dataErrorMessage)
 
 189                     exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 193             // lcpCloudRegion or tenantId not sent, will be extracted from query AA&I
 
 194             def lcpCloudRegion = null
 
 195             if (utils.nodeExists(networkInputs, "aic-cloud-region")) {
 
 196                 lcpCloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
 
 197                 if (lcpCloudRegion == 'null') {
 
 198                     lcpCloudRegion = null
 
 201             execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
 
 202             logger.debug("lcpCloudRegion : " + lcpCloudRegion)
 
 204             String tenantId = null
 
 205             if (utils.nodeExists(networkInputs, "tenant-id")) {
 
 206                 tenantId = utils.getNodeText(networkInputs, "tenant-id")
 
 207                 if (tenantId == 'null') {
 
 212             execution.setVariable(Prefix + "tenantId", tenantId)
 
 213             logger.debug("tenantId : " + tenantId)
 
 215             String sdncVersion = execution.getVariable("sdncVersion")
 
 216             logger.debug("sdncVersion? : " + sdncVersion)
 
 218             // PO Authorization Info / headers Authorization=
 
 219             String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
 
 222                 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
 
 223                 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
 
 224                 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
 
 226             } catch (IOException ex) {
 
 227                 String dataErrorMessage = " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
 
 228                 logger.debug(dataErrorMessage )
 
 229                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 232         } catch (BpmnError e) {
 
 235         } catch (Exception ex){
 
 237             String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, PreProcessRequest() - " + ex.getMessage()
 
 238             logger.debug(exceptionMessage)
 
 239             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 246     public void callRESTQueryAAI (DelegateExecution execution) {
 
 248         execution.setVariable("prefix",Prefix)
 
 250         logger.debug(" ***** Inside callRESTQueryAAI() of DoDoDeleteNetworkInstance ***** " )
 
 253         String networkInputs  = execution.getVariable(Prefix + "networkInputs")
 
 254         String networkId   = utils.getNodeText(networkInputs, "network-id")
 
 255         networkId = UriUtils.encode(networkId,"UTF-8")
 
 256         ExceptionUtil exceptionUtil = new ExceptionUtil()
 
 257         Boolean isVfRelationshipExist = false
 
 259             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ALL)
 
 260             Optional<L3Network> l3Network = getAAIClient().get(L3Network.class,uri);
 
 261             AAIResultWrapper wrapper = getAAIClient().get(uri);
 
 262             Optional<Relationships> relationships = wrapper.getRelationships()
 
 264             if (l3Network.isPresent()) {
 
 265                 execution.setVariable(Prefix + "aaiReturnCode", 200)
 
 266                 execution.setVariable(Prefix + "queryAAIResponse", l3Network.get())
 
 267                 execution.setVariable(Prefix + "isAAIGood", true)
 
 268                 if (relationships.isPresent()){
 
 269                     if(!relationships.get().getRelatedAAIUris(AAIObjectType.VF_MODULE).isEmpty()){
 
 270                         execution.setVariable(Prefix + "isVfRelationshipExist", true)
 
 271                         isVfRelationshipExist = true
 
 272                         String relationshipMessage = "AAI Query Success Response but 'vf-module' relationship exist, not allowed to delete: network Id: " + networkId
 
 273                         exceptionUtil.buildWorkflowException(execution, 2500, relationshipMessage)
 
 275                         List<AAIResourceUri> tenantURIList = relationships.get().getRelatedAAIUris(AAIObjectType.TENANT)
 
 276                         for(AAIResourceUri tenantURI: tenantURIList){
 
 277                             if(execution.getVariable(Prefix + "tenantId") == null) {
 
 278                                 String tenantId = tenantURI.getURIKeys().get(AAIFluentTypeBuilder.Types.TENANT.getUriParams().tenantId)
 
 279                                 execution.setVariable(Prefix + "tenantId", tenantId)
 
 280                                 logger.debug(" Get AAI getTenantId()  : " + tenantId)
 
 283                         List<AAIResourceUri> cloudRegionURIList = relationships.get().getRelatedAAIUris(AAIObjectType.CLOUD_REGION)
 
 284                         for(AAIResourceUri tenantURI: cloudRegionURIList){
 
 285                             if(execution.getVariable(Prefix + "lcpCloudRegion") == null) {
 
 286                                 String lcpCloudRegion = tenantURI.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudRegionId)
 
 287                                 execution.setVariable(Prefix + "lcpCloudRegion", lcpCloudRegion)
 
 288                                 logger.debug(" Get AAI getCloudRegion()  : " + lcpCloudRegion)
 
 293                 logger.debug(Prefix + "isVfRelationshipExist - " + isVfRelationshipExist)
 
 295                 // not found // empty aai response
 
 296                 execution.setVariable(Prefix + "aaiReturnCode", 404)
 
 297                 execution.setVariable(Prefix + "isAAIGood", false)
 
 298                 execution.setVariable(Prefix + "isSilentSuccess", true)
 
 299                 logger.debug(" AAI Query is Silent Success")
 
 301             logger.debug(" AAI Query call, isAAIGood? : " + execution.getVariable(Prefix + "isAAIGood"))
 
 302         } catch (Exception ex) {
 
 304             String exceptionMessage = "Exception Encountered in DoDeleteNetworkInstance, callRESTQueryAAI() - " + ex.getMessage()
 
 305             logger.debug(exceptionMessage)
 
 306             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 312     public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
 
 314         execution.setVariable("prefix", Prefix)
 
 316         logger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoDeleteNetworkInstance ***** " )
 
 319             String networkInputs  = execution.getVariable(Prefix + "networkInputs")
 
 320             // String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
 
 321             String cloudRegion = execution.getVariable(Prefix + "lcpCloudRegion")
 
 323             AaiUtil aaiUtil = new AaiUtil(this)
 
 325             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
 
 326             def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
 
 328             execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
 
 330             String cloudRegionPo = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "PO", cloudRegion)
 
 331             String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "SDNC", cloudRegion)
 
 333             if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
 
 334                 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
 
 335                 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
 
 338                 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
 
 339                 logger.debug(dataErrorMessage)
 
 340                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 344         } catch (BpmnError e) {
 
 347         } catch (Exception ex) {
 
 349             String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, callRESTQueryAAICloudRegion(). Unexpected Response from AAI - " + ex.getMessage()
 
 350             logger.debug(exceptionMessage)
 
 351             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 357     public void prepareNetworkRequest (DelegateExecution execution) {
 
 359         execution.setVariable("prefix", Prefix)
 
 361         logger.trace("Inside prepareNetworkRequest of DoDeleteNetworkInstance ")
 
 362         ExceptionUtil exceptionUtil = new ExceptionUtil()
 
 365             String networkRequest = execution.getVariable(Prefix + "networkRequest")
 
 366             String cloudSiteId = execution.getVariable(Prefix + "cloudRegionPo")
 
 367             String tenantId = execution.getVariable(Prefix + "tenantId")
 
 369             L3Network l3Network = execution.getVariable(Prefix + "queryAAIResponse")
 
 370             String networkType = l3Network.getNetworkType()
 
 371             String networkId = l3Network.getNetworkId()
 
 373             String networkStackId = ""
 
 374             networkStackId = l3Network.getHeatStackId()
 
 375             if (networkStackId == 'null' || networkStackId == "" || networkStackId == null) {
 
 376                 networkStackId = "force_delete"
 
 379             String requestId = execution.getVariable("msoRequestId")
 
 380             if (requestId != null) {
 
 381                 execution.setVariable("mso-request-id", requestId)
 
 383                 requestId = execution.getVariable("mso-request-id")
 
 385             String serviceInstanceId = execution.getVariable("serviceInstanceId")
 
 387             // Added new Elements
 
 388             String messageId = execution.getVariable(Prefix + "messageId")
 
 389             String notificationUrl = ""                                   //TODO - is this coming from URN? What variable/value to use?
 
 390             //String notificationUrl = execution.getVariable("URN_?????") //TODO - is this coming from URN? What variable/value to use?
 
 392             String modelCustomizationUuid = ""
 
 393             if (utils.nodeExists(networkRequest, "networkModelInfo")) {
 
 394                 String networkModelInfo = utils.getNodeXml(networkRequest, "networkModelInfo", false).replace("tag0:","").replace(":tag0","")
 
 395                 modelCustomizationUuid = utils.getNodeText(networkModelInfo, "modelCustomizationUuid")
 
 397                 modelCustomizationUuid = utils.getNodeText(networkRequest, "modelCustomizationId")
 
 400             String deleteNetworkRequest = """
 
 401                                           <deleteNetworkRequest>
 
 402                                             <cloudSiteId>${MsoUtils.xmlEscape(cloudSiteId)}</cloudSiteId>
 
 403                                             <tenantId>${MsoUtils.xmlEscape(tenantId)}</tenantId>
 
 404                                             <networkId>${MsoUtils.xmlEscape(networkId)}</networkId>
 
 405                                                 <networkStackId>${MsoUtils.xmlEscape(networkStackId)}</networkStackId>
 
 406                                             <networkType>${MsoUtils.xmlEscape(networkType)}</networkType>
 
 407                                                 <modelCustomizationUuid>${MsoUtils.xmlEscape(modelCustomizationUuid)}</modelCustomizationUuid>
 
 408                                                 <skipAAI>true</skipAAI>
 
 410                                                <requestId>${MsoUtils.xmlEscape(requestId)}</requestId>
 
 411                                                <serviceInstanceId>${MsoUtils.xmlEscape(serviceInstanceId)}</serviceInstanceId>
 
 413                                                 <messageId>${MsoUtils.xmlEscape(messageId)}</messageId>
 
 414                                                 <notificationUrl>${MsoUtils.xmlEscape(notificationUrl)}</notificationUrl>
 
 415                                           </deleteNetworkRequest>
 
 418             logger.debug(Prefix + "deleteNetworkRequest - " + "\n" +  deleteNetworkRequest)
 
 420             String buildDeleteNetworkRequestAsString = utils.formatXml(deleteNetworkRequest)
 
 421             logger.debug(buildDeleteNetworkRequestAsString)
 
 422             logger.debug(Prefix + "deleteNetworkRequestAsString - " + "\n" +  buildDeleteNetworkRequestAsString)
 
 424             String restURL = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint", execution)
 
 425             execution.setVariable("mso.adapters.network.rest.endpoint", restURL + "/" + networkId)
 
 426             logger.debug("mso.adapters.network.rest.endpoint - " + "\n" +  restURL + "/" + networkId)
 
 428             execution.setVariable(Prefix + "deleteNetworkRequest", buildDeleteNetworkRequestAsString)
 
 429             logger.debug(Prefix + "deleteNetworkRequest - " + "\n" +  buildDeleteNetworkRequestAsString)
 
 431         catch (Exception ex) {
 
 433             String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareNetworkRequest(). Unexpected Response from AAI - " + ex.getMessage()
 
 434             logger.debug(exceptionMessage)
 
 435             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 441      * This method is used instead of an HTTP Connector task because the
 
 442      * connector does not allow DELETE with a body.
 
 444     public void sendRequestToVnfAdapter(DelegateExecution execution) {
 
 445         def method = getClass().getSimpleName() + '.sendRequestToVnfAdapter(' +
 
 446                 'execution=' + execution.getId() +
 
 449         logger.trace('Entered ' + method)
 
 453             String vnfAdapterUrl = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint",execution)
 
 454             String vnfAdapterRequest = execution.getVariable(Prefix + "deleteNetworkRequest")
 
 456             URL url = new URL(vnfAdapterUrl)
 
 457             HttpClient httpClient = new HttpClientFactory().newXmlClient(url, ONAPComponents.OPENSTACK_ADAPTER)
 
 458             httpClient.accept = "application/xml"
 
 459             httpClient.addAdditionalHeader("Authorization", execution.getVariable("BasicAuthHeaderValuePO"))
 
 460             Response response = httpClient.delete(vnfAdapterRequest)
 
 462             execution.setVariable(Prefix + "deleteNetworkResponse", response.readEntity(String.class))
 
 463             execution.setVariable(Prefix + "networkReturnCode", response.getStatus())
 
 465         } catch (Exception ex) {
 
 467             String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, sendRequestToVnfAdapter() - " + ex.getMessage()
 
 468             logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
 
 469                     "BPMN", ErrorCode.UnknownError.getValue(),
 
 470                     "Exception is:\n" + ex);
 
 471             logger.debug(exceptionMessage)
 
 472             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 478     public void prepareSDNCRequest (DelegateExecution execution) {
 
 480         execution.setVariable("prefix", Prefix)
 
 482         logger.trace("Inside prepareSDNCRequest of DoDeleteNetworkInstance ")
 
 486             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
 487             String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 489             String networkId = ""
 
 490             if (utils.nodeExists(deleteNetworkInput, "network-id")) {
 
 491                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
 
 493             if (networkId == 'null') {networkId = ""}
 
 495             String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
 
 497             // get/set 'msoRequestId' and 'mso-request-id'
 
 498             String requestId = execution.getVariable("msoRequestId")
 
 499             if (requestId != null) {
 
 500                 execution.setVariable("mso-request-id", requestId)
 
 502                 requestId = execution.getVariable("mso-request-id")
 
 504             execution.setVariable(Prefix + "requestId", requestId)
 
 505             logger.debug(Prefix + "requestId " + requestId)
 
 506             L3Network queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
 
 508             SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
 509             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 510             // 1. prepare delete topology via SDNC Adapter SUBFLOW call
 
 511             String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "delete", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
 
 512             String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
 
 513             logger.debug(sndcTopologyDeleteRequesAsString)
 
 514             execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
 
 515             logger.debug(Prefix + "deleteSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
 
 517         } catch (Exception ex) {
 
 519             String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
 
 520             logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
 
 521                     "BPMN", ErrorCode.UnknownError.getValue(),
 
 522                     "Exception is:\n" + ex);
 
 523             logger.debug(exceptionMessage)
 
 524             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 530     public void prepareRpcSDNCRequest (DelegateExecution execution) {
 
 532         execution.setVariable("prefix", Prefix)
 
 534         logger.trace("Inside prepareRpcSDNCRequest of DoDeleteNetworkInstance ")
 
 538             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
 539             String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 541             String networkId = ""
 
 542             if (utils.nodeExists(deleteNetworkInput, "network-id")) {
 
 543                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
 
 545             if (networkId == 'null') {networkId = ""}
 
 547             String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
 
 549             SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
 550             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 551             // 1. prepare delete topology via SDNC Adapter SUBFLOW call
 
 552             String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
 
 553             String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
 
 554             logger.debug(sndcTopologyDeleteRequesAsString)
 
 555             execution.setVariable(Prefix + "deleteSDNCRequest", sndcTopologyDeleteRequesAsString)
 
 556             logger.debug(Prefix + "deleteSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
 
 558         } catch (Exception ex) {
 
 560             String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRequest() - " + ex.getMessage()
 
 561             logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
 
 562                     "BPMN", ErrorCode.UnknownError.getValue(),
 
 563                     "Exception is:\n" + ex);
 
 564             logger.debug(exceptionMessage)
 
 565             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 572     public void prepareRpcSDNCDeactivate(DelegateExecution execution) {
 
 574         execution.setVariable("prefix",Prefix)
 
 576         logger.trace("Inside prepareRpcSDNCDeactivate() of DoDeleteNetworkInstance ")
 
 581             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
 582             String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 583             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 584             String networkId = ""
 
 585             if (utils.nodeExists(deleteNetworkInput, "network-id")) {
 
 586                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
 
 588             if (networkId == 'null') {networkId = ""}
 
 589             String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
 
 591             String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
 
 592             String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
 
 593             execution.setVariable(Prefix + "deactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
 
 594             logger.debug(" Preparing request for RPC SDNC Topology deactivate - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
 
 597         } catch (Exception ex) {
 
 598             String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
 
 599             logger.debug(exceptionMessage)
 
 600             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
 606     public void validateSDNCResponse (DelegateExecution execution) {
 
 608         execution.setVariable("prefix", Prefix)
 
 610         logger.trace("Inside validateSDNCResponse of DoDeleteNetworkInstance ")
 
 612         String response = execution.getVariable(Prefix + "deleteSDNCResponse")
 
 613         boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
 
 614         WorkflowException workflowException = execution.getVariable("WorkflowException")
 
 616         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
 617         sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
 
 619         String deleteSDNCResponseDecodeXml = execution.getVariable(Prefix + "deleteSDNCResponse")
 
 620         deleteSDNCResponseDecodeXml = deleteSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
 
 621         execution.setVariable(Prefix + "deleteSDNCResponse", deleteSDNCResponseDecodeXml)
 
 623         if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, prefix+'sdncResponseSuccess'
 
 624             execution.setVariable(Prefix + "isSdncRollbackNeeded", true)      //
 
 625             execution.setVariable(Prefix + "isPONR", true)
 
 626             logger.debug("Successfully Validated SDNC Response")
 
 628             logger.debug("Did NOT Successfully Validated SDNC Response")
 
 629             throw new BpmnError("MSOWorkflowException")
 
 634     public void validateRpcSDNCDeactivateResponse (DelegateExecution execution) {
 
 636         execution.setVariable("prefix",Prefix)
 
 638         logger.trace("Inside validateRpcSDNCDeactivateResponse() of DoDeleteNetworkInstance ")
 
 640         String response = execution.getVariable(Prefix + "deactivateSDNCResponse")
 
 641         boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
 
 642         WorkflowException workflowException = execution.getVariable("WorkflowException")
 
 644         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
 645         sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
 
 647         String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "deactivateSDNCResponse")
 
 648         assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
 
 649         execution.setVariable(Prefix + "deactivateSDNCResponse", assignSDNCResponseDecodeXml)
 
 651         if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, Prefix+'sdncResponseSuccess'
 
 652             execution.setVariable(Prefix + "isSdncDeactivateRollbackNeeded", true)
 
 653             logger.debug("Successfully Validated Rpc SDNC Activate Response")
 
 656             logger.debug("Did NOT Successfully Validated Rpc SDNC Deactivate Response")
 
 657             throw new BpmnError("MSOWorkflowException")
 
 662     public void prepareRpcSDNCDeactivateRollback(DelegateExecution execution) {
 
 664         execution.setVariable("prefix",Prefix)
 
 666         logger.trace("Inside prepareRpcSDNCDeactivateRollback() of DoDeleteNetworkInstance ")
 
 671             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
 672             String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 673             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 674             String deactivateSDNCResponse = execution.getVariable(Prefix + "deactivateSDNCResponse")
 
 675             String networkId = utils.getNodeText(deactivateSDNCResponse, "network-id")
 
 676             if (networkId == 'null') {networkId = ""}
 
 677             String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
 
 679             // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
 
 680             String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
 
 681             String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
 
 682             execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
 
 683             logger.debug(" Preparing request for RPC SDNC Topology 'activate-CreateNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
 
 686         } catch (Exception ex) {
 
 687             String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCDeactivateRollback() - " + ex.getMessage()
 
 688             logger.debug(exceptionMessage)
 
 689             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
 695     public void prepareRollbackData(DelegateExecution execution) {
 
 697         execution.setVariable("prefix",Prefix)
 
 699         logger.trace("Inside prepareRollbackData() of DoDeleteNetworkInstance ")
 
 703             Map<String, String> rollbackData = new HashMap<String, String>();
 
 704             String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
 
 705             if (rollbackNetworkRequest != null) {
 
 706                 if (rollbackNetworkRequest != "") {
 
 707                     rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
 
 710             String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
 
 711             if (rollbackDeactivateSDNCRequest != null) {
 
 712                 if (rollbackDeactivateSDNCRequest != "") {
 
 713                     rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
 
 716             execution.setVariable("rollbackData", rollbackData)
 
 717             logger.debug("** rollbackData : " + rollbackData)
 
 719             execution.setVariable("WorkflowException", execution.getVariable("WorkflowException"))
 
 720             logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
 
 722         } catch (Exception ex) {
 
 723             String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
 
 724             logger.debug(exceptionMessage)
 
 725             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
 731     public void postProcessResponse (DelegateExecution execution) {
 
 733         execution.setVariable("prefix", Prefix)
 
 735         logger.trace("Inside postProcessResponse of DoDeleteNetworkInstance ")
 
 739             logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
 
 740             if (execution.getVariable(Prefix + "isException") == false) {
 
 741                 execution.setVariable(Prefix + "Success", true)
 
 742                 execution.setVariable("WorkflowException", null)
 
 743                 if (execution.getVariable(Prefix + "isSilentSuccess") == true) {
 
 744                     execution.setVariable("rolledBack", false)
 
 746                     execution.setVariable("rolledBack", true)
 
 748                 prepareSuccessRollbackData(execution) // populate rollbackData
 
 751                 execution.setVariable(Prefix + "Success", false)
 
 752                 execution.setVariable("rollbackData", null)
 
 753                 String exceptionMessage = " Exception encountered in MSO Bpmn. "
 
 754                 if (execution.getVariable("workflowException") != null) {  // Output of Rollback flow.
 
 755                     logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
 
 756                     WorkflowException wfex = execution.getVariable("workflowException")
 
 757                     exceptionMessage = wfex.getErrorMessage()
 
 759                     if (execution.getVariable(Prefix + "WorkflowException") != null) {
 
 760                         WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
 
 761                         exceptionMessage = pwfex.getErrorMessage()
 
 763                         if (execution.getVariable("WorkflowException") != null) {
 
 764                             WorkflowException pwfex = execution.getVariable("WorkflowException")
 
 765                             exceptionMessage = pwfex.getErrorMessage()
 
 770                 // going to the Main flow: a-la-carte or macro
 
 771                 logger.debug(" ***** postProcessResponse(), BAD !!!")
 
 772                 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
 773                 throw new BpmnError("MSOWorkflowException")
 
 777         } catch(BpmnError b){
 
 778             logger.debug("Rethrowing MSOWorkflowException")
 
 781         } catch (Exception ex) {
 
 783             String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, postProcessResponse() - " + ex.getMessage()
 
 784             logger.debug(exceptionMessage)
 
 785             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
 786             throw new BpmnError("MSOWorkflowException")
 
 792     public void prepareSuccessRollbackData(DelegateExecution execution) {
 
 794         execution.setVariable("prefix",Prefix)
 
 796         logger.trace("Inside prepareSuccessRollbackData() of DoDeleteNetworkInstance ")
 
 800             if (execution.getVariable("sdncVersion") != '1610') {
 
 801                 prepareRpcSDNCDeactivateRollback(execution)
 
 802                 prepareRpcSDNCUnassignRollback(execution)
 
 804                 prepareSDNCRollback(execution)
 
 807             Map<String, String> rollbackData = new HashMap<String, String>();
 
 808             String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
 
 809             if (rollbackSDNCRequest != null) {
 
 810                 if (rollbackSDNCRequest != "") {
 
 811                     rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
 
 814             String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
 
 815             if (rollbackNetworkRequest != null) {
 
 816                 if (rollbackNetworkRequest != "") {
 
 817                     rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
 
 820             String rollbackDeactivateSDNCRequest = execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")
 
 821             if (rollbackDeactivateSDNCRequest != null) {
 
 822                 if (rollbackDeactivateSDNCRequest != "") {
 
 823                     rollbackData.put("rollbackDeactivateSDNCRequest", execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest"))
 
 826             execution.setVariable("rollbackData", rollbackData)
 
 828             logger.debug("** rollbackData : " + rollbackData)
 
 829             execution.setVariable("WorkflowException", null)
 
 832         } catch (Exception ex) {
 
 833             String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
 
 834             logger.debug(exceptionMessage)
 
 835             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
 841     public void prepareRpcSDNCUnassignRollback(DelegateExecution execution) {
 
 843         execution.setVariable("prefix",Prefix)
 
 845         logger.trace("Inside prepareRpcSDNCUnassignRollbac() of DoDeleteNetworkInstance ")
 
 850             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
 851             String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 853             String deleteSDNCResponse = execution.getVariable(Prefix + "deleteSDNCResponse")
 
 854             String networkId = utils.getNodeText(deleteSDNCResponse, "network-id")
 
 855             if (networkId == 'null') {networkId = ""}
 
 856             String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
 
 858             SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
 859             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 860             // 1. prepare delete topology via SDNC Adapter SUBFLOW call
 
 861             String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
 
 862             String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
 
 863             logger.debug(sndcTopologyDeleteRequesAsString)
 
 864             execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
 
 865             logger.debug(Prefix + "rollbackSDNCRequest" + "\n" +  sndcTopologyDeleteRequesAsString)
 
 866             logger.debug(" Preparing request for RPC SDNC Topology 'assign-CreateNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyDeleteRequesAsString)
 
 869         } catch (Exception ex) {
 
 870             String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstance flow. prepareRpcSDNCUnassignRollback() - " + ex.getMessage()
 
 871             logger.debug(exceptionMessage)
 
 872             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
 878     public void prepareSDNCRollback (DelegateExecution execution) {
 
 880         execution.setVariable("prefix", Prefix)
 
 882         logger.trace("Inside prepareSDNCRollback of DoDeleteNetworkInstance ")
 
 887             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
 888             String deleteNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 890             String networkId = ""
 
 891             if (utils.nodeExists(deleteNetworkInput, "network-id")) {
 
 892                 networkId = utils.getNodeText(deleteNetworkInput, "network-id")
 
 894             if (networkId == 'null') {networkId = ""}
 
 896             String serviceInstanceId = utils.getNodeText(deleteNetworkInput, "service-instance-id")
 
 898             // get/set 'msoRequestId' and 'mso-request-id'
 
 899             String requestId = execution.getVariable("msoRequestId")
 
 900             if (requestId != null) {
 
 901                 execution.setVariable("mso-request-id", requestId)
 
 903                 requestId = execution.getVariable("mso-request-id")
 
 905             execution.setVariable(Prefix + "requestId", requestId)
 
 907             L3Network queryAAIResponse = execution.getVariable(Prefix + "queryAAIResponse")
 
 909             SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
 910             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 911             // 1. prepare delete topology via SDNC Adapter SUBFLOW call
 
 912             String sndcTopologyDeleteRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "rollback", "DisconnectNetworkRequest", cloudRegionId, networkId, queryAAIResponse, null)
 
 913             String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
 
 914             logger.debug(sndcTopologyDeleteRequesAsString)
 
 915             execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyDeleteRequesAsString)
 
 916             logger.debug(Prefix + "rollbackSDNCRequest - " + "\n" +  sndcTopologyDeleteRequesAsString)
 
 917             logger.debug(" Preparing request for RPC SDNC Topology 'rollback-DisconnectNetworkRequest' rollback . . . - " + "\n" +  sndcTopologyDeleteRequesAsString)
 
 920         } catch (Exception ex) {
 
 922             String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance, prepareSDNCRollback() - " + ex.getMessage()
 
 923             logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), exceptionMessage,
 
 924                     "BPMN", ErrorCode.UnknownError.getValue(),
 
 925                     "Exception is:\n" + ex);
 
 926             logger.debug(exceptionMessage)
 
 927             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 933     public void setExceptionFlag(DelegateExecution execution){
 
 935         execution.setVariable("prefix",Prefix)
 
 937         logger.trace("Inside setExceptionFlag() of DoDeleteNetworkInstance ")
 
 941             execution.setVariable(Prefix + "isException", true)
 
 943             if (execution.getVariable("SavedWorkflowException1") != null) {
 
 944                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
 
 946                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
 
 948             logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
 
 950         } catch(Exception ex){
 
 951             String exceptionMessage = "Bpmn error encountered in DoDeleteNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
 
 952             logger.debug(exceptionMessage)
 
 953             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
 959     // *******************************
 
 960     //     Build Error Section
 
 961     // *******************************
 
 963     public void processJavaException(DelegateExecution execution){
 
 965         execution.setVariable("prefix",Prefix)
 
 967             logger.debug("Caught a Java Exception")
 
 968             logger.debug("Started processJavaException Method")
 
 969             logger.debug("Variables List: " + execution.getVariables())
 
 970             execution.setVariable("UnexpectedError", "Caught a Java Lang Exception")  // Adding this line temporarily until this flows error handling gets updated
 
 971             exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
 
 974             logger.debug("Caught Exception during processJavaException Method: " + e)
 
 975             execution.setVariable("UnexpectedError", "Exception in processJavaException method")  // Adding this line temporarily until this flows error handling gets updated
 
 976             exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
 
 978         logger.debug("Completed processJavaException Method of " + Prefix)