private void setSortOrder(List<GridSortOrder<T>> order, boolean userOriginated) { Objects.requireNonNull(order, "Sort order list cannot be null"); // Update client state to display sort order. List<String> sortColumns = new ArrayList<>(); List<SortDirection> directions = new ArrayList<>(); order.stream().forEach(sortOrder -> { sortColumns.add(sortOrder.getSorted().getInternalId()); directions.add(sortOrder.getDirection()); }); getState().sortColumns = sortColumns.toArray(new String[0]); getState().sortDirs = directions.toArray(new SortDirection[0]); sortOrder.clear(); sortOrder.addAll(order); sort(userOriginated); }
/** * Creates a comparator for grid to sort rows. * * @return the comparator based on column sorting information. */ protected SerializableComparator<T> createSortingComparator() { /* * thenComparing is defined to return a serializable comparator as long * as both original comparators are also serializable */ BinaryOperator<SerializableComparator<T>> operator = (comparator1, comparator2) -> comparator1.thenComparing(comparator2)::compare; return sortOrder.stream().map( order -> order.getSorted().getComparator(order.getDirection())) .reduce((x, y) -> 0, operator); }
private void sort(boolean userOriginated) { // Set sort orders // In-memory comparator getDataCommunicator().setInMemorySorting(createSortingComparator()); // Back-end sort properties List<QuerySortOrder> sortProperties = new ArrayList<>(); sortOrder.stream().map( order -> order.getSorted().getSortOrder(order.getDirection())) .forEach(s -> s.forEach(sortProperties::add)); getDataCommunicator().setBackEndSorting(sortProperties); // Close grid editor if it's open. if (getEditor().isOpen()) { getEditor().cancel(); } fireEvent(new SortEvent<>(this, new ArrayList<>(sortOrder), userOriginated)); }
.filter(order -> !order.getSorted().equals(column)) .collect(Collectors.toList()); if (filteredSortOrder.size() < sortOrder.size()) {
protected List<SortOrder> convertToDataGridSortOrder(List<GridSortOrder<E>> gridSortOrder) { if (CollectionUtils.isEmpty(gridSortOrder)) { return Collections.emptyList(); } return gridSortOrder.stream() .map(sortOrder -> { Column column = getColumnByGridColumn(sortOrder.getSorted()); return new SortOrder(column != null ? column.getId() : null, WebWrapperUtils.convertToDataGridSortDirection(sortOrder.getDirection())); }) .collect(Collectors.toList()); }
protected boolean isSortPropertySettingsChanged(String settingsSortColumnId, String settingsSortDirection) { List<GridSortOrder<E>> sortOrders = component.getSortOrder(); String columnId = null; String sortDirection = null; if (!sortOrders.isEmpty()) { GridSortOrder<E> sortOrder = sortOrders.get(0); columnId = sortOrder.getSorted().getId(); sortDirection = sortOrder.getDirection().toString(); } if (!Objects.equals(columnId, settingsSortColumnId) || !Objects.equals(sortDirection, settingsSortDirection)) { return true; } return false; }
GridSortOrder<E> sortOrder = sortOrders.get(0); columnsElem.addAttribute("sortColumnId", sortOrder.getSorted().getId()); columnsElem.addAttribute("sortDirection", sortOrder.getDirection().toString());
protected void onSort(com.vaadin.event.SortEvent<GridSortOrder<E>> e) { if (component.getDataProvider() instanceof SortableDataProvider) { //noinspection unchecked SortableDataProvider<E> dataProvider = (SortableDataProvider<E>) component.getDataProvider(); List<GridSortOrder<E>> sortOrders = e.getSortOrder(); if (sortOrders.isEmpty()) { dataProvider.resetSortOrder(); } else { GridSortOrder<E> sortOrder = sortOrders.get(0); Column<E> column = getColumnByGridColumn(sortOrder.getSorted()); if (column != null) { MetaPropertyPath propertyPath = column.getPropertyPath(); boolean ascending = com.vaadin.shared.data.sort.SortDirection.ASCENDING .equals(sortOrder.getDirection()); dataProvider.sort(new Object[]{propertyPath}, new boolean[]{ascending}); } } } List<SortOrder> sortOrders = convertToDataGridSortOrder(e.getSortOrder()); SortEvent event = new SortEvent(WebAbstractDataGrid.this, sortOrders, e.isUserOriginated()); publish(SortEvent.class, event); }