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.logger.HttpHeadersConstants;
42 import org.onap.so.serviceinstancebeans.CloudConfiguration;
43 import org.onap.so.serviceinstancebeans.ModelInfo;
44 import org.onap.so.serviceinstancebeans.ModelType;
45 import org.onap.so.serviceinstancebeans.RequestDetails;
46 import org.onap.so.serviceinstancebeans.RequestInfo;
47 import org.onap.so.serviceinstancebeans.RequestParameters;
48 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
52 import org.springframework.beans.factory.annotation.Autowired;
53 import org.springframework.stereotype.Component;
54 import com.fasterxml.jackson.databind.ObjectMapper;
57 public class BpmnRequestBuilder {
59 private static final String CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND = "Cloud Configuration could not be found";
61 private static final String GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID =
62 "Generic Vnf Not Found In Inventory, VnfId: ";
64 private static final String VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID = "VF Module Not Found In Inventory, VnfId: ";
66 private static final Logger logger = LoggerFactory.getLogger(BpmnRequestBuilder.class);
69 private RequestsDbClient infraActiveRequestsClient;
72 private AAIDataRetrieval aaiDataRet;
74 private ObjectMapper mapper = new ObjectMapper();
77 public ServiceInstancesRequest buildVFModuleDeleteRequest(String vnfId, String vfModuleId, ModelType modelType)
78 throws AAIEntityNotFound {
79 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
81 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
83 VfModule vfModule = aaiDataRet.getAAIVfModule(vnfId, vfModuleId);
84 if (vfModule == null) {
85 throw new AAIEntityNotFound(VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " vfModuleId: " + vfModuleId);
87 return createServiceInstancesRequest(vnf, vfModule, modelType);
90 public CloudConfiguration getCloudConfigurationVfModuleReplace(String vnfId, String vfModuleId)
91 throws AAIEntityNotFound {
92 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
94 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
97 return mapCloudConfiguration(vnf, vfModuleId);
100 public ServiceInstancesRequest buildVolumeGroupDeleteRequest(String vnfId, String volumeGroupId)
101 throws AAIEntityNotFound {
102 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
104 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
106 VolumeGroup volumeGroup = aaiDataRet.getVolumeGroup(vnfId, volumeGroupId);
107 if (volumeGroup == null) {
108 throw new AAIEntityNotFound(
109 VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " volumeGroupId: " + volumeGroupId);
111 return createServiceInstancesRequest(vnf, volumeGroup);
114 public ServiceInstancesRequest buildServiceDeleteRequest(String serviceInstanceId) throws AAIEntityNotFound {
115 ServiceInstance serviceInstance = aaiDataRet.getServiceInstance(serviceInstanceId);
116 if (serviceInstance == null) {
117 throw new AAIEntityNotFound(
118 "ServiceInstance Not Found In Inventory, ServiceInstanceId: " + serviceInstanceId);
120 return createServiceInstancesRequest(serviceInstance);
123 public ServiceInstancesRequest buildVnfDeleteRequest(String vnfId) throws AAIEntityNotFound {
124 GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
126 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
128 return createServiceInstancesRequest(vnf);
131 public ServiceInstancesRequest buildNetworkDeleteRequest(String networkId) throws AAIEntityNotFound {
132 L3Network network = aaiDataRet.getNetwork(networkId);
133 if (network == null) {
134 throw new AAIEntityNotFound("Network Not Found In Inventory, NetworkId: " + networkId);
136 return createServiceInstancesRequest(network);
139 protected ServiceInstancesRequest createServiceInstancesRequest(ServiceInstance serviceInstance) {
140 ServiceInstancesRequest request = new ServiceInstancesRequest();
141 RequestDetails requestDetails = mapServiceRequestDetails(serviceInstance);
142 request.setRequestDetails(requestDetails);
146 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf) {
147 ServiceInstancesRequest request = new ServiceInstancesRequest();
148 RequestDetails requestDetails = mapVnfRequestDetails(vnf);
149 request.setRequestDetails(requestDetails);
153 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf, VfModule vfModule,
154 ModelType modelType) {
155 ServiceInstancesRequest request = new ServiceInstancesRequest();
156 RequestDetails requestDetails = mapRequestDetails(vnf, vfModule, modelType);
157 request.setRequestDetails(requestDetails);
161 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf, VolumeGroup volumeGroup) {
162 ServiceInstancesRequest request = new ServiceInstancesRequest();
163 RequestDetails requestDetails = mapRequestDetails(vnf, volumeGroup);
164 request.setRequestDetails(requestDetails);
168 protected ServiceInstancesRequest createServiceInstancesRequest(L3Network network) {
169 ServiceInstancesRequest request = new ServiceInstancesRequest();
170 RequestDetails requestDetails = mapNetworkRequestDetails(network);
171 request.setRequestDetails(requestDetails);
175 protected RequestDetails mapRequestDetails(GenericVnf vnf, VfModule vfModule, ModelType modelType) {
176 RequestDetails requestDetails = new RequestDetails();
177 requestDetails.setRequestInfo(createRequestInfo());
178 if (vfModule.getVfModuleName() != null) {
179 requestDetails.getRequestInfo().setInstanceName(vfModule.getVfModuleName());
181 requestDetails.setModelInfo(mapVfModuleModelInformation(vfModule, modelType));
183 requestDetails.setCloudConfiguration(mapCloudConfiguration(vnf, vfModule.getVfModuleId()));
184 requestDetails.setRequestParameters(createRequestParameters());
185 return requestDetails;
188 protected RequestDetails mapRequestDetails(GenericVnf vnf, VolumeGroup volumeGroup) {
189 RequestDetails requestDetails = new RequestDetails();
190 requestDetails.setRequestInfo(createRequestInfo());
191 if (volumeGroup.getVolumeGroupName() != null) {
192 requestDetails.getRequestInfo().setInstanceName(volumeGroup.getVolumeGroupName());
194 requestDetails.setModelInfo(mapVolumeGroupModelInformation(volumeGroup));
195 requestDetails.setCloudConfiguration(mapCloudConfigurationVolume(vnf, volumeGroup));
196 requestDetails.setRequestParameters(createRequestParameters());
197 return requestDetails;
200 protected RequestDetails mapVnfRequestDetails(GenericVnf vnf) {
201 RequestDetails requestDetails = new RequestDetails();
202 requestDetails.setRequestInfo(createRequestInfo());
203 if (vnf.getVnfName() != null) {
204 requestDetails.getRequestInfo().setInstanceName(vnf.getVnfName());
206 requestDetails.setModelInfo(mapVnfModelInformation(vnf));
207 requestDetails.setRequestParameters(createRequestParameters());
208 return requestDetails;
211 protected RequestDetails mapServiceRequestDetails(ServiceInstance serviceInstance) {
212 RequestDetails requestDetails = new RequestDetails();
213 requestDetails.setRequestInfo(createRequestInfo());
214 if (serviceInstance.getServiceInstanceName() != null) {
215 requestDetails.getRequestInfo().setInstanceName(serviceInstance.getServiceInstanceName());
217 requestDetails.setModelInfo(mapServiceModelInformation(serviceInstance));
218 requestDetails.setRequestParameters(createRequestParameters());
219 return requestDetails;
222 protected RequestDetails mapNetworkRequestDetails(L3Network network) {
223 RequestDetails requestDetails = new RequestDetails();
224 requestDetails.setRequestInfo(createRequestInfo());
225 if (network.getNetworkName() != null) {
226 requestDetails.getRequestInfo().setInstanceName(network.getNetworkName());
228 requestDetails.setCloudConfiguration(mapCloudConfigurationNetwork(network));
229 requestDetails.setModelInfo(mapNetworkModelInformation(network));
230 requestDetails.setRequestParameters(createRequestParameters());
231 return requestDetails;
234 protected ModelInfo mapVfModuleModelInformation(VfModule vfModule, ModelType modelType) {
235 ModelInfo modelInfo = new ModelInfo();
236 modelInfo.setModelCustomizationId(vfModule.getModelCustomizationId());
237 modelInfo.setModelCustomizationUuid(vfModule.getModelCustomizationId());
238 modelInfo.setModelType(modelType);
242 protected ModelInfo mapVolumeGroupModelInformation(VolumeGroup volumeGroup) {
243 ModelInfo modelInfo = new ModelInfo();
244 modelInfo.setModelCustomizationId(volumeGroup.getModelCustomizationId());
245 modelInfo.setModelCustomizationUuid(volumeGroup.getModelCustomizationId());
246 modelInfo.setModelType(ModelType.volumeGroup);
250 protected ModelInfo mapServiceModelInformation(ServiceInstance serviceInstance) {
251 ModelInfo modelInfo = new ModelInfo();
252 modelInfo.setModelVersionId(serviceInstance.getModelVersionId());
253 modelInfo.setModelType(ModelType.service);
257 protected ModelInfo mapVnfModelInformation(GenericVnf vnf) {
258 ModelInfo modelInfo = new ModelInfo();
259 modelInfo.setModelCustomizationId(vnf.getModelCustomizationId());
260 modelInfo.setModelCustomizationUuid(vnf.getModelCustomizationId());
261 modelInfo.setModelType(ModelType.vnf);
265 protected ModelInfo mapNetworkModelInformation(L3Network network) {
266 ModelInfo modelInfo = new ModelInfo();
267 modelInfo.setModelType(ModelType.network);
268 modelInfo.setModelCustomizationId(network.getModelCustomizationId());
269 modelInfo.setModelCustomizationUuid(network.getModelCustomizationId());
273 public CloudConfiguration mapCloudConfiguration(GenericVnf vnf, String vfModuleId) {
274 CloudConfiguration cloudConfig = new CloudConfiguration();
275 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
276 Optional<org.onap.aaiclient.client.aai.entities.Relationships> relationshipsOpt = wrapper.getRelationships();
277 String tenantId = null;
278 String cloudOwner = null;
279 String lcpRegionId = null;
280 if (relationshipsOpt.isPresent()) {
281 tenantId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
282 .map(item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.TENANT.getUriParams().tenantId))
284 cloudOwner = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst().map(
285 item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudOwner))
287 lcpRegionId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst().map(
288 item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudRegionId))
292 if (tenantId == null || cloudOwner == null || lcpRegionId == null) {
293 Map<String, String[]> filters = createQueryRequest("vfModuleId", vfModuleId);
294 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
295 if (request.isPresent()) {
296 if (request.get().getRequestDetails() != null
297 && request.get().getRequestDetails().getCloudConfiguration() != null) {
298 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
299 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
301 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
302 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
304 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
305 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
309 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
312 cloudConfig.setTenantId(tenantId);
313 cloudConfig.setCloudOwner(cloudOwner);
314 cloudConfig.setLcpCloudRegionId(lcpRegionId);
318 public CloudConfiguration mapCloudConfigurationVolume(GenericVnf vnf, VolumeGroup volumeGroup) {
319 CloudConfiguration cloudConfig = new CloudConfiguration();
320 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
321 Optional<org.onap.aaiclient.client.aai.entities.Relationships> relationshipsOpt = wrapper.getRelationships();
322 String tenantId = null;
323 String cloudOwner = null;
324 String lcpRegionId = null;
325 if (relationshipsOpt.isPresent()) {
326 tenantId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
327 .map(item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.TENANT.getUriParams().tenantId))
329 cloudOwner = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst().map(
330 item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudOwner))
332 lcpRegionId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst().map(
333 item -> item.getURIKeys().get(AAIFluentTypeBuilder.Types.CLOUD_REGION.getUriParams().cloudRegionId))
337 if (tenantId == null || cloudOwner == null || lcpRegionId == null) {
338 Map<String, String[]> filters = createQueryRequest("volumeGroupId", volumeGroup.getVolumeGroupId());
339 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
340 if (request.isPresent()) {
341 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
342 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
343 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
345 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
348 cloudConfig.setTenantId(tenantId);
349 cloudConfig.setCloudOwner(cloudOwner);
350 cloudConfig.setLcpCloudRegionId(lcpRegionId);
354 public CloudConfiguration mapCloudConfigurationNetwork(L3Network network) {
355 CloudConfiguration cloudConfig = new CloudConfiguration();
356 String tenantId = null;
357 String cloudOwner = null;
358 String lcpRegionId = null;
360 Map<String, String[]> filters = createQueryRequest("networkId", network.getNetworkId());
361 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
362 if (request.isPresent()) {
363 if (request.get().getRequestDetails() != null
364 && request.get().getRequestDetails().getCloudConfiguration() != null) {
365 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
366 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
368 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
369 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
371 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
372 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
376 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
379 cloudConfig.setTenantId(tenantId);
380 cloudConfig.setCloudOwner(cloudOwner);
381 cloudConfig.setLcpCloudRegionId(lcpRegionId);
385 public CloudConfiguration mapCloudConfigurationVnf(String vnfId) {
386 CloudConfiguration cloudConfig = new CloudConfiguration();
387 String tenantId = null;
388 String cloudOwner = null;
389 String lcpRegionId = null;
391 Map<String, String[]> filters = createQueryRequest("vnfId", vnfId);
392 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
393 if (request.isPresent()) {
394 if (request.get().getRequestDetails() != null
395 && request.get().getRequestDetails().getCloudConfiguration() != null) {
396 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
397 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
399 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
400 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
402 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
403 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
407 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
409 cloudConfig.setTenantId(tenantId);
410 cloudConfig.setCloudOwner(cloudOwner);
411 cloudConfig.setLcpCloudRegionId(lcpRegionId);
415 public Optional<ServiceInstancesRequest> findServiceInstanceRequest(Map<String, String[]> filters) {
416 List<InfraActiveRequests> completeRequests = infraActiveRequestsClient.getRequest(filters);
417 InfraActiveRequests foundRequest = completeRequests.get(0);
418 ServiceInstancesRequest siRequest;
420 siRequest = mapper.readValue(foundRequest.getRequestBody(), ServiceInstancesRequest.class);
421 return Optional.of(siRequest);
422 } catch (Exception e) {
423 logger.error("Could not read Create Instance Request", e);
425 return Optional.empty();
428 public Map<String, String[]> createQueryRequest(String name, String instanceId) {
429 Map<String, String[]> filters = new HashMap<>();
430 filters.put(name, new String[] {"EQ", instanceId});
431 filters.put("requestStatus", new String[] {"EQ", Status.COMPLETE.toString()});
432 filters.put("action", new String[] {"EQ", "createInstance"});
436 public RequestInfo createRequestInfo() {
437 RequestInfo requestInfo = new RequestInfo();
438 requestInfo.setSuppressRollback(false);
439 requestInfo.setSource(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
440 requestInfo.setRequestorId(MDC.get(HttpHeadersConstants.REQUESTOR_ID));
444 public RequestParameters createRequestParameters() {
445 RequestParameters requestParams = new RequestParameters();
446 requestParams.setaLaCarte(true);
447 requestParams.setTestApi("GR_API");
448 return requestParams;