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.AAIResourcesClient;
37 import org.onap.so.client.aai.entities.AAIResultWrapper;
38 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
39 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
40 import org.onap.so.constants.Status;
41 import org.onap.so.db.request.beans.InfraActiveRequests;
42 import org.onap.so.db.request.client.RequestsDbClient;
43 import org.onap.so.serviceinstancebeans.CloudConfiguration;
44 import org.onap.so.serviceinstancebeans.ModelInfo;
45 import org.onap.so.serviceinstancebeans.ModelType;
46 import org.onap.so.serviceinstancebeans.RequestDetails;
47 import org.onap.so.serviceinstancebeans.RequestInfo;
48 import org.onap.so.serviceinstancebeans.RequestParameters;
49 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
53 import org.springframework.beans.factory.annotation.Autowired;
54 import org.springframework.stereotype.Component;
55 import com.fasterxml.jackson.databind.ObjectMapper;
58 public class BpmnRequestBuilder {
60 private static final String CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND = "Cloud Configuration could not be found";
62 private static final String CLOUD_REGION_ID = "cloud-region-id";
64 private static final String CLOUD_OWNER = "cloud-owner";
66 private static final String TENANT_ID = "tenant-id";
68 private static final String GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID =
69 "Generic Vnf Not Found In Inventory, VnfId: ";
71 private static final String VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID = "VF Module Not Found In Inventory, VnfId: ";
73 private static final Logger logger = LoggerFactory.getLogger(BpmnRequestBuilder.class);
76 private RequestsDbClient infraActiveRequestsClient;
78 private ObjectMapper mapper = new ObjectMapper();
80 private AAIResourcesClient aaiResourcesClient;
82 public ServiceInstancesRequest buildVFModuleDeleteRequest(String vnfId, String vfModuleId, ModelType modelType)
83 throws AAIEntityNotFound {
84 GenericVnf vnf = getGenericVnf(vnfId);
86 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
88 VfModule vfModule = getAAIVfModule(vnfId, vfModuleId);
89 if (vfModule == null) {
90 throw new AAIEntityNotFound(VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " vfModuleId: " + vfModuleId);
92 return createServiceInstancesRequest(vnf, vfModule, modelType);
95 public ServiceInstancesRequest buildVolumeGroupDeleteRequest(String vnfId, String volumeGroupId)
96 throws AAIEntityNotFound {
97 GenericVnf vnf = getGenericVnf(vnfId);
99 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
101 VolumeGroup volumeGroup = getVolumeGroup(vnfId, volumeGroupId);
102 if (volumeGroup == null) {
103 throw new AAIEntityNotFound(
104 VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " volumeGroupId: " + volumeGroupId);
106 return createServiceInstancesRequest(vnf, volumeGroup);
109 public ServiceInstancesRequest buildServiceDeleteRequest(String serviceInstanceId) throws AAIEntityNotFound {
110 ServiceInstance serviceInstance = getServiceInstance(serviceInstanceId);
111 if (serviceInstance == null) {
112 throw new AAIEntityNotFound(
113 "ServiceInstance Not Found In Inventory, ServiceInstanceId: " + serviceInstanceId);
115 return createServiceInstancesRequest(serviceInstance);
118 public ServiceInstancesRequest buildVnfDeleteRequest(String vnfId) throws AAIEntityNotFound {
119 GenericVnf vnf = getGenericVnf(vnfId);
121 throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
123 return createServiceInstancesRequest(vnf);
126 public ServiceInstancesRequest buildNetworkDeleteRequest(String networkId) throws AAIEntityNotFound {
127 L3Network network = getNetwork(networkId);
128 if (network == null) {
129 throw new AAIEntityNotFound("Network Not Found In Inventory, NetworkId: " + networkId);
131 return createServiceInstancesRequest(network);
134 protected ServiceInstancesRequest createServiceInstancesRequest(ServiceInstance serviceInstance) {
135 ServiceInstancesRequest request = new ServiceInstancesRequest();
136 RequestDetails requestDetails = mapServiceRequestDetails(serviceInstance);
137 request.setRequestDetails(requestDetails);
141 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf) {
142 ServiceInstancesRequest request = new ServiceInstancesRequest();
143 RequestDetails requestDetails = mapVnfRequestDetails(vnf);
144 request.setRequestDetails(requestDetails);
148 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf, VfModule vfModule,
149 ModelType modelType) {
150 ServiceInstancesRequest request = new ServiceInstancesRequest();
151 RequestDetails requestDetails = mapRequestDetails(vnf, vfModule, modelType);
152 request.setRequestDetails(requestDetails);
156 protected ServiceInstancesRequest createServiceInstancesRequest(GenericVnf vnf, VolumeGroup volumeGroup) {
157 ServiceInstancesRequest request = new ServiceInstancesRequest();
158 RequestDetails requestDetails = mapRequestDetails(vnf, volumeGroup);
159 request.setRequestDetails(requestDetails);
163 protected ServiceInstancesRequest createServiceInstancesRequest(L3Network network) {
164 ServiceInstancesRequest request = new ServiceInstancesRequest();
165 RequestDetails requestDetails = mapNetworkRequestDetails(network);
166 request.setRequestDetails(requestDetails);
170 protected RequestDetails mapRequestDetails(GenericVnf vnf, VfModule vfModule, ModelType modelType) {
171 RequestDetails requestDetails = new RequestDetails();
172 requestDetails.setRequestInfo(createRequestInfo());
173 if (vfModule.getVfModuleName() != null) {
174 requestDetails.getRequestInfo().setInstanceName(vfModule.getVfModuleName());
176 requestDetails.setModelInfo(mapVfModuleModelInformation(vfModule, modelType));
178 requestDetails.setCloudConfiguration(mapCloudConfiguration(vnf, vfModule));
179 requestDetails.setRequestParameters(createRequestParameters());
180 return requestDetails;
183 protected RequestDetails mapRequestDetails(GenericVnf vnf, VolumeGroup volumeGroup) {
184 RequestDetails requestDetails = new RequestDetails();
185 requestDetails.setRequestInfo(createRequestInfo());
186 if (volumeGroup.getVolumeGroupName() != null) {
187 requestDetails.getRequestInfo().setInstanceName(volumeGroup.getVolumeGroupName());
189 requestDetails.setModelInfo(mapVolumeGroupModelInformation(volumeGroup));
190 requestDetails.setCloudConfiguration(mapCloudConfigurationVolume(vnf, volumeGroup));
191 requestDetails.setRequestParameters(createRequestParameters());
192 return requestDetails;
195 protected RequestDetails mapVnfRequestDetails(GenericVnf vnf) {
196 RequestDetails requestDetails = new RequestDetails();
197 requestDetails.setRequestInfo(createRequestInfo());
198 if (vnf.getVnfName() != null) {
199 requestDetails.getRequestInfo().setInstanceName(vnf.getVnfName());
201 requestDetails.setModelInfo(mapVnfModelInformation(vnf));
202 requestDetails.setRequestParameters(createRequestParameters());
203 return requestDetails;
206 protected RequestDetails mapServiceRequestDetails(ServiceInstance serviceInstance) {
207 RequestDetails requestDetails = new RequestDetails();
208 requestDetails.setRequestInfo(createRequestInfo());
209 if (serviceInstance.getServiceInstanceName() != null) {
210 requestDetails.getRequestInfo().setInstanceName(serviceInstance.getServiceInstanceName());
212 requestDetails.setModelInfo(mapServiceModelInformation(serviceInstance));
213 requestDetails.setRequestParameters(createRequestParameters());
214 return requestDetails;
217 protected RequestDetails mapNetworkRequestDetails(L3Network network) {
218 RequestDetails requestDetails = new RequestDetails();
219 requestDetails.setRequestInfo(createRequestInfo());
220 if (network.getNetworkName() != null) {
221 requestDetails.getRequestInfo().setInstanceName(network.getNetworkName());
223 requestDetails.setCloudConfiguration(mapCloudConfigurationNetwork(network));
224 requestDetails.setModelInfo(mapNetworkModelInformation(network));
225 requestDetails.setRequestParameters(createRequestParameters());
226 return requestDetails;
229 protected ModelInfo mapVfModuleModelInformation(VfModule vfModule, ModelType modelType) {
230 ModelInfo modelInfo = new ModelInfo();
231 modelInfo.setModelCustomizationId(vfModule.getModelCustomizationId());
232 modelInfo.setModelCustomizationUuid(vfModule.getModelCustomizationId());
233 modelInfo.setModelType(modelType);
237 protected ModelInfo mapVolumeGroupModelInformation(VolumeGroup volumeGroup) {
238 ModelInfo modelInfo = new ModelInfo();
239 modelInfo.setModelCustomizationId(volumeGroup.getModelCustomizationId());
240 modelInfo.setModelCustomizationUuid(volumeGroup.getModelCustomizationId());
241 modelInfo.setModelType(ModelType.volumeGroup);
245 protected ModelInfo mapServiceModelInformation(ServiceInstance serviceInstance) {
246 ModelInfo modelInfo = new ModelInfo();
247 modelInfo.setModelVersionId(serviceInstance.getModelVersionId());
248 modelInfo.setModelType(ModelType.service);
252 protected ModelInfo mapVnfModelInformation(GenericVnf vnf) {
253 ModelInfo modelInfo = new ModelInfo();
254 modelInfo.setModelCustomizationId(vnf.getModelCustomizationId());
255 modelInfo.setModelCustomizationUuid(vnf.getModelCustomizationId());
256 modelInfo.setModelType(ModelType.vnf);
260 protected ModelInfo mapNetworkModelInformation(L3Network network) {
261 ModelInfo modelInfo = new ModelInfo();
262 modelInfo.setModelType(ModelType.network);
263 modelInfo.setModelCustomizationId(network.getModelCustomizationId());
264 modelInfo.setModelCustomizationUuid(network.getModelCustomizationId());
268 public CloudConfiguration mapCloudConfiguration(GenericVnf vnf, VfModule vfModule) {
269 CloudConfiguration cloudConfig = new CloudConfiguration();
270 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
271 Optional<org.onap.so.client.aai.entities.Relationships> relationshipsOpt = wrapper.getRelationships();
272 String tenantId = null;
273 String cloudOwner = null;
274 String lcpRegionId = null;
275 if (relationshipsOpt.isPresent()) {
276 tenantId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
277 .map(item -> item.getURIKeys().get(TENANT_ID)).orElse(null);
278 cloudOwner = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
279 .map(item -> item.getURIKeys().get(CLOUD_OWNER)).orElse(null);
280 lcpRegionId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
281 .map(item -> item.getURIKeys().get(CLOUD_REGION_ID)).orElse(null);
284 if (tenantId == null || cloudOwner == null || lcpRegionId == null) {
285 Map<String, String[]> filters = createQueryRequest("vfModuleId", vfModule.getVfModuleId());
286 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
287 if (request.isPresent()) {
288 if (request.get().getRequestDetails() != null
289 && request.get().getRequestDetails().getCloudConfiguration() != null) {
290 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
291 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
293 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
294 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
296 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
297 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
301 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
304 cloudConfig.setTenantId(tenantId);
305 cloudConfig.setCloudOwner(cloudOwner);
306 cloudConfig.setLcpCloudRegionId(lcpRegionId);
310 public CloudConfiguration mapCloudConfigurationVolume(GenericVnf vnf, VolumeGroup volumeGroup) {
311 CloudConfiguration cloudConfig = new CloudConfiguration();
312 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
313 Optional<org.onap.so.client.aai.entities.Relationships> relationshipsOpt = wrapper.getRelationships();
314 String tenantId = null;
315 String cloudOwner = null;
316 String lcpRegionId = null;
317 if (relationshipsOpt.isPresent()) {
318 tenantId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
319 .map(item -> item.getURIKeys().get(TENANT_ID)).orElse(null);
320 cloudOwner = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
321 .map(item -> item.getURIKeys().get(CLOUD_OWNER)).orElse(null);
322 lcpRegionId = relationshipsOpt.get().getRelatedUris(AAIObjectType.TENANT).stream().findFirst()
323 .map(item -> item.getURIKeys().get(CLOUD_REGION_ID)).orElse(null);
326 if (tenantId == null || cloudOwner == null || lcpRegionId == null) {
327 Map<String, String[]> filters = createQueryRequest("volumeGroupId", volumeGroup.getVolumeGroupId());
328 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
329 if (request.isPresent()) {
330 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
331 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
332 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
334 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
337 cloudConfig.setTenantId(tenantId);
338 cloudConfig.setCloudOwner(cloudOwner);
339 cloudConfig.setLcpCloudRegionId(lcpRegionId);
343 public CloudConfiguration mapCloudConfigurationNetwork(L3Network network) {
344 CloudConfiguration cloudConfig = new CloudConfiguration();
345 String tenantId = null;
346 String cloudOwner = null;
347 String lcpRegionId = null;
349 Map<String, String[]> filters = createQueryRequest("networkId", network.getNetworkId());
350 Optional<ServiceInstancesRequest> request = findServiceInstanceRequest(filters);
351 if (request.isPresent()) {
352 if (request.get().getRequestDetails() != null
353 && request.get().getRequestDetails().getCloudConfiguration() != null) {
354 if (request.get().getRequestDetails().getCloudConfiguration().getTenantId() != null) {
355 tenantId = request.get().getRequestDetails().getCloudConfiguration().getTenantId();
357 if (request.get().getRequestDetails().getCloudConfiguration().getCloudOwner() != null) {
358 cloudOwner = request.get().getRequestDetails().getCloudConfiguration().getCloudOwner();
360 if (request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId() != null) {
361 lcpRegionId = request.get().getRequestDetails().getCloudConfiguration().getLcpCloudRegionId();
365 throw new CloudConfigurationNotFoundException(CLOUD_CONFIGURATION_COULD_NOT_BE_FOUND);
368 cloudConfig.setTenantId(tenantId);
369 cloudConfig.setCloudOwner(cloudOwner);
370 cloudConfig.setLcpCloudRegionId(lcpRegionId);
374 public Optional<ServiceInstancesRequest> findServiceInstanceRequest(Map<String, String[]> filters) {
375 List<InfraActiveRequests> completeRequests = infraActiveRequestsClient.getRequest(filters);
376 InfraActiveRequests foundRequest = completeRequests.get(0);
377 ServiceInstancesRequest siRequest;
379 siRequest = mapper.readValue(foundRequest.getRequestBody(), ServiceInstancesRequest.class);
380 return Optional.of(siRequest);
381 } catch (Exception e) {
382 logger.error("Could not read Create Instance Request", e);
384 return Optional.empty();
387 public Map<String, String[]> createQueryRequest(String name, String instanceId) {
388 Map<String, String[]> filters = new HashMap<>();
389 filters.put(name, new String[] {"EQ", instanceId});
390 filters.put("requestStatus", new String[] {"EQ", Status.COMPLETE.toString()});
391 filters.put("action", new String[] {"EQ", "createInstance"});
395 public RequestInfo createRequestInfo() {
396 RequestInfo requestInfo = new RequestInfo();
397 requestInfo.setSuppressRollback(false);
398 requestInfo.setSource(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
399 requestInfo.setRequestorId(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
403 public RequestParameters createRequestParameters() {
404 RequestParameters requestParams = new RequestParameters();
405 requestParams.setaLaCarte(true);
406 requestParams.setTestApi("GR_API");
407 return requestParams;
410 public VfModule getAAIVfModule(String vnfId, String vfModuleId) {
411 return this.getAaiResourcesClient()
412 .get(VfModule.class, AAIUriFactory.createResourceUri(AAIObjectType.VF_MODULE, vnfId, vfModuleId))
414 logger.debug("No Vf Module found in A&AI VnfId: {}" + ", VfModuleId: {}", vnfId, vfModuleId);
419 public GenericVnf getGenericVnf(String vnfId) {
420 return this.getAaiResourcesClient()
421 .get(GenericVnf.class, AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId))
423 logger.debug("No Generic VNF found in A&AI VnfId: {}", vnfId);
428 public VolumeGroup getVolumeGroup(String vnfId, String volumeGroupId) throws AAIEntityNotFound {
429 GenericVnf vnf = getGenericVnf(vnfId);
430 AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
431 List<AAIResourceUri> listVserverWrapper;
432 Optional<AAIResourceUri> volumeGroupURI;
433 if (wrapper.getRelationships().isPresent()) {
434 listVserverWrapper = wrapper.getRelationships().get().getRelatedUris(AAIObjectType.VOLUME_GROUP);
435 volumeGroupURI = listVserverWrapper.stream()
436 .filter(resourceURI -> resourceURI.getURIKeys().get("volume-group-id").equals(volumeGroupId))
439 throw new AAIEntityNotFound(
440 VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " volumeGroupId: " + volumeGroupId);
442 return this.getAaiResourcesClient().get(VolumeGroup.class, volumeGroupURI.get()).orElseGet(() -> {
443 logger.debug("No VolumeGroup in A&AI found: {}", vnfId);
448 public ServiceInstance getServiceInstance(String serviceInstanceId) {
449 return this.getAaiResourcesClient()
450 .get(ServiceInstance.class,
451 AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId))
453 logger.debug("No Service Instance found in A&AI ServiceInstanceId: {}", serviceInstanceId);
458 public L3Network getNetwork(String networkId) {
459 return this.getAaiResourcesClient()
460 .get(L3Network.class, AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId))
462 logger.debug("No Network found in A&AI NetworkId: {}", networkId);
467 public AAIResourcesClient getAaiResourcesClient() {
468 if (aaiResourcesClient == null) {
469 aaiResourcesClient = new AAIResourcesClient();
471 return aaiResourcesClient;
474 public void setAaiResourcesClient(AAIResourcesClient aaiResourcesClient) {
475 this.aaiResourcesClient = aaiResourcesClient;