022a00c192d246e99979ebfe870c7ad9c4ba194d
[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?.modelCustomizationName\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?.modelCustomizationId ?: ''\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         public String createXmlNetworkRequestInfra(execution, def networkJsonIncoming) {\r
209         \r
210                 def requestId = execution.getVariable("requestId")\r
211                 def serviceInstanceId = execution.getVariable("serviceInstanceId")\r
212                 def requestAction = execution.getVariable("requestAction")\r
213                 def networkId = (execution.getVariable("networkId")) != null ? execution.getVariable("networkId") : ""\r
214                 \r
215                 def jsonSlurper = new JsonSlurper()\r
216                 try {\r
217                         Map reqMap = jsonSlurper.parseText(networkJsonIncoming)\r
218                         def instanceName =  reqMap.requestDetails.requestInfo.instanceName\r
219                         def modelName = reqMap.requestDetails.modelInfo.modelName\r
220                         def lcpCloudRegionId = reqMap.requestDetails.cloudConfiguration.lcpCloudRegionId\r
221                         def tenantId = reqMap.requestDetails.cloudConfiguration.tenantId\r
222                         def serviceId = reqMap.requestDetails.requestInfo.productFamilyId \r
223                         def suppressRollback = reqMap.requestDetails.requestInfo.suppressRollback.toString()\r
224                         def backoutOnFailure = "true"\r
225                         if(suppressRollback != null){\r
226                                 if (suppressRollback == true || suppressRollback == "true") {\r
227                                         backoutOnFailure = "false"\r
228                                 } else if (suppressRollback == false || suppressRollback == "false") {\r
229                                         backoutOnFailure = "true"\r
230                                 }\r
231                         }\r
232                 \r
233                         //def userParams = reqMap.requestDetails.requestParameters.userParams\r
234                         //def userParamsNode = buildUserParams(userParams)\r
235                         def userParams = reqMap.requestDetails?.requestParameters?.userParams\r
236                         def userParamsNode = ''\r
237                         if(userParams != null) {\r
238                                 userParamsNode = buildUserParams(userParams)\r
239                         }\r
240                         \r
241                         //'sdncVersion' = current, '1610' (non-RPC SDNC) or '1702' (RPC SDNC)\r
242                         def sdncVersion =  execution.getVariable("sdncVersion")\r
243                         \r
244                         def xmlReq = """\r
245                         <network-request xmlns="http://www.w3.org/2001/XMLSchema"> \r
246                          <request-info> \r
247                     <request-id>${requestId}</request-id>\r
248                                 <action>${requestAction}</action> \r
249                                 <source>VID</source> \r
250                                 <service-instance-id>${serviceInstanceId}</service-instance-id>\r
251                          </request-info> \r
252                          <network-inputs> \r
253                                 <network-id>${networkId}</network-id> \r
254                                 <network-name>${instanceName}</network-name> \r
255                                 <network-type>${modelName}</network-type>\r
256                                 <aic-cloud-region>${lcpCloudRegionId}</aic-cloud-region> \r
257                                 <tenant-id>${tenantId}</tenant-id>\r
258                                 <service-id>${serviceId}</service-id> \r
259                                 <backout-on-failure>${backoutOnFailure}</backout-on-failure>\r
260                 <sdncVersion>${sdncVersion}</sdncVersion>\r
261                          </network-inputs> \r
262                          <network-params>\r
263                                 ${userParamsNode}\r
264                          </network-params> \r
265                         </network-request>\r
266                         """\r
267                         // return a pretty-print of the volume-request xml without the preamble\r
268                         return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")\r
269                         \r
270                 } catch(Exception e) {\r
271                         throw e\r
272                 }\r
273         }\r
274         \r
275         /**\r
276          * Create a network-request XML using a map, \r
277          * @param execution \r
278          * @return\r
279          */\r
280         public String createXmlNetworkRequestInstance(execution) {\r
281 \r
282                 def networkModelVersionId = ""\r
283                 def networkModelName = ""\r
284                 def networkModelType = ""\r
285                 def networkModelVersion = ""\r
286                 def networkModelCustomizationId = ""\r
287                 def networkModelInvariantId = ""\r
288                 \r
289                 // verify the DB Catalog response JSON structure\r
290                 def networkModelInfo = execution.getVariable("networkModelInfo")\r
291                 def jsonSlurper = new JsonSlurper()\r
292                 if (networkModelInfo != null) {\r
293                         try {\r
294                                 Map modelMap = jsonSlurper.parseText(networkModelInfo)\r
295                                 if (modelMap != null) {\r
296                                         if (networkModelInfo.contains("modelVersionId")) {\r
297                                                 networkModelVersionId = modelMap.modelVersionId !=null ? modelMap.modelVersionId : ""\r
298                                         }\r
299                                         if (networkModelInfo.contains("modelName")) {\r
300                                                 networkModelName = modelMap.modelName !=null ? modelMap.modelName : ""\r
301                                         }\r
302                                         if (networkModelInfo.contains("modelType")) {\r
303                                                 networkModelType = modelMap.modelType !=null ? modelMap.modelType : ""\r
304                                         }\r
305                                         if (networkModelInfo.contains("modelVersion")) {\r
306                                                 networkModelVersion = modelMap.modelVersion !=null ? modelMap.modelVersion : ""\r
307                                         }\r
308                                         if (networkModelInfo.contains("modelCustomizationId")) {\r
309                                             networkModelCustomizationId = modelMap.modelCustomizationId !=null ? modelMap.modelCustomizationId : ""\r
310                                         }\r
311                                         if (networkModelInfo.contains("modelInvariantId")) {\r
312                                                 networkModelInvariantId = modelMap.modelInvariantId !=null ? modelMap.modelInvariantId : ""\r
313                                         }\r
314                                 }\r
315                         } catch (Exception ex) {\r
316                         throw ex\r
317                         }\r
318                 }               \r
319                 \r
320                 def serviceModelVersionId = ""\r
321                 def serviceModelName = ""\r
322                 def serviceModelType = ""\r
323                 def serviceModelVersion = ""\r
324                 def serviceModelCustomizationId = ""\r
325                 def serviceModelInvariantId = ""\r
326                 \r
327                 // verify the DB Catalog response JSON structure\r
328                 def serviceModelInfo = execution.getVariable("serviceModelInfo")\r
329                 def jsonServiceSlurper = new JsonSlurper()\r
330                 if (serviceModelInfo != null) {\r
331                         try {\r
332                                 Map modelMap = jsonServiceSlurper.parseText(serviceModelInfo)\r
333                                 if (modelMap != null) {\r
334                                         if (serviceModelInfo.contains("modelVersionId")) {\r
335                                                 serviceModelVersionId = modelMap.modelVersionId !=null ? modelMap.modelVersionId : ""\r
336                                         }\r
337                                         if (serviceModelInfo.contains("modelName")) {\r
338                                                 serviceModelName = modelMap.modelName !=null ? modelMap.modelName : ""\r
339                                         }\r
340                                         if (serviceModelInfo.contains("modelType")) {\r
341                                                 serviceModelType = modelMap.modelType !=null ? modelMap.modelType : ""\r
342                                         }\r
343                                         if (serviceModelInfo.contains("modelVersion")) {\r
344                                                 serviceModelVersion = modelMap.modelVersion !=null ? modelMap.modelVersion : ""\r
345                                         }\r
346                                         if (serviceModelInfo.contains("modelCustomizationId")) {\r
347                                                 serviceModelCustomizationId = modelMap.modelCustomizationId !=null ? modelMap.modelCustomizationId : ""\r
348                                         }\r
349                                         if (serviceModelInfo.contains("modelInvariantId")) {\r
350                                                 serviceModelInvariantId = modelMap.modelInvariantId !=null ? modelMap.modelInvariantId : ""\r
351                                         }\r
352                                 }\r
353                         } catch (Exception ex) {\r
354                                 throw ex\r
355                         }\r
356                 }\r
357                 \r
358                 \r
359                 def subscriptionServiceType = execution.getVariable("subscriptionServiceType") != null ? execution.getVariable("subscriptionServiceType") : ""\r
360                 def globalSubscriberId = execution.getVariable("globalSubscriberId") != null ? execution.getVariable("globalSubscriberId") : ""\r
361                 def requestId = execution.getVariable("msoRequestId")\r
362                 def serviceInstanceId = execution.getVariable("serviceInstanceId") != null ? execution.getVariable("serviceInstanceId") : ""\r
363                 def networkId = (execution.getVariable("networkId")) != null ? execution.getVariable("networkId") : "" // optional\r
364                 def networkName =  execution.getVariable("networkName") != null ? execution.getVariable("networkName") : "" // optional\r
365                 def aicCloudReqion = execution.getVariable("lcpCloudRegionId") != null ? execution.getVariable("lcpCloudRegionId") : ""\r
366                 def tenantId = execution.getVariable("tenantId") != null ? execution.getVariable("tenantId") : ""\r
367                 def serviceId = execution.getVariable("productFamilyId") != null ? execution.getVariable("productFamilyId") : ""\r
368                 def failIfExist = execution.getVariable("failIfExists") != null ? execution.getVariable("failIfExists") : ""\r
369                 def suppressRollback = execution.getVariable("disableRollback")   \r
370                 def backoutOnFailure = "true"\r
371                 if(suppressRollback != null){\r
372                         if (suppressRollback == true || suppressRollback == "true") {\r
373                                 backoutOnFailure = "false"\r
374                         } else if (suppressRollback == false || suppressRollback == "false") {\r
375                                 backoutOnFailure = "true"\r
376                         }\r
377                 }\r
378                 \r
379                 //'sdncVersion' = current, '1610' (non-RPC SDNC) or '1702' (RPC SDNC)\r
380                 def sdncVersion =  execution.getVariable("sdncVersion")\r
381                 \r
382                 def source = "VID"\r
383                 def action = execution.getVariable("action")\r
384                                 \r
385                 def userParamsNode = ""\r
386                 def userParams = execution.getVariable("networkInputParams")\r
387                 if(userParams != null) {\r
388                    userParamsNode = buildUserParams(userParams)\r
389                 }\r
390                 \r
391                 def xmlReq = """\r
392                 <network-request xmlns="http://www.w3.org/2001/XMLSchema"> \r
393                  <request-info> \r
394             <request-id>${requestId}</request-id>\r
395                         <action>${action}</action> \r
396                         <source>${source}</source> \r
397                         <service-instance-id>${serviceInstanceId}</service-instance-id>\r
398                  </request-info> \r
399                  <network-inputs> \r
400                         <network-id>${networkId}</network-id> \r
401                         <network-name>${networkName}</network-name> \r
402                         <network-type>${networkModelType}</network-type>\r
403                         <subscription-service-type>${subscriptionServiceType}</subscription-service-type>\r
404             <global-customer-id>${globalSubscriberId}</global-customer-id>\r
405                         <aic-cloud-region>${aicCloudReqion}</aic-cloud-region> \r
406                         <tenant-id>${tenantId}</tenant-id>\r
407                         <service-id>${serviceId}</service-id> \r
408                         <backout-on-failure>${backoutOnFailure}</backout-on-failure>\r
409                         <failIfExist>${failIfExist}</failIfExist>\r
410             <networkModelInfo>\r
411               <modelName>${networkModelName}</modelName>\r
412               <modelUuid>${networkModelVersionId}</modelUuid>\r
413               <modelInvariantUuid>${networkModelInvariantId}</modelInvariantUuid>            \r
414               <modelVersion>${networkModelVersion}</modelVersion>\r
415               <modelCustomizationUuid>${networkModelCustomizationId}</modelCustomizationUuid>\r
416               <modelType>${networkModelType}</modelType>              \r
417                     </networkModelInfo>\r
418             <serviceModelInfo>\r
419               <modelName>${serviceModelName}</modelName>\r
420               <modelUuid>${serviceModelVersionId}</modelUuid>\r
421               <modelInvariantUuid>${serviceModelInvariantId}</modelInvariantUuid>            \r
422               <modelVersion>${serviceModelVersion}</modelVersion>\r
423               <modelCustomizationUuid>${serviceModelCustomizationId}</modelCustomizationUuid>\r
424               <modelType>${serviceModelType}</modelType>              \r
425                     </serviceModelInfo>                                                                                                 \r
426             <sdncVersion>${sdncVersion}</sdncVersion>                    \r
427                  </network-inputs>\r
428                  <network-params>\r
429                         ${userParamsNode}\r
430                  </network-params> \r
431                 </network-request>\r
432                 """\r
433                 // return a pretty-print of the volume-request xml without the preamble\r
434                 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")\r
435                         \r
436         }\r
437         \r
438         /**\r
439          * Create a vnf-request XML using a map\r
440          * @param requestMap - map created from VID JSON \r
441          * @param action\r
442          * @return\r
443          */\r
444         public String createXmlVfModuleRequest(execution, Map requestMap, String action, String serviceInstanceId) {\r
445                                 \r
446                 //def relatedInstanceList = requestMap.requestDetails.relatedInstanceList\r
447                 \r
448                 //relatedInstanceList.each {\r
449                 //      if (it.relatedInstance.modelInfo.modelType == 'vnf') {\r
450                 //              vnfType = it.relatedInstance.modelInfo.modelName\r
451                 //              vnfId = it.relatedInstance.modelInfo.modelInvariantId\r
452                 //      }\r
453                 //}\r
454                 \r
455                 def vnfName = ''\r
456                 def asdcServiceModelInfo = ''\r
457                                 \r
458                 def relatedInstanceList = requestMap.requestDetails?.relatedInstanceList\r
459                 \r
460                 \r
461                 if (relatedInstanceList != null) {\r
462                         relatedInstanceList.each {\r
463                                 if (it.relatedInstance.modelInfo?.modelType == 'service') {\r
464                                         asdcServiceModelInfo = it.relatedInstance.modelInfo?.modelVersion\r
465                                 }\r
466                                 if (it.relatedInstance.modelInfo.modelType == 'vnf') {\r
467                                         vnfName = it.relatedInstance.instanceName ?: ''\r
468                                 }\r
469                         }\r
470                 }\r
471                 \r
472                 def vnfType = execution.getVariable('vnfType')\r
473                 def vnfId = execution.getVariable('vnfId')\r
474 \r
475                 def vfModuleId = execution.getVariable('vfModuleId')\r
476                 def volumeGroupId = execution.getVariable('volumeGroupId')\r
477                 def userParams = requestMap.requestDetails?.requestParameters?.userParams\r
478                 \r
479                 \r
480                 def userParamsNode = ''\r
481                 if(userParams != null) {\r
482                         userParamsNode = buildUserParams(userParams)\r
483                 }\r
484                 \r
485                 def isBaseVfModule = "false"\r
486                 if (execution.getVariable('isBaseVfModule') == true) {\r
487                         isBaseVfModule = "true"         \r
488                 }\r
489                 \r
490                 def requestId = execution.getVariable("mso-request-id")         \r
491                 def vfModuleName = requestMap.requestDetails?.requestInfo?.instanceName ?: ''\r
492                 def vfModuleModelName = requestMap.requestDetails?.modelInfo?.modelName ?: ''\r
493                 def suppressRollback = requestMap.requestDetails?.requestInfo?.suppressRollback\r
494                 \r
495                 def backoutOnFailure = ""\r
496                 if(suppressRollback != null){\r
497                         if ( suppressRollback == true) {\r
498                                 backoutOnFailure = "false"\r
499                         } else if ( suppressRollback == false) {\r
500                                 backoutOnFailure = "true"\r
501                         }\r
502                 }\r
503                 \r
504                 def serviceId = requestMap.requestDetails?.requestParameters?.serviceId ?: ''\r
505                 def aicCloudRegion = requestMap.requestDetails?.cloudConfiguration?.lcpCloudRegionId ?: ''\r
506                 def tenantId = requestMap.requestDetails?.cloudConfiguration?.tenantId ?: ''\r
507                 def personaModelId = requestMap.requestDetails?.modelInfo?.modelInvariantId ?: ''\r
508                 def personaModelVersion = requestMap.requestDetails?.modelInfo?.modelVersion ?: ''\r
509                 def modelCustomizationId = requestMap.requestDetails?.modelInfo?.modelCustomizationId ?: ''\r
510                 \r
511                 def xmlReq = """\r
512                 <vnf-request>\r
513                         <request-info>\r
514                                 <request-id>${requestId}</request-id>\r
515                                 <action>${action}</action>\r
516                                 <source>VID</source>\r
517                                 <!-- new 1610 field -->\r
518                                 <service-instance-id>${serviceInstanceId}</service-instance-id>\r
519                         </request-info>\r
520                         <vnf-inputs>\r
521                                 <!-- not in use in 1610 -->\r
522                                 <vnf-name>${vnfName}</vnf-name>                                 \r
523                                 <vnf-type>${vnfType}</vnf-type>\r
524                                 <vnf-id>${vnfId}</vnf-id>\r
525                                 <volume-group-id>${volumeGroupId}</volume-group-id>\r
526                                 <vf-module-id>${vfModuleId}</vf-module-id>\r
527                                 <vf-module-name>${vfModuleName}</vf-module-name>                                \r
528                                 <vf-module-model-name>${vfModuleModelName}</vf-module-model-name>\r
529                                 <model-customization-id>${modelCustomizationId}</model-customization-id>\r
530                                 <is-base-vf-module>${isBaseVfModule}</is-base-vf-module>\r
531                                 <asdc-service-model-version>${asdcServiceModelInfo}</asdc-service-model-version>\r
532                                 <aic-cloud-region>${aicCloudRegion}</aic-cloud-region>                          \r
533                                 <tenant-id>${tenantId}</tenant-id>\r
534                                 <service-id>${serviceId}</service-id>\r
535                                 <backout-on-failure>${backoutOnFailure}</backout-on-failure>\r
536                                 <persona-model-id>${personaModelId}</persona-model-id>\r
537                                 <persona-model-version>${personaModelVersion}</persona-model-version>\r
538                         </vnf-inputs>\r
539                         <vnf-params>\r
540                                 $userParamsNode\r
541                         </vnf-params>\r
542                 </vnf-request>\r
543                 """\r
544         \r
545                 // return a pretty-print of the volume-request xml without the preamble\r
546                 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "") \r
547         }\r
548         \r
549 \r
550 }\r