/*- * ============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 org.openecomp.mso.bpmn.infrastructure.scripts; import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil import org.openecomp.mso.bpmn.common.scripts.NetworkUtils import org.openecomp.mso.bpmn.common.scripts.VidUtils import org.openecomp.mso.bpmn.core.WorkflowException import org.openecomp.mso.bpmn.core.json.JsonUtils; import org.openecomp.mso.rest.APIResponse import java.util.UUID; import org.camunda.bpm.engine.delegate.BpmnError import org.camunda.bpm.engine.runtime.Execution import org.apache.commons.lang3.* import org.apache.commons.codec.binary.Base64; import org.springframework.web.util.UriUtils import groovy.xml.XmlUtil import groovy.json.* public class DeleteNetworkInstance extends AbstractServiceTaskProcessor { String Prefix="DELNI_" String groovyClassName = "DeleteNetworkInstance" ExceptionUtil exceptionUtil = new ExceptionUtil() JsonUtils jsonUtil = new JsonUtils() VidUtils vidUtils = new VidUtils(this) NetworkUtils networkUtils = new NetworkUtils() public InitializeProcessVariables(Execution execution){ execution.setVariable(Prefix + "Success", false) execution.setVariable(Prefix + "CompleteMsoProcessRequest", "") execution.setVariable(Prefix + "FalloutHandlerRequest", "") execution.setVariable(Prefix + "isSilentSuccess", false) } // ************************************************** // Pre or Prepare Request Section // ************************************************** public void preProcessRequest (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside preProcessRequest() of " + groovyClassName + " ***** ", isDebugEnabled) try { // initialize flow variables InitializeProcessVariables(execution) String sdncVersion = execution.getVariable("sdncVersion") if (sdncVersion == null || sdncVersion == '1610') { // 'a-la-cart' default, sdncVersion = '1610' execution.setVariable("sdncVersion", "1610") String bpmnRequest = execution.getVariable("bpmnRequest") // set 'disableRollback' if (bpmnRequest != null) { String disableRollback = jsonUtil.getJsonValue(bpmnRequest, "requestDetails.requestInfo.suppressRollback") if (disableRollback != null) { execution.setVariable("disableRollback", disableRollback) utils.log("DEBUG", "Received 'suppressRollback': " + disableRollback , isDebugEnabled) } else { execution.setVariable("disableRollback", false) } utils.log("DEBUG", " Set 'disableRollback' : " + execution.getVariable("disableRollback") , isDebugEnabled) } else { String dataErrorMessage = " Invalid 'bpmnRequest' request." utils.log("DEBUG", dataErrorMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage) } } else { // 'macro' test ONLY, sdncVersion = '1702' utils.log("DEBUG", " 'disableRollback' : " + execution.getVariable("disableRollback") , isDebugEnabled) } // 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) // get/set 'requestId' if (execution.getVariable("requestId") == null) { execution.setVariable("requestId", requestId) } // set action to "DELETE" execution.setVariable("action", "DELETE") //Place holder for additional code. // TODO ??? // userParams??? 1) pre-loads indicator, 2) 'auto-activation' // Tag/Value parameters // // Map: 'networkInputParams': 'auto-activation'' // Sample format? // "requestParameters": { // "userParams": [ // { // "name": "someUserParam1", // "value": "someValue1" // } // ] // } // // String userParams = //use json util to extract "userParams"// // execution.setVariable("networkInputParams", userParams) // else: execution.setVariable("networkInputParams", null) // } catch (Exception ex){ sendSyncError(execution) String exceptionMessage = "Exception Encountered in " + groovyClassName + ", PreProcessRequest() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void getNetworkModelInfo (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Inside getNetworkModelInfo() of DeleteNetworkInstance ***** ", isDebugEnabled) try { // "networkModelInfo" is expected to be sent String networkModelInfo = execution.getVariable("networkModelInfo") utils.log("DEBUG", " networkModelInfo - " + networkModelInfo, isDebugEnabled) } catch (Exception ex) { sendSyncError(execution) String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstance flow. getNetworkModelInfo() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) 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 DeleteNetworkInstance ***** ", isDebugEnabled) try { String requestId = execution.getVariable("mso-request-id") String serviceInstanceId = execution.getVariable("serviceInstanceId") // RESTResponse (for API Handler (APIH) Reply Task) String deleteNetworkRestRequest = """{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim() utils.log("DEBUG", " sendSyncResponse to APIH - " + "\n" + deleteNetworkRestRequest, isDebugEnabled) sendWorkflowResponse(execution, 202, deleteNetworkRestRequest) } catch (Exception ex) { // caught exception String exceptionMessage = "Exception Encountered in DeleteNetworkInstance, sendSyncResponse() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void prepareCompletion (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " ***** Inside prepareCompletion() of CreateNetworkInstance ***** ", isDebugEnabled) try { String requestId = execution.getVariable("mso-request-id") String source = execution.getVariable(Prefix + "source") String msoCompletionRequest = """ ${requestId} DELETE VID Network has been deleted successfully. BPMN Network action: DELETE """ // Format Response String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest) // normal path execution.setVariable(Prefix + "CompleteMsoProcessRequest", xmlMsoCompletionRequest) utils.log("DEBUG", " Overall SUCCESS Response going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled) } catch (Exception ex) { String exceptionMessage = " Bpmn error encountered in CreateNetworkInstance flow. prepareCompletion() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } public void prepareDBRequestError (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) try { utils.log("DEBUG", " ***** Inside prepareDBRequestError of DeleteNetworkInstance ***** ", isDebugEnabled) WorkflowException wfe = execution.getVariable("WorkflowException") String statusMessage = wfe.getErrorMessage() String requestId = execution.getVariable(Prefix +"requestId") String dbRequest = """ ${requestId} BPMN ${statusMessage} FAILED <network-outputs xmlns="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:aetgt="http://org.openecomp/mso/infra/vnf-request/v1" xmlns:rest="http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd"/> """ execution.setVariable(Prefix + "deleteDBRequest", dbRequest) utils.log("DEBUG", " DB Adapter Request - " + "\n" + dbRequest, isDebugEnabled) } catch (Exception ex) { // caught exception String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstance, prepareDBRequestError() - " + ex.getMessage() logError(exceptionMessage) utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage) } } // ************************************************** // Post or Validate Response Section // ************************************************** public void postProcessResponse (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Inside postProcessResponse() of DeleteNetworkInstance ***** ", isDebugEnabled) try { if (execution.getVariable("CMSO_ResponseCode") == "200") { execution.setVariable(Prefix + "Success", true) utils.log("DEBUG", " ***** DeleteNetworkInstance Success ***** ", isDebugEnabled) // Place holder for additional code. } else { execution.setVariable(Prefix + "Success", false) utils.log("DEBUG", " ***** DeleteNetworkInstance Failed in CompletionMsoProces flow!. ***** ", isDebugEnabled) } } catch (Exception ex) { String exceptionMessage = " Bpmn error encountered in DeleteNetworkInstance flow. postProcessResponse() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) } } // ******************************* // Build Error Section // ******************************* // Prepare for FalloutHandler public void buildErrorResponse (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) utils.log("DEBUG", " ***** Prepare for FalloutHandler. FAILURE - prepare request for sub-process FalloutHandler. *****", isDebugEnabled) String dbReturnCode = execution.getVariable(Prefix + "dbReturnCode") utils.log("DEBUG", " ***** DB Update Response Code : " + dbReturnCode, isDebugEnabled) utils.log("DEBUG", " ***** DB Update Response String: " + '\n' + execution.getVariable(Prefix + "deleteDBResponse"), isDebugEnabled) String falloutHandlerRequest = "" String requestId = execution.getVariable("mso-request-id") String source = execution.getVariable(Prefix + "source") execution.setVariable(Prefix + "Success", false) try { WorkflowException wfe = execution.getVariable("WorkflowException") String errorCode = String.valueOf(wfe.getErrorCode()) String errorMessage = wfe.getErrorMessage() falloutHandlerRequest = """ ${requestId} DELETE ${source} ${errorMessage} ${errorCode} """ utils.logAudit(falloutHandlerRequest) execution.setVariable(Prefix + "FalloutHandlerRequest", falloutHandlerRequest) utils.log("ERROR", " Overall Error Response going to FalloutHandler: " + "\n" + falloutHandlerRequest, isDebugEnabled) } catch (Exception ex) { // caught exception String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstance, buildErrorResponse() - " + ex.getMessage() utils.log("DEBUG", exceptionMessage, isDebugEnabled) falloutHandlerRequest = """ ${requestId} DELEtE ${source} ${exceptionMessage} 9999 """ execution.setVariable(Prefix + "FalloutHandlerRequest", falloutHandlerRequest) utils.log("DEBUG", " Overall Error Response going to FalloutHandler: " + "\n" + falloutHandlerRequest, isDebugEnabled) } } public void sendSyncError (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) try { String requestId = execution.getVariable("mso-request-id") String serviceInstanceId = execution.getVariable("serviceInstanceId") // RESTResponse (for API Handler (APIH) Reply Task) String deleteNetworkRestError = """{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim() utils.log("DEBUG", " sendSyncResponse to APIH - " + "\n" + deleteNetworkRestError, isDebugEnabled) sendWorkflowResponse(execution, 500, deleteNetworkRestError) } catch (Exception ex) { utils.log("DEBUG", " Sending Sync Error Activity Failed - DeleteNetworkInstance, sendSyncError(): " + "\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("UnexpectedError", "Caught a Java Lang Exception") // Adding this line temporarily until this flows error handling gets updated exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception") }catch(Exception e){ utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled) execution.setVariable("UnexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method") } utils.log("DEBUG", "Completed processJavaException Method of " + Prefix, isDebugEnabled) } }