diff options
author | Bogumil Zebek <bogumil.zebek@nokia.com> | 2020-01-14 12:00:51 +0100 |
---|---|---|
committer | Zebek Bogumil <bogumil.zebek@nokia.com> | 2020-01-17 07:02:00 +0100 |
commit | e2d69b23de157ab9a105a3b20f98c441106d204a (patch) | |
tree | 115d2731f8855e71d918f530ad6948801a8f0829 /src/main | |
parent | b9c324e98a42ba7af4c7c8e5ac4b5482e7509b8c (diff) |
Extract query
Issue-ID: DCAEGEN2-2019
Signed-off-by: Zebek Bogumil <bogumil.zebek@nokia.com>
Change-Id: I5f22589af67e11bf5bf7292f95df9f416007a15f
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java | 97 | ||||
-rw-r--r-- | src/main/java/io/swagger/api/impl/DcaeServiceTypesQueryStatement.java | 184 |
2 files changed, 201 insertions, 80 deletions
diff --git a/src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java b/src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java index 13f1540..3a08daa 100644 --- a/src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java +++ b/src/main/java/io/swagger/api/impl/DcaeServiceTypesApiServiceImpl.java @@ -3,6 +3,7 @@ * dcae-inventory * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2020 Nokia Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -88,86 +89,15 @@ public class DcaeServiceTypesApiServiceImpl extends DcaeServiceTypesApiService { DateTime createdCutoff = DateTime.now(DateTimeZone.UTC); try (Handle jdbiHandle = InventoryDAOManager.getInstance().getHandle()) { - StringBuilder sb = new StringBuilder("select * from "); + final String queryStatement = DcaeServiceTypesQueryStatement.create(typeName, onlyLatest, onlyActive, + vnfType, serviceId, serviceLocation, asdcServiceId, asdcResourceId, owner, application, component); - if (onlyLatest) { - // Use the view which filters types that are of only the latest versions - sb.append("dcae_service_types_latest"); - } else { - sb.append("dcae_service_types"); - } - - List<String> whereClauses = new ArrayList<>(); - - if (typeName != null) { - if (!typeName.contains("*")) { - whereClauses.add(":typeName = type_name"); - } - else { - typeName = typeName.replaceAll("\\*", "%"); - whereClauses.add("type_name LIKE :typeName"); - } - } - - if (vnfType != null) { - whereClauses.add("lower(:vnfType) = any(lower(vnf_types\\:\\:text)\\:\\:text[])"); - } - - if (serviceId != null) { - whereClauses.add("(:serviceId = any(service_ids) or service_ids = \'{}\' or service_ids is null)"); - } - - if (serviceLocation != null) { - whereClauses.add("(:serviceLocation = any(service_locations) or service_locations = \'{}\' or service_locations is null)"); - } - - if (asdcServiceId != null) { - if (asdcServiceId.equalsIgnoreCase("NONE")) { - whereClauses.add("asdc_service_id is null"); - } else { - whereClauses.add(":asdcServiceId = asdc_service_id"); - } - } - - if (asdcResourceId != null) { - if (asdcResourceId.equalsIgnoreCase("NONE")) { - whereClauses.add("asdc_resource_id is null"); - } else { - whereClauses.add(":asdcResourceId = asdc_resource_id"); - } - } - - if (owner != null) { - whereClauses.add(":owner = owner"); - } - - if (application != null) { - whereClauses.add(":application = application"); - } - - if (component != null) { - whereClauses.add(":component = component"); - } - - whereClauses.add("created < :createdCutoff"); - - if (onlyActive) { - whereClauses.add("deactivated is null"); - } - - if (!whereClauses.isEmpty()) { - sb.append(" where "); - sb.append(String.join(" and ", whereClauses)); - } + metricsLogger.info("Query created as: {}." + queryStatement); - // Sort by created timestamp - always descending. - sb.append(" order by created desc"); - - metricsLogger.info("Query created as: {}." + sb.toString()); - - Query<DCAEServiceTypeObject> query = jdbiHandle.createQuery(sb.toString()).map(new DCAEServiceTypeObjectMapper()); + Query<DCAEServiceTypeObject> query = jdbiHandle.createQuery(queryStatement).map(new DCAEServiceTypeObjectMapper()); if (typeName != null) { + typeName = resolveTypeName(typeName); query.bind("typeName", typeName); } @@ -190,15 +120,15 @@ public class DcaeServiceTypesApiServiceImpl extends DcaeServiceTypesApiService { if (asdcResourceId != null && !"NONE".equalsIgnoreCase(asdcResourceId)) { query.bind("asdcResourceId", asdcResourceId); } - + if (application != null) { query.bind("application", application); } - + if (component != null) { query.bind("component", component); } - + if (owner != null) { query.bind("owner", owner); } @@ -246,7 +176,7 @@ public class DcaeServiceTypesApiServiceImpl extends DcaeServiceTypesApiService { response.setLinks(navigationLinks); debugLogger.debug("Response: {}." + response.toString()); - + return Response.ok().entity(response).build(); } @@ -263,6 +193,13 @@ public class DcaeServiceTypesApiServiceImpl extends DcaeServiceTypesApiService { return Response.ok().entity(createDCAEServiceType(serviceTypeObject, uriInfo)).build(); } + static String resolveTypeName(String typeName){ + if (typeName.contains("*")) { + return typeName.replaceAll("\\*", "%"); + } + return typeName; + } + /** * Create a DCAE service type database object * diff --git a/src/main/java/io/swagger/api/impl/DcaeServiceTypesQueryStatement.java b/src/main/java/io/swagger/api/impl/DcaeServiceTypesQueryStatement.java new file mode 100644 index 0000000..5a1f201 --- /dev/null +++ b/src/main/java/io/swagger/api/impl/DcaeServiceTypesQueryStatement.java @@ -0,0 +1,184 @@ +/*- + * ============LICENSE_START======================================================= + * dcae-inventory + * ================================================================================ + * Copyright (C) 2020 Nokia Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package io.swagger.api.impl; + +import org.glassfish.jersey.internal.util.Producer; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +public class DcaeServiceTypesQueryStatement { + private final StringBuilder sb = new StringBuilder("select * from "); + private final List<String> whereClauses = new ArrayList<>(); + + private static DcaeServiceTypesQueryStatement create() { + return new DcaeServiceTypesQueryStatement(); + } + + + public static String create(String typeName, Boolean onlyLatest, Boolean onlyActive, String vnfType, + String serviceId, String serviceLocation, String asdcServiceId, String asdcResourceId, + String owner, String application, String component) { + + String from = resolveFrom(onlyLatest); + + final DcaeServiceTypesQueryStatement queryStatement = DcaeServiceTypesQueryStatement.create(); + queryStatement.from(from) + .where() + .andIfNotNull(typeName, queryStatement::typeName) + .andIfNotNull(vnfType, queryStatement::vnfType) + .andIfNotNull(serviceId, queryStatement::serviceId) + .andIfNotNull(serviceLocation, queryStatement::serviceLocation) + .andIfNotNull(asdcServiceId, queryStatement::asdcServiceId) + .andIfNotNull(asdcResourceId, queryStatement::asdcResourceId) + .andIfNotNull(owner, queryStatement::owner) + .andIfNotNull(application, queryStatement::application) + .andIfNotNull(component, queryStatement::component) + .and().createdStatement() + .andIfTrue(onlyActive, queryStatement::activeOnly); + + return queryStatement.build(); + } + + private DcaeServiceTypesQueryStatement where() { + return this; + } + + private DcaeServiceTypesQueryStatement and() { + return this; + } + + private DcaeServiceTypesQueryStatement andIfNotNull(String value, Function<String, DcaeServiceTypesQueryStatement> callback) { + if (value != null) { + return callback.apply(value); + } + + return this; + } + + private DcaeServiceTypesQueryStatement andIfTrue(boolean value, Producer<DcaeServiceTypesQueryStatement> callback) { + if (value) { + return callback.call(); + } + + return this; + } + + private DcaeServiceTypesQueryStatement from(String from) { + sb.append(from); + return this; + } + + + private DcaeServiceTypesQueryStatement typeName(String typeName) { + if (!typeName.contains("*")) { + whereClauses.add(":typeName = type_name"); + } else { + whereClauses.add("type_name LIKE :typeName"); + } + + return this; + } + + private DcaeServiceTypesQueryStatement vnfType(String vnfType) { + whereClauses.add("lower(:vnfType) = any(lower(vnf_types\\:\\:text)\\:\\:text[])"); + return this; + } + + private DcaeServiceTypesQueryStatement serviceId(String serviceId) { + whereClauses.add("(:serviceId = any(service_ids) or service_ids = \'{}\' or service_ids is null)"); + return this; + } + + private DcaeServiceTypesQueryStatement serviceLocation(String serviceLocation) { + whereClauses.add("(:serviceLocation = any(service_locations) or service_locations = \'{}\' or service_locations is null)"); + return this; + } + + private DcaeServiceTypesQueryStatement asdcServiceId(String asdcServiceId) { + if (asdcServiceId.equalsIgnoreCase("NONE")) { + whereClauses.add("asdc_service_id is null"); + } else { + whereClauses.add(":asdcServiceId = asdc_service_id"); + } + + return this; + } + + private DcaeServiceTypesQueryStatement asdcResourceId(String asdcResourceId) { + if (asdcResourceId.equalsIgnoreCase("NONE")) { + whereClauses.add("asdc_resource_id is null"); + } else { + whereClauses.add(":asdcResourceId = asdc_resource_id"); + } + + return this; + } + + private DcaeServiceTypesQueryStatement owner(String owner) { + whereClauses.add(":owner = owner"); + return this; + } + + private DcaeServiceTypesQueryStatement application(String application) { + whereClauses.add(":application = application"); + return this; + } + + + private DcaeServiceTypesQueryStatement component(String component) { + whereClauses.add(":component = component"); + return this; + } + + private DcaeServiceTypesQueryStatement createdStatement() { + whereClauses.add("created < :createdCutoff"); + return this; + } + + private DcaeServiceTypesQueryStatement activeOnly() { + whereClauses.add("deactivated is null"); + return this; + } + + private String build() { + if (!whereClauses.isEmpty()) { + sb.append(" where "); + sb.append(String.join(" and ", whereClauses)); + } + + // Sort by created timestamp - always descending. + sb.append(" order by created desc"); + + return sb.toString(); + } + + private static String resolveFrom(Boolean onlyLatest) { + String from; + if (onlyLatest) { + // Use the view which filters types that are of only the latest versions + from = "dcae_service_types_latest"; + } else { + from = "dcae_service_types"; + } + return from; + } +} |