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 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.onap.vid.model.aaiTree.RelatedVnf;
import org.onap.vid.model.aaiTree.VpnBinding;
import org.onap.vid.model.aaiTree.VpnBindingKt;
-import org.onap.vid.roles.PermissionProperties;
+import org.onap.vid.roles.PermissionPropertiesSubscriberAndServiceType;
import org.onap.vid.roles.RoleValidator;
import org.onap.vid.utils.Intersection;
import org.onap.vid.utils.Logging;
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 List<ServiceInstanceSearchResult> getServicesByOwningEntityId(List<String> owningEntities, RoleValidator roleValidator) {
+ List<ServiceInstanceSearchResult> getServicesByOwningEntityId(List<String> owningEntities, RoleValidator roleValidator) {
AaiResponse<OwningEntityResponse> owningEntityResponse = aaiClient.getServicesByOwningEntityId(owningEntities);
List<ServiceInstanceSearchResult> 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<ServiceInstanceSearchResult> getServicesByProjectNames(List<String> projectNames, RoleValidator roleValidator) {
+ List<ServiceInstanceSearchResult> getServicesByProjectNames(List<String> projectNames, RoleValidator roleValidator) {
AaiResponse<ProjectResponse> projectByIdResponse = aaiClient.getServicesByProjectNames(projectNames);
List<ServiceInstanceSearchResult> 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<ServiceInstanceSearchResult> convertRelationshipToSearchResult(AaiRelationResponse owningEntityResponse, List<ServiceInstanceSearchResult> serviceInstanceSearchResultList, RoleValidator roleValidator) {
- if (owningEntityResponse.getRelationshipList().getRelationship() != null) {
- List<Relationship> relationshipList = owningEntityResponse.getRelationshipList().getRelationship();
+ private List<ServiceInstanceSearchResult> convertRelationshipToSearchResult(AaiRelationResponse aaiRelationResponse, RoleValidator roleValidator, String owningEntityId) {
+ List<ServiceInstanceSearchResult> serviceInstanceSearchResultList = new ArrayList<>();
+ if (aaiRelationResponse.getRelationshipList().getRelationship() != null) {
+ List<Relationship> relationshipList = aaiRelationResponse.getRelationshipList().getRelationship();
for (Relationship relationship : relationshipList) {
ServiceInstanceSearchResult serviceInstanceSearchResult = new ServiceInstanceSearchResult();
extractRelationshipData(relationship, serviceInstanceSearchResult, roleValidator);
extractRelatedToProperty(relationship, serviceInstanceSearchResult);
+ serviceInstanceSearchResult.setOwningEntityId(owningEntityId);
+ serviceInstanceSearchResult.setIsPermitted(roleValidator.isServicePermitted(serviceInstanceSearchResult));
serviceInstanceSearchResultList.add(serviceInstanceSearchResult);
}
}
serviceInstanceSearchResult.setSubscriberId(relationshipData.getRelationshipValue());
}
}
-
- boolean isPermitted = roleValidator.isServicePermitted(serviceInstanceSearchResult);
- serviceInstanceSearchResult.setIsPermitted(isPermitted);
}
}
AaiResponse<Services> subscriberResponse = aaiClient.getSubscriberData(subscriberId, omitServiceInstances);
for (ServiceSubscription serviceSubscription : subscriberResponse.getT().serviceSubscriptions.serviceSubscription) {
serviceSubscription.isPermitted = roleValidator.isServicePermitted(
- new PermissionProperties(serviceSubscription, subscriberResponse.getT().globalCustomerId));
+ new PermissionPropertiesSubscriberAndServiceType(serviceSubscription, subscriberResponse.getT().globalCustomerId));
}
return subscriberResponse;
if (serviceSubscriptions != null) {
for (ServiceSubscription serviceSubscription : serviceSubscriptions.serviceSubscription) {
- serviceSubscription.isPermitted = roleValidator.isServicePermitted(new PermissionProperties(serviceSubscription, subscriberId));
+ serviceSubscription.isPermitted = roleValidator.isServicePermitted(new PermissionPropertiesSubscriberAndServiceType(serviceSubscription, subscriberId));
results.addAll(getSearchResultsForSingleSubscription(
serviceSubscription, subscriberId, instanceIdentifier, subscriberName,
serviceSubscription.serviceType, roleValidator)
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, false);
+ new ServiceInstanceSearchResult(serviceInstance.serviceInstanceId, subscriberId, serviceType,
+ serviceInstance.serviceInstanceName, subscriberName, serviceInstance.modelInvariantId,
+ serviceInstance.modelVersionId, relatedOwningEntityId(serviceInstance), false);
serviceInstanceSearchResult.setIsPermitted(roleValidator.isServicePermitted(serviceInstanceSearchResult));
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<RelationshipData> 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);
}
return aaiTree.stream().map(VpnBindingKt::from).collect(Collectors.toList());
} catch (ExceptionWithRequestInfo exception) {
if (Objects.equals(404, exception.getHttpCode())) {
- return Collections.emptyList();
+ return emptyList();
}
throw exception;
}
return aaiTree.stream().map(Network::from).collect(Collectors.toList());
} catch (ExceptionWithRequestInfo exception) {
if (Objects.equals(404, exception.getHttpCode())) {
- return Collections.emptyList();
+ return emptyList();
}
throw exception;
}