1 package org.onap.vid.services;
3 import org.apache.http.HttpStatus;
4 import org.onap.vid.aai.model.AaiGetAicZone.AicZones;
5 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
6 import org.onap.vid.aai.*;
7 import org.onap.vid.aai.ServiceInstance;
8 import org.onap.vid.aai.ServiceSubscription;
9 import org.onap.vid.aai.Services;
10 import org.onap.vid.aai.model.AaiGetOperationalEnvironments.OperationalEnvironmentList;
11 import org.onap.vid.aai.model.AaiGetPnfs.Pnf;
12 import org.onap.vid.aai.model.AaiGetServicesRequestModel.GetServicesAAIRespone;
13 import org.onap.vid.aai.model.AaiGetTenatns.GetTenantsResponse;
14 import org.onap.vid.aai.model.*;
15 import org.onap.vid.asdc.beans.Service;
16 import org.onap.vid.model.ServiceInstanceSearchResult;
17 import org.onap.vid.model.SubscriberList;
18 import org.onap.vid.roles.RoleValidator;
19 import org.onap.vid.utils.Intersection;
20 import org.springframework.beans.factory.annotation.Autowired;
22 import javax.ws.rs.core.Response;
23 import java.io.UnsupportedEncodingException;
24 import java.net.URLEncoder;
25 import java.util.ArrayList;
26 import java.util.Collection;
27 import java.util.List;
28 import java.util.stream.Collectors;
31 * Created by Oren on 7/4/17.
33 public class AaiServiceImpl implements AaiService {
34 private String serviceInstanceId = "service-instance.service-instance-id";
35 private String serviceType = "service-subscription.service-type";
36 private String customerId = "customer.global-customer-id";
37 private String serviceInstanceName = "service-instance.service-instance-name";
38 private int indexOfSubscriberName = 6;
41 private AaiClientInterface aaiClient;
43 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AaiServiceImpl.class);
45 private List<Service> convertModelToService(Model model) {
46 List<Service> services = new ArrayList<>();
49 if(validateModel(model)){
50 if(model.getModelType() != null)
51 category = model.getModelType();
53 for (ModelVer modelVer: model.getModelVers().getModelVer()) {
54 Service service = new Service();
55 if (modelVer.getModelVersionId() != null)
56 service.setUuid(modelVer.getModelVersionId());
57 if(model.getModelInvariantId() != null)
58 service.setInvariantUUID(model.getModelInvariantId());
59 if(modelVer.getModelVersion() != null)
60 service.setVersion(modelVer.getModelVersion());
61 if(modelVer.getModelName() != null)
62 service.setName(modelVer.getModelName());
63 if(modelVer.getDistributionStatus() != null)
64 service.setDistributionStatus(Service.DistributionStatus.valueOf(modelVer.getDistributionStatus()));
65 service.setCategory(category);
67 services.add(service);
76 private boolean validateModel(Model model){
78 if(model.getModelVers() != null && model.getModelVers().getModelVer() != null && model.getModelVers().getModelVer().get(0).getModelVersionId() != null){
85 private List<ServiceInstanceSearchResult> getServicesByOwningEntityId(List<String> owningEntities, RoleValidator roleValidator) {
86 AaiResponse<OwningEntityResponse> owningEntityResponse = aaiClient.getServicesByOwningEntityId(owningEntities);
87 List<ServiceInstanceSearchResult> serviceInstanceSearchResultList = new ArrayList<>();
88 if (owningEntityResponse.getT() != null) {
89 for (OwningEntity owningEntity : owningEntityResponse.getT().getOwningEntity()) {
90 if (owningEntity.getRelationshipList() != null) {
91 serviceInstanceSearchResultList = convertRelationshipToSearchResult(owningEntity, serviceInstanceSearchResultList, roleValidator);
95 return serviceInstanceSearchResultList;
98 private List<ServiceInstanceSearchResult> getServicesByProjectNames(List<String> projectNames, RoleValidator roleValidator) {
99 AaiResponse<ProjectResponse> projectByIdResponse = aaiClient.getServicesByProjectNames(projectNames);
100 List<ServiceInstanceSearchResult> serviceInstanceSearchResultList = new ArrayList<>();
101 if (projectByIdResponse.getT() != null) {
102 for (Project project : projectByIdResponse.getT().getProject()) {
103 if (project.getRelationshipList() != null)
104 serviceInstanceSearchResultList = convertRelationshipToSearchResult(project, serviceInstanceSearchResultList, roleValidator);
107 return serviceInstanceSearchResultList;
110 private List<ServiceInstanceSearchResult> convertRelationshipToSearchResult(AaiRelationResponse owningEntityResponse, List<ServiceInstanceSearchResult> serviceInstanceSearchResultList, RoleValidator roleValidator) {
111 if (owningEntityResponse.getRelationshipList().getRelationship() != null) {
112 List<Relationship> relationshipList = owningEntityResponse.getRelationshipList().getRelationship();
113 for (Relationship relationship : relationshipList) {
114 ServiceInstanceSearchResult serviceInstanceSearchResult = new ServiceInstanceSearchResult();
115 extractRelationshipData(relationship, serviceInstanceSearchResult, roleValidator);
116 extractRelatedToProperty(relationship, serviceInstanceSearchResult);
117 serviceInstanceSearchResultList.add(serviceInstanceSearchResult);
120 return serviceInstanceSearchResultList;
123 private void extractRelationshipData(Relationship relationship, ServiceInstanceSearchResult serviceInstanceSearchResult, RoleValidator roleValidator) {
124 List<RelationshipData> relationshipDataList = relationship.getRelationDataList();
125 if (relationshipDataList != null) {
126 setSubscriberName(relationship, serviceInstanceSearchResult);
127 for (RelationshipData relationshipData : relationshipDataList) {
128 String key = relationshipData.getRelationshipKey();
129 if (key.equals(serviceInstanceId)) {
130 serviceInstanceSearchResult.setServiceInstanceId(relationshipData.getRelationshipValue());
131 } else if (key.equals(serviceType)) {
132 serviceInstanceSearchResult.setServiceType(relationshipData.getRelationshipValue());
133 } else if (key.equals(customerId)) {
134 serviceInstanceSearchResult.setGlobalCustomerId(relationshipData.getRelationshipValue());
138 boolean isPermitted = roleValidator.isServicePermitted(serviceInstanceSearchResult.getSubscriberName(), serviceInstanceSearchResult.getServiceType());
139 serviceInstanceSearchResult.setIsPermitted(isPermitted);
143 private void setSubscriberName(Relationship relationship, ServiceInstanceSearchResult serviceInstanceSearchResult) {
144 String relatedLink = relationship.getRelatedLink();
145 String[] subsciber = relatedLink.split("/");
146 serviceInstanceSearchResult.setSubscriberName(subsciber[indexOfSubscriberName]);
149 private void extractRelatedToProperty(Relationship relationship, ServiceInstanceSearchResult serviceInstanceSearchResult) {
150 List<RelatedToProperty> relatedToPropertyList = relationship.getRelatedToPropertyList();
151 if (relatedToPropertyList != null) {
152 for (RelatedToProperty relatedToProperty : relatedToPropertyList) {
153 if (relatedToProperty.getPropertyKey().equals(serviceInstanceName)) {
154 serviceInstanceSearchResult.setServiceInstanceName(relatedToProperty.getPropertyValue());
161 public SubscriberFilteredResults getFullSubscriberList(RoleValidator roleValidator) {
162 AaiResponse<SubscriberList> subscriberResponse = aaiClient.getAllSubscribers();
163 SubscriberFilteredResults subscriberFilteredResults =
164 new SubscriberFilteredResults(roleValidator, subscriberResponse.getT(),
165 subscriberResponse.getErrorMessage(),
166 subscriberResponse.getHttpCode());
168 return subscriberFilteredResults;
172 public AaiResponse<OperationalEnvironmentList> getOperationalEnvironments(String operationalEnvironmentType, String operationalEnvironmentStatus) {
173 AaiResponse<OperationalEnvironmentList> subscriberResponse = aaiClient.getOperationalEnvironments(operationalEnvironmentType, operationalEnvironmentStatus);
174 return subscriberResponse;
178 public AaiResponse<SubscriberList> getFullSubscriberList() {
179 AaiResponse<SubscriberList> subscriberResponse = aaiClient.getAllSubscribers();
180 return subscriberResponse;
184 public AaiResponse getSubscriberData(String subscriberId, RoleValidator roleValidator) {
185 AaiResponse<Services> subscriberResponse = aaiClient.getSubscriberData(subscriberId);
186 String subscriberGlobalId = subscriberResponse.getT().globalCustomerId;
187 for (ServiceSubscription serviceSubscription : subscriberResponse.getT().serviceSubscriptions.serviceSubscription) {
188 String serviceType = serviceSubscription.serviceType;
189 serviceSubscription.isPermitted = roleValidator.isServicePermitted(subscriberGlobalId, serviceType);
191 return subscriberResponse;
196 public AaiResponse getServiceInstanceSearchResults(String subscriberId, String instanceIdentifier, RoleValidator roleValidator, List<String> owningEntities, List<String> projects) {
197 List<List<ServiceInstanceSearchResult>> resultList = new ArrayList<>();
198 ServiceInstancesSearchResults serviceInstancesSearchResults = new ServiceInstancesSearchResults();
200 if (subscriberId != null || instanceIdentifier != null) {
201 resultList.add(getServicesBySubscriber(subscriberId, instanceIdentifier, roleValidator));
203 if (owningEntities != null) {
204 resultList.add(getServicesByOwningEntityId(owningEntities, roleValidator));
206 if (projects != null) {
207 resultList.add(getServicesByProjectNames(projects, roleValidator));
209 if (resultList.size() > 0) {
210 Intersection<ServiceInstanceSearchResult> intersection = new Intersection<>();
211 serviceInstancesSearchResults.serviceInstances = intersection.intersectMultipileArray(resultList);
214 return new AaiResponse<>(serviceInstancesSearchResults, null, HttpStatus.SC_OK);
218 private List<ServiceInstanceSearchResult> getServicesBySubscriber(String subscriberId, String instanceIdentifier, RoleValidator roleValidator) {
219 AaiResponse<Services> subscriberResponse = aaiClient.getSubscriberData(subscriberId);
220 String subscriberGlobalId = subscriberResponse.getT().globalCustomerId;
221 String subscriberName = subscriberResponse.getT().subscriberName;
222 ServiceSubscriptions serviceSubscriptions = subscriberResponse.getT().serviceSubscriptions;
224 return getSearchResultsForSubscriptions(serviceSubscriptions, subscriberId, instanceIdentifier, roleValidator, subscriberGlobalId, subscriberName);
229 private ArrayList<ServiceInstanceSearchResult> getSearchResultsForSubscriptions(ServiceSubscriptions serviceSubscriptions, String subscriberId, String instanceIdentifier, RoleValidator roleValidator, String subscriberGlobalId, String subscriberName) {
230 ArrayList<ServiceInstanceSearchResult> results = new ArrayList<>();
232 if (serviceSubscriptions != null) {
233 for (ServiceSubscription serviceSubscription : serviceSubscriptions.serviceSubscription) {
234 String serviceType = serviceSubscription.serviceType;
235 serviceSubscription.isPermitted = roleValidator.isServicePermitted(subscriberGlobalId, serviceType);
236 ArrayList<ServiceInstanceSearchResult> resultsForSubscription = getSearchResultsForSingleSubscription(serviceSubscription, subscriberId, instanceIdentifier, subscriberName, serviceType);
237 results.addAll(resultsForSubscription);
244 private ArrayList<ServiceInstanceSearchResult> getSearchResultsForSingleSubscription(ServiceSubscription serviceSubscription, String subscriberId, String instanceIdentifier, String subscriberName, String serviceType) {
245 ArrayList<ServiceInstanceSearchResult> results = new ArrayList<>();
247 if (serviceSubscription.serviceInstances != null) {
248 for (ServiceInstance serviceInstance : serviceSubscription.serviceInstances.serviceInstance) {
249 ServiceInstanceSearchResult serviceInstanceSearchResult =
250 new ServiceInstanceSearchResult(serviceInstance.serviceInstanceId, subscriberId, serviceType, serviceInstance.serviceInstanceName,
251 subscriberName, serviceInstance.modelInvariantId, serviceInstance.modelVersionId, serviceSubscription.isPermitted);
253 if (instanceIdentifier == null) {
254 results.add(serviceInstanceSearchResult);
255 } else if (serviceInstanceMatchesIdentifier(instanceIdentifier, serviceInstance)) {
256 results.add(serviceInstanceSearchResult);
264 private boolean serviceInstanceMatchesIdentifier(String instanceIdentifier, ServiceInstance serviceInstance) {
265 return instanceIdentifier.equals(serviceInstance.serviceInstanceId) || instanceIdentifier.equals(serviceInstance.serviceInstanceName);
269 public Response getVersionByInvariantId(List<String> modelInvariantId) {
271 return aaiClient.getVersionByInvariantId(modelInvariantId);
272 } catch (Exception e) {
279 public AaiResponse<Pnf> getSpecificPnf(String pnfId) {
280 return aaiClient.getSpecificPnf(pnfId);
284 public AaiResponse getPNFData(String globalCustomerId, String serviceType, String modelVersionId, String modelInvariantId, String cloudRegion, String equipVendor, String equipModel) {
285 return aaiClient.getPNFData(globalCustomerId, serviceType, modelVersionId, modelInvariantId, cloudRegion, equipVendor, equipModel);
291 public AaiResponse getServices(RoleValidator roleValidator) {
292 AaiResponse<GetServicesAAIRespone> subscriberResponse = aaiClient.getServices();
293 if (subscriberResponse.getT() != null)
294 for (org.onap.vid.aai.model.AaiGetServicesRequestModel.Service service : subscriberResponse.getT().service) {
295 service.isPermitted = true;
297 return subscriberResponse;
301 public AaiResponse<GetTenantsResponse[]> getTenants(String globalCustomerId, String serviceType, RoleValidator roleValidator) {
302 AaiResponse<GetTenantsResponse[]> aaiGetTenantsResponse = aaiClient.getTenants(globalCustomerId, serviceType);
303 GetTenantsResponse[] tenants = aaiGetTenantsResponse.getT();
304 if (tenants != null) {
305 for (int i = 0; i < tenants.length; i++) {
306 tenants[i].isPermitted = roleValidator.isTenantPermitted(globalCustomerId, serviceType, tenants[i].tenantName);
309 return aaiGetTenantsResponse;
315 public AaiResponse getVNFData(String globalSubscriberId, String serviceType, String serviceInstanceId) {
316 return aaiClient.getVNFData(globalSubscriberId, serviceType, serviceInstanceId);
320 public Response getVNFData(String globalSubscriberId, String serviceType) {
321 return aaiClient.getVNFData(globalSubscriberId, serviceType);
325 public AaiResponse getAaiZones() {
326 AaiResponse<AicZones> response = aaiClient.getAllAicZones();
331 public AaiResponse getAicZoneForPnf(String globalCustomerId, String serviceType, String serviceId) {
334 AaiResponse<ServiceRelationships> serviceInstanceResp = aaiClient.getServiceInstance(globalCustomerId, serviceType, serviceId);
335 if (serviceInstanceResp.getT() != null) {
336 List<String> aicZoneList = getRelationshipDataByType(serviceInstanceResp.getT().getRelationshipList(), "zone", "zone.zone-id");
337 if (aicZoneList.size() > 0) {
338 aicZone = aicZoneList.get(0);
340 logger.warn("aic zone not found for service instance " + serviceId);
343 if (serviceInstanceResp.getErrorMessage() != null) {
344 logger.error("get service instance " + serviceId + " return error", serviceInstanceResp.getErrorMessage());
345 return new AaiResponse(aicZone , serviceInstanceResp.getErrorMessage() ,serviceInstanceResp.getHttpCode());
347 logger.warn("get service instance " + serviceId + " return empty body");
348 return new AaiResponse(aicZone , "get service instance " + serviceId + " return empty body" ,serviceInstanceResp.getHttpCode());
352 return new AaiResponse(aicZone , null ,HttpStatus.SC_OK);
356 public AaiResponse getNodeTemplateInstances(String globalCustomerId, String serviceType, String modelVersionId, String modelInvariantId, String cloudRegion) {
357 return aaiClient.getNodeTemplateInstances(globalCustomerId, serviceType, modelVersionId, modelInvariantId, cloudRegion);
361 public Collection<Service> getServicesByDistributionStatus() {
362 AaiResponse<GetServiceModelsByDistributionStatusResponse> serviceModelsByDistributionStatusResponse = aaiClient.getServiceModelsByDistributionStatus();
363 Collection<Service> services = new ArrayList<>();
364 if (serviceModelsByDistributionStatusResponse.getT() != null) {
365 List<Result> results = serviceModelsByDistributionStatusResponse.getT().getResults();
366 for (Result result : results) {
367 if(result.getModel() != null) {
368 List<Service> service = convertModelToService(result.getModel());
369 if (service != null) {
370 services.addAll(service);
379 public List<String> getServiceInstanceAssociatedPnfs(String globalCustomerId, String serviceType, String serviceInstanceId) {
380 List<String> pnfs = new ArrayList<>();
382 AaiResponse<ServiceRelationships> serviceInstanceResp = aaiClient.getServiceInstance(globalCustomerId, serviceType, serviceInstanceId);
383 if (serviceInstanceResp.getT() != null) {
384 List<String> logicalLinks = getRelationshipDataByType(serviceInstanceResp.getT().getRelationshipList(), "logical-link", "logical-link.link-name");
385 for (String logicalLink : logicalLinks) {
388 link = URLEncoder.encode(logicalLink, "UTF-8");
389 AaiResponse<LogicalLinkResponse> logicalLinkResp = aaiClient.getLogicalLink(link);
390 if (logicalLinkResp.getT() != null) {
391 //lag-interface is the key for pnf - approved by Bracha
392 List<String> linkPnfs = getRelationshipDataByType(logicalLinkResp.getT().getRelationshipList(), "lag-interface", "pnf.pnf-name");
393 if (linkPnfs.size() > 0) {
394 pnfs.addAll(linkPnfs);
396 logger.warn("no pnf found for logical link " + logicalLink);
399 if (logicalLinkResp.getErrorMessage() != null) {
400 logger.error("get logical link " + logicalLink + " return error", logicalLinkResp.getErrorMessage());
402 logger.warn("get logical link " + logicalLink + " return empty body");
405 } catch (UnsupportedEncodingException e) {
406 logger.error("Failed to encode logical link: " + logicalLink, e.getMessage());
410 if (serviceInstanceResp.getErrorMessage() != null) {
411 logger.error("get service instance " + serviceInstanceId + " return error", serviceInstanceResp.getErrorMessage());
413 logger.warn("get service instance " + serviceInstanceId + " return empty body");
417 return pnfs.stream().distinct().collect(Collectors.toList());
420 private List<String> getRelationshipDataByType(RelationshipList relationshipList, String relationshipType, String relationshipDataKey) {
421 List<String> relationshipValues = new ArrayList<>();
422 for (Relationship relationship : relationshipList.getRelationship()) {
423 if (relationship.getRelatedTo().equals(relationshipType)) {
424 relationshipValues.addAll( relationship.getRelationDataList().stream()
425 .filter(rel -> rel.getRelationshipKey().equals(relationshipDataKey))
426 .map(RelationshipData::getRelationshipValue)
427 .collect(Collectors.toList())
433 return relationshipValues;