2 * Copyright (c) 2018 Orange
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.onap.nbi.apis.serviceinventory;
18 import java.util.ArrayList;
19 import java.util.LinkedHashMap;
20 import java.util.List;
21 import org.onap.nbi.apis.serviceinventory.jolt.FindServiceInventoryJsonTransformer;
22 import org.onap.nbi.apis.serviceinventory.jolt.GetServiceInventoryJsonTransformer;
23 import org.onap.nbi.exceptions.BackendFunctionalException;
24 import org.springframework.beans.factory.annotation.Autowired;
25 import org.springframework.http.HttpStatus;
26 import org.springframework.stereotype.Service;
27 import org.springframework.util.CollectionUtils;
28 import org.springframework.util.MultiValueMap;
29 import org.springframework.util.StringUtils;
32 public class ServiceInventoryService {
41 GetServiceInventoryJsonTransformer getServiceInventoryJsonTransformer;
44 FindServiceInventoryJsonTransformer findServiceInventoryJsonTransformer;
46 public LinkedHashMap get(String serviceId, MultiValueMap<String, String> params) {
48 String clientId = params.getFirst("relatedParty.id");
49 String serviceSpecId = params.getFirst("serviceSpecification.id");
50 String serviceSpecName = params.getFirst("serviceSpecification.name");
52 if (StringUtils.isEmpty(serviceSpecId) && StringUtils.isEmpty(serviceSpecName)) {
53 throw new BackendFunctionalException(HttpStatus.NOT_FOUND,
54 "serviceSpecName or serviceSpecId must be provided");
57 String customerId = getCustomerId(clientId);
58 String serviceName = getServiceName(serviceSpecName, serviceSpecId);
59 LinkedHashMap serviceResponse = aaiClient.getCatalogService(customerId, serviceName, serviceId);
61 if (serviceResponse != null) {
62 addVnfsToResponse(serviceResponse);
63 LinkedHashMap serviceInventoryResponse =
64 (LinkedHashMap) getServiceInventoryJsonTransformer.transform(serviceResponse);
65 addRelatedPartyId(customerId, serviceInventoryResponse);
66 return serviceInventoryResponse;
68 throw new BackendFunctionalException(HttpStatus.NOT_FOUND, "no catalog service found");
74 private String getCustomerId(String clientId) {
76 if (StringUtils.isEmpty(clientId)) {
84 private String getServiceName(String serviceSpecificationName, String serviceSpecificationId) {
86 if (StringUtils.isEmpty(serviceSpecificationName)) {
87 LinkedHashMap serviceSpecification = nbiClient.getServiceSpecification(serviceSpecificationId);
88 return (String) serviceSpecification.get("name");
90 return serviceSpecificationName;
95 private void addRelatedPartyId(String customerId, LinkedHashMap serviceInventoryResponse) {
97 LinkedHashMap relatedParty = (LinkedHashMap) serviceInventoryResponse.get("relatedParty");
98 relatedParty.put("id", customerId);
102 private void addVnfsToResponse(LinkedHashMap serviceResponse) {
104 List<LinkedHashMap> vnfs = new ArrayList<>();
105 LinkedHashMap relationShip = (LinkedHashMap) serviceResponse.get("relationship-list");
106 if(relationShip!=null) {
107 List<LinkedHashMap> relationsList = (List<LinkedHashMap>) relationShip.get("relationship");
108 if(relationsList!=null) {
109 for (LinkedHashMap relation : relationsList) {
110 String relatedLink = (String) relation.get("related-link");
111 LinkedHashMap vnf = aaiClient.getVNF(relatedLink);
116 serviceResponse.put("vnfs", vnfs);
122 public List<LinkedHashMap> find(MultiValueMap<String, String> params) {
124 String clientId = params.getFirst("relatedParty.id");
125 String serviceSpecId = params.getFirst("serviceSpecification.id");
126 String serviceSpecName = params.getFirst("serviceSpecification.name");
127 String customerId = getCustomerId(clientId);
129 List<LinkedHashMap> serviceInstances = new ArrayList<>();
130 if (StringUtils.isEmpty(serviceSpecId) && StringUtils.isEmpty(serviceSpecName)) {
131 LinkedHashMap servicesInAaiForCustomer = aaiClient.getServicesInAaiForCustomer(customerId);
132 List<LinkedHashMap> servicesInAAI =
133 (List<LinkedHashMap>) servicesInAaiForCustomer.get("service-subscription");
134 for (LinkedHashMap service : servicesInAAI) {
135 String serviceType = (String) service.get("service-type");
136 buildServiceInstances(serviceInstances, customerId, serviceType);
139 serviceName = getServiceName(serviceSpecName, serviceSpecId);
140 buildServiceInstances(serviceInstances, customerId, serviceName);
143 List<LinkedHashMap> serviceInventoryResponse =
144 (List<LinkedHashMap>) findServiceInventoryJsonTransformer.transform(serviceInstances);
145 for (LinkedHashMap serviceInventory : serviceInventoryResponse) {
146 LinkedHashMap party = (LinkedHashMap) serviceInventory.get("relatedParty");
147 party.put("id", customerId);
149 return serviceInventoryResponse;
153 private void buildServiceInstances(List<LinkedHashMap> serviceInstances, String customerId, String serviceType) {
155 LinkedHashMap serviceInstancesInAaiForCustomer =
156 aaiClient.getServiceInstancesInAaiForCustomer(customerId, serviceType);
157 List<LinkedHashMap> serviceInstancesForServiceType =
158 (List<LinkedHashMap>) serviceInstancesInAaiForCustomer.get("service-instance");
160 if(!CollectionUtils.isEmpty(serviceInstancesForServiceType)){
161 // add service type for jolt
162 for (LinkedHashMap serviceInstanceForServiceType : serviceInstancesForServiceType) {
163 serviceInstanceForServiceType.put("service-type", serviceType);
165 serviceInstances.addAll(serviceInstancesForServiceType);