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.NotFoundException
 
  26 import org.apache.commons.lang3.*
 
  27 import org.camunda.bpm.engine.delegate.BpmnError
 
  28 import org.camunda.bpm.engine.delegate.DelegateExecution
 
  29 import org.onap.aai.domain.yang.L3Network
 
  30 import org.onap.aai.domain.yang.L3Networks
 
  31 import org.onap.aai.domain.yang.NetworkPolicy
 
  32 import org.onap.aai.domain.yang.RouteTableReference
 
  33 import org.onap.aai.domain.yang.RouteTarget
 
  34 import org.onap.aai.domain.yang.Subnet
 
  35 import org.onap.aai.domain.yang.VpnBinding
 
  36 import org.onap.aaiclient.client.aai.AAIObjectPlurals
 
  37 import org.onap.aaiclient.client.aai.AAIObjectType
 
  38 import org.onap.aaiclient.client.aai.AAIResourcesClient
 
  39 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper
 
  40 import org.onap.aaiclient.client.aai.entities.Relationships
 
  41 import org.onap.aaiclient.client.aai.entities.uri.AAIPluralResourceUri
 
  42 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 
  43 import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory
 
  44 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder
 
  45 import org.onap.aaiclient.client.graphinventory.entities.uri.Depth
 
  46 import org.onap.so.bpmn.common.scripts.AaiUtil
 
  47 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 
  48 import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
  49 import org.onap.so.bpmn.common.scripts.MsoUtils
 
  50 import org.onap.so.bpmn.common.scripts.NetworkUtils
 
  51 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
 
  52 import org.onap.so.bpmn.common.scripts.VidUtils
 
  53 import org.onap.so.bpmn.core.UrnPropertiesReader
 
  54 import org.onap.so.bpmn.core.WorkflowException
 
  55 import org.onap.so.bpmn.core.json.JsonUtils
 
  56 import org.onap.so.constants.Defaults
 
  57 import org.slf4j.Logger
 
  58 import org.slf4j.LoggerFactory
 
  62  * This groovy class supports the <class>DoCreateNetworkInstance.bpmn</class> process.
 
  65 public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor {
 
  66     private static final Logger logger = LoggerFactory.getLogger( DoCreateNetworkInstance.class);
 
  68     String Prefix="CRENWKI_"
 
  69     ExceptionUtil exceptionUtil = new ExceptionUtil()
 
  70     JsonUtils jsonUtil = new JsonUtils()
 
  71     VidUtils vidUtils = new VidUtils(this)
 
  72     NetworkUtils networkUtils = new NetworkUtils()
 
  73     SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
  75     def className = getClass().getSimpleName()
 
  78      * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
 
  81     public InitializeProcessVariables(DelegateExecution execution){
 
  82         /* Initialize all the process variables in this block */
 
  84         execution.setVariable(Prefix + "networkRequest", "")
 
  85         execution.setVariable(Prefix + "rollbackEnabled", null)
 
  86         execution.setVariable(Prefix + "networkInputs", "")
 
  87         //execution.setVariable(Prefix + "requestId", "")
 
  88         execution.setVariable(Prefix + "messageId", "")
 
  89         execution.setVariable(Prefix + "source", "")
 
  90         execution.setVariable("BasicAuthHeaderValuePO", "")
 
  91         execution.setVariable("BasicAuthHeaderValueSDNC", "")
 
  92         execution.setVariable(Prefix + "serviceInstanceId","")
 
  93         execution.setVariable("GENGS_type", "")
 
  94         execution.setVariable(Prefix + "rsrc_endpoint", null)
 
  95         execution.setVariable(Prefix + "networkOutputs", "")
 
  96         execution.setVariable(Prefix + "networkId","")
 
  97         execution.setVariable(Prefix + "networkName","")
 
 100         execution.setVariable(Prefix + "queryNameAAIRequest","")
 
 101         execution.setVariable(Prefix + "queryNameAAIResponse", "")
 
 102         execution.setVariable(Prefix + "aaiNameReturnCode", "")
 
 103         execution.setVariable(Prefix + "isAAIqueryNameGood", false)
 
 105         // AAI query Cloud Region
 
 106         execution.setVariable(Prefix + "queryCloudRegionRequest","")
 
 107         execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
 
 108         execution.setVariable(Prefix + "queryCloudRegionResponse","")
 
 109         execution.setVariable(Prefix + "cloudRegionPo","")
 
 110         execution.setVariable(Prefix + "cloudRegionSdnc","")
 
 111         execution.setVariable(Prefix + "isCloudRegionGood", false)
 
 114         execution.setVariable(Prefix + "queryIdAAIRequest","")
 
 115         execution.setVariable(Prefix + "queryIdAAIResponse", "")
 
 116         execution.setVariable(Prefix + "aaiIdReturnCode", "")
 
 118         // AAI query vpn binding
 
 119         execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
 
 120         execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
 
 121         execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
 
 122         execution.setVariable(Prefix + "vpnBindings", null)
 
 123         execution.setVariable(Prefix + "vpnCount", 0)
 
 124         execution.setVariable(Prefix + "routeCollection", "")
 
 126         // AAI query network policy
 
 127         execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
 
 128         execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
 
 129         execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
 
 130         execution.setVariable(Prefix + "networkPolicyUriList", null)
 
 131         execution.setVariable(Prefix + "networkPolicyCount", 0)
 
 132         execution.setVariable(Prefix + "networkCollection", "")
 
 134         // AAI query route table reference
 
 135         execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
 
 136         execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
 
 137         execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
 
 138         execution.setVariable(Prefix + "networkTableRefUriList", null)
 
 139         execution.setVariable(Prefix + "networkTableRefCount", 0)
 
 140         execution.setVariable(Prefix + "tableRefCollection", "")
 
 143         execution.setVariable(Prefix + "requeryIdAAIRequest","")
 
 144         execution.setVariable(Prefix + "requeryIdAAIResponse", "")
 
 145         execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
 
 147         // AAI update contrail
 
 148         execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
 
 149         execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
 
 150         execution.setVariable(Prefix + "updateContrailAAIResponse", "")
 
 151         execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
 
 153         execution.setVariable(Prefix + "createNetworkRequest", "")
 
 154         execution.setVariable(Prefix + "createNetworkResponse", "")
 
 155         execution.setVariable(Prefix + "rollbackNetworkRequest", "")
 
 156         //execution.setVariable(Prefix + "rollbackNetworkResponse", "")
 
 157         execution.setVariable(Prefix + "networkReturnCode", "")
 
 158         //execution.setVariable(Prefix + "rollbackNetworkReturnCode", "")
 
 159         execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
 
 161         execution.setVariable(Prefix + "assignSDNCRequest", "")
 
 162         execution.setVariable(Prefix + "assignSDNCResponse", "")
 
 163         execution.setVariable(Prefix + "rollbackSDNCRequest", "")
 
 164         //execution.setVariable(Prefix + "rollbackSDNCResponse", "")
 
 165         execution.setVariable(Prefix + "sdncReturnCode", "")
 
 166         //execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")
 
 167         execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
 
 168         execution.setVariable(Prefix + "sdncResponseSuccess", false)
 
 170         execution.setVariable(Prefix + "activateSDNCRequest", "")
 
 171         execution.setVariable(Prefix + "activateSDNCResponse", "")
 
 172         execution.setVariable(Prefix + "rollbackActivateSDNCRequest", "")
 
 173         //execution.setVariable(Prefix + "rollbackActivateSDNCResponse", "")
 
 174         execution.setVariable(Prefix + "sdncActivateReturnCode", "")
 
 175         //execution.setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
 
 176         execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", false)
 
 177         execution.setVariable(Prefix + "sdncActivateResponseSuccess", false)
 
 179         execution.setVariable(Prefix + "orchestrationStatus", "")
 
 180         execution.setVariable(Prefix + "isVnfBindingPresent", false)
 
 181         execution.setVariable(Prefix + "Success", false)
 
 183         execution.setVariable(Prefix + "isException", false)
 
 187     // **************************************************
 
 188     //     Pre or Prepare Request Section
 
 189     // **************************************************
 
 191      * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstance.bpmn</class> process.
 
 194     public void preProcessRequest (DelegateExecution execution) {
 
 196         execution.setVariable("prefix",Prefix)
 
 197         logger.trace("Inside preProcessRequest() of " + className + ".groovy")
 
 200             // initialize flow variables
 
 201             InitializeProcessVariables(execution)
 
 203             // GET Incoming request & validate 3 kinds of format.
 
 204             execution.setVariable("action", "CREATE")
 
 205             String networkRequest = execution.getVariable("bpmnRequest")
 
 206             if (networkRequest != null) {
 
 207                 if (networkRequest.contains("requestDetails")) {
 
 208                     // JSON format request is sent, create xml
 
 210                         def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
 
 211                         logger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
 
 212                         networkRequest =  vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
 
 214                     } catch (Exception ex) {
 
 215                         String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
 
 216                         logger.debug(dataErrorMessage)
 
 217                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 220                     // XML format request is sent
 
 224                 // vIPR format request is sent, create xml from individual variables
 
 225                 networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
 
 228             networkRequest = utils.formatXml(networkRequest)
 
 229             execution.setVariable(Prefix + "networkRequest", networkRequest)
 
 230             logger.debug(Prefix + "networkRequest - " + '\n' + networkRequest)
 
 232             // validate 'backout-on-failure' to override 'mso.rollback'
 
 233             boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
 
 234             execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
 
 235             logger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
 
 237             String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
 
 238             execution.setVariable(Prefix + "networkInputs", networkInputs)
 
 239             logger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
 
 242             String messageId = execution.getVariable("testMessageId")  // for testing
 
 243             if (messageId == null || messageId == "") {
 
 244                 messageId = UUID.randomUUID()
 
 245                 logger.debug(Prefix + "messageId, random generated: " + messageId)
 
 247                 logger.debug(Prefix + "messageId, pre-assigned: " + messageId)
 
 249             execution.setVariable(Prefix + "messageId", messageId)
 
 251             String source = utils.getNodeText(networkRequest, "source")
 
 252             execution.setVariable(Prefix + "source", source)
 
 253             logger.debug(Prefix + "source - " + source)
 
 255             // validate cloud region
 
 256             String lcpCloudRegionId = utils.getNodeText(networkRequest, "aic-cloud-region")
 
 257             if ((lcpCloudRegionId == null) || (lcpCloudRegionId == "") || (lcpCloudRegionId == "null")) {
 
 258                 String dataErrorMessage = "Missing value/element: 'lcpCloudRegionId' or 'cloudConfiguration' or 'aic-cloud-region'."
 
 259                 logger.debug(" Invalid Request - " + dataErrorMessage)
 
 260                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 263             // validate service instance id
 
 264             String serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
 
 265             if ((serviceInstanceId == null) || (serviceInstanceId == "") || (serviceInstanceId == "null")) {
 
 266                 String dataErrorMessage = "Missing value/element: 'serviceInstanceId'."
 
 267                 logger.debug(" Invalid Request - " + dataErrorMessage)
 
 268                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 271             // PO Authorization Info / headers Authorization=
 
 272             String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
 
 275                 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey",execution))
 
 276                 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
 
 277                 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
 
 279             } catch (IOException ex) {
 
 280                 String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "
 
 281                 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
 
 282                 logger.debug(dataErrorMessage)
 
 283                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 286             // Set variables for Generic Get Sub Flow use
 
 287             execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
 
 288             logger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
 
 290             execution.setVariable("GENGS_type", "service-instance")
 
 291             logger.debug("GENGS_type - " + "service-instance")
 
 292             logger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
 
 294             String sdncVersion = execution.getVariable("sdncVersion")
 
 295             logger.debug("sdncVersion? : " + sdncVersion)
 
 297             // build 'networkOutputs'
 
 298             String networkId = utils.getNodeText(networkRequest, "network-id")
 
 299             if ((networkId == null) || (networkId == "null")) {
 
 302             String networkName = utils.getNodeText(networkRequest, "network-name")
 
 303             if ((networkName == null) || (networkName == "null")) {
 
 306             String networkOutputs =
 
 308                            <network-id>${MsoUtils.xmlEscape(networkId)}</network-id>
 
 309                            <network-name>${MsoUtils.xmlEscape(networkName)}</network-name>
 
 310                          </network-outputs>"""
 
 311             execution.setVariable(Prefix + "networkOutputs", networkOutputs)
 
 312             logger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
 
 313             execution.setVariable(Prefix + "networkId", networkId)
 
 314             execution.setVariable(Prefix + "networkName", networkName)
 
 316         } catch (BpmnError e) {
 
 319         } catch (Exception ex) {
 
 320             sendSyncError(execution)
 
 322             String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()
 
 323             logger.debug(exceptionMessage)
 
 324             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 331      * Gets the service instance uri from aai
 
 333     public void getServiceInstance(DelegateExecution execution) {
 
 335             String serviceInstanceId = execution.getVariable('CRENWKI_serviceInstanceId')
 
 337             AAIResourcesClient resourceClient = new AAIResourcesClient()
 
 338             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId)
 
 340             if(!resourceClient.exists(uri)){
 
 341                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Service instance was not found in aai")
 
 343                 Map<String, String> keys = uri.getURIKeys()
 
 344                 execution.setVariable("serviceType", keys.get(AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType))
 
 345                 execution.setVariable("subscriberName", keys.get(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId))
 
 348         }catch(BpmnError e) {
 
 350         }catch (Exception ex){
 
 351             String msg = "Exception in getServiceInstance. " + ex.getMessage()
 
 353             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 
 358     public void callRESTQueryAAINetworkName (DelegateExecution execution) {
 
 360         execution.setVariable("prefix",Prefix)
 
 362         logger.debug(" ***** Inside callRESTQueryAAINetworkName() of DoCreateNetworkInstance ***** " )
 
 366             String networkInputs  = execution.getVariable(Prefix + "networkInputs")
 
 367             String networkName   = utils.getNodeText(networkInputs, "network-name")
 
 369             AAIResourcesClient client = new AAIResourcesClient()
 
 370             AAIPluralResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.L3_NETWORK).queryParam("network-name", networkName)
 
 371             L3Networks networks = client.get(uri, NotFoundException.class).asBean(L3Networks.class).get()
 
 372             L3Network network = networks.getL3Network().get(0)
 
 374             execution.setVariable(Prefix + "isAAIqueryNameGood", true)
 
 375             String orchestrationStatus = network.getOrchestrationStatus()
 
 376             execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus.toUpperCase())
 
 377             logger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus.toUpperCase())
 
 378             execution.setVariable("orchestrationStatus", orchestrationStatus)
 
 380             logger.debug(Prefix + "isAAIqueryNameGood? : " + execution.getVariable(Prefix + "isAAIqueryNameGood"))
 
 382         } catch (NotFoundException e) {
 
 383             logger.debug(" QueryAAINetworkName return code = '404' (Not Found).  Proceed with the Create !!! ")
 
 385         } catch (Exception ex) {
 
 387             String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAINetworkName() -  " + ex.getMessage()
 
 388             logger.debug(exceptionMessage)
 
 389             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 395     public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
 
 397         execution.setVariable("prefix",Prefix)
 
 399         logger.debug(" ***** Inside callRESTQueryAAICloudRegion() of DoCreateNetworkInstance ***** " )
 
 402             String networkInputs  = execution.getVariable(Prefix + "networkInputs")
 
 403             String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
 
 406             AaiUtil aaiUtil = new AaiUtil(this)
 
 408             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, Defaults.CLOUD_OWNER.toString(), cloudRegion)
 
 409             def queryCloudRegionRequest = aaiUtil.createAaiUri(uri)
 
 411             execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
 
 413             String cloudRegionPo = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "PO", cloudRegion)
 
 414             String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution,  queryCloudRegionRequest, "SDNC", cloudRegion)
 
 416             if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
 
 417                 execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
 
 418                 execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
 
 419                 execution.setVariable(Prefix + "isCloudRegionGood", true)
 
 422                 String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
 
 423                 logger.debug(dataErrorMessage)
 
 424                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 428             logger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
 
 430         } catch (BpmnError e) {
 
 433         } catch (Exception ex) {
 
 435             String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
 
 436             logger.debug(exceptionMessage)
 
 437             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 443     public void callRESTQueryAAINetworkId(DelegateExecution execution) {
 
 445         execution.setVariable("prefix",Prefix)
 
 447         logger.debug(" ***** Inside callRESTQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
 
 451             String networkId = ""
 
 452             String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
 
 453             if (execution.getVariable("sdncVersion") != "1610") {
 
 454                 String networkResponseInformation = ""
 
 456                     networkResponseInformation = utils.getNodeXml(assignSDNCResponse, "network-response-information", false).replace("tag0:","").replace(":tag0","")
 
 457                     networkId = utils.getNodeText(networkResponseInformation, "instance-id")
 
 458                 } catch (Exception ex) {
 
 459                     String dataErrorMessage = " SNDC Response network validation for 'instance-id' (network-id) failed: Empty <network-response-information>"
 
 460                     logger.debug(dataErrorMessage)
 
 461                     exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 465                 networkId = utils.getNodeText(assignSDNCResponse, "network-id")
 
 467             if (networkId == null || networkId == "null") {
 
 468                 String dataErrorMessage = "SNDC Response did not contains 'instance-id' or 'network-id' element, or the value is null."
 
 469                 logger.debug(dataErrorMessage)
 
 470                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 472                 logger.debug(" SNDC Response network validation for 'instance-id' (network-id)' is good: " + networkId)
 
 476             execution.setVariable(Prefix + "networkId", networkId)
 
 477             String networkName   = utils.getNodeText(assignSDNCResponse, "network-name")
 
 478             execution.setVariable(Prefix + "networkName", networkName)
 
 480             AAIResourcesClient client = new AAIResourcesClient()
 
 481             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
 
 482             L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
 
 484             execution.setVariable(Prefix + "queryIdAAIResponse", network)
 
 486             String netId   = network.getNetworkId()
 
 487             execution.setVariable(Prefix + "networkId", netId)
 
 488             String netName   = network.getNetworkName()
 
 489             execution.setVariable(Prefix + "networkName", netName)
 
 491         } catch (NotFoundException e) {
 
 492             String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
 
 493             logger.debug(" AAI Query Failed. " + dataErrorMessage)
 
 494             exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 496         } catch (Exception ex) {
 
 497             String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
 
 498             logger.debug(exceptionMessage)
 
 499             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 505     public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
 
 507         execution.setVariable("prefix",Prefix)
 
 509         logger.debug(" ***** Inside callRESTReQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
 
 513             String networkId   = execution.getVariable(Prefix + "networkId")
 
 514             String netId = networkId
 
 516             AAIResourcesClient client = new AAIResourcesClient()
 
 517             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId).depth(Depth.ONE)
 
 518             L3Network network = client.get(uri, NotFoundException.class).asBean(L3Network.class).get()
 
 520             execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "200")
 
 521             execution.setVariable(Prefix + "requeryIdAAIResponse", network)
 
 523             String netName = network.getNetworkName()
 
 524             String networkOutputs =
 
 526                    <network-id>${MsoUtils.xmlEscape(netId)}</network-id>
 
 527                    <network-name>${MsoUtils.xmlEscape(netName)}</network-name>
 
 528                  </network-outputs>"""
 
 529             execution.setVariable(Prefix + "networkOutputs", networkOutputs)
 
 530             logger.debug(" networkOutputs - " + '\n' + networkOutputs)
 
 533         } catch (NotFoundException e) {
 
 534             String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
 
 535             logger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
 
 536             exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 538         } catch (Exception ex) {
 
 539             String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
 
 540             logger.debug(exceptionMessage)
 
 541             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 547     public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
 
 549         execution.setVariable("prefix",Prefix)
 
 551         logger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
 
 555             AAIResourcesClient client = new AAIResourcesClient()
 
 556             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
 
 557             Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
 
 558             if(relationships.isPresent()){
 
 559                 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.VPN_BINDING)
 
 561                 logger.debug(Prefix + "vpnCount - " + uris.size())
 
 563                 if (uris.size() > 0) {
 
 564                     String routeTargets = ""
 
 565                     for(AAIResourceUri u : uris) {
 
 567                         AAIResultWrapper wrapper = client.get(u.depth(Depth.TWO), NotFoundException.class)
 
 568                         Optional<VpnBinding> binding = wrapper.asBean(VpnBinding.class)
 
 570                         String routeTarget = ""
 
 571                         String routeRole = ""
 
 572                         if(binding.get().getRouteTargets() != null) {
 
 573                             List<RouteTarget> targets = binding.get().getRouteTargets().getRouteTarget()
 
 574                             for(RouteTarget target : targets) {
 
 575                                 routeTarget  = target.getGlobalRouteTarget()
 
 576                                 routeRole  = target.getRouteTargetRole()
 
 577                                 routeTargets += "<routeTargets>" + '\n' +
 
 578                                         " <routeTarget>" + routeTarget + "</routeTarget>" + '\n' +
 
 579                                         " <routeTargetRole>" + routeRole + "</routeTargetRole>" + '\n' +
 
 580                                         "</routeTargets>" + '\n'
 
 586                     execution.setVariable(Prefix + "routeCollection", routeTargets)
 
 587                     logger.debug(Prefix + "routeCollection - " + '\n' + routeTargets)
 
 590                     // reset return code to success
 
 591                     execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
 
 592                     AaiUtil aaiUriUtil = new AaiUtil(this)
 
 593                     String schemaVersion = aaiUriUtil.getNamespace()
 
 594                     String aaiStubResponse =
 
 595                             """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
 
 596                                                         <vpn-binding xmlns="${schemaVersion}">
 
 597                                                       <global-route-target/>
 
 600                     String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
 
 601                     execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
 
 602                     execution.setVariable(Prefix + "routeCollection", "<routeTargets/>")
 
 603                     logger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
 
 608         } catch (NotFoundException e) {
 
 609             logger.debug("Response Error from AAINetworkVpnBinding is 404 (Not Found).")
 
 610             exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Response Error from AAINetworkVpnBinding is 404 (Not Found).")
 
 611         } catch (Exception ex) {
 
 612             String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
 
 613             logger.debug(exceptionMessage)
 
 614             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 620     public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
 
 622         execution.setVariable("prefix",Prefix)
 
 624         logger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
 
 627             AAIResourcesClient client = new AAIResourcesClient()
 
 628             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
 
 629             Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
 
 630             if(relationships.isPresent()){
 
 631                 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.NETWORK_POLICY)
 
 633                 execution.setVariable(Prefix + "networkPolicyCount", uris.size())
 
 634                 logger.debug(Prefix + "networkPolicyCount - " + uris.size())
 
 636                 if (uris.size() > 0) {
 
 638                     String networkPolicies = ""
 
 639                     // AII loop call using list vpnBindings
 
 640                     for(AAIResourceUri u : uris) {
 
 642                         NetworkPolicy p = client.get(u, NotFoundException.class).asBean(NetworkPolicy.class).get()
 
 644                         execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
 
 646                         String networkPolicy  = p.getNetworkPolicyFqdn()
 
 647                         networkPolicies += "<policyFqdns>" + networkPolicy + "</policyFqdns>" + '\n'
 
 651                     execution.setVariable(Prefix + "networkCollection", networkPolicies)
 
 652                     logger.debug(Prefix + "networkCollection - " + '\n' + networkPolicies)
 
 655                     // reset return code to success
 
 656                     execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
 
 657                     AaiUtil aaiUriUtil = new AaiUtil(this)
 
 658                     String schemaVersion = aaiUriUtil.getNamespace()
 
 659                     String aaiStubResponse =
 
 660                             """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
 
 661                                                         <network-policy xmlns="${schemaVersion}">
 
 662                                                           <network-policy-fqdn/>
 
 665                     String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
 
 666                     execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
 
 667                     execution.setVariable(Prefix + "networkCollection", "<policyFqdns/>")
 
 668                     logger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
 
 672         } catch (NotFoundException e) {
 
 673             String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
 
 674             logger.debug(dataErrorMessage)
 
 675             exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 677         } catch (Exception ex) {
 
 678             String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
 
 679             logger.debug(exceptionMessage)
 
 680             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 686     public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
 
 688         execution.setVariable("prefix",Prefix)
 
 690         logger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
 
 694             AAIResourcesClient client = new AAIResourcesClient()
 
 695             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, execution.getVariable(Prefix + "networkId"))
 
 696             Optional<Relationships> relationships = client.get(uri, NotFoundException.class).getRelationships()
 
 697             if(relationships.isPresent()){
 
 698                 List<AAIResourceUri> uris = relationships.get().getRelatedAAIUris(AAIObjectType.ROUTE_TABLE_REFERENCE)
 
 700                 execution.setVariable(Prefix + "networkTableRefCount", uris.size())
 
 701                 logger.debug(Prefix + "networkTableRefCount - " + uris.size())
 
 704                 if (uris.size() > 0) {
 
 706                     // AII loop call using list vpnBindings
 
 707                     String networkTableRefs = ""
 
 708                     for(AAIResourceUri u : uris) {
 
 710                         RouteTableReference rt = client.get(u, NotFoundException.class).asBean(RouteTableReference.class).get()
 
 712                         String networkTableRef  = rt.getRouteTableReferenceFqdn()
 
 713                         networkTableRefs += "<routeTableFqdns>" + networkTableRef + "</routeTableFqdns>" + '\n'
 
 718                     execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
 
 719                     logger.debug(Prefix + "tableRefCollection - " + '\n' + networkTableRefs)
 
 722                     // reset return code to success
 
 723                     execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
 
 724                     AaiUtil aaiUriUtil = new AaiUtil(this)
 
 725                     String schemaVersion = aaiUriUtil.getNamespace()
 
 726                     String aaiStubResponse =
 
 727                             """ <rest:payload contentType="text/xml" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd">
 
 728                                                         <route-table-references xmlns="${schemaVersion}">
 
 729                                                           <route-table-reference-fqdn/>
 
 730                             </route-table-references>
 
 732                     String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
 
 733                     execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
 
 734                     execution.setVariable(Prefix + "tableRefCollection", "<routeTableFqdns/>")
 
 735                     logger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
 
 740         } catch (NotFoundException e) {
 
 741             String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
 
 742             logger.debug(dataErrorMessage)
 
 743             exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 745         } catch (Exception ex) {
 
 746             String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
 
 747             logger.debug(exceptionMessage)
 
 748             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 755     public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
 
 757         execution.setVariable("prefix",Prefix)
 
 759         logger.trace(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
 
 763             String networkId   = execution.getVariable(Prefix + "networkId")
 
 764             L3Network requeryIdAAIResponse   = execution.getVariable(Prefix + "requeryIdAAIResponse")
 
 765             String createNetworkResponse   = execution.getVariable(Prefix + "createNetworkResponse")
 
 767             L3Network l3Network = new L3Network()
 
 768             if (StringUtils.isBlank(requeryIdAAIResponse.getHeatStackId())) {
 
 769                 if (utils.nodeExists(createNetworkResponse, 'networkStackId')) {
 
 770                     l3Network.setHeatStackId(utils.getNodeText(createNetworkResponse, 'networkStackId'))
 
 773             if (StringUtils.isBlank(requeryIdAAIResponse.getNeutronNetworkId())) {
 
 774                 if (utils.nodeExists(createNetworkResponse, 'neutronNetworkId')) {
 
 775                     l3Network.setNeutronNetworkId(utils.getNodeText(createNetworkResponse, 'neutronNetworkId'))
 
 778             if (StringUtils.isBlank(requeryIdAAIResponse.getContrailNetworkFqdn())) {
 
 779                 if (utils.nodeExists(createNetworkResponse, 'networkFqdn')) {
 
 780                     l3Network.setContrailNetworkFqdn(utils.getNodeText(createNetworkResponse, 'networkFqdn'))
 
 784             String status = utils.getNodeText(createNetworkResponse, 'orchestration-status')
 
 785             if(status.equals("pending-create") || status.equals("PendingCreate")){
 
 786                 l3Network.setOrchestrationStatus("Created")
 
 788                 l3Network.setOrchestrationStatus("Active")
 
 791             logger.debug("Updating l3-network in AAI" )
 
 793             AAIResourcesClient client = new AAIResourcesClient()
 
 794             AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId)
 
 795             client.update(uri, l3Network)
 
 797             if(requeryIdAAIResponse.getSubnets() != null){
 
 798                 for(Subnet s:requeryIdAAIResponse.getSubnets().getSubnet()){
 
 799                     String subnetOrchStatus = s.getOrchestrationStatus()
 
 800                     String subnetId = s.getSubnetId()
 
 801                     Subnet subnet = new Subnet()
 
 802                     subnet.setNeutronSubnetId(networkUtils.extractNeutSubId(createNetworkResponse, subnetId))
 
 803                     if(subnetOrchStatus.equals("pending-create") || subnetOrchStatus.equals("PendingCreate") ){
 
 804                         subnet.setOrchestrationStatus("Created")
 
 806                         subnet.setOrchestrationStatus("Active")
 
 809                     logger.debug("Updating subnet in AAI" )
 
 810                     AAIResourceUri subUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, networkId, subnetId)
 
 811                     client.update(subUri, subnet)
 
 816             String rollbackEnabled = execution.getVariable(Prefix + "rollbackEnabled")
 
 817             if (rollbackEnabled == "true") {
 
 818                 execution.setVariable(Prefix + "isPONR", false)
 
 820                 execution.setVariable(Prefix + "isPONR", true)
 
 822             logger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
 
 824         } catch (BpmnError e) {
 
 826         } catch (NotFoundException e) {
 
 827             String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
 
 828             logger.debug(dataErrorMessage)
 
 829             exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
 
 830         } catch (Exception ex) {
 
 831             String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
 
 832             logger.debug(exceptionMessage)
 
 833             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 837     public void prepareCreateNetworkRequest (DelegateExecution execution) {
 
 839         execution.setVariable("prefix",Prefix)
 
 841         logger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
 
 846             String requestId = execution.getVariable("msoRequestId")
 
 847             if (requestId == null) {
 
 848                 requestId = execution.getVariable("mso-request-id")
 
 850             String messageId = execution.getVariable(Prefix + "messageId")
 
 851             String source    = execution.getVariable(Prefix + "source")
 
 853             String requestInput = execution.getVariable(Prefix + "networkRequest")
 
 854             L3Network queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
 
 855             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
 
 856             String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
 
 858             // Prepare Network request
 
 859             String routeCollection = execution.getVariable(Prefix + "routeCollection")
 
 860             String policyCollection = execution.getVariable(Prefix + "networkCollection")
 
 861             String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
 
 862             String createNetworkRequest = networkUtils.CreateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
 
 864             String buildDeleteNetworkRequestAsString = utils.formatXml(createNetworkRequest)
 
 865             buildDeleteNetworkRequestAsString = buildDeleteNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
 
 867             execution.setVariable(Prefix + "createNetworkRequest", buildDeleteNetworkRequestAsString)
 
 868             logger.debug(Prefix + "createNetworkRequest - " + "\n" +  buildDeleteNetworkRequestAsString)
 
 870         } catch (Exception ex) {
 
 871             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareCreateNetworkRequest() - " + ex.getMessage()
 
 872             logger.debug(exceptionMessage)
 
 873             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 879     public void prepareSDNCRequest (DelegateExecution execution) {
 
 881         execution.setVariable("prefix",Prefix)
 
 883         logger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
 
 887             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
 888             String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 889             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 891             String networkId = execution.getVariable(Prefix + "networkId")
 
 892             String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
 
 894             // get/set 'msoRequestId' and 'mso-request-id'
 
 895             String requestId = execution.getVariable("msoRequestId")
 
 896             if (requestId != null) {
 
 897                 execution.setVariable("mso-request-id", requestId)
 
 899                 requestId = execution.getVariable("mso-request-id")
 
 901             execution.setVariable(Prefix + "requestId", requestId)
 
 903             // 1. prepare assign topology via SDNC Adapter SUBFLOW call
 
 904             String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
 
 906             String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
 
 907             execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
 
 908             logger.debug(Prefix + "assignSDNCRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
 
 911         } catch (Exception ex) {
 
 912             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
 
 913             logger.debug(exceptionMessage)
 
 914             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 920     public void prepareRpcSDNCRequest (DelegateExecution execution) {
 
 922         execution.setVariable("prefix",Prefix)
 
 924         logger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
 
 929             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
 930             String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 931             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 933             String networkId = execution.getVariable(Prefix + "networkId")
 
 934             String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
 
 936             // 1. prepare assign topology via SDNC Adapter SUBFLOW call
 
 937             String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
 
 939             String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
 
 940             execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
 
 941             logger.debug(Prefix + "assignSDNCRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
 
 943         } catch (Exception ex) {
 
 944             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRequest() - " + ex.getMessage()
 
 945             logger.debug(exceptionMessage)
 
 946             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 952     public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
 
 954         execution.setVariable("prefix",Prefix)
 
 956         logger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
 
 960             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
 961             String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
 962             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
 963             String networkId = execution.getVariable(Prefix + "networkId")
 
 964             String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
 
 966             // 1. prepare assign topology via SDNC Adapter SUBFLOW call
 
 967             String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
 
 969             String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
 
 970             execution.setVariable(Prefix + "activateSDNCRequest", sndcTopologyCreateRequesAsString)
 
 971             logger.debug(Prefix + "activateSDNCRequest - " + "\n" +  sndcTopologyCreateRequesAsString)
 
 974         } catch (Exception ex) {
 
 975             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRequest() - " + ex.getMessage()
 
 976             logger.debug(exceptionMessage)
 
 977             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
 986     // **************************************************
 
 987     //     Post or Validate Response Section
 
 988     // **************************************************
 
 990     public void validateCreateNetworkResponse (DelegateExecution execution) {
 
 992         execution.setVariable("prefix",Prefix)
 
 994         logger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
 
 997             String networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
 
 998             if (networkResponse==null)  {
 
 999                 networkResponse="" // reset
 
1002             execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
 
1003             execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
 
1004             logger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
 
1006             // prepare rollback data
 
1007             String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
 
1008             rollbackData = rollbackData.replace("rollback>", "networkRollback>")
 
1009             String rollbackNetwork =
 
1010                     """<rollbackNetworkRequest>
 
1012                                                 </rollbackNetworkRequest>"""
 
1013             String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
 
1014             execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
 
1015             logger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
 
1017         } catch (BpmnError e) {
 
1020         } catch (Exception ex) {
 
1021             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
 
1022             logger.debug(exceptionMessage)
 
1023             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
 
1030     public void validateSDNCResponse (DelegateExecution execution) {
 
1032         execution.setVariable("prefix",Prefix)
 
1034         logger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
 
1036         String response = execution.getVariable(Prefix + "assignSDNCResponse")
 
1037         boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
 
1038         WorkflowException workflowException = execution.getVariable("WorkflowException")
 
1040         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
1041         sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
 
1043         String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
 
1044         assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
 
1045         execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
 
1047         if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, Prefix+'sdncResponseSuccess'
 
1048             execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
 
1049             logger.debug("Successfully Validated SDNC Response")
 
1052             logger.debug("Did NOT Successfully Validated SDNC Response")
 
1053             throw new BpmnError("MSOWorkflowException")
 
1058     public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
 
1060         execution.setVariable("prefix",Prefix)
 
1062         logger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
 
1064         String response = execution.getVariable(Prefix + "activateSDNCResponse")
 
1065         boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
 
1066         WorkflowException workflowException = execution.getVariable("WorkflowException")
 
1068         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
 
1069         sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
 
1071         String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
 
1072         assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('<?xml version="1.0" encoding="UTF-8"?>', "")
 
1073         execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
 
1075         if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) {  // from sdnc util, Prefix+'sdncResponseSuccess'
 
1076             execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
 
1077             logger.debug("Successfully Validated Rpc SDNC Activate Response")
 
1080             logger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
 
1081             throw new BpmnError("MSOWorkflowException")
 
1087     public void prepareSDNCRollbackRequest (DelegateExecution execution) {
 
1089         execution.setVariable("prefix",Prefix)
 
1091         logger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
 
1095             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
1096             String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
1097             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
1098             String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
 
1099             String networkId = execution.getVariable(Prefix + "networkId")
 
1100             if (networkId == 'null') {networkId = ""}
 
1101             String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
 
1103             // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
 
1104             String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
 
1105             String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
 
1106             execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
 
1107             logger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" +  sndcTopologyRollbackRequestAsString)
 
1110         } catch (Exception ex) {
 
1111             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
 
1112             logger.debug(exceptionMessage)
 
1113             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1119     public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
 
1121         execution.setVariable("prefix",Prefix)
 
1123         logger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
 
1127             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
1128             String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
1129             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
1130             String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
 
1131             String networkId = execution.getVariable(Prefix + "networkId")
 
1132             if (networkId == 'null') {networkId = ""}
 
1133             String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
 
1135             // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
 
1136             String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
 
1137             String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
 
1138             execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
 
1139             logger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
 
1142         } catch (Exception ex) {
 
1143             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
 
1144             logger.debug(exceptionMessage)
 
1145             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1151     public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
 
1153         execution.setVariable("prefix",Prefix)
 
1155         logger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
 
1160             String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
 
1161             String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
 
1162             String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
 
1163             String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
 
1164             String networkId = execution.getVariable(Prefix + "networkId")
 
1165             if (networkId == 'null') {networkId = ""}
 
1166             String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
 
1168             // 2. prepare rollback topology via SDNC Adapter SUBFLOW call
 
1169             String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
 
1170             String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
 
1171             execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
 
1172             logger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" +  sndcTopologyRollbackRpcRequestAsString)
 
1175         } catch (Exception ex) {
 
1176             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
 
1177             logger.debug(exceptionMessage)
 
1178             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1184     public void prepareRollbackData(DelegateExecution execution) {
 
1186         execution.setVariable("prefix",Prefix)
 
1188         logger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
 
1192             Map<String, String> rollbackData = new HashMap<String, String>();
 
1193             String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
 
1194             if (rollbackSDNCRequest != null) {
 
1195                 if (rollbackSDNCRequest != "") {
 
1196                     rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
 
1199             String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
 
1200             if (rollbackNetworkRequest != null) {
 
1201                 if (rollbackNetworkRequest != "") {
 
1202                     rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
 
1205             String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
 
1206             if (rollbackActivateSDNCRequest != null) {
 
1207                 if (rollbackActivateSDNCRequest != "") {
 
1208                     rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
 
1211             execution.setVariable("rollbackData", rollbackData)
 
1212             logger.debug("** rollbackData : " + rollbackData)
 
1214             execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
 
1215             logger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
 
1217         } catch (Exception ex) {
 
1218             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
 
1219             logger.debug(exceptionMessage)
 
1220             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1226     public void postProcessResponse(DelegateExecution execution) {
 
1228         execution.setVariable("prefix",Prefix)
 
1230         logger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
 
1235             // 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
 
1236             // 2. Success: execution.getVariable("WorkflowException") == null (NULL)
 
1237             // 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
 
1239             logger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
 
1241             if (execution.getVariable(Prefix + "isException") == false) {
 
1242                 // set rollback data
 
1243                 execution.setVariable("orchestrationStatus", "")
 
1244                 execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
 
1245                 execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
 
1246                 prepareSuccessRollbackData(execution) // populate rollbackData
 
1247                 execution.setVariable("WorkflowException", null)
 
1248                 execution.setVariable(Prefix + "Success", true)
 
1249                 logger.debug(" ***** postProcessResponse(), GOOD !!!")
 
1251                 // inside sub-flow logic
 
1252                 execution.setVariable(Prefix + "Success", false)
 
1253                 execution.setVariable("rollbackData", null)
 
1254                 String exceptionMessage = " Exception encountered in MSO Bpmn. "
 
1255                 if (execution.getVariable("workflowException") != null) {  // Output of Rollback flow.
 
1256                     logger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
 
1257                     WorkflowException wfex = execution.getVariable("workflowException")
 
1258                     exceptionMessage = wfex.getErrorMessage()
 
1260                     if (execution.getVariable(Prefix + "WorkflowException") != null) {
 
1261                         WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
 
1262                         exceptionMessage = pwfex.getErrorMessage()
 
1265                 // going to the Main flow: a-la-carte or macro
 
1266                 logger.debug(" ***** postProcessResponse(), BAD !!!")
 
1267                 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1268                 throw new BpmnError("MSOWorkflowException")
 
1271         } catch(BpmnError b){
 
1272             logger.debug("Rethrowing MSOWorkflowException")
 
1275         } catch (Exception ex) {
 
1276             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
 
1277             logger.debug(exceptionMessage)
 
1278             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1279             throw new BpmnError("MSOWorkflowException")
 
1287     public void prepareSuccessRollbackData(DelegateExecution execution) {
 
1289         execution.setVariable("prefix",Prefix)
 
1291         logger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
 
1295             if (execution.getVariable("sdncVersion") != '1610') {
 
1296                 prepareRpcSDNCRollbackRequest(execution)
 
1297                 prepareRpcSDNCActivateRollback(execution)
 
1299                 prepareSDNCRollbackRequest(execution)
 
1302             Map<String, String> rollbackData = new HashMap<String, String>();
 
1303             String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
 
1304             if (rollbackSDNCRequest != null) {
 
1305                 if (rollbackSDNCRequest != "") {
 
1306                     rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
 
1309             String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
 
1310             if (rollbackNetworkRequest != null) {
 
1311                 if (rollbackNetworkRequest != "") {
 
1312                     rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
 
1315             String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
 
1316             if (rollbackActivateSDNCRequest != null) {
 
1317                 if (rollbackActivateSDNCRequest != "") {
 
1318                     rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
 
1321             execution.setVariable("rollbackData", rollbackData)
 
1323             logger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
 
1324             execution.setVariable("WorkflowException", null)
 
1327         } catch (Exception ex) {
 
1328             String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
 
1329             logger.debug(exceptionMessage)
 
1330             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1336     public void setExceptionFlag(DelegateExecution execution){
 
1338         execution.setVariable("prefix",Prefix)
 
1340         logger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
 
1344             execution.setVariable(Prefix + "isException", true)
 
1346             if (execution.getVariable("SavedWorkflowException1") != null) {
 
1347                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
 
1349                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
 
1351             logger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
 
1353         } catch(Exception ex){
 
1354             String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
 
1355             logger.debug(exceptionMessage)
 
1356             exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
 
1362     // *******************************
 
1363     //     Build Error Section
 
1364     // *******************************
 
1368     public void processJavaException(DelegateExecution execution){
 
1370         execution.setVariable("prefix",Prefix)
 
1373             logger.debug( "Caught a Java Exception in " + Prefix)
 
1374             logger.debug("Started processJavaException Method")
 
1375             logger.debug("Variables List: " + execution.getVariables())
 
1376             execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix)  // Adding this line temporarily until this flows error handling gets updated
 
1377             exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
 
1379         }catch(Exception e){
 
1380             logger.debug("Caught Exception during processJavaException Method: " + e)
 
1381             execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix)  // Adding this line temporarily until this flows error handling gets updated
 
1382             exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
 
1384         logger.debug( "Completed processJavaException Method in " + Prefix)