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.aaiclient.client.aai.AAIObjectType;
33 import org.onap.aaiclient.client.aai.entities.AAIResultWrapper;
34 import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder;
35 import org.onap.logging.ref.slf4j.ONAPLogConstants;
36 import org.onap.so.apihandlerinfra.infra.rest.exception.AAIEntityNotFound;
37 import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
38 import org.onap.so.constants.Status;
39 import org.onap.so.db.request.beans.InfraActiveRequests;
40 import org.onap.so.db.request.client.RequestsDbClient;
41 import org.onap.so.serviceinstancebeans.CloudConfiguration;
42 import org.onap.so.serviceinstancebeans.ModelInfo;
43 import org.onap.so.serviceinstancebeans.ModelType;
44 import org.onap.so.serviceinstancebeans.RequestDetails;
45 import org.onap.so.serviceinstancebeans.RequestInfo;
46 import org.onap.so.serviceinstancebeans.RequestParameters;
47 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
51 import org.springframework.beans.factory.annotation.Autowired;
52 import org.springframework.stereotype.Component;
53 import com.fasterxml.jackson.databind.ObjectMapper;
56 public class BpmnRequestBuilder {
58 private static final String CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND = "Cloud Configuration could not be found";
60 private static final String GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID =
61 "Generic Vnf Not Found In Inventory, VnfId: ";
63 private static final String VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID = "VF Module Not Found In Inventory, VnfId: ";
65 private static final Logger logger = LoggerFactory.getLogger(BpmnRequestBuilder.class);
68 private RequestsDbClient infraActiveRequestsClient;
71 private AAIDataRetrieval aaiDataRet;
73 private ObjectMapper mapper = new ObjectMapper();
76 public ServiceInstancesRequest buildVFModuleDeleteRequest(String vnfId, String vfModuleId, ModelType modelType)
77 throws AAIEntityNotFound {
78 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
80 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
82 VfModule vfModule = aaiDataRet.getAAIVfModule(vnfId, vfModuleId);
83 if (vfModule == null) {
84 throw new AAIEntityNotFound(VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " vfModuleId: " + vfModuleId);
86 return createServiceInstancesRequest(vnf, vfModule, modelType);
89 public CloudConfiguration getCloudConfigurationVfModuleReplace(String vnfId, String vfModuleId)
90 throws AAIEntityNotFound {
91 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
93 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
96 return mapCloudConfiguration(vnf, vfModuleId);
99 public ServiceInstancesRequest buildVolumeGroupDeleteRequest(String vnfId, String volumeGroupId)
100 throws AAIEntityNotFound {
101 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
103 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
105 VolumeGroup volumeGroup = aaiDataRet.getVolumeGroup(vnfId, volumeGroupId);
106 if (volumeGroup == null) {
107 throw new AAIEntityNotFound(
108 VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " volumeGroupId: " + volumeGroupId);
110 return createServiceInstancesRequest(vnf, volumeGroup);
113 public ServiceInstancesRequest buildServiceDeleteRequest(String serviceInstanceId) throws AAIEntityNotFound {
114 ServiceInstance serviceInstance = aaiDataRet.getServiceInstance(serviceInstanceId);
115 if (serviceInstance == null) {
116 throw new AAIEntityNotFound(
117 "ServiceInstance Not Found In Inventory, ServiceInstanceId: " + serviceInstanceId);
119 return createServiceInstancesRequest(serviceInstance);
122 public ServiceInstancesRequest buildVnfDeleteRequest(String vnfId) throws AAIEntityNotFound {
123 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
125 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
127 return createServiceInstancesRequest(vnf);
130 public ServiceInstancesRequest buildNetworkDeleteRequest(String networkId) throws AAIEntityNotFound {
131 L3Network network = aaiDataRet.getNetwork(networkId);
132 if (network == null) {
133 throw new AAIEntityNotFound("Network Not Found In Inventory, NetworkId: " + networkId);
135 return createServiceInstancesRequest(network);
138 protected ServiceInstancesRequest createServiceInstancesRequest(ServiceInstance serviceInstance) {
139 ServiceInstancesRequest request = new ServiceInstancesRequest();
140 RequestDetails requestDetails = mapServiceRequestDetails(serviceInstance);
141 request.setRequestDetails(requestDetails);
145 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf) {
146 ServiceInstancesRequest request = new ServiceInstancesRequest();
147 RequestDetails requestDetails = mapVnfRequestDetails(vnf);
148 request.setRequestDetails(requestDetails);
152 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf, VfModule vfModule,
153 ModelType modelType) {
154 ServiceInstancesRequest request = new ServiceInstancesRequest();
155 RequestDetails requestDetails = mapRequestDetails(vnf, vfModule, modelType);
156 request.setRequestDetails(requestDetails);
160 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf, VolumeGroup volumeGroup) {
161 ServiceInstancesRequest request = new ServiceInstancesRequest();
162 RequestDetails requestDetails = mapRequestDetails(vnf, volumeGroup);
163 request.setRequestDetails(requestDetails);
167 protected ServiceInstancesRequest createServiceInstancesRequest(L3Network network) {
168 ServiceInstancesRequest request = new ServiceInstancesRequest();
169 RequestDetails requestDetails = mapNetworkRequestDetails(network);
170 request.setRequestDetails(requestDetails);
174 protected RequestDetails mapRequestDetails(GenericVnf vnf, VfModule vfModule, ModelType modelType) {
175 RequestDetails requestDetails = new RequestDetails();
176 requestDetails.setRequestInfo(createRequestInfo());
177 if (vfModule.getVfModuleName() != null) {
178 requestDetails.getRequestInfo().setInstanceName(vfModule.getVfModuleName());
180 requestDetails.setModelInfo(mapVfModuleModelInformation(vfModule, modelType));
182 requestDetails.setCloudConfiguration(mapCloudConfiguration(vnf, vfModule.getVfModuleId()));
183 requestDetails.setRequestParameters(createRequestParameters());
184 return requestDetails;
187 protected RequestDetails mapRequestDetails(GenericVnf vnf, VolumeGroup volumeGroup) {
188 RequestDetails requestDetails = new RequestDetails();
189 requestDetails.setRequestInfo(createRequestInfo());
190 if (volumeGroup.getVolumeGroupName() != null) {
191 requestDetails.getRequestInfo().setInstanceName(volumeGroup.getVolumeGroupName());
193 requestDetails.setModelInfo(mapVolumeGroupModelInformation(volumeGroup));
194 requestDetails.setCloudConfiguration(mapCloudConfigurationVolume(vnf, volumeGroup));
195 requestDetails.setRequestParameters(createRequestParameters());
196 return requestDetails;
199 protected RequestDetails mapVnfRequestDetails(GenericVnf vnf) {
200 RequestDetails requestDetails = new RequestDetails();
201 requestDetails.setRequestInfo(createRequestInfo());
202 if (vnf.getVnfName() != null) {
203 requestDetails.getRequestInfo().setInstanceName(vnf.getVnfName());
205 requestDetails.setModelInfo(mapVnfModelInformation(vnf));
206 requestDetails.setRequestParameters(createRequestParameters());
207 return requestDetails;
210 protected RequestDetails mapServiceRequestDetails(ServiceInstance serviceInstance) {
211 RequestDetails requestDetails = new RequestDetails();
212 requestDetails.setRequestInfo(createRequestInfo());
213 if (serviceInstance.getServiceInstanceName() != null) {
214 requestDetails.getRequestInfo().setInstanceName(serviceInstance.getServiceInstanceName());
216 requestDetails.setModelInfo(mapServiceModelInformation(serviceInstance));
217 requestDetails.setRequestParameters(createRequestParameters());
218 return requestDetails;
221 protected RequestDetails mapNetworkRequestDetails(L3Network network) {
222 RequestDetails requestDetails = new RequestDetails();
223 requestDetails.setRequestInfo(createRequestInfo());
224 if (network.getNetworkName() != null) {
225 requestDetails.getRequestInfo().setInstanceName(network.getNetworkName());
227 requestDetails.setCloudConfiguration(mapCloudConfigurationNetwork(network));
228 requestDetails.setModelInfo(mapNetworkModelInformation(network));
229 requestDetails.setRequestParameters(createRequestParameters());
230 return requestDetails;
233 protected ModelInfo mapVfModuleModelInformation(VfModule vfModule, ModelType modelType) {
234 ModelInfo modelInfo = new ModelInfo();
235 modelInfo.setModelCustomizationId(vfModule.getModelCustomizationId());
236 modelInfo.setModelCustomizationUuid(vfModule.getModelCustomizationId());
237 modelInfo.setModelType(modelType);
241 protected ModelInfo mapVolumeGroupModelInformation(VolumeGroup volumeGroup) {
242 ModelInfo modelInfo = new ModelInfo();
243 modelInfo.setModelCustomizationId(volumeGroup.getModelCustomizationId());
244 modelInfo.setModelCustomizationUuid(volumeGroup.getModelCustomizationId());
245 modelInfo.setModelType(ModelType.volumeGroup);
249 protected ModelInfo mapServiceModelInformation(ServiceInstance serviceInstance) {
250 ModelInfo modelInfo = new ModelInfo();
251 modelInfo.setModelVersionId(serviceInstance.getModelVersionId());
252 modelInfo.setModelType(ModelType.service);
256 protected ModelInfo mapVnfModelInformation(GenericVnf vnf) {
257 ModelInfo modelInfo = new ModelInfo();
258 modelInfo.setModelCustomizationId(vnf.getModelCustomizationId());
259 modelInfo.setModelCustomizationUuid(vnf.getModelCustomizationId());
260 modelInfo.setModelType(ModelType.vnf);
264 protected ModelInfo mapNetworkModelInformation(L3Network network) {
265 ModelInfo modelInfo = new ModelInfo();
266 modelInfo.setModelType(ModelType.network);
267 modelInfo.setModelCustomizationId(network.getModelCustomizationId());
268 modelInfo.setModelCustomizationUuid(network.getModelCustomizationId());
272 public CloudConfiguration mapCloudConfiguration(GenericVnf vnf, String vfModuleId) {
273 CloudConfiguration cloudConfig = new CloudConfiguration();
274 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
275 Optional<org.onap.aaiclient.client.aai.entities.Relationships> relationshipsOpt = wrapper.getRelationships();
276 String tenantId = null;
277 String cloudOwner = null;
278 String lcpRegionId = null;
279 if (relationshipsOpt.isPresent()) {
280 tenantId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
281 .map(item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.TENANT.getUriParams().tenantId))
283 cloudOwner = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst().map(
284 item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudOwner))
286 lcpRegionId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst().map(
287 item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudRegionId))
291 if (tenantId == null || cloudOwner == null || lcpRegionId == null) {
292 Map<String, String[]> filters = createQueryRequest("vfModuleId", vfModuleId);
293 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
294 if (request.isPresent()) {
295 if (request.get().getRequestDetails() != null
296 && request.get().getRequestDetails().getCloudConfiguration() != null) {
297 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
298 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
300 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
301 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
303 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
304 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
308 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
311 cloudConfig.setTenantId(tenantId);
312 cloudConfig.setCloudOwner(cloudOwner);
313 cloudConfig.setLcpCloudRegionId(lcpRegionId);
317 public CloudConfiguration mapCloudConfigurationVolume(GenericVnf vnf, VolumeGroup volumeGroup) {
318 CloudConfiguration cloudConfig = new CloudConfiguration();
319 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
320 Optional<org.onap.aaiclient.client.aai.entities.Relationships> relationshipsOpt = wrapper.getRelationships();
321 String tenantId = null;
322 String cloudOwner = null;
323 String lcpRegionId = null;
324 if (relationshipsOpt.isPresent()) {
325 tenantId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
326 .map(item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.TENANT.getUriParams().tenantId))
328 cloudOwner = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst().map(
329 item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudOwner))
331 lcpRegionId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst().map(
332 item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudRegionId))
336 if (tenantId == null || cloudOwner == null || lcpRegionId == null) {
337 Map<String, String[]> filters = createQueryRequest("volumeGroupId", volumeGroup.getVolumeGroupId());
338 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
339 if (request.isPresent()) {
340 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
341 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
342 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
344 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
347 cloudConfig.setTenantId(tenantId);
348 cloudConfig.setCloudOwner(cloudOwner);
349 cloudConfig.setLcpCloudRegionId(lcpRegionId);
353 public CloudConfiguration mapCloudConfigurationNetwork(L3Network network) {
354 CloudConfiguration cloudConfig = new CloudConfiguration();
355 String tenantId = null;
356 String cloudOwner = null;
357 String lcpRegionId = null;
359 Map<String, String[]> filters = createQueryRequest("networkId", network.getNetworkId());
360 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
361 if (request.isPresent()) {
362 if (request.get().getRequestDetails() != null
363 && request.get().getRequestDetails().getCloudConfiguration() != null) {
364 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
365 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
367 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
368 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
370 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
371 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
375 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
378 cloudConfig.setTenantId(tenantId);
379 cloudConfig.setCloudOwner(cloudOwner);
380 cloudConfig.setLcpCloudRegionId(lcpRegionId);
384 public CloudConfiguration mapCloudConfigurationVnf(String vnfId) {
385 CloudConfiguration cloudConfig = new CloudConfiguration();
386 String tenantId = null;
387 String cloudOwner = null;
388 String lcpRegionId = null;
390 Map<String, String[]> filters = createQueryRequest("vnfId", vnfId);
391 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
392 if (request.isPresent()) {
393 if (request.get().getRequestDetails() != null
394 && request.get().getRequestDetails().getCloudConfiguration() != null) {
395 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
396 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
398 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
399 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
401 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
402 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
406 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
408 cloudConfig.setTenantId(tenantId);
409 cloudConfig.setCloudOwner(cloudOwner);
410 cloudConfig.setLcpCloudRegionId(lcpRegionId);
414 public Optional<ServiceInstancesRequest> findServiceInstanceRequest(Map<String, String[]> filters) {
415 List<InfraActiveRequests> completeRequests = infraActiveRequestsClient.getRequest(filters);
416 InfraActiveRequests foundRequest = completeRequests.get(0);
417 ServiceInstancesRequest siRequest;
419 siRequest = mapper.readValue(foundRequest.getRequestBody(), ServiceInstancesRequest.class);
420 return Optional.of(siRequest);
421 } catch (Exception e) {
422 logger.error("Could not read Create Instance Request", e);
424 return Optional.empty();
427 public Map<String, String[]> createQueryRequest(String name, String instanceId) {
428 Map<String, String[]> filters = new HashMap<>();
429 filters.put(name, new String[] {"EQ", instanceId});
430 filters.put("requestStatus", new String[] {"EQ", Status.COMPLETE.toString()});
431 filters.put("action", new String[] {"EQ", "createInstance"});
435 public RequestInfo createRequestInfo() {
436 RequestInfo requestInfo = new RequestInfo();
437 requestInfo.setSuppressRollback(false);
438 requestInfo.setSource(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
439 requestInfo.setRequestorId(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
443 public RequestParameters createRequestParameters() {
444 RequestParameters requestParams = new RequestParameters();
445 requestParams.setaLaCarte(true);
446 requestParams.setTestApi("GR_API");
447 return requestParams;