![JAR search and dependency download from the Maven repository](/logo.png)
com.bq.oss.lib.queries.builder.QueryParametersBuilder Maven / Gradle / Ivy
package com.bq.oss.lib.queries.builder;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import com.bq.oss.lib.queries.exception.InvalidParameterException;
import com.bq.oss.lib.queries.exception.MalformedJsonQueryException;
import com.bq.oss.lib.queries.jaxrs.QueryParameters;
import com.bq.oss.lib.queries.parser.AggregationParser;
import com.bq.oss.lib.queries.parser.PaginationParser;
import com.bq.oss.lib.queries.parser.QueryParser;
import com.bq.oss.lib.queries.parser.SearchParser;
import com.bq.oss.lib.queries.parser.SortParser;
import com.bq.oss.lib.queries.request.Aggregation;
import com.bq.oss.lib.queries.request.Pagination;
import com.bq.oss.lib.queries.request.ResourceQuery;
import com.bq.oss.lib.queries.request.Search;
import com.bq.oss.lib.queries.request.Sort;
/**
* @author Francisco Sanchez on 28/05/15.
*/
public class QueryParametersBuilder {
private final QueryParser queryParser;
private final AggregationParser aggregationParser;
private final SortParser sortParser;
private final PaginationParser paginationParser;
private final SearchParser searchParser;
public QueryParametersBuilder(QueryParser queryParser, AggregationParser aggregationParser, SortParser sortParser,
PaginationParser paginationParser, SearchParser searchParser) {
this.queryParser = queryParser;
this.aggregationParser = aggregationParser;
this.sortParser = sortParser;
this.paginationParser = paginationParser;
this.searchParser = searchParser;
}
public QueryParameters createQueryParameters(int page, int pageSize, int maxPageSize, Optional sort,
Optional> queries, Optional> conditions, Optional aggregation, Optional search) {
return new QueryParameters(buildPagination(page, pageSize, maxPageSize), buildSort(sort), buildResourceQueries(queries),
buildResourceQueries(conditions), buildAggregation(aggregation), buildSearch(search));
}
private Pagination buildPagination(int page, int pageSize, int maxPageSize) {
return paginationParser.parse(page, pageSize, maxPageSize);
}
private Optional buildSort(Optional sort) {
try {
return sort.isPresent() ? Optional.of(sortParser.parse(sort.get())) : Optional.empty();
} catch (MalformedJsonQueryException | IllegalArgumentException e) {
throw new InvalidParameterException(InvalidParameterException.Parameter.SORT, sort, e.getMessage(), e);
}
}
private Optional> buildResourceQueries(Optional> optionalQueries) {
return optionalQueries.map(queries -> {
return queries.stream().map(stringQuery -> buildQuery(stringQuery, queryParser)).collect(Collectors.toList());
});
}
private ResourceQuery buildQuery(String query, QueryParser queryParser) {
try {
return queryParser.parse(query);
} catch (MalformedJsonQueryException e) {
throw new InvalidParameterException(InvalidParameterException.Parameter.QUERY, query, e.getMessage(), e);
}
}
private Optional buildAggregation(Optional aggregation) {
if (aggregation.isPresent()) {
try {
return Optional.of(aggregationParser.parse(aggregation.get()));
} catch (MalformedJsonQueryException e) {
throw new InvalidParameterException(InvalidParameterException.Parameter.AGGREGATION, aggregation, e.getMessage(), e);
}
}
return Optional.empty();
}
private Optional buildSearch(Optional optionalSearch) {
if (optionalSearch.isPresent()) {
try {
return Optional.of(searchParser.parse(optionalSearch.get()));
} catch (MalformedJsonQueryException e) {
throw new InvalidParameterException(InvalidParameterException.Parameter.SEARCH, optionalSearch, e.getMessage(), e);
}
}
return Optional.empty();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy