[SO] Release so 1.13.0 image
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / bpmn / infrastructure / sdnc / tasks / SDNCAssignTasks.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (c) 2019 Samsung
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.so.bpmn.infrastructure.sdnc.tasks;
24
25 import org.onap.sdnc.northbound.client.model.GenericResourceApiNetworkOperationInformation;
26 import org.onap.sdnc.northbound.client.model.GenericResourceApiServiceOperationInformation;
27 import org.onap.sdnc.northbound.client.model.GenericResourceApiVfModuleOperationInformation;
28 import org.onap.sdnc.northbound.client.model.GenericResourceApiVnfOperationInformation;
29 import org.onap.so.bpmn.common.BuildingBlockExecution;
30 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
31 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
32 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
33 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
34 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
35 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
36 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
37 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
38 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
39 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
40 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
41 import org.onap.so.client.exception.BBObjectNotFoundException;
42 import org.onap.so.client.exception.ExceptionBuilder;
43 import org.onap.so.client.orchestration.SDNCNetworkResources;
44 import org.onap.so.client.orchestration.SDNCServiceInstanceResources;
45 import org.onap.so.client.orchestration.SDNCVfModuleResources;
46 import org.onap.so.client.orchestration.SDNCVnfResources;
47 import org.onap.so.client.sdnc.beans.SDNCRequest;
48 import org.onap.so.client.sdnc.endpoint.SDNCTopology;
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51 import org.springframework.beans.factory.annotation.Autowired;
52 import org.springframework.core.env.Environment;
53 import org.springframework.stereotype.Component;
54
55 /*
56  * This class is used for creating the service instance, assigning vnf, assigning the Vfmodule & assigning the L3Network
57  * on SDNC.
58  */
59 @Component
60 public class SDNCAssignTasks extends AbstractSDNCTask {
61     private static final Logger logger = LoggerFactory.getLogger(SDNCAssignTasks.class);
62     public static final String SDNC_REQUEST = "SDNCRequest";
63     @Autowired
64     private SDNCServiceInstanceResources sdncSIResources;
65     @Autowired
66     private SDNCVnfResources sdncVnfResources;
67     @Autowired
68     private SDNCVfModuleResources sdncVfModuleResources;
69     @Autowired
70     private ExceptionBuilder exceptionUtil;
71     @Autowired
72     private ExtractPojosForBB extractPojosForBB;
73     @Autowired
74     private SDNCNetworkResources sdncNetworkResources;
75     @Autowired
76     private Environment env;
77
78     /**
79      * BPMN access method to assigning the service instance in SDNC.
80      *
81      * It will assign the service instance by the service instance id.
82      *
83      * @param execution
84      */
85     public void assignServiceInstance(BuildingBlockExecution execution) {
86         try {
87             GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
88             RequestContext requestContext = gBBInput.getRequestContext();
89             ServiceInstance serviceInstance =
90                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
91             Customer customer = gBBInput.getCustomer();
92             GenericResourceApiServiceOperationInformation req =
93                     sdncSIResources.assignServiceInstance(serviceInstance, customer, requestContext);
94             SDNCRequest sdncRequest = new SDNCRequest();
95             sdncRequest.setSDNCPayload(req);
96             sdncRequest.setTopology(SDNCTopology.SERVICE);
97             execution.setVariable(SDNC_REQUEST, sdncRequest);
98         } catch (Exception ex) {
99             logger.error("Exception occurred", ex);
100             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
101         }
102     }
103
104     /**
105      * BPMN access method to assigning the vnf in SDNC.
106      *
107      * It will assign the vnf according to the service instance id and vnf id.
108      *
109      * @param execution
110      */
111     public void assignVnf(BuildingBlockExecution execution) {
112         try {
113             GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
114             RequestContext requestContext = gBBInput.getRequestContext();
115             ServiceInstance serviceInstance =
116                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
117             GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
118             Customer customer = gBBInput.getCustomer();
119             CloudRegion cloudRegion = gBBInput.getCloudRegion();
120             SDNCRequest sdncRequest = new SDNCRequest();
121             GenericResourceApiVnfOperationInformation req =
122                     sdncVnfResources.assignVnf(vnf, serviceInstance, customer, cloudRegion, requestContext,
123                             Boolean.TRUE.equals(vnf.isCallHoming()), buildCallbackURI(sdncRequest));
124             sdncRequest.setSDNCPayload(req);
125             sdncRequest.setTopology(SDNCTopology.VNF);
126             execution.setVariable(SDNC_REQUEST, sdncRequest);
127         } catch (Exception ex) {
128             logger.error("Exception occurred", ex);
129             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
130         }
131     }
132
133
134     /**
135      * BPMN access method to assigning the vfModule in SDNC.
136      *
137      * It will assign the VfModule by the service instance id ,Vnf id and module id.
138      *
139      * @param execution
140      */
141     public void assignVfModule(BuildingBlockExecution execution) {
142         try {
143             GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
144             RequestContext requestContext = gBBInput.getRequestContext();
145             ServiceInstance serviceInstance =
146                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
147             GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
148             VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
149             VolumeGroup volumeGroup = null;
150             try {
151                 volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID);
152             } catch (BBObjectNotFoundException e) {
153                 logger.info("No volume group was found.");
154             }
155             Customer customer = gBBInput.getCustomer();
156             CloudRegion cloudRegion = gBBInput.getCloudRegion();
157             SDNCRequest sdncRequest = new SDNCRequest();
158             GenericResourceApiVfModuleOperationInformation req =
159                     sdncVfModuleResources.assignVfModule(vfModule, volumeGroup, vnf, serviceInstance, customer,
160                             cloudRegion, requestContext, buildCallbackURI(sdncRequest));
161             sdncRequest.setSDNCPayload(req);
162             sdncRequest.setTopology(SDNCTopology.VFMODULE);
163             execution.setVariable(SDNC_REQUEST, sdncRequest);
164         } catch (Exception ex) {
165             logger.error("Exception occurred", ex);
166             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
167         }
168     }
169
170     /**
171      * BPMN access method to perform Assign action on SDNC for L3Network
172      * 
173      * @param execution
174      * @throws Exception
175      */
176     public void assignNetwork(BuildingBlockExecution execution) {
177         try {
178             GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
179             L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
180             ServiceInstance serviceInstance =
181                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
182             Customer customer = gBBInput.getCustomer();
183             RequestContext requestContext = gBBInput.getRequestContext();
184             CloudRegion cloudRegion = gBBInput.getCloudRegion();
185             GenericResourceApiNetworkOperationInformation req = sdncNetworkResources.assignNetwork(l3network,
186                     serviceInstance, customer, requestContext, cloudRegion);
187             SDNCRequest sdncRequest = new SDNCRequest();
188             sdncRequest.setSDNCPayload(req);
189             sdncRequest.setTopology(SDNCTopology.NETWORK);
190             execution.setVariable(SDNC_REQUEST, sdncRequest);
191         } catch (Exception ex) {
192             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
193         }
194     }
195 }