/** * Copyright (c) Codice Foundation * <p/> * This is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser * General Public License as published by the Free Software Foundation, either version 3 of the * License, or any later version. * <p/> * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. A copy of the GNU Lesser General Public License * is distributed along with this program and can be found at * <http://www.gnu.org/licenses/lgpl.html>. */ package ddf.catalog.cache.solr.impl; import java.util.ArrayList; import java.util.List; import org.opengis.filter.Filter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ddf.catalog.data.types.Validation; import ddf.catalog.filter.FilterAdapter; import ddf.catalog.filter.FilterBuilder; import ddf.catalog.filter.FilterDelegate; import ddf.catalog.filter.delegate.ValidationQueryDelegate; import ddf.catalog.operation.Query; import ddf.catalog.operation.QueryRequest; import ddf.catalog.operation.impl.QueryImpl; import ddf.catalog.operation.impl.QueryRequestImpl; import ddf.catalog.source.UnsupportedQueryException; public class ValidationQueryFactory { private static final Logger LOGGER = LoggerFactory.getLogger(ValidationQueryFactory.class); private FilterAdapter adapter; private FilterBuilder builder; public ValidationQueryFactory(FilterAdapter filterAdapter, FilterBuilder filterBuilder) { adapter = filterAdapter; builder = filterBuilder; } QueryRequest getQueryRequestWithValidationFilter(QueryRequest input, Boolean showErrors, Boolean showWarnings) { Query inputQuery = input.getQuery(); try { if ((showErrors && showWarnings) || adapter.adapt(input.getQuery(), new ValidationQueryDelegate())) { return input; } } catch (UnsupportedQueryException e) { LOGGER.info("This attribute filter is not supported by ValidationQueryDelegate.", e); } List<Filter> filters = new ArrayList<>(); if (!showErrors) { filters.add(builder.attribute(Validation.VALIDATION_ERRORS) .is() .empty()); } if (!showWarnings) { filters.add(builder.attribute(Validation.VALIDATION_WARNINGS) .is() .empty()); } QueryImpl query = new QueryImpl(builder.allOf(builder.allOf(filters), inputQuery), inputQuery.getStartIndex(), inputQuery.getPageSize(), inputQuery.getSortBy(), inputQuery.requestsTotalResultsCount(), inputQuery.getTimeoutMillis()); return new QueryRequestImpl(query, input.isEnterprise(), input.getSourceIds(), input.getProperties()); } public Filter getFilterWithValidationFilter() { return builder.anyOf(builder.attribute(Validation.VALIDATION_ERRORS) .is() .like() .text(FilterDelegate.WILDCARD_CHAR), builder.attribute(Validation.VALIDATION_ERRORS) .empty(), builder.attribute(Validation.VALIDATION_WARNINGS) .is() .like() .text(FilterDelegate.WILDCARD_CHAR), builder.attribute(Validation.VALIDATION_WARNINGS) .empty()); } QueryRequest getQueryRequestWithValidationFilter(QueryRequest input) { return getQueryRequestWithValidationFilter(input, false, true); } }