/*-
* ============LICENSE_START=======================================================
* ONAP - SO
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
package org.onap.so.bpmn.infrastructure.scripts;
import org.apache.commons.lang3.*
import org.camunda.bpm.engine.delegate.BpmnError
import org.camunda.bpm.engine.delegate.DelegateExecution
import org.onap.so.bpmn.common.scripts.AaiUtil
import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
import org.onap.so.bpmn.common.scripts.ExceptionUtil
import org.onap.so.bpmn.common.scripts.MsoUtils
import org.onap.so.bpmn.common.scripts.NetworkUtils
import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
import org.onap.so.bpmn.common.scripts.VidUtils
import org.onap.so.bpmn.core.UrnPropertiesReader
import org.onap.so.bpmn.core.WorkflowException
import org.onap.so.bpmn.core.json.JsonUtils
import org.onap.so.logger.MsoLogger
import org.onap.so.rest.APIResponse;
import org.springframework.web.util.UriUtils
import groovy.json.*
import groovy.xml.XmlUtil
/**
* This groovy class supports the DoCreateNetworkInstance.bpmn process.
*
*/
public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor {
private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoCreateNetworkInstance.class);
String Prefix="CRENWKI_"
ExceptionUtil exceptionUtil = new ExceptionUtil()
JsonUtils jsonUtil = new JsonUtils()
VidUtils vidUtils = new VidUtils(this)
NetworkUtils networkUtils = new NetworkUtils()
SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
def className = getClass().getSimpleName()
/**
* This method is executed during the preProcessRequest task of the DoCreateNetworkInstance.bpmn process.
* @param execution
*/
public InitializeProcessVariables(DelegateExecution execution){
/* Initialize all the process variables in this block */
execution.setVariable(Prefix + "networkRequest", "")
execution.setVariable(Prefix + "rollbackEnabled", null)
execution.setVariable(Prefix + "networkInputs", "")
//execution.setVariable(Prefix + "requestId", "")
execution.setVariable(Prefix + "messageId", "")
execution.setVariable(Prefix + "source", "")
execution.setVariable("BasicAuthHeaderValuePO", "")
execution.setVariable("BasicAuthHeaderValueSDNC", "")
execution.setVariable(Prefix + "serviceInstanceId","")
execution.setVariable("GENGS_type", "")
execution.setVariable(Prefix + "rsrc_endpoint", null)
execution.setVariable(Prefix + "networkOutputs", "")
execution.setVariable(Prefix + "networkId","")
execution.setVariable(Prefix + "networkName","")
// AAI query Name
execution.setVariable(Prefix + "queryNameAAIRequest","")
execution.setVariable(Prefix + "queryNameAAIResponse", "")
execution.setVariable(Prefix + "aaiNameReturnCode", "")
execution.setVariable(Prefix + "isAAIqueryNameGood", false)
// AAI query Cloud Region
execution.setVariable(Prefix + "queryCloudRegionRequest","")
execution.setVariable(Prefix + "queryCloudRegionReturnCode","")
execution.setVariable(Prefix + "queryCloudRegionResponse","")
execution.setVariable(Prefix + "cloudRegionPo","")
execution.setVariable(Prefix + "cloudRegionSdnc","")
execution.setVariable(Prefix + "isCloudRegionGood", false)
// AAI query Id
execution.setVariable(Prefix + "queryIdAAIRequest","")
execution.setVariable(Prefix + "queryIdAAIResponse", "")
execution.setVariable(Prefix + "aaiIdReturnCode", "")
// AAI query vpn binding
execution.setVariable(Prefix + "queryVpnBindingAAIRequest","")
execution.setVariable(Prefix + "queryVpnBindingAAIResponse", "")
execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "")
execution.setVariable(Prefix + "vpnBindings", null)
execution.setVariable(Prefix + "vpnCount", 0)
execution.setVariable(Prefix + "routeCollection", "")
// AAI query network policy
execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest","")
execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", "")
execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "")
execution.setVariable(Prefix + "networkPolicyUriList", null)
execution.setVariable(Prefix + "networkPolicyCount", 0)
execution.setVariable(Prefix + "networkCollection", "")
// AAI query route table reference
execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest","")
execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", "")
execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "")
execution.setVariable(Prefix + "networkTableRefUriList", null)
execution.setVariable(Prefix + "networkTableRefCount", 0)
execution.setVariable(Prefix + "tableRefCollection", "")
// AAI requery Id
execution.setVariable(Prefix + "requeryIdAAIRequest","")
execution.setVariable(Prefix + "requeryIdAAIResponse", "")
execution.setVariable(Prefix + "aaiRequeryIdReturnCode", "")
// AAI update contrail
execution.setVariable(Prefix + "updateContrailAAIUrlRequest","")
execution.setVariable(Prefix + "updateContrailAAIPayloadRequest","")
execution.setVariable(Prefix + "updateContrailAAIResponse", "")
execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", "")
execution.setVariable(Prefix + "createNetworkRequest", "")
execution.setVariable(Prefix + "createNetworkResponse", "")
execution.setVariable(Prefix + "rollbackNetworkRequest", "")
//execution.setVariable(Prefix + "rollbackNetworkResponse", "")
execution.setVariable(Prefix + "networkReturnCode", "")
//execution.setVariable(Prefix + "rollbackNetworkReturnCode", "")
execution.setVariable(Prefix + "isNetworkRollbackNeeded", false)
execution.setVariable(Prefix + "assignSDNCRequest", "")
execution.setVariable(Prefix + "assignSDNCResponse", "")
execution.setVariable(Prefix + "rollbackSDNCRequest", "")
//execution.setVariable(Prefix + "rollbackSDNCResponse", "")
execution.setVariable(Prefix + "sdncReturnCode", "")
//execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")
execution.setVariable(Prefix + "isSdncRollbackNeeded", false)
execution.setVariable(Prefix + "sdncResponseSuccess", false)
execution.setVariable(Prefix + "activateSDNCRequest", "")
execution.setVariable(Prefix + "activateSDNCResponse", "")
execution.setVariable(Prefix + "rollbackActivateSDNCRequest", "")
//execution.setVariable(Prefix + "rollbackActivateSDNCResponse", "")
execution.setVariable(Prefix + "sdncActivateReturnCode", "")
//execution.setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", false)
execution.setVariable(Prefix + "sdncActivateResponseSuccess", false)
execution.setVariable(Prefix + "orchestrationStatus", "")
execution.setVariable(Prefix + "isVnfBindingPresent", false)
execution.setVariable(Prefix + "Success", false)
execution.setVariable(Prefix + "isException", false)
}
// **************************************************
// Pre or Prepare Request Section
// **************************************************
/**
* This method is executed during the preProcessRequest task of the DoCreateNetworkInstance.bpmn process.
* @param execution
*/
public void preProcessRequest (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside preProcessRequest() of " + className + ".groovy")
try {
// initialize flow variables
InitializeProcessVariables(execution)
// GET Incoming request & validate 3 kinds of format.
execution.setVariable("action", "CREATE")
String networkRequest = execution.getVariable("bpmnRequest")
if (networkRequest != null) {
if (networkRequest.contains("requestDetails")) {
// JSON format request is sent, create xml
try {
def prettyJson = JsonOutput.prettyPrint(networkRequest.toString())
msoLogger.debug(" Incoming message formatted . . . : " + '\n' + prettyJson)
networkRequest = vidUtils.createXmlNetworkRequestInfra(execution, networkRequest)
} catch (Exception ex) {
String dataErrorMessage = " Invalid json format Request - " + ex.getMessage()
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
} else {
// XML format request is sent
}
} else {
// vIPR format request is sent, create xml from individual variables
networkRequest = vidUtils.createXmlNetworkRequestInstance(execution)
}
networkRequest = utils.formatXml(networkRequest)
execution.setVariable(Prefix + "networkRequest", networkRequest)
msoLogger.debug(Prefix + "networkRequest - " + '\n' + networkRequest)
// validate 'backout-on-failure' to override 'mso.rollback'
boolean rollbackEnabled = networkUtils.isRollbackEnabled(execution, networkRequest)
execution.setVariable(Prefix + "rollbackEnabled", rollbackEnabled)
msoLogger.debug(Prefix + "rollbackEnabled - " + rollbackEnabled)
String networkInputs = utils.getNodeXml(networkRequest, "network-inputs", false).replace("tag0:","").replace(":tag0","")
execution.setVariable(Prefix + "networkInputs", networkInputs)
msoLogger.debug(Prefix + "networkInputs - " + '\n' + networkInputs)
// prepare messageId
String messageId = execution.getVariable("testMessageId") // for testing
if (messageId == null || messageId == "") {
messageId = UUID.randomUUID()
msoLogger.debug(Prefix + "messageId, random generated: " + messageId)
} else {
msoLogger.debug(Prefix + "messageId, pre-assigned: " + messageId)
}
execution.setVariable(Prefix + "messageId", messageId)
String source = utils.getNodeText(networkRequest, "source")
execution.setVariable(Prefix + "source", source)
msoLogger.debug(Prefix + "source - " + source)
// validate cloud region
String lcpCloudRegionId = utils.getNodeText(networkRequest, "aic-cloud-region")
if ((lcpCloudRegionId == null) || (lcpCloudRegionId == "") || (lcpCloudRegionId == "null")) {
String dataErrorMessage = "Missing value/element: 'lcpCloudRegionId' or 'cloudConfiguration' or 'aic-cloud-region'."
msoLogger.debug(" Invalid Request - " + dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
// validate service instance id
String serviceInstanceId = utils.getNodeText(networkRequest, "service-instance-id")
if ((serviceInstanceId == null) || (serviceInstanceId == "") || (serviceInstanceId == "null")) {
String dataErrorMessage = "Missing value/element: 'serviceInstanceId'."
msoLogger.debug(" Invalid Request - " + dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
// PO Authorization Info / headers Authorization=
String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
try {
def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey",execution))
execution.setVariable("BasicAuthHeaderValuePO",encodedString)
execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
} catch (IOException ex) {
String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "
String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
// Set variables for Generic Get Sub Flow use
execution.setVariable(Prefix + "serviceInstanceId", serviceInstanceId)
msoLogger.debug(Prefix + "serviceInstanceId - " + serviceInstanceId)
execution.setVariable("GENGS_type", "service-instance")
msoLogger.debug("GENGS_type - " + "service-instance")
msoLogger.debug(" Url for SDNC adapter: " + UrnPropertiesReader.getVariable("mso.adapters.sdnc.endpoint",execution))
String sdncVersion = execution.getVariable("sdncVersion")
msoLogger.debug("sdncVersion? : " + sdncVersion)
// build 'networkOutputs'
String networkId = utils.getNodeText(networkRequest, "network-id")
if ((networkId == null) || (networkId == "null")) {
networkId = ""
}
String networkName = utils.getNodeText(networkRequest, "network-name")
if ((networkName == null) || (networkName == "null")) {
networkName = ""
}
String networkOutputs =
"""
${MsoUtils.xmlEscape(networkId)}
${MsoUtils.xmlEscape(networkName)}
"""
execution.setVariable(Prefix + "networkOutputs", networkOutputs)
msoLogger.debug(Prefix + "networkOutputs - " + '\n' + networkOutputs)
execution.setVariable(Prefix + "networkId", networkId)
execution.setVariable(Prefix + "networkName", networkName)
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
sendSyncError(execution)
// caught exception
String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTQueryAAINetworkName (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.debug(" ***** Inside callRESTQueryAAINetworkName() of DoCreateNetworkInstance ***** " )
// get variables
String networkInputs = execution.getVariable(Prefix + "networkInputs")
String networkName = utils.getNodeText(networkInputs, "network-name")
networkName = UriUtils.encode(networkName,"UTF-8")
// Prepare AA&I url with network-name
String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
AaiUtil aaiUriUtil = new AaiUtil(this)
String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
String queryAAINameRequest = "${aai_endpoint}${aai_uri}" + "?network-name=" + networkName
execution.setVariable(Prefix + "queryNameAAIRequest", queryAAINameRequest)
msoLogger.debug(Prefix + "queryNameAAIRequest - " + "\n" + queryAAINameRequest)
try {
APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryAAINameRequest)
String returnCode = response.getStatusCode()
execution.setVariable(Prefix + "aaiNameReturnCode", returnCode)
msoLogger.debug(" ***** AAI Query Name Response Code : " + returnCode)
String aaiResponseAsString = response.getResponseBodyAsString()
msoLogger.debug(" ***** AAI Query Name Response : " +'\n'+ aaiResponseAsString)
if (returnCode=='200') {
execution.setVariable(Prefix + "queryNameAAIResponse", aaiResponseAsString)
execution.setVariable(Prefix + "isAAIqueryNameGood", true)
String orchestrationStatus = ""
try {
// response is NOT empty
orchestrationStatus = utils.getNodeText(aaiResponseAsString, "orchestration-status")
execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus.toUpperCase())
msoLogger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus.toUpperCase())
execution.setVariable("orchestrationStatus", orchestrationStatus)
} catch (Exception ex) {
// response is empty
execution.setVariable(Prefix + "orchestrationStatus", orchestrationStatus)
msoLogger.debug(Prefix + "orchestrationStatus - " + orchestrationStatus)
}
} else {
if (returnCode=='404') {
msoLogger.debug(" QueryAAINetworkName return code = '404' (Not Found). Proceed with the Create !!! ")
} else {
// aai all errors
String dataErrorMessage = "Unexpected Error Response from QueryAAINetworkName - " + returnCode
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildWorkflowException(execution, 2500, dataErrorMessage)
}
}
msoLogger.debug(Prefix + "isAAIqueryNameGood? : " + execution.getVariable(Prefix + "isAAIqueryNameGood"))
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
// try error
String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAINetworkName() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTQueryAAICloudRegion (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.debug(" ***** Inside callRESTQueryAAICloudRegion() of DoCreateNetworkInstance ***** " )
try {
String networkInputs = execution.getVariable(Prefix + "networkInputs")
String cloudRegion = utils.getNodeText(networkInputs, "aic-cloud-region")
cloudRegion = UriUtils.encode(cloudRegion,"UTF-8")
// Prepare AA&I url
String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
AaiUtil aaiUtil = new AaiUtil(this)
String aai_uri = aaiUtil.getCloudInfrastructureCloudRegionUri(execution)
String queryCloudRegionRequest = "${aai_endpoint}${aai_uri}/" + cloudRegion
execution.setVariable(Prefix + "queryCloudRegionRequest", queryCloudRegionRequest)
msoLogger.debug(Prefix + "queryCloudRegionRequest - " + "\n" + queryCloudRegionRequest)
String cloudRegionPo = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
String cloudRegionSdnc = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "SDNC", cloudRegion)
if ((cloudRegionPo != "ERROR") && (cloudRegionSdnc != "ERROR")) {
execution.setVariable(Prefix + "cloudRegionPo", cloudRegionPo)
execution.setVariable(Prefix + "cloudRegionSdnc", cloudRegionSdnc)
execution.setVariable(Prefix + "isCloudRegionGood", true)
} else {
String dataErrorMessage = "QueryAAICloudRegion Unsuccessful. Return Code: " + execution.getVariable(Prefix + "queryCloudRegionReturnCode")
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
msoLogger.debug(" is Cloud Region Good: " + execution.getVariable(Prefix + "isCloudRegionGood"))
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
// try error
String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow - callRESTQueryAAICloudRegion() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTQueryAAINetworkId(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.debug(" ***** Inside callRESTQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
try {
// get variables
String networkId = ""
String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
if (execution.getVariable("sdncVersion") != "1610") {
String networkResponseInformation = ""
try {
networkResponseInformation = utils.getNodeXml(assignSDNCResponse, "network-response-information", false).replace("tag0:","").replace(":tag0","")
networkId = utils.getNodeText(networkResponseInformation, "instance-id")
} catch (Exception ex) {
String dataErrorMessage = " SNDC Response network validation for 'instance-id' (network-id) failed: Empty "
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
} else {
networkId = utils.getNodeText(assignSDNCResponse, "network-id")
}
if (networkId == null || networkId == "null") {
String dataErrorMessage = "SNDC Response did not contains 'instance-id' or 'network-id' element, or the value is null."
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
} else {
msoLogger.debug(" SNDC Response network validation for 'instance-id' (network-id)' is good: " + networkId)
}
execution.setVariable(Prefix + "networkId", networkId)
String networkName = utils.getNodeText(assignSDNCResponse, "network-name")
execution.setVariable(Prefix + "networkName", networkName)
networkId = UriUtils.encode(networkId,"UTF-8")
// Prepare AA&I url
String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
AaiUtil aaiUriUtil = new AaiUtil(this)
String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
String queryIdAAIRequest = "${aai_endpoint}${aai_uri}/" + networkId + "?depth=all"
execution.setVariable(Prefix + "queryIdAAIRequest", queryIdAAIRequest)
msoLogger.debug(Prefix + "queryIdAAIRequest - " + "\n" + queryIdAAIRequest)
APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryIdAAIRequest)
String returnCode = response.getStatusCode()
execution.setVariable(Prefix + "aaiIdReturnCode", returnCode)
msoLogger.debug(" ***** AAI Response Code : " + returnCode)
String aaiResponseAsString = response.getResponseBodyAsString()
if (returnCode=='200') {
execution.setVariable(Prefix + "queryIdAAIResponse", aaiResponseAsString)
msoLogger.debug(" QueryAAINetworkId Success REST Response - " + "\n" + aaiResponseAsString)
String netId = utils.getNodeText(aaiResponseAsString, "network-id")
execution.setVariable(Prefix + "networkId", netId)
String netName = utils.getNodeText(aaiResponseAsString, "network-name")
execution.setVariable(Prefix + "networkName", netName)
} else {
if (returnCode=='404') {
String dataErrorMessage = "Response Error from QueryAAINetworkId is 404 (Not Found)."
msoLogger.debug(" AAI Query Failed. " + dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
} else {
if (aaiResponseAsString.contains("RESTFault")) {
WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
execution.setVariable("WorkflowException", exceptionObject)
throw new BpmnError("MSOWorkflowException")
} else {
// aai all errors
String dataErrorMessage = "Unexpected Response from QueryAAINetworkId - " + returnCode
msoLogger.debug("Unexpected Response from QueryAAINetworkId - " + dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
}
}
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkId() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTReQueryAAINetworkId(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.debug(" ***** Inside callRESTReQueryAAINetworkId() of DoCreateNetworkInstance ***** " )
try {
// get variables
String networkId = execution.getVariable(Prefix + "networkId")
String netId = networkId
networkId = UriUtils.encode(networkId,"UTF-8")
// Prepare AA&I url
String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
AaiUtil aaiUriUtil = new AaiUtil(this)
String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
String requeryIdAAIRequest = "${aai_endpoint}${aai_uri}/" + networkId + "?depth=all"
execution.setVariable(Prefix + "requeryIdAAIRequest", requeryIdAAIRequest)
msoLogger.debug(Prefix + "requeryIdAAIRequest - " + "\n" + requeryIdAAIRequest)
APIResponse response = aaiUriUtil.executeAAIGetCall(execution, requeryIdAAIRequest)
String returnCode = response.getStatusCode()
execution.setVariable(Prefix + "aaiRequeryIdReturnCode", returnCode)
msoLogger.debug(" ***** AAI ReQuery Response Code : " + returnCode)
String aaiResponseAsString = response.getResponseBodyAsString()
if (returnCode=='200') {
execution.setVariable(Prefix + "requeryIdAAIResponse", aaiResponseAsString)
msoLogger.debug(" ReQueryAAINetworkId Success REST Response - " + "\n" + aaiResponseAsString)
String netName = utils.getNodeText(aaiResponseAsString, "network-name")
String networkOutputs =
"""
${MsoUtils.xmlEscape(netId)}
${MsoUtils.xmlEscape(netName)}
"""
execution.setVariable(Prefix + "networkOutputs", networkOutputs)
msoLogger.debug(" networkOutputs - " + '\n' + networkOutputs)
} else {
if (returnCode=='404') {
String dataErrorMessage = "Response Error from ReQueryAAINetworkId is 404 (Not Found)."
msoLogger.debug(" AAI ReQuery Failed. - " + dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
} else {
if (aaiResponseAsString.contains("RESTFault")) {
WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
execution.setVariable("WorkflowException", exceptionObject)
throw new BpmnError("MSOWorkflowException")
} else {
// aai all errors
String dataErrorMessage = "Unexpected Response from ReQueryAAINetworkId - " + returnCode
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
}
}
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTReQueryAAINetworkId() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTQueryAAINetworkVpnBinding(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.debug(" ***** Inside callRESTQueryAAINetworkVpnBinding() of DoCreateNetworkInstance ***** " )
try {
// get variables
String queryIdAAIResponse = execution.getVariable(Prefix + "queryIdAAIResponse").replace('', "")
String relationship = networkUtils.getFirstNodeXml(queryIdAAIResponse, "relationship-list").trim().replace("tag0:","").replace(":tag0","")
msoLogger.debug(" relationship - " + relationship)
// Check if Vnf Binding is present, then build a List of vnfBinding
List vpnBindingUri = networkUtils.getVnfBindingObject(relationship)
int vpnCount = vpnBindingUri.size()
execution.setVariable(Prefix + "vpnCount", vpnCount)
msoLogger.debug(Prefix + "vpnCount - " + vpnCount)
String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
AaiUtil aaiUriUtil = new AaiUtil(this)
if (vpnCount > 0) {
execution.setVariable(Prefix + "vpnBindings", vpnBindingUri)
msoLogger.debug(" vpnBindingUri List - " + vpnBindingUri)
String routeTargets = ""
// AII loop call using list vpnBindings
for (i in 0..vpnBindingUri.size()-1) {
int counting = i+1
// prepare url using vpnBinding
String queryVpnBindingAAIRequest = ""
String aai_uri = aaiUriUtil.getNetworkVpnBindingUri(execution)
// Note: By default, the vpnBinding url is found in 'related-link' of the response,
// so, the default in URN mappings for this is set to "" (ie, space), unless forced to use the URN mapping.
if (aai_uri == null || aai_uri == "") {
// using value of 'related-link' from response
if (vpnBindingUri[i].charAt(vpnBindingUri[i].length()-1) == '/') {
queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i].substring(0, vpnBindingUri[i].length()-1) + "?depth=all"
} else {
queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i] + "?depth=all"
}
} else {
// using uri value in URN mapping
String vpnBindingId = vpnBindingUri[i].substring(vpnBindingUri[i].indexOf("/vpn-binding/")+13, vpnBindingUri[i].length())
if (vpnBindingId.charAt(vpnBindingId.length()-1) == '/') {
vpnBindingId = vpnBindingId.substring(0, vpnBindingId.length()-1)
}
queryVpnBindingAAIRequest = "${aai_endpoint}${aai_uri}/" + vpnBindingId + "?depth=all"
}
execution.setVariable(Prefix + "queryVpnBindingAAIRequest", queryVpnBindingAAIRequest)
msoLogger.debug(Prefix + "queryVpnBindingAAIRequest, , vpnBinding #" + counting + " : " + "\n" + queryVpnBindingAAIRequest)
APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryVpnBindingAAIRequest)
String returnCode = response.getStatusCode()
execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", returnCode)
msoLogger.debug(" ***** AAI query vpn binding Response Code, vpnBinding #" + counting + " : " + returnCode)
String aaiResponseAsString = response.getResponseBodyAsString()
if (returnCode=='200') {
execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiResponseAsString)
msoLogger.debug(" AAI Query Vpn Binding Success REST Response, , vpnBinding #" + counting + " : " + "\n" + aaiResponseAsString)
String routeTarget = ""
String routeRole = ""
if (utils.nodeExists(aaiResponseAsString, "route-targets")) {
String aaiRouteTargets = utils.getNodeXml(aaiResponseAsString, "route-targets", false)
def aaiRouteTargetsXml = new XmlSlurper().parseText(aaiRouteTargets)
def aaiRouteTarget = aaiRouteTargetsXml.'**'.findAll {it.name() == "route-target"}
for (j in 0..aaiRouteTarget.size()-1) {
routeTarget = utils.getNodeText(XmlUtil.serialize(aaiRouteTarget[j]), "global-route-target")
routeRole = utils.getNodeText(XmlUtil.serialize(aaiRouteTarget[j]), "route-target-role")
routeTargets += "" + '\n' +
" " + routeTarget + "" + '\n' +
" " + routeRole + "" + '\n' +
"" + '\n'
}
}
} else {
if (returnCode=='404') {
String dataErrorMessage = "Response Error from AAINetworkVpnBinding is 404 (Not Found)."
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
} else {
if (aaiResponseAsString.contains("RESTFault")) {
WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
execution.setVariable("WorkflowException", exceptionObject)
throw new BpmnError("MSOWorkflowException")
} else {
// aai all errors
String dataErrorMessage = " Unexpected Response from AAINetworkVpnBinding - " + returnCode
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
}
}
} // end loop
execution.setVariable(Prefix + "routeCollection", routeTargets)
msoLogger.debug(Prefix + "routeCollection - " + '\n' + routeTargets)
} else {
// reset return code to success
execution.setVariable(Prefix + "aaiQqueryVpnBindingReturnCode", "200")
String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
String schemaVersion = aaiUriUtil.getNamespaceFromUri(execution, aai_uri)
String aaiStubResponse =
"""
"""
String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
execution.setVariable(Prefix + "queryVpnBindingAAIResponse", aaiStubResponseAsXml)
execution.setVariable(Prefix + "routeCollection", "")
msoLogger.debug(" No vpnBinding, using this stub as response - " + '\n' + aaiStubResponseAsXml)
}
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkVpnBinding() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTQueryAAINetworkPolicy(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.debug(" ***** Inside callRESTQueryAAINetworkPolicy() of DoCreateNetworkInstance ***** " )
try {
// get variables
String queryIdAAIResponse = execution.getVariable(Prefix + "queryIdAAIResponse").replace('', "")
String relationship = networkUtils.getFirstNodeXml(queryIdAAIResponse, "relationship-list").trim().replace("tag0:","").replace(":tag0","")
msoLogger.debug(" relationship - " + relationship)
// Check if Network Policy is present, then build a List of network policy
List networkPolicyUriList = networkUtils.getNetworkPolicyObject(relationship)
int networkPolicyCount = networkPolicyUriList.size()
execution.setVariable(Prefix + "networkPolicyCount", networkPolicyCount)
msoLogger.debug(Prefix + "networkPolicyCount - " + networkPolicyCount)
String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
AaiUtil aaiUriUtil = new AaiUtil(this)
if (networkPolicyCount > 0) {
execution.setVariable(Prefix + "networkPolicyUriList", networkPolicyUriList)
msoLogger.debug(" networkPolicyUri List - " + networkPolicyUriList)
String networkPolicies = ""
// AII loop call using list vpnBindings
for (i in 0..networkPolicyUriList.size()-1) {
int counting = i+1
// prepare url using vpnBinding
String queryNetworkPolicyAAIRequest = ""
String aai_uri = aaiUriUtil.getNetworkPolicyUri(execution)
// Note: By default, the network policy url is found in 'related-link' of the response,
// so, the default in URN mappings for this is set to "" (ie, space), unless forced to use the URN mapping.
if (aai_uri == null || aai_uri == "") {
// using value of 'related-link' from response
if (networkPolicyUriList[i].charAt(networkPolicyUriList[i].length()-1) == '/') {
queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i].substring(0, networkPolicyUriList[i].length()-1) + "?depth=all"
} else {
queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i] + "?depth=all"
}
} else {
// using uri value in URN mapping
String networkPolicyId = networkPolicyUriList[i].substring(networkPolicyUriList[i].indexOf("/network-policy/")+16, networkPolicyUriList[i].length())
println " networkPolicyId - " + networkPolicyId
if (networkPolicyId.charAt(networkPolicyId.length()-1) == '/') {
networkPolicyId = networkPolicyId.substring(0, networkPolicyId.length()-1)
}
queryNetworkPolicyAAIRequest = "${aai_endpoint}${aai_uri}/" + networkPolicyId + "?depth=all"
}
execution.setVariable(Prefix + "queryNetworkPolicyAAIRequest", queryNetworkPolicyAAIRequest)
msoLogger.debug(Prefix + "queryNetworkPolicyAAIRequest, , NetworkPolicy #" + counting + " : " + "\n" + queryNetworkPolicyAAIRequest)
APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryNetworkPolicyAAIRequest)
String returnCode = response.getStatusCode()
execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", returnCode)
msoLogger.debug(" ***** AAI query network policy Response Code, NetworkPolicy #" + counting + " : " + returnCode)
String aaiResponseAsString = response.getResponseBodyAsString()
if (returnCode=='200') {
execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiResponseAsString)
msoLogger.debug(" QueryAAINetworkPolicy Success REST Response, , NetworkPolicy #" + counting + " : " + "\n" + aaiResponseAsString)
String networkPolicy = ""
if (utils.nodeExists(aaiResponseAsString, "network-policy-fqdn")) {
networkPolicy = utils.getNodeText(aaiResponseAsString, "network-policy-fqdn")
networkPolicies += "" + networkPolicy + "" + '\n'
}
} else {
if (returnCode=='404') {
String dataErrorMessage = "Response Error from QueryAAINetworkPolicy is 404 (Not Found)."
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
} else {
if (aaiResponseAsString.contains("RESTFault")) {
WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
execution.setVariable("WorkflowException", exceptionObject)
throw new BpmnError("MSOWorkflowException")
} else {
// aai all errors
String dataErrorMessage = "Unexpected Response from QueryAAINetworkPolicy - " + returnCode
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
}
}
} // end loop
execution.setVariable(Prefix + "networkCollection", networkPolicies)
msoLogger.debug(Prefix + "networkCollection - " + '\n' + networkPolicies)
} else {
// reset return code to success
execution.setVariable(Prefix + "aaiQqueryNetworkPolicyReturnCode", "200")
String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
String schemaVersion = aaiUriUtil.getNamespaceFromUri(execution, aai_uri)
String aaiStubResponse =
"""
"""
String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
execution.setVariable(Prefix + "queryNetworkPolicyAAIResponse", aaiStubResponseAsXml)
execution.setVariable(Prefix + "networkCollection", "")
msoLogger.debug(" No net policies, using this stub as response - " + '\n' + aaiStubResponseAsXml)
}
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkPolicy() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTQueryAAINetworkTableRef(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.debug(" ***** Inside callRESTQueryAAINetworkTableRef() of DoCreateNetworkInstance ***** " )
try {
// get variables
String queryIdAAIResponse = execution.getVariable(Prefix + "queryIdAAIResponse").replace('', "")
String relationship = networkUtils.getFirstNodeXml(queryIdAAIResponse, "relationship-list").trim().replace("tag0:","").replace(":tag0","")
msoLogger.debug(" relationship - " + relationship)
// Check if Network TableREf is present, then build a List of network policy
List networkTableRefUriList = networkUtils.getNetworkTableRefObject(relationship)
int networkTableRefCount = networkTableRefUriList.size()
execution.setVariable(Prefix + "networkTableRefCount", networkTableRefCount)
msoLogger.debug(Prefix + "networkTableRefCount - " + networkTableRefCount)
String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
AaiUtil aaiUriUtil = new AaiUtil(this)
if (networkTableRefCount > 0) {
execution.setVariable(Prefix + "networkTableRefUriList", networkTableRefUriList)
msoLogger.debug(" networkTableRefUri List - " + networkTableRefUriList)
// AII loop call using list vpnBindings
String networkTableRefs = ""
for (i in 0..networkTableRefUriList.size()-1) {
int counting = i+1
// prepare url using tableRef
String queryNetworkTableRefAAIRequest = ""
String aai_uri = aaiUriUtil.getNetworkTableReferencesUri(execution)
// Note: By default, the network policy url is found in 'related-link' of the response,
// so, the default in URN mappings for this is set to "" (ie, space), unless forced to use the URN mapping.
if (aai_uri == null || aai_uri == "") {
// using value of 'related-link' from response
if (networkTableRefUriList[i].charAt(networkTableRefUriList[i].length()-1) == '/') {
queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i].substring(0, networkTableRefUriList[i].length()-1) + "?depth=all"
} else {
queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i] + "?depth=all"
}
} else {
// using uri value in URN mapping
String networkTableRefId = networkTableRefUriList[i].substring(networkTableRefUriList[i].indexOf("/route-table-reference/")+23, networkTableRefUriList[i].length())
if (networkTableRefId.charAt(networkTableRefId.length()-1) == '/') {
networkTableRefId = networkTableRefId.substring(0, networkTableRefId.length()-1)
}
queryNetworkTableRefAAIRequest = "${aai_endpoint}${aai_uri}/" + networkTableRefId + "?depth=all"
}
execution.setVariable(Prefix + "queryNetworkTableRefAAIRequest", queryNetworkTableRefAAIRequest)
msoLogger.debug(Prefix + "queryNetworkTableRefAAIRequest, , NetworkTableRef #" + counting + " : " + "\n" + queryNetworkTableRefAAIRequest)
APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryNetworkTableRefAAIRequest)
String returnCode = response.getStatusCode()
execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", returnCode)
msoLogger.debug(" ***** AAI query network Table Reference Response Code, NetworkTableRef #" + counting + " : " + returnCode)
String aaiResponseAsString = response.getResponseBodyAsString()
if (returnCode=='200') {
execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiResponseAsString)
msoLogger.debug(" QueryAAINetworkTableRef Success REST Response, , NetworkTableRef #" + counting + " : " + "\n" + aaiResponseAsString)
String networkTableRef = ""
if (utils.nodeExists(aaiResponseAsString, "route-table-reference-fqdn")) {
networkTableRef = utils.getNodeText(aaiResponseAsString, "route-table-reference-fqdn")
networkTableRefs += "" + networkTableRef + "" + '\n'
}
} else {
if (returnCode=='404') {
String dataErrorMessage = "Response Error from QueryAAINetworkTableRef is 404 (Not Found)."
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
} else {
if (aaiResponseAsString.contains("RESTFault")) {
WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
execution.setVariable("WorkflowException", exceptionObject)
throw new BpmnError("MSOWorkflowException")
} else {
// aai all errors
String dataErrorMessage = "Unexpected Response from QueryAAINetworkTableRef - " + returnCode
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
}
}
} // end loop
execution.setVariable(Prefix + "tableRefCollection", networkTableRefs)
msoLogger.debug(Prefix + "tableRefCollection - " + '\n' + networkTableRefs)
} else {
// reset return code to success
execution.setVariable(Prefix + "aaiQqueryNetworkTableRefReturnCode", "200")
String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
String schemaVersion = aaiUriUtil.getNamespaceFromUri(execution, aai_uri)
String aaiStubResponse =
"""
"""
String aaiStubResponseAsXml = utils.formatXml(aaiStubResponse)
execution.setVariable(Prefix + "queryNetworkTableRefAAIResponse", aaiStubResponseAsXml)
execution.setVariable(Prefix + "tableRefCollection", "")
msoLogger.debug(" No net table references, using this stub as response - " + '\n' + aaiStubResponseAsXml)
}
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTQueryAAINetworkTableRef() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTUpdateContrailAAINetwork(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.debug(" ***** Inside callRESTUpdateContrailAAINetwork() of DoCreateNetworkInstance ***** " )
try {
// get variables
String networkId = execution.getVariable(Prefix + "networkId")
networkId = UriUtils.encode(networkId,"UTF-8")
String requeryIdAAIResponse = execution.getVariable(Prefix + "requeryIdAAIResponse")
String createNetworkResponse = execution.getVariable(Prefix + "createNetworkResponse")
// Prepare url
String aai_endpoint = UrnPropertiesReader.getVariable("aai.endpoint", execution)
AaiUtil aaiUriUtil = new AaiUtil(this)
String aai_uri = aaiUriUtil.getNetworkL3NetworkUri(execution)
String updateContrailAAIUrlRequest = "${aai_endpoint}${aai_uri}/" + networkId + "?depth=all"
execution.setVariable(Prefix + "updateContrailAAIUrlRequest", updateContrailAAIUrlRequest)
msoLogger.debug(Prefix + "updateContrailAAIUrlRequest - " + "\n" + updateContrailAAIUrlRequest)
//Prepare payload (PUT)
String schemaVersion = aaiUriUtil.getNamespaceFromUri(execution, aai_uri)
String payload = networkUtils.ContrailNetworkCreatedUpdate(requeryIdAAIResponse, createNetworkResponse, schemaVersion)
String payloadXml = utils.formatXml(payload)
execution.setVariable(Prefix + "updateContrailAAIPayloadRequest", payloadXml)
msoLogger.debug(" 'payload' to Update Contrail - " + "\n" + payloadXml)
APIResponse response = aaiUriUtil.executeAAIPutCall(execution, updateContrailAAIUrlRequest, payloadXml)
String returnCode = response.getStatusCode()
execution.setVariable(Prefix + "aaiUpdateContrailReturnCode", returnCode)
msoLogger.debug(" ***** AAI Update Contrail Response Code : " + returnCode)
String aaiUpdateContrailResponseAsString = response.getResponseBodyAsString()
if (returnCode=='200') {
execution.setVariable(Prefix + "updateContrailAAIResponse", aaiUpdateContrailResponseAsString)
msoLogger.debug(" AAI Update Contrail Success REST Response - " + "\n" + aaiUpdateContrailResponseAsString)
// Point-of-no-return is set to false, rollback not needed.
String rollbackEnabled = execution.getVariable(Prefix + "rollbackEnabled")
if (rollbackEnabled == "true") {
execution.setVariable(Prefix + "isPONR", false)
} else {
execution.setVariable(Prefix + "isPONR", true)
}
msoLogger.debug(Prefix + "isPONR" + ": " + execution.getVariable(Prefix + "isPONR"))
} else {
if (returnCode=='404') {
String dataErrorMessage = " Response Error from UpdateContrailAAINetwork is 404 (Not Found)."
msoLogger.debug(dataErrorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
} else {
if (aaiUpdateContrailResponseAsString.contains("RESTFault")) {
WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiUpdateContrailResponseAsString, execution)
execution.setVariable("WorkflowException", exceptionObject)
throw new BpmnError("MSOWorkflowException")
} else {
// aai all errors
String errorMessage = "Unexpected Response from UpdateContrailAAINetwork - " + returnCode
msoLogger.debug(errorMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
}
}
}
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. callRESTUpdateContrailAAINetwork() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void prepareCreateNetworkRequest (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareCreateNetworkRequest() of DoCreateNetworkInstance")
try {
// get variables
String requestId = execution.getVariable("msoRequestId")
if (requestId == null) {
requestId = execution.getVariable("mso-request-id")
}
String messageId = execution.getVariable(Prefix + "messageId")
String source = execution.getVariable(Prefix + "source")
String requestInput = execution.getVariable(Prefix + "networkRequest")
String queryIdResponse = execution.getVariable(Prefix + "queryIdAAIResponse")
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionPo")
String backoutOnFailure = execution.getVariable(Prefix + "rollbackEnabled")
// Prepare Network request
String routeCollection = execution.getVariable(Prefix + "routeCollection")
String policyCollection = execution.getVariable(Prefix + "networkCollection")
String tableCollection = execution.getVariable(Prefix + "tableRefCollection")
String createNetworkRequest = networkUtils.CreateNetworkRequestV2(execution, requestId, messageId, requestInput, queryIdResponse, routeCollection, policyCollection, tableCollection, cloudRegionId, backoutOnFailure, source )
// Format Response
String buildDeleteNetworkRequestAsString = utils.formatXml(createNetworkRequest)
buildDeleteNetworkRequestAsString = buildDeleteNetworkRequestAsString.replace(":w1aac13n0", "").replace("w1aac13n0:", "")
execution.setVariable(Prefix + "createNetworkRequest", buildDeleteNetworkRequestAsString)
msoLogger.debug(Prefix + "createNetworkRequest - " + "\n" + buildDeleteNetworkRequestAsString)
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareCreateNetworkRequest() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void prepareSDNCRequest (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareSDNCRequest() of DoCreateNetworkInstance")
try {
// get variables
String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
String networkId = execution.getVariable(Prefix + "networkId")
String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
// get/set 'msoRequestId' and 'mso-request-id'
String requestId = execution.getVariable("msoRequestId")
if (requestId != null) {
execution.setVariable("mso-request-id", requestId)
} else {
requestId = execution.getVariable("mso-request-id")
}
execution.setVariable(Prefix + "requestId", requestId)
// 1. prepare assign topology via SDNC Adapter SUBFLOW call
String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
msoLogger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRequest() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void prepareRpcSDNCRequest (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareRpcSDNCRequest() of DoCreateNetworkInstance")
try {
// get variables
String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
String networkId = execution.getVariable(Prefix + "networkId")
String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
// 1. prepare assign topology via SDNC Adapter SUBFLOW call
String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "assign", "CreateNetworkInstance", cloudRegionId, networkId, null)
String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
execution.setVariable(Prefix + "assignSDNCRequest", sndcTopologyCreateRequesAsString)
msoLogger.debug(Prefix + "assignSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRequest() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void prepareRpcSDNCActivateRequest (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareRpcSDNCActivateRequest() of DoCreateNetworkInstance")
try {
// get variables
String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
String networkId = execution.getVariable(Prefix + "networkId")
String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
// 1. prepare assign topology via SDNC Adapter SUBFLOW call
String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null)
String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest)
execution.setVariable(Prefix + "activateSDNCRequest", sndcTopologyCreateRequesAsString)
msoLogger.debug(Prefix + "activateSDNCRequest - " + "\n" + sndcTopologyCreateRequesAsString)
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRequest() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
// **************************************************
// Post or Validate Response Section
// **************************************************
public void validateCreateNetworkResponse (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside validateNetworkResponse() of DoCreateNetworkInstance")
try {
String returnCode = execution.getVariable(Prefix + "networkReturnCode")
String networkResponse = execution.getVariable(Prefix + "createNetworkResponse")
if (networkResponse==null) {
networkResponse="" // reset
}
msoLogger.debug(" Network Adapter create responseCode: " + returnCode)
String errorMessage = ""
if (returnCode == "200") {
execution.setVariable(Prefix + "isNetworkRollbackNeeded", true)
execution.setVariable(Prefix + "createNetworkResponse", networkResponse)
msoLogger.debug(" Network Adapter create Success Response - " + "\n" + networkResponse)
// prepare rollback data
String rollbackData = utils.getNodeXml(networkResponse, "rollback", false).replace("tag0:","").replace(":tag0","")
rollbackData = rollbackData.replace("rollback>", "networkRollback>")
String rollbackNetwork =
"""
${rollbackData}
"""
String rollbackNetworkXml = utils.formatXml(rollbackNetwork)
execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkXml)
msoLogger.debug(" Network Adapter rollback data - " + "\n" + rollbackNetworkXml)
} else { // network error
if (returnCode.toInteger() > 399 && returnCode.toInteger() < 600) { //4xx, 5xx
if (networkResponse.contains("createNetworkError")) {
networkResponse = networkResponse.replace('', '')
errorMessage = utils.getNodeText(networkResponse, "message")
errorMessage = "Received error from Network Adapter: " + errorMessage
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
} else { // CatchAll exception
if (returnCode == "500") {
errorMessage = "JBWEB000065: HTTP Status 500."
} else {
errorMessage = "Return code is " + returnCode
}
errorMessage = "Received error from Network Adapter: " + errorMessage
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
}
} else { // CatchAll exception
String dataErrorMessage = "Received error from Network Adapter. Return code is: " + returnCode
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
}
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. validateCreateNetworkResponse() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void validateSDNCResponse (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside validateSDNCResponse() of DoCreateNetworkInstance")
String response = execution.getVariable(Prefix + "assignSDNCResponse")
boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
WorkflowException workflowException = execution.getVariable("WorkflowException")
SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
// reset variable
String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "assignSDNCResponse")
assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('', "")
execution.setVariable(Prefix + "assignSDNCResponse", assignSDNCResponseDecodeXml)
if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
execution.setVariable(Prefix + "isSdncRollbackNeeded", true)
msoLogger.debug("Successfully Validated SDNC Response")
} else {
msoLogger.debug("Did NOT Successfully Validated SDNC Response")
throw new BpmnError("MSOWorkflowException")
}
}
public void validateRpcSDNCActivateResponse (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside validateRpcSDNCActivateResponse() of DoCreateNetworkInstance")
String response = execution.getVariable(Prefix + "activateSDNCResponse")
boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
WorkflowException workflowException = execution.getVariable("WorkflowException")
SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
// reset variable
String assignSDNCResponseDecodeXml = execution.getVariable(Prefix + "activateSDNCResponse")
assignSDNCResponseDecodeXml = assignSDNCResponseDecodeXml.replace('', "")
execution.setVariable(Prefix + "activateSDNCResponse", assignSDNCResponseDecodeXml)
if (execution.getVariable(Prefix + "sdncResponseSuccess") == true) { // from sdnc util, Prefix+'sdncResponseSuccess'
execution.setVariable(Prefix + "isSdncActivateRollbackNeeded", true)
msoLogger.debug("Successfully Validated Rpc SDNC Activate Response")
} else {
msoLogger.debug("Did NOT Successfully Validated Rpc SDNC Activate Response")
throw new BpmnError("MSOWorkflowException")
}
}
public void prepareSDNCRollbackRequest (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareSDNCRollbackRequest() of DoCreateNetworkInstance")
try {
// get variables
String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
String networkId = execution.getVariable(Prefix + "networkId")
if (networkId == 'null') {networkId = ""}
String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
// 2. prepare rollback topology via SDNC Adapter SUBFLOW call
String sndcTopologyRollbackRequest = sdncAdapterUtils.sdncTopologyRequestV2(execution, createNetworkInput, serviceInstanceId, sdncCallback, "rollback", "NetworkActivateRequest", cloudRegionId, networkId, null, null)
String sndcTopologyRollbackRequestAsString = utils.formatXml(sndcTopologyRollbackRequest)
execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRequestAsString)
msoLogger.debug(" Preparing request for SDNC Topology 'rollback-NetworkActivateRequest' rollback . . . - " + "\n" + sndcTopologyRollbackRequestAsString)
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSDNCRollbackRequest() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
}
}
public void prepareRpcSDNCRollbackRequest (DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareRpcSDNCRollbackRequest() of DoCreateNetworkInstance")
try {
// get variables
String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse")
String networkId = execution.getVariable(Prefix + "networkId")
if (networkId == 'null') {networkId = ""}
String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
// 2. prepare rollback topology via SDNC Adapter SUBFLOW call
String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "unassign", "DeleteNetworkInstance", cloudRegionId, networkId, null)
String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
execution.setVariable(Prefix + "rollbackSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
msoLogger.debug(" Preparing request for SDNC Topology 'unassign-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCRollbackRequest() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
}
}
public void prepareRpcSDNCActivateRollback(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareRpcSDNCActivateRollback() of DoCreateNetworkInstance")
try {
// get variables
String sdncCallback = UrnPropertiesReader.getVariable("mso.workflow.sdncadapter.callback",execution)
String createNetworkInput = execution.getVariable(Prefix + "networkRequest")
String cloudRegionId = execution.getVariable(Prefix + "cloudRegionSdnc")
String activateSDNCResponse = execution.getVariable(Prefix + "activateSDNCResponse")
String networkId = execution.getVariable(Prefix + "networkId")
if (networkId == 'null') {networkId = ""}
String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
// 2. prepare rollback topology via SDNC Adapter SUBFLOW call
String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "deactivate", "DeleteNetworkInstance", cloudRegionId, networkId, null)
String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest)
execution.setVariable(Prefix + "rollbackActivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString)
msoLogger.debug(" Preparing request for RPC SDNC Topology 'deactivate-DeleteNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString)
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRpcSDNCActivateRollback() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
}
}
public void prepareRollbackData(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareRollbackData() of DoCreateNetworkInstance")
try {
Map rollbackData = new HashMap();
String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
if (rollbackSDNCRequest != null) {
if (rollbackSDNCRequest != "") {
rollbackData.put("rollbackSDNCRequest", execution.getVariable(Prefix + "rollbackSDNCRequest"))
}
}
String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
if (rollbackNetworkRequest != null) {
if (rollbackNetworkRequest != "") {
rollbackData.put("rollbackNetworkRequest", execution.getVariable(Prefix + "rollbackNetworkRequest"))
}
}
String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
if (rollbackActivateSDNCRequest != null) {
if (rollbackActivateSDNCRequest != "") {
rollbackData.put("rollbackActivateSDNCRequest", execution.getVariable(Prefix + "rollbackActivateSDNCRequest"))
}
}
execution.setVariable("rollbackData", rollbackData)
msoLogger.debug("** rollbackData : " + rollbackData)
execution.setVariable("WorkflowException", execution.getVariable(Prefix + "WorkflowException"))
msoLogger.debug("** WorkflowException : " + execution.getVariable("WorkflowException"))
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareRollbackData() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
}
}
public void postProcessResponse(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside postProcessResponse() of DoCreateNetworkInstance")
try {
//Conditions:
// 1. Silent Success: execution.getVariable("CRENWKI_orchestrationStatus") == "ACTIVE"
// 2. Success: execution.getVariable("WorkflowException") == null (NULL)
// 3. WorkflowException: execution.getVariable("WorkflowException") != null (NOT NULL)
msoLogger.debug(" ***** Is Exception Encountered (isException)? : " + execution.getVariable(Prefix + "isException"))
// successful flow
if (execution.getVariable(Prefix + "isException") == false) {
// set rollback data
execution.setVariable("orchestrationStatus", "")
execution.setVariable("networkId", execution.getVariable(Prefix + "networkId"))
execution.setVariable("networkName", execution.getVariable(Prefix + "networkName"))
prepareSuccessRollbackData(execution) // populate rollbackData
execution.setVariable("WorkflowException", null)
execution.setVariable(Prefix + "Success", true)
msoLogger.debug(" ***** postProcessResponse(), GOOD !!!")
} else {
// inside sub-flow logic
execution.setVariable(Prefix + "Success", false)
execution.setVariable("rollbackData", null)
String exceptionMessage = " Exception encountered in MSO Bpmn. "
if (execution.getVariable("workflowException") != null) { // Output of Rollback flow.
msoLogger.debug(" ***** workflowException: " + execution.getVariable("workflowException"))
WorkflowException wfex = execution.getVariable("workflowException")
exceptionMessage = wfex.getErrorMessage()
} else {
if (execution.getVariable(Prefix + "WorkflowException") != null) {
WorkflowException pwfex = execution.getVariable(Prefix + "WorkflowException")
exceptionMessage = pwfex.getErrorMessage()
}
}
// going to the Main flow: a-la-carte or macro
msoLogger.debug(" ***** postProcessResponse(), BAD !!!")
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
throw new BpmnError("MSOWorkflowException")
}
} catch(BpmnError b){
msoLogger.debug("Rethrowing MSOWorkflowException")
throw b
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. postProcessResponse() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
throw new BpmnError("MSOWorkflowException")
}
}
public void prepareSuccessRollbackData(DelegateExecution execution) {
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside prepareSuccessRollbackData() of DoCreateNetworkInstance")
try {
if (execution.getVariable("sdncVersion") != '1610') {
prepareRpcSDNCRollbackRequest(execution)
prepareRpcSDNCActivateRollback(execution)
} else {
prepareSDNCRollbackRequest(execution)
}
Map rollbackData = new HashMap();
String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
if (rollbackSDNCRequest != null) {
if (rollbackSDNCRequest != "") {
rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
}
}
String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
if (rollbackNetworkRequest != null) {
if (rollbackNetworkRequest != "") {
rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
}
}
String rollbackActivateSDNCRequest = execution.getVariable(Prefix + "rollbackActivateSDNCRequest")
if (rollbackActivateSDNCRequest != null) {
if (rollbackActivateSDNCRequest != "") {
rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
}
}
execution.setVariable("rollbackData", rollbackData)
msoLogger.debug("** 'rollbackData' for Full Rollback : " + rollbackData)
execution.setVariable("WorkflowException", null)
} catch (Exception ex) {
String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstance flow. prepareSuccessRollbackData() - " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
}
}
public void setExceptionFlag(DelegateExecution execution){
execution.setVariable("prefix",Prefix)
msoLogger.trace("Inside setExceptionFlag() of DoCreateNetworkInstance")
try {
execution.setVariable(Prefix + "isException", true)
if (execution.getVariable("SavedWorkflowException1") != null) {
execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
} else {
execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
}
msoLogger.debug(Prefix + "WorkflowException - " +execution.getVariable(Prefix + "WorkflowException"))
} catch(Exception ex){
String exceptionMessage = "Bpmn error encountered in DoCreateNetworkInstance flow. setExceptionFlag(): " + ex.getMessage()
msoLogger.debug(exceptionMessage)
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
}
}
// *******************************
// Build Error Section
// *******************************
public void processJavaException(DelegateExecution execution){
execution.setVariable("prefix",Prefix)
try{
msoLogger.debug( "Caught a Java Exception in " + Prefix)
msoLogger.debug("Started processJavaException Method")
msoLogger.debug("Variables List: " + execution.getVariables())
execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
}catch(Exception e){
msoLogger.debug("Caught Exception during processJavaException Method: " + e)
execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
}
msoLogger.debug( "Completed processJavaException Method in " + Prefix)
}
}