diff options
Diffstat (limited to 'vid-app-common/src/main/java/org/onap/vid/job/command/MsoRequestBuilder.kt')
-rw-r--r-- | vid-app-common/src/main/java/org/onap/vid/job/command/MsoRequestBuilder.kt | 411 |
1 files changed, 411 insertions, 0 deletions
diff --git a/vid-app-common/src/main/java/org/onap/vid/job/command/MsoRequestBuilder.kt b/vid-app-common/src/main/java/org/onap/vid/job/command/MsoRequestBuilder.kt new file mode 100644 index 000000000..c8502b1e5 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/job/command/MsoRequestBuilder.kt @@ -0,0 +1,411 @@ +package org.onap.vid.job.command + +import com.google.common.collect.ImmutableList +import org.apache.commons.lang3.ObjectUtils.defaultIfNull +import org.apache.commons.lang3.StringUtils +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate +import org.onap.vid.aai.AaiClientInterface +import org.onap.vid.aai.ExceptionWithRequestInfo +import org.onap.vid.aai.model.ResourceType +import org.onap.vid.changeManagement.RequestDetailsWrapper +import org.onap.vid.model.serviceInstantiation.* +import org.onap.vid.mso.model.* +import org.onap.vid.mso.model.BaseResourceInstantiationRequestDetails.* +import org.onap.vid.mso.model.VfModuleInstantiationRequestDetails.UserParamMap +import org.onap.vid.mso.rest.SubscriberInfo +import org.onap.vid.services.AsyncInstantiationBusinessLogic +import org.onap.vid.services.CloudOwnerService +import org.onap.vid.utils.JACKSON_OBJECT_MAPPER +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Service +import org.togglz.core.manager.FeatureManager +import java.util.* +import java.util.Collections.emptyList +import java.util.stream.Collectors + +@Service +class MsoRequestBuilder +@Autowired constructor(private val asyncInstantiationBL: AsyncInstantiationBusinessLogic, + private val cloudOwnerService: CloudOwnerService, + private val aaiClient: AaiClientInterface, + private val featureManager: FeatureManager) { + + companion object { + private val LOGGER = EELFLoggerDelegate.getLogger(MsoRequestBuilder::class.java) + private const val VID_SOURCE = "VID" + } + + fun generateALaCarteServiceInstantiationRequest(payload: ServiceInstantiation, optimisticUniqueServiceInstanceName: String, userId: String): RequestDetailsWrapper<ServiceInstantiationRequestDetails> { + val userParams = generateUserParamList() + + val requestParameters = ServiceInstantiationRequestDetails.RequestParameters(payload.subscriptionServiceType, true, userParams, payload.testApi) + + val requestDetails = generateServiceInstantiationRequestDetails(payload, requestParameters, optimisticUniqueServiceInstanceName, userId) + + return RequestDetailsWrapper(requestDetails) + } + + fun generateServiceDeletionRequest(payload: ServiceInstantiation, userId: String): RequestDetailsWrapper<ServiceDeletionRequestDetails> { + + val requestParameters = ServiceDeletionRequestDetails.RequestParameters(payload.isALaCarte, payload.testApi) + + val requestInfo = ServiceDeletionRequestDetails.RequestInfo( + VID_SOURCE, + userId) + + val requestDetails = ServiceDeletionRequestDetails(payload.modelInfo, requestInfo, requestParameters) + + return RequestDetailsWrapper(requestDetails) + } + + fun generateMacroServiceInstantiationRequest(jobId: UUID?, payload: ServiceInstantiation, optimisticUniqueServiceInstanceName: String, userId: String): RequestDetailsWrapper<ServiceInstantiationRequestDetails> { + val serviceInstanceName = generateServiceName(jobId, payload, optimisticUniqueServiceInstanceName) + + val serviceInstantiationServiceList = generateServiceInstantiationServicesList(payload, serviceInstanceName, createServiceInstantiationVnfList(jobId, payload)) + + val requestParameters = ServiceInstantiationRequestDetails.RequestParameters(payload.subscriptionServiceType, false, serviceInstantiationServiceList) + + val requestDetails = generateServiceInstantiationRequestDetails(payload, requestParameters, serviceInstanceName, userId) + + return RequestDetailsWrapper(requestDetails) + } + + fun generateNetworkInstantiationRequest(networkDetails: Network, serviceModelInfo: ModelInfo, serviceInstanceId: String, userId: String, testApi: String?): RequestDetailsWrapper<NetworkInstantiationRequestDetails> { + val requestInfo = generateRequestInfo(networkDetails.instanceName, ResourceType.L3_NETWORK, networkDetails.isRollbackOnFailure, networkDetails.productFamilyId, userId) + val cloudConfiguration = generateCloudConfiguration(networkDetails.lcpCloudRegionId, networkDetails.tenantId) + val platform = Platform(networkDetails.platformName) + val lineOfBusiness = LineOfBusiness.of(networkDetails.lineOfBusiness) + val requestParameters = BaseResourceInstantiationRequestDetails.RequestParameters(generateUserParamList(), testApi) + val relatedInstanceList = generateRelatedInstances(mapOf(serviceInstanceId to serviceModelInfo)) + return RequestDetailsWrapper(NetworkInstantiationRequestDetails(networkDetails.modelInfo, cloudConfiguration, requestInfo, platform, lineOfBusiness, relatedInstanceList, requestParameters)) + } + + fun generateVnfInstantiationRequest(vnfDetails: Vnf, serviceModelInfo: ModelInfo, serviceInstanceId: String, userId: String, testApi: String?): RequestDetailsWrapper<VnfInstantiationRequestDetails> { + val requestInfo = generateRequestInfo(vnfDetails.instanceName, ResourceType.GENERIC_VNF, vnfDetails.isRollbackOnFailure, vnfDetails.productFamilyId, userId) + val cloudConfiguration = generateCloudConfiguration(vnfDetails.lcpCloudRegionId, vnfDetails.tenantId) + val platform = Platform(vnfDetails.platformName) + val lineOfBusiness = LineOfBusiness.of(vnfDetails.lineOfBusiness) + val requestParameters = BaseResourceInstantiationRequestDetails.RequestParameters(generateUserParamList(), testApi) + val relatedInstanceList = generateRelatedInstances(mapOf(serviceInstanceId to serviceModelInfo)) + return RequestDetailsWrapper(VnfInstantiationRequestDetails(vnfDetails.modelInfo, cloudConfiguration, requestInfo, platform, lineOfBusiness, relatedInstanceList, requestParameters)) + } + + fun generateDeleteVnfRequest(vnfDetails: Vnf, userId: String): RequestDetailsWrapper<VnfInstantiationRequestDetails> { + val requestInfo = generateRequestInfo(null, null, null, null, userId) + val cloudConfiguration = generateCloudConfiguration(vnfDetails.lcpCloudRegionId, vnfDetails.tenantId) + return RequestDetailsWrapper(VnfInstantiationRequestDetails(vnfDetails.modelInfo, cloudConfiguration, requestInfo, null, null, null, null)) + } + + fun generateVfModuleInstantiationRequest(vfModuleDetails: VfModule, serviceModelInfo: ModelInfo, serviceInstanceId: String, vnfModelInfo: ModelInfo, vnfInstanceId: String, vgInstanceId: String?, userId: String, testApi: String?): RequestDetailsWrapper<VfModuleInstantiationRequestDetails> { + val requestInfo = generateRequestInfo(vfModuleDetails.instanceName, ResourceType.VF_MODULE, vfModuleDetails.isRollbackOnFailure, null, userId) + + //cloud configuration + val cloudConfiguration = generateCloudConfiguration(vfModuleDetails.lcpCloudRegionId, vfModuleDetails.tenantId) + + //request parameters + val userParams = aggregateAllInstanceParams(extractActualInstanceParams(vfModuleDetails.instanceParams), vfModuleDetails.supplementaryParams) + val requestParameters = VfModuleInstantiationRequestDetails.RequestParametersVfModule(userParams, vfModuleDetails.isUsePreload, testApi) + + //related instance list + val relatedInstanceList = generateRelatedInstances(mapOf(serviceInstanceId to serviceModelInfo, vnfInstanceId to vnfModelInfo)) + if (StringUtils.isNotEmpty(vgInstanceId)) { + val volumeGroupModel = ModelInfo() + volumeGroupModel.modelType = "volumeGroup" + relatedInstanceList.add(RelatedInstance(volumeGroupModel, vgInstanceId, vfModuleDetails.volumeGroupInstanceName)) + } + return RequestDetailsWrapper(VfModuleInstantiationRequestDetails(vfModuleDetails.modelInfo, cloudConfiguration, requestInfo, relatedInstanceList, requestParameters)) + } + + fun generateVolumeGroupInstantiationRequest(vfModuleDetails: VfModule, serviceModelInfo: ModelInfo, serviceInstanceId: String, vnfModelInfo: ModelInfo, vnfInstanceId: String, userId: String, testApi: String?): RequestDetailsWrapper<VolumeGroupRequestDetails> { + val requestInfo = generateRequestInfo(vfModuleDetails.volumeGroupInstanceName, ResourceType.VOLUME_GROUP, vfModuleDetails.isRollbackOnFailure, null, userId) + val cloudConfiguration = generateCloudConfiguration(vfModuleDetails.lcpCloudRegionId, vfModuleDetails.tenantId) + val userParams = aggregateAllInstanceParams(extractActualInstanceParams(vfModuleDetails.instanceParams), vfModuleDetails.supplementaryParams) + val requestParameters = VfModuleInstantiationRequestDetails.RequestParametersVfModule(userParams, vfModuleDetails.isUsePreload, testApi) + val relatedInstances = generateRelatedInstances(mapOf(serviceInstanceId to serviceModelInfo, vnfInstanceId to vnfModelInfo)) + + vfModuleDetails.modelInfo.modelType = "volumeGroup" + return RequestDetailsWrapper(VolumeGroupRequestDetails(vfModuleDetails.modelInfo, cloudConfiguration, requestInfo, relatedInstances, requestParameters)) + } + + fun generateInstanceGroupInstantiationRequest(instanceGroupDetails: InstanceGroup, serviceModelInfo: ModelInfo, serviceInstanceId: String, userId: String, testApi: String?): RequestDetailsWrapper<InstanceGroupInstantiationRequestDetails> { + val requestInfo = generateRequestInfo(instanceGroupDetails.instanceName, ResourceType.INSTANCE_GROUP, instanceGroupDetails.isRollbackOnFailure, null, userId) + val requestParameters = BaseResourceInstantiationRequestDetails.RequestParameters(generateUserParamList(), testApi) + val relatedInstanceList = generateRelatedInstances(mapOf(serviceInstanceId to serviceModelInfo)) + return RequestDetailsWrapper(InstanceGroupInstantiationRequestDetails(instanceGroupDetails.modelInfo, requestInfo, relatedInstanceList, requestParameters)) + } + + fun generateInstanceGroupMemberRequest(instanceGroupMemberId: String, userId: String): RequestDetailsWrapper<AddOrRemoveInstanceGroupMemberRequestDetails> { + val requestInfo = generateRequestInfo(null, null, null, null, userId) + val modelInfo = ModelInfo() + modelInfo.modelType = "vnf" + val relatedInstanceList = generateRelatedInstances(mapOf(instanceGroupMemberId to modelInfo)) + return RequestDetailsWrapper(AddOrRemoveInstanceGroupMemberRequestDetails(requestInfo, relatedInstanceList)) + } + + fun generateDeleteNetworkRequest(networkDetails: Network, userId: String): RequestDetailsWrapper<NetworkInstantiationRequestDetails> { + val requestInfo = generateRequestInfo(null, null, null, null, userId) + val cloudConfiguration = generateCloudConfiguration(networkDetails.lcpCloudRegionId, networkDetails.tenantId) + return RequestDetailsWrapper(NetworkInstantiationRequestDetails(networkDetails.modelInfo, cloudConfiguration, requestInfo, null, null, null, null)) + } + + fun generateDeleteVfModuleRequest(vfModuleDetails: VfModule, userId: String): RequestDetailsWrapper<VfModuleInstantiationRequestDetails> { + val requestInfo = generateRequestInfo(null, null, null, null, userId) + val cloudConfiguration = generateCloudConfiguration(vfModuleDetails.lcpCloudRegionId, vfModuleDetails.tenantId) + return RequestDetailsWrapper(VfModuleInstantiationRequestDetails(vfModuleDetails.modelInfo, cloudConfiguration, requestInfo, null, null)) + } + + private fun generateServiceName(jobId: UUID?, payload: ServiceInstantiation, optimisticUniqueServiceInstanceName: String): String? { + var serviceInstanceName: String? = null + if (StringUtils.isNotEmpty(optimisticUniqueServiceInstanceName)) { + serviceInstanceName = peekServiceName(jobId, payload, optimisticUniqueServiceInstanceName) + } + return serviceInstanceName + } + + private fun peekServiceName(jobId: UUID?, payload: ServiceInstantiation, optimisticUniqueServiceInstanceName: String): String { + val serviceInstanceName: String + // unique name already exist in service info. If it's free in AAI we use it + if (isNameFreeInAai(optimisticUniqueServiceInstanceName, ResourceType.SERVICE_INSTANCE)) { + serviceInstanceName = optimisticUniqueServiceInstanceName + } else { + serviceInstanceName = asyncInstantiationBL.getUniqueName(payload.instanceName, ResourceType.SERVICE_INSTANCE) + }//otherwise we used the original service instance name (from payload) to get a new unique name from DB and AAI + + //update serviceInfo with new name if needed + try { + asyncInstantiationBL.updateServiceInfo(jobId) { x -> x.serviceInstanceName = serviceInstanceName } + } catch (e: Exception) { + LOGGER.error("Failed updating service name {} in serviceInfo", serviceInstanceName, e) + } + + return serviceInstanceName + } + + @Throws(ExceptionWithRequestInfo::class) + private fun isNameFreeInAai(name: String, resourceType: ResourceType): Boolean { + return !aaiClient.isNodeTypeExistsByName(name, resourceType) + } + + private fun generateServiceInstantiationServicesList(payload: ServiceInstantiation, serviceInstanceName: String?, vnfList: ServiceInstantiationRequestDetails.ServiceInstantiationVnfList): List<ServiceInstantiationRequestDetails.ServiceInstantiationService> { + val serviceInstantiationServiceList = LinkedList<ServiceInstantiationRequestDetails.ServiceInstantiationService>() + val unFilteredInstanceParams = defaultIfNull<List<MutableMap<String, String>>>(payload.instanceParams, emptyList()) + val filteredInstanceParams = removeUnNeededParams(unFilteredInstanceParams) + val serviceInstantiationService = ServiceInstantiationRequestDetails.ServiceInstantiationService( + payload.modelInfo, + serviceInstanceName, + filteredInstanceParams, + vnfList + ) + serviceInstantiationServiceList.add(serviceInstantiationService) + return serviceInstantiationServiceList + } + + private fun removeUnNeededParams(instanceParams: List<MutableMap<String, String>>?): List<MutableMap<String, String>> { + val keysToRemove = mutableListOf<String>() + if (instanceParams.isNullOrEmpty()) { + return emptyList() + } + + for (key in instanceParams[0].keys) { + for (paramToIgnore in AsyncInstantiationBusinessLogic.PARAMS_TO_IGNORE) + if (key.equals(paramToIgnore, ignoreCase = true)) { + keysToRemove.add(key) + } + } + + val result : MutableMap<String, String> = instanceParams[0].entries.stream() + .filter { entry -> !keysToRemove.contains(entry.key) } + .collect(Collectors.toMap({it.key}, {it.value})) + + return if (result.isEmpty()) emptyList() else listOf(result) + } + + private fun createServiceInstantiationVnfList(jobId: UUID?, payload: ServiceInstantiation): ServiceInstantiationRequestDetails.ServiceInstantiationVnfList { + val cloudConfiguration = generateCloudConfiguration(payload.lcpCloudRegionId, payload.tenantId) + val isBulk = asyncInstantiationBL.isPartOfBulk(jobId) + + val vnfs = payload.vnfs + val vnfList = mutableListOf<ServiceInstantiationRequestDetails.ServiceInstantiationVnf>() + for (vnf in vnfs.values) { + val vfModules = vnf.vfModules + val convertedUnFilteredVfModules = convertVfModuleMapToList(vfModules) + val filteredVfModules = filterInstanceParamsFromVfModuleAndUniqueNames(convertedUnFilteredVfModules, isBulk) + val serviceInstantiationVnf = ServiceInstantiationRequestDetails.ServiceInstantiationVnf( + vnf.modelInfo, + cloudConfiguration, + vnf.platformName, + vnf.lineOfBusiness, + payload.productFamilyId, + buildVnfInstanceParams(vnf.instanceParams, filteredVfModules), + filteredVfModules, + getUniqueNameIfNeeded(vnf.instanceName, ResourceType.GENERIC_VNF, isBulk) + ) + vnfList.add(serviceInstantiationVnf) + } + + return ServiceInstantiationRequestDetails.ServiceInstantiationVnfList(vnfList) + } + + private fun convertVfModuleMapToList(vfModules: Map<String, Map<String, VfModule>>): List<VfModuleMacro> { + return vfModules.values.stream().flatMap { vfModule -> + vfModule.values.stream().map { item -> + val aggregatedParams = aggregateAllInstanceParams(extractActualInstanceParams(item.instanceParams), item.supplementaryParams) + val aggregatedParamsConverted = JACKSON_OBJECT_MAPPER.convertValue(aggregatedParams, List::class.java) + + VfModuleMacro( + item.modelInfo, + item.instanceName, + item.volumeGroupInstanceName, + aggregatedParamsConverted as List<Map<String, String>>) + } + }.collect(Collectors.toList<VfModuleMacro>()) + } + + fun aggregateAllInstanceParams(instanceParams: Map<String, String>?, supplementaryParams: Map<String, String>?): List<VfModuleInstantiationRequestDetails.UserParamMap<String, String>> { + var instanceParamsFinal: Map<String, String> = instanceParams ?: emptyMap() + val supplementaryParamsFinal: Map<String, String> = supplementaryParams ?: emptyMap() + + if (!(instanceParamsFinal.isEmpty() && supplementaryParamsFinal.isEmpty())) { + //remove duplicate keys from instanceParams if exist in supplementaryParams + instanceParamsFinal = instanceParamsFinal.entries.stream() + .filter { m -> !supplementaryParamsFinal.containsKey(m.key) } + .collect(Collectors.toMap({ it.key }, { it.value })) + + //aggregate the 2 collections and format them as UserParamMap + val aggregatedParams = UserParamMap<String, String>() + aggregatedParams.putAll(instanceParamsFinal) + aggregatedParams.putAll(supplementaryParamsFinal) + + return mutableListOf(aggregatedParams) + } + + return emptyList() + } + + //Make sure we always get a one Map from InstanceParams + private fun extractActualInstanceParams(originalInstanceParams: List<MutableMap<String, String>>?): MutableMap<String, String> { + return if (originalInstanceParams.isNullOrEmpty() || originalInstanceParams[0].isNullOrEmpty()) { + mutableMapOf() + } else originalInstanceParams[0] + } + + private fun filterInstanceParamsFromVfModuleAndUniqueNames(unFilteredVfModules: List<VfModuleMacro>, isBulk: Boolean): List<VfModuleMacro> { + return unFilteredVfModules.stream().map { vfModule -> + VfModuleMacro( + vfModule.modelInfo, + getUniqueNameIfNeeded(vfModule.instanceName, ResourceType.VF_MODULE, isBulk), + getUniqueNameIfNeeded(vfModule.volumeGroupInstanceName, ResourceType.VOLUME_GROUP, isBulk), + removeUnNeededParams(vfModule.instanceParams)) + } + .collect(Collectors.toList<VfModuleMacro>()) + } + + fun buildVnfInstanceParams(currentVnfInstanceParams: List<MutableMap<String, String>>, vfModules: List<VfModuleMacro>): List<Map<String, String>> { + val filteredVnfInstanceParams = removeUnNeededParams(currentVnfInstanceParams) + + val vnfInstanceParams = extractActualInstanceParams(filteredVnfInstanceParams) + vfModules.stream() + .map { x -> extractActualInstanceParams(x.instanceParams) } + .forEach { vnfInstanceParams.putAll(it) } + return if (vnfInstanceParams.isEmpty()) emptyList() else ImmutableList.of(vnfInstanceParams) + } + + private fun generateServiceInstantiationRequestDetails(payload: ServiceInstantiation, requestParameters: ServiceInstantiationRequestDetails.RequestParameters, serviceInstanceName: String?, userId: String): ServiceInstantiationRequestDetails { + val requestInfo = ServiceInstantiationRequestDetails.RequestInfo(serviceInstanceName, + payload.productFamilyId, + VID_SOURCE, + payload.isRollbackOnFailure, + userId) + val owningEntity = ServiceInstantiationRequestDetails.ServiceInstantiationOwningEntity(payload.owningEntityId, payload.owningEntityName) + val subscriberInfo = generateSubscriberInfo(payload) + val project = if (payload.projectName != null) ServiceInstantiationRequestDetails.Project(payload.projectName) else null + return ServiceInstantiationRequestDetails(payload.modelInfo, owningEntity, subscriberInfo, project, requestInfo, requestParameters) + } + + private fun generateSubscriberInfo(payload: ServiceInstantiation): SubscriberInfo { + val subscriberInfo = SubscriberInfo() + subscriberInfo.globalSubscriberId = payload.globalSubscriberId + return subscriberInfo + } + + private fun generateCloudConfiguration(lcpCloudRegionId: String?, tenantId: String?): CloudConfiguration { + val cloudConfiguration = CloudConfiguration(lcpCloudRegionId, tenantId) + if(lcpCloudRegionId != null){ + cloudOwnerService.enrichCloudConfigurationWithCloudOwner(cloudConfiguration, lcpCloudRegionId) + } + return cloudConfiguration + } + + private fun generateRelatedInstances(relatedInstances: Map<String, ModelInfo>): MutableList<RelatedInstance> { + return relatedInstances.entries.stream() + .map { RelatedInstance(it.value, it.key) } + .collect(Collectors.toList()) + } + + private fun generateRequestInfo(instanceName: String?, resourceType: ResourceType?, rollbackOnFailure: Boolean?, productFamilyId: String?, userId: String) : BaseResourceInstantiationRequestDetails.RequestInfo { + return BaseResourceInstantiationRequestDetails.RequestInfo( + if (resourceType == null) null else getUniqueNameIfNeeded(instanceName, resourceType, false), + productFamilyId, + VID_SOURCE, + rollbackOnFailure, + userId) + + } + + private fun getUniqueNameIfNeeded(name: String?, resourceType: ResourceType, isBulk: Boolean): String? { + return if (StringUtils.isNotEmpty(name)) { + if (isBulk) asyncInstantiationBL.getUniqueName(name, resourceType) else name + } else { + null + } + } + + private fun generateUserParamList(): List<ServiceInstantiationRequestDetails.UserParamNameAndValue> { + return emptyList() + } + + fun generateMacroServicePre1806InstantiationRequest(payload: ServiceInstantiation, userId: String): RequestDetailsWrapper<ServiceInstantiationRequestDetails> { + val requestInfo = ServiceInstantiationRequestDetails.RequestInfo(payload.instanceName, payload.productFamilyId, VID_SOURCE, payload.isRollbackOnFailure, userId) + val userParams = generateUserParamsNameAndValue(payload.instanceParams) + val requestParameters = ServiceInstantiationRequestDetails.RequestParameters(payload.subscriptionServiceType, false, userParams) + val subscriberInfo = generateSubscriberInfoPre1806(payload) + val project = if (payload.projectName != null) ServiceInstantiationRequestDetails.Project(payload.projectName) else null + val owningEntity = ServiceInstantiationRequestDetails.ServiceInstantiationOwningEntity(payload.owningEntityId, payload.owningEntityName) + val cloudConfiguration = generateCloudConfiguration(payload.lcpCloudRegionId, payload.tenantId) + val relatedInstanceList = generateRelatedInstanceListForVrfEntry(payload.vrfs) + + return RequestDetailsWrapper(ServiceInstantiationPre1806RequestDetails( + payload.modelInfo, + owningEntity, + subscriberInfo, + project, + requestInfo, + requestParameters, + cloudConfiguration, + relatedInstanceList)) + } + + private fun generateUserParamsNameAndValue(instanceParams: List<Map<String, String>>): List<ServiceInstantiationRequestDetails.UserParamNameAndValue> { + if (instanceParams == null){ + return emptyList() + } + return instanceParams.getOrElse(0, {emptyMap()}).map{x-> ServiceInstantiationRequestDetails.UserParamNameAndValue(x.key, x.value)} + } + + private fun generateSubscriberInfoPre1806(payload: ServiceInstantiation): SubscriberInfo { + val subscriberInfo = SubscriberInfo() + subscriberInfo.globalSubscriberId = payload.globalSubscriberId + subscriberInfo.subscriberName = payload.subscriberName + return subscriberInfo + } + + private fun generateRelatedInstanceListForVrfEntry(vrfEntries: MutableMap<String, VrfEntry>): List<RelatedInstance> { + //fe send map of vrfs, with maps of networks and vpns, but actually we expect to only one vpn and one network + return if (vrfEntries.isEmpty() || vrfEntries.values.first().vpns.isEmpty() || vrfEntries.values.first().networks.isEmpty()) emptyList() + else { + val vpn = vrfEntries.values.first().vpns.values.first() + val network = vrfEntries.values.first().networks.values.first() + listOf(vpn, network).map { RelatedInstance(it.modelInfo, it.instanceId, it.instanceName) } + } + } +} |