Skip to content

Commit

Permalink
Add filter type parameter for Query
Browse files Browse the repository at this point in the history
Change-Id: If9554c67900cc854e3ba6912fefad19e043b1d62
  • Loading branch information
Henri Sara committed Nov 21, 2016
1 parent 848feaa commit dd907e8
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 24 deletions.
Expand Up @@ -30,8 +30,8 @@
*/ */
public class BackEndDataProvider<T> extends AbstractDataProvider<T> { public class BackEndDataProvider<T> extends AbstractDataProvider<T> {


private final SerializableFunction<Query, Stream<T>> request; private final SerializableFunction<Query<?>, Stream<T>> request;
private final SerializableFunction<Query, Integer> sizeCallback; private final SerializableFunction<Query<?>, Integer> sizeCallback;


/** /**
* Constructs a new DataProvider to request data from an arbitrary back end * Constructs a new DataProvider to request data from an arbitrary back end
Expand All @@ -42,8 +42,9 @@ public class BackEndDataProvider<T> extends AbstractDataProvider<T> {
* @param sizeCallback * @param sizeCallback
* function that return the amount of data in back end for query * function that return the amount of data in back end for query
*/ */
public BackEndDataProvider(SerializableFunction<Query, Stream<T>> request, public BackEndDataProvider(
SerializableFunction<Query, Integer> sizeCallback) { SerializableFunction<Query<?>, Stream<T>> request,
SerializableFunction<Query<?>, Integer> sizeCallback) {
Objects.requireNonNull(request, "Request function can't be null"); Objects.requireNonNull(request, "Request function can't be null");
Objects.requireNonNull(sizeCallback, "Size callback can't be null"); Objects.requireNonNull(sizeCallback, "Size callback can't be null");
this.request = request; this.request = request;
Expand All @@ -68,13 +69,14 @@ public int size(Query query) {
* directions * directions
* @return new data provider with modified sorting * @return new data provider with modified sorting
*/ */
public BackEndDataProvider<T> sortingBy(List<SortOrder<String>> sortOrders) { public BackEndDataProvider<T> sortingBy(
List<SortOrder<String>> sortOrders) {
return new BackEndDataProvider<>(query -> { return new BackEndDataProvider<>(query -> {
List<SortOrder<String>> queryOrder = new ArrayList<>( List<SortOrder<String>> queryOrder = new ArrayList<>(
query.getSortOrders()); query.getSortOrders());
queryOrder.addAll(sortOrders); queryOrder.addAll(sortOrders);
return request.apply(new Query(query.getLimit(), query.getOffset(), return request.apply(new Query<>(query.getLimit(),
queryOrder, query.getFilters())); query.getOffset(), queryOrder, query.getFilter()));
}, sizeCallback); }, sizeCallback);
} }


Expand Down
37 changes: 20 additions & 17 deletions server/src/main/java/com/vaadin/server/data/Query.java
Expand Up @@ -18,20 +18,23 @@
import java.io.Serializable; import java.io.Serializable;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Optional;


/** /**
* Query object used to request data from a backend. Contains index limits, * Immutable query object used to request data from a backend. Contains index
* sorting and filtering information. * limits, sorting and filtering information.
*
* @param <F>
* filter type
* *
* @since 8.0 * @since 8.0
*/ */
public class Query implements Serializable { public class Query<F> implements Serializable {


private final int offset; private final int offset;
private final int limit; private final int limit;
private final List<SortOrder<String>> sortOrders; private final List<SortOrder<String>> sortOrders;
private final Set<Object> filters; private final F filter;


/** /**
* Constructs a Query for all rows from 0 to {@link Integer#MAX_VALUE} * Constructs a Query for all rows from 0 to {@link Integer#MAX_VALUE}
Expand All @@ -41,21 +44,21 @@ public Query() {
offset = 0; offset = 0;
limit = Integer.MAX_VALUE; limit = Integer.MAX_VALUE;
sortOrders = Collections.emptyList(); sortOrders = Collections.emptyList();
filters = Collections.emptySet(); filter = null;
} }


/** /**
* Constructs a Query for all rows from 0 to {@link Integer#MAX_VALUE} with * Constructs a Query for all rows from 0 to {@link Integer#MAX_VALUE} with
* filtering. * filtering.
* *
* @param filters * @param filter
* set of back end filters * back end filter of a suitable type for the data provider
*/ */
public Query(Set<Object> filters) { public Query(F filter) {
offset = 0; offset = 0;
limit = Integer.MAX_VALUE; limit = Integer.MAX_VALUE;
sortOrders = Collections.emptyList(); sortOrders = Collections.emptyList();
this.filters = filters; this.filter = filter;
} }


/** /**
Expand All @@ -68,15 +71,15 @@ public Query(Set<Object> filters) {
* fetched item count * fetched item count
* @param sortOrders * @param sortOrders
* sorting order for fetching * sorting order for fetching
* @param filters * @param filter
* filtering for fetching * filtering for fetching
*/ */
public Query(int offset, int limit, List<SortOrder<String>> sortOrders, public Query(int offset, int limit, List<SortOrder<String>> sortOrders,
Set<Object> filters) { F filter) {
this.offset = offset; this.offset = offset;
this.limit = limit; this.limit = limit;
this.sortOrders = sortOrders; this.sortOrders = sortOrders;
this.filters = filters; this.filter = filter;
} }


/** /**
Expand Down Expand Up @@ -110,11 +113,11 @@ public List<SortOrder<String>> getSortOrders() {
} }


/** /**
* Gets the filters for items to fetch. * Gets the filter for items to fetch.
* *
* @return set of filters * @return optional filter
*/ */
public Set<Object> getFilters() { public Optional<F> getFilter() {
return filters; return Optional.ofNullable(filter);
} }
} }

0 comments on commit dd907e8

Please sign in to comment.