Groovy scripts header correction
[so.git] / bpmn / MSOCommonBPMN / src / main / groovy / org / openecomp / mso / bpmn / common / scripts / SDNCAdapterUtils.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 \r
21 package org.openecomp.mso.bpmn.common.scripts;\r
22 \r
23 import org.apache.commons.lang3.*\r
24 import org.camunda.bpm.engine.delegate.BpmnError\r
25 import org.camunda.bpm.engine.runtime.Execution\r
26 import org.openecomp.mso.bpmn.core.WorkflowException\r
27 import org.openecomp.mso.bpmn.core.json.JsonUtils;\r
28 import org.springframework.web.util.UriUtils\r
29 \r
30 \r
31 /**\r
32  * @version 1.0\r
33  *\r
34  */\r
35 class SDNCAdapterUtils {\r
36 \r
37         ExceptionUtil exceptionUtil = new ExceptionUtil()\r
38         JsonUtils jsonUtil = new JsonUtils()\r
39 \r
40         private AbstractServiceTaskProcessor taskProcessor\r
41 \r
42         public SDNCAdapterUtils(AbstractServiceTaskProcessor taskProcessor) {\r
43                 this.taskProcessor = taskProcessor\r
44         }\r
45 \r
46         String SDNCAdapterFeatureRequest(Execution execution, String requestName, String action, String callbackURL, String serviceOperation, String timeoutValueInMinutes) {\r
47                 def utils=new MsoUtils()\r
48 \r
49                 def prefix = execution.getVariable('prefix')\r
50                 def request = taskProcessor.getVariable(execution, requestName)\r
51                 def requestInformation = utils.getNodeXml(request, 'request-information', false)\r
52                 def serviceInformation = utils.getNodeXml(request, 'service-information', false)\r
53                 def featureInformation = utils.getNodeXml(request, 'feature-information', false)\r
54                 def featureParameters = utils.getNodeXml(request, 'feature-parameters', false)\r
55 \r
56                 def requestId = execution.getVariable('testReqId') // for junits\r
57                 if(requestId==null){\r
58                         requestId = execution.getVariable("mso-request-id") + "-" +     System.currentTimeMillis()\r
59                 }\r
60 \r
61                 def svcInstanceId = execution.getVariable("mso-service-instance-id")\r
62 \r
63                 def nnsRequestInformation = utils.removeXmlNamespaces(requestInformation)\r
64                 def nnsServiceInformation = utils.removeXmlNamespaces(serviceInformation)\r
65                 def nnsFeatureInformation = utils.removeXmlNamespaces(featureInformation)\r
66                 def nnsFeatureParameters = utils.removeXmlNamespaces(featureParameters)\r
67 \r
68                 String sdncAdapterFeatureRequest = """\r
69                                 <sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:sdncadapterworkflow="http://openecomp.com/mso/workflow/schema/v1"\r
70                                                 xmlns:sdncadapter="http://domain2.openecomp.com/workflow/sdnc/adapter/schema/v1">\r
71                                         <sdncadapter:RequestHeader>\r
72                                                 <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId>\r
73                                                 <sdncadapter:SvcInstanceId>${svcInstanceId}</sdncadapter:SvcInstanceId>\r
74                                                 <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction>\r
75                                                 <sdncadapter:SvcOperation>${serviceOperation}</sdncadapter:SvcOperation>\r
76                                                 <sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl>\r
77                                         </sdncadapter:RequestHeader>\r
78                                         <sdncadapterworkflow:SDNCRequestData>\r
79                                                 ${nnsRequestInformation}\r
80                                                 ${nnsServiceInformation}\r
81                                                 ${nnsFeatureInformation}\r
82                                                 ${nnsFeatureParameters}\r
83                                         </sdncadapterworkflow:SDNCRequestData>\r
84                                         <sdncadapterworkflow:SDNCTimeOutValueInMinutes>${timeoutValueInMinutes}</sdncadapterworkflow:SDNCTimeOutValueInMinutes>\r
85                                 </sdncadapterworkflow:SDNCAdapterWorkflowRequest>\r
86                         """\r
87                 sdncAdapterFeatureRequest = utils.removeXmlPreamble(utils.formatXML(sdncAdapterFeatureRequest))\r
88                 return sdncAdapterFeatureRequest\r
89         }\r
90 \r
91         String SDNCAdapterActivateVnfRequest(Execution execution, String action, String callbackURL, String serviceOperation, String msoAction, String timeoutValueInMinutes) {\r
92                 def utils=new MsoUtils()\r
93 \r
94                 def prefix = execution.getVariable('prefix')\r
95                 def request = taskProcessor.getVariable(execution, prefix+'Request')\r
96                 def requestInformation = utils.getNodeXml(request, 'request-information', false)\r
97                 def serviceInformation = utils.getNodeXml(request, 'service-information', false)\r
98                 def vnfInformationList = utils.getNodeXml(request, 'vnf-information-list', false)\r
99 \r
100                 def requestId = execution.getVariable('testReqId') // for junits\r
101                 if(requestId==null){\r
102                         requestId = execution.getVariable("mso-request-id") + "-" +     System.currentTimeMillis()\r
103                 }\r
104 \r
105                 def svcInstanceId = execution.getVariable("mso-service-instance-id")\r
106 \r
107                 def nnsRequestInformation = utils.removeXmlNamespaces(requestInformation)\r
108                 def nnsServiceInformation = utils.removeXmlNamespaces(serviceInformation)\r
109                 def nnsVnfInformationList = utils.removeXmlNamespaces(vnfInformationList)\r
110 \r
111                 String sdncAdapterActivateVnfRequest = """\r
112                                 <sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:sdncadapterworkflow="http://openecomp.com/mso/workflow/schema/v1"\r
113                                                 xmlns:sdncadapter="http://domain2.openecomp.com/workflow/sdnc/adapter/schema/v1">\r
114                                         <sdncadapter:RequestHeader>\r
115                                                 <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId>\r
116                                                 <sdncadapter:SvcInstanceId>${svcInstanceId}</sdncadapter:SvcInstanceId>\r
117                                                 <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction>\r
118                                                 <sdncadapter:SvcOperation>${serviceOperation}</sdncadapter:SvcOperation>\r
119                                                 <sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl>\r
120                                                 <sdncadapter:MsoAction>${msoAction}</sdncadapter:MsoAction>\r
121                                         </sdncadapter:RequestHeader>\r
122                                         <sdncadapterworkflow:SDNCRequestData>\r
123                                                 ${nnsRequestInformation}\r
124                                                 ${nnsServiceInformation}\r
125                                                 ${nnsVnfInformationList}\r
126                                         </sdncadapterworkflow:SDNCRequestData>\r
127                                         <sdncadapterworkflow:SDNCTimeOutValueInMinutes>${timeoutValueInMinutes}</sdncadapterworkflow:SDNCTimeOutValueInMinutes>\r
128                                 </sdncadapterworkflow:SDNCAdapterWorkflowRequest>\r
129                         """\r
130                 sdncAdapterActivateVnfRequest = utils.removeXmlPreamble(utils.formatXML(sdncAdapterActivateVnfRequest))\r
131                 return sdncAdapterActivateVnfRequest\r
132         }\r
133 \r
134         String SDNCAdapterL3ToHigherLayerRequest(Execution execution, String action, String callbackURL, String serviceOperation, String timeoutValueInMinutes) {\r
135                 def utils=new MsoUtils()\r
136 \r
137                 def prefix = execution.getVariable('prefix')\r
138                 def request = taskProcessor.getVariable(execution, prefix+'Request')\r
139 \r
140                 def requestInformation = """<request-information>\r
141                                                                                 <request-id>${execution.getVariable("mso-request-id")}</request-id>\r
142                                                                                 <request-action>torepl</request-action>\r
143                                                                                 <source>${execution.getVariable(prefix+"source")}</source>\r
144                                                                                 <notification-url>${execution.getVariable(prefix+"notificationUrl")}</notification-url>\r
145                                                                         </request-information>"""\r
146 \r
147                 // Change the value of the 'request-information'.'request-action' element\r
148                 def xml = new XmlSlurper().parseText(requestInformation)\r
149                 if("assign".equalsIgnoreCase(action)){\r
150                         xml.'request-action'.replaceBody('createTrinityBonding')\r
151                 }else if("activate".equalsIgnoreCase(action)){\r
152                         xml.'request-action'.replaceBody('activateTrinityBonding')\r
153                 }else if("delete".equalsIgnoreCase(action)){\r
154                         xml.'request-action'.replaceBody('deleteTrinityBonding')\r
155                 }\r
156                 requestInformation = utils.removeXmlPreamble(groovy.xml.XmlUtil.serialize(xml))\r
157                 def nnsRequestInformation = utils.removeXmlNamespaces(requestInformation)\r
158 \r
159                 def requestId = execution.getVariable('testReqId') // for junits\r
160                 if(requestId==null){\r
161                         requestId = execution.getVariable("mso-request-id") + "-" +     System.currentTimeMillis()\r
162                 }\r
163 \r
164                 def svcInstanceId = execution.getVariable("mso-service-instance-id")\r
165 \r
166                 //Build Service Information\r
167                 // Send serviceName from CANOPI to sdnc for service-type\r
168                 def serviceInformation = """<service-information>\r
169                                                                               <service-type>${execution.getVariable(prefix+"serviceName")}</service-type>\r
170                                                                               <service-instance-id>${svcInstanceId}</service-instance-id>\r
171                                                                               <subscriber-name>${execution.getVariable(prefix+"subscriberName")}</subscriber-name>\r
172                                                                               <subscriber-global-id>${execution.getVariable(prefix+"subscriberGlobalId")}</subscriber-global-id>\r
173                                                                         </service-information>"""\r
174 \r
175                 //Build Additional Information - vpn or vni\r
176                 // Send serviceType from CANOPI to SDNC for nbnc-request-information service-type\r
177                 def service = execution.getVariable(prefix+"serviceType")\r
178                 def customerId = execution.getVariable(prefix+"customerId")\r
179                 def vpnId = execution.getVariable(prefix+"vpnId")\r
180                 def vpnRt = execution.getVariable(prefix+"vpnRt")\r
181                 def vpnService = execution.getVariable(prefix+"vpnService")\r
182                 def vpnRegion = execution.getVariable(prefix+"vpnRegion")\r
183                 def additionalInfo = ""\r
184                 if("assign".equalsIgnoreCase(action)){\r
185                         additionalInfo = """<vpn-data-list>\r
186                                                                         <vpn-id>${vpnId}</vpn-id>\r
187                                                                         <vpn-rt>${vpnRt}</vpn-rt>\r
188                                                                         <vpn-service>${vpnService}</vpn-service>\r
189                                                                         <vpn-region>${vpnRegion}</vpn-region>\r
190                                                                 </vpn-data-list>"""\r
191                 }else if("activate".equalsIgnoreCase(action) || "delete".equalsIgnoreCase(action)){\r
192                         def vniId = execution.getVariable(prefix+'vniId')\r
193                         additionalInfo = "<vni-id>${vniId}</vni-id>"\r
194                 }\r
195 \r
196                 //Set Interface Status\r
197                 def interfaceStatus = "DISABLE"\r
198                 if("activate".equalsIgnoreCase(action)){\r
199                         interfaceStatus = "ENABLE"\r
200                 }\r
201 \r
202                 //Build SDNC Adapter Request\r
203                 String sdncAdapterL3ToHLRequest = """\r
204                                 <sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:sdncadapterworkflow="http://openecomp.com/mso/workflow/schema/v1"\r
205                                                 xmlns:sdncadapter="http://domain2.openecomp.com/workflow/sdnc/adapter/schema/v1">\r
206                                         <sdncadapter:RequestHeader>\r
207                                                 <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId>\r
208                                                 <sdncadapter:SvcInstanceId>${svcInstanceId}</sdncadapter:SvcInstanceId>\r
209                                                 <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction>\r
210                                                 <sdncadapter:SvcOperation>${serviceOperation}</sdncadapter:SvcOperation>\r
211                                                 <sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl>\r
212                                         </sdncadapter:RequestHeader>\r
213                                         <sdncadapterworkflow:SDNCRequestData>\r
214                                                 ${nnsRequestInformation}\r
215                                                 ${serviceInformation}\r
216                                 <nbnc-request-information>\r
217                                                         <service-type>${service}</service-type>\r
218                                                         <customer-id>${customerId}</customer-id>\r
219                                                         <interface-status>${interfaceStatus}</interface-status>\r
220                                                         ${additionalInfo}\r
221                                                 </nbnc-request-information>\r
222                                         </sdncadapterworkflow:SDNCRequestData>\r
223                                         <sdncadapterworkflow:SDNCTimeOutValueInMinutes>${timeoutValueInMinutes}</sdncadapterworkflow:SDNCTimeOutValueInMinutes>\r
224                                 </sdncadapterworkflow:SDNCAdapterWorkflowRequest>\r
225                         """\r
226                 sdncAdapterL3ToHLRequest = utils.removeXmlPreamble(utils.formatXML(sdncAdapterL3ToHLRequest))\r
227 \r
228                 return sdncAdapterL3ToHLRequest\r
229         }\r
230 \r
231 \r
232 \r
233         private void SDNCAdapterActivateRequest(Execution execution, String resultVar, String svcAction,\r
234                         String svcOperation, String additionalData) {\r
235                         def utils=new MsoUtils()\r
236 \r
237                         def prefix = execution.getVariable('prefix')\r
238                         def request = taskProcessor.getVariable(execution, prefix+'Request')\r
239                         def requestInformation = utils.getNodeXml(request, 'request-information', false)\r
240                         def serviceInformation = utils.getNodeXml(request, 'service-information', false)\r
241                         def serviceParameters = utils.getNodeXml(request, 'service-parameters', false)\r
242 \r
243                         def requestId = execution.getVariable('testReqId') // for junits\r
244                         if(requestId==null){\r
245                                 requestId = execution.getVariable("mso-request-id") + "-" +  System.currentTimeMillis()\r
246                         }\r
247 \r
248                         def svcInstanceId = execution.getVariable("mso-service-instance-id")\r
249                         def msoAction = 'gammainternet'\r
250 \r
251                         def timeoutInMinutes = execution.getVariable('URN_mso_sdnc_timeout_firewall_minutes')\r
252 \r
253                         def callbackUrl = (String) execution.getVariable('URN_mso_workflow_sdncadapter_callback')\r
254                         if (callbackUrl == null || callbackUrl.trim() == "") {\r
255                                 logError('mso:workflow:sdncadapter:callback URN is not set')\r
256                                 workflowException(execution, 'Internal Error', 9999) // TODO: what message and error code?\r
257                         }\r
258 \r
259                         def l2HomingInformation = utils.getNodeXml(serviceParameters, 'l2-homing-information', false)\r
260                         def internetEvcAccessInformation = utils.getNodeXml(serviceParameters, 'internet-evc-access-information', false)\r
261                         def vrLan = utils.getNodeXml(serviceParameters, 'vr-lan', false)\r
262                         def upceVmsServiceInformation = utils.getNodeXml(serviceParameters, 'ucpe-vms-service-information', false)\r
263 \r
264 \r
265                         def nnsRequestInformation = utils.removeXmlNamespaces(requestInformation)\r
266                         def nnsServiceInformation = utils.removeXmlNamespaces(serviceInformation)\r
267                         def nnsl2HomingInformation = utils.removeXmlNamespaces(l2HomingInformation)\r
268                         def nnsInternetEvcAccessInformation = utils.removeXmlNamespaces(internetEvcAccessInformation)\r
269                         def nnsVrLan = utils.removeXmlNamespaces(vrLan)\r
270                         def nnsUpceVmsServiceInformation = utils.removeXmlNamespaces(upceVmsServiceInformation)\r
271 \r
272                         if (additionalData == null) {\r
273                                 additionalData = ""\r
274                         }\r
275 \r
276                         String content = """\r
277                                 <sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:sdncadapterworkflow="http://openecomp.com/mso/workflow/schema/v1"\r
278                                                 xmlns:sdncadapter="http://domain2.openecomp.com/workflow/sdnc/adapter/schema/v1">\r
279                                         <sdncadapter:RequestHeader>\r
280                                                 <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId>\r
281                                                 <sdncadapter:SvcInstanceId>${svcInstanceId}</sdncadapter:SvcInstanceId>\r
282                                                 <sdncadapter:SvcAction>${svcAction}</sdncadapter:SvcAction>\r
283                                                 <sdncadapter:SvcOperation>${svcOperation}</sdncadapter:SvcOperation>\r
284                                                 <sdncadapter:CallbackUrl>${callbackUrl}</sdncadapter:CallbackUrl>\r
285                                                 <sdncadapter:MsoAction>${msoAction}</sdncadapter:MsoAction>\r
286                                         </sdncadapter:RequestHeader>\r
287                                         <sdncadapterworkflow:SDNCRequestData>\r
288                                                 ${additionalData}\r
289                                                 ${nnsRequestInformation}\r
290                                                 ${nnsServiceInformation}\r
291                                                 ${nnsl2HomingInformation}\r
292                                                 ${nnsInternetEvcAccessInformation}\r
293                                                 ${nnsVrLan}\r
294                                                 ${nnsUpceVmsServiceInformation}\r
295                                         </sdncadapterworkflow:SDNCRequestData>\r
296                                                 <sdncadapterworkflow:SDNCTimeOutValueInMinutes>${timeoutInMinutes}</sdncadapterworkflow:SDNCTimeOutValueInMinutes>\r
297                                 </sdncadapterworkflow:SDNCAdapterWorkflowRequest>\r
298                         """\r
299 \r
300                         content = utils.removeXmlPreamble(utils.formatXML(content))\r
301                         execution.setVariable(resultVar, content)\r
302         }\r
303 \r
304         /**\r
305          * Builds an SDNC "reserve" request and stores it in the specified execution\r
306          * variable.\r
307          * @param execution the execution\r
308          * @param resultVar the execution variable in which the result will be stored\r
309          */\r
310         public void sdncReservePrep(Execution execution, String action, String resultVar) {\r
311                 sdncPrep(execution, resultVar, action , 'service-configuration-operation', null, this.taskProcessor)\r
312         }\r
313 \r
314         /**\r
315          * Builds a basic SDNC request and stores it in the specified execution variable.\r
316          * @param execution the execution\r
317          * @param resultVar the execution variable in which the result will be stored\r
318          * @param svcAction the svcAction element value\r
319          * @param svcOperation the svcOperation element value\r
320          * @param additionalData additional XML content to be inserted into the\r
321          *        RequestData element (may be null)\r
322          */\r
323         public void sdncPrep(Execution execution, String resultVar, String svcAction,\r
324                         String svcOperation, String additionalData, AbstractServiceTaskProcessor taskProcessor) {\r
325                 def method = getClass().getSimpleName() + '.sdncPrep(' +\r
326                         'execution=' + execution.getId() +\r
327                         ', resultVar=' + resultVar +\r
328                         ', svcAction=' + svcAction +\r
329                         ', svcOperation=' + svcOperation +\r
330                         ', additionalData=' + (additionalData == null ? "no" : "yes") +\r
331                         ')'\r
332 \r
333                 def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')\r
334                 taskProcessor.logDebug('Entered ' + method, isDebugLogEnabled)\r
335                 MsoUtils utils = taskProcessor.utils\r
336                 try {\r
337                         def prefix = execution.getVariable('prefix')\r
338                         def request = taskProcessor.getVariable(execution, prefix+'Request')\r
339                         def requestInformation = utils.getNodeXml(request, 'request-information', false)\r
340                         def serviceInformation = utils.getNodeXml(request, 'service-information', false)\r
341                         def serviceParameters = utils.getChildNodes(request, 'service-parameters')\r
342                         def requestAction = utils.getNodeText1(request, 'request-action')\r
343 \r
344                         def timeoutInMinutes = execution.getVariable('URN_mso_sdnc_timeout_firewall_minutes')\r
345 \r
346                         def requestId = execution.getVariable('testReqId') // for junits\r
347                         if(requestId==null){\r
348                                 requestId = execution.getVariable("mso-request-id") + "-" +     System.currentTimeMillis()\r
349                         }\r
350 \r
351                         def svcInstanceId = execution.getVariable("mso-service-instance-id")\r
352                         def msoAction = 'gammainternet'\r
353 \r
354                         def callbackUrl = (String) execution.getVariable('URN_mso_workflow_sdncadapter_callback')\r
355                         if (callbackUrl == null || callbackUrl.trim() == "") {\r
356                                 taskProcessor.logError('mso:workflow:sdncadapter:callback URN is not set')\r
357                                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Internal Error - During PreProcess Request")\r
358                         }\r
359 \r
360                         def l2HomingInformation = utils.getNodeXml(request, 'l2-homing-information', false)\r
361                         def internetEvcAccessInformation = utils.getNodeXml(request, 'internet-evc-access-information', false)\r
362                         def vrLan = utils.getNodeXml(request, 'vr-lan', false)\r
363                         def upceVmsServiceInfo = utils.getNodeXml(request, 'ucpe-vms-service-information', false)\r
364                         def vnfInformationList = utils.getNodeXml(request, 'vnf-information-list', false)\r
365 \r
366                         def nnsRequestInformation = utils.removeXmlNamespaces(requestInformation)\r
367                         def nnsServiceInformation = utils.removeXmlNamespaces(serviceInformation)\r
368                         def nnsl2HomingInformation = utils.removeXmlNamespaces(l2HomingInformation)\r
369                         def nnsInternetEvcAccessInformation = utils.removeXmlNamespaces(internetEvcAccessInformation)\r
370                         def nnsVrLan = utils.removeXmlNamespaces(vrLan)\r
371                         def nnsUpceVmsServiceInfo = utils.removeXmlNamespaces(upceVmsServiceInfo)\r
372                         def nnsVnfInformationList = utils.removeXmlNamespaces(vrLan)\r
373                         def nnsinternetSvcChangeDetails = ""\r
374 \r
375                         if(requestAction!=null && requestAction.equals("ChangeLayer3ServiceProvRequest")){\r
376                                 def internetSvcChangeDetails = utils.removeXmlNamespaces(serviceParameters)\r
377                                 nnsinternetSvcChangeDetails = """<internet-service-change-details>\r
378                                                         ${internetSvcChangeDetails}\r
379                                                 </internet-service-change-details>"""\r
380                         }\r
381 \r
382                         if (additionalData == null) {\r
383                                 additionalData = ""\r
384                         }\r
385 \r
386                         String content = """\r
387                                 <sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:sdncadapterworkflow="http://openecomp.com/mso/workflow/schema/v1"\r
388                                                 xmlns:sdncadapter="http://domain2.openecomp.com/workflow/sdnc/adapter/schema/v1">\r
389                                         <sdncadapter:RequestHeader>\r
390                                                 <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId>\r
391                                                 <sdncadapter:SvcInstanceId>${svcInstanceId}</sdncadapter:SvcInstanceId>\r
392                                                 <sdncadapter:SvcAction>${svcAction}</sdncadapter:SvcAction>\r
393                                                 <sdncadapter:SvcOperation>${svcOperation}</sdncadapter:SvcOperation>\r
394                                                 <sdncadapter:CallbackUrl>${callbackUrl}</sdncadapter:CallbackUrl>\r
395                                                 <sdncadapter:MsoAction>${msoAction}</sdncadapter:MsoAction>\r
396                                         </sdncadapter:RequestHeader>\r
397                                         <sdncadapterworkflow:SDNCRequestData>\r
398                                                 ${additionalData}\r
399                                                 ${nnsRequestInformation}\r
400                                                 ${nnsServiceInformation}\r
401                                                 ${nnsl2HomingInformation}\r
402                                                 ${nnsInternetEvcAccessInformation}\r
403                                                 ${nnsVrLan}\r
404                                                 ${nnsUpceVmsServiceInfo}\r
405                                                 ${nnsVnfInformationList}\r
406                                                 ${nnsinternetSvcChangeDetails}\r
407                                         </sdncadapterworkflow:SDNCRequestData>\r
408                                 </sdncadapterworkflow:SDNCAdapterWorkflowRequest>\r
409                         """\r
410 \r
411                         content = utils.removeXmlPreamble(utils.formatXML(content))\r
412                         execution.setVariable(resultVar, content)\r
413                         taskProcessor.logDebug(resultVar + ' = ' + System.lineSeparator() + content, isDebugLogEnabled)\r
414 \r
415                         taskProcessor.logDebug('Exited ' + method, isDebugLogEnabled)\r
416                 } catch (BpmnError e) {\r
417                         throw e;\r
418                 } catch (Exception e) {\r
419                         taskProcessor.logError('Caught exception in ' + method, e)\r
420                         exceptionUtil.buildAndThrowWorkflowException(execution, 5000, "Internal Error")\r
421                 }\r
422         }\r
423 \r
424         /**\r
425          * Builds a topology SDNC request and return String request.\r
426          * As V2 will use 1607-style request, region instead of aic clli code\r
427          * @param execution, the execution\r
428          * @param requestXML, the incoming request for the flow\r
429          * @param serviceInstanceId, the serviceIntance (if available)\r
430          * @param callbackUrl, the call back url\r
431          * @param action, the action element value\r
432          * @param requestAction the svcOperation element value\r
433          * @param cloudRegionId the aai's cloud-region-id\r
434          * @param networkId the aai's network-id\r
435          * @param additionalData additional XML content to be inserted into the\r
436          *   RequestData element (may be null)\r
437          */\r
438          public String sdncTopologyRequestV2 (Execution execution, String requestXML, String serviceInstanceId, String callbackUrl, String action, String requestAction, String cloudRegionId, networkId, String queryAAIResponse, String additionalData) {\r
439                  def utils=new MsoUtils()\r
440 \r
441                  // SNDC is expecting request Id for header as unique each call.\r
442                  String hdrRequestId = ""\r
443                  String testHdrRequestId = execution.getVariable("testMessageId")  // for test purposes.\r
444                  if (testHdrRequestId == null) {\r
445                          hdrRequestId = UUID.randomUUID()  // generate unique\r
446                  } else {\r
447                          hdrRequestId = testHdrRequestId\r
448                  }\r
449                  \r
450                  String requestId = ""\r
451                  try {\r
452                          requestId = execution.getVariable("mso-request-id")\r
453                  } catch (Exception ex) {\r
454                          requestId = utils.getNodeText1(requestXML, "request-id")\r
455                  }\r
456 \r
457                  String aicCloudRegion = cloudRegionId\r
458                  String tenantId = ""\r
459                  if (utils.nodeExists(requestXML, "tenant-id")) {\r
460                          tenantId = utils.getNodeText1(requestXML, "tenant-id")\r
461                  }\r
462                  String networkType = ""\r
463                  if (utils.nodeExists(requestXML, "network-type")) {\r
464                          networkType = utils.getNodeText1(requestXML, "network-type")\r
465                  }\r
466 \r
467                  // Replace/Use the value of network-type from aai query (vs input) during Delete Network flows.\r
468                  if (queryAAIResponse != null) {\r
469                      networkType = utils.getNodeText1(queryAAIResponse, "network-type")\r
470                  }\r
471 \r
472                  String serviceId = ""\r
473                  if (utils.nodeExists(requestXML, "service-id")) {\r
474                          serviceId = utils.getNodeText1(requestXML, "service-id")\r
475                  }\r
476                  String networkName = ""\r
477                  if (utils.nodeExists(requestXML, "network-name")) {\r
478                          networkName = utils.getNodeText1(requestXML, "network-name")\r
479                  }\r
480                  String source = ""\r
481                  if (utils.nodeExists(requestXML, "source")) {\r
482                          source = utils.getNodeText1(requestXML, "source")\r
483                  }\r
484 \r
485                  // get resourceLink from subflow execution variable\r
486                  String serviceType = ""\r
487                  String subscriberName = ""\r
488                  String siRelatedLink = execution.getVariable("GENGSI_siResourceLink")\r
489                  if (siRelatedLink != null) {\r
490                          // get service type\r
491                          int serviceStart = siRelatedLink.indexOf("service-subscription/")\r
492                          int serviceEnd = siRelatedLink.indexOf("/service-instances/")\r
493                          serviceType = siRelatedLink.substring(serviceStart + 21, serviceEnd)\r
494                          serviceType = UriUtils.decode(serviceType,"UTF-8")\r
495                          // get subscriber name\r
496                          int subscriberNameStart = siRelatedLink.indexOf("customers/customer/")\r
497                          int subscriberNameEnd = siRelatedLink.indexOf("/service-subscriptions/")\r
498                      subscriberName = siRelatedLink.substring(subscriberNameStart + 19, subscriberNameEnd)\r
499                          subscriberName = UriUtils.decode(subscriberName,"UTF-8")\r
500                  }\r
501 \r
502                  String content =\r
503                         """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"\r
504                                                   xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"\r
505                                                   xmlns:sdncadapter="http://org.openecomp.mso/workflow/sdnc/adapter/schema/v1"\r
506                                                   xmlns:ns5="http://org.openecomp/mso/request/types/v1">\r
507                                            <sdncadapter:RequestHeader>\r
508                                                   <sdncadapter:RequestId>${hdrRequestId}</sdncadapter:RequestId>\r
509                                                   <sdncadapter:SvcInstanceId>${serviceInstanceId}</sdncadapter:SvcInstanceId>\r
510                                                   <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction>\r
511                                                   <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>\r
512                                                   <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>\r
513                                            </sdncadapter:RequestHeader>\r
514                                            <sdncadapterworkflow:SDNCRequestData>\r
515                                               <request-information>\r
516                                                     <request-id>${requestId}</request-id>\r
517                                                     <request-action>${requestAction}</request-action>\r
518                                                     <source>${source}</source>\r
519                                                     <notification-url></notification-url>\r
520                                                     <order-number></order-number>\r
521                                                     <order-version></order-version>\r
522                                                  </request-information>\r
523                                                  <service-information>\r
524                                                     <service-id>${serviceId}</service-id>\r
525                                                                 <service-type>${serviceType}</service-type>\r
526                                                     <service-instance-id>${serviceInstanceId}</service-instance-id>\r
527                                                     <subscriber-name>${subscriberName}</subscriber-name>\r
528                                                  </service-information>\r
529                                                  <network-request-information>\r
530                                                     <network-id>${networkId}</network-id>\r
531                                                     <network-type>${networkType}</network-type>\r
532                                                     <network-name>${networkName}</network-name>\r
533                                                     <tenant>${tenantId}</tenant>\r
534                                                     <aic-cloud-region>${aicCloudRegion}</aic-cloud-region>\r
535                                                  </network-request-information>\r
536                                            </sdncadapterworkflow:SDNCRequestData>\r
537                                    </aetgt:SDNCAdapterWorkflowRequest>""".trim()\r
538 \r
539                         return content\r
540          }\r
541 \r
542          /**\r
543           * Builds a topology SDNC request and return String request.\r
544           * As V2 will use 1607-style request, region instead of aic clli code\r
545           * @param execution, the execution\r
546           * @param requestXML, the incoming request for the flow\r
547           * @param serviceInstanceId, the serviceIntance (if available)\r
548           * @param callbackUrl, the call back url\r
549           * @param action, the action element value\r
550           * @param requestAction the svcOperation element value\r
551           * @param cloudRegionId the aai's cloud-region-id\r
552           * @param networkId the aai's network-id\r
553           * @param additionalData additional XML content to be inserted into the\r
554           *   RequestData element (may be null)\r
555           */\r
556           public String sdncTopologyRequestRsrc (Execution execution, String requestXML, String serviceInstanceId, String callbackUrl, String action, String requestAction, String cloudRegionId, networkId, String additionalData) {\r
557                   def utils=new MsoUtils()\r
558 \r
559                   // SNDC is expecting request Id for header as unique each call.\r
560                   String hdrRequestId = ""\r
561                   String testHdrRequestId = execution.getVariable("testMessageId")  // for test purposes.\r
562                   if (testHdrRequestId == null) {\r
563                       hdrRequestId = UUID.randomUUID()  // generate unique\r
564                   } else {\r
565                       hdrRequestId = testHdrRequestId\r
566                   }\r
567 \r
568                   String requestId = ""\r
569                   String testRequestId = execution.getVariable("testMessageId")  // for test purposes.\r
570                   if (testRequestId == null) {\r
571                           requestId = execution.getVariable("mso-request-id")\r
572                           if (requestId == null) {\r
573                                   requestId = execution.getVariable("msoRequestId")\r
574                           }             \r
575                   } else {\r
576                           requestId = testRequestId\r
577                   }               \r
578                   \r
579                   String aicCloudRegion = cloudRegionId\r
580                   String tenantId = ""\r
581                   if (utils.nodeExists(requestXML, "tenant-id")) {\r
582                           tenantId = utils.getNodeText1(requestXML, "tenant-id")\r
583                   }\r
584                   String networkType = ""\r
585                   if (utils.nodeExists(requestXML, "network-type")) {\r
586                           networkType = utils.getNodeText1(requestXML, "network-type")\r
587                   }\r
588 \r
589                   String subscriptionServiceType = ""\r
590                   if (utils.nodeExists(requestXML, "subscription-service-type")) {\r
591                           subscriptionServiceType = utils.getNodeText1(requestXML, "subscription-service-type")\r
592                   }\r
593 \r
594                   String globalCustomerId = ""\r
595                   if (utils.nodeExists(requestXML, "global-customer-id")) {\r
596                           globalCustomerId = utils.getNodeText1(requestXML, "global-customer-id")\r
597                   }\r
598 \r
599                   String serviceId = ""\r
600                   if (utils.nodeExists(requestXML, "service-id")) {\r
601                           serviceId = utils.getNodeText1(requestXML, "service-id")\r
602                   }\r
603                   String networkName = ""\r
604                   if (utils.nodeExists(requestXML, "network-name")) {\r
605                           networkName = utils.getNodeText1(requestXML, "network-name")\r
606                   }\r
607                   String source = ""\r
608                   if (utils.nodeExists(requestXML, "source")) {\r
609                           source = utils.getNodeText1(requestXML, "source")\r
610                   }\r
611 \r
612                   // get resourceLink from subflow execution variable\r
613                   String serviceType = ""\r
614                   String subscriberName = ""\r
615                   String siRelatedLink = execution.getVariable("GENGSI_siResourceLink")\r
616                   if (siRelatedLink != null) {\r
617                           // get service type\r
618                           int serviceStart = siRelatedLink.indexOf("service-subscription/")\r
619                           int serviceEnd = siRelatedLink.indexOf("/service-instances/")\r
620                           serviceType = siRelatedLink.substring(serviceStart + 21, serviceEnd)\r
621                           serviceType = UriUtils.decode(serviceType,"UTF-8")\r
622                           // get subscriber name\r
623                           int subscriberNameStart = siRelatedLink.indexOf("customers/customer/")\r
624                           int subscriberNameEnd = siRelatedLink.indexOf("/service-subscriptions/")\r
625                           subscriberName = siRelatedLink.substring(subscriberNameStart + 19, subscriberNameEnd)\r
626                           subscriberName = UriUtils.decode(subscriberName,"UTF-8")\r
627                   }\r
628 \r
629                   // network-information from 'networkModelInfo' // verify the DB Catalog response\r
630                   String networkModelInfo = utils.getNodeXml(requestXML, "networkModelInfo", false).replace("tag0:","").replace(":tag0","")\r
631                   String modelInvariantUuid = utils.getNodeText1(networkModelInfo, "modelInvariantUuid") !=null ?\r
632                                               utils.getNodeText1(networkModelInfo, "modelInvariantUuid") : ""\r
633                   String modelCustomizationUuid = utils.getNodeText1(networkModelInfo, "modelCustomizationUuid")  !=null ?\r
634                                                   utils.getNodeText1(networkModelInfo, "modelCustomizationUuid")  : ""\r
635                   String modelUuid = utils.getNodeText1(networkModelInfo, "modelUuid") !=null ?\r
636                                      utils.getNodeText1(networkModelInfo, "modelUuid") : ""\r
637                   String modelVersion = utils.getNodeText1(networkModelInfo, "modelVersion") !=null ?\r
638                                             utils.getNodeText1(networkModelInfo, "modelVersion") : ""\r
639                   String modelName = utils.getNodeText1(networkModelInfo, "modelName") !=null ?\r
640                                      utils.getNodeText1(networkModelInfo, "modelName") : ""\r
641 \r
642                  // service-information from 'networkModelInfo' // verify the DB Catalog response\r
643                  String serviceModelInfo = utils.getNodeXml(requestXML, "serviceModelInfo", false).replace("tag0:","").replace(":tag0","")\r
644                  String serviceModelInvariantUuid = utils.getNodeText1(serviceModelInfo, "modelInvariantUuid")  !=null ?\r
645                                                                                     utils.getNodeText1(serviceModelInfo, "modelInvariantUuid")  : ""\r
646                  String serviceModelUuid = utils.getNodeText1(serviceModelInfo, "modelUuid") !=null ?\r
647                                                                utils.getNodeText1(serviceModelInfo, "modelUuid") : ""\r
648                  String serviceModelVersion = utils.getNodeText1(serviceModelInfo, "modelVersion") !=null ?\r
649                                                                   utils.getNodeText1(serviceModelInfo, "modelVersion") : ""\r
650                  String serviceModelName = utils.getNodeText1(serviceModelInfo, "modelName") !=null ?\r
651                                                            utils.getNodeText1(serviceModelInfo, "modelName") : ""\r
652 \r
653 \r
654                   String content =\r
655                   """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"\r
656                                                                     xmlns:sdncadapter="http://org.openecomp.mso/workflow/sdnc/adapter/schema/v1" \r
657                                                     xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">\r
658                                            <sdncadapter:RequestHeader>\r
659                                                   <sdncadapter:RequestId>${hdrRequestId}</sdncadapter:RequestId>\r
660                                                   <sdncadapter:SvcInstanceId>${serviceInstanceId}</sdncadapter:SvcInstanceId>\r
661                                                   <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction>\r
662                                                   <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>\r
663                                                   <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>\r
664                           <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>\r
665                                            </sdncadapter:RequestHeader>\r
666                                            <sdncadapterworkflow:SDNCRequestData>\r
667                                                    <request-information>\r
668                                                       <request-id>${requestId}</request-id>\r
669                                                       <request-action>${requestAction}</request-action>\r
670                                                       <source>${source}</source>\r
671                                                       <notification-url></notification-url>\r
672                                                       <order-number></order-number>\r
673                                                       <order-version></order-version>\r
674                                                    </request-information>\r
675                                                    <service-information>\r
676                                                       <service-id>${serviceId}</service-id>\r
677                                                       <subscription-service-type>${subscriptionServiceType}</subscription-service-type>\r
678                                                           <ecomp-model-information>\r
679                                                                    <model-invariant-uuid>${serviceModelInvariantUuid}</model-invariant-uuid>\r
680                                                                    <model-uuid>${serviceModelUuid}</model-uuid>\r
681                                                                    <model-version>${serviceModelVersion}</model-version>\r
682                                                                    <model-name>${serviceModelName}</model-name>\r
683                               </ecomp-model-information>\r
684                                                       <service-instance-id>${serviceInstanceId}</service-instance-id>\r
685                                                       <global-customer-id>${globalCustomerId}</global-customer-id>\r
686                                                       <subscriber-name>${subscriberName}</subscriber-name>\r
687                                                    </service-information>\r
688                                                    <network-information>\r
689                                                       <network-id>${networkId}</network-id>\r
690                                                       <network-type>${networkType}</network-type>\r
691                                                           <ecomp-model-information>\r
692                                                                    <model-invariant-uuid>${modelInvariantUuid}</model-invariant-uuid>\r
693                                                                    <model-customization-uuid>${modelCustomizationUuid}</model-customization-uuid>\r
694                                                                    <model-uuid>${modelUuid}</model-uuid>\r
695                                                                    <model-version>${modelVersion}</model-version>\r
696                                                                    <model-name>${modelName}</model-name>\r
697                                                           </ecomp-model-information>\r
698                                                    </network-information>\r
699                                                    <network-request-input>\r
700                                                      <network-name>${networkName}</network-name>\r
701                                                  <tenant>${tenantId}</tenant>\r
702                                                      <aic-cloud-region>${aicCloudRegion}</aic-cloud-region>\r
703                                                      <aic-clli></aic-clli>\r
704                                                      <network-input-parameters/>\r
705                                                    </network-request-input>\r
706                                       </sdncadapterworkflow:SDNCRequestData>\r
707                    </aetgt:SDNCAdapterWorkflowRequest>""".trim()\r
708 \r
709                          return content\r
710           }\r
711 \r
712                         /**\r
713                          * Validates a workflow response.\r
714                          * @param execution the execution\r
715                          * @param responseVar the execution variable in which the response is stored\r
716                          * @param workflowException the WorkflowException Object returned from sdnc call\r
717                          */\r
718         public void validateSDNCResponse(Execution execution, String response, WorkflowException workflowException, boolean successIndicator){\r
719                 def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')\r
720                 taskProcessor.utils.log("DEBUG", "SDNC Response is: " + response, isDebugLogEnabled)\r
721                 taskProcessor.utils.log("DEBUG", "SuccessIndicator is: " + successIndicator, isDebugLogEnabled)\r
722 \r
723                 try {\r
724                         def prefix = execution.getVariable('prefix')\r
725                         execution.setVariable(prefix+'sdncResponseSuccess', false)\r
726                         taskProcessor.utils.log("DEBUG", "Response" + ' = ' + (response == null ? "" : System.lineSeparator()) + response, isDebugLogEnabled)\r
727 \r
728                         if (successIndicator == true){\r
729                                 if (response == null || response.trim().equals("")) {\r
730                                         taskProcessor.utils.log("DEBUG", response + ' is empty');\r
731                                         exceptionUtil.buildAndThrowWorkflowException(execution, 500, "SDNCAdapter Workflow Response is Empty")\r
732                                 }else{\r
733 \r
734                                         // we need to peer into the request data for error\r
735                                         def String sdncAdapterWorkflowResponse = taskProcessor.utils.getNodeXml(response, 'response-data', false)\r
736                                         def String decodedXml = decodeXML(sdncAdapterWorkflowResponse).replace('<?xml version="1.0" encoding="UTF-8"?>', "")\r
737 \r
738                                         // change '&' to "&amp; (if present as data, ex: subscriber-name = 'FOUR SEASONS HEATING & COOLING_8310006378683'\r
739                                         decodedXml = decodedXml.replace("&", "&amp;")\r
740 \r
741                                         taskProcessor.utils.log("DEBUG","decodedXml:\n" + decodedXml, isDebugLogEnabled)\r
742 \r
743                                         int requestDataResponseCode = 200\r
744                                         def String requestDataResponseMessage = ''\r
745 \r
746                                         try{\r
747                                                 if (taskProcessor.utils.nodeExists(decodedXml, "response-message")) {\r
748                                                         requestDataResponseMessage = taskProcessor.utils.getNodeText(decodedXml, "response-message")\r
749                                                 } else if (taskProcessor.utils.nodeExists(decodedXml, "ResponseMessage")) {\r
750                                                         requestDataResponseMessage = taskProcessor.utils.getNodeText(decodedXml, "ResponseMessage")\r
751                                                 }\r
752                                         }catch(Exception e){\r
753                                                 taskProcessor.utils.log("DEBUG", 'Error caught while decoding resposne ' + e.getMessage(), isDebugLogEnabled)\r
754                                         }\r
755 \r
756                                         if(taskProcessor.utils.nodeExists(decodedXml, "response-code")) {\r
757                                                 taskProcessor.utils.log("DEBUG","response-code node Exist ", isDebugLogEnabled)\r
758                                                 String code = taskProcessor.utils.getNodeText1(decodedXml, "response-code")\r
759                                                 if(code.isEmpty() || code.equals("")){\r
760                                                         // if response-code is blank then Success\r
761                                                         taskProcessor.utils.log("DEBUG","response-code node is empty", isDebugLogEnabled)\r
762                                                         requestDataResponseCode = 0\r
763                                                 }else{\r
764                                                         requestDataResponseCode  = code.toInteger()\r
765                                                         taskProcessor.utils.log("DEBUG","response-code is: " + requestDataResponseCode, isDebugLogEnabled)\r
766                                                 }\r
767                                         }else if(taskProcessor.utils.nodeExists(decodedXml, "ResponseCode")){\r
768                                                 taskProcessor.utils.log("DEBUG","ResponseCode node Exist ", isDebugLogEnabled)\r
769                                                 String code = taskProcessor.utils.getNodeText1(decodedXml, "ResponseCode")\r
770                                                 if(code.isEmpty() || code.equals("")){\r
771                                                         // if ResponseCode blank then Success\r
772                                                         taskProcessor.utils.log("DEBUG","ResponseCode node is empty", isDebugLogEnabled)\r
773                                                         requestDataResponseCode = 0\r
774                                                 }else{\r
775                                                         requestDataResponseCode  = code.toInteger()\r
776                                                         taskProcessor.utils.log("DEBUG","ResponseCode is: " + requestDataResponseCode, isDebugLogEnabled)\r
777                                                 }\r
778                                         }else{\r
779                                                 taskProcessor.utils.log("DEBUG","A Response Code DOES NOT Exist.", isDebugLogEnabled)\r
780                                                 // if a response code does not exist then Success\r
781                                                 requestDataResponseCode = 0\r
782                                         }\r
783                                         try{\r
784 \r
785                                                 execution.setVariable(prefix+'sdncRequestDataResponseCode', requestDataResponseCode.toString())\r
786                                                 // if a response code is 0 or 2XX then Success\r
787                                                 if ((requestDataResponseCode >= 200 && requestDataResponseCode <= 299) || requestDataResponseCode == 0) {\r
788                                                         execution.setVariable(prefix+'sdncResponseSuccess', true)\r
789                                                         taskProcessor.utils.log("DEBUG", "Setting sdncResponseSuccess to True ", isDebugLogEnabled)\r
790                                                         taskProcessor.utils.log("DEBUG", "Exited ValidateSDNCResponse Method", isDebugLogEnabled)\r
791                                                 }else{\r
792                                                         ExceptionUtil exceptionUtil = new ExceptionUtil()\r
793                                                         String convertedCode = exceptionUtil.MapSDNCResponseCodeToErrorCode(requestDataResponseCode.toString())\r
794                                                         int convertedCodeInt = Integer.parseInt(convertedCode)\r
795                                                         exceptionUtil.buildAndThrowWorkflowException(execution, convertedCodeInt, "Received error from SDN-C: " + requestDataResponseMessage)\r
796                                                 }\r
797 \r
798                                         }catch(Exception e){\r
799                                                 //TODO proper handling of new, non numerical response codes in 1607 and new error handling for common API\r
800                                                 requestDataResponseCode = 500\r
801                                         }\r
802 \r
803                                         taskProcessor.utils.log("DEBUG", "SDNC callback response-code: " + requestDataResponseCode, isDebugLogEnabled)\r
804                                         taskProcessor.utils.log("DEBUG", "SDNC callback response-message: " + requestDataResponseMessage, isDebugLogEnabled)\r
805                                 }\r
806 \r
807                         }else {\r
808                                 taskProcessor.utils.log("DEBUG", 'SDNCAdapter Subflow did NOT complete Successfully.  SuccessIndicator is False. ')\r
809                                 if(workflowException != null){\r
810                                         exceptionUtil.buildAndThrowWorkflowException(execution, workflowException.getErrorCode(), workflowException.getErrorMessage())\r
811                                 }else{\r
812                                         //TODO : what error code and error message use here\r
813                                         exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Internal Error - SDNCAdapter Subflow did NOT complete successfully.")\r
814                                 }\r
815                         }\r
816 \r
817                 } catch (BpmnError e) {\r
818                         throw e;\r
819                 } catch (Exception e) {\r
820                         taskProcessor.utils.log("DEBUG", 'END of Validate SDNC Response', isDebugLogEnabled)\r
821                         exceptionUtil.buildAndThrowWorkflowException(execution, 500, 'Internal Error- Unable to validate SDNC Response ');\r
822                 }\r
823         }\r
824 \r
825         /**\r
826                          * Validates a workflow response.\r
827                          * @param execution the execution\r
828                          * @param responseVar the execution variable in which the response is stored\r
829                          * @param responseCodeVar the execution variable in which the response code is stored\r
830                          * @param errorResponseVar the execution variable in which the error response is stored\r
831                          */\r
832                         public void validateL3BondingSDNCResp(Execution execution, String response, WorkflowException workflowException, boolean success) {\r
833                                 def method = getClass().getSimpleName() + '.validateL3BondingSDNCResp(' +\r
834                                         'execution=' + execution.getId() +\r
835                                         ', response=' + response +\r
836                                         ')'\r
837                                 def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')\r
838                                 taskProcessor.logDebug('Entered ' + method, isDebugLogEnabled)\r
839                                 def prefix = execution.getVariable('prefix')\r
840                                 TrinityExceptionUtil trinityExceptionUtil = new TrinityExceptionUtil()\r
841 \r
842                                 try {\r
843                                         execution.setVariable(prefix+'sdncResponseSuccess', false)\r
844 \r
845                                         taskProcessor.utils.log("sdncAdapter Success Indicator is: " + success, isDebugLogEnabled)\r
846                                         if (success == true) {\r
847 \r
848                                                 // we need to look inside the request data for error\r
849                                                 def String callbackRequestData = taskProcessor.utils.getNodeXml(response, 'RequestData', false)\r
850                                                 def String decodedXml = decodeXML(callbackRequestData)\r
851                                                 taskProcessor.utils.log("DEBUG","decodedXml:\n" + decodedXml, isDebugLogEnabled)\r
852 \r
853                                                 def requestDataResponseCode = '200'\r
854                                                 def requestDataResponseMessage = ''\r
855                                                 int intDataResponseCode = 200\r
856 \r
857                                                 if (taskProcessor.utils.nodeExists(decodedXml, "response-code")) {\r
858 \r
859                                                         requestDataResponseCode  = ((String) taskProcessor.utils.getNodeText(decodedXml, "response-code"))\r
860                                                         if (taskProcessor.utils.nodeExists(decodedXml, "response-message")) {\r
861                                                                 requestDataResponseMessage  = taskProcessor.utils.getNodeText(decodedXml, "response-message")\r
862                                                         }\r
863                                                 }else if(taskProcessor.utils.nodeExists(decodedXml, "ResponseCode")){\r
864                                                         requestDataResponseCode  = ((String) taskProcessor.utils.getNodeText1(decodedXml, "ResponseCode")).toInteger()\r
865                                                 }else if(taskProcessor.utils.nodeExists(response, "ResponseCode")){\r
866                                                         requestDataResponseCode  = ((String) taskProcessor.utils.getNodeText1(response, "ResponseCode")).toInteger()\r
867                                                         requestDataResponseMessage  = taskProcessor.utils.getNodeText(response, "ResponseMessage")\r
868                                                 }\r
869 \r
870                                                 taskProcessor.utils.log("DEBUG", "SDNC callback response-code: " + requestDataResponseCode, isDebugLogEnabled)\r
871                                                 taskProcessor.utils.log("DEBUG", "SDNC callback response-message: " + requestDataResponseMessage, isDebugLogEnabled)\r
872 \r
873                                                 // Get the AAI Status to determine if rollback is needed on ASSIGN\r
874                                                 def aai_status = ''\r
875                                                 if (taskProcessor.utils.nodeExists(decodedXml, "aai-status")) {\r
876                                                         aai_status = ((String) taskProcessor.utils.getNodeText(decodedXml, "aai-status"))\r
877                                                         taskProcessor.utils.log("DEBUG", "SDNC sent AAI STATUS code: " + aai_status, isDebugLogEnabled)\r
878                                                 }\r
879                                                 if (aai_status != null && !aai_status.equals("")) {\r
880                                                         execution.setVariable(prefix+"AaiStatus",aai_status)\r
881                                                         taskProcessor.utils.log("DEBUG", "Set variable " + prefix + "AaiStatus: " + execution.getVariable(prefix+"AaiStatus"), isDebugLogEnabled)\r
882                                                 }\r
883 \r
884                                                 // Get the result string to determine if rollback is needed on ASSIGN in Add Bonding flow only\r
885                                                 def sdncResult = ''\r
886                                                 if (taskProcessor.utils.nodeExists(decodedXml, "result")) {\r
887                                                         sdncResult = ((String) taskProcessor.utils.getNodeText(decodedXml, "result"))\r
888                                                         taskProcessor.utils.log("DEBUG", "SDNC sent result: " + sdncResult, isDebugLogEnabled)\r
889                                                 }\r
890                                                 if (sdncResult != null && !sdncResult.equals("")) {\r
891                                                         execution.setVariable(prefix+"SdncResult",sdncResult)\r
892                                                         taskProcessor.utils.log("DEBUG", "Set variable " + prefix + "SdncResult: " + execution.getVariable(prefix+"SdncResult"), isDebugLogEnabled)\r
893                                                 }\r
894 \r
895                                                 try{\r
896                                                         intDataResponseCode = Integer.parseInt(String.valueOf(requestDataResponseCode))\r
897                                                 }catch(Exception e){\r
898                                                         intDataResponseCode = 400\r
899                                                 }\r
900 \r
901                                                 taskProcessor.utils.log("DEBUG", "intDataResponseCode " + intDataResponseCode , isDebugLogEnabled)\r
902 \r
903                                                 // if response-code is not Success (200, 201, etc) we need to throw an exception\r
904                                                 if ((intDataResponseCode < 200 || intDataResponseCode > 299) && intDataResponseCode != 0) {\r
905                                                         execution.setVariable(prefix+'ResponseCode', intDataResponseCode)\r
906                                                         execution.setVariable("L3HLAB_rollback", true)\r
907                                                         def msg = trinityExceptionUtil.mapSDNCAdapterExceptionToErrorResponse(response, execution)\r
908                                                         exceptionUtil.buildAndThrowWorkflowException(execution, intDataResponseCode, "Received error from SDN-C: " + msg)\r
909 \r
910                                                 }\r
911                                         }else {\r
912                                                 taskProcessor.logWarn('sdncAdapter did not complete successfully, sdncAdapter Success Indicator was false ')\r
913                                                 execution.setVariable("L3HLAB_rollback", true)\r
914                                                 def msg = trinityExceptionUtil.mapSDNCAdapterExceptionToErrorResponse(response, execution)\r
915                                                 exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, msg)\r
916                                         }\r
917 \r
918                                         if (response == null || response.trim().equals("")) {\r
919                                                 taskProcessor.logWarn('sdncAdapter workflow response is empty');\r
920                                                 execution.setVariable("L3HLAB_rollback", true)\r
921                                                 def msg = trinityExceptionUtil.buildException("Exception occurred while validating SDNC response " , execution)\r
922                                                 exceptionUtil.buildAndThrowWorkflowException(execution, intResponseCode, msg)\r
923                                         }\r
924 \r
925                                         execution.setVariable(prefix+'sdncResponseSuccess', true)\r
926                                         taskProcessor.logDebug('Exited ' + method, isDebugLogEnabled)\r
927                                 } catch (BpmnError e) {\r
928                                         throw e;\r
929                                 } catch (Exception e) {\r
930                                         taskProcessor.logError('Caught exception in ' + method, e)\r
931                                         execution.setVariable(prefix+"ResponseCode",400)\r
932                                         execution.setVariable("L3HLAB_rollback", true)\r
933                                         def msg = trinityExceptionUtil.buildException("Exception occurred while validating SDNC response: " + e.getMessage(), execution)\r
934                                         exceptionUtil.buildAndThrowWorkflowException(execution, 400, msg)\r
935                                 }\r
936                         }\r
937                         \r
938         public String modelInfoToEcompModelInformation(String jsonModelInfo) {\r
939                 String modelInvariantUuid = jsonUtil.getJsonValue(jsonModelInfo, "modelInvariantUuid")\r
940                 String modelUuid = jsonUtil.getJsonValue(jsonModelInfo, "modelUuid")\r
941                 if (modelUuid == null) {\r
942                         modelUuid = ""\r
943                 }\r
944                 String modelCustomizationUuid = jsonUtil.getJsonValue(jsonModelInfo, "modelCustomizationUuid")\r
945                 String modelCustomizationString = ""\r
946                 if (modelCustomizationUuid != null) {\r
947                         modelCustomizationString = "<model-customization-uuid>${modelCustomizationUuid}</model-customization-uuid>"\r
948                 }                       \r
949                 String modelVersion = jsonUtil.getJsonValue(jsonModelInfo, "modelVersion")\r
950                 if (modelVersion == null) {\r
951                         modelVersion = ""\r
952                 }               \r
953                 String modelName = jsonUtil.getJsonValue(jsonModelInfo, "modelName")\r
954                 String ecompModelInformation =\r
955                                 """<ecomp-model-information>\r
956                                                 <model-invariant-uuid>${modelInvariantUuid}</model-invariant-uuid>\r
957                                                 <model-uuid>${modelUuid}</model-uuid>\r
958                                                 ${modelCustomizationString}\r
959                                                 <model-version>${modelVersion}</model-version>\r
960                                                 <model-name>${modelName}</model-name>\r
961                                 </ecomp-model-information>"""\r
962 \r
963                 return ecompModelInformation            \r
964         } \r
965 \r
966         /**\r
967          * Decode XML - replace &amp; &lt; and &gt; with '&', '<' and '>'\r
968          * @param xml - the xml to be decoded\r
969          */\r
970         private String decodeXML(String xml) {\r
971                 def String decodedXml = xml.replaceAll("&amp;", "&")\r
972                 decodedXml = decodedXml.replaceAll("&lt;", "<")\r
973                 decodedXml = decodedXml.replaceAll("&gt;", ">")\r
974         }\r
975         \r
976         \r
977 \r
978 }