Skip to content

Commit

Permalink
add create sort order for record
Browse files Browse the repository at this point in the history
  • Loading branch information
SebastianKuehnau committed Jun 30, 2023
1 parent 3241294 commit dfc3de7
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/main/java/io/seventytwo/vaadinjooq/util/VaadinJooqUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@
import com.vaadin.flow.data.provider.SortDirection;
import org.jooq.Field;
import org.jooq.OrderField;
import org.jooq.SortField;
import org.jooq.Table;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import static java.text.MessageFormat.format;
import static org.jooq.impl.DSL.field;

/**
* A utility class that helps to convert between Vaadin and jOOQ
Expand Down Expand Up @@ -39,4 +43,30 @@ public static List<OrderField<?>> orderFields(Table<?> table, Query<?, ?> query)
return orderFields;
}

/**
* Convert a Java Record to {@link OrderField}
*
* @param recordType
* @param query The {@link Query}
* @return a {@link List} of {@link OrderField}
*/
public static List<? extends OrderField<?>> createSortOrder(Class<?> recordType, Query<?, ?> query) {

return query.getSortOrders().stream()
.map(querySortOrder -> mapFieldsOrThrowException(recordType, querySortOrder))
.collect(Collectors.toList());
}

private static SortField<?> mapFieldsOrThrowException(Class<?> recordType, QuerySortOrder querySortOrder) {
Arrays.stream(recordType.getRecordComponents())
.filter(recordComponent -> !querySortOrder.getSorted().toLowerCase().equals(recordComponent.getName().toLowerCase()))
.findAny()
.orElseThrow(() -> {
throw new IllegalArgumentException(format("Field {0} is not a field of {1}", querySortOrder.getSorted(), recordType.getName()));
});

return querySortOrder.getDirection() == SortDirection.ASCENDING ?
field(querySortOrder.getSorted()).asc() : field(querySortOrder.getSorted()).desc();
}

}

0 comments on commit dfc3de7

Please sign in to comment.