aboutsummaryrefslogtreecommitdiffstats
path: root/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/cnfm/tasks/CnfInstantiateTask.java
blob: 3caa2e6e4ea0845c6910d46ba3075cb9ee9e73ff (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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/*-
 * ============LICENSE_START=======================================================
 *  Copyright (C) 2022 Ericsson. All rights reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * SPDX-License-Identifier: Apache-2.0
 * ============LICENSE_END=========================================================
 */
package org.onap.so.bpmn.infrastructure.adapter.cnfm.tasks;

import static java.util.Objects.isNull;
import static org.onap.so.cnfm.lcm.model.utils.AdditionalParamsConstants.CLOUD_OWNER_PARAM_KEY;
import static org.onap.so.cnfm.lcm.model.utils.AdditionalParamsConstants.CLOUD_REGION_PARAM_KEY;
import static org.onap.so.cnfm.lcm.model.utils.AdditionalParamsConstants.SERVICE_INSTANCE_ID_PARAM_KEY;
import static org.onap.so.cnfm.lcm.model.utils.AdditionalParamsConstants.SERVICE_INSTANCE_NAME_PARAM_KEY;
import static org.onap.so.cnfm.lcm.model.utils.AdditionalParamsConstants.TENANT_ID_PARAM_KEY;
import java.util.Optional;
import org.apache.groovy.util.Maps;
import org.onap.logging.filter.base.ONAPComponents;
import org.onap.so.bpmn.common.BuildingBlockExecution;
import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
import org.onap.so.client.exception.ExceptionBuilder;
import org.onap.so.cnfm.lcm.model.AsInstance;
import org.onap.so.cnfm.lcm.model.CreateAsRequest;
import org.onap.so.cnfm.lcm.model.InstantiateAsRequest;
import org.onap.so.serviceinstancebeans.CloudConfiguration;
import org.onap.so.serviceinstancebeans.ModelInfo;
import org.onap.so.serviceinstancebeans.RequestDetails;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


/**
 * This class performs CNF Instantiation
 *
 * @author sagar.shetty@est.tech
 * @author Waqas Ikram (waqas.ikram@est.tech)
 */
@Component
public class CnfInstantiateTask {
    private static final String CREATE_AS_REQUEST_OBJECT = "CreateAsRequestObject";
    private static final String INSTANTIATE_AS_REQUEST_OBJECT = "InstantiateAsRequest";
    private static final String AS_INSTANCE_ID = "asInstanceid";
    private static final Logger LOGGER = LoggerFactory.getLogger(CnfInstantiateTask.class);
    private final ExceptionBuilder exceptionUtil;
    private final CnfmHttpServiceProvider cnfmHttpServiceProvider;

    @Autowired
    public CnfInstantiateTask(final CnfmHttpServiceProvider cnfmHttpServiceProvider,
            final ExceptionBuilder exceptionUtil) {
        this.cnfmHttpServiceProvider = cnfmHttpServiceProvider;
        this.exceptionUtil = exceptionUtil;
    }

    public void createCreateAsRequest(final BuildingBlockExecution execution) {
        try {
            LOGGER.debug("Executing createAsRequest task  ...");
            final ExecuteBuildingBlock executeBuildingBlock =
                    (ExecuteBuildingBlock) execution.getVariable("buildingBlock");

            final GeneralBuildingBlock generalBuildingBlock = execution.getGeneralBuildingBlock();

            final RequestDetails requestDetails = executeBuildingBlock.getRequestDetails();
            LOGGER.debug("RequestDetails: {}", requestDetails);

            if (isNull(requestDetails) && isNull(requestDetails.getModelInfo())
                    && isNull(requestDetails.getRequestInfo()) && isNull(requestDetails.getCloudConfiguration())
                    && isNull(generalBuildingBlock)) {
                LOGGER.error("Missing Mandatory attribute from RequestDetails: {} or GeneralBuildingBlock: {}",
                        requestDetails, generalBuildingBlock);
                exceptionUtil.buildAndThrowWorkflowException(execution, 2000,
                        "Missing Mandatory attribute from RequestDetails or GeneralBuildingBlock", ONAPComponents.SO);
            }

            final ModelInfo modelInfo = requestDetails.getModelInfo();
            final CloudConfiguration cloudConfiguration = requestDetails.getCloudConfiguration();
            final ServiceInstance serviceInstance = generalBuildingBlock.getServiceInstance();

            final CreateAsRequest createAsRequest = new CreateAsRequest().asdId(modelInfo.getModelVersionId())
                    .asInstanceName(requestDetails.getRequestInfo().getInstanceName())
                    .additionalParams(Maps.of(CLOUD_OWNER_PARAM_KEY, cloudConfiguration.getCloudOwner(),
                            CLOUD_REGION_PARAM_KEY, cloudConfiguration.getLcpCloudRegionId(), TENANT_ID_PARAM_KEY,
                            cloudConfiguration.getTenantId(), SERVICE_INSTANCE_ID_PARAM_KEY,
                            serviceInstance.getServiceInstanceId(), SERVICE_INSTANCE_NAME_PARAM_KEY,
                            serviceInstance.getServiceInstanceName()));

            LOGGER.debug("Adding CreateAsRequest to execution {}", createAsRequest);

            execution.setVariable(CREATE_AS_REQUEST_OBJECT, createAsRequest);
            LOGGER.debug("Finished executing createAsRequest task ...");

        } catch (final Exception exception) {
            LOGGER.error("Unable to create CreateAsRequest", exception);
            exceptionUtil.buildAndThrowWorkflowException(execution, 2001, exception);
        }
    }

    public void invokeCnfmWithCreateAsRequest(final BuildingBlockExecution execution) {
        try {
            final CreateAsRequest createAsRequest = execution.getVariable(CREATE_AS_REQUEST_OBJECT);

            final Optional<AsInstance> optional = cnfmHttpServiceProvider.invokeCreateAsRequest(createAsRequest);

            if (optional.isEmpty()) {
                LOGGER.error("Unable to invoke CNFM for CreateAsRequest : {}", createAsRequest);
                exceptionUtil.buildAndThrowWorkflowException(execution, 2003,
                        "Unable to invoke CNFM for CreateAsRequest", ONAPComponents.SO);
            }

            final AsInstance asInstance = optional.get();
            execution.setVariable(AS_INSTANCE_ID, asInstance.getAsInstanceid());
            LOGGER.debug("Successfully invoked CNFM response: {}", asInstance);

        } catch (final Exception exception) {
            LOGGER.error("Unable to invoke CNFM AsCreateRequest", exception);
            exceptionUtil.buildAndThrowWorkflowException(execution, 2004, exception);
        }
    }

    public void createAsInstanceRequest(final BuildingBlockExecution execution) {
        try {
            LOGGER.debug("Executing createAsInstanceRequest task  ...");

            final InstantiateAsRequest instantiateAsRequest = new InstantiateAsRequest();

            LOGGER.debug("Adding InstantiateAsRequest to execution {}", instantiateAsRequest);

            execution.setVariable(INSTANTIATE_AS_REQUEST_OBJECT, instantiateAsRequest);
            LOGGER.debug("Finished executing createAsInstanceRequest task ...");

        } catch (final Exception exception) {
            LOGGER.error("Unable to create CreateAsInstanceRequest", exception);
            exceptionUtil.buildAndThrowWorkflowException(execution, 2001, exception);
        }
    }

    public void invokeCnfmWithInstantiateAsRequest(final BuildingBlockExecution execution) {
        try {
            final InstantiateAsRequest instantiateAsRequest = execution.getVariable(INSTANTIATE_AS_REQUEST_OBJECT);
            final String asInstanceId = execution.getVariable(AS_INSTANCE_ID);
            cnfmHttpServiceProvider.invokeInstantiateAsRequest(instantiateAsRequest, asInstanceId);
            LOGGER.debug("Successfully invoked CNFM instantiate AS request: {}", asInstanceId);

        } catch (final Exception exception) {
            LOGGER.error("Unable to invoke CNFM InstantiateAsRequest", exception);
            exceptionUtil.buildAndThrowWorkflowException(execution, 2004, exception);
        }
    }

}