1 package org.onap.vid.job.command
3 import com.google.common.collect.ImmutableList
4 import org.apache.commons.lang3.ObjectUtils.defaultIfNull
5 import org.apache.commons.lang3.StringUtils
6 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate
7 import org.onap.vid.aai.AaiClientInterface
8 import org.onap.vid.aai.ExceptionWithRequestInfo
9 import org.onap.vid.aai.model.ResourceType
10 import org.onap.vid.changeManagement.RequestDetailsWrapper
11 import org.onap.vid.model.serviceInstantiation.*
12 import org.onap.vid.mso.model.*
13 import org.onap.vid.mso.model.BaseResourceInstantiationRequestDetails.*
14 import org.onap.vid.mso.model.ServiceInstantiationRequestDetails.UserParamNameAndValue
15 import org.onap.vid.mso.rest.SubscriberInfo
16 import org.onap.vid.properties.Features
17 import org.onap.vid.services.AsyncInstantiationBusinessLogic
18 import org.onap.vid.services.CloudOwnerService
19 import org.onap.vid.services.UserParamsContainer
20 import org.springframework.beans.factory.annotation.Autowired
21 import org.springframework.stereotype.Service
22 import org.togglz.core.manager.FeatureManager
24 import java.util.Collections.emptyList
25 import java.util.stream.Collectors
28 class MsoRequestBuilder
29 @Autowired constructor(private val asyncInstantiationBL: AsyncInstantiationBusinessLogic,
30 private val cloudOwnerService: CloudOwnerService,
31 private val aaiClient: AaiClientInterface,
32 private val featureManager: FeatureManager) {
35 private val LOGGER = EELFLoggerDelegate.getLogger(MsoRequestBuilder::class.java)
36 private const val VID_SOURCE = "VID"
37 private const val DISABLED_HOMING_VALUE = "none"
40 fun generateALaCarteServiceInstantiationRequest(payload: ServiceInstantiation, optimisticUniqueServiceInstanceName: String, userId: String): RequestDetailsWrapper<ServiceInstantiationRequestDetails> {
41 val userParams = generateUserParamList()
43 val requestParameters = ServiceInstantiationRequestDetails.RequestParameters(payload.subscriptionServiceType, true, userParams, payload.testApi)
45 val requestDetails = generateServiceInstantiationRequestDetails(payload, requestParameters, optimisticUniqueServiceInstanceName, userId)
47 return RequestDetailsWrapper(requestDetails)
50 fun generateServiceDeletionRequest(payload: ServiceInstantiation, userId: String): RequestDetailsWrapper<ServiceDeletionRequestDetails> {
52 val requestParameters = ServiceDeletionRequestDetails.RequestParameters(payload.isALaCarte, payload.testApi)
54 val requestInfo = ServiceDeletionRequestDetails.RequestInfo(
58 val requestDetails = ServiceDeletionRequestDetails(payload.modelInfo, requestInfo, requestParameters)
60 return RequestDetailsWrapper(requestDetails)
63 fun generateMacroServiceInstantiationRequest(jobId: UUID?, payload: ServiceInstantiation, optimisticUniqueServiceInstanceName: String, userId: String): RequestDetailsWrapper<ServiceInstantiationRequestDetails> {
64 val serviceInstanceName = generateServiceName(jobId, payload, optimisticUniqueServiceInstanceName)
66 val serviceInstantiationServiceList = generateMacroServiceInstantiationRequestParams(payload, serviceInstanceName, jobId)
68 val requestParameters = ServiceInstantiationRequestDetails.RequestParameters(payload.subscriptionServiceType, false, serviceInstantiationServiceList)
70 val requestDetails = generateServiceInstantiationRequestDetails(payload, requestParameters, serviceInstanceName, userId)
72 return RequestDetailsWrapper(requestDetails)
75 fun generateNetworkInstantiationRequest(networkDetails: Network, serviceModelInfo: ModelInfo, serviceInstanceId: String, userId: String, testApi: String?): RequestDetailsWrapper<NetworkInstantiationRequestDetails> {
76 val requestInfo = generateRequestInfo(networkDetails.instanceName, ResourceType.L3_NETWORK, networkDetails.isRollbackOnFailure, networkDetails.productFamilyId, userId)
77 val cloudConfiguration = generateCloudConfiguration(networkDetails.lcpCloudRegionId, networkDetails.tenantId)
78 val platform = Platform(networkDetails.platformName)
79 val lineOfBusiness = LineOfBusiness.of(networkDetails.lineOfBusiness)
80 val requestParameters = BaseResourceInstantiationRequestDetails.RequestParameters(generateUserParamList(), testApi)
81 val relatedInstanceList = generateRelatedInstances(mapOf(serviceInstanceId to serviceModelInfo))
82 return RequestDetailsWrapper(NetworkInstantiationRequestDetails(networkDetails.modelInfo, cloudConfiguration, requestInfo, platform, lineOfBusiness, relatedInstanceList, requestParameters))
85 fun generateVnfInstantiationRequest(vnfDetails: Vnf, serviceModelInfo: ModelInfo, serviceInstanceId: String, userId: String, testApi: String?): RequestDetailsWrapper<VnfInstantiationRequestDetails> {
86 val requestInfo = generateRequestInfo(vnfDetails.instanceName, ResourceType.GENERIC_VNF, vnfDetails.isRollbackOnFailure, vnfDetails.productFamilyId, userId)
87 val cloudConfiguration = generateCloudConfiguration(vnfDetails.lcpCloudRegionId, vnfDetails.tenantId)
88 val platform = Platform(vnfDetails.platformName)
89 val lineOfBusiness = LineOfBusiness.of(vnfDetails.lineOfBusiness)
90 val requestParameters = BaseResourceInstantiationRequestDetails.RequestParameters(generateUserParamList(), testApi)
91 val relatedInstanceList = generateRelatedInstances(mapOf(serviceInstanceId to serviceModelInfo))
92 return RequestDetailsWrapper(VnfInstantiationRequestDetails(vnfDetails.modelInfo, cloudConfiguration, requestInfo, platform, lineOfBusiness, relatedInstanceList, requestParameters))
95 fun generateDeleteVnfRequest(vnfDetails: Vnf, userId: String): RequestDetailsWrapper<VnfInstantiationRequestDetails> {
96 val requestInfo = generateRequestInfo(null, null, null, null, userId)
97 val cloudConfiguration = generateCloudConfiguration(vnfDetails.lcpCloudRegionId, vnfDetails.tenantId)
98 return RequestDetailsWrapper(VnfInstantiationRequestDetails(vnfDetails.modelInfo, cloudConfiguration, requestInfo, null, null, null, null))
101 protected fun generateVfModuleRequestWithRequestParams(
102 vfModuleDetails: VfModule, serviceModelInfo: ModelInfo,
103 serviceInstanceId: String, vnfModelInfo: ModelInfo, vnfInstanceId: String, vgInstanceId: String?, userId: String,
104 requestParameters: (userParams: List<UserParamTypes>) -> RequestParametersVfModuleOrVolumeGroup
105 ): RequestDetailsWrapper<VfModuleOrVolumeGroupRequestDetails> {
106 val requestInfo = generateRequestInfo(vfModuleDetails.instanceName, ResourceType.VF_MODULE, vfModuleDetails.isRollbackOnFailure, null, userId)
108 //cloud configuration
109 val cloudConfiguration = generateCloudConfiguration(vfModuleDetails.lcpCloudRegionId, vfModuleDetails.tenantId)
111 val userParams = UserParamsContainer(extractActualInstanceParams(vfModuleDetails.instanceParams), vfModuleDetails.supplementaryParams)
113 //related instance list
114 val relatedInstanceList = generateRelatedInstances(mapOf(serviceInstanceId to serviceModelInfo, vnfInstanceId to vnfModelInfo))
115 if (StringUtils.isNotEmpty(vgInstanceId)) {
116 val volumeGroupModel = ModelInfo()
117 volumeGroupModel.modelType = "volumeGroup"
118 relatedInstanceList.add(RelatedInstance(volumeGroupModel, vgInstanceId, vfModuleDetails.volumeGroupInstanceName))
121 return RequestDetailsWrapper(VfModuleOrVolumeGroupRequestDetails(vfModuleDetails.modelInfo, cloudConfiguration, requestInfo, relatedInstanceList, requestParameters(userParams.toALaCarte())))
124 fun generateVfModuleInstantiationRequest(
125 vfModuleDetails: VfModule, serviceModelInfo: ModelInfo,
126 serviceInstanceId: String, vnfModelInfo: ModelInfo, vnfInstanceId: String,
127 vgInstanceId: String?, userId: String, testApi: String?
128 ): RequestDetailsWrapper<VfModuleOrVolumeGroupRequestDetails> {
129 val requestParameters = { userParams: List<UserParamTypes> ->
130 RequestParametersVfModuleOrVolumeGroupInstantiation(userParams, vfModuleDetails.isUsePreload, testApi)
133 return generateVfModuleRequestWithRequestParams(vfModuleDetails, serviceModelInfo, serviceInstanceId,
134 vnfModelInfo, vnfInstanceId, vgInstanceId, userId, requestParameters)
137 fun generateVfModuleReplaceRequest(
138 vfModuleDetails: VfModule, serviceModelInfo: ModelInfo,
139 serviceInstanceId: String, vnfModelInfo: ModelInfo, vnfInstanceId: String,
140 vgInstanceId: String?, userId: String, testApi: String?
141 ): RequestDetailsWrapper<VfModuleOrVolumeGroupRequestDetails> {
142 val requestParameters = { userParams: List<UserParamTypes> ->
143 RequestParametersVfModuleUpgrade(userParams, vfModuleDetails.isUsePreload, testApi,
144 vfModuleDetails.isRetainAssignments, nullSafeNegate(vfModuleDetails.isRetainVolumeGroups))
147 return generateVfModuleRequestWithRequestParams(vfModuleDetails, serviceModelInfo, serviceInstanceId,
148 vnfModelInfo, vnfInstanceId, vgInstanceId, userId, requestParameters)
151 private fun nullSafeNegate(booleanValue: Boolean?): Boolean? = booleanValue?.not()
153 fun generateVolumeGroupInstantiationRequest(vfModuleDetails: VfModule, serviceModelInfo: ModelInfo, serviceInstanceId: String, vnfModelInfo: ModelInfo, vnfInstanceId: String, userId: String, testApi: String?): RequestDetailsWrapper<VolumeGroupRequestDetails> {
154 val requestInfo = generateRequestInfo(vfModuleDetails.volumeGroupInstanceName, ResourceType.VOLUME_GROUP, vfModuleDetails.isRollbackOnFailure, null, userId)
155 val cloudConfiguration = generateCloudConfiguration(vfModuleDetails.lcpCloudRegionId, vfModuleDetails.tenantId)
156 val userParams = UserParamsContainer(extractActualInstanceParams(vfModuleDetails.instanceParams), vfModuleDetails.supplementaryParams)
157 val requestParameters = RequestParametersVfModuleOrVolumeGroupInstantiation(userParams.toALaCarte(), vfModuleDetails.isUsePreload, testApi)
158 val relatedInstances = generateRelatedInstances(mapOf(serviceInstanceId to serviceModelInfo, vnfInstanceId to vnfModelInfo))
160 vfModuleDetails.modelInfo.modelType = "volumeGroup"
161 return RequestDetailsWrapper(VolumeGroupRequestDetails(vfModuleDetails.modelInfo, cloudConfiguration, requestInfo, relatedInstances, requestParameters))
164 fun generateInstanceGroupInstantiationRequest(instanceGroupDetails: InstanceGroup, serviceModelInfo: ModelInfo, serviceInstanceId: String, userId: String, testApi: String?): RequestDetailsWrapper<InstanceGroupInstantiationRequestDetails> {
165 val requestInfo = generateRequestInfo(instanceGroupDetails.instanceName, ResourceType.INSTANCE_GROUP, instanceGroupDetails.isRollbackOnFailure, null, userId)
166 val requestParameters = BaseResourceInstantiationRequestDetails.RequestParameters(generateUserParamList(), testApi)
167 val relatedInstanceList = generateRelatedInstances(mapOf(serviceInstanceId to serviceModelInfo))
168 return RequestDetailsWrapper(InstanceGroupInstantiationRequestDetails(instanceGroupDetails.modelInfo, requestInfo, relatedInstanceList, requestParameters))
171 fun generateInstanceGroupMemberRequest(instanceGroupMemberId: String, userId: String): RequestDetailsWrapper<AddOrRemoveInstanceGroupMemberRequestDetails> {
172 val requestInfo = generateRequestInfo(null, null, null, null, userId)
173 val modelInfo = ModelInfo()
174 modelInfo.modelType = "vnf"
175 val relatedInstanceList = generateRelatedInstances(mapOf(instanceGroupMemberId to modelInfo))
176 return RequestDetailsWrapper(AddOrRemoveInstanceGroupMemberRequestDetails(requestInfo, relatedInstanceList))
179 fun generateDeleteNetworkRequest(networkDetails: Network, userId: String): RequestDetailsWrapper<NetworkInstantiationRequestDetails> {
180 val requestInfo = generateRequestInfo(null, null, null, null, userId)
181 val cloudConfiguration = generateCloudConfiguration(networkDetails.lcpCloudRegionId, networkDetails.tenantId)
182 return RequestDetailsWrapper(NetworkInstantiationRequestDetails(networkDetails.modelInfo, cloudConfiguration, requestInfo, null, null, null, null))
185 fun generateDeleteVfModuleRequest(vfModuleDetails: VfModule, userId: String): RequestDetailsWrapper<VfModuleOrVolumeGroupRequestDetails> {
186 val requestInfo = generateRequestInfo(null, null, null, null, userId)
187 val cloudConfiguration = generateCloudConfiguration(vfModuleDetails.lcpCloudRegionId, vfModuleDetails.tenantId)
188 return RequestDetailsWrapper(VfModuleOrVolumeGroupRequestDetails(vfModuleDetails.modelInfo, cloudConfiguration, requestInfo, null, null))
191 private fun generateServiceName(jobId: UUID?, payload: ServiceInstantiation, optimisticUniqueServiceInstanceName: String): String? {
192 var serviceInstanceName: String
193 if (StringUtils.isEmpty(optimisticUniqueServiceInstanceName)) {
194 serviceInstanceName = payload.modelInfo.modelName
196 serviceInstanceName = optimisticUniqueServiceInstanceName
198 return peekServiceName(jobId, payload, serviceInstanceName)
201 private fun peekServiceName(jobId: UUID?, payload: ServiceInstantiation, optimisticUniqueServiceInstanceName: String): String {
202 val serviceInstanceName: String
203 // unique name already exist in service info. If it's free in AAI we use it
204 if (isNameFreeInAai(optimisticUniqueServiceInstanceName, ResourceType.SERVICE_INSTANCE)) {
205 serviceInstanceName = optimisticUniqueServiceInstanceName
207 serviceInstanceName = asyncInstantiationBL.getUniqueName(optimisticUniqueServiceInstanceName, ResourceType.SERVICE_INSTANCE)
208 }//otherwise we used the original service instance name (from payload) to get a new unique name from DB and AAI
210 //update serviceInfo with new name if needed
212 asyncInstantiationBL.updateServiceInfo(jobId) { x -> x.serviceInstanceName = serviceInstanceName }
213 } catch (e: Exception) {
214 LOGGER.error("Failed updating service name {} in serviceInfo", serviceInstanceName, e)
217 return serviceInstanceName
220 @Throws(ExceptionWithRequestInfo::class)
221 private fun isNameFreeInAai(name: String, resourceType: ResourceType): Boolean {
222 return !aaiClient.isNodeTypeExistsByName(name, resourceType)
225 private fun generateServiceInstantiationServicesList(payload: ServiceInstantiation, serviceInstanceName: String?, vnfList: List<ServiceInstantiationRequestDetails.ServiceInstantiationVnf>, pnfList: List<ServiceInstantiationRequestDetails.ServiceInstantiationPnf>): List<ServiceInstantiationRequestDetails.ServiceInstantiationService> {
226 val serviceInstantiationServiceList = LinkedList<ServiceInstantiationRequestDetails.ServiceInstantiationService>()
227 val unFilteredInstanceParams = defaultIfNull<List<MutableMap<String, String>>>(payload.instanceParams, emptyList())
228 val filteredInstanceParams = removeUnNeededParams(unFilteredInstanceParams)
229 val serviceInstantiationService = ServiceInstantiationRequestDetails.ServiceInstantiationService(
232 filteredInstanceParams,
236 serviceInstantiationServiceList.add(serviceInstantiationService)
237 return serviceInstantiationServiceList
240 private fun removeUnNeededParams(instanceParams: List<MutableMap<String, String>>?): List<MutableMap<String, String>> {
241 val keysToRemove = mutableListOf<String>()
242 if (instanceParams.isNullOrEmpty()) {
246 for (key in instanceParams[0].keys) {
247 for (paramToIgnore in AsyncInstantiationBusinessLogic.PARAMS_TO_IGNORE)
248 if (key.equals(paramToIgnore, ignoreCase = true)) {
249 keysToRemove.add(key)
253 val result: MutableMap<String, String> = mutableMapOf();
254 instanceParams[0].entries.stream()
255 .filter { entry -> !keysToRemove.contains(entry.key) }
256 .forEach { t -> result.put(t.key, t.value) }
258 return if (result.isEmpty()) emptyList() else listOf(result)
261 private fun createServiceInstantiationVnfList(jobId: UUID?, payload: ServiceInstantiation): List<ServiceInstantiationRequestDetails.ServiceInstantiationVnf> {
262 val cloudConfiguration = generateCloudConfiguration(payload.lcpCloudRegionId, payload.tenantId)
263 val isBulk = asyncInstantiationBL.isPartOfBulk(jobId)
265 val vnfs = payload.vnfs
266 val vnfList = mutableListOf<ServiceInstantiationRequestDetails.ServiceInstantiationVnf>()
267 for (vnf in vnfs.values) {
268 val vfModules = vnf.vfModules
269 val convertedUnFilteredVfModules = convertVfModuleMapToList(vfModules)
270 val filteredVfModules = filterInstanceParamsFromVfModuleAndUniqueNames(convertedUnFilteredVfModules, isBulk)
271 val serviceInstantiationVnf = ServiceInstantiationRequestDetails.ServiceInstantiationVnf(
276 payload.productFamilyId,
277 buildVnfInstanceParams(vnf.instanceParams, filteredVfModules),
279 getUniqueNameIfNeeded(vnf.instanceName, ResourceType.GENERIC_VNF, isBulk)
281 vnfList.add(serviceInstantiationVnf)
287 private fun createServiceInstantiationPnfList(jobId: UUID?, payload: ServiceInstantiation): List<ServiceInstantiationRequestDetails.ServiceInstantiationPnf> {
288 val isBulk = asyncInstantiationBL.isPartOfBulk(jobId)
290 val pnfs = payload.pnfs
291 val pnfList = mutableListOf<ServiceInstantiationRequestDetails.ServiceInstantiationPnf>()
292 for (pnf in pnfs.values) {
293 val serviceInstantiationPnf = ServiceInstantiationRequestDetails.ServiceInstantiationPnf(
297 payload.productFamilyId,
298 buildPnfInstanceParams(pnf.instanceParams),
299 getUniqueNameIfNeeded(pnf.instanceName, ResourceType.PNF, isBulk)
301 pnfList.add(serviceInstantiationPnf)
307 private fun convertVfModuleMapToList(vfModules: Map<String, Map<String, VfModule>>): List<VfModuleMacro> {
308 return vfModules.values.stream().flatMap { vfModule ->
309 vfModule.values.stream().map { item ->
310 val userParams = UserParamsContainer(extractActualInstanceParams(item.instanceParams), item.supplementaryParams)
315 item.volumeGroupInstanceName,
316 userParams.toMacroPost1806())
318 }.collect(Collectors.toList<VfModuleMacro>())
321 //Make sure we always get a one Map from InstanceParams
322 private fun extractActualInstanceParams(originalInstanceParams: List<MutableMap<String, String>>?): MutableMap<String, String> {
323 return if (originalInstanceParams.isNullOrEmpty() || originalInstanceParams[0].isNullOrEmpty()) {
325 } else originalInstanceParams[0]
328 private fun filterInstanceParamsFromVfModuleAndUniqueNames(unFilteredVfModules: List<VfModuleMacro>, isBulk: Boolean): List<VfModuleMacro> {
329 return unFilteredVfModules.stream().map { vfModule ->
332 getUniqueNameIfNeeded(vfModule.instanceName, ResourceType.VF_MODULE, isBulk),
333 getUniqueNameIfNeeded(vfModule.volumeGroupInstanceName, ResourceType.VOLUME_GROUP, isBulk),
334 removeUnNeededParams(vfModule.instanceParams))
336 .collect(Collectors.toList<VfModuleMacro>())
339 fun buildVnfInstanceParams(currentVnfInstanceParams: List<MutableMap<String, String>>, vfModules: List<VfModuleMacro>): List<Map<String, String>> {
340 val filteredVnfInstanceParams = removeUnNeededParams(currentVnfInstanceParams)
342 val vnfInstanceParams = extractActualInstanceParams(filteredVnfInstanceParams)
344 .map { x -> extractActualInstanceParams(x.instanceParams) }
345 .forEach { vnfInstanceParams.putAll(it) }
346 return if (vnfInstanceParams.isEmpty()) emptyList() else ImmutableList.of(vnfInstanceParams)
349 fun buildPnfInstanceParams(currentPnfInstanceParams: List<MutableMap<String, String>>): List<Map<String, String>> {
350 val filteredPnfInstanceParams = removeUnNeededParams(currentPnfInstanceParams)
352 val pnfInstanceParams = extractActualInstanceParams(filteredPnfInstanceParams)
353 return if (pnfInstanceParams.isEmpty()) emptyList() else ImmutableList.of(pnfInstanceParams)
356 private fun generateServiceInstantiationRequestDetails(payload: ServiceInstantiation, requestParameters: ServiceInstantiationRequestDetails.RequestParameters, serviceInstanceName: String?, userId: String): ServiceInstantiationRequestDetails {
357 val requestInfo = ServiceInstantiationRequestDetails.RequestInfo(serviceInstanceName,
358 payload.productFamilyId,
360 payload.isRollbackOnFailure,
362 val owningEntity = ServiceInstantiationRequestDetails.ServiceInstantiationOwningEntity(payload.owningEntityId, payload.owningEntityName)
363 val subscriberInfo = generateSubscriberInfo(payload)
364 val project = if (payload.projectName != null) ServiceInstantiationRequestDetails.Project(payload.projectName) else null
365 return ServiceInstantiationRequestDetails(payload.modelInfo, owningEntity, subscriberInfo, project, requestInfo, requestParameters)
368 private fun generateSubscriberInfo(payload: ServiceInstantiation): SubscriberInfo {
369 val subscriberInfo = SubscriberInfo()
370 subscriberInfo.globalSubscriberId = payload.globalSubscriberId
371 return subscriberInfo
374 private fun generateCloudConfiguration(lcpCloudRegionId: String?, tenantId: String?): CloudConfiguration? {
376 if (lcpCloudRegionId.isNullOrEmpty()) return null
378 val cloudConfiguration = CloudConfiguration(lcpCloudRegionId, tenantId)
379 cloudOwnerService.enrichCloudConfigurationWithCloudOwner(cloudConfiguration, lcpCloudRegionId)
381 return cloudConfiguration
384 private fun generateRelatedInstances(relatedInstances: Map<String, ModelInfo>): MutableList<RelatedInstance> {
385 return relatedInstances.entries.stream()
386 .map { RelatedInstance(it.value, it.key) }
387 .collect(Collectors.toList())
390 private fun generateRequestInfo(instanceName: String?, resourceType: ResourceType?, rollbackOnFailure: Boolean?, productFamilyId: String?, userId: String): BaseResourceInstantiationRequestDetails.RequestInfo {
391 return BaseResourceInstantiationRequestDetails.RequestInfo(
392 if (resourceType == null) null else getUniqueNameIfNeeded(instanceName, resourceType, false),
400 private fun getUniqueNameIfNeeded(name: String?, resourceType: ResourceType, isBulk: Boolean): String? {
401 return if (StringUtils.isNotEmpty(name)) {
402 if (isBulk) asyncInstantiationBL.getUniqueName(name, resourceType) else name
408 private fun generateUserParamList(): List<UserParamNameAndValue> {
412 fun generateMacroServicePre1806InstantiationRequest(payload: ServiceInstantiation, userId: String): RequestDetailsWrapper<ServiceInstantiationRequestDetails> {
413 val requestInfo = ServiceInstantiationRequestDetails.RequestInfo(payload.instanceName, payload.productFamilyId, VID_SOURCE, payload.isRollbackOnFailure, userId)
414 val userParams = UserParamsContainer(generateSingleMapFromInstanceParams(payload.instanceParams), emptyList())
415 val requestParameters = ServiceInstantiationRequestDetails.RequestParameters(payload.subscriptionServiceType, false, userParams.toMacroPre1806())
416 val subscriberInfo = generateSubscriberInfoPre1806(payload)
417 val project = if (payload.projectName != null) ServiceInstantiationRequestDetails.Project(payload.projectName) else null
418 val owningEntity = ServiceInstantiationRequestDetails.ServiceInstantiationOwningEntity(payload.owningEntityId, payload.owningEntityName)
419 val cloudConfiguration = generateCloudConfiguration(payload.lcpCloudRegionId, payload.tenantId)
420 val relatedInstanceList = generateRelatedInstanceListForVrfEntry(payload.vrfs)
422 return RequestDetailsWrapper(ServiceInstantiationPre1806RequestDetails(
430 relatedInstanceList))
433 private fun generateSingleMapFromInstanceParams(instanceParams: List<Map<String, String>>): Map<String, String> {
434 return if (instanceParams.isNullOrEmpty()) emptyMap() else instanceParams[0]
437 private fun generateSubscriberInfoPre1806(payload: ServiceInstantiation): SubscriberInfo {
438 val subscriberInfo = SubscriberInfo()
439 subscriberInfo.globalSubscriberId = payload.globalSubscriberId
440 subscriberInfo.subscriberName = payload.subscriberName
441 return subscriberInfo
444 private fun generateRelatedInstanceListForVrfEntry(vrfEntries: MutableMap<String, VrfEntry>): List<RelatedInstance> {
445 //fe send map of vrfs, with maps of networks and vpns, but actually we expect to only one vpn and one network
446 return if (vrfEntries.isEmpty() || vrfEntries.values.first().vpns.isEmpty() || vrfEntries.values.first().networks.isEmpty()) emptyList()
448 val vpn = vrfEntries.values.first().vpns.values.first()
449 val network = vrfEntries.values.first().networks.values.first()
450 listOf(vpn, network).map { RelatedInstance(it.modelInfo, it.instanceId, it.instanceName) }
454 private fun generateMacroServiceInstantiationRequestParams(payload: ServiceInstantiation, serviceInstanceName: String?, jobId: UUID?): List<UserParamTypes> {
455 val userParams = generateServiceInstantiationServicesList(
458 createServiceInstantiationVnfList(jobId, payload),
459 createServiceInstantiationPnfList(jobId, payload)
462 return userParams.plus(homingSolution())
465 private fun homingSolution(): List<UserParamTypes> {
466 return if (featureManager.isActive(Features.FLAG_DISABLE_HOMING)) {
467 listOf(ServiceInstantiationRequestDetails.HomingSolution(DISABLED_HOMING_VALUE))