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.UriBuilder
 
  26 import javax.xml.parsers.DocumentBuilder
 
  27 import javax.xml.parsers.DocumentBuilderFactory
 
  28 import org.apache.commons.lang3.*
 
  29 import org.camunda.bpm.engine.delegate.BpmnError
 
  30 import org.camunda.bpm.engine.delegate.DelegateExecution
 
  31 import org.onap.so.bpmn.common.scripts.AaiUtil
 
  32 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  33 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  34 import org.onap.so.bpmn.common.scripts.MsoUtils
 
  35 import org.onap.so.bpmn.common.scripts.NetworkUtils
 
  36 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
 
  37 import org.onap.so.bpmn.common.scripts.VidUtils
 
  38 import org.onap.so.bpmn.core.UrnPropertiesReader
 
  39 import org.onap.so.bpmn.core.WorkflowException
 
  40 import org.onap.so.bpmn.core.json.JsonUtils
 
  41 import org.onap.so.client.aai.AAIObjectType
 
  42 import org.onap.so.client.aai.AAIResourcesClient
 
  43 import org.onap.so.client.aai.entities.uri.AAIResourceUri
 
  44 import org.onap.so.client.aai.entities.uri.AAIUriFactory
 
  45 import org.onap.so.client.aai.entities.AAIResultWrapper
 
  46 import org.onap.so.client.graphinventory.entities.uri.Depth
 
  47 import org.onap.so.constants.Defaults
 
  48 import org.slf4j.Logger
 
  49 import org.slf4j.LoggerFactory
 
  51 import org.springframework.web.util.UriUtils
 
  52 import org.w3c.dom.Document
 
  53 import org.w3c.dom.Element
 
  54 import org.w3c.dom.NamedNodeMap
 
  55 import org.w3c.dom.Node
 
  56 import org.w3c.dom.NodeList;
 
  57 import org.xml.sax.InputSource
 
  58 import org.onap.aai.domain.yang.VpnBinding
 
  59 import org.onap.aai.domain.yang.L3Network
 
  60 import org.onap.aai.domain.yang.NetworkPolicy
 
  61 import org.onap.aai.domain.yang.RouteTableReference
 
  62 import org.onap.aai.domain.yang.RouteTarget
 
  63 import org.onap.aai.domain.yang.Subnet
 
  64 import javax.ws.rs.NotFoundException
 
  67 import groovy.xml.XmlUtil
 
  70  * This groovy class supports the <class>DoUpdateNetworkInstance.bpmn</class> process.
 
  73 public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor {
 
  74     private static final Logger logger = LoggerFactory.getLogger( DoUpdateNetworkInstance.class);
 
  76         String Prefix="UPDNETI_"
 
  77         ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  78         JsonUtils jsonUtil = new JsonUtils()
 
  79         VidUtils vidUtils = new VidUtils(this)
 
  80         NetworkUtils networkUtils = new NetworkUtils()
 
  81         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
  84          * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
 
  87         public InitializeProcessVariables(DelegateExecution execution){
 
  88                 /* Initialize all the process variables in this block */
 
  90                 execution.setVariable(Prefix + "messageId", "")
 
  91                 execution.setVariable("BasicAuthHeaderValuePO", "")
 
  92                 execution.setVariable("BasicAuthHeaderValueSDNC", "")
 
  93                 execution.setVariable(Prefix + "networkRequest", "")
 
  94                 execution.setVariable(Prefix + "networkInputs", "")
 
  95                 execution.setVariable(Prefix + "networkOutputs", "")
 
  96                 execution.setVariable(Prefix + "requestId", "")
 
  97                 execution.setVariable(Prefix + "source", "")
 
  98                 execution.setVariable(Prefix + "networkId", "")
 
 100                 execution.setVariable(Prefix + "isPONR", false)    // Point-of-no-return, means, rollback is not needed
 
 102                 // AAI query Cloud Region
 
 103                 execution.setVariable(Prefix + "queryCloudRegionRequest","")
 
 104                 execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
 
 105                 execution.setVariable(Prefix + "queryCloudRegionResponse","")
 
 106                 execution.setVariable(Prefix + "cloudRegionPo","")
 
 107                 execution.setVariable(Prefix + "cloudRegionSdnc","")
 
 108                 execution.setVariable(Prefix + "isCloudRegionGood", false)
 
 111                 execution.setVariable(Prefix + "queryIdAAIRequest","")
 
 112                 execution.setVariable(Prefix + "queryIdAAIResponse", "")
 
 113                 execution.setVariable(Prefix + "aaiIdReturnCode", "")
 
 115                 // AAI query vpn binding
 
 116                 execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
 
 117                 execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
 
 118                 execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
 
 119                 execution.setVariable(Prefix + "vpnBindings", null)
 
 120                 execution.setVariable(Prefix + "vpnCount", 0)
 
 121                 execution.setVariable(Prefix + "routeCollection", "")
 
 123                 // AAI query network policy
 
 124                 execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
 
 125                 execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
 
 126                 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
 
 127                 execution.setVariable(Prefix + "networkPolicyUriList", null)
 
 128                 execution.setVariable(Prefix + "networkPolicyCount", 0)
 
 129                 execution.setVariable(Prefix + "networkCollection", "")
 
 131                 // AAI query route table reference
 
 132                 execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
 
 133                 execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
 
 134                 execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
 
 135                 execution.setVariable(Prefix + "networkTableRefUriList", null)
 
 136                 execution.setVariable(Prefix + "networkTableRefCount", 0)
 
 137                 execution.setVariable(Prefix + "tableRefCollection", "")
 
 140                 execution.setVariable(Prefix + "requeryIdAAIRequest","")
 
 141                 execution.setVariable(Prefix + "requeryIdAAIResponse", "")
 
 142                 execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
 
 144                 // AAI update contrail
 
 145                 execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
 
 146                 execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
 
 147                 execution.setVariable(Prefix + "updateContrailAAIResponse", "")
 
 148                 execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
 
 150                 execution.setVariable(Prefix + "updateNetworkRequest", "")
 
 151                 execution.setVariable(Prefix + "updateNetworkResponse", "")
 
 152                 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
 
 153                 execution.setVariable(Prefix + "networkReturnCode", "")
 
 154                 execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
 
 156                 execution.setVariable(Prefix + "changeAssignSDNCRequest", "")
 
 157                 execution.setVariable(Prefix + "changeAssignSDNCResponse", "")
 
 158                 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
 
 159                 execution.setVariable(Prefix + "sdncReturnCode", "")
 
 160                 execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
 
 161                 execution.setVariable(Prefix + "sdncResponseSuccess", false)
 
 163                 execution.setVariable(Prefix + "isVnfBindingPresent", false)
 
 164                 execution.setVariable(Prefix + "Success", false)
 
 165                 execution.setVariable(Prefix + "serviceInstanceId", "")
 
 167                 execution.setVariable(Prefix + "isException", false)
 
 171         // **************************************************
 
 172         //     Pre or Prepare Request Section
 
 173         // **************************************************
 
 175          * This method is executed during the preProcessRequest task of the <class>DoUpdateNetworkInstance.bpmn</class> process.
 
 178         public void preProcessRequest (DelegateExecution execution) {
 
 180                 execution.setVariable("prefix",Prefix)
 
 182                 logger.trace("Inside preProcessRequest DoUpdateNetworkInstance Request ")
 
 185                         // initialize flow variables
 
 186                         InitializeProcessVariables(execution)
 
 188                         // GET Incoming request & validate 3 kinds of format.
 
 189                         execution.setVariable("action", "UPDATE")
 
 190                         String networkRequest = execution.getVariable("bpmnRequest")
 
 191                         if (networkRequest != null) {
 
 192                                 if (networkRequest.contains("requestDetails")) {
 
 193                                         // JSON format request is sent, create xml
 
 195                                                 def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
 
 196                                                 logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
 
 197                                                 networkRequest =  vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
 
 199                                         } catch (Exception ex) {
 
 200                                                 String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
 
 201                                                 logger.debug(dataErrorMessage)
 
 202                                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 205                                          // XML format request is sent
 
 209                                 // vIPR format request is sent, create xml from individual variables
 
 210                                 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
 
 213                         networkRequest = utils.formatXml(networkRequest)
 
 214                         logger.debug(networkRequest)
 
 215                         execution.setVariable(Prefix + "networkRequest", networkRequest)
 
 216                         logger.debug(" network-request - " + '\n' + networkRequest)
 
 218                         // validate 'disableRollback'  (aka, 'suppressRollback')
 
 219                         boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
 
 220                         execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
 
 221                         logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
 
 223                         String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
 
 224                         execution.setVariable(Prefix + "networkInputs", networkInputs)
 
 225                         logger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
 
 228                         String messageId = execution.getVariable(Prefix + "messageId")  // for testing
 
 229                         if (messageId == null || messageId == "") {
 
 230                                 messageId = UUID.randomUUID()
 
 231                                 logger.debug(" UPDNETI_messageId, random generated: " + messageId)
 
 233                                 logger.debug(" UPDNETI_messageId, pre-assigned: " + messageId)
 
 235                         execution.setVariable(Prefix + "messageId", messageId)
 
 237                         String source = utils.getNodeText(networkRequest, "source")
 
 238                         execution.setVariable(Prefix + "source", source)
 
 239                         logger.debug(Prefix + "source - " + source)
 
 241                         String networkId = ""
 
 242                         if (utils.nodeExists(networkRequest, "network-id")) {
 
 243                                 networkId = utils.getNodeText(networkRequest, "network-id")
 
 244                                 if (networkId == 'null' || networkId == "") {
 
 245                                         sendSyncError(execution)
 
 246                                         // missing value of networkId
 
 247                                         String dataErrorMessage = "Variable 'network-id' value/element is missing."
 
 248                                         logger.debug(" Invalid Request - " + dataErrorMessage)
 
 249                                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 254                         String lcpCloudRegion = ""
 
 255                         if (utils.nodeExists(networkRequest, "aic-cloud-region")) {
 
 256                                 lcpCloudRegion = utils.getNodeText(networkRequest, "aic-cloud-region")
 
 257                                 if ((lcpCloudRegion == 'null') || (lcpCloudRegion == "")) {
 
 258                                         sendSyncError(execution)
 
 259                                         String dataErrorMessage = "requestDetails has missing 'aic-cloud-region' value/element."
 
 260                                         logger.debug(" Invalid Request - " + dataErrorMessage)
 
 261                                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 265                         String serviceInstanceId = ""
 
 266                         if (utils.nodeExists(networkRequest, "service-instance-id")) {
 
 267                                 serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
 
 268                                 if ((serviceInstanceId == 'null') || (lcpCloudRegion == "")) {
 
 269                                         sendSyncError(execution)
 
 270                                         String dataErrorMessage = "Variable 'serviceInstanceId' value/element is missing."
 
 271                                         logger.debug(" Invalid Request - " + dataErrorMessage)
 
 272                                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 276                         // PO Authorization Info / headers Authorization=
 
 277                         String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
 
 281                                 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
 
 282                                 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
 
 283                                 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
 
 285                         } catch (IOException ex) {
 
 286                                 String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - "
 
 287                                 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
 
 288                                 logger.debug(dataErrorMessage)
 
 289                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 292                         // Set variables for Generic Get Sub Flow use
 
 293                         execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
 
 294                         logger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
 
 296                         logger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
 
 298                         String sdncVersion = execution.getVariable("sdncVersion")
 
 299                         logger.debug("sdncVersion? : " + sdncVersion)
 
 301                         // build 'networkOutputs'
 
 302                         networkId = utils.getNodeText(networkRequest, "network-id")
 
 303                         if ((networkId == null) || (networkId == "null")) {
 
 306                         String networkName = utils.getNodeText(networkRequest, "network-name")
 
 307                         if ((networkName == null) || (networkName == "null")) {
 
 310                         String networkOutputs =
 
 312                            <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
 
 313                            <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
 
 314                          </network-outputs>"""
 
 315                         execution.setVariable(Prefix + "networkOutputs", networkOutputs)
 
 316                         logger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
 
 317                         execution.setVariable(Prefix + "networkId", networkId)
 
 318                         execution.setVariable(Prefix + "networkName", networkName)
 
 321                 } catch (BpmnError e) {
 
 324                 } catch (Exception ex){
 
 325                         sendSyncError(execution)
 
 327                         String exceptionMessage = "Exception Encountered in DoUpdateNetworkInstance, PreProcessRequest() - " + ex.getMessage()
 
 328                         logger.debug(exceptionMessage)
 
 329                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 335          * Gets the service instance uri from aai
 
 338         public void getServiceInstance(DelegateExecution execution) {
 
 339                 logger.trace("getServiceInstance ")
 
 341                         String serviceInstanceId = execution.getVariable('serviceInstanceId')
 
 343                         AAIResourcesClient resourceClient = new AAIResourcesClient()
 
 344                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
 
 346                         if(!resourceClient.exists(uri)){
 
 347                                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, "Service Instance not found in aai")
 
 349                                 Map<String, String> keys = uri.getURIKeys()
 
 350                                 execution.setVariable("serviceType", keys.get("service-type"))
 
 351                                 execution.setVariable("subscriberName", keys.get("global-customer-id"))
 
 354                 }catch(BpmnError e) {
 
 356                 }catch (Exception ex){
 
 357                         String msg = "Exception in getServiceInstance. " + ex.getMessage()
 
 359                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 363         public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
 
 365                 execution.setVariable("prefix", Prefix)
 
 367                 logger.debug(" ***** Inside callRESTQueryAAICloudRegion of DoUpdateNetworkInstance ***** " )
 
 370                         String networkInputs  = execution.getVariable(Prefix + "networkInputs")
 
 371                         String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
 
 374                         String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
 
 375                         AaiUtil aaiUtil = new AaiUtil(this)
 
 377                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
 
 378                         def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
 
 380                         execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
 
 382                         String cloudRegionPo = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "PO", cloudRegion)
 
 383                         String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "SDNC", cloudRegion)
 
 385                         if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
 
 386                                 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
 
 387                                 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
 
 388                                 execution.setVariable(Prefix + "isCloudRegionGood", true)
 
 391                             String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
 
 392                             logger.debug(dataErrorMessage)
 
 393                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 397                         logger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
 
 399                 } catch (BpmnError e) {
 
 402                 } catch (Exception ex) {
 
 404                         String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
 
 405                         logger.debug(exceptionMessage)
 
 406                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 412         public void callRESTQueryAAINetworkId(DelegateExecution execution) {
 
 414                 execution.setVariable("prefix", Prefix)
 
 416                 logger.debug(" ***** Inside callRESTQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
 
 420                         String networkRequest = execution.getVariable(Prefix + "networkRequest")
 
 421                         String networkId   = utils.getNodeText(networkRequest, "network-id")
 
 422                         execution.setVariable(Prefix + "networkId", networkId)
 
 424                         AAIResourcesClient client = new AAIResourcesClient()
 
 425                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
 
 426                         AAIResultWrapper network = client.get(uri, NotFoundException.class)
 
 428                         execution.setVariable(Prefix + "aaiIdReturnCode", "200")
 
 430                         execution.setVariable(Prefix + "queryIdAAIResponse", network)
 
 433                 } catch (NotFoundException e) {
 
 434                         String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
 
 435                         logger.debug(" AAI Query Failed. " + dataErrorMessage)
 
 436                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 437                 } catch (Exception ex) {
 
 438                         String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
 
 439                         logger.debug(exceptionMessage)
 
 440                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 446         public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
 
 448                 execution.setVariable("prefix", Prefix)
 
 450                 logger.debug(" ***** Inside callRESTReQueryAAINetworkId of DoUpdateNetworkInstance ***** " )
 
 454                         String networkRequest = execution.getVariable(Prefix + "networkRequest")
 
 455                         String networkId   = utils.getNodeText(networkRequest, "network-id")
 
 457                         AAIResourcesClient client = new AAIResourcesClient()
 
 458                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
 
 459                         AAIResultWrapper network = client.get(uri, NotFoundException.class)
 
 461                         execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
 
 462                         execution.setVariable(Prefix + "requeryIdAAIResponse", network)
 
 464                         L3Network net = network.asBean(L3Network.class).get()
 
 465                         String netId = net.getNetworkId()
 
 466                         String netName = net.getNetworkName()
 
 467                         String networkOutputs =
 
 469                    <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
 
 470                    <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
 
 471                  </network-outputs>"""
 
 472                         execution.setVariable(Prefix + "networkOutputs", networkOutputs)
 
 473                         logger.debug(" networkOutputs - " + '\n' + networkOutputs)
 
 475                 } catch (NotFoundException e) {
 
 476                         String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
 
 477                         logger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
 
 478                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 479                 } catch (Exception ex) {
 
 480                         String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
 
 481                         logger.debug(exceptionMessage)
 
 482                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 488         public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
 
 490                 execution.setVariable("prefix", Prefix)
 
 492                 logger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding of DoUpdateNetworkInstance ***** " )
 
 497                         AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
 
 498                         if(queryIdAAIResponse.getRelationships().isPresent()){
 
 499                                 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
 
 501                                 logger.debug(Prefix + "vpnCount - " + uris.size())
 
 503                                 if (uris.size() > 0) {
 
 504                                         String routeTargets = ""
 
 505                                         for(AAIResourceUri u : uris) {
 
 507                                                 AAIResourcesClient client = new AAIResourcesClient()
 
 508                                                 AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
 
 509                                                 Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
 
 511                                                 String routeTarget = ""
 
 512                                                 String routeRole = ""
 
 513                                                 if(binding.get().getRouteTargets() != null) {
 
 514                                                         List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
 
 515                                                         for(RouteTarget target : targets) {
 
 516                                                                 routeTarget  = target.getGlobalRouteTarget()
 
 517                                                                 routeRole  = target.getRouteTargetRole()
 
 518                                                                 routeTargets += "<routeTargets>" + '\n' +
 
 519                                                                                 " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
 
 520                                                                                 " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
 
 521                                                                                 "</routeTargets>" + '\n'
 
 527                                         execution.setVariable(Prefix + "routeCollection", routeTargets)
 
 528                                         logger.debug(" UPDNETI_routeCollection - " + '\n' + routeTargets)
 
 531                                         // reset return code to success
 
 532                                         execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
 
 533                                         AaiUtil aaiUriUtil = new AaiUtil(this)
 
 534                                         String schemaVersion = aaiUriUtil.getNamespace()
 
 535                                         String aaiStubResponse =
 
 536                                                         """     <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
 
 537                                                         <vpn-binding xmlns="${schemaVersion}">
 
 538                                                       <global-route-target/>
 
 541                                         String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
 
 542                                         execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
 
 543                                         execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
 
 544                                         logger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
 
 549                 } catch (NotFoundException e) {
 
 550                         logger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
 
 551                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
 
 552                 } catch (Exception ex) {
 
 553                         String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
 
 554                         logger.debug(exceptionMessage)
 
 555                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 561         public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
 
 563                 execution.setVariable("prefix", Prefix)
 
 565                 logger.debug(" ***** Inside callRESTQueryAAINetworkPolicy of DoUpdateNetworkInstance ***** " )
 
 569                         AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
 
 570                         if(queryIdAAIResponse.getRelationships().isPresent()){
 
 571                                 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
 
 573                                 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
 
 574                                 logger.debug(Prefix + "networkPolicyCount - " + uris.size())
 
 576                                 if (uris.size() > 0) {
 
 578                                         String networkPolicies = ""
 
 579                                         // AII loop call using list vpnBindings
 
 580                                         for(AAIResourceUri u : uris) {
 
 582                                                 AAIResourcesClient client = new AAIResourcesClient()
 
 583                                                 NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
 
 585                                                 execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
 
 587                                                 String networkPolicy  = p.getNetworkPolicyFqdn()
 
 588                                                 networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
 
 592                                         execution.setVariable(Prefix + "networkCollection", networkPolicies)
 
 593                                         logger.debug(" UPDNETI_networkCollection - " + '\n' + networkPolicies)
 
 596                                         // reset return code to success
 
 597                                         execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
 
 598                                         AaiUtil aaiUriUtil = new AaiUtil(this)
 
 599                                         String schemaVersion = aaiUriUtil.getNamespace()
 
 600                                         String aaiStubResponse =
 
 601                                                         """     <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
 
 602                                                         <network-policy xmlns="${schemaVersion}">
 
 603                                                           <network-policy-fqdn/>
 
 606                                         String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
 
 607                                         execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
 
 608                                         execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
 
 609                                         logger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
 
 614                 } catch (NotFoundException e) {
 
 615                         String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
 
 616                         logger.debug(dataErrorMessage)
 
 617                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 618                 } catch (Exception ex) {
 
 619                         String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
 
 620                         logger.debug(exceptionMessage)
 
 621                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 627         public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
 
 629                 execution.setVariable("prefix", Prefix)
 
 631                 logger.debug(" ***** Inside callRESTQueryAAINetworkTableRef of DoUpdateNetworkInstance ***** " )
 
 634                         AAIResultWrapper queryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
 
 635                         if(queryIdAAIResponse.getRelationships().isPresent()){
 
 636                                 List<AAIResourceUri> uris = queryIdAAIResponse.getRelationships().get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
 
 638                                 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
 
 639                                 logger.debug(Prefix + "networkTableRefCount - " + uris.size())
 
 641                                 logger.debug(" UPDNETI_networkTableRefCount - " + uris.size())
 
 642                                 if (uris.size() > 0) {
 
 644                                         execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
 
 646                                         // AII loop call using list vpnBindings
 
 647                                         String networkTableRefs = ""
 
 648                                         for(AAIResourceUri u : uris) {
 
 650                                                 AAIResourcesClient client = new AAIResourcesClient()
 
 651                                                 RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
 
 653                                                 String networkTableRef  = rt.getRouteTableReferenceFqdn()
 
 654                                                 networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
 
 658                                         execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
 
 659                                         logger.debug(" UPDNETI_tableRefCollection - " + '\n' + networkTableRefs)
 
 662                                         // reset return code to success
 
 663                                         execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
 
 664                                         AaiUtil aaiUriUtil = new AaiUtil(this)
 
 665                                         String schemaVersion = aaiUriUtil.getNamespace()
 
 666                                         String aaiStubResponse =
 
 667                                                         """     <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
 
 668                                                         <route-table-references xmlns="${schemaVersion}">
 
 669                                                           <route-table-reference-fqdn/>
 
 670                             </route-table-references>
 
 672                                         String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
 
 673                                         execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
 
 674                                         execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
 
 675                                         logger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
 
 680                 } catch (NotFoundException e) {
 
 681                         String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
 
 682                         logger.debug(dataErrorMessage)
 
 683                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 685                 } catch (Exception ex) {
 
 686                         String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
 
 687                         logger.debug(exceptionMessage)
 
 688                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 694         public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
 
 695                 execution.setVariable("prefix", Prefix)
 
 696                 logger.debug(" ***** Inside callRESTUpdateContrailAAINetwork of DoUpdateNetworkInstance ***** " )
 
 699                         String networkRequest = execution.getVariable(Prefix + "networkRequest")
 
 700                         String networkId   = utils.getNodeText(networkRequest, "network-id")
 
 701                         AAIResultWrapper requeryIdAAIResponse   = execution.getVariable(Prefix + "requeryIdAAIResponse")
 
 702                         String updateNetworkResponse   = execution.getVariable(Prefix + "updateNetworkResponse")
 
 704                         L3Network oldL3Network = requeryIdAAIResponse.asBean(L3Network.class).get()
 
 705                         L3Network l3Network = new L3Network()
 
 706                         if (oldL3Network.getHeatStackId() != null) {
 
 708                                 if (utils.nodeExists(updateNetworkResponse, 'networkStackId')) {
 
 709                                         l3Network.setHeatStackId(utils.getNodeText(updateNetworkResponse, 'networkStackId'))
 
 712                         if (oldL3Network.getNeutronNetworkId() != null) {
 
 714                                 if (utils.nodeExists(updateNetworkResponse, 'neutronNetworkId')) {
 
 715                                         l3Network.setNeutronNetworkId(utils.getNodeText(updateNetworkResponse, 'neutronNetworkId'))
 
 718                         if (oldL3Network.getContrailNetworkFqdn() != null) {
 
 720                                 if (utils.nodeExists(updateNetworkResponse, 'networkFqdn')) {
 
 721                                         l3Network.setContrailNetworkFqdn(utils.getNodeText(updateNetworkResponse, 'networkFqdn'))
 
 725                         String status = utils.getNodeText(updateNetworkResponse, 'orchestration-status')
 
 726                         if(status.equals("pending-create") || status.equals("PendingCreate")){
 
 727                                 l3Network.setOrchestrationStatus("Created")
 
 729                                 l3Network.setOrchestrationStatus("Active")
 
 732                         AAIResourcesClient client = new AAIResourcesClient()
 
 733                         AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
 
 734                         client.update(uri, l3Network)
 
 736                         List<Subnet> subnets = oldL3Network.getSubnets().getSubnet()
 
 737                         for(Subnet s:subnets){
 
 738                                 String subnetOrchStatus = s.getOrchestrationStatus()
 
 739                                 String subnetId = s.getSubnetId()
 
 741                                 Subnet subnet = new Subnet()
 
 742                                 String neutronSubnetId = networkUtils.extractNeutSubId(updateNetworkResponse, subnetId)
 
 743                                 subnet.setNeutronSubnetId(neutronSubnetId)
 
 744                                 if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
 
 745                                         subnet.setOrchestrationStatus("Created")
 
 747                                         subnet.setOrchestrationStatus("Active")
 
 750                                 AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
 
 751                                 client.update(subUri, subnet)
 
 754                         execution.setVariable(Prefix + "isPONR", true)
 
 756                 } catch (BpmnError e) {
 
 758                 } catch (NotFoundException e) {
 
 759                         String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
 
 760                         logger.debug(dataErrorMessage)
 
 761                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 762                 } catch (Exception ex) {
 
 763                         String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
 
 764                         logger.debug(exceptionMessage)
 
 765                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 771         public void prepareUpdateNetworkRequest (DelegateExecution execution) {
 
 773                 execution.setVariable("prefix", Prefix)
 
 775                 logger.trace("Inside prepareUpdateNetworkRequest of DoUpdateNetworkInstance ")
 
 780                         String requestId = execution.getVariable(Prefix + "requestId")
 
 781                         String messageId = execution.getVariable(Prefix + "messageId")
 
 782                         String source    = execution.getVariable(Prefix + "source")
 
 784                         String requestInput = execution.getVariable(Prefix + "networkRequest")
 
 785             L3Network queryIdResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
 
 786                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
 
 787                         String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
 
 789                         // Prepare Network request
 
 790                         String routeCollection = execution.getVariable(Prefix + "routeCollection")
 
 791                         String policyCollection = execution.getVariable(Prefix + "networkCollection")
 
 792                         String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
 
 793                         String updateNetworkRequest = networkUtils.UpdateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
 
 795                         String buildUpdateNetworkRequestAsString = utils.formatXml(updateNetworkRequest)
 
 796                         buildUpdateNetworkRequestAsString = buildUpdateNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
 
 797                         logger.debug(buildUpdateNetworkRequestAsString)
 
 799                         execution.setVariable(Prefix + "updateNetworkRequest", buildUpdateNetworkRequestAsString)
 
 800                         logger.debug(" UPDNETI_updateNetworkRequest - " + "\n" +  buildUpdateNetworkRequestAsString)
 
 802                 } catch (Exception ex) {
 
 803                         String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareUpdateNetworkRequest() - " + ex.getMessage()
 
 804                         logger.debug(exceptionMessage)
 
 805                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 811         public void prepareSDNCRequest (DelegateExecution execution) {
 
 813                 execution.setVariable("prefix", Prefix)
 
 815                 logger.trace("Inside prepareSDNCRequest of DoUpdateNetworkInstance ")
 
 819                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
 820                         String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 821                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 823                         String networkId = ""
 
 824                         if (utils.nodeExists(updateNetworkInput, "network-id")) {
 
 825                            networkId = utils.getNodeText(updateNetworkInput, "network-id")
 
 827                         if (networkId == null) {networkId = ""}
 
 829                         String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
 
 831                         AAIResultWrapper wrapper = execution.getVariable(Prefix + "queryIdAAIResponse")
 
 832                         L3Network queryAAIResponse = wrapper.asBean(L3Network.class).get()
 
 834                         // 1. prepare assign topology via SDNC Adapter SUBFLOW call
 
 835                         String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "changeassign", "NetworkActivateRequest", cloudRegionId, networkId, queryAAIResponse, null)
 
 837                         String sndcTopologyUpdateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
 
 838                         logger.debug(sndcTopologyUpdateRequesAsString)
 
 839                         execution.setVariable(Prefix + "changeAssignSDNCRequest", sndcTopologyUpdateRequesAsString)
 
 840                         logger.debug(" UPDNETI_changeAssignSDNCRequest - " + "\n" +  sndcTopologyUpdateRequesAsString)
 
 843                 } catch (Exception ex) {
 
 844                         String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
 
 845                         logger.debug(exceptionMessage)
 
 846                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 855         // **************************************************
 
 856         //     Post or Validate Response Section
 
 857         // **************************************************
 
 859         public void validateUpdateNetworkResponse (DelegateExecution execution) {
 
 861                 execution.setVariable("prefix", Prefix)
 
 863                 logger.trace("Inside validateUpdateNetworkResponse of DoUpdateNetworkInstance ")
 
 866                         String returnCode = execution.getVariable(Prefix + "networkReturnCode")
 
 867                         String networkResponse = execution.getVariable(Prefix + "updateNetworkResponse")
 
 868                         if (networkResponse==null)      {
 
 869                                 networkResponse="" // reset
 
 872                         logger.debug(" Network Adapter update responseCode: " + returnCode)
 
 874                         String errorMessage = ""
 
 875                         if (returnCode == "200") {
 
 876                                 execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
 
 877                                 logger.debug(networkResponse)
 
 878                                 execution.setVariable(Prefix + "updateNetworkResponse", networkResponse)
 
 879                                 logger.debug(" Network Adapter update Success Response - " + "\n" + networkResponse)
 
 881                                 // prepare rollback data
 
 882                                 String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
 
 883                                 rollbackData = rollbackData.replace("rollback>", "networkRollback>")
 
 884                                 String rollbackNetwork =
 
 885                                         """<rollbackNetworkRequest>
 
 887                                                 </rollbackNetworkRequest>"""
 
 888                                 String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
 
 889                                 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
 
 890                                 logger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
 
 892                         } else { // network error
 
 893                            if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) {   //4xx, 5xx
 
 894                                    if (networkResponse.contains("updateNetworkError")) {
 
 895                                            networkResponse = networkResponse.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '')
 
 896                                            errorMessage = utils.getNodeText(networkResponse, "message")
 
 897                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
 
 898                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
 
 900                                    } else { // CatchAll exception
 
 901                                            if (returnCode == "500") {
 
 902                                                    errorMessage = "JBWEB000065: HTTP Status 500."
 
 904                                                errorMessage = "Return code is " + returnCode
 
 906                                            errorMessage  = "Received error from Network Adapter: " + errorMessage
 
 907                                            exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
 
 911                            } else { // CatchAll exception
 
 912                                    String dataErrorMessage  = "Received error from Network Adapter. Return code is: " + returnCode
 
 913                                    exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 919                 } catch (BpmnError e) {
 
 922                 } catch (Exception ex) {
 
 923                         String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. validateUpdateNetworkResponse() - " + ex.getMessage()
 
 924                         logger.debug(exceptionMessage)
 
 925                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 932         public void validateSDNCResponse (DelegateExecution execution) {
 
 934                 execution.setVariable("prefix", Prefix)
 
 936                 logger.trace("Inside validateSDNCResponse of DoUpdateNetworkInstance ")
 
 938                 String response = execution.getVariable(Prefix + "changeAssignSDNCResponse")
 
 939                 WorkflowException workflowException = null
 
 941                         workflowException = execution.getVariable(Prefix + "WorkflowException")
 
 942                         //execution.setVariable("WorkflowException", workflowException)
 
 943                 } catch (Exception ex) {
 
 944                         logger.debug(" Sdnc 'WorkflowException' object is empty or null. ")
 
 947                 boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
 
 949                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
 950                 sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
 
 952                 String changeAssignSDNCResponseDecodeXml = execution.getVariable(Prefix + "changeAssignSDNCResponse")
 
 953                 changeAssignSDNCResponseDecodeXml = changeAssignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
 
 954                 execution.setVariable(Prefix + "changeAssignSDNCResponse", changeAssignSDNCResponseDecodeXml)
 
 956                 if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, prefix+'sdncResponseSuccess'
 
 957                         execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
 
 958                         logger.debug("Successfully Validated SDNC Response")
 
 961                         logger.debug("Did NOT Successfully Validated SDNC Response")
 
 962                         throw new BpmnError("MSOWorkflowException")
 
 968         public void postProcessResponse (DelegateExecution execution) {
 
 970                 execution.setVariable("prefix", Prefix)
 
 972                 logger.trace("Inside postProcessResponse of DoUpdateNetworkInstance ")
 
 975                         logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
 
 976                         if (execution.getVariable(Prefix + "isException") == false) {
 
 978                                 execution.setVariable("orchestrationStatus", "")
 
 979                                 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
 
 980                                 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
 
 981                                 prepareSuccessRollbackData(execution) // populate rollbackData
 
 982                                 execution.setVariable("WorkflowException", null)
 
 983                                 execution.setVariable(Prefix + "Success", true)
 
 984                                 logger.debug(" ***** postProcessResponse(), GOOD !!!")
 
 986                                 execution.setVariable(Prefix + "Success", false)
 
 987                                 execution.setVariable("rollbackData", null)
 
 988                                 String exceptionMessage = " Exception encountered in MSO Bpmn. "
 
 989                                 if (execution.getVariable("workflowException") != null) {  // Output of Rollback flow.
 
 990                                    logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
 
 991                                    WorkflowException wfex = execution.getVariable("workflowException")
 
 992                                    exceptionMessage = wfex.getErrorMessage()
 
 994                                if (execution.getVariable(Prefix + "WorkflowException") != null) {
 
 995                                       WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
 
 996                                       exceptionMessage = pwfex.getErrorMessage()
 
 999                             // going to the Main flow: a-la-carte or macro
 
1000                             logger.debug(" ***** postProcessResponse(), BAD !!!")
 
1001                             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1002                                 throw new BpmnError("MSOWorkflowException")
 
1005                 } catch(BpmnError b){
 
1006                      logger.debug("Rethrowing MSOWorkflowException")
 
1010                 } catch (Exception ex) {
 
1011                         String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
 
1012                         logger.debug(exceptionMessage)
 
1013                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
1020         public void prepareSDNCRollbackRequest (DelegateExecution execution) {
 
1022                 execution.setVariable("prefix", Prefix)
 
1024                 logger.trace("Inside prepareSDNCRollbackRequest of DoUpdateNetworkInstance ")
 
1027                         // for some reason the WorkflowException object is null after the sdnc rollback call task, need to save WorkflowException.
 
1028                         execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
 
1030                         String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
1031                         String updateNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
1032                         String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
1033                         String changeAssignSDNCResponse = execution.getVariable(Prefix + "changeAssignSDNCResponse")
 
1034                         String networkId = utils.getNodeText(changeAssignSDNCResponse, "network-id")
 
1036                         String serviceInstanceId = utils.getNodeText(updateNetworkInput, "service-instance-id")
 
1038                         // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
 
1039                         String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, updateNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
 
1040                         String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
 
1041                         execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
 
1042                         logger.debug(" Preparing request for SDNC Topology assign's rollback/compensation . . . - " + "\n" +  sndcTopologyRollbackRequestAsString)
 
1044                 } catch (Exception ex) {
 
1045                         String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
 
1046                         logger.debug(exceptionMessage)
 
1047                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1053         public void prepareRollbackData(DelegateExecution execution) {
 
1055                 execution.setVariable("prefix",Prefix)
 
1057                 logger.trace("Inside prepareRollbackData() of DoUpdateNetworkInstance ")
 
1061                         Map<String, String> rollbackData = new HashMap<String, String>();
 
1062                         String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
 
1063                         if (rollbackSDNCRequest != null) {
 
1064                                 if (rollbackSDNCRequest != "") {
 
1065                                         rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
 
1068                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
 
1069                         if (rollbackNetworkRequest != null) {
 
1070                                 if (rollbackNetworkRequest != "") {
 
1071                                         rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
 
1074                         execution.setVariable("rollbackData", rollbackData)
 
1075                         logger.debug("** rollbackData : " + rollbackData)
 
1077                         execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
 
1078                         logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
 
1080                 } catch (Exception ex) {
 
1081                         String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
 
1082                         logger.debug(exceptionMessage)
 
1083                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1089         public void prepareSuccessRollbackData(DelegateExecution execution) {
 
1091                 execution.setVariable("prefix",Prefix)
 
1093                 logger.trace("Inside prepareSuccessRollbackData() of DoUpdateNetworkInstance ")
 
1097                         if (execution.getVariable("sdncVersion") != '1610') {
 
1098                                 // skip: 1702 for 'changeassign' or equivalent not yet defined in SNDC, so no rollback.
 
1100                                 prepareSDNCRollbackRequest(execution)
 
1103                         Map<String, String> rollbackData = new HashMap<String, String>();
 
1104                         String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
 
1105                         if (rollbackSDNCRequest != null) {
 
1106                                 if (rollbackSDNCRequest != "") {
 
1107                                         rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
 
1110                         String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
 
1111                         if (rollbackNetworkRequest != null) {
 
1112                                 if (rollbackNetworkRequest != "") {
 
1113                                         rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
 
1116                         execution.setVariable("rollbackData", rollbackData)
 
1118                         logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
 
1119                         execution.setVariable("WorkflowException", null)
 
1122                 } catch (Exception ex) {
 
1123                         String exceptionMessage = " Bpmn error encountered in DoUpdateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
 
1124                         logger.debug(exceptionMessage)
 
1125                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1131         public void setExceptionFlag(DelegateExecution execution){
 
1133                 execution.setVariable("prefix",Prefix)
 
1135                 logger.trace("Inside setExceptionFlag() of DoUpdateNetworkInstance ")
 
1139                         execution.setVariable(Prefix + "isException", true)
 
1141                         if (execution.getVariable("SavedWorkflowException1") != null) {
 
1142                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
 
1144                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
 
1146                         logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
 
1148                 } catch(Exception ex){
 
1149                           String exceptionMessage = "Bpmn error encountered in DoUpdateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
 
1150                         logger.debug(exceptionMessage)
 
1151                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1157         // *******************************
 
1158         //     Build Error Section
 
1159         // *******************************
 
1161         public void processJavaException(DelegateExecution execution){
 
1163                 execution.setVariable("prefix",Prefix)
 
1165                         logger.debug("Caught a Java Exception")
 
1166                         logger.debug("Started processJavaException Method")
 
1167                         logger.debug("Variables List: " + execution.getVariables())
 
1168                         execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - "  + Prefix)  // Adding this line temporarily until this flows error handling gets updated
 
1169                         exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
 
1171                 }catch(Exception e){
 
1172                         logger.debug("Caught Exception during processJavaException Method: " + e)
 
1173                         execution.setVariable("UnexpectedError", "Exception in processJavaException method")  // Adding this line temporarily until this flows error handling gets updated
 
1174                         exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")
 
1176                 logger.debug("Completed processJavaException Method")