2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.apihandlerinfra.infra.rest;
23 import java.util.HashMap;
24 import java.util.List;
26 import java.util.Optional;
27 import org.onap.aai.domain.yang.GenericVnf;
28 import org.onap.aai.domain.yang.L3Network;
29 import org.onap.aai.domain.yang.ServiceInstance;
30 import org.onap.aai.domain.yang.VfModule;
31 import org.onap.aai.domain.yang.VolumeGroup;
32 import org.onap.logging.ref.slf4j.ONAPLogConstants;
33 import org.onap.so.apihandlerinfra.infra.rest.exception.AAIEntityNotFound;
34 import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
35 import org.onap.so.client.aai.AAIObjectType;
36 import org.onap.so.client.aai.entities.AAIResultWrapper;
37 import org.onap.so.constants.Status;
38 import org.onap.so.db.request.beans.InfraActiveRequests;
39 import org.onap.so.db.request.client.RequestsDbClient;
40 import org.onap.so.serviceinstancebeans.CloudConfiguration;
41 import org.onap.so.serviceinstancebeans.ModelInfo;
42 import org.onap.so.serviceinstancebeans.ModelType;
43 import org.onap.so.serviceinstancebeans.RequestDetails;
44 import org.onap.so.serviceinstancebeans.RequestInfo;
45 import org.onap.so.serviceinstancebeans.RequestParameters;
46 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
50 import org.springframework.beans.factory.annotation.Autowired;
51 import org.springframework.stereotype.Component;
52 import com.fasterxml.jackson.databind.ObjectMapper;
55 public class BpmnRequestBuilder {
57 private static final String CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND = "Cloud Configuration could not be found";
59 private static final String CLOUD_REGION_ID = "cloud-region-id";
61 private static final String CLOUD_OWNER = "cloud-owner";
63 private static final String TENANT_ID = "tenant-id";
65 private static final String GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID =
66 "Generic Vnf Not Found In Inventory, VnfId: ";
68 private static final String VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID = "VF Module Not Found In Inventory, VnfId: ";
70 private static final Logger logger = LoggerFactory.getLogger(BpmnRequestBuilder.class);
73 private RequestsDbClient infraActiveRequestsClient;
76 private AAIDataRetrieval aaiDataRet;
78 private ObjectMapper mapper = new ObjectMapper();
81 public ServiceInstancesRequest buildVFModuleDeleteRequest(String vnfId, String vfModuleId, ModelType modelType)
82 throws AAIEntityNotFound {
83 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
85 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
87 VfModule vfModule = aaiDataRet.getAAIVfModule(vnfId, vfModuleId);
88 if (vfModule == null) {
89 throw new AAIEntityNotFound(VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " vfModuleId: " + vfModuleId);
91 return createServiceInstancesRequest(vnf, vfModule, modelType);
94 public ServiceInstancesRequest buildVolumeGroupDeleteRequest(String vnfId, String volumeGroupId)
95 throws AAIEntityNotFound {
96 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
98 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
100 VolumeGroup volumeGroup = aaiDataRet.getVolumeGroup(vnfId, volumeGroupId);
101 if (volumeGroup == null) {
102 throw new AAIEntityNotFound(
103 VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " volumeGroupId: " + volumeGroupId);
105 return createServiceInstancesRequest(vnf, volumeGroup);
108 public ServiceInstancesRequest buildServiceDeleteRequest(String serviceInstanceId) throws AAIEntityNotFound {
109 ServiceInstance serviceInstance = aaiDataRet.getServiceInstance(serviceInstanceId);
110 if (serviceInstance == null) {
111 throw new AAIEntityNotFound(
112 "ServiceInstance Not Found In Inventory, ServiceInstanceId: " + serviceInstanceId);
114 return createServiceInstancesRequest(serviceInstance);
117 public ServiceInstancesRequest buildVnfDeleteRequest(String vnfId) throws AAIEntityNotFound {
118 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
120 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
122 return createServiceInstancesRequest(vnf);
125 public ServiceInstancesRequest buildNetworkDeleteRequest(String networkId) throws AAIEntityNotFound {
126 L3Network network = aaiDataRet.getNetwork(networkId);
127 if (network == null) {
128 throw new AAIEntityNotFound("Network Not Found In Inventory, NetworkId: " + networkId);
130 return createServiceInstancesRequest(network);
133 protected ServiceInstancesRequest createServiceInstancesRequest(ServiceInstance serviceInstance) {
134 ServiceInstancesRequest request = new ServiceInstancesRequest();
135 RequestDetails requestDetails = mapServiceRequestDetails(serviceInstance);
136 request.setRequestDetails(requestDetails);
140 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf) {
141 ServiceInstancesRequest request = new ServiceInstancesRequest();
142 RequestDetails requestDetails = mapVnfRequestDetails(vnf);
143 request.setRequestDetails(requestDetails);
147 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf, VfModule vfModule,
148 ModelType modelType) {
149 ServiceInstancesRequest request = new ServiceInstancesRequest();
150 RequestDetails requestDetails = mapRequestDetails(vnf, vfModule, modelType);
151 request.setRequestDetails(requestDetails);
155 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf, VolumeGroup volumeGroup) {
156 ServiceInstancesRequest request = new ServiceInstancesRequest();
157 RequestDetails requestDetails = mapRequestDetails(vnf, volumeGroup);
158 request.setRequestDetails(requestDetails);
162 protected ServiceInstancesRequest createServiceInstancesRequest(L3Network network) {
163 ServiceInstancesRequest request = new ServiceInstancesRequest();
164 RequestDetails requestDetails = mapNetworkRequestDetails(network);
165 request.setRequestDetails(requestDetails);
169 protected RequestDetails mapRequestDetails(GenericVnf vnf, VfModule vfModule, ModelType modelType) {
170 RequestDetails requestDetails = new RequestDetails();
171 requestDetails.setRequestInfo(createRequestInfo());
172 if (vfModule.getVfModuleName() != null) {
173 requestDetails.getRequestInfo().setInstanceName(vfModule.getVfModuleName());
175 requestDetails.setModelInfo(mapVfModuleModelInformation(vfModule, modelType));
177 requestDetails.setCloudConfiguration(mapCloudConfiguration(vnf, vfModule));
178 requestDetails.setRequestParameters(createRequestParameters());
179 return requestDetails;
182 protected RequestDetails mapRequestDetails(GenericVnf vnf, VolumeGroup volumeGroup) {
183 RequestDetails requestDetails = new RequestDetails();
184 requestDetails.setRequestInfo(createRequestInfo());
185 if (volumeGroup.getVolumeGroupName() != null) {
186 requestDetails.getRequestInfo().setInstanceName(volumeGroup.getVolumeGroupName());
188 requestDetails.setModelInfo(mapVolumeGroupModelInformation(volumeGroup));
189 requestDetails.setCloudConfiguration(mapCloudConfigurationVolume(vnf, volumeGroup));
190 requestDetails.setRequestParameters(createRequestParameters());
191 return requestDetails;
194 protected RequestDetails mapVnfRequestDetails(GenericVnf vnf) {
195 RequestDetails requestDetails = new RequestDetails();
196 requestDetails.setRequestInfo(createRequestInfo());
197 if (vnf.getVnfName() != null) {
198 requestDetails.getRequestInfo().setInstanceName(vnf.getVnfName());
200 requestDetails.setModelInfo(mapVnfModelInformation(vnf));
201 requestDetails.setRequestParameters(createRequestParameters());
202 return requestDetails;
205 protected RequestDetails mapServiceRequestDetails(ServiceInstance serviceInstance) {
206 RequestDetails requestDetails = new RequestDetails();
207 requestDetails.setRequestInfo(createRequestInfo());
208 if (serviceInstance.getServiceInstanceName() != null) {
209 requestDetails.getRequestInfo().setInstanceName(serviceInstance.getServiceInstanceName());
211 requestDetails.setModelInfo(mapServiceModelInformation(serviceInstance));
212 requestDetails.setRequestParameters(createRequestParameters());
213 return requestDetails;
216 protected RequestDetails mapNetworkRequestDetails(L3Network network) {
217 RequestDetails requestDetails = new RequestDetails();
218 requestDetails.setRequestInfo(createRequestInfo());
219 if (network.getNetworkName() != null) {
220 requestDetails.getRequestInfo().setInstanceName(network.getNetworkName());
222 requestDetails.setCloudConfiguration(mapCloudConfigurationNetwork(network));
223 requestDetails.setModelInfo(mapNetworkModelInformation(network));
224 requestDetails.setRequestParameters(createRequestParameters());
225 return requestDetails;
228 protected ModelInfo mapVfModuleModelInformation(VfModule vfModule, ModelType modelType) {
229 ModelInfo modelInfo = new ModelInfo();
230 modelInfo.setModelCustomizationId(vfModule.getModelCustomizationId());
231 modelInfo.setModelCustomizationUuid(vfModule.getModelCustomizationId());
232 modelInfo.setModelType(modelType);
236 protected ModelInfo mapVolumeGroupModelInformation(VolumeGroup volumeGroup) {
237 ModelInfo modelInfo = new ModelInfo();
238 modelInfo.setModelCustomizationId(volumeGroup.getModelCustomizationId());
239 modelInfo.setModelCustomizationUuid(volumeGroup.getModelCustomizationId());
240 modelInfo.setModelType(ModelType.volumeGroup);
244 protected ModelInfo mapServiceModelInformation(ServiceInstance serviceInstance) {
245 ModelInfo modelInfo = new ModelInfo();
246 modelInfo.setModelVersionId(serviceInstance.getModelVersionId());
247 modelInfo.setModelType(ModelType.service);
251 protected ModelInfo mapVnfModelInformation(GenericVnf vnf) {
252 ModelInfo modelInfo = new ModelInfo();
253 modelInfo.setModelCustomizationId(vnf.getModelCustomizationId());
254 modelInfo.setModelCustomizationUuid(vnf.getModelCustomizationId());
255 modelInfo.setModelType(ModelType.vnf);
259 protected ModelInfo mapNetworkModelInformation(L3Network network) {
260 ModelInfo modelInfo = new ModelInfo();
261 modelInfo.setModelType(ModelType.network);
262 modelInfo.setModelCustomizationId(network.getModelCustomizationId());
263 modelInfo.setModelCustomizationUuid(network.getModelCustomizationId());
267 public CloudConfiguration mapCloudConfiguration(GenericVnf vnf, VfModule vfModule) {
268 CloudConfiguration cloudConfig = new CloudConfiguration();
269 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
270 Optional<org.onap.so.client.aai.entities.Relationships> relationshipsOpt = wrapper.getRelationships();
271 String tenantId = null;
272 String cloudOwner = null;
273 String lcpRegionId = null;
274 if (relationshipsOpt.isPresent()) {
275 tenantId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
276 .map(item -> item.getURIKeys().get(TENANT_ID)).orElse(null);
277 cloudOwner = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
278 .map(item -> item.getURIKeys().get(CLOUD_OWNER)).orElse(null);
279 lcpRegionId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
280 .map(item -> item.getURIKeys().get(CLOUD_REGION_ID)).orElse(null);
283 if (tenantId == null || cloudOwner == null || lcpRegionId == null) {
284 Map<String, String[]> filters = createQueryRequest("vfModuleId", vfModule.getVfModuleId());
285 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
286 if (request.isPresent()) {
287 if (request.get().getRequestDetails() != null
288 && request.get().getRequestDetails().getCloudConfiguration() != null) {
289 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
290 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
292 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
293 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
295 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
296 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
300 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
303 cloudConfig.setTenantId(tenantId);
304 cloudConfig.setCloudOwner(cloudOwner);
305 cloudConfig.setLcpCloudRegionId(lcpRegionId);
309 public CloudConfiguration mapCloudConfigurationVolume(GenericVnf vnf, VolumeGroup volumeGroup) {
310 CloudConfiguration cloudConfig = new CloudConfiguration();
311 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
312 Optional<org.onap.so.client.aai.entities.Relationships> relationshipsOpt = wrapper.getRelationships();
313 String tenantId = null;
314 String cloudOwner = null;
315 String lcpRegionId = null;
316 if (relationshipsOpt.isPresent()) {
317 tenantId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
318 .map(item -> item.getURIKeys().get(TENANT_ID)).orElse(null);
319 cloudOwner = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
320 .map(item -> item.getURIKeys().get(CLOUD_OWNER)).orElse(null);
321 lcpRegionId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
322 .map(item -> item.getURIKeys().get(CLOUD_REGION_ID)).orElse(null);
325 if (tenantId == null || cloudOwner == null || lcpRegionId == null) {
326 Map<String, String[]> filters = createQueryRequest("volumeGroupId", volumeGroup.getVolumeGroupId());
327 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
328 if (request.isPresent()) {
329 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
330 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
331 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
333 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
336 cloudConfig.setTenantId(tenantId);
337 cloudConfig.setCloudOwner(cloudOwner);
338 cloudConfig.setLcpCloudRegionId(lcpRegionId);
342 public CloudConfiguration mapCloudConfigurationNetwork(L3Network network) {
343 CloudConfiguration cloudConfig = new CloudConfiguration();
344 String tenantId = null;
345 String cloudOwner = null;
346 String lcpRegionId = null;
348 Map<String, String[]> filters = createQueryRequest("networkId", network.getNetworkId());
349 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
350 if (request.isPresent()) {
351 if (request.get().getRequestDetails() != null
352 && request.get().getRequestDetails().getCloudConfiguration() != null) {
353 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
354 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
356 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
357 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
359 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
360 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
364 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
367 cloudConfig.setTenantId(tenantId);
368 cloudConfig.setCloudOwner(cloudOwner);
369 cloudConfig.setLcpCloudRegionId(lcpRegionId);
373 public Optional<ServiceInstancesRequest> findServiceInstanceRequest(Map<String, String[]> filters) {
374 List<InfraActiveRequests> completeRequests = infraActiveRequestsClient.getRequest(filters);
375 InfraActiveRequests foundRequest = completeRequests.get(0);
376 ServiceInstancesRequest siRequest;
378 siRequest = mapper.readValue(foundRequest.getRequestBody(), ServiceInstancesRequest.class);
379 return Optional.of(siRequest);
380 } catch (Exception e) {
381 logger.error("Could not read Create Instance Request", e);
383 return Optional.empty();
386 public Map<String, String[]> createQueryRequest(String name, String instanceId) {
387 Map<String, String[]> filters = new HashMap<>();
388 filters.put(name, new String[] {"EQ", instanceId});
389 filters.put("requestStatus", new String[] {"EQ", Status.COMPLETE.toString()});
390 filters.put("action", new String[] {"EQ", "createInstance"});
394 public RequestInfo createRequestInfo() {
395 RequestInfo requestInfo = new RequestInfo();
396 requestInfo.setSuppressRollback(false);
397 requestInfo.setSource(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
398 requestInfo.setRequestorId(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
402 public RequestParameters createRequestParameters() {
403 RequestParameters requestParams = new RequestParameters();
404 requestParams.setaLaCarte(true);
405 requestParams.setTestApi("GR_API");
406 return requestParams;