/** * 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 public List<BinderValidationStatus<?>> validate() { return optionsField.getSelectedItem() .map(this::subForm) .map(EditorView::validate) .orElseGet(Collections::emptyList); }
@Override public void populate(T item) { binder.readBean(item); if (!optionsField.getSelectedItem().isPresent()) { defaultSelectedOptionDefinition().ifPresent(optionsField::setSelectedItem); } optionsField.getSelectedItem().ifPresent(optionDefinition -> { EditorView<T> subForm = subForm(optionDefinition); subFormItemProvider(optionDefinition).read().ifPresent(subForm::populate); layout.addComponent(subForm.asVaadinComponent()); }); }
@Override public void write(T item) { binder.writeBeanIfValid(item); optionsField.getSelectedItem().ifPresent(selectedOptionDefinition -> subFormItemProvider(selectedOptionDefinition).read().ifPresent(t -> subForm(selectedOptionDefinition).write(t))); }