2017-12-17 22:34:24 +01:00
|
|
|
package eu.eudat.managers;
|
|
|
|
|
2018-03-21 13:11:02 +01:00
|
|
|
import eu.eudat.data.query.definition.TableQuery;
|
|
|
|
import eu.eudat.data.query.definition.helpers.ColumnOrderings;
|
|
|
|
import eu.eudat.data.query.definition.helpers.Ordering;
|
2017-12-17 22:34:24 +01:00
|
|
|
import eu.eudat.queryable.QueryableList;
|
2018-03-21 11:16:32 +01:00
|
|
|
import eu.eudat.queryable.queryableentity.DataEntity;
|
2017-12-17 22:34:24 +01:00
|
|
|
|
2018-02-23 11:36:51 +01:00
|
|
|
import java.util.Arrays;
|
2018-02-02 16:24:06 +01:00
|
|
|
import java.util.Collection;
|
|
|
|
|
2017-12-17 22:34:24 +01:00
|
|
|
public class PaginationManager {
|
|
|
|
|
2018-03-21 13:11:02 +01:00
|
|
|
public static <T extends DataEntity> QueryableList<T> applyPaging(QueryableList<T> items, TableQuery tableRequest) throws Exception {
|
2018-02-02 16:24:06 +01:00
|
|
|
if (tableRequest.getOrderings() != null) applyOrder(items, tableRequest);
|
|
|
|
if (tableRequest.getLength() != null) items.take(tableRequest.getLength());
|
|
|
|
if (tableRequest.getOffset() != null) items.skip(tableRequest.getOffset());
|
2018-02-23 11:36:51 +01:00
|
|
|
if (tableRequest.getSelection() != null && tableRequest.getSelection().getFields() != null && tableRequest.getSelection().getFields().length > 0)
|
|
|
|
items.withFields(Arrays.asList(tableRequest.getSelection().getFields()));
|
2017-12-17 22:34:24 +01:00
|
|
|
return items;
|
|
|
|
}
|
2018-01-25 16:24:21 +01:00
|
|
|
|
2018-03-21 13:11:02 +01:00
|
|
|
public static <T extends DataEntity> void applyOrder(QueryableList<T> items, TableQuery tableRequest) throws Exception {
|
2018-01-25 16:24:21 +01:00
|
|
|
ColumnOrderings columnOrderings = tableRequest.getOrderings();
|
2018-02-02 16:24:06 +01:00
|
|
|
for (Ordering ordering : columnOrderings.getFieldOrderings()) {
|
|
|
|
if (ordering.getOrderByType() == Ordering.OrderByType.ASC)
|
2018-02-16 11:34:02 +01:00
|
|
|
applyAscOrder(items, ordering);
|
2018-02-02 16:24:06 +01:00
|
|
|
if (ordering.getOrderByType() == Ordering.OrderByType.DESC) {
|
2018-02-16 11:34:02 +01:00
|
|
|
applyDescOrder(items, ordering);
|
2018-02-02 16:24:06 +01:00
|
|
|
}
|
2018-01-25 16:24:21 +01:00
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
2018-02-02 16:24:06 +01:00
|
|
|
|
2018-02-20 08:50:17 +01:00
|
|
|
private static <T extends DataEntity> void applyAscOrder(QueryableList<T> items, Ordering ordering) {
|
2018-02-02 16:24:06 +01:00
|
|
|
if (ordering.getColumnType() == Ordering.ColumnType.COUNT) {
|
|
|
|
items.orderBy((builder, root) -> builder.asc(builder.size(root.<Collection>get(ordering.getFieldName()))));
|
|
|
|
} else if (ordering.getColumnType() == Ordering.ColumnType.JOIN_COLUMN) {
|
|
|
|
String[] fields = ordering.getFieldName().split(":");
|
|
|
|
items.orderBy((builder, root) -> builder.asc(root.get(fields[0]).get(fields[1])));
|
|
|
|
} else {
|
|
|
|
items.orderBy((builder, root) -> builder.asc(root.get(ordering.getFieldName())));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-02-20 08:50:17 +01:00
|
|
|
private static <T extends DataEntity> void applyDescOrder(QueryableList<T> items, Ordering ordering) {
|
2018-02-02 16:24:06 +01:00
|
|
|
if (ordering.getColumnType() == Ordering.ColumnType.COUNT) {
|
|
|
|
items.orderBy((builder, root) -> builder.desc(builder.size(root.<Collection>get(ordering.getFieldName()))));
|
|
|
|
} else if (ordering.getColumnType() == Ordering.ColumnType.JOIN_COLUMN) {
|
|
|
|
String[] fields = ordering.getFieldName().split(":");
|
|
|
|
items.orderBy((builder, root) -> builder.desc(root.get(fields[0]).get(fields[1])));
|
|
|
|
} else {
|
|
|
|
items.orderBy((builder, root) -> builder.desc(root.get(ordering.getFieldName())));
|
|
|
|
}
|
|
|
|
}
|
2017-12-17 22:34:24 +01:00
|
|
|
}
|