@Override public T getParent(T item) { if (treeItems.getState() == BindingState.INACTIVE) { return null; } return treeItems.getParent(item); }
@Override public int size(Query<T, SerializablePredicate<T>> query) { // FIXME: gg, query? if (treeItems.getState() == BindingState.INACTIVE) { return 0; } return treeItems.size(); }
@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 void treeSourceItemSetChanged(TreeItems.ItemSetChangeEvent<E> event) { // #PL-2035, reload selection from ds Set<E> selectedItems = getSelected(); Set<E> newSelection = new HashSet<>(); TreeItems<E> source = event.getSource(); for (E item : selectedItems) { if (source.containsItem(item)) { newSelection.add(source.getItem(item.getId())); } } if (source.getState() == BindingState.ACTIVE && source instanceof EntityTreeItems && ((EntityTreeItems<E>) source).getSelectedItem() != null) { newSelection.add(((EntityTreeItems<E>) source).getSelectedItem()); } if (newSelection.isEmpty()) { setSelected((E) null); } else { // Workaround for the MultiSelect model. // Set the selected items only if the previous selection is different // Otherwise, the tree rows will display the values before editing if (isMultiSelect() && !selectedItems.equals(newSelection)) { setSelectedInternal(newSelection); } } refreshActionsState(); }
protected void onSelectionChange(com.vaadin.event.selection.SelectionEvent<E> event) { TreeItems<E> treeItems = getItems(); if (treeItems == null || treeItems.getState() == BindingState.INACTIVE) { return; } Set<E> selected = getSelected(); if (treeItems instanceof EntityTreeItems) { EntityTreeItems<E> entityTreeItems = (EntityTreeItems<E>) treeItems; if (selected.isEmpty()) { entityTreeItems.setSelectedItem(null); } else { // reset selection and select new item if (isMultiSelect()) { entityTreeItems.setSelectedItem(null); } E newItem = selected.iterator().next(); E dsItem = entityTreeItems.getSelectedItem(); entityTreeItems.setSelectedItem(newItem); if (Objects.equals(dsItem, newItem)) { // in this case item change event will not be generated refreshActionsState(); } } } fireSelectionEvent(event); LookupSelectionChangeEvent<E> selectionChangeEvent = new LookupSelectionChangeEvent<>(this); publish(LookupSelectionChangeEvent.class, selectionChangeEvent); }