2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts;
23 import groovy.xml.XmlUtil
26 import org.onap.so.bpmn.core.UrnPropertiesReader
27 import org.onap.so.bpmn.core.json.JsonUtils
28 import org.onap.so.logger.MsoLogger
29 import org.onap.so.logger.MessageEnum
31 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
32 import org.onap.so.bpmn.common.scripts.ExceptionUtil
33 import org.onap.so.bpmn.common.scripts.NetworkUtils
34 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
35 import org.onap.so.bpmn.common.scripts.VidUtils
36 import org.onap.so.bpmn.core.WorkflowException
37 import org.onap.so.rest.APIResponse;
38 import org.onap.so.rest.RESTClient
39 import org.onap.so.rest.RESTConfig
41 import java.util.UUID;
43 import org.camunda.bpm.engine.delegate.BpmnError
44 import org.camunda.bpm.engine.delegate.DelegateExecution
45 import org.apache.commons.lang3.*
46 import org.apache.commons.codec.binary.Base64;
47 import org.springframework.web.util.UriUtils
50 * This groovy class supports the <class>DoCreateNetworkInstance.bpmn</class> process.
53 public class DoCreateNetworkInstanceRollback extends AbstractServiceTaskProcessor {
54 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, DoCreateNetworkInstanceRollback.class);
56 String Prefix="CRENWKIR_"
57 ExceptionUtil exceptionUtil = new ExceptionUtil()
58 JsonUtils jsonUtil = new JsonUtils()
59 VidUtils vidUtils = new VidUtils(this)
60 NetworkUtils networkUtils = new NetworkUtils()
61 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()
63 def className = getClass().getSimpleName()
66 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstanceRollback.bpmn</class> process.
69 public InitializeProcessVariables(DelegateExecution execution){
70 /* Initialize all the process variables in this block */
72 execution.setVariable(Prefix + "rollbackNetworkRequest", null)
73 execution.setVariable(Prefix + "rollbackSDNCRequest", null)
74 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", null)
75 execution.setVariable(Prefix + "WorkflowException", null)
77 execution.setVariable(Prefix + "rollbackNetworkRequest", "")
78 execution.setVariable(Prefix + "rollbackNetworkResponse", "")
79 execution.setVariable(Prefix + "rollbackNetworkReturnCode", "")
81 execution.setVariable(Prefix + "rollbackSDNCRequest", "")
82 execution.setVariable(Prefix + "rollbackSDNCResponse", "")
83 execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")
85 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", "")
86 execution.setVariable(Prefix + "rollbackActivateSDNCResponse", "")
87 execution.setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
89 execution.setVariable(Prefix + "Success", false)
90 execution.setVariable(Prefix + "fullRollback", false)
91 execution.setVariable(Prefix + "networkId", "")
92 execution.setVariable(Prefix + "urlRollbackPoNetwork", "")
96 // **************************************************
97 // Pre or Prepare Request Section
98 // **************************************************
100 * This method is executed during the preProcessRequest task of the <class>DoCreateNetworkInstanceRollback.bpmn</class> process.
103 public void preProcessRequest (DelegateExecution execution) {
104 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
105 execution.setVariable("prefix",Prefix)
107 msoLogger.trace("Inside preProcessRequest() of " + className + ".groovy")
110 // initialize flow variables
111 InitializeProcessVariables(execution)
113 // GET Incoming request/variables
114 String rollbackNetworkRequest = null
115 String rollbackSDNCRequest = null
116 String rollbackActivateSDNCRequest = null
119 Map<String, String> rollbackData = execution.getVariable("rollbackData")
120 if (rollbackData != null && rollbackData instanceof Map) {
122 if(rollbackData.containsKey("rollbackSDNCRequest")) {
123 rollbackSDNCRequest = rollbackData["rollbackSDNCRequest"]
126 if(rollbackData.containsKey("rollbackNetworkRequest")) {
127 rollbackNetworkRequest = rollbackData["rollbackNetworkRequest"]
130 if(rollbackData.containsKey("rollbackActivateSDNCRequest")) {
131 rollbackActivateSDNCRequest = rollbackData["rollbackActivateSDNCRequest"]
136 execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkRequest)
137 execution.setVariable(Prefix + "rollbackSDNCRequest", rollbackSDNCRequest)
138 execution.setVariable(Prefix + "rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
139 msoLogger.debug("'rollbackData': " + '\n' + execution.getVariable("rollbackData"))
141 String sdncVersion = execution.getVariable("sdncVersion")
142 msoLogger.debug("sdncVersion? : " + sdncVersion)
144 // PO Authorization Info / headers Authorization=
145 String basicAuthValuePO = UrnPropertiesReader.getVariable("mso.adapters.po.auth",execution)
147 def encodedString = utils.getBasicAuth(basicAuthValuePO, UrnPropertiesReader.getVariable("mso.msoKey", execution))
148 execution.setVariable("BasicAuthHeaderValuePO",encodedString)
149 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)
151 } catch (IOException ex) {
152 String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "
153 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()
154 msoLogger.debug(dataErrorMessage )
155 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
158 if (execution.getVariable("SavedWorkflowException1") != null) {
159 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))
161 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))
163 msoLogger.debug("*** WorkflowException : " + execution.getVariable(Prefix + "WorkflowException"))
164 if(execution.getVariable(Prefix + "WorkflowException") != null) {
165 // called by: DoCreateNetworkInstance, partial rollback
166 execution.setVariable(Prefix + "fullRollback", false)
169 // called by: Macro - Full Rollback, WorkflowException = null
170 execution.setVariable(Prefix + "fullRollback", true)
173 msoLogger.debug("*** fullRollback? : " + execution.getVariable(Prefix + "fullRollback"))
176 } catch (BpmnError e) {
179 } catch (Exception ex) {
181 String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()
182 msoLogger.debug(exceptionMessage)
183 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
189 public void callPONetworkAdapter (DelegateExecution execution) {
190 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
191 execution.setVariable("prefix",Prefix)
193 msoLogger.trace("Inside callPONetworkAdapter() of " + className + "")
196 String poUrl = UrnPropertiesReader.getVariable("mso.adapters.network.rest.endpoint",execution)
197 String rollbackSDNCRequest = execution.getVariable(Prefix + "rollbackSDNCRequest")
198 String networkId = utils.getNodeText(rollbackSDNCRequest, "network-id")
200 String rollbackNetworkRequest = execution.getVariable(Prefix + "rollbackNetworkRequest")
202 String urlRollbackPoNetwork = poUrl+ "/" + networkId + "/rollback"
203 msoLogger.debug("'urlRollbackPoNetwork': " + urlRollbackPoNetwork)
204 execution.setVariable(Prefix + "urlRollbackPoNetwork", urlRollbackPoNetwork)
206 RESTConfig config = new RESTConfig(urlRollbackPoNetwork)
207 RESTClient client = new RESTClient(config).
208 addHeader("Content-Type", "application/xml").
209 addAuthorizationHeader(execution.getVariable("BasicAuthHeaderValuePO"));
211 APIResponse response = client.httpDelete(rollbackNetworkRequest)
212 String responseCode = response.getStatusCode()
213 String responseBody = response.getResponseBodyAsString()
215 execution.setVariable(Prefix + "rollbackNetworkReturnCode", responseCode)
216 execution.setVariable(Prefix + "rollbackNetworkResponse", responseBody)
218 msoLogger.debug(" Network Adapter rollback responseCode: " + responseCode)
219 msoLogger.debug(" Network Adapter rollback responseBody: " + responseBody)
222 } catch (Exception ex) {
223 String exceptionMessage = "Exception Encountered in callPONetworkAdapter() of DoCreateNetworkInstanceRollback flow - " + ex.getMessage()
224 msoLogger.debug(exceptionMessage)
225 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
231 public void validateRollbackResponses (DelegateExecution execution) {
232 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
233 execution.setVariable("prefix",Prefix)
235 msoLogger.trace("Inside validateRollbackResponses() of DoCreateNetworkInstanceRollback")
238 // validate PO network rollback response
239 String rollbackNetworkErrorMessages = ""
240 String rollbackNetworkReturnCode = "200"
241 if (execution.getVariable(Prefix + "rollbackNetworkRequest") != null) {
242 rollbackNetworkReturnCode = execution.getVariable(Prefix + "rollbackNetworkReturnCode")
243 String rollbackNetworkResponse = execution.getVariable(Prefix + "rollbackNetworkResponse")
244 msoLogger.debug(" NetworkRollback Code - " + rollbackNetworkReturnCode)
245 msoLogger.debug(" NetworkRollback Response - " + rollbackNetworkResponse)
246 if (rollbackNetworkReturnCode != "200") {
247 rollbackNetworkErrorMessages = " + PO Network rollback failed. "
249 rollbackNetworkErrorMessages = " + PO Network rollback completed."
253 // validate SDNC rollback response
254 String rollbackSdncErrorMessages = ""
255 String rollbackSDNCReturnCode = "200"
256 if (execution.getVariable(Prefix + "rollbackSDNCRequest") != null) {
257 rollbackSDNCReturnCode = execution.getVariable(Prefix + "rollbackSDNCReturnCode")
258 String rollbackSDNCResponse = execution.getVariable(Prefix + "rollbackSDNCResponse")
259 String rollbackSDNCReturnInnerCode = ""
260 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
261 rollbackSDNCResponse = rollbackSDNCResponse
262 rollbackSDNCResponse = rollbackSDNCResponse.replace('$', '').replace('<?xml version="1.0" encoding="UTF-8"?>', "")
263 if (rollbackSDNCReturnCode == "200") {
264 if (utils.nodeExists(rollbackSDNCResponse, "response-code")) {
265 rollbackSDNCReturnInnerCode = utils.getNodeText(rollbackSDNCResponse, "response-code")
266 if (rollbackSDNCReturnInnerCode == "200" || rollbackSDNCReturnInnerCode == "" || rollbackSDNCReturnInnerCode == "0") {
267 rollbackSdncErrorMessages = " + SNDC assign rollback completed."
269 rollbackSdncErrorMessages = " + SDNC assign rollback failed. "
272 rollbackSdncErrorMessages = " + SNDC assign rollback completed."
275 rollbackSdncErrorMessages = " + SDNC assign rollback failed. "
277 msoLogger.debug(" SDNC assign rollback Code - " + rollbackSDNCReturnCode)
278 msoLogger.debug(" SDNC assign rollback Response - " + rollbackSDNCResponse)
281 // validate SDNC activate rollback response
282 String rollbackActivateSdncErrorMessages = ""
283 String rollbackActivateSDNCReturnCode = "200"
284 if (execution.getVariable(Prefix + "rollbackActivateSDNCRequest") != null) {
285 rollbackActivateSDNCReturnCode = execution.getVariable(Prefix + "rollbackActivateSDNCReturnCode")
286 String rollbackActivateSDNCResponse = execution.getVariable(Prefix + "rollbackActivateSDNCResponse")
287 String rollbackActivateSDNCReturnInnerCode = ""
288 rollbackActivateSDNCResponse = rollbackActivateSDNCResponse
289 rollbackActivateSDNCResponse = rollbackActivateSDNCResponse.replace('$', '').replace('<?xml version="1.0" encoding="UTF-8"?>', "")
290 if (rollbackActivateSDNCReturnCode == "200") {
291 if (utils.nodeExists(rollbackActivateSDNCResponse, "response-code")) {
292 rollbackActivateSDNCReturnInnerCode = utils.getNodeText(rollbackActivateSDNCResponse, "response-code")
293 if (rollbackActivateSDNCReturnInnerCode == "200" || rollbackActivateSDNCReturnInnerCode == "" || rollbackActivateSDNCReturnInnerCode == "0") {
294 rollbackActivateSdncErrorMessages = " + SNDC activate rollback completed."
296 rollbackActivateSdncErrorMessages = " + SDNC activate rollback failed. "
299 rollbackActivateSdncErrorMessages = " + SNDC activate rollback completed."
302 rollbackActivateSdncErrorMessages = " + SDNC activate rollback failed. "
304 msoLogger.debug(" SDNC activate rollback Code - " + rollbackActivateSDNCReturnCode)
305 msoLogger.debug(" SDNC activate rollback Response - " + rollbackActivateSDNCResponse)
309 String statusMessage = ""
311 msoLogger.debug("*** fullRollback? : " + execution.getVariable(Prefix + "fullRollback"))
312 if (execution.getVariable(Prefix + "fullRollback") == false) {
313 // original WorkflowException,
314 WorkflowException wfe = execution.getVariable(Prefix + "WorkflowException")
316 // rollback due to failure in DoCreate - Partial rollback
317 statusMessage = wfe.getErrorMessage()
318 errorCode = wfe.getErrorCode()
320 statusMessage = "See Previous Camunda flows for cause of Error: Undetermined Exception."
324 // set if all rolledbacks are successful
325 if (rollbackNetworkReturnCode == "200" && rollbackSDNCReturnCode == "200" && rollbackActivateSDNCReturnCode == "200") {
326 execution.setVariable("rolledBack", true)
327 execution.setVariable("wasDeleted", true)
330 execution.setVariable("rolledBack", false)
331 execution.setVariable("wasDeleted", true)
334 statusMessage = statusMessage + rollbackActivateSdncErrorMessages + rollbackNetworkErrorMessages + rollbackSdncErrorMessages
335 msoLogger.debug("Final DoCreateNetworkInstanceRollback status message: " + statusMessage)
336 String processKey = getProcessKey(execution);
337 WorkflowException exception = new WorkflowException(processKey, errorCode, statusMessage);
338 execution.setVariable("workflowException", exception);
341 // rollback due to failures in Main flow (Macro) - Full rollback
342 // WorkflowException = null
343 if (rollbackNetworkReturnCode == "200" && rollbackSDNCReturnCode == "200" && rollbackActivateSDNCReturnCode == "200") {
344 execution.setVariable("rollbackSuccessful", true)
345 execution.setVariable("rollbackError", false)
347 String exceptionMessage = "Network Create Rollback was not Successful. "
348 msoLogger.debug(exceptionMessage)
349 execution.setVariable("rollbackSuccessful", false)
350 execution.setVariable("rollbackError", true)
351 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
352 throw new BpmnError("MSOWorkflowException")
358 } catch (Exception ex) {
359 String errorMessage = "See Previous Camunda flows for cause of Error: Undetermined Exception."
360 String exceptionMessage = " Bpmn error encountered in DoCreateNetworkInstanceRollback flow. validateRollbackResponses() - " + errorMessage + ": " + ex.getMessage()
361 msoLogger.debug(exceptionMessage)
362 exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)
368 // *******************************
369 // Build Error Section
370 // *******************************
374 public void processJavaException(DelegateExecution execution){
375 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
376 execution.setVariable("prefix",Prefix)
379 msoLogger.debug("Caught a Java Exception in " + Prefix)
380 msoLogger.debug("Started processJavaException Method")
381 msoLogger.debug("Variables List: " + execution.getVariables())
382 execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
383 exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
386 msoLogger.debug("Caught Exception during processJavaException Method: " + e)
387 execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
388 exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
390 msoLogger.debug("Completed processJavaException Method in " + Prefix)