X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=vid-app-common%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fvid%2Fservices%2FAaiServiceImpl.java;h=36333b163667a364ceec553638e2b551c343ce0c;hb=9e73da42126982f247a0c64882ac8958e504ca24;hp=fe4a661859de2c299ddc490d75fe0e6ba66d6cff;hpb=659874df80409170e57b6dd6197eb3a81eb3468e;p=vid.git diff --git a/vid-app-common/src/main/java/org/onap/vid/services/AaiServiceImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/AaiServiceImpl.java index fe4a66185..36333b163 100644 --- a/vid-app-common/src/main/java/org/onap/vid/services/AaiServiceImpl.java +++ b/vid-app-common/src/main/java/org/onap/vid/services/AaiServiceImpl.java @@ -2,15 +2,15 @@ * ============LICENSE_START======================================================= * VID * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * Modifications Copyright (C) 2018 Nokia. All rights reserved. + * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 - 2019 Nokia. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -21,82 +21,136 @@ package org.onap.vid.services; +import static java.util.Collections.emptyList; +import static org.apache.commons.collections4.ListUtils.emptyIfNull; +import static org.onap.vid.aai.AaiClient.QUERY_FORMAT_RESOURCE; +import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER; + import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.joshworks.restclient.http.HttpResponse; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.ExecutorService; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.validation.constraints.NotNull; +import javax.ws.rs.core.Response; +import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpStatus; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; -import org.onap.vid.aai.*; -import org.onap.vid.aai.model.*; +import org.onap.vid.aai.AaiClientInterface; +import org.onap.vid.aai.AaiGetVnfResponse; +import org.onap.vid.aai.AaiResponse; +import org.onap.vid.aai.AaiResponseTranslator; +import org.onap.vid.aai.ExceptionWithRequestInfo; +import org.onap.vid.aai.ServiceInstance; +import org.onap.vid.aai.ServiceInstancesSearchResults; +import org.onap.vid.aai.ServiceSubscription; +import org.onap.vid.aai.ServiceSubscriptions; +import org.onap.vid.aai.Services; +import org.onap.vid.aai.SubscriberFilteredResults; +import org.onap.vid.aai.model.AaiGetInstanceGroupsByCloudRegion; import org.onap.vid.aai.model.AaiGetNetworkCollectionDetails.AaiGetRelatedInstanceGroupsByVnfId; import org.onap.vid.aai.model.AaiGetOperationalEnvironments.OperationalEnvironmentList; import org.onap.vid.aai.model.AaiGetPnfs.Pnf; import org.onap.vid.aai.model.AaiGetServicesRequestModel.GetServicesAAIRespone; -import org.onap.vid.aai.model.Properties; import org.onap.vid.aai.model.AaiGetTenatns.GetTenantsResponse; +import org.onap.vid.aai.model.AaiRelationResponse; +import org.onap.vid.aai.model.GetServiceModelsByDistributionStatusResponse; +import org.onap.vid.aai.model.InstanceGroupInfo; +import org.onap.vid.aai.model.LogicalLinkResponse; +import org.onap.vid.aai.model.Model; +import org.onap.vid.aai.model.ModelVer; +import org.onap.vid.aai.model.OwningEntity; +import org.onap.vid.aai.model.OwningEntityResponse; +import org.onap.vid.aai.model.PortDetailsTranslator; +import org.onap.vid.aai.model.Project; +import org.onap.vid.aai.model.ProjectResponse; +import org.onap.vid.aai.model.Properties; +import org.onap.vid.aai.model.RelatedToProperty; +import org.onap.vid.aai.model.Relationship; +import org.onap.vid.aai.model.RelationshipData; +import org.onap.vid.aai.model.RelationshipList; +import org.onap.vid.aai.model.Result; +import org.onap.vid.aai.model.ServiceRelationships; import org.onap.vid.asdc.beans.Service; import org.onap.vid.exceptions.GenericUncheckedException; import org.onap.vid.model.ServiceInstanceSearchResult; import org.onap.vid.model.SubscriberList; import org.onap.vid.model.aaiTree.AAITreeNode; +import org.onap.vid.model.aaiTree.Network; +import org.onap.vid.model.aaiTree.NodeType; import org.onap.vid.model.aaiTree.RelatedVnf; +import org.onap.vid.model.aaiTree.VpnBinding; +import org.onap.vid.model.aaiTree.VpnBindingKt; +import org.onap.vid.roles.PermissionPropertiesSubscriberAndServiceType; import org.onap.vid.roles.RoleValidator; import org.onap.vid.utils.Intersection; +import org.onap.vid.utils.Logging; import org.onap.vid.utils.Tree; +import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpMethod; -import javax.ws.rs.core.Response; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.*; -import java.util.stream.Collectors; - -/** - * Created by Oren on 7/4/17. - */ public class AaiServiceImpl implements AaiService { private static final String SERVICE_INSTANCE_ID = "service-instance.service-instance-id"; private static final String SERVICE_TYPE = "service-subscription.service-type"; private static final String CUSTOMER_ID = "customer.global-customer-id"; + private static final String OWNING_ENTITY_ID = "owning-entity.owning-entity-id"; private static final String SERVICE_INSTANCE_NAME = "service-instance.service-instance-name"; private static final String TENANT_NODE_TYPE = "tenant"; private static final String CLOUD_REGION_NODE_TYPE = "cloud-region"; private int indexOfSubscriberName = 6; - @Autowired private AaiClientInterface aaiClient; - - @Autowired - private AaiOverTLSClientInterface aaiOverTLSClient; - - @Autowired private AaiResponseTranslator aaiResponseTranslator; - - @Autowired - private AAITreeNodeBuilder aaiTreeNode; - - @Autowired private AAIServiceTree aaiServiceTree; + private ExecutorService executorService; + private final Logging logging; + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(AaiServiceImpl.class); + @Autowired + public AaiServiceImpl( + AaiClientInterface aaiClient, + AaiResponseTranslator aaiResponseTranslator, + AAIServiceTree aaiServiceTree, + ExecutorService executorService, Logging logging) + { + this.aaiClient = aaiClient; + this.aaiResponseTranslator = aaiResponseTranslator; + this.aaiServiceTree = aaiServiceTree; + this.executorService = executorService; + this.logging = logging; + } + private List convertModelToService(Model model) { List services = new ArrayList<>(); - String category = ""; if(validateModel(model)){ - if(model.getModelType() != null) { - category = model.getModelType(); - } - for (ModelVer modelVer: model.getModelVers().getModelVer()) { - Service service = new Service( - modelVer.getModelVersionId(), - model.getModelInvariantId(), - category, modelVer.getModelVersion(), modelVer.getModelName(), - modelVer.getDistributionStatus(), - null, null, null, null - ); + Service service = new Service.ServiceBuilder() + .setUuid(modelVer.getModelVersionId()) + .setInvariantUUID(model.getModelInvariantId()) + .setCategory(model.getModelType() != null ? model.getModelType() : "") + .setVersion(modelVer.getModelVersion()) + .setName( modelVer.getModelName()) + .setDistributionStatus(modelVer.getDistributionStatus()) + .setToscaModelURL(null) + .setLifecycleState(null) + .setArtifacts(null) + .setResources(null) + .setOrchestrationType(modelVer.getOrchestrationType()) + .build(); + + services.add(service); } @@ -107,6 +161,10 @@ public class AaiServiceImpl implements AaiService { return services; } + private boolean hasData(AaiResponse aaiResponse) { + return aaiResponse != null && aaiResponse.getT() != null; + } + private boolean validateModel(Model model){ if (model == null) { return false; @@ -115,39 +173,41 @@ public class AaiServiceImpl implements AaiService { } } - private List getServicesByOwningEntityId(List owningEntities, RoleValidator roleValidator) { + List getServicesByOwningEntityId(List owningEntities, RoleValidator roleValidator) { AaiResponse owningEntityResponse = aaiClient.getServicesByOwningEntityId(owningEntities); List serviceInstanceSearchResultList = new ArrayList<>(); if (owningEntityResponse.getT() != null) { for (OwningEntity owningEntity : owningEntityResponse.getT().getOwningEntity()) { if (owningEntity.getRelationshipList() != null) { - serviceInstanceSearchResultList = convertRelationshipToSearchResult(owningEntity, serviceInstanceSearchResultList, roleValidator); + serviceInstanceSearchResultList.addAll(convertRelationshipToSearchResult(owningEntity, roleValidator, owningEntity.getOwningEntityId())); } } } return serviceInstanceSearchResultList; } - private List getServicesByProjectNames(List projectNames, RoleValidator roleValidator) { + List getServicesByProjectNames(List projectNames, RoleValidator roleValidator) { AaiResponse projectByIdResponse = aaiClient.getServicesByProjectNames(projectNames); List serviceInstanceSearchResultList = new ArrayList<>(); if (projectByIdResponse.getT() != null) { for (Project project : projectByIdResponse.getT().getProject()) { if (project.getRelationshipList() != null) { - serviceInstanceSearchResultList = convertRelationshipToSearchResult(project, serviceInstanceSearchResultList, roleValidator); + serviceInstanceSearchResultList.addAll(convertRelationshipToSearchResult(project, roleValidator, null)); } } } return serviceInstanceSearchResultList; } - private List convertRelationshipToSearchResult(AaiRelationResponse owningEntityResponse, List serviceInstanceSearchResultList, RoleValidator roleValidator) { - if (owningEntityResponse.getRelationshipList().getRelationship() != null) { - List relationshipList = owningEntityResponse.getRelationshipList().getRelationship(); + private List convertRelationshipToSearchResult(AaiRelationResponse aaiRelationResponse, RoleValidator roleValidator, String owningEntityId) { + List serviceInstanceSearchResultList = new ArrayList<>(); + if (aaiRelationResponse.getRelationshipList().getRelationship() != null) { + List relationshipList = aaiRelationResponse.getRelationshipList().getRelationship(); for (Relationship relationship : relationshipList) { ServiceInstanceSearchResult serviceInstanceSearchResult = new ServiceInstanceSearchResult(); extractRelationshipData(relationship, serviceInstanceSearchResult, roleValidator); extractRelatedToProperty(relationship, serviceInstanceSearchResult); + serviceInstanceSearchResult.setOwningEntityId(owningEntityId); serviceInstanceSearchResultList.add(serviceInstanceSearchResult); } } @@ -165,11 +225,11 @@ public class AaiServiceImpl implements AaiService { } else if (key.equals(SERVICE_TYPE)) { serviceInstanceSearchResult.setServiceType(relationshipData.getRelationshipValue()); } else if (key.equals(CUSTOMER_ID)) { - serviceInstanceSearchResult.setGlobalCustomerId(relationshipData.getRelationshipValue()); + serviceInstanceSearchResult.setSubscriberId(relationshipData.getRelationshipValue()); } } - boolean isPermitted = roleValidator.isServicePermitted(serviceInstanceSearchResult.getSubscriberName(), serviceInstanceSearchResult.getServiceType()); + boolean isPermitted = roleValidator.isServicePermitted(serviceInstanceSearchResult); serviceInstanceSearchResult.setIsPermitted(isPermitted); } } @@ -193,13 +253,11 @@ public class AaiServiceImpl implements AaiService { @Override public SubscriberFilteredResults getFullSubscriberList(RoleValidator roleValidator) { - HttpResponse allSubscribers = aaiOverTLSClient.getAllSubscribers(); - return new SubscriberFilteredResults( - roleValidator, - allSubscribers.getBody(), - allSubscribers.getStatusText(), - allSubscribers.getStatus() - ); + AaiResponse subscriberResponse = aaiClient.getAllSubscribers(); + + return new SubscriberFilteredResults(roleValidator, subscriberResponse.getT(), + subscriberResponse.getErrorMessage(), + subscriberResponse.getHttpCode()); } @Override @@ -208,17 +266,16 @@ public class AaiServiceImpl implements AaiService { } @Override - public HttpResponse getFullSubscriberList() { - return aaiOverTLSClient.getAllSubscribers(); + public AaiResponse getFullSubscriberList() { + return aaiClient.getAllSubscribers(); } @Override - public AaiResponse getSubscriberData(String subscriberId, RoleValidator roleValidator) { - AaiResponse subscriberResponse = aaiClient.getSubscriberData(subscriberId); - String subscriberGlobalId = subscriberResponse.getT().globalCustomerId; + public AaiResponse getSubscriberData(String subscriberId, RoleValidator roleValidator, boolean omitServiceInstances) { + AaiResponse subscriberResponse = aaiClient.getSubscriberData(subscriberId, omitServiceInstances); for (ServiceSubscription serviceSubscription : subscriberResponse.getT().serviceSubscriptions.serviceSubscription) { - String serviceType = serviceSubscription.serviceType; - serviceSubscription.isPermitted = roleValidator.isServicePermitted(subscriberGlobalId, serviceType); + serviceSubscription.isPermitted = roleValidator.isServicePermitted( + new PermissionPropertiesSubscriberAndServiceType(serviceSubscription, subscriberResponse.getT().globalCustomerId)); } return subscriberResponse; @@ -247,39 +304,46 @@ public class AaiServiceImpl implements AaiService { private List getServicesBySubscriber(String subscriberId, String instanceIdentifier, RoleValidator roleValidator) { - AaiResponse subscriberResponse = aaiClient.getSubscriberData(subscriberId); - String subscriberGlobalId = subscriberResponse.getT().globalCustomerId; + AaiResponse subscriberResponse = aaiClient.getSubscriberData(subscriberId, false); String subscriberName = subscriberResponse.getT().subscriberName; ServiceSubscriptions serviceSubscriptions = subscriberResponse.getT().serviceSubscriptions; - return getSearchResultsForSubscriptions(serviceSubscriptions, subscriberId, instanceIdentifier, roleValidator, subscriberGlobalId, subscriberName); - + return getSearchResultsForSubscriptions(serviceSubscriptions, subscriberId, instanceIdentifier, roleValidator, subscriberName); } - private ArrayList getSearchResultsForSubscriptions(ServiceSubscriptions serviceSubscriptions, String subscriberId, String instanceIdentifier, RoleValidator roleValidator, String subscriberGlobalId, String subscriberName) { + private ArrayList getSearchResultsForSubscriptions( + ServiceSubscriptions serviceSubscriptions, String subscriberId, String instanceIdentifier, + RoleValidator roleValidator, String subscriberName) { ArrayList results = new ArrayList<>(); if (serviceSubscriptions != null) { for (ServiceSubscription serviceSubscription : serviceSubscriptions.serviceSubscription) { - String serviceType = serviceSubscription.serviceType; - serviceSubscription.isPermitted = roleValidator.isServicePermitted(subscriberGlobalId, serviceType); - ArrayList resultsForSubscription = getSearchResultsForSingleSubscription(serviceSubscription, subscriberId, instanceIdentifier, subscriberName, serviceType); - results.addAll(resultsForSubscription); + serviceSubscription.isPermitted = roleValidator.isServicePermitted(new PermissionPropertiesSubscriberAndServiceType(serviceSubscription, subscriberId)); + results.addAll(getSearchResultsForSingleSubscription( + serviceSubscription, subscriberId, instanceIdentifier, subscriberName, + serviceSubscription.serviceType, roleValidator) + ); } } return results; } - private ArrayList getSearchResultsForSingleSubscription(ServiceSubscription serviceSubscription, String subscriberId, String instanceIdentifier, String subscriberName, String serviceType) { + private ArrayList getSearchResultsForSingleSubscription( + ServiceSubscription serviceSubscription, String subscriberId, String instanceIdentifier, String subscriberName, + String serviceType, RoleValidator roleValidator) { ArrayList results = new ArrayList<>(); if (serviceSubscription.serviceInstances != null) { for (ServiceInstance serviceInstance : serviceSubscription.serviceInstances.serviceInstance) { + ServiceInstanceSearchResult serviceInstanceSearchResult = - new ServiceInstanceSearchResult(serviceInstance.serviceInstanceId, subscriberId, serviceType, serviceInstance.serviceInstanceName, - subscriberName, serviceInstance.modelInvariantId, serviceInstance.modelVersionId, serviceSubscription.isPermitted); + new ServiceInstanceSearchResult(serviceInstance.serviceInstanceId, subscriberId, serviceType, + serviceInstance.serviceInstanceName, subscriberName, serviceInstance.modelInvariantId, + serviceInstance.modelVersionId, relatedOwningEntityId(serviceInstance), false); + + serviceInstanceSearchResult.setIsPermitted(roleValidator.isServicePermitted(serviceInstanceSearchResult)); if ((instanceIdentifier == null) || (serviceInstanceMatchesIdentifier(instanceIdentifier, serviceInstance))){ results.add(serviceInstanceSearchResult); @@ -290,6 +354,43 @@ public class AaiServiceImpl implements AaiService { return results; } + protected String relatedOwningEntityId(ServiceInstance serviceInstance) { + /* + For reference, consider the service-instance structure below. Method will null-safely extract the + `relationship-value` where `relationship-key` == `owning-entity.owning-entity-id`. + + { + "service-instance-id": "5d521981-33be-4bb5-bb20-5616a9c52a5a", + ... + "relationship-list": { + "relationship": [ + { + "related-to": "owning-entity", + "related-link": "/aai/v11/business/owning-entities/owning-entity/4d4ecf59-41f1-40d4-818d-885234680a42", + "relationship-data": [ + { + "relationship-key": "owning-entity.owning-entity-id", + "relationship-value": "4d4ecf59-41f1-40d4-818d-885234680a42" + } + ] + } + ] + } + } + */ + + Stream allRelationships = + Optional.ofNullable(serviceInstance.relationshipList) + .map(it -> it.getRelationship()) + .map(it -> it.stream().flatMap(r -> emptyIfNull(r.getRelationDataList()).stream())) + .orElse(Stream.empty()); + + return allRelationships + .filter(r -> StringUtils.equals(r.getRelationshipKey(), OWNING_ENTITY_ID)) + .map(it -> it.getRelationshipValue()) + .findAny().orElse(null); + } + private boolean serviceInstanceMatchesIdentifier(String instanceIdentifier, ServiceInstance serviceInstance) { return instanceIdentifier.equals(serviceInstance.serviceInstanceId) || instanceIdentifier.equals(serviceInstance.serviceInstanceName); } @@ -332,13 +433,11 @@ public class AaiServiceImpl implements AaiService { AaiResponse aaiGetTenantsResponse = aaiClient.getTenants(globalCustomerId, serviceType); GetTenantsResponse[] tenants = aaiGetTenantsResponse.getT(); if (tenants != null) { - for (int i = 0; i < tenants.length; i++) { - tenants[i].isPermitted = roleValidator.isTenantPermitted(globalCustomerId, serviceType, tenants[i].tenantName); + for (GetTenantsResponse tenant : tenants) { + tenant.isPermitted = roleValidator.isTenantPermitted(globalCustomerId, serviceType, tenant.tenantName); } } return aaiGetTenantsResponse; - - } @Override @@ -348,25 +447,8 @@ public class AaiServiceImpl implements AaiService { @Override public AaiResponse getVNFData(String globalSubscriberId, String serviceType) { - AaiResponse response = aaiClient.getVNFData(globalSubscriberId, serviceType); - return filterChangeManagementVNFCandidatesResponse(response); - } - - private AaiResponse filterChangeManagementVNFCandidatesResponse(AaiResponse response) { - - - if (response != null && response.getT() != null) { - response.getT().results = - response.getT().results.stream() - .filter(result -> ( - result.nodeType.equalsIgnoreCase("generic-vnf") || - result.nodeType.equalsIgnoreCase("service-instance"))) - .collect(Collectors.toList()); - - return response; - } - - return new AaiResponse(); + AaiResponse response = aaiClient.getVNFData(globalSubscriberId, serviceType); + return hasData(response) ? response : new AaiResponse<>(); } @Override @@ -465,9 +547,9 @@ public class AaiServiceImpl implements AaiService { public AaiResponse getInstanceGroupsByVnfInstanceId(String vnfInstanceId){ AaiResponse aaiResponse = aaiClient.getInstanceGroupsByVnfInstanceId(vnfInstanceId); if(aaiResponse.getHttpCode() == HttpStatus.SC_OK){ - return new AaiResponse(convertGetInstanceGroupsResponseToSimpleResponse(aaiResponse.getT()), aaiResponse.getErrorMessage(), aaiResponse.getHttpCode()); + return new AaiResponse<>(convertGetInstanceGroupsResponseToSimpleResponse(aaiResponse.getT()), aaiResponse.getErrorMessage(), aaiResponse.getHttpCode()); } - return aaiClient.getInstanceGroupsByVnfInstanceId(vnfInstanceId); + return aaiResponse; } @Override @@ -478,24 +560,36 @@ public class AaiServiceImpl implements AaiService { @Override public List searchGroupMembers(String globalCustomerId, String serviceType, String invariantId, String groupType, String groupRole) { String getURL = "business/customers/customer/" + - globalCustomerId + "/service-subscriptions/service-subscription/" + - serviceType + "/service-instances?model-invariant-id=" + invariantId; + globalCustomerId + "/service-subscriptions/service-subscription/" + + serviceType + "/service-instances?model-invariant-id=" + invariantId; - Tree pathsToSearch = new Tree<>(new AAIServiceTree.AaiRelationship(AAITreeNodeBuilder.SERVICE_INSTANCE)); - pathsToSearch.addPath(AAITreeNodeBuilder.toAaiRelationshipList(AAITreeNodeBuilder.GENERIC_VNF, AAITreeNodeBuilder.INSTANCE_GROUP)); + Tree pathsToSearch = new Tree<>(new AAIServiceTree.AaiRelationship(NodeType.SERVICE_INSTANCE)); + pathsToSearch.addPath(AAIServiceTree.toAaiRelationshipList(NodeType.GENERIC_VNF, NodeType.INSTANCE_GROUP)); //get all vnfs related to service-instances from the model-invariant-id - List aaiTree = aaiServiceTree.buildAAITree(getURL, pathsToSearch); + List aaiTree = aaiServiceTree.buildAAITree(getURL, null, HttpMethod.GET, pathsToSearch, true); //filter by instance-group-role & instance-group-type properties (from getAdditionalProperties) //only vnfs has related instance-group with the same groupType & groupRole - are filtered out. List filteredVnfs = filterByInstanceGroupRoleAndType(aaiTree, groupRole, groupType); //convert vnfs to expected result - return filteredVnfs.stream() + List convertedVnfs = filteredVnfs.stream() .map(RelatedVnf::from) - .map(this::enrichRelatedVnfWithCloudRegionAndTenant) .collect(Collectors.toList()); + + final Map copyOfParentMDC = MDC.getCopyOfContextMap(); + + try { + return executorService.submit(() -> + convertedVnfs.parallelStream() + .map(logging.withMDC(copyOfParentMDC, this::enrichRelatedVnfWithCloudRegionAndTenant)) + .collect(Collectors.toList()) + ).get(); + } catch (Exception e) { + LOGGER.error(EELFLoggerDelegate.errorLogger, "Search group Members - Failed to enrich vnf with cloud region", e); + return convertedVnfs; + } } private List filterByInstanceGroupRoleAndType(List aaiTree, String groupRole, String groupType) { @@ -530,6 +624,7 @@ public class AaiServiceImpl implements AaiService { return vnf; } + private List convertGetInstanceGroupsResponseToSimpleResponse(AaiGetRelatedInstanceGroupsByVnfId response) { List instanceGroupInfoList = new ArrayList<>(); for(org.onap.vid.aai.model.AaiGetNetworkCollectionDetails.Relationship relationship: response.getRelationshipList().getRelationship()){ @@ -539,10 +634,10 @@ public class AaiServiceImpl implements AaiService { } private void getInstanceGroupInfoFromRelationship(org.onap.vid.aai.model.AaiGetNetworkCollectionDetails.Relationship relationship, List instanceGroupInfoList) { - if(relationship.getRelatedTo().equals("instance-group")){ + if(StringUtils.equals(relationship.getRelatedTo(),"instance-group")){ for(org.onap.vid.aai.model.AaiGetNetworkCollectionDetails.RelatedToProperty relatedToProperty: relationship.getRelatedToPropertyList()){ - if(relatedToProperty.getPropertyKey().equals("instance-group.instance-group-name")){ - instanceGroupInfoList.add(new InstanceGroupInfo(relatedToProperty.getPropertyValue())); + if(StringUtils.equals(relatedToProperty.getKey(),"instance-group.instance-group-name")){ + instanceGroupInfoList.add(new InstanceGroupInfo(relatedToProperty.getValue())); } } } @@ -604,14 +699,57 @@ public class AaiServiceImpl implements AaiService { } public String getAAIServiceTree(String globalCustomerId, String serviceType, String serviceInstanceId) { - ObjectMapper om = new ObjectMapper(); String result; try { org.onap.vid.model.aaiTree.ServiceInstance tree = aaiServiceTree.getServiceInstanceTopology(globalCustomerId, serviceType, serviceInstanceId); - result = om.writeValueAsString(tree); + result = JACKSON_OBJECT_MAPPER.writeValueAsString(tree); } catch (Exception e) { throw new GenericUncheckedException(e); } return result; } + + @Override + public List getVpnListByVpnType(String vpnType) { + String path = "network/vpn-bindings?vpn-type=" + vpnType; + + try { + List aaiTree = aaiServiceTree.buildAAITreeForUniqueResource(path, NodeType.VPN_BINDING); + return aaiTree.stream().map(VpnBindingKt::from).collect(Collectors.toList()); + } catch (ExceptionWithRequestInfo exception) { + if (Objects.equals(404, exception.getHttpCode())) { + return emptyList(); + } + throw exception; + } + + } + + @Override + public List getL3NetworksByCloudRegion(String cloudRegionId, String tenantId, String networkRole) { + String payload = buildPayloadForL3NetworksByCloudRegion(cloudRegionId, tenantId, networkRole); + + try { + List aaiTree = aaiServiceTree.buildAAITreeForUniqueResourceFromCustomQuery(QUERY_FORMAT_RESOURCE, payload, HttpMethod.PUT, NodeType.NETWORK); + return aaiTree.stream().map(Network::from).collect(Collectors.toList()); + } catch (ExceptionWithRequestInfo exception) { + if (Objects.equals(404, exception.getHttpCode())) { + return emptyList(); + } + throw exception; + } + } + + @NotNull + protected String buildPayloadForL3NetworksByCloudRegion(String cloudRegionId, String tenantId, String networkRole) { + String networkRolePart = StringUtils.isEmpty(networkRole) ? "" : "&networkRole=" + networkRole; + String cloudOwner = aaiClient.getCloudOwnerByCloudRegionId(cloudRegionId); + return "{\"start\":\"/cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId + "\"," + + "\"query\":\"query/l3-networks-by-cloud-region?tenantId=" + tenantId + networkRolePart + "\"}"; + } + + @Override + public ModelVer getNewestModelVersionByInvariantId(String modelInvariantId){ + return aaiClient.getLatestVersionByInvariantId(modelInvariantId); + } }