creating relationships vnf and tenant
[so.git] / bpmn / MSOCommonBPMN / src / main / java / org / onap / so / bpmn / servicedecomposition / tasks / CloudInfoFromAAI.java
1 package org.onap.so.bpmn.servicedecomposition.tasks;
2
3 import java.util.List;
4 import java.util.Optional;
5
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;
17
18 import com.fasterxml.jackson.core.JsonProcessingException;
19
20 @Component
21 public class CloudInfoFromAAI {
22
23         private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, CloudInfoFromAAI.class);
24         @Autowired
25         private BBInputSetupUtils bbInputSetupUtils;
26         
27         public void setBbInputSetupUtils(BBInputSetupUtils bbInputSetupUtils) {
28                 this.bbInputSetupUtils = bbInputSetupUtils;
29         }
30         
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);
45                 } else {
46                         msoLogger.debug("BBInputSetup could not find a cloud region or tenant, since there are no resources under the SI.");
47                         return Optional.empty();
48                 }
49                 if (relationshipsOp.isPresent()) {
50                         return getRelatedCloudRegionAndTenant(relationshipsOp.get());
51                 } else {
52                         msoLogger.debug("BBInputSetup could not find a cloud region or tenant");
53                         return Optional.empty();
54                 }
55         }
56
57         protected Optional<Relationships> getRelationshipsFromWrapper(AAIResultWrapper wrapper) {
58                 Optional<Relationships> relationshipsOp;
59                 relationshipsOp = wrapper.getRelationships();
60                 if(relationshipsOp.isPresent()) {
61                         return relationshipsOp;
62                 }
63                 return Optional.empty();
64         }
65
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());
80                         }
81                 }
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());
89                         }
90                 }
91                 return Optional.of(cloudRegion);
92         }
93 }