@Override public Stream<T> fetchChildren( HierarchicalQuery<T, SerializablePredicate<T>> query) { if (!treeData.contains(query.getParent())) { throw new IllegalArgumentException("The queried item " + query.getParent() + " could not be found in the backing TreeData. " + "Did you forget to refresh this data provider after item removal?"); } Stream<T> childStream = getFilteredStream( treeData.getChildren(query.getParent()).stream(), query.getFilter()); Optional<Comparator<T>> comparing = Stream .of(query.getInMemorySorting(), sortOrder) .filter(c -> c != null) .reduce((c1, c2) -> c1.thenComparing(c2)); if (comparing.isPresent()) { childStream = childStream.sorted(comparing.get()); } return childStream.skip(query.getOffset()).limit(query.getLimit()); }
private HierarchicalQuery<T, F> mixInSortOrders( HierarchicalQuery<T, F> query) { if (sortOrders.isEmpty()) { return query; } Set<String> sortedPropertyNames = query.getSortOrders().stream() .map(SortOrder::getSorted).collect(Collectors.toSet()); List<QuerySortOrder> combinedSortOrders = Stream .concat(query.getSortOrders().stream(), sortOrders.stream() .filter(order -> !sortedPropertyNames .contains(order.getSorted()))) .collect(Collectors.toList()); return new HierarchicalQuery<>(query.getOffset(), query.getLimit(), combinedSortOrders, query.getInMemorySorting(), query.getFilter().orElse(null), query.getParent()); }
@Override public int size(Query<T, C> t) { if (t instanceof HierarchicalQuery<?, ?>) { return dataProvider.size(new HierarchicalQuery<>( t.getOffset(), t.getLimit(), t.getSortOrders(), t.getInMemorySorting(), getFilter(t), ((HierarchicalQuery<T, C>) t).getParent())); } throw new IllegalArgumentException( "Hierarchical data provider doesn't support non-hierarchical queries"); }
@Override public Stream<T> fetch(Query<T, C> t) { if (t instanceof HierarchicalQuery<?, ?>) { return dataProvider.fetch(new HierarchicalQuery<>( t.getOffset(), t.getLimit(), t.getSortOrders(), t.getInMemorySorting(), getFilter(t), ((HierarchicalQuery<T, C>) t).getParent())); } throw new IllegalArgumentException( "Hierarchical data provider doesn't support non-hierarchical queries"); } };
@Override public int getChildCount(HierarchicalQuery<T, SerializablePredicate<T>> query) { if (treeItems.getState() == BindingState.INACTIVE) { return 0; } return treeItems.getChildCount(query.getParent()); }
@Override public Stream<T> fetchChildren(HierarchicalQuery<T, SerializablePredicate<T>> query) { if (treeItems.getState() == BindingState.INACTIVE) { return Stream.empty(); } return treeItems.getChildren(query.getParent()) .skip(query.getOffset()) .limit(query.getLimit()); }
@Override public Stream<T> fetchChildren(HierarchicalQuery<T, SerializablePredicate<T>> query) { if (dataGridItems.getState() == BindingState.INACTIVE) { return Stream.empty(); } return getTreeDataGridSource().getChildren(query.getParent()) .skip(query.getOffset()) .limit(query.getLimit()); }
@Override public int getChildCount(HierarchicalQuery<T, SerializablePredicate<T>> query) { if (getTreeDataGridSource().getState() == BindingState.INACTIVE) { return 0; } return getTreeDataGridSource().getChildCount(query.getParent()); }
@Override protected Stream fetchChildrenFromBackEnd(HierarchicalQuery query) { int offset = query.getOffset(); int limit = query.getLimit(); Account parent = (Account) query.getParent(); Iterator it = query.getSortOrders().iterator(); while (it.hasNext()) { QuerySortOrder order = (QuerySortOrder) it.next(); orders.put(order.getSorted(),order.getDirection() == SortDirection.DESCENDING); } try { return getAllChildren(offset,limit,orders,parent); } catch (Exception e) { getApp().getLog().error(e); return null; } } @Override
@Override public Stream<T> fetchChildren(HierarchicalQuery<T, F> query) { return dataProvider.fetch(new HierarchicalQuery<>( query.getOffset(), query.getLimit(), query.getSortOrders(), query.getInMemorySorting(), getFilter(query), query.getParent())); }
@Override public int getChildCount(HierarchicalQuery<T, F> query) { return dataProvider().getChildCount(new HierarchicalQuery<>( query.getOffset(), query.getLimit(), query.getSortOrders(), query.getInMemorySorting(), getFilter(query), query.getParent())); }