1 package org.onap.so.bpmn.servicedecomposition.tasks;
4 import java.util.Optional;
6 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
7 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
8 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
9 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
10 import org.onap.so.client.aai.AAICommonObjectMapperProvider;
11 import org.onap.so.client.aai.AAIObjectType;
12 import org.onap.so.client.aai.entities.AAIResultWrapper;
13 import org.onap.so.client.aai.entities.Relationships;
14 import org.onap.so.logger.MsoLogger;
15 import org.springframework.beans.factory.annotation.Autowired;
16 import org.springframework.stereotype.Component;
18 import com.fasterxml.jackson.core.JsonProcessingException;
21 public class CloudInfoFromAAI {
23 private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, CloudInfoFromAAI.class);
25 private BBInputSetupUtils bbInputSetupUtils;
27 public void setBbInputSetupUtils(BBInputSetupUtils bbInputSetupUtils) {
28 this.bbInputSetupUtils = bbInputSetupUtils;
31 protected Optional<CloudRegion> getCloudInfoFromAAI(ServiceInstance serviceInstance) throws JsonProcessingException {
32 Optional<Relationships> relationshipsOp = Optional.empty();
33 if(!serviceInstance.getVnfs().isEmpty()) {
34 GenericVnf vnf = serviceInstance.getVnfs().get(0);
35 org.onap.aai.domain.yang.GenericVnf aaiVnf = bbInputSetupUtils.getAAIGenericVnf(vnf.getVnfId());
36 AAIResultWrapper vnfWrapper = new AAIResultWrapper(
37 new AAICommonObjectMapperProvider().getMapper().writeValueAsString(aaiVnf));
38 relationshipsOp = getRelationshipsFromWrapper(vnfWrapper);
39 } else if(!serviceInstance.getNetworks().isEmpty()) {
40 L3Network network = serviceInstance.getNetworks().get(0);
41 org.onap.aai.domain.yang.L3Network aaiL3Network = bbInputSetupUtils.getAAIL3Network(network.getNetworkId());
42 AAIResultWrapper networkWrapper = new AAIResultWrapper(
43 new AAICommonObjectMapperProvider().getMapper().writeValueAsString(aaiL3Network));
44 relationshipsOp = getRelationshipsFromWrapper(networkWrapper);
46 msoLogger.debug("BBInputSetup could not find a cloud region or tenant, since there are no resources under the SI.");
47 return Optional.empty();
49 if (relationshipsOp.isPresent()) {
50 return getRelatedCloudRegionAndTenant(relationshipsOp.get());
52 msoLogger.debug("BBInputSetup could not find a cloud region or tenant");
53 return Optional.empty();
57 protected Optional<Relationships> getRelationshipsFromWrapper(AAIResultWrapper wrapper) {
58 Optional<Relationships> relationshipsOp;
59 relationshipsOp = wrapper.getRelationships();
60 if(relationshipsOp.isPresent()) {
61 return relationshipsOp;
63 return Optional.empty();
66 protected Optional<CloudRegion> getRelatedCloudRegionAndTenant(Relationships relationships) {
67 CloudRegion cloudRegion = new CloudRegion();
68 List<AAIResultWrapper> cloudRegions = relationships.getByType(AAIObjectType.CLOUD_REGION);
69 List<AAIResultWrapper> tenants = relationships.getByType(AAIObjectType.TENANT);
70 if(!cloudRegions.isEmpty()) {
71 AAIResultWrapper cloudRegionWrapper = cloudRegions.get(0);
72 Optional<org.onap.aai.domain.yang.CloudRegion> aaiCloudRegionOp = cloudRegionWrapper
73 .asBean(org.onap.aai.domain.yang.CloudRegion.class);
74 if(aaiCloudRegionOp.isPresent()) {
75 org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = aaiCloudRegionOp.get();
76 cloudRegion.setCloudOwner(aaiCloudRegion.getCloudOwner());
77 cloudRegion.setCloudRegionVersion(aaiCloudRegion.getCloudRegionVersion());
78 cloudRegion.setLcpCloudRegionId(aaiCloudRegion.getCloudRegionId());
79 cloudRegion.setComplex(aaiCloudRegion.getComplexName());
82 if(!tenants.isEmpty()) {
83 AAIResultWrapper tenantWrapper = tenants.get(0);
84 Optional<org.onap.aai.domain.yang.Tenant> aaiTenantOp = tenantWrapper
85 .asBean(org.onap.aai.domain.yang.Tenant.class);
86 if(aaiTenantOp.isPresent()) {
87 org.onap.aai.domain.yang.Tenant aaiTenant = aaiTenantOp.get();
88 cloudRegion.setTenantId(aaiTenant.getTenantId());
91 return Optional.of(cloudRegion);