/** * Returns the current value of this object which is the currently selected * item. * <p> * The call is delegated to {@link #getSelectedItem()} * * @return the current selection, may be {@code null} * * @see #getSelectedItem() * @see Single#getSelectedItem */ @Override public T getValue() { return getSelectedItem().orElse(null); }
@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()); if (!items.isEmpty()) { setItems(items); } selected.forEach(this::setValue); }
@Override public void deselect(String key) { T item = keyToItem(key); if (isSelected(item)) { setSelectedItem(null, true); } } });
@Override public void select(String key) { setSelectedItem(keyToItem(key), true); }
private void init() { registerRpc(new SelectionServerRpc() { addDataGenerator(new DataGenerator<T>() {
if (isSelected(value)) { return; getDataCommunicator().refresh(oldValue); getDataCommunicator().refresh(value); updateSelectedItemState(value); updateDiffstate("selectedItemKey", Json.createObject()); fireEvent(new SingleSelectionEvent<>(AbstractSingleSelect.this, oldValue, userOriginated));
/** * Sets the current selection to the given item or clears selection if given * {@code null}. * * @param item * the item to select or {@code null} to clear selection */ public void setSelectedItem(T item) { setSelectedItem(item, false); }
/** * {@inheritDoc} * <p> * Filtering will use a case insensitive match to show all items where the * filter text is a substring of the caption displayed for that item. */ @Override public void setItems(Stream<T> streamOfItems) { // Overridden only to add clarification to javadocs super.setItems(streamOfItems); }
/** * Returns whether the given item is currently selected. * * @param item * the item to check, not null * @return {@code true} if the item is selected, {@code false} otherwise */ public boolean isSelected(T item) { if (Objects.equals(selectedItem, item)) { return true; } if (item == null || selectedItem == null) { return false; } return Objects.equals(getDataProvider().getId(selectedItem), getDataProvider().getId(item)); }
/** * Adds a selection listener to this select. The listener is called when the * selection is changed either by the user or programmatically. * * @param listener * the selection listener, not null * @return a registration for the listener */ public Registration addSelectionListener( SingleSelectionListener<T> listener) { return addListener(SingleSelectionEvent.class, listener, SingleSelectionListener.SELECTION_CHANGE_METHOD); }
@Override public void attach() { super.attach(); // Update icon for ConnectorResource updateSelectedItemIcon(getValue()); }
@Override public Registration addValueChangeListener( HasValue.ValueChangeListener<T> listener) { return addSelectionListener( event -> listener.valueChange(new ValueChangeEvent<>(this, event.getOldValue(), event.isUserOriginated()))); }
private void initialize() { optionsField = formFieldFactory.createField(definition.getField(), locale); layout.addComponent(optionsField); optionsField.addValueChangeListener(e -> { if (e.getOldValue() == null || e.getOldValue() == null) { return; } EditorView<T> oldView = subForm(e.getOldValue()); EditorView<T> newView = subForm(e.getValue()); layout.replaceComponent(oldView.asVaadinComponent(), newView.asVaadinComponent()); }); definition.getForms().forEach(formDefinition -> { ItemProviderStrategy<T> subFormProviderStrategy = create(((ComplexPropertyDefinition<T>) formDefinition).getItemProvider(), formDefinition, itemProviderStrategy); EditorView<T> subForm = getViewProvider().create(formDefinition); subForms.put(formDefinition.getName(), Pair.of(subForm, subFormProviderStrategy)); }); binder = ConfiguredBinder.withPropertySet(propertySetFactory.fromFieldDefinitions(Collections.singletonList(definition.getField()), locale)); binder.forField(optionsField) .withConverter(new StringToOptionDefinitionConverter(definition.getField())) .bind(resolvePropertyNameByLocale(definition.getField().getName(), locale, definition.getField().isI18n())); }
/** * Sets the value of this object which is an item to select. If the new * value is not equal to {@code getValue()}, fires a value change event. If * value is {@code null} then it deselects currently selected item. * <p> * The call is delegated to {@link #setSelectedItem(Object)}. * * @see #setSelectedItem(Object) * @see Single#setSelectedItem(Object) * * @param value * the item to select or {@code null} to clear selection */ @Override public void setValue(T value) { setSelectedItem(value); }
/** * {@inheritDoc} * <p> * Filtering will use a case insensitive match to show all items where the * filter text is a substring of the caption displayed for that item. */ @Override public void setItems(T... items) { // Overridden only to add clarification to javadocs super.setItems(items); }
@Override public Optional<DataProvider<ITEM, ?>> getDataProvider() { return Optional.ofNullable(getInternalField().getDataProvider()); }
@Override public void deselect(T item) { if (item != null) { getSelectedItem().filter(i -> i.equals(item)).ifPresent(i -> getInternalField().setSelectedItem(null)); } }
@Override public List<BinderValidationStatus<?>> validate() { return optionsField.getSelectedItem() .map(this::subForm) .map(EditorView::validate) .orElseGet(Collections::emptyList); }
@Override public void setItems(Collection<ITEM> items) { getInternalField().setItems(items); }
@Override public void select(T item) { getInternalField().setSelectedItem(toInternalValue(item)); }