1 package org.onap.vid.aai.util;
3 import com.google.common.collect.ImmutableMap;
4 import org.apache.commons.text.StrSubstitutor;
5 import org.onap.vid.aai.AaiClientInterface;
6 import org.onap.vid.aai.model.AaiGetNetworkCollectionDetails.*;
7 import org.onap.vid.aai.model.interfaces.AaiModelWithRelationships;
8 import org.onap.vid.utils.Multival;
9 import org.onap.vid.utils.Unchecked;
11 import javax.inject.Inject;
14 import java.util.function.Predicate;
15 import java.util.stream.Stream;
17 import static java.util.stream.Collectors.toSet;
19 public class ServiceInstanceStandardQuery {
21 private static final String SERVICE_INSTANCE_URI_TEMPLATE = "" +
22 "business/customers/customer/${global-customer-id}" +
23 "/service-subscriptions/service-subscription/${service-type}" +
24 "/service-instances/service-instance/${service-instance-id}";
26 private final AaiClientInterface aaiClient;
29 public ServiceInstanceStandardQuery(AaiClientInterface aaiClient) {
30 this.aaiClient = aaiClient;
33 public ServiceInstance fetchServiceInstance(String globalCustomerId, String serviceType, String serviceInstanceId) {
34 final String serviceInstanceUri = getServiceInstanceUri(globalCustomerId, serviceType, serviceInstanceId);
36 return fetchServiceInstance(Unchecked.toURI(serviceInstanceUri));
39 ServiceInstance fetchServiceInstance(URI serviceInstanceUri) {
40 return objectByUri(ServiceInstance.class, serviceInstanceUri);
43 protected <T> T objectByUri(Class<T> clazz, URI aaiResourceUri) {
44 return aaiClient.typedAaiGet(aaiResourceUri, clazz);
47 public Multival<ServiceInstance, Vnf> fetchRelatedVnfs(ServiceInstance serviceInstance) {
48 return fetchRelated("service", serviceInstance, "generic-vnf", Vnf.class);
51 public <K extends AaiModelWithRelationships> Multival<K, Network> fetchRelatedL3Networks(String sourceType, K source) {
52 return fetchRelated(sourceType, source, "l3-network", Network.class);
55 public Multival<Network, Vlan> fetchRelatedVlanTags(Network network) {
56 return fetchRelated("network", network, "vlan-tag", Vlan.class);
59 private String getServiceInstanceUri(String globalCustomerId, String serviceType, String serviceInstanceId) {
60 return new StrSubstitutor(ImmutableMap.of(
61 "global-customer-id", globalCustomerId,
62 "service-type", serviceType,
63 "service-instance-id", serviceInstanceId
64 )).replace(SERVICE_INSTANCE_URI_TEMPLATE);
67 private <K extends AaiModelWithRelationships, V> Multival<K, V> fetchRelated(String sourceType, K source, String destType, Class<V> destClass) {
72 fetchRelatedInner(source, destType, destClass)
76 private <K extends AaiModelWithRelationships, V> Set<V> fetchRelatedInner(K source, String destType, Class<V> destClass) {
77 return getURIsOf(source, relationship -> relatedTo(relationship, destType))
78 .map(destUri -> objectByUri(destClass, destUri))
82 protected Stream<URI> getURIsOf(AaiModelWithRelationships aaiModel, Predicate<Relationship> predicate) {
83 return aaiModel.getRelationshipList().getRelationship().stream()
85 .map(r -> r.relatedLink)
86 .map(Unchecked::toURI);
89 protected static boolean relatedTo(Relationship r, String relationshipName) {
90 return relationshipName.equals(r.getRelatedTo());