1710 Rebase - Second Attempt
[so.git] / bpmn / MSOCommonBPMN / src / main / groovy / org / openecomp / mso / bpmn / common / scripts / VidUtils.groovy
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.common.scripts\r
22 \r
23 import groovy.json.JsonBuilder\r
24 import groovy.json.JsonSlurper\r
25 \r
26 import org.json.JSONObject\r
27 import org.json.XML\r
28 import org.openecomp.mso.bpmn.core.xml.XmlTool\r
29 \r
30 class VidUtils {\r
31         \r
32         public MsoUtils utils = new MsoUtils()\r
33         private AbstractServiceTaskProcessor taskProcessor\r
34 \r
35         public VidUtils(AbstractServiceTaskProcessor taskProcessor) {\r
36                 this.taskProcessor = taskProcessor\r
37         }\r
38         \r
39         /**\r
40          * Create a volume-request XML using a JSON string\r
41          * @param jsonReq - JSON request from VID\r
42          * @param action\r
43          * @return\r
44          */\r
45         public String createXmlVolumeRequest(String jsonReq, String action, String serviceInstanceId) {\r
46                 def jsonSlurper = new JsonSlurper()\r
47                 try{\r
48                         Map reqMap = jsonSlurper.parseText(jsonReq)\r
49                         return createXmlVolumeRequest(reqMap, action, serviceInstanceId)\r
50                 }\r
51                 catch(Exception e) {\r
52                         throw e\r
53                 }\r
54         }\r
55 \r
56         /**\r
57          * Create a volume-request XML using a map\r
58          * @param requestMap - map created from VID JSON\r
59          * @param action\r
60          * @param serviceInstanceId\r
61          * @return\r
62          */\r
63         public String createXmlVolumeRequest(Map requestMap, String action, String serviceInstanceId) {\r
64                 createXmlVolumeRequest(requestMap, action, serviceInstanceId, '')\r
65         }\r
66         \r
67 \r
68         /**\r
69          * Create a volume-request XML using a map\r
70          * @param requestMap\r
71          * @param action\r
72          * @param serviceInstanceId\r
73          * @param volumeGroupId\r
74          * @return\r
75          */\r
76         public String createXmlVolumeRequest(Map requestMap, String action, String serviceInstanceId, String volumeGroupId) {\r
77                 def vnfType = ''\r
78                 def serviceName = ''\r
79                 def modelCustomizationName = ''\r
80                 def asdcServiceModelVersion = ''\r
81                 \r
82                 def suppressRollback = requestMap.requestDetails.requestInfo.suppressRollback\r
83                 \r
84                 def backoutOnFailure = ""\r
85                 if(suppressRollback != null){\r
86                         if ( suppressRollback == true) {\r
87                                 backoutOnFailure = "false"\r
88                         } else if ( suppressRollback == false) {\r
89                                 backoutOnFailure = "true"\r
90                         }\r
91                 }\r
92                 \r
93                 def volGrpName = requestMap.requestDetails.requestInfo?.instanceName ?: ''\r
94                 def serviceId = requestMap.requestDetails.requestParameters?.serviceId ?: ''\r
95                 def relatedInstanceList = requestMap.requestDetails.relatedInstanceList\r
96                 relatedInstanceList.each {\r
97                         if (it.relatedInstance.modelInfo?.modelType == 'service') {\r
98                                 serviceName = it.relatedInstance.modelInfo?.modelName\r
99                                 asdcServiceModelVersion = it.relatedInstance.modelInfo?.modelVersion\r
100                         }\r
101                         if (it.relatedInstance.modelInfo?.modelType == 'vnf') {\r
102                                 modelCustomizationName = it.relatedInstance.modelInfo?.modelInstanceName\r
103                         }\r
104                 }\r
105                 \r
106                 vnfType = serviceName + '/' + modelCustomizationName\r
107                 \r
108                 def userParams = requestMap.requestDetails?.requestParameters?.userParams\r
109                 def userParamsNode = ''\r
110                 if(userParams != null) {\r
111                         userParamsNode = buildUserParams(userParams)\r
112                 }\r
113                 def modelCustomizationId = requestMap.requestDetails?.modelInfo?.modelCustomizationUuid ?: ''\r
114                 \r
115                 def xmlReq = """\r
116                 <volume-request xmlns="http://www.w3.org/2001/XMLSchema">\r
117                         <request-info>\r
118                                 <action>${action}</action>\r
119                                 <source>${requestMap.requestDetails.requestInfo.source}</source>\r
120                                 <service-instance-id>${serviceInstanceId}</service-instance-id>\r
121                         </request-info>\r
122                         <volume-inputs>\r
123                                 <volume-group-id>${volumeGroupId}</volume-group-id>\r
124                                 <volume-group-name>${volGrpName}</volume-group-name>\r
125                                 <vnf-type>${vnfType}</vnf-type>\r
126                                 <vf-module-model-name>${requestMap.requestDetails.modelInfo.modelName}</vf-module-model-name>\r
127                                 <asdc-service-model-version>${asdcServiceModelVersion}</asdc-service-model-version>\r
128                                 <aic-cloud-region>${requestMap.requestDetails.cloudConfiguration.lcpCloudRegionId}</aic-cloud-region>\r
129                                 <tenant-id>${requestMap.requestDetails.cloudConfiguration.tenantId}</tenant-id>\r
130                                 <service-id>${serviceId}</service-id>\r
131                                 <backout-on-failure>${backoutOnFailure}</backout-on-failure>\r
132                                 <model-customization-id>${modelCustomizationId}</model-customization-id>\r
133                         </volume-inputs>\r
134                         <volume-params>\r
135                                 $userParamsNode\r
136                         </volume-params>\r
137                 </volume-request>\r
138                 """\r
139                 // return a pretty-print of the volume-request xml without the preamble\r
140                 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "") \r
141         }\r
142         \r
143         /**\r
144          * A common method that can be used to build volume-params node from a map. \r
145          * @param Map userParams\r
146          * @return\r
147          */\r
148         public String buildUserParams(userParams) {\r
149                 if (userParams == null) return ""\r
150                 def xml = ""\r
151                 def key = ""\r
152                 def value = ""\r
153                 userParams.each {it ->\r
154                         key = it.name.replaceAll(/\B[A-Z]/) { '_' + it }.toLowerCase()\r
155                         value = it.value\r
156                         xml += "<param name=\"${key}\">${value}</param>"\r
157                 }\r
158 \r
159                 return xml\r
160         }\r
161 \r
162         /**\r
163          * A common method that can be used to extract 'requestDetails' \r
164          * @param String json\r
165          * @return String json requestDetails  \r
166          */\r
167         @Deprecated\r
168         public getJsonRequestDetails(String jsonInput) {\r
169                 String rtn = ""\r
170                 if (jsonInput.isEmpty() || jsonInput == null) {\r
171                         return rtn\r
172                 } else {\r
173                         def jsonMapObject = new JsonSlurper().parseText(jsonInput)\r
174                         if (jsonMapObject instanceof Map) {\r
175                                 String jsonString = new JsonBuilder(jsonMapObject.requestDetails)\r
176                                 rtn = '{'+"requestDetails"+":"+jsonString+'}'\r
177                                 return rtn\r
178                         } else {\r
179                             return rtn\r
180                         }       \r
181                 }\r
182         }\r
183         \r
184         /**\r
185          * A common method that can be used to extract 'requestDetails' in Xml\r
186          * @param String json\r
187          * @return String xml requestDetails\r
188          */\r
189         @Deprecated\r
190         public getJsonRequestDetailstoXml(String jsonInput) {\r
191                 String rtn = null\r
192                 def jsonString = getJsonRequestDetails(jsonInput)\r
193                 if (jsonString == null) {\r
194                         return rtn\r
195                 } else {\r
196                     JSONObject jsonObj = new JSONObject(jsonString)\r
197                         return XmlTool.normalize(XML.toString(jsonObj))\r
198                 }\r
199         }\r
200         \r
201         /**\r
202          * Create a network-request XML using a map\r
203          * @param execution \r
204          * @param xmlRequestDetails - requestDetails in xml \r
205          * @return\r
206          * Note: See latest version: createXmlNetworkRequestInstance()\r
207          */\r
208 \r
209         public String createXmlNetworkRequestInfra(execution, def networkJsonIncoming) {\r
210         \r
211                 def requestId = execution.getVariable("requestId")\r
212                 def serviceInstanceId = execution.getVariable("serviceInstanceId")\r
213                 def requestAction = execution.getVariable("requestAction")\r
214                 def networkId = (execution.getVariable("networkId")) != null ? execution.getVariable("networkId") : ""\r
215                 \r
216                 def jsonSlurper = new JsonSlurper()\r
217                 try {\r
218                         Map reqMap = jsonSlurper.parseText(networkJsonIncoming)\r
219                         def instanceName =  reqMap.requestDetails.requestInfo.instanceName\r
220                         def modelCustomizationId =  reqMap.requestDetails.modelInfo.modelCustomizationId\r
221                         if (modelCustomizationId == null) {\r
222                                 modelCustomizationId =  reqMap.requestDetails.modelInfo.modelCustomizationUuid !=null ?  \r
223                                                         reqMap.requestDetails.modelInfo.modelCustomizationUuid : ""\r
224                         }\r
225                         def modelName = reqMap.requestDetails.modelInfo.modelName\r
226                         def lcpCloudRegionId = reqMap.requestDetails.cloudConfiguration.lcpCloudRegionId\r
227                         def tenantId = reqMap.requestDetails.cloudConfiguration.tenantId\r
228                         def serviceId = reqMap.requestDetails.requestInfo.productFamilyId \r
229                         def suppressRollback = reqMap.requestDetails.requestInfo.suppressRollback.toString()\r
230                         def backoutOnFailure = "true"\r
231                         if(suppressRollback != null){\r
232                                 if (suppressRollback == true || suppressRollback == "true") {\r
233                                         backoutOnFailure = "false"\r
234                                 } else if (suppressRollback == false || suppressRollback == "false") {\r
235                                         backoutOnFailure = "true"\r
236                                 }\r
237                         }\r
238                 \r
239                         //def userParams = reqMap.requestDetails.requestParameters.userParams\r
240                         //def userParamsNode = buildUserParams(userParams)\r
241                         def userParams = reqMap.requestDetails?.requestParameters?.userParams\r
242                         def userParamsNode = ''\r
243                         if(userParams != null) {\r
244                                 userParamsNode = buildUserParams(userParams)\r
245                         }\r
246                         \r
247                         //'sdncVersion' = current, '1610' (non-RPC SDNC) or '1702' (RPC SDNC)\r
248                         def sdncVersion =  execution.getVariable("sdncVersion")\r
249                         \r
250                         def xmlReq = """\r
251                         <network-request xmlns="http://www.w3.org/2001/XMLSchema"> \r
252                          <request-info> \r
253                     <request-id>${requestId}</request-id>\r
254                                 <action>${requestAction}</action> \r
255                                 <source>VID</source> \r
256                                 <service-instance-id>${serviceInstanceId}</service-instance-id>\r
257                          </request-info> \r
258                          <network-inputs> \r
259                                 <network-id>${networkId}</network-id> \r
260                                 <network-name>${instanceName}</network-name> \r
261                                 <network-type>${modelName}</network-type>\r
262                                 <modelCustomizationId>${modelCustomizationId}</modelCustomizationId> \r
263                                 <aic-cloud-region>${lcpCloudRegionId}</aic-cloud-region> \r
264                                 <tenant-id>${tenantId}</tenant-id>\r
265                                 <service-id>${serviceId}</service-id> \r
266                                 <backout-on-failure>${backoutOnFailure}</backout-on-failure>\r
267                 <sdncVersion>${sdncVersion}</sdncVersion>\r
268                          </network-inputs> \r
269                          <network-params>\r
270                                 ${userParamsNode}\r
271                          </network-params> \r
272                         </network-request>\r
273                         """\r
274                         // return a pretty-print of the volume-request xml without the preamble\r
275                         return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")\r
276                         \r
277                 } catch(Exception e) {\r
278                         throw e\r
279                 }\r
280         }\r
281         \r
282         /**\r
283          * Create a network-request XML using a map, \r
284          * @param execution \r
285          * @return\r
286          */\r
287         public String createXmlNetworkRequestInstance(execution) {\r
288 \r
289                 def networkModelUuid = ""\r
290                 def networkModelName = ""\r
291                 def networkModelVersion = ""\r
292                 def networkModelCustomizationUuid = ""\r
293                 def networkModelInvariantUuid = ""\r
294                 \r
295                 // verify the DB Catalog response JSON structure\r
296                 def networkModelInfo = execution.getVariable("networkModelInfo")\r
297                 def jsonSlurper = new JsonSlurper()\r
298                 if (networkModelInfo != null) {\r
299                         try {\r
300                                 Map modelMap = jsonSlurper.parseText(networkModelInfo)\r
301                                 if (modelMap != null) {\r
302                                         if (networkModelInfo.contains("modelUuid")) {\r
303                                                 networkModelUuid = modelMap.modelUuid !=null ? modelMap.modelUuid : ""\r
304                                         }\r
305                                         if (networkModelInfo.contains("modelName")) {\r
306                                                 networkModelName = modelMap.modelName !=null ? modelMap.modelName : ""\r
307                                         }\r
308                                         if (networkModelInfo.contains("modelVersion")) {\r
309                                                 networkModelVersion = modelMap.modelVersion !=null ? modelMap.modelVersion : ""\r
310                                         }\r
311                                         if (networkModelInfo.contains("modelCustomizationUuid")) {\r
312                                                 networkModelCustomizationUuid = modelMap.modelCustomizationUuid !=null ? modelMap.modelCustomizationUuid : ""\r
313                                         }\r
314                                         if (networkModelInfo.contains("modelInvariantUuid")) {\r
315                                                 networkModelInvariantUuid = modelMap.modelInvariantUuid !=null ? modelMap.modelInvariantUuid : ""\r
316                                         }\r
317                                 }\r
318                         } catch (Exception ex) {\r
319                         throw ex\r
320                         }\r
321                 }               \r
322                 \r
323                 def serviceModelUuid = ""\r
324                 def serviceModelName = ""\r
325                 def serviceModelVersion = ""\r
326                 def serviceModelCustomizationUuid = ""\r
327                 def serviceModelInvariantUuid = ""\r
328                 \r
329                 // verify the DB Catalog response JSON structure\r
330                 def serviceModelInfo = execution.getVariable("serviceModelInfo")\r
331                 def jsonServiceSlurper = new JsonSlurper()\r
332                 if (serviceModelInfo != null) {\r
333                         try {\r
334                                 Map modelMap = jsonServiceSlurper.parseText(serviceModelInfo)\r
335                                 if (modelMap != null) {\r
336                                         if (serviceModelInfo.contains("modelUuid")) {\r
337                                                 serviceModelUuid = modelMap.modelUuid !=null ? modelMap.modelUuid : ""\r
338                                         }\r
339                                         if (serviceModelInfo.contains("modelName")) {\r
340                                                 serviceModelName = modelMap.modelName !=null ? modelMap.modelName : ""\r
341                                         }\r
342                                         if (serviceModelInfo.contains("modelVersion")) {\r
343                                                 serviceModelVersion = modelMap.modelVersion !=null ? modelMap.modelVersion : ""\r
344                                         }\r
345                                         if (serviceModelInfo.contains("modelCustomizationUuid")) {\r
346                                                 serviceModelCustomizationUuid = modelMap.modelCustomizationUuid !=null ? modelMap.modelCustomizationUuid : ""\r
347                                         }\r
348                                         if (serviceModelInfo.contains("modelInvariantUuid")) {\r
349                                                 serviceModelInvariantUuid = modelMap.modelInvariantUuid !=null ? modelMap.modelInvariantUuid : ""\r
350                                         }\r
351                                 }\r
352                         } catch (Exception ex) {\r
353                                 throw ex\r
354                         }\r
355                 }\r
356                 \r
357                 \r
358                 def subscriptionServiceType = execution.getVariable("subscriptionServiceType") != null ? execution.getVariable("subscriptionServiceType") : ""\r
359                 def globalSubscriberId = execution.getVariable("globalSubscriberId") != null ? execution.getVariable("globalSubscriberId") : ""\r
360                 def requestId = execution.getVariable("msoRequestId")\r
361                 def serviceInstanceId = execution.getVariable("serviceInstanceId") != null ? execution.getVariable("serviceInstanceId") : ""\r
362                 def networkId = (execution.getVariable("networkId")) != null ? execution.getVariable("networkId") : "" // optional\r
363                 def networkName =  execution.getVariable("networkName") != null ? execution.getVariable("networkName") : "" // optional\r
364                 def aicCloudReqion = execution.getVariable("lcpCloudRegionId") != null ? execution.getVariable("lcpCloudRegionId") : ""\r
365                 def tenantId = execution.getVariable("tenantId") != null ? execution.getVariable("tenantId") : ""\r
366                 def serviceId = execution.getVariable("productFamilyId") != null ? execution.getVariable("productFamilyId") : ""\r
367                 def failIfExist = execution.getVariable("failIfExists") != null ? execution.getVariable("failIfExists") : ""\r
368                 def suppressRollback = execution.getVariable("disableRollback")   \r
369                 def backoutOnFailure = "true"\r
370                 if(suppressRollback != null){\r
371                         if (suppressRollback == true || suppressRollback == "true") {\r
372                                 backoutOnFailure = "false"\r
373                         } else if (suppressRollback == false || suppressRollback == "false") {\r
374                                 backoutOnFailure = "true"\r
375                         }\r
376                 }\r
377                 \r
378                 //'sdncVersion' = current, '1610' (non-RPC SDNC) or '1702' (RPC SDNC)\r
379                 def sdncVersion =  execution.getVariable("sdncVersion")\r
380                 \r
381                 def source = "VID"\r
382                 def action = execution.getVariable("action")\r
383                                 \r
384                 def userParamsNode = ""\r
385                 def userParams = execution.getVariable("networkInputParams")\r
386                 if(userParams != null) {\r
387                    userParamsNode = buildUserParams(userParams)\r
388                 }\r
389                 \r
390                 def xmlReq = """\r
391                 <network-request xmlns="http://www.w3.org/2001/XMLSchema"> \r
392                  <request-info> \r
393             <request-id>${requestId}</request-id>\r
394                         <action>${action}</action> \r
395                         <source>${source}</source> \r
396                         <service-instance-id>${serviceInstanceId}</service-instance-id>\r
397                  </request-info> \r
398                  <network-inputs> \r
399                         <network-id>${networkId}</network-id> \r
400                         <network-name>${networkName}</network-name> \r
401                         <network-type>${networkModelName}</network-type>\r
402                         <subscription-service-type>${subscriptionServiceType}</subscription-service-type>\r
403             <global-customer-id>${globalSubscriberId}</global-customer-id>\r
404                         <aic-cloud-region>${aicCloudReqion}</aic-cloud-region> \r
405                         <tenant-id>${tenantId}</tenant-id>\r
406                         <service-id>${serviceId}</service-id> \r
407                         <backout-on-failure>${backoutOnFailure}</backout-on-failure>\r
408                         <failIfExist>${failIfExist}</failIfExist>\r
409             <networkModelInfo>\r
410               <modelName>${networkModelName}</modelName>\r
411               <modelUuid>${networkModelUuid}</modelUuid>\r
412               <modelInvariantUuid>${networkModelInvariantUuid}</modelInvariantUuid>            \r
413               <modelVersion>${networkModelVersion}</modelVersion>\r
414               <modelCustomizationUuid>${networkModelCustomizationUuid}</modelCustomizationUuid>\r
415                     </networkModelInfo>\r
416             <serviceModelInfo>\r
417               <modelName>${serviceModelName}</modelName>\r
418               <modelUuid>${serviceModelUuid}</modelUuid>\r
419               <modelInvariantUuid>${serviceModelInvariantUuid}</modelInvariantUuid>            \r
420               <modelVersion>${serviceModelVersion}</modelVersion>\r
421               <modelCustomizationUuid>${serviceModelCustomizationUuid}</modelCustomizationUuid>\r
422              \r
423                     </serviceModelInfo>                                                                                                 \r
424             <sdncVersion>${sdncVersion}</sdncVersion>                    \r
425                  </network-inputs>\r
426                  <network-params>\r
427                         ${userParamsNode}\r
428                  </network-params> \r
429                 </network-request>\r
430                 """\r
431                 // return a pretty-print of the volume-request xml without the preamble\r
432                 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")\r
433                         \r
434         }\r
435         \r
436         /**\r
437          * Create a vnf-request XML using a map\r
438          * @param requestMap - map created from VID JSON \r
439          * @param action\r
440          * @return\r
441          */\r
442         public String createXmlVfModuleRequest(execution, Map requestMap, String action, String serviceInstanceId) {\r
443                                 \r
444                 //def relatedInstanceList = requestMap.requestDetails.relatedInstanceList\r
445                 \r
446                 //relatedInstanceList.each {\r
447                 //      if (it.relatedInstance.modelInfo.modelType == 'vnf') {\r
448                 //              vnfType = it.relatedInstance.modelInfo.modelName\r
449                 //              vnfId = it.relatedInstance.modelInfo.modelInvariantId\r
450                 //      }\r
451                 //}\r
452                 \r
453                 def vnfName = ''\r
454                 def asdcServiceModelInfo = ''\r
455                                 \r
456                 def relatedInstanceList = requestMap.requestDetails?.relatedInstanceList\r
457                 \r
458                 \r
459                 if (relatedInstanceList != null) {\r
460                         relatedInstanceList.each {\r
461                                 if (it.relatedInstance.modelInfo?.modelType == 'service') {\r
462                                         asdcServiceModelInfo = it.relatedInstance.modelInfo?.modelVersion\r
463                                 }\r
464                                 if (it.relatedInstance.modelInfo.modelType == 'vnf') {\r
465                                         vnfName = it.relatedInstance.instanceName ?: ''\r
466                                 }\r
467                         }\r
468                 }\r
469                 \r
470                 def vnfType = execution.getVariable('vnfType')\r
471                 def vnfId = execution.getVariable('vnfId')\r
472 \r
473                 def vfModuleId = execution.getVariable('vfModuleId')\r
474                 def volumeGroupId = execution.getVariable('volumeGroupId')\r
475                 def userParams = requestMap.requestDetails?.requestParameters?.userParams\r
476                 \r
477                 \r
478                 def userParamsNode = ''\r
479                 if(userParams != null) {\r
480                         userParamsNode = buildUserParams(userParams)\r
481                 }\r
482                 \r
483                 def isBaseVfModule = "false"\r
484                 if (execution.getVariable('isBaseVfModule') == true) {\r
485                         isBaseVfModule = "true"         \r
486                 }\r
487                 \r
488                 def requestId = execution.getVariable("mso-request-id")         \r
489                 def vfModuleName = requestMap.requestDetails?.requestInfo?.instanceName ?: ''\r
490                 def vfModuleModelName = requestMap.requestDetails?.modelInfo?.modelName ?: ''\r
491                 def suppressRollback = requestMap.requestDetails?.requestInfo?.suppressRollback\r
492                 \r
493                 def backoutOnFailure = ""\r
494                 if(suppressRollback != null){\r
495                         if ( suppressRollback == true) {\r
496                                 backoutOnFailure = "false"\r
497                         } else if ( suppressRollback == false) {\r
498                                 backoutOnFailure = "true"\r
499                         }\r
500                 }\r
501                 \r
502                 def serviceId = requestMap.requestDetails?.requestParameters?.serviceId ?: ''\r
503                 def aicCloudRegion = requestMap.requestDetails?.cloudConfiguration?.lcpCloudRegionId ?: ''\r
504                 def tenantId = requestMap.requestDetails?.cloudConfiguration?.tenantId ?: ''\r
505                 def personaModelId = requestMap.requestDetails?.modelInfo?.modelInvariantUuid ?: ''\r
506                 def personaModelVersion = requestMap.requestDetails?.modelInfo?.modelUuid ?: ''\r
507                 def modelCustomizationId = requestMap.requestDetails?.modelInfo?.modelCustomizationUuid ?: ''\r
508                 \r
509                 def xmlReq = """\r
510                 <vnf-request>\r
511                         <request-info>\r
512                                 <request-id>${requestId}</request-id>\r
513                                 <action>${action}</action>\r
514                                 <source>VID</source>\r
515                                 <!-- new 1610 field -->\r
516                                 <service-instance-id>${serviceInstanceId}</service-instance-id>\r
517                         </request-info>\r
518                         <vnf-inputs>\r
519                                 <!-- not in use in 1610 -->\r
520                                 <vnf-name>${vnfName}</vnf-name>                                 \r
521                                 <vnf-type>${vnfType}</vnf-type>\r
522                                 <vnf-id>${vnfId}</vnf-id>\r
523                                 <volume-group-id>${volumeGroupId}</volume-group-id>\r
524                                 <vf-module-id>${vfModuleId}</vf-module-id>\r
525                                 <vf-module-name>${vfModuleName}</vf-module-name>                                \r
526                                 <vf-module-model-name>${vfModuleModelName}</vf-module-model-name>\r
527                                 <model-customization-id>${modelCustomizationId}</model-customization-id>\r
528                                 <is-base-vf-module>${isBaseVfModule}</is-base-vf-module>\r
529                                 <asdc-service-model-version>${asdcServiceModelInfo}</asdc-service-model-version>\r
530                                 <aic-cloud-region>${aicCloudRegion}</aic-cloud-region>                          \r
531                                 <tenant-id>${tenantId}</tenant-id>\r
532                                 <service-id>${serviceId}</service-id>\r
533                                 <backout-on-failure>${backoutOnFailure}</backout-on-failure>\r
534                                 <persona-model-id>${personaModelId}</persona-model-id>\r
535                                 <persona-model-version>${personaModelVersion}</persona-model-version>\r
536                         </vnf-inputs>\r
537                         <vnf-params>\r
538                                 $userParamsNode\r
539                         </vnf-params>\r
540                 </vnf-request>\r
541                 """\r
542         \r
543                 // return a pretty-print of the volume-request xml without the preamble\r
544                 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "") \r
545         }\r
546         \r
547 \r
548 }\r