Groovy scripts header correction
[so.git] / bpmn / MSOInfrastructureBPMN / src / main / groovy / org / openecomp / mso / bpmn / infrastructure / scripts / DoDeleteNetworkInstanceRollback.groovy
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  * ONAP - SO\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  *\r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ============LICENSE_END=========================================================\r
19  */\r
20 package org.openecomp.mso.bpmn.infrastructure.scripts;\r
21 \r
22 import groovy.xml.XmlUtil\r
23 import groovy.json.*\r
24 \r
25 import org.openecomp.mso.bpmn.core.json.JsonUtils\r
26 import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor\r
27 import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil\r
28 import org.openecomp.mso.bpmn.common.scripts.NetworkUtils\r
29 import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils\r
30 import org.openecomp.mso.bpmn.common.scripts.VidUtils\r
31 import org.openecomp.mso.bpmn.core.WorkflowException\r
32 import org.openecomp.mso.rest.APIResponse;\r
33 import org.openecomp.mso.rest.RESTClient\r
34 import org.openecomp.mso.rest.RESTConfig\r
35 \r
36 import java.util.UUID;\r
37 \r
38 import org.camunda.bpm.engine.delegate.BpmnError\r
39 import org.camunda.bpm.engine.runtime.Execution\r
40 import org.apache.commons.lang3.*\r
41 import org.apache.commons.codec.binary.Base64;\r
42 import org.springframework.web.util.UriUtils\r
43 \r
44 /**\r
45  * This groovy class supports the <class>DoCreateNetworkInstanceRollback.bpmn</class> process.\r
46  *\r
47  */\r
48 public class DoDeleteNetworkInstanceRollback extends AbstractServiceTaskProcessor {\r
49         String Prefix="DELNWKIR_"\r
50         ExceptionUtil exceptionUtil = new ExceptionUtil()\r
51         JsonUtils jsonUtil = new JsonUtils()\r
52         VidUtils vidUtils = new VidUtils(this)\r
53         NetworkUtils networkUtils = new NetworkUtils()\r
54         SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils()\r
55 \r
56         def className = getClass().getSimpleName()\r
57         \r
58         /**\r
59          * This method is executed during the preProcessRequest task of the <class>DoDeleteNetworkInstanceRollback.bpmn</class> process.\r
60          * @param execution\r
61          */\r
62         public InitializeProcessVariables(Execution execution){\r
63                 /* Initialize all the process variables in this block */\r
64                 \r
65                 execution.setVariable(Prefix + "WorkflowException", null)\r
66         \r
67                 execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", null)\r
68                 execution.setVariable(Prefix + "rollbackDeactivateSDNCResponse", "")\r
69                 execution.setVariable(Prefix + "rollbackDeactivateSDNCReturnCode", "")\r
70 \r
71                 execution.setVariable(Prefix + "rollbackSDNCRequest", "")\r
72                 execution.setVariable(Prefix + "rollbackSDNCResponse", "")\r
73                 execution.setVariable(Prefix + "rollbackSDNCReturnCode", "")\r
74                 \r
75                 execution.setVariable(Prefix + "rollbackNetworkRequest", null)\r
76                 execution.setVariable(Prefix + "rollbackNetworkResponse", "")\r
77                 execution.setVariable(Prefix + "rollbackNetworkReturnCode", "")\r
78                                 \r
79                 execution.setVariable(Prefix + "Success", false)\r
80                 execution.setVariable(Prefix + "fullRollback", false)\r
81 \r
82         }\r
83 \r
84         // **************************************************\r
85         //     Pre or Prepare Request Section\r
86         // **************************************************\r
87         /**\r
88          * This method is executed during the preProcessRequest task of the <class>DoDeleteNetworkInstanceRollback.bpmn</class> process.\r
89          * @param execution\r
90          */\r
91         public void preProcessRequest (Execution execution) {\r
92                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
93                 execution.setVariable("prefix",Prefix)\r
94                 \r
95                 utils.log("DEBUG", " ***** Inside preProcessRequest() of " + className + ".groovy ***** ", isDebugEnabled)\r
96 \r
97                 try {\r
98                         // initialize flow variables\r
99                         InitializeProcessVariables(execution)\r
100                         \r
101                         // GET Incoming request/variables\r
102                         String rollbackDeactivateSDNCRequest = null\r
103                         String rollbackSDNCRequest = null\r
104                         String rollbackNetworkRequest = null\r
105 \r
106                         Map<String, String> rollbackData = execution.getVariable("rollbackData")\r
107                         if (rollbackData != null && rollbackData instanceof Map) {\r
108                                 \r
109                                 if(rollbackData.containsKey("rollbackDeactivateSDNCRequest")) {\r
110                                    rollbackDeactivateSDNCRequest = rollbackData["rollbackDeactivateSDNCRequest"]\r
111                                 }\r
112                                 \r
113                                 if(rollbackData.containsKey("rollbackSDNCRequest")) {\r
114                                         rollbackSDNCRequest = rollbackData["rollbackSDNCRequest"]\r
115                                  }\r
116                                 \r
117                                 if(rollbackData.containsKey("rollbackNetworkRequest")) {\r
118                                         rollbackNetworkRequest = rollbackData["rollbackNetworkRequest"]\r
119                                  }\r
120                         }\r
121                         \r
122                         execution.setVariable(Prefix + "rollbackNetworkRequest", rollbackNetworkRequest)\r
123                         execution.setVariable(Prefix + "rollbackSDNCRequest", rollbackSDNCRequest)\r
124                         execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", rollbackDeactivateSDNCRequest)\r
125                         utils.log("DEBUG", "'rollbackData': " + '\n' + execution.getVariable("rollbackData"), isDebugEnabled)\r
126 \r
127                         String sdncVersion = execution.getVariable("sdncVersion")\r
128                         utils.log("DEBUG", "sdncVersion? : " + sdncVersion, isDebugEnabled)\r
129                                 \r
130                         // PO Authorization Info / headers Authorization=\r
131                         String basicAuthValuePO = execution.getVariable("URN_mso_adapters_po_auth")\r
132                         utils.log("DEBUG", " Obtained BasicAuth userid password for PO/SDNC adapter: " + basicAuthValuePO, isDebugEnabled)\r
133                         try {\r
134                                 def encodedString = utils.getBasicAuth(basicAuthValuePO, execution.getVariable("URN_mso_msoKey"))\r
135                                 execution.setVariable("BasicAuthHeaderValuePO",encodedString)\r
136                                 execution.setVariable("BasicAuthHeaderValueSDNC", encodedString)\r
137         \r
138                         } catch (IOException ex) {\r
139                                 String exceptionMessage = "Exception Encountered in DoCreateNetworkInstance, PreProcessRequest() - "\r
140                                 String dataErrorMessage = exceptionMessage + " Unable to encode PO/SDNC user/password string - " + ex.getMessage()\r
141                                 utils.log("DEBUG", dataErrorMessage , isDebugEnabled)\r
142                                 exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)\r
143                         }\r
144 \r
145                         if (execution.getVariable("SavedWorkflowException1") != null) {\r
146                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("SavedWorkflowException1"))\r
147                         } else {\r
148                                 execution.setVariable(Prefix + "WorkflowException", execution.getVariable("WorkflowException"))\r
149                         }\r
150                         utils.log("DEBUG", "*** WorkflowException : " + execution.getVariable(Prefix + "WorkflowException"), isDebugEnabled)\r
151                         if(execution.getVariable(Prefix + "WorkflowException") != null) {\r
152                                 // called by: DoCreateNetworkInstance, partial rollback\r
153                                 execution.setVariable(Prefix + "fullRollback", false)\r
154 \r
155                         } else {\r
156                            // called by: Macro - Full Rollback, WorkflowException = null\r
157                            execution.setVariable(Prefix + "fullRollback", true)\r
158                         \r
159                         }\r
160                         \r
161                         utils.log("DEBUG", "*** fullRollback? : " + execution.getVariable(Prefix + "fullRollback"), isDebugEnabled)\r
162                         \r
163                 } catch (BpmnError e) {\r
164                 throw e;\r
165                 \r
166                 } catch (Exception ex) {\r
167                         sendSyncError(execution)\r
168                         // caught exception\r
169                         String exceptionMessage = "Exception Encountered in PreProcessRequest() of " + className + ".groovy ***** : " + ex.getMessage()\r
170                         utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
171                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
172                 \r
173                 }\r
174 \r
175         }\r
176         \r
177         public void validateRollbackResponses (Execution execution) {\r
178                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
179                 execution.setVariable("prefix",Prefix)\r
180 \r
181                 utils.log("DEBUG", " ***** Inside validateRollbackResponses() of DoDeleteNetworkInstanceRollback ***** ", isDebugEnabled)\r
182                 \r
183                 try {\r
184 \r
185                         // validate SDNC activate response\r
186                         String rollbackDeactivateSDNCMessages = ""\r
187                         String rollbackDeactivateSDNCReturnCode = "200"\r
188                         if (execution.getVariable(Prefix + "rollbackDeactivateSDNCRequest") != null) {\r
189                                 rollbackDeactivateSDNCReturnCode = execution.getVariable(Prefix + "rollbackDeactivateSDNCReturnCode")\r
190                                 String rollbackDeactivateSDNCResponse = execution.getVariable(Prefix + "rollbackDeactivateSDNCResponse")\r
191                                 String rollbackDeactivateSDNCReturnInnerCode = ""\r
192                                 rollbackDeactivateSDNCResponse = sdncAdapterUtils.decodeXML(rollbackDeactivateSDNCResponse)\r
193                                 rollbackDeactivateSDNCResponse = rollbackDeactivateSDNCResponse.replace("&", "&amp;").replace('$', '').replace('<?xml version="1.0" encoding="UTF-8"?>', "")\r
194                                 if (rollbackDeactivateSDNCReturnCode == "200") {\r
195                                         if (utils.nodeExists(rollbackDeactivateSDNCResponse, "response-code")) {\r
196                                                 rollbackDeactivateSDNCReturnInnerCode = utils.getNodeText1(rollbackDeactivateSDNCResponse, "response-code")\r
197                                                 if (rollbackDeactivateSDNCReturnInnerCode == "200" || rollbackDeactivateSDNCReturnInnerCode == "" || rollbackDeactivateSDNCReturnInnerCode == "0") {\r
198                                                    rollbackDeactivateSDNCMessages = " + SNDC deactivate rollback completed."\r
199                                                 } else {\r
200                                                         rollbackDeactivateSDNCMessages = " + SDNC deactivate rollback failed. "\r
201                                                 }\r
202                                         } else {\r
203                                                  rollbackDeactivateSDNCMessages = " + SNDC deactivate rollback completed."\r
204                                         }\r
205                                 } else {\r
206                                           rollbackDeactivateSDNCMessages = " + SDNC deactivate rollback failed. "\r
207                                 }\r
208                                 utils.log("DEBUG", " SDNC deactivate rollback Code - " + rollbackDeactivateSDNCReturnCode, isDebugEnabled)\r
209                                 utils.log("DEBUG", " SDNC deactivate rollback  Response - " + rollbackDeactivateSDNCResponse, isDebugEnabled)\r
210                         }\r
211                 \r
212                         // validate SDNC rollback response\r
213                         String rollbackSdncErrorMessages = ""\r
214                         String rollbackSDNCReturnCode = "200"\r
215                         if (execution.getVariable(Prefix + "rollbackSDNCRequest") != null) {\r
216                                 rollbackSDNCReturnCode = execution.getVariable(Prefix + "rollbackSDNCReturnCode")\r
217                                 String rollbackSDNCResponse = execution.getVariable(Prefix + "rollbackSDNCResponse")\r
218                                 String rollbackSDNCReturnInnerCode = ""\r
219                                 SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)\r
220                                 rollbackSDNCResponse = sdncAdapterUtils.decodeXML(rollbackSDNCResponse)\r
221                                 rollbackSDNCResponse = rollbackSDNCResponse.replace("&", "&amp;").replace('$', '').replace('<?xml version="1.0" encoding="UTF-8"?>', "")\r
222                                 if (rollbackSDNCReturnCode == "200") {\r
223                                         if (utils.nodeExists(rollbackSDNCResponse, "response-code")) {\r
224                                                 rollbackSDNCReturnInnerCode = utils.getNodeText1(rollbackSDNCResponse, "response-code")\r
225                                                 if (rollbackSDNCReturnInnerCode == "200" || rollbackSDNCReturnInnerCode == "" || rollbackSDNCReturnInnerCode == "0") {\r
226                                                         rollbackSdncErrorMessages = " + SNDC unassign rollback completed."\r
227                                                 } else {\r
228                                                         rollbackSdncErrorMessages = " + SDNC unassign rollback failed. "\r
229                                                 }\r
230                                         } else {\r
231                                                   rollbackSdncErrorMessages = " + SNDC unassign rollback completed."\r
232                                         }\r
233                                  } else {\r
234                                           rollbackSdncErrorMessages = " + SDNC unassign rollback failed. "\r
235                                  }\r
236                                 utils.log("DEBUG", " SDNC assign rollback Code - " + rollbackSDNCReturnCode, isDebugEnabled)\r
237                                 utils.log("DEBUG", " SDNC assign rollback  Response - " + rollbackSDNCResponse, isDebugEnabled)\r
238                         }\r
239                         \r
240                         // validate PO network rollback response\r
241                         String rollbackNetworkErrorMessages = ""\r
242                         String rollbackNetworkReturnCode = "200"\r
243                         if (execution.getVariable(Prefix + "rollbackNetworkRequest") != null) {\r
244                                 rollbackNetworkReturnCode = execution.getVariable(Prefix + "rollbackNetworkReturnCode")\r
245                                 String rollbackNetworkResponse = execution.getVariable(Prefix + "rollbackNetworkResponse")\r
246                                 if (rollbackNetworkReturnCode != "200") {\r
247                                         rollbackNetworkErrorMessages = " + PO Network rollback failed. "\r
248                                 } else {\r
249                                         rollbackNetworkErrorMessages = " + PO Network rollback completed."\r
250                                 }\r
251         \r
252                                 utils.log("DEBUG", " NetworkRollback Code - " + rollbackNetworkReturnCode, isDebugEnabled)\r
253                                 utils.log("DEBUG", " NetworkRollback Response - " + rollbackNetworkResponse, isDebugEnabled)\r
254                         }\r
255                                 \r
256                         String statusMessage = ""\r
257                         int errorCode = 7000\r
258                         utils.log("DEBUG", "*** fullRollback? : " + execution.getVariable(Prefix + "fullRollback"), isDebugEnabled)\r
259                         if (execution.getVariable(Prefix + "fullRollback") == false) {\r
260                                 WorkflowException wfe = execution.getVariable(Prefix + "WorkflowException") // original WorkflowException\r
261                                 if (wfe != null) {\r
262                                         statusMessage = wfe.getErrorMessage()\r
263                                         errorCode = wfe.getErrorCode()\r
264                                 } else {\r
265                                         statusMessage = "See Previous Camunda flows for cause of Error: Undetermined Exception."\r
266                                         errorCode = '7000'\r
267                                 }\r
268 \r
269                                 // set if all rolledbacks are successful\r
270                                 if (rollbackDeactivateSDNCReturnCode == "200" && rollbackNetworkReturnCode == "200" && rollbackSDNCReturnCode == "200") {\r
271                                         execution.setVariable("rolledBack", true)\r
272                                         execution.setVariable("wasDeleted", true)\r
273                                 \r
274                                 } else {\r
275                                         execution.setVariable("rolledBack", false)\r
276                                         execution.setVariable("wasDeleted", true)\r
277                                 }\r
278 \r
279                                 statusMessage =  statusMessage + rollbackDeactivateSDNCMessages + rollbackNetworkErrorMessages + rollbackSdncErrorMessages\r
280                                 utils.log("DEBUG", "Final DoDeleteNetworkInstanceRollback status message: " + statusMessage, isDebugEnabled)\r
281                                 String processKey = getProcessKey(execution);\r
282                                 WorkflowException exception = new WorkflowException(processKey, errorCode, statusMessage);\r
283                                 execution.setVariable("workflowException", exception);\r
284                         \r
285                         } else {\r
286                                 // rollback due to failures in Main flow (Macro or a-ala-carte) - Full rollback\r
287                             if (rollbackDeactivateSDNCReturnCode == "200" && rollbackNetworkReturnCode == "200" && rollbackSDNCReturnCode == "200") {\r
288                                     execution.setVariable("rollbackSuccessful", true)\r
289                                     execution.setVariable("rollbackError", false) \r
290                             } else {\r
291                                     String exceptionMessage = "Network Delete Rollback was not Successful. "\r
292                     utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
293                                         execution.setVariable("rollbackSuccessful", false)\r
294                                     execution.setVariable("rollbackError", true)\r
295                                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)\r
296                                         throw new BpmnError("MSOWorkflowException")\r
297                             }  \r
298                         }                       \r
299                         \r
300                 } catch (Exception ex) {\r
301                         String errorMessage = "See Previous Camunda flows for cause of Error: Undetermined Exception."\r
302                         String exceptionMessage = " Bpmn error encountered in DoDeleteNetworkInstanceRollback flow. validateRollbackResponses() - " + errorMessage + ": " + ex.getMessage()\r
303                         utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
304                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)\r
305 \r
306                 }\r
307 \r
308         }\r
309 \r
310         // *******************************\r
311         //     Build Error Section\r
312         // *******************************\r
313 \r
314 \r
315         \r
316         public void processJavaException(Execution execution){\r
317                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
318                 execution.setVariable("prefix",Prefix)\r
319                 \r
320                 try{\r
321                         utils.log("DEBUG", "Caught a Java Exception in " + Prefix, isDebugEnabled)\r
322                         utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled)\r
323                         utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled)\r
324                         execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix)  // Adding this line temporarily until this flows error handling gets updated\r
325                         exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")\r
326                         \r
327                 }catch(Exception e){\r
328                         utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled)\r
329                         execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix)  // Adding this line temporarily until this flows error handling gets updated\r
330                         exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)\r
331                 }\r
332                 utils.log("DEBUG", "Completed processJavaException Method in " + Prefix, isDebugEnabled)\r
333         }\r
334 \r
335 }\r