argos/dmp-backend/web/src/main/java/eu/eudat/logic/managers/PaginationManager.java

57 lines
2.9 KiB
Java
Raw Normal View History

2018-06-27 12:29:21 +02:00
package eu.eudat.logic.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;
import eu.eudat.queryable.QueryableList;
2018-03-21 11:16:32 +01:00
import eu.eudat.queryable.queryableentity.DataEntity;
2018-02-23 11:36:51 +01:00
import java.util.Arrays;
2018-02-02 16:24:06 +01:00
import java.util.Collection;
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()));
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())));
}
}
}