9e341dafbc1eb26a6969e92fdd8ed1112f33818f
[so.git] /
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  * OPENECOMP - MSO\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 \r
21 package org.openecomp.mso.bpmn.infrastructure.scripts;\r
22 \r
23 import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor\r
24 import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil\r
25 import org.openecomp.mso.bpmn.common.scripts.NetworkUtils\r
26 import org.openecomp.mso.bpmn.common.scripts.VidUtils\r
27 import org.openecomp.mso.bpmn.core.WorkflowException\r
28 import org.openecomp.mso.bpmn.core.json.JsonUtils;\r
29 import org.openecomp.mso.rest.APIResponse\r
30 import java.util.UUID;\r
31 import org.camunda.bpm.engine.delegate.BpmnError\r
32 import org.camunda.bpm.engine.runtime.Execution\r
33 import org.apache.commons.lang3.*\r
34 import org.apache.commons.codec.binary.Base64;\r
35 import org.springframework.web.util.UriUtils\r
36 import groovy.xml.XmlUtil\r
37 import groovy.json.*\r
38 \r
39 public class DeleteNetworkInstance extends AbstractServiceTaskProcessor {\r
40         String Prefix="DELNI_"\r
41         String groovyClassName = "DeleteNetworkInstance"\r
42         ExceptionUtil exceptionUtil = new ExceptionUtil()\r
43         JsonUtils jsonUtil = new JsonUtils()\r
44         VidUtils vidUtils = new VidUtils(this)\r
45         NetworkUtils networkUtils = new NetworkUtils()\r
46 \r
47 \r
48         public InitializeProcessVariables(Execution execution){\r
49                 \r
50                 execution.setVariable(Prefix + "Success", false)\r
51                 \r
52                 execution.setVariable(Prefix + "CompleteMsoProcessRequest", "")\r
53                 execution.setVariable(Prefix + "FalloutHandlerRequest", "")\r
54                 execution.setVariable(Prefix + "isSilentSuccess", false)\r
55                 \r
56         }\r
57         \r
58         // **************************************************\r
59         //     Pre or Prepare Request Section\r
60         // **************************************************\r
61 \r
62         public void preProcessRequest (Execution execution) {\r
63                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
64                 execution.setVariable("prefix",Prefix)\r
65 \r
66                 utils.log("DEBUG", " ***** Inside preProcessRequest() of " + groovyClassName + " ***** ", isDebugEnabled)\r
67 \r
68                 try {\r
69                         // initialize flow variables\r
70                         InitializeProcessVariables(execution)\r
71                                                         \r
72                         String sdncVersion = execution.getVariable("sdncVersion")\r
73                         if (sdncVersion == null || sdncVersion == '1610') {                             \r
74                                 // 'a-la-cart' default, sdncVersion = '1610' \r
75                                 execution.setVariable("sdncVersion", "1610")\r
76                                 String bpmnRequest = execution.getVariable("bpmnRequest")\r
77                                 // set 'disableRollback'\r
78                                 if (bpmnRequest != null) {\r
79                                         String disableRollback = jsonUtil.getJsonValue(bpmnRequest, "requestDetails.requestInfo.suppressRollback")\r
80                                         if (disableRollback != null) {\r
81                                                 execution.setVariable("disableRollback", disableRollback)\r
82                                                 utils.log("DEBUG", "Received 'suppressRollback': " + disableRollback , isDebugEnabled)\r
83                                         } else {\r
84                                             execution.setVariable("disableRollback", false)\r
85                                         }\r
86                                         utils.log("DEBUG", " Set 'disableRollback' : " + execution.getVariable("disableRollback") , isDebugEnabled)\r
87                                 } else {\r
88                                         String dataErrorMessage = " Invalid 'bpmnRequest' request."\r
89                                         utils.log("DEBUG", dataErrorMessage, isDebugEnabled)\r
90                                         exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)\r
91                                 }\r
92 \r
93                         } else {\r
94                             // 'macro' test ONLY, sdncVersion = '1702'\r
95                             utils.log("DEBUG", " 'disableRollback' : " + execution.getVariable("disableRollback") , isDebugEnabled)\r
96                         }       \r
97                         \r
98                         // get/set 'msoRequestId' and 'mso-request-id'\r
99                         String requestId = execution.getVariable("msoRequestId")\r
100                         if (requestId != null) {\r
101                                 execution.setVariable("mso-request-id", requestId)\r
102                         } else {\r
103                                 requestId = execution.getVariable("mso-request-id")\r
104                         }\r
105                         execution.setVariable(Prefix + "requestId", requestId)\r
106                         \r
107                         // get/set 'requestId' \r
108                     if (execution.getVariable("requestId") == null) {\r
109                                 execution.setVariable("requestId", requestId)\r
110                         }\r
111                         \r
112                         // set action to "DELETE"\r
113                         execution.setVariable("action", "DELETE")\r
114                         \r
115                         //Place holder for additional code.\r
116 \r
117                         // TODO ???\r
118                         // userParams???  1) pre-loads indicator, 2) 'auto-activation'  \r
119                         // Tag/Value parameters\r
120                         //\r
121                         // Map: 'networkInputParams': 'auto-activation''\r
122                         // Sample format? \r
123                         // "requestParameters": {\r
124                         //     "userParams": [  \r
125             //          {\r
126                         //               "name": "someUserParam1",\r
127                         //               "value": "someValue1"\r
128                         //          }\r
129             //     ]\r
130                     //   }\r
131                         // \r
132                         // String userParams = //use json util to extract "userParams"// \r
133                 // execution.setVariable("networkInputParams", userParams)\r
134                         // else: execution.setVariable("networkInputParams", null)\r
135                         //\r
136 \r
137 \r
138                 } catch (Exception ex){\r
139                         sendSyncError(execution)\r
140                         String exceptionMessage = "Exception Encountered in " + groovyClassName + ", PreProcessRequest() - " + ex.getMessage()\r
141                         utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
142                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
143 \r
144                 }\r
145 \r
146         }\r
147 \r
148         public void getNetworkModelInfo (Execution execution) {\r
149                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
150                 execution.setVariable("prefix", Prefix)\r
151 \r
152                 utils.log("DEBUG", " ***** Inside getNetworkModelInfo() of DeleteNetworkInstance ***** ", isDebugEnabled)\r
153                 \r
154                 try {\r
155                         \r
156                         // "networkModelInfo" is expected to be sent\r
157                         String networkModelInfo = execution.getVariable("networkModelInfo")\r
158                         utils.log("DEBUG", " networkModelInfo - " + networkModelInfo, isDebugEnabled)\r
159                                                  \r
160                                                                                  \r
161                 } catch (Exception ex) {\r
162                         sendSyncError(execution)\r
163                    String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstance flow. getNetworkModelInfo() - " + ex.getMessage()\r
164                    utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
165                    exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
166                         \r
167                 }\r
168 \r
169         }\r
170         \r
171         public void sendSyncResponse (Execution execution) {\r
172                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
173                 execution.setVariable("prefix",Prefix)\r
174 \r
175                 utils.log("DEBUG", " ***** Inside sendSyncResponse() of DeleteNetworkInstance ***** ", isDebugEnabled)\r
176 \r
177                 try {\r
178                         String requestId = execution.getVariable("mso-request-id")\r
179                         String serviceInstanceId = execution.getVariable("serviceInstanceId")\r
180 \r
181                         // RESTResponse (for API Handler (APIH) Reply Task)\r
182                         String deleteNetworkRestRequest = """{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim()\r
183 \r
184                         utils.log("DEBUG", " sendSyncResponse to APIH - " + "\n" + deleteNetworkRestRequest, isDebugEnabled)\r
185 \r
186                         sendWorkflowResponse(execution, 202, deleteNetworkRestRequest)\r
187 \r
188                 } catch (Exception ex) {\r
189                          // caught exception\r
190                         String exceptionMessage = "Exception Encountered in  DeleteNetworkInstance, sendSyncResponse() - " + ex.getMessage()\r
191                         utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
192                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
193 \r
194                 }\r
195 \r
196         }\r
197 \r
198         public void prepareCompletion (Execution execution) {\r
199                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
200                 execution.setVariable("prefix",Prefix)\r
201 \r
202                 utils.log("DEBUG", " ***** Inside prepareCompletion() of CreateNetworkInstance ***** ", isDebugEnabled)\r
203 \r
204                 try {\r
205 \r
206                         String requestId = execution.getVariable("mso-request-id")\r
207                         String source = execution.getVariable(Prefix + "source")\r
208 \r
209                         String msoCompletionRequest =\r
210                                 """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"\r
211                                                                 xmlns:ns="http://org.openecomp/mso/request/types/v1">\r
212                                                 <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">\r
213                                                         <request-id>${requestId}</request-id>\r
214                                                         <action>DELETE</action>\r
215                                                         <source>VID</source>\r
216                                                 </request-info>\r
217                                                 <aetgt:status-message>Network has been deleted successfully.</aetgt:status-message>\r
218                                                 <aetgt:mso-bpel-name>BPMN Network action: DELETE</aetgt:mso-bpel-name>\r
219                                         </aetgt:MsoCompletionRequest>"""\r
220 \r
221                                 // Format Response\r
222                         String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest)\r
223 \r
224                         // normal path\r
225                         execution.setVariable(Prefix + "CompleteMsoProcessRequest", xmlMsoCompletionRequest)\r
226                         utils.log("DEBUG", " Overall SUCCESS Response going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled)\r
227                 \r
228                 } catch (Exception ex) {\r
229                         String exceptionMessage = " Bpmn error encountered in CreateNetworkInstance flow. prepareCompletion() - " + ex.getMessage()\r
230                         utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
231                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
232 \r
233                 }\r
234 \r
235 \r
236         }\r
237         \r
238         public void prepareDBRequestError (Execution execution) {\r
239                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
240                 execution.setVariable("prefix", Prefix)\r
241 \r
242                 try {\r
243                         utils.log("DEBUG", " ***** Inside prepareDBRequestError of DeleteNetworkInstance ***** ", isDebugEnabled)\r
244 \r
245                         WorkflowException wfe = execution.getVariable("WorkflowException")\r
246                         String statusMessage = wfe.getErrorMessage()\r
247                         String requestId = execution.getVariable(Prefix +"requestId")\r
248 \r
249                         String dbRequest =\r
250                                         """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">\r
251                                                 <soapenv:Header/>\r
252                                                 <soapenv:Body>\r
253                                                         <ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb">\r
254                                                                 <requestId>${requestId}</requestId>\r
255                                                                 <lastModifiedBy>BPMN</lastModifiedBy>\r
256                                                                 <statusMessage>${statusMessage}</statusMessage>\r
257                                                                 <responseBody></responseBody>\r
258                                                                 <requestStatus>FAILED</requestStatus>\r
259                                                                 <progress></progress>\r
260                                                                 <vnfOutputs>&lt;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"/&gt;</vnfOutputs>\r
261                                                         </ns:updateInfraRequest>\r
262                                                 </soapenv:Body>\r
263                                            </soapenv:Envelope>"""\r
264 \r
265                    execution.setVariable(Prefix + "deleteDBRequest", dbRequest)\r
266                    utils.log("DEBUG", " DB Adapter Request - " + "\n" + dbRequest, isDebugEnabled)\r
267 \r
268                 } catch (Exception ex) {\r
269                         // caught exception\r
270                         String exceptionMessage = "Bpmn error encountered in  DeleteNetworkInstance, prepareDBRequestError() - " + ex.getMessage()\r
271                         logError(exceptionMessage)\r
272                         utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
273                         exceptionUtil.buildWorkflowException(execution, 7000, exceptionMessage)\r
274 \r
275                 }\r
276 \r
277          }\r
278 \r
279         // **************************************************\r
280         //     Post or Validate Response Section\r
281         // **************************************************\r
282 \r
283         public void postProcessResponse (Execution execution) {\r
284                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
285                 execution.setVariable("prefix", Prefix)\r
286         \r
287                 utils.log("DEBUG", " ***** Inside postProcessResponse() of DeleteNetworkInstance ***** ", isDebugEnabled)\r
288                 \r
289                 try {\r
290                         if (execution.getVariable("CMSO_ResponseCode") == "200") {\r
291                            execution.setVariable(Prefix + "Success", true)\r
292                            utils.log("DEBUG", " ***** DeleteNetworkInstance Success ***** ", isDebugEnabled)\r
293                            //   Place holder for additional code.\r
294                            \r
295                         } else {\r
296                            execution.setVariable(Prefix + "Success", false)\r
297                            utils.log("DEBUG", " ***** DeleteNetworkInstance Failed in CompletionMsoProces flow!. ***** ", isDebugEnabled)\r
298                         \r
299                         }   \r
300                         \r
301         \r
302                 } catch (Exception ex) {\r
303                         String exceptionMessage = " Bpmn error encountered in DeleteNetworkInstance flow. postProcessResponse() - " + ex.getMessage()\r
304                         utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
305                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
306         \r
307             }\r
308         \r
309         }\r
310 \r
311 \r
312         // *******************************\r
313         //     Build Error Section\r
314         // *******************************\r
315 \r
316         // Prepare for FalloutHandler\r
317         public void buildErrorResponse (Execution execution) {\r
318                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
319                 execution.setVariable("prefix", Prefix)\r
320 \r
321                 utils.log("DEBUG", " ***** Prepare for FalloutHandler. FAILURE - prepare request for sub-process FalloutHandler. *****", isDebugEnabled)\r
322 \r
323                 String dbReturnCode = execution.getVariable(Prefix + "dbReturnCode")\r
324                 utils.log("DEBUG", " ***** DB Update Response Code  : " + dbReturnCode, isDebugEnabled)\r
325                 utils.log("DEBUG", " ***** DB Update Response String: " + '\n' + execution.getVariable(Prefix + "deleteDBResponse"), isDebugEnabled)\r
326 \r
327                 String falloutHandlerRequest = ""\r
328                 String requestId = execution.getVariable("mso-request-id")\r
329                 String source = execution.getVariable(Prefix + "source")\r
330                 execution.setVariable(Prefix + "Success", false)\r
331                 try {\r
332                         WorkflowException wfe = execution.getVariable("WorkflowException")\r
333                         String errorCode = String.valueOf(wfe.getErrorCode())\r
334                         String errorMessage = wfe.getErrorMessage()\r
335 \r
336                         falloutHandlerRequest =\r
337                             """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"\r
338                                                                      xmlns:ns="http://org.openecomp/mso/request/types/v1"\r
339                                                                      xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1">\r
340                                            <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">\r
341                                               <request-id>${requestId}</request-id>\r
342                                               <action>DELETE</action>\r
343                                               <source>${source}</source>\r
344                                            </request-info>\r
345                                                 <aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">\r
346                                                         <aetgt:ErrorMessage>${errorMessage}</aetgt:ErrorMessage>\r
347                                                         <aetgt:ErrorCode>${errorCode}</aetgt:ErrorCode>\r
348                                                 </aetgt:WorkflowException>\r
349                                         </aetgt:FalloutHandlerRequest>"""\r
350 \r
351                         utils.logAudit(falloutHandlerRequest)\r
352                         execution.setVariable(Prefix + "FalloutHandlerRequest", falloutHandlerRequest)\r
353                         utils.log("ERROR", "  Overall Error Response going to FalloutHandler: " + "\n" + falloutHandlerRequest, isDebugEnabled)\r
354 \r
355                 } catch (Exception ex) {\r
356                         // caught exception\r
357                         String exceptionMessage = "Bpmn error encountered in DeleteNetworkInstance, buildErrorResponse() - " + ex.getMessage()\r
358                         utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
359                         falloutHandlerRequest =\r
360                         """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"\r
361                                                                      xmlns:ns="http://org.openecomp/mso/request/types/v1"\r
362                                                                      xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1">\r
363                                            <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">\r
364                                               <request-id>${requestId}</request-id>\r
365                                               <action>DELEtE</action>\r
366                                               <source>${source}</source>\r
367                                            </request-info>\r
368                                                 <aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">\r
369                                                         <aetgt:ErrorMessage>${exceptionMessage}</aetgt:ErrorMessage>\r
370                                                         <aetgt:ErrorCode>9999</aetgt:ErrorCode>\r
371                                                 </aetgt:WorkflowException>\r
372                                         </aetgt:FalloutHandlerRequest>"""\r
373                         execution.setVariable(Prefix + "FalloutHandlerRequest", falloutHandlerRequest)\r
374                         utils.log("DEBUG", "  Overall Error Response going to FalloutHandler: " + "\n" + falloutHandlerRequest, isDebugEnabled)\r
375                 }\r
376         }\r
377 \r
378 \r
379         public void sendSyncError (Execution execution) {\r
380                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
381                 execution.setVariable("prefix", Prefix)\r
382 \r
383                 try {\r
384                         String requestId = execution.getVariable("mso-request-id")\r
385                         String serviceInstanceId = execution.getVariable("serviceInstanceId")\r
386 \r
387                         // RESTResponse (for API Handler (APIH) Reply Task)\r
388                         String deleteNetworkRestError = """{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim()\r
389 \r
390                         utils.log("DEBUG", " sendSyncResponse to APIH - " + "\n" + deleteNetworkRestError, isDebugEnabled)\r
391 \r
392                         sendWorkflowResponse(execution, 500, deleteNetworkRestError)\r
393 \r
394                 } catch (Exception ex) {\r
395                         utils.log("DEBUG", " Sending Sync Error Activity Failed -  DeleteNetworkInstance, sendSyncError(): " + "\n" + ex.getMessage(), isDebugEnabled)\r
396                 }\r
397         }\r
398 \r
399         public void processJavaException(Execution execution){\r
400                 def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
401                 execution.setVariable("prefix",Prefix)\r
402                 try{\r
403                         utils.log("DEBUG", "Caught a Java Exception", isDebugEnabled)\r
404                         utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled)\r
405                         utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled)\r
406                         execution.setVariable("UnexpectedError", "Caught a Java Lang Exception")  // Adding this line temporarily until this flows error handling gets updated\r
407                         exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")\r
408                         \r
409                 }catch(Exception e){\r
410                         utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled)\r
411                         execution.setVariable("UnexpectedError", "Exception in processJavaException method")  // Adding this line temporarily until this flows error handling gets updated\r
412                         exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method")\r
413                 }\r
414                 utils.log("DEBUG", "Completed processJavaException Method of " + Prefix, isDebugEnabled)\r
415         }\r
416 \r
417 }\r