summaryrefslogtreecommitdiffstats
path: root/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/vfmodule/CreateVFModule.java
blob: 751e91d009da4ebfe2deb04a1984dacc1e49a3cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package org.onap.so.bpmn.infrastructure.vfmodule;

import java.util.Optional;
import org.onap.so.bpmn.common.BuildingBlockExecution;
import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
import org.onap.aaiclient.client.aai.AAIObjectPlurals;
import org.onap.aaiclient.client.aai.AAIObjectType;
import org.onap.aaiclient.client.aai.AAIResourcesClient;
import org.onap.aaiclient.client.aai.entities.AAIResultWrapper;
import org.onap.aaiclient.client.aai.entities.Relationships;
import org.onap.aaiclient.client.aai.entities.uri.AAIPluralResourceUri;
import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri;
import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory;
import org.onap.so.client.exception.ExceptionBuilder;
import org.onap.so.cloud.resource.beans.CloudInformation;
import org.onap.so.cloud.resource.beans.NodeType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Component
public class CreateVFModule {

    private static final Logger logger = LoggerFactory.getLogger(CreateVFModule.class);

    @Autowired
    protected ExceptionBuilder exceptionUtil;

    @Autowired
    protected ExtractPojosForBB extractPojosForBB;

    public void createInventoryVariable(BuildingBlockExecution execution) {
        try {
            GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
            VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
            GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
            CloudInformation cloudInformation = new CloudInformation();
            cloudInformation.setOwner(gBBInput.getCloudRegion().getCloudOwner());
            cloudInformation.setRegionId(gBBInput.getCloudRegion().getLcpCloudRegionId());
            cloudInformation.setTenantId(gBBInput.getTenant().getTenantId());
            cloudInformation.setTenantName(gBBInput.getTenant().getTenantName());
            cloudInformation.setTenantContext(gBBInput.getTenant().getTenantContext());
            cloudInformation.setTemplateInstanceId(execution.getVariable("heatStackId"));
            cloudInformation.setNodeType(getNodeType(gBBInput.getCloudRegion()));
            cloudInformation.setVnfName(vnf.getVnfName());
            cloudInformation.setVnfId(vnf.getVnfId());
            cloudInformation.setVfModuleId(vfModule.getVfModuleId());
            execution.setVariable("cloudInformation", cloudInformation);
        } catch (Exception e) {
            logger.error("Error building CloudInformation Object for NC Inventory", e);
            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, e);
        }
    }

    protected NodeType getNodeType(CloudRegion cloudRegion) {
        AAIResourceUri cloudRegionUri = AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION,
                cloudRegion.getCloudOwner(), cloudRegion.getLcpCloudRegionId());
        AAIResourcesClient client = getAAIClient();
        Optional<Relationships> relationships = client.get(cloudRegionUri).getRelationships();
        if (relationships.isPresent()) {
            AAIPluralResourceUri networkTechsGreenfieldUri = AAIUriFactory
                    .createResourceUri(AAIObjectType.CLOUD_REGION, cloudRegion.getCloudOwner(),
                            cloudRegion.getLcpCloudRegionId())
                    .relatedTo(AAIObjectPlurals.NETWORK_TECHNOLOGY)
                    .queryParam("network-technology-name", NodeType.GREENFIELD.getNetworkTechnologyName());

            AAIResultWrapper networkTechsGreenfield = client.get(networkTechsGreenfieldUri);
            if (networkTechsGreenfield != null && !networkTechsGreenfield.isEmpty()) {
                return NodeType.GREENFIELD;
            }
        }
        return NodeType.BROWNFIELD;
    }

    protected AAIResourcesClient getAAIClient() {
        return new AAIResourcesClient();
    }

}