@Override protected void readItems(Element design, DesignContext context) { Set<T> selected = new HashSet<>(); List<T> items = design.children().stream() .map(child -> readItem(child, selected, context)) .collect(Collectors.toList()); deselectAll(); if (!items.isEmpty()) { setItems(items); } selected.forEach(this::select); }
/** * Creates a new multi select with an empty data provider. */ protected AbstractMultiSelect() { registerRpc(new MultiSelectServerRpcImpl()); // #FIXME it should be the responsibility of the SelectionModel // (AbstractSelectionModel) to add selection data for item addDataGenerator(new MultiSelectDataGenerator()); }
/** * Adds a selection listener that will be called when the selection is * changed either by the user or programmatically. * * @param listener * the value change listener, not {@code null} * @return a registration for the listener */ @Override public Registration addSelectionListener( MultiSelectionListener<T> listener) { return addListener(MultiSelectionEvent.class, listener, MultiSelectionListener.SELECTION_CHANGE_METHOD); }
private void updateSelection(SerializableConsumer<Collection<T>> handler, boolean userOriginated) { LinkedHashSet<T> oldSelection = new LinkedHashSet<>(selection); handler.accept(selection); fireEvent(new MultiSelectionEvent<>(AbstractMultiSelect.this, oldSelection, userOriginated)); getDataCommunicator().reset(); }
@Override public void setItems(Collection<ITEM> items) { getInternalField().setItems(items); }
@Override public SerializablePredicate<T> getItemEnabledProvider() { return super.getItemEnabledProvider(); }
/** * Adds a value change listener. The listener is called when the selection * set of this multi select is changed either by the user or * programmatically. * * @see #addSelectionListener(MultiSelectionListener) * * @param listener * the value change listener, not null * @return a registration for the listener */ @Override public Registration addValueChangeListener( HasValue.ValueChangeListener<Set<T>> listener) { return addSelectionListener( event -> listener.valueChange(new ValueChangeEvent<>(this, event.getOldValue(), event.isUserOriginated()))); }
@Override public Optional<DataProvider<ITEM, ?>> getDataProvider() { return Optional.ofNullable(getInternalField().getDataProvider()); }
@SuppressWarnings("unchecked") @Override public void deselect(Iterable<T> items) { ObjectUtils.argumentNotNull(items, "Items to deselect must be not null"); final Set<T> set = new HashSet<>(); items.forEach(i -> { if (i != null) { set.add(i); } }); Set<ITEM> toDeselect = toInternalValue(set); getInternalField().deselect((ITEM[]) toDeselect.toArray()); }