2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package com.att.bpm.scripts
23 import org.json.JSONObject;
26 import org.openecomp.mso.bpmn.core.xml.XmlTool;
28 import groovy.json.JsonBuilder
29 import groovy.json.JsonSlurper
30 import groovy.util.slurpersupport.GPathResult
31 import groovy.xml.QName
35 public MsoUtils utils = new MsoUtils()
36 private AbstractServiceTaskProcessor taskProcessor
38 public VidUtils(AbstractServiceTaskProcessor taskProcessor) {
39 this.taskProcessor = taskProcessor
43 * Create a volume-request XML using a JSON string
44 * @param jsonReq - JSON request from VID
48 public String createXmlVolumeRequest(String jsonReq, String action, String serviceInstanceId) {
49 def jsonSlurper = new JsonSlurper()
51 Map reqMap = jsonSlurper.parseText(jsonReq)
52 return createXmlVolumeRequest(reqMap, action, serviceInstanceId)
60 * Create a volume-request XML using a map
61 * @param requestMap - map created from VID JSON
63 * @param serviceInstanceId
66 public String createXmlVolumeRequest(Map requestMap, String action, String serviceInstanceId) {
67 createXmlVolumeRequest(requestMap, action, serviceInstanceId, '')
72 * Create a volume-request XML using a map
75 * @param serviceInstanceId
76 * @param volumeGroupId
79 public String createXmlVolumeRequest(Map requestMap, String action, String serviceInstanceId, String volumeGroupId) {
82 def modelCustomizationName = ''
83 def asdcServiceModelVersion = ''
85 def suppressRollback = requestMap.requestDetails.requestInfo.suppressRollback
86 def rollbackEnabled = true
87 if(suppressRollback != null && suppressRollback == true) {
88 rollbackEnabled = false
91 def volGrpName = requestMap.requestDetails.requestInfo?.instanceName ?: ''
92 def serviceId = requestMap.requestDetails.requestParameters?.serviceId ?: ''
93 def relatedInstanceList = requestMap.requestDetails.relatedInstanceList
94 relatedInstanceList.each {
95 if (it.relatedInstance.modelInfo?.modelType == 'service') {
96 serviceName = it.relatedInstance.modelInfo?.modelName
97 asdcServiceModelVersion = it.relatedInstance.modelInfo?.modelVersion
99 if (it.relatedInstance.modelInfo?.modelType == 'vnf') {
100 modelCustomizationName = it.relatedInstance.modelInfo?.modelCustomizationName
104 vnfType = serviceName + '/' + modelCustomizationName
106 def userParams = requestMap.requestDetails?.requestParameters?.userParams
107 def userParamsNode = ''
108 if(userParams != null) {
109 userParamsNode = buildUserParams(userParams)
112 <volume-request xmlns="http://www.w3.org/2001/XMLSchema">
114 <action>${action}</action>
115 <source>${requestMap.requestDetails.requestInfo.source}</source>
116 <service-instance-id>${serviceInstanceId}</service-instance-id>
119 <volume-group-id>${volumeGroupId}</volume-group-id>
120 <volume-group-name>${volGrpName}</volume-group-name>
121 <vnf-type>${vnfType}</vnf-type>
122 <vf-module-model-name>${requestMap.requestDetails.modelInfo.modelName}</vf-module-model-name>
123 <asdc-service-model-version>${asdcServiceModelVersion}</asdc-service-model-version>
124 <aic-cloud-region>${requestMap.requestDetails.cloudConfiguration.lcpCloudRegionId}</aic-cloud-region>
125 <tenant-id>${requestMap.requestDetails.cloudConfiguration.tenantId}</tenant-id>
126 <service-id>${serviceId}</service-id>
127 <backout-on-failure>${rollbackEnabled}</backout-on-failure>
134 // return a pretty-print of the volume-request xml without the preamble
135 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")
139 * A common method that can be used to build volume-params node from a map.
140 * @param Map userParams
143 public String buildUserParams(userParams) {
144 if (userParams == null) return ""
148 userParams.each {it ->
149 key = it.name.replaceAll(/\B[A-Z]/) { '_' + it }.toLowerCase()
151 xml += "<param name=\"${key}\">${value}</param>"
158 * A common method that can be used to extract 'requestDetails'
160 * @return String json requestDetails
163 public getJsonRequestDetails(String jsonInput) {
165 if (jsonInput.isEmpty() || jsonInput == null) {
168 def jsonMapObject = new JsonSlurper().parseText(jsonInput)
169 if (jsonMapObject instanceof Map) {
170 String jsonString = new JsonBuilder(jsonMapObject.requestDetails)
171 rtn = '{'+"requestDetails"+":"+jsonString+'}'
180 * A common method that can be used to extract 'requestDetails' in Xml
182 * @return String xml requestDetails
185 public getJsonRequestDetailstoXml(String jsonInput) {
187 def jsonString = getJsonRequestDetails(jsonInput)
188 if (jsonString == null) {
191 JSONObject jsonObj = new JSONObject(jsonString)
192 return XmlTool.normalize(XML.toString(jsonObj))
197 * Create a network-request XML using a map
199 * @param xmlRequestDetails - requestDetails in xml
202 public String createXmlNetworkRequestInfra(execution, def networkJsonIncoming) {
204 def requestId = execution.getVariable("requestId")
205 def serviceInstanceId = execution.getVariable("serviceInstanceId")
206 def requestAction = execution.getVariable("requestAction")
207 def networkId = (execution.getVariable("networkId")) != null ? execution.getVariable("networkId") : ""
209 def jsonSlurper = new JsonSlurper()
211 Map reqMap = jsonSlurper.parseText(networkJsonIncoming)
212 def instanceName = reqMap.requestDetails.requestInfo.instanceName
213 def modelName = reqMap.requestDetails.modelInfo.modelName
214 def lcpCloudRegionId = reqMap.requestDetails.cloudConfiguration.lcpCloudRegionId
215 def tenantId = reqMap.requestDetails.cloudConfiguration.tenantId
216 def serviceId = reqMap.requestDetails.requestInfo.productFamilyId
217 def backoutOnFailure = reqMap.requestDetails.requestInfo.suppressRollback
219 //def userParams = reqMap.requestDetails.requestParameters.userParams
220 //def userParamsNode = buildUserParams(userParams)
221 def userParams = reqMap.requestDetails?.requestParameters?.userParams
222 def userParamsNode = ''
223 if(userParams != null) {
224 userParamsNode = buildUserParams(userParams)
228 <network-request xmlns="http://www.w3.org/2001/XMLSchema">
230 <request-id>${requestId}</request-id>
231 <action>${requestAction}</action>
233 <service-instance-id>${serviceInstanceId}</service-instance-id>
236 <network-id>${networkId}</network-id>
237 <network-name>${instanceName}</network-name>
238 <network-type>${modelName}</network-type>
239 <aic-cloud-region>${lcpCloudRegionId}</aic-cloud-region>
240 <tenant-id>${tenantId}</tenant-id>
241 <service-id>${serviceId}</service-id>
242 <backout-on-failure>${backoutOnFailure}</backout-on-failure>
249 // return a pretty-print of the volume-request xml without the preamble
250 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")
252 } catch(Exception e) {
258 * Create a vnf-request XML using a map
259 * @param requestMap - map created from VID JSON
263 public String createXmlVfModuleRequest(execution, Map requestMap, String action, String serviceInstanceId) {
265 //def relatedInstanceList = requestMap.requestDetails.relatedInstanceList
267 //relatedInstanceList.each {
268 // if (it.relatedInstance.modelInfo.modelType == 'vnf') {
269 // vnfType = it.relatedInstance.modelInfo.modelName
270 // vnfId = it.relatedInstance.modelInfo.modelInvariantId
275 def asdcServiceModelInfo = ''
277 def relatedInstanceList = requestMap.requestDetails?.relatedInstanceList
280 if (relatedInstanceList != null) {
281 relatedInstanceList.each {
282 if (it.relatedInstance.modelInfo?.modelType == 'service') {
283 asdcServiceModelInfo = it.relatedInstance.modelInfo?.modelVersion
285 if (it.relatedInstance.modelInfo.modelType == 'vnf') {
286 vnfName = it.relatedInstance.instanceName ?: ''
291 def vnfType = execution.getVariable('vnfType')
292 def vnfId = execution.getVariable('vnfId')
294 def vfModuleId = execution.getVariable('vfModuleId')
295 def volumeGroupId = execution.getVariable('volumeGroupId')
296 def userParams = requestMap.requestDetails?.requestParameters?.userParams
299 def userParamsNode = ''
300 if(userParams != null) {
301 userParamsNode = buildUserParams(userParams)
304 def isBaseVfModule = "false"
305 if (execution.getVariable('isBaseVfModule') == true) {
306 isBaseVfModule = "true"
309 def requestId = execution.getVariable("att-mso-request-id")
310 def vfModuleName = requestMap.requestDetails?.requestInfo?.instanceName ?: ''
311 def vfModuleModelName = requestMap.requestDetails?.modelInfo?.modelName ?: ''
312 def suppressRollback = requestMap.requestDetails?.requestInfo?.suppressRollback
313 def backoutOnFailure = "true"
314 if(suppressRollback != null && suppressRollback == true) {
315 backoutOnFailure = "false"
318 def serviceId = requestMap.requestDetails?.requestParameters?.serviceId ?: ''
319 def aicCloudRegion = requestMap.requestDetails?.cloudConfiguration?.lcpCloudRegionId ?: ''
320 def tenantId = requestMap.requestDetails?.cloudConfiguration?.tenantId ?: ''
321 def personaModelId = requestMap.requestDetails?.modelInfo?.modelInvariantId ?: ''
322 def personaModelVersion = requestMap.requestDetails?.modelInfo?.modelVersion ?: ''
327 <request-id>${requestId}</request-id>
328 <action>${action}</action>
330 <!-- new 1610 field -->
331 <service-instance-id>${serviceInstanceId}</service-instance-id>
334 <!-- not in use in 1610 -->
335 <vnf-name>${vnfName}</vnf-name>
336 <vnf-type>${vnfType}</vnf-type>
337 <vnf-id>${vnfId}</vnf-id>
338 <volume-group-id>${volumeGroupId}</volume-group-id>
339 <vf-module-id>${vfModuleId}</vf-module-id>
340 <vf-module-name>${vfModuleName}</vf-module-name>
341 <vf-module-model-name>${vfModuleModelName}</vf-module-model-name>
342 <is-base-vf-module>${isBaseVfModule}</is-base-vf-module>
343 <asdc-service-model-version>${asdcServiceModelInfo}</asdc-service-model-version>
344 <aic-cloud-region>${aicCloudRegion}</aic-cloud-region>
345 <tenant-id>${tenantId}</tenant-id>
346 <service-id>${serviceId}</service-id>
347 <backout-on-failure>${backoutOnFailure}</backout-on-failure>
348 <persona-model-id>${personaModelId}</persona-model-id>
349 <persona-model-version>${personaModelVersion}</persona-model-version>
357 // return a pretty-print of the volume-request xml without the preamble
358 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")