1 package org.onap.nbi.apis.serviceinventory;
3 import java.util.ArrayList;
4 import java.util.LinkedHashMap;
6 import org.onap.nbi.apis.serviceinventory.jolt.FindServiceInventoryJsonTransformer;
7 import org.onap.nbi.apis.serviceinventory.jolt.GetServiceInventoryJsonTransformer;
8 import org.onap.nbi.exceptions.BackendFunctionalException;
9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.http.HttpStatus;
11 import org.springframework.stereotype.Service;
12 import org.springframework.util.MultiValueMap;
13 import org.springframework.util.StringUtils;
16 public class ServiceInventoryService {
25 GetServiceInventoryJsonTransformer getServiceInventoryJsonTransformer;
28 FindServiceInventoryJsonTransformer findServiceInventoryJsonTransformer;
30 public LinkedHashMap get(String serviceId, MultiValueMap<String, String> params) {
32 String clientId = params.getFirst("relatedParty.id");
33 String serviceSpecId = params.getFirst("serviceSpecification.id");
34 String serviceSpecName = params.getFirst("serviceSpecification.name");
36 if (StringUtils.isEmpty(serviceSpecId) && StringUtils.isEmpty(serviceSpecName)) {
37 throw new BackendFunctionalException(HttpStatus.NOT_FOUND,
38 "serviceSpecName or serviceSpecId must be provided");
41 String customerId = getCustomerId(clientId);
42 String serviceName = getServiceName(serviceSpecName, serviceSpecId);
43 LinkedHashMap serviceResponse = aaiClient.getCatalogService(customerId, serviceName, serviceId);
45 if (serviceResponse != null) {
46 addVnfsToResponse(serviceResponse);
47 LinkedHashMap serviceInventoryResponse =
48 (LinkedHashMap) getServiceInventoryJsonTransformer.transform(serviceResponse);
49 addRelatedPartyId(customerId, serviceInventoryResponse);
50 return serviceInventoryResponse;
52 throw new BackendFunctionalException(HttpStatus.NOT_FOUND, "no catalog service found");
58 private String getCustomerId(String clientId) {
60 if (StringUtils.isEmpty(clientId)) {
68 private String getServiceName(String serviceSpecificationName, String serviceSpecificationId) {
70 if (StringUtils.isEmpty(serviceSpecificationName)) {
71 LinkedHashMap serviceSpecification = nbiClient.getServiceSpecification(serviceSpecificationId);
72 return (String) serviceSpecification.get("name");
74 return serviceSpecificationName;
79 private void addRelatedPartyId(String customerId, LinkedHashMap serviceInventoryResponse) {
81 LinkedHashMap relatedParty = (LinkedHashMap) serviceInventoryResponse.get("relatedParty");
82 relatedParty.put("id", customerId);
86 private void addVnfsToResponse(LinkedHashMap serviceResponse) {
88 List<LinkedHashMap> vnfs = new ArrayList<>();
89 LinkedHashMap relationShip = (LinkedHashMap) serviceResponse.get("relationship-list");
90 List<LinkedHashMap> relationsList = (List<LinkedHashMap>) relationShip.get("relationship");
91 for (LinkedHashMap relation : relationsList) {
92 String relatedLink = (String) relation.get("related-link");
93 LinkedHashMap vnf = aaiClient.getVNF(relatedLink);
98 serviceResponse.put("vnfs", vnfs);
103 public List<LinkedHashMap> find(MultiValueMap<String, String> params) {
105 String clientId = params.getFirst("relatedParty.id");
106 String serviceSpecId = params.getFirst("serviceSpecification.id");
107 String serviceSpecName = params.getFirst("serviceSpecification.name");
108 String customerId = getCustomerId(clientId);
110 List<LinkedHashMap> serviceInstances = new ArrayList<>();
111 if (StringUtils.isEmpty(serviceSpecId) && StringUtils.isEmpty(serviceSpecName)) {
112 LinkedHashMap servicesInAaiForCustomer = aaiClient.getServicesInAaiForCustomer(customerId);
113 List<LinkedHashMap> servicesInAAI =
114 (List<LinkedHashMap>) servicesInAaiForCustomer.get("service-subscription");
115 for (LinkedHashMap service : servicesInAAI) {
116 String serviceType = (String) service.get("service-type");
117 buildServiceInstances(serviceInstances, customerId, serviceType);
120 serviceName = getServiceName(serviceSpecName, serviceSpecId);
121 buildServiceInstances(serviceInstances, customerId, serviceName);
124 List<LinkedHashMap> serviceInventoryResponse =
125 (List<LinkedHashMap>) findServiceInventoryJsonTransformer.transform(serviceInstances);
126 for (LinkedHashMap serviceInventory : serviceInventoryResponse) {
127 LinkedHashMap party = (LinkedHashMap) serviceInventory.get("relatedParty");
128 party.put("id", customerId);
130 return serviceInventoryResponse;
134 private void buildServiceInstances(List<LinkedHashMap> serviceInstances, String customerId, String serviceType) {
136 LinkedHashMap serviceInstancesInAaiForCustomer =
137 aaiClient.getServiceInstancesInAaiForCustomer(customerId, serviceType);
138 List<LinkedHashMap> serviceInstancesForServiceType =
139 (List<LinkedHashMap>) serviceInstancesInAaiForCustomer.get("service-instance");
141 // add service type for jolt
142 for (LinkedHashMap serviceInstanceForServiceType : serviceInstancesForServiceType) {
143 serviceInstanceForServiceType.put("service-type", serviceType);
145 serviceInstances.addAll(serviceInstancesForServiceType);