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.aaiclient.client.aai.AAIObjectType;
36 import org.onap.aaiclient.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 CloudConfiguration getCloudConfigurationVfModuleReplace(String vnfId, String vfModuleId)
95 throws AAIEntityNotFound {
96 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
98 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
101 return mapCloudConfiguration(vnf, vfModuleId);
104 public ServiceInstancesRequest buildVolumeGroupDeleteRequest(String vnfId, String volumeGroupId)
105 throws AAIEntityNotFound {
106 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
108 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
110 VolumeGroup volumeGroup = aaiDataRet.getVolumeGroup(vnfId, volumeGroupId);
111 if (volumeGroup == null) {
112 throw new AAIEntityNotFound(
113 VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " volumeGroupId: " + volumeGroupId);
115 return createServiceInstancesRequest(vnf, volumeGroup);
118 public ServiceInstancesRequest buildServiceDeleteRequest(String serviceInstanceId) throws AAIEntityNotFound {
119 ServiceInstance serviceInstance = aaiDataRet.getServiceInstance(serviceInstanceId);
120 if (serviceInstance == null) {
121 throw new AAIEntityNotFound(
122 "ServiceInstance Not Found In Inventory, ServiceInstanceId: " + serviceInstanceId);
124 return createServiceInstancesRequest(serviceInstance);
127 public ServiceInstancesRequest buildVnfDeleteRequest(String vnfId) throws AAIEntityNotFound {
128 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
130 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
132 return createServiceInstancesRequest(vnf);
135 public ServiceInstancesRequest buildNetworkDeleteRequest(String networkId) throws AAIEntityNotFound {
136 L3Network network = aaiDataRet.getNetwork(networkId);
137 if (network == null) {
138 throw new AAIEntityNotFound("Network Not Found In Inventory, NetworkId: " + networkId);
140 return createServiceInstancesRequest(network);
143 protected ServiceInstancesRequest createServiceInstancesRequest(ServiceInstance serviceInstance) {
144 ServiceInstancesRequest request = new ServiceInstancesRequest();
145 RequestDetails requestDetails = mapServiceRequestDetails(serviceInstance);
146 request.setRequestDetails(requestDetails);
150 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf) {
151 ServiceInstancesRequest request = new ServiceInstancesRequest();
152 RequestDetails requestDetails = mapVnfRequestDetails(vnf);
153 request.setRequestDetails(requestDetails);
157 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf, VfModule vfModule,
158 ModelType modelType) {
159 ServiceInstancesRequest request = new ServiceInstancesRequest();
160 RequestDetails requestDetails = mapRequestDetails(vnf, vfModule, modelType);
161 request.setRequestDetails(requestDetails);
165 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf, VolumeGroup volumeGroup) {
166 ServiceInstancesRequest request = new ServiceInstancesRequest();
167 RequestDetails requestDetails = mapRequestDetails(vnf, volumeGroup);
168 request.setRequestDetails(requestDetails);
172 protected ServiceInstancesRequest createServiceInstancesRequest(L3Network network) {
173 ServiceInstancesRequest request = new ServiceInstancesRequest();
174 RequestDetails requestDetails = mapNetworkRequestDetails(network);
175 request.setRequestDetails(requestDetails);
179 protected RequestDetails mapRequestDetails(GenericVnf vnf, VfModule vfModule, ModelType modelType) {
180 RequestDetails requestDetails = new RequestDetails();
181 requestDetails.setRequestInfo(createRequestInfo());
182 if (vfModule.getVfModuleName() != null) {
183 requestDetails.getRequestInfo().setInstanceName(vfModule.getVfModuleName());
185 requestDetails.setModelInfo(mapVfModuleModelInformation(vfModule, modelType));
187 requestDetails.setCloudConfiguration(mapCloudConfiguration(vnf, vfModule.getVfModuleId()));
188 requestDetails.setRequestParameters(createRequestParameters());
189 return requestDetails;
192 protected RequestDetails mapRequestDetails(GenericVnf vnf, VolumeGroup volumeGroup) {
193 RequestDetails requestDetails = new RequestDetails();
194 requestDetails.setRequestInfo(createRequestInfo());
195 if (volumeGroup.getVolumeGroupName() != null) {
196 requestDetails.getRequestInfo().setInstanceName(volumeGroup.getVolumeGroupName());
198 requestDetails.setModelInfo(mapVolumeGroupModelInformation(volumeGroup));
199 requestDetails.setCloudConfiguration(mapCloudConfigurationVolume(vnf, volumeGroup));
200 requestDetails.setRequestParameters(createRequestParameters());
201 return requestDetails;
204 protected RequestDetails mapVnfRequestDetails(GenericVnf vnf) {
205 RequestDetails requestDetails = new RequestDetails();
206 requestDetails.setRequestInfo(createRequestInfo());
207 if (vnf.getVnfName() != null) {
208 requestDetails.getRequestInfo().setInstanceName(vnf.getVnfName());
210 requestDetails.setModelInfo(mapVnfModelInformation(vnf));
211 requestDetails.setRequestParameters(createRequestParameters());
212 return requestDetails;
215 protected RequestDetails mapServiceRequestDetails(ServiceInstance serviceInstance) {
216 RequestDetails requestDetails = new RequestDetails();
217 requestDetails.setRequestInfo(createRequestInfo());
218 if (serviceInstance.getServiceInstanceName() != null) {
219 requestDetails.getRequestInfo().setInstanceName(serviceInstance.getServiceInstanceName());
221 requestDetails.setModelInfo(mapServiceModelInformation(serviceInstance));
222 requestDetails.setRequestParameters(createRequestParameters());
223 return requestDetails;
226 protected RequestDetails mapNetworkRequestDetails(L3Network network) {
227 RequestDetails requestDetails = new RequestDetails();
228 requestDetails.setRequestInfo(createRequestInfo());
229 if (network.getNetworkName() != null) {
230 requestDetails.getRequestInfo().setInstanceName(network.getNetworkName());
232 requestDetails.setCloudConfiguration(mapCloudConfigurationNetwork(network));
233 requestDetails.setModelInfo(mapNetworkModelInformation(network));
234 requestDetails.setRequestParameters(createRequestParameters());
235 return requestDetails;
238 protected ModelInfo mapVfModuleModelInformation(VfModule vfModule, ModelType modelType) {
239 ModelInfo modelInfo = new ModelInfo();
240 modelInfo.setModelCustomizationId(vfModule.getModelCustomizationId());
241 modelInfo.setModelCustomizationUuid(vfModule.getModelCustomizationId());
242 modelInfo.setModelType(modelType);
246 protected ModelInfo mapVolumeGroupModelInformation(VolumeGroup volumeGroup) {
247 ModelInfo modelInfo = new ModelInfo();
248 modelInfo.setModelCustomizationId(volumeGroup.getModelCustomizationId());
249 modelInfo.setModelCustomizationUuid(volumeGroup.getModelCustomizationId());
250 modelInfo.setModelType(ModelType.volumeGroup);
254 protected ModelInfo mapServiceModelInformation(ServiceInstance serviceInstance) {
255 ModelInfo modelInfo = new ModelInfo();
256 modelInfo.setModelVersionId(serviceInstance.getModelVersionId());
257 modelInfo.setModelType(ModelType.service);
261 protected ModelInfo mapVnfModelInformation(GenericVnf vnf) {
262 ModelInfo modelInfo = new ModelInfo();
263 modelInfo.setModelCustomizationId(vnf.getModelCustomizationId());
264 modelInfo.setModelCustomizationUuid(vnf.getModelCustomizationId());
265 modelInfo.setModelType(ModelType.vnf);
269 protected ModelInfo mapNetworkModelInformation(L3Network network) {
270 ModelInfo modelInfo = new ModelInfo();
271 modelInfo.setModelType(ModelType.network);
272 modelInfo.setModelCustomizationId(network.getModelCustomizationId());
273 modelInfo.setModelCustomizationUuid(network.getModelCustomizationId());
277 public CloudConfiguration mapCloudConfiguration(GenericVnf vnf, String vfModuleId) {
278 CloudConfiguration cloudConfig = new CloudConfiguration();
279 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
280 Optional<org.onap.aaiclient.client.aai.entities.Relationships> relationshipsOpt = wrapper.getRelationships();
281 String tenantId = null;
282 String cloudOwner = null;
283 String lcpRegionId = null;
284 if (relationshipsOpt.isPresent()) {
285 tenantId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
286 .map(item -> item.getURIKeys().get(TENANT_ID)).orElse(null);
287 cloudOwner = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
288 .map(item -> item.getURIKeys().get(CLOUD_OWNER)).orElse(null);
289 lcpRegionId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
290 .map(item -> item.getURIKeys().get(CLOUD_REGION_ID)).orElse(null);
293 if (tenantId == null || cloudOwner == null || lcpRegionId == null) {
294 Map<String, String[]> filters = createQueryRequest("vfModuleId", vfModuleId);
295 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
296 if (request.isPresent()) {
297 if (request.get().getRequestDetails() != null
298 && request.get().getRequestDetails().getCloudConfiguration() != null) {
299 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
300 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
302 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
303 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
305 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
306 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
310 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
313 cloudConfig.setTenantId(tenantId);
314 cloudConfig.setCloudOwner(cloudOwner);
315 cloudConfig.setLcpCloudRegionId(lcpRegionId);
319 public CloudConfiguration mapCloudConfigurationVolume(GenericVnf vnf, VolumeGroup volumeGroup) {
320 CloudConfiguration cloudConfig = new CloudConfiguration();
321 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
322 Optional<org.onap.aaiclient.client.aai.entities.Relationships> relationshipsOpt = wrapper.getRelationships();
323 String tenantId = null;
324 String cloudOwner = null;
325 String lcpRegionId = null;
326 if (relationshipsOpt.isPresent()) {
327 tenantId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
328 .map(item -> item.getURIKeys().get(TENANT_ID)).orElse(null);
329 cloudOwner = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
330 .map(item -> item.getURIKeys().get(CLOUD_OWNER)).orElse(null);
331 lcpRegionId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
332 .map(item -> item.getURIKeys().get(CLOUD_REGION_ID)).orElse(null);
335 if (tenantId == null || cloudOwner == null || lcpRegionId == null) {
336 Map<String, String[]> filters = createQueryRequest("volumeGroupId", volumeGroup.getVolumeGroupId());
337 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
338 if (request.isPresent()) {
339 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
340 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
341 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
343 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
346 cloudConfig.setTenantId(tenantId);
347 cloudConfig.setCloudOwner(cloudOwner);
348 cloudConfig.setLcpCloudRegionId(lcpRegionId);
352 public CloudConfiguration mapCloudConfigurationNetwork(L3Network network) {
353 CloudConfiguration cloudConfig = new CloudConfiguration();
354 String tenantId = null;
355 String cloudOwner = null;
356 String lcpRegionId = null;
358 Map<String, String[]> filters = createQueryRequest("networkId", network.getNetworkId());
359 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
360 if (request.isPresent()) {
361 if (request.get().getRequestDetails() != null
362 && request.get().getRequestDetails().getCloudConfiguration() != null) {
363 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
364 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
366 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
367 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
369 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
370 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
374 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
377 cloudConfig.setTenantId(tenantId);
378 cloudConfig.setCloudOwner(cloudOwner);
379 cloudConfig.setLcpCloudRegionId(lcpRegionId);
383 public CloudConfiguration mapCloudConfigurationVnf(String vnfId) {
384 CloudConfiguration cloudConfig = new CloudConfiguration();
385 String tenantId = null;
386 String cloudOwner = null;
387 String lcpRegionId = null;
389 Map<String, String[]> filters = createQueryRequest("vnfId", vnfId);
390 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
391 if (request.isPresent()) {
392 if (request.get().getRequestDetails() != null
393 && request.get().getRequestDetails().getCloudConfiguration() != null) {
394 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
395 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
397 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
398 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
400 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
401 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
405 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
407 cloudConfig.setTenantId(tenantId);
408 cloudConfig.setCloudOwner(cloudOwner);
409 cloudConfig.setLcpCloudRegionId(lcpRegionId);
413 public Optional<ServiceInstancesRequest> findServiceInstanceRequest(Map<String, String[]> filters) {
414 List<InfraActiveRequests> completeRequests = infraActiveRequestsClient.getRequest(filters);
415 InfraActiveRequests foundRequest = completeRequests.get(0);
416 ServiceInstancesRequest siRequest;
418 siRequest = mapper.readValue(foundRequest.getRequestBody(), ServiceInstancesRequest.class);
419 return Optional.of(siRequest);
420 } catch (Exception e) {
421 logger.error("Could not read Create Instance Request", e);
423 return Optional.empty();
426 public Map<String, String[]> createQueryRequest(String name, String instanceId) {
427 Map<String, String[]> filters = new HashMap<>();
428 filters.put(name, new String[] {"EQ", instanceId});
429 filters.put("requestStatus", new String[] {"EQ", Status.COMPLETE.toString()});
430 filters.put("action", new String[] {"EQ", "createInstance"});
434 public RequestInfo createRequestInfo() {
435 RequestInfo requestInfo = new RequestInfo();
436 requestInfo.setSuppressRollback(false);
437 requestInfo.setSource(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
438 requestInfo.setRequestorId(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
442 public RequestParameters createRequestParameters() {
443 RequestParameters requestParams = new RequestParameters();
444 requestParams.setaLaCarte(true);
445 requestParams.setTestApi("GR_API");
446 return requestParams;