/*-
* ============LICENSE_START=======================================================
* OPENECOMP - MSO
* ================================================================================
* 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 com.att.bpm.scripts;
import groovy.xml.XmlUtil
import groovy.json.*
import org.openecomp.mso.bpmn.core.json.JsonUtils
import org.openecomp.mso.bpmn.core.WorkflowException
import org.openecomp.mso.rest.APIResponse
import org.openecomp.mso.rest.RESTClient
import org.openecomp.mso.rest.RESTConfig
import java.util.UUID;
import org.camunda.bpm.engine.delegate.BpmnError
import org.camunda.bpm.engine.runtime.Execution
import org.json.JSONObject;
import org.apache.commons.lang3.*
import org.apache.commons.codec.binary.Base64;
import org.springframework.web.util.UriUtils;
/**
* This groovy class supports the CreateServiceInstance.bpmn process.
*
*/
public class CreateServiceInstanceInfra extends AbstractServiceTaskProcessor {
String Prefix="CRESI_"
ExceptionUtil exceptionUtil = new ExceptionUtil()
JsonUtils jsonUtil = new JsonUtils()
VidUtils vidUtils = new VidUtils()
/**
* This method is executed during the preProcessRequest task of the CreateServiceInstance.bpmn process.
* @param execution
*/
public InitializeProcessVariables(Execution execution){
/* Initialize all the process variables in this block */
execution.setVariable("CRESI_CreateServiceInstanceJasonRequest", "")
execution.setVariable("CRESI_globalSubscriberId", "")
execution.setVariable("CRESI_serviceInstanceName", "")
execution.setVariable("CRESI_newServiceInstanceId", "")
execution.setVariable("CRESI_messageId", "")
execution.setVariable("CRESI_requestId", "")
execution.setVariable("CRESI_queryAAIGlobalCustomerIdUrlRequest", "")
execution.setVariable("CRESI_queryAAIGlobalCustomerIdResponse", "")
execution.setVariable("CRESI_queryAAIGlobalCustomerIdCode", "")
execution.setVariable("CRESI_queryAAISINameUrlRequest", "")
execution.setVariable("CRESI_queryAAISINamePayloadRequest", "")
execution.setVariable("CRESI_queryAAISINameResponse", "")
execution.setVariable("CRESI_queryAAISINameCode", "")
execution.setVariable("CRESI_createSIinAAIUrlRequest", "")
execution.setVariable("CRESI_createSIinAAIPayloadRequest", "")
execution.setVariable("CRESI_createSIinAAIResponse", "")
execution.setVariable("CRESI_createSIinAAICode", "")
execution.setVariable("CRESI_createDBRequest", "")
execution.setVariable("CRESI_createDBResponse", "")
execution.setVariable("CRESI_createDBCode", "")
execution.setVariable("CRESI_createDBInfraErrorRequest", "")
execution.setVariable("CRESI_errorDBInfraErrorResponse", "")
execution.setVariable("CRESI_errorDBInfraErrorErrorCode", "")
execution.setVariable("CRESI_CompleteMsoProcessRequest", "")
execution.setVariable("CRESI_FalloutHandlerRequest", "")
execution.setVariable("CRESI_Success", false)
execution.setVariable("CRESI_unexpectedError", "")
}
// **************************************************
// Pre or Prepare Request Section
// **************************************************
/**
* This method is executed during the preProcessRequest task of the CreateServiceInstance.bpmn process.
* @param execution
*/
public void preProcessRequest (Execution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix",Prefix)
utils.log("DEBUG", " ***** Inside preProcessRequest CreateServiceInstanceInfra Request ***** ", isDebugEnabled)
try {
// initialize flow variables
InitializeProcessVariables(execution)
// check for incoming json message/input
String createServiceInstanceIncoming = execution.getVariable("bpmnRequest")
utils.logAudit(createServiceInstanceIncoming)
execution.setVariable("CRESI_CreateServiceInstanceJasonRequest", createServiceInstanceIncoming);
println 'createServiceInstanceIncoming - ' + createServiceInstanceIncoming
// extract requestId
String requestId = execution.getVariable("att-mso-request-id")
execution.setVariable("CRESI_requestId", requestId)
String serviceInstanceId = execution.getVariable("serviceInstanceId")
execution.setVariable("serviceInstanceId", serviceInstanceId)
String requestAction = execution.getVariable("requestAction")
execution.setVariable("requestAction", requestAction)
String source = jsonUtil.getJsonValue(createServiceInstanceIncoming, "requestDetails.requestInfo.source")
execution.setVariable("CRESI_source", source)
// extract globalSubscriberId
String globalSubscriberId = jsonUtil.getJsonValue(createServiceInstanceIncoming, "requestDetails.subscriberInfo.globalSubscriberId")
// prepare messageId
String messageId = execution.getVariable("CRESI_messageId") // for testing
if (messageId == null || messageId == "") {
messageId = UUID.randomUUID()
utils.log("DEBUG", " CRESI_messageId, random generated: " + messageId, isDebugEnabled)
} else {
utils.log("DEBUG", " CRESI_messageId, pre-assigned: " + messageId, isDebugEnabled)
}
execution.setVariable("CRESI_messageId", messageId)
// verify element global-customer-id is sent from JSON input, throw exception if missing
if ((globalSubscriberId == null) || (globalSubscriberId.isEmpty())) {
String dataErrorMessage = " Element 'globalSubscriberId' is missing. "
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
} else {
execution.setVariable("CRESI_globalSubscriberId", globalSubscriberId)
}
AaiUtil aaiUriUtil = new AaiUtil(this)
String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
String aaiNamespace = aaiUriUtil.getNamespaceFromUri(aai_uri)
logDebug('AAI namespace is: ' + aaiNamespace, isDebugEnabled)
execution.setVariable("CRESI_aaiNamespace","${aaiNamespace}")
String newServiceInstanceId = execution.getVariable("CRESI_testServiceInstanceId") // for testing variable
if ((newServiceInstanceId) == null || (newServiceInstanceId.isEmpty())) {
newServiceInstanceId = UUID.randomUUID().toString()
utils.log("DEBUG", " Generated new Service Instance: " + newServiceInstanceId , isDebugEnabled) // generated
} else {
utils.log("DEBUG", " Assigned new Service Instance: " + newServiceInstanceId , isDebugEnabled)
}
newServiceInstanceId = UriUtils.encode(newServiceInstanceId,"UTF-8")
execution.setVariable("CRESI_newServiceInstanceId", newServiceInstanceId)
} catch (BpmnError e) {
throw e;
} catch (Exception ex){
String exceptionMessage = "Bpmn error encountered in CreateServiceInstanceInfra flow. Unexpected from method preProcessRequest() - " + ex.getMessage()
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void sendSyncResponse (Execution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix",Prefix)
utils.log("DEBUG", " ***** Inside sendSyncResponse of CreateServiceInstanceInfra ***** ", isDebugEnabled)
try {
String newServiceInstanceId = execution.getVariable("CRESI_newServiceInstanceId")
String requestId = execution.getVariable("att-mso-request-id")
// RESTResponse (for API Handler (APIH) Reply Task)
String syncResponse ="""{"requestReferences":{"instanceId":"${newServiceInstanceId}","requestId":"${requestId}"}}""".trim()
utils.log("DEBUG", " sendSynchResponse: xmlSyncResponse - " + "\n" + syncResponse, isDebugEnabled)
sendWorkflowResponse(execution, 202, syncResponse)
} catch (Exception ex) {
String exceptionMessage = "Bpmn error encountered in CreateServiceInstanceInfra flow. Unexpected from method sendSyncResponse() - " + ex.getMessage()
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTQueryAAIGlobalSubscriberId (Execution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix",Prefix)
utils.log("DEBUG", " ***** Inside callRESTQueryAAICustomer of CreateServiceInstanceInfra ***** " , isDebugEnabled)
try {
// get variables
String messageId = execution.getVariable("CRESI_requestId")
String globalSubscriberId = execution.getVariable("CRESI_globalSubscriberId")
globalSubscriberId = UriUtils.encode(globalSubscriberId,"UTF-8")
// Prepare AA&I url with globalCustomerId
String aai_endpoint = execution.getVariable("URN_aai_endpoint")
AaiUtil aaiUriUtil = new AaiUtil(this)
String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
String queryAAISubscriberIdUrlRequest = "${aai_endpoint}${aai_uri}/${globalSubscriberId}"
utils.logAudit(queryAAISubscriberIdUrlRequest)
utils.log("DEBUG", " ***** AAI Query Subscriber Id Url: " + queryAAISubscriberIdUrlRequest, isDebugEnabled)
execution.setVariable("CRESI_queryAAIGlobalCustomerIdUrlRequest", queryAAISubscriberIdUrlRequest)
String basicAuthCred = utils.getBasicAuth(execution.getVariable("URN_aai_auth"),execution.getVariable("URN_mso_msoKey"))
RESTConfig config = new RESTConfig(queryAAISubscriberIdUrlRequest);
RESTClient client = new RESTClient(config).addHeader("X-TransactionId", messageId)
.addHeader("X-FromAppId", "MSO")
.addHeader("Content-Type", "application/xml")
.addHeader("Accept","application/xml");
if (basicAuthCred != null && !"".equals(basicAuthCred)) {
client.addAuthorizationHeader(basicAuthCred)
}
APIResponse response = client.get()
String returnCode = response.getStatusCode()
execution.setVariable("CRESI_queryAAIGlobalCustomerIdCode", returnCode)
utils.log("DEBUG", " ***** AAI Query Customer Subscriber Id Response Code : " + returnCode, isDebugEnabled)
String aaiResponseAsString = response.getResponseBodyAsString()
execution.setVariable("CRESI_queryAAIGlobalCustomerIdResponse", aaiResponseAsString)
utils.logAudit(aaiResponseAsString)
if (returnCode=='200') {
// Customer found by ID. FLow to proceed.
utils.log("DEBUG", " CRESI_queryAAIGlobalCustomerIdResponse : " + aaiResponseAsString, isDebugEnabled)
//TODO
//we might verify that service-subscription with matching name exists
//and throw error if not. If not checked, we will get exception in subsequent step on Create call
//in 1610 we assume both customer & service subscription were pre-created
} else {
if (returnCode=='404') {
String errorMessage = " Customer Global Id not found (404) in AAI, Global Subscriber id: " + globalSubscriberId
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
} else {
if (aaiResponseAsString.contains("RESTFault")) {
// build WorkflowException & throw new BpmnError("MSOWorkflowException")
WorkflowException workflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
execution.setVariable("WorkflowException", workflowException)
throw new BpmnError("MSOWorkflowException")
} else {
// aai all errors
String errorMessage = " Unexpected Error Response from AAI during callRESTQueryAAICustomerSubcriberId() - " + returnCode
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage)
}
}
}
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
// try error in method block
String exceptionMessage = "Bpmn error encountered in CreateServiceInstanceInfra flow. Unexpected Error during method callRESTQueryAAICustomerSubcriberId() - " + ex.getMessage()
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTQueryAAISIName (Execution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix",Prefix)
utils.log("DEBUG", " ***** Inside callRESTQueryAAISIName of CreateServiceInstanceInfra ***** " , isDebugEnabled)
try {
// get variables
String messageId = execution.getVariable("CRESI_requestId")
String globalSubscriberId = execution.getVariable("CRESI_globalSubscriberId")
globalSubscriberId = UriUtils.encode(globalSubscriberId,"UTF-8")
// extract serviceType
String createServiceInstanceIncoming = execution.getVariable("CRESI_CreateServiceInstanceJasonRequest");
String serviceInstanceName = jsonUtil.getJsonValue(createServiceInstanceIncoming, "requestDetails.requestInfo.instanceName")
serviceInstanceName = UriUtils.encode(serviceInstanceName,'UTF-8')
String serviceType = jsonUtil.getJsonValue(createServiceInstanceIncoming, "requestDetails.modelInfo.modelName")
serviceType = UriUtils.encode(serviceType,'UTF-8')
// Prepare AA&I url
//String aai_endpoint = execution.getVariable("URN_aai_endpoint")
AaiUtil aaiUriUtil = new AaiUtil(this)
String aai_uri = aaiUriUtil.getSearchNodesQueryEndpoint(execution)
// seach by service instance name
// Currently not designed, but this would search for service-instance-name within realm of customer:
// https://{serverURL}/aai/{version}/business/customers/customer/{globalCustID}/service-subscriptions/service-subscription/{serviceType}/service-instances?service-instance-name={serviceInstanceName}
//search for service-instance-name globally:
String queryAAISINameUrlRequest = "${aai_uri}?search-node-type=service-instance&filter=service-instance-name:EQUALS:${serviceInstanceName}"
utils.log("DEBUG", " ***** AAI Query Service Name Url: " + queryAAISINameUrlRequest, isDebugEnabled)
utils.logAudit(queryAAISINameUrlRequest)
execution.setVariable("CRESI_queryAAISINameUrlRequest", queryAAISINameUrlRequest)
String basicAuthCred = utils.getBasicAuth(execution.getVariable("URN_aai_auth"),execution.getVariable("URN_mso_msoKey"))
RESTConfig config = new RESTConfig(queryAAISINameUrlRequest);
RESTClient client = new RESTClient(config).addHeader("X-TransactionId", messageId)
.addHeader("X-FromAppId", "MSO")
.addHeader("Content-Type", "application/xml")
.addHeader("Accept","application/xml");
if (basicAuthCred != null && !"".equals(basicAuthCred)) {
client.addAuthorizationHeader(basicAuthCred)
}
APIResponse response = client.get()
String returnCode = response.getStatusCode()
execution.setVariable("CRESI_queryAAISINameCode", returnCode)
utils.log("DEBUG", " ***** AAI Query Service Instance Name Response Code : " + returnCode, isDebugEnabled)
String aaiResponseAsString = response.getResponseBodyAsString()
utils.log("DEBUG", " ***** AAI Query Service Instance Name Response : " +'\n'+ aaiResponseAsString, isDebugEnabled)
if (returnCode=='200') {
utils.logAudit(aaiResponseAsString)
execution.setVariable("CRESI_queryAAISINameResponse", aaiResponseAsString)
if ( (aaiResponseAsString != null) && (aaiResponseAsString.contains("service-instance")) ) {
// SI with same name was found
serviceInstanceName = UriUtils.decode(serviceInstanceName,'UTF-8')
String errorMessage = " Stopped creating Service Instance, already exists in AAI. Service instance name: " + serviceInstanceName
utils.log("DEBUG", errorMessage, isDebugEnabled)
exceptionUtil.buildWorkflowException(execution, 2500, errorMessage)
} else {
utils.log("DEBUG", "AAI return code 200, but no content found matching ServiceInstance name", isDebugEnabled)
//Actual meaning is 404 Not Found
execution.setVariable("CRESI_queryAAISINameCode", '404')
}
} else {
if (returnCode=='404') {
utils.log("DEBUG", " AAI Query return code = '404'. Proceed with the Create Service Instance !!! ", isDebugEnabled)
} else {
if (aaiResponseAsString.contains("RESTFault")) {
// build WorkflowException
WorkflowException workflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
execution.setVariable("WorkflowException", workflowException)
} else {
// aai all errors
String errorMessage = " Unexpected Error Response from AAI during callRESTQueryAAISIName() - " + returnCode
exceptionUtil.buildWorkflowException(execution, 2500, errorMessage)
}
}
}
} catch (BpmnError e) {
throw e;
} catch (Exception excp) {
// try error for method block
String exceptionMessage = "Bpmn error encountered in CreateServiceInstanceInfra flow in method callRESTQueryAAISIName(). Error was - " + excp.getMessage()
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
public void callRESTCreateServiceInstanceInAAI(Execution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix", Prefix)
utils.log("DEBUG", " ***** Inside callRESTCreateServiceInstanceInAAI of CreateServiceInstanceInfra ***** " , isDebugEnabled)
try {
// get variables
String messageId = execution.getVariable("CRESI_messageId")
String newServiceInstanceId = execution.getVariable("CRESI_newServiceInstanceId")
String globalSubcriberId = execution.getVariable("CRESI_globalSubscriberId")
globalSubcriberId = UriUtils.encode(globalSubcriberId,"UTF-8")
// get variable within incoming json
String createServiceInstanceIncoming = execution.getVariable("CRESI_CreateServiceInstanceJasonRequest");
String serviceType = jsonUtil.getJsonValue(createServiceInstanceIncoming, "requestDetails.requestParameters.subscriptionServiceType")
if (serviceType != null || serviceType != "") {
serviceType = UriUtils.encode(serviceType,"UTF-8")
}
String personaModelId = jsonUtil.getJsonValue(createServiceInstanceIncoming, "requestDetails.modelInfo.modelInvariantId")
String personaModelVersion = jsonUtil.getJsonValue(createServiceInstanceIncoming, "requestDetails.modelInfo.modelVersion")
String workloadContext = jsonUtil.getJsonValue(createServiceInstanceIncoming, "requestDetails.modelInfo.workload-context")
String serviceInstanceName = jsonUtil.getJsonValue(createServiceInstanceIncoming, "requestDetails.requestInfo.instanceName")
// Prepare url
String aai_endpoint = execution.getVariable("URN_aai_endpoint")
AaiUtil aaiUriUtil = new AaiUtil(this)
String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution)
String createServiceInstanceAAIUrlRequest = "${aai_endpoint}${aai_uri}/${globalSubcriberId}/service-subscriptions/service-subscription/${serviceType}/service-instances/service-instance/${newServiceInstanceId}"
utils.log("DEBUG", " ***** AAI Create Service Instance Url: " + createServiceInstanceAAIUrlRequest, isDebugEnabled)
utils.logAudit(createServiceInstanceAAIUrlRequest)
execution.setVariable("CRESI_createSIinAAIUrlRequest", createServiceInstanceAAIUrlRequest)
//Prepare payload (PUT)
String schemaVersion = aaiUriUtil.getNamespaceFromUri(aai_uri)
String createServiceInstancePayload =
"""
${serviceInstanceName}
${personaModelId}
${personaModelVersion}
""".trim()
utils.logAudit(createServiceInstancePayload)
execution.setVariable("CRESI_createSIinAAIPayloadRequest", createServiceInstancePayload)
utils.log("DEBUG", " 'payload' to create Service Instance in AAI - " + "\n" + createServiceInstancePayload, isDebugEnabled)
String basicAuthCred = utils.getBasicAuth(execution.getVariable("URN_aai_auth"),execution.getVariable("URN_mso_msoKey"))
RESTConfig config = new RESTConfig(createServiceInstanceAAIUrlRequest);
RESTClient client = new RESTClient(config).addHeader("X-TransactionId", messageId)
.addHeader("X-FromAppId", "MSO")
.addHeader("Content-Type", "application/xml")
.addHeader("Accept","application/xml");
if (basicAuthCred != null && !"".equals(basicAuthCred)) {
client.addAuthorizationHeader(basicAuthCred)
}
APIResponse response = client.httpPut(createServiceInstancePayload)
String returnCode = response.getStatusCode()
execution.setVariable("CRESI_createSIinAAICode", returnCode)
utils.log("DEBUG", " ***** AAI Create Service Instance Response Code : " + returnCode, isDebugEnabled)
String aaiResponseAsString = response.getResponseBodyAsString()
utils.logAudit(aaiResponseAsString)
if (returnCode.toInteger() > 199 && returnCode.toInteger() < 203) {
//200 OK 201 CREATED 202 ACCEPTED
utils.log("DEBUG", " AAI Create Service Instance Success REST Response.", isDebugEnabled)
} else {
if (returnCode=='404') {
String dataErrorMessage = " AAI Create Service Instance Failed, Error 404. Proposed new Create Instance Id was: " + newServiceInstanceId
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
} else {
if (aaiResponseAsString.contains("RESTFault")) {
// build WorkflowException & throw new BpmnError("MSOWorkflowException")
WorkflowException workflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
execution.setVariable("WorkflowException", workflowException)
throw new BpmnError("MSOWorkflowException")
} else {
// aai all errors
String dataErrorMessage = "Bpmn error encountered in CreateServiceInstanceInfra flow. Unexpected Error during create call in AAI - " + returnCode
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
}
}
}
} catch (BpmnError e) {
throw e;
} catch (Exception excep) {
// try error in method block
String exceptionMessage = "Bpmn error encountered in CreateServiceInstanceInfra flow. Unexpected Error from method callRESTCreateServiceInstanceInAAI() - " + excep.getMessage()
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
// *******************************
// Build DB request Section
// *******************************
public void prepareDBRequest (Execution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix", Prefix)
try {
utils.log("DEBUG", " ***** Inside prepareDBRequest of CreateServiceInstanceInfra ***** ", isDebugEnabled)
String requestId = execution.getVariable("CRESI_requestId")
String statusMessage = "Service Instance successfully created."
String serviceInstanceId = execution.getVariable("CRESI_newServiceInstanceId")
//TODO - verify the format for Service Instance Create,
String dbRequest =
"""
${requestId}
BPMN
${statusMessage}
COMPLETED
${serviceInstanceId}
"""
String buildDeleteDBRequestAsString = utils.formatXml(dbRequest)
execution.setVariable("CRESI_createDBRequest", buildDeleteDBRequestAsString)
utils.logAudit(buildDeleteDBRequestAsString)
} catch (Exception ex) {
// try error in method block
String exceptionMessage = "Bpmn error encountered in CreateServiceInstanceInfra flow. Unexpected Error from method prepareDBRequest() - " + ex.getMessage()
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
// *****************************************
// Prepare Completion request Section
// *****************************************
public void postProcessResponse (Execution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix", Prefix)
utils.log("DEBUG", " ***** Inside postProcessResponse of CreateNetworkInstanceInfra ***** ", isDebugEnabled)
try {
// Display Success scenario for DB update Response:
String dbReturnCode = execution.getVariable("CRESI_createDBCode")
utils.log("DEBUG", " ***** Success DB Update Response Code : " + dbReturnCode, isDebugEnabled)
utils.log("DEBUG", " ***** Success DB Update Response String: " + '\n' + execution.getVariable("CRESI_createDBResponse"), isDebugEnabled)
if (dbReturnCode == "200") {
String source = execution.getVariable("CRESI_source")
String requestId = execution.getVariable("CRESI_requestId")
String msoCompletionRequest =
"""
${requestId}
CREATE
Service Instance has been created successfully.
BPMN Service Instance action: CREATE
"""
// Format Response
String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest)
utils.logAudit(xmlMsoCompletionRequest)
execution.setVariable("CRESI_Success", true)
execution.setVariable("CRESI_CompleteMsoProcessRequest", xmlMsoCompletionRequest)
utils.log("DEBUG", " SUCCESS flow, going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled)
} else {
String exceptionMessage = "Bpmn error encountered in CreateServiceInstanceInfra flow. Unexpected Error from DB adapter, return code: " + dbReturnCode
exceptionUtil.buildAndThrowWorkflowException(execution, 2500, exceptionMessage)
}
} catch (BpmnError e) {
throw e;
} catch (Exception ex) {
// try error in method block
String exceptionMessage = "Bpmn error encountered in CreateServiceInstance flow. Unexpected Error from method postProcessResponse() - " + ex.getMessage()
exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
}
}
// *******************************
// Build Error Section
// *******************************
public void prepareDBRequestError (Execution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix", Prefix)
utils.log("DEBUG", " ***** Inside prepareDBRequestError of CreateServiceInstanceInfra ***** ", isDebugEnabled)
try {
String requestId = execution.getVariable("CRESI_requestId")
String statusMessage = ""
if (execution.getVariable("WorkflowException") instanceof WorkflowException) {
WorkflowException wfe = execution.getVariable("WorkflowException")
statusMessage = wfe.getErrorMessage()
} else {
statusMessage = "Encountered Error during CreateServiceInstance proccessing. "
}
//TODO - verify the format for Service Instance Create,
String dbRequest =
"""
${requestId}
BPMN
${statusMessage}
FAILED
"""
String buildDBRequestAsString = utils.formatXml(dbRequest)
execution.setVariable("CRESI_createDBInfraErrorRequest", buildDBRequestAsString)
utils.logAudit(buildDBRequestAsString)
} catch (Exception ex) {
// try error in method block
String exceptionMessage = "Bpmn error encountered in CreateServiceInstanceInfra flow. Unexpected Error from method prepareDBRequestError() - " + ex.getMessage()
exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
}
}
// Prepare for FalloutHandler
public void buildErrorResponse (Execution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix", Prefix)
utils.log("ERROR", " ***** Prepare for FalloutHandler. FAILURE - prepare request for sub-process FalloutHandler. *****", isDebugEnabled)
String falloutHandlerRequest = ""
try {
// Display Success scenario for DB update Response:
String dbReturnCode = execution.getVariable("CRESI_errorDBInfraErrorErrorCode")
utils.log("DEBUG", " ***** Error DB Update Response Code : " + dbReturnCode, isDebugEnabled)
utils.log("DEBUG", " ***** Error DB Update Response String: " + '\n' + execution.getVariable("CRESI_errorDBInfraErrorResponse"), isDebugEnabled)
String requestId = execution.getVariable("CRESI_requestId")
String source = execution.getVariable("CRESI_source")
execution.setVariable("CRESI_Success", false)
String errorMessage = ""
String errorCode = ""
if (execution.getVariable("WorkflowException") instanceof WorkflowException) {
WorkflowException wfe = execution.getVariable("WorkflowException")
errorMessage = wfe.getErrorMessage()
errorCode = wfe.getErrorCode().toString()
} else {
errorMessage = "Bpmn error encountered in CreateServiceInstance flow."
errorCode = "2500"
}
falloutHandlerRequest =
"""
${requestId}
CREATE
${errorMessage}
${errorCode}
"""
utils.logAudit(falloutHandlerRequest)
execution.setVariable("CRESI_FalloutHandlerRequest", falloutHandlerRequest)
utils.log("ERROR", " Overall Error Response going to FalloutHandler: " + "\n" + falloutHandlerRequest, isDebugEnabled)
} catch (Exception ex) {
// rebuild workflow exception
String requestId = execution.getVariable("CRESI_requestId")
String source = execution.getVariable("CRESI_source")
String errorException = " Build Error Response exception encountered during method buildErrorResponse(), preparing request for FalloutHandler: - " + ex.getMessage()
utils.log("DEBUG", errorException, isDebugEnabled)
falloutHandlerRequest =
"""
${requestId}
CREATE
${errorException}
7000
"""
execution.setVariable("CRESI_FalloutHandlerRequest", falloutHandlerRequest)
utils.log("ERROR", " Overall Error Response going to FalloutHandler: " + "\n" + falloutHandlerRequest, isDebugEnabled)
}
}
public void sendSyncError (Execution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix", Prefix)
utils.log("DEBUG", " ***** Inside sendSyncError() of CreateServiceInstanceInfra ***** ", isDebugEnabled)
try {
String errorMessage = ""
if (execution.getVariable("WorkflowException") instanceof WorkflowException) {
WorkflowException wfe = execution.getVariable("WorkflowException")
errorMessage = wfe.getErrorMessage()
} else {
errorMessage = "Sending Sync Error."
}
String buildworkflowException =
"""
${errorMessage}
7000
"""
utils.logAudit(buildworkflowException)
sendWorkflowResponse(execution, 500, buildworkflowException)
} catch (Exception ex) {
utils.log("DEBUG", " Sending Sync Error Activity Failed. " + "\n" + ex.getMessage(), isDebugEnabled)
}
}
public void processJavaException(Execution execution){
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix",Prefix)
try{
utils.log("DEBUG", "Caught a Java Exception", isDebugEnabled)
utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled)
utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled)
execution.setVariable("CRESI_unexpectedError", "Caught a Java Lang Exception") // Adding this line temporarily until this flows error handling gets updated
exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Caught a Java Lang Exception")
}catch(BpmnError b){
utils.log("ERROR", "Rethrowing MSOWorkflowException", isDebugEnabled)
throw b
}catch(Exception e){
utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled)
execution.setVariable("CRESI_unexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated
exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Exception in processJavaException method")
}
utils.log("DEBUG", "Completed processJavaException Method", isDebugEnabled)
}
}