use of com.vaadin.flow.component.listbox.MultiSelectListBox in project flow-components by vaadin.
the class ListBoxDataViewPage method createIdentifierProviderForMultiSelectListBox.
private void createIdentifierProviderForMultiSelectListBox() {
CustomItem first = new CustomItem(1L, "First");
CustomItem second = new CustomItem(2L, "Second");
CustomItem third = new CustomItem(3L, "Third");
CustomItem fourth = new CustomItem(4L, "Fourth");
List<CustomItem> items = new ArrayList<>(Arrays.asList(first, second, third, fourth));
MultiSelectListBox<CustomItem> multiSelectListBox = new MultiSelectListBox<>();
ListBoxListDataView<CustomItem> listDataView = multiSelectListBox.setItems(items);
// Setting the following Identifier Provider makes the component
// independent from the CustomItem's equals method implementation:
listDataView.setIdentifierProvider(CustomItem::getId);
Set<CustomItem> selected = new HashSet<>(Arrays.asList(new CustomItem(1L), third));
multiSelectListBox.setValue(selected);
Span selectedIdsSpan = new Span();
selectedIdsSpan.setId(MULTI_SELECT_LIST_BOX_SELECTED_IDS_SPAN);
multiSelectListBox.getSelectedItems().stream().map(item -> String.valueOf(item.getId())).sorted().reduce((a, b) -> a + ", " + b).ifPresent(selectedIdsSpan::setText);
Button updateAndSelectByIdButton = new Button("Update & Select by Id", click -> {
// Make the names of unselected items similar to the name of
// selected
// one to mess with the <equals> implementation in
// CustomItem:
second.setName("First");
listDataView.refreshItem(second);
fourth.setName("Third");
listDataView.refreshItem(fourth);
// Select the items not only with the reference of existing
// items,
// but also the Id to verify <equals> is not in use and the
// selection is happening only based on identifier:
Set<CustomItem> newSelected = new HashSet<>(Arrays.asList(second, new CustomItem(4L)));
multiSelectListBox.setValue(newSelected);
multiSelectListBox.getSelectedItems().stream().map(item -> String.valueOf(item.getId())).sorted().reduce((a, b) -> a + ", " + b).ifPresent(selectedIdsSpan::setText);
});
updateAndSelectByIdButton.setId(MULTI_SELECT_LIST_BOX_SELECTION_UPDATE_BUTTON);
Button selectByIdAndNameButton = new Button("Select by Id and Name", click -> {
// Select the items not only with the reference of existing
// items,
// but also the Id and a challenging name to verify <equals>
// is not
// in use and the selection is happening only based on
// identifier:
Set<CustomItem> newSelected = new HashSet<>(Arrays.asList(first, new CustomItem(3L, "Third")));
multiSelectListBox.setValue(newSelected);
multiSelectListBox.getSelectedItems().stream().map(item -> String.valueOf(item.getId())).sorted().reduce((a, b) -> a + ", " + b).ifPresent(selectedIdsSpan::setText);
});
selectByIdAndNameButton.setId(MULTI_SELECT_LIST_BOX_SELECTION_BY_ID_AND_NAME_BUTTON);
add(multiSelectListBox, selectedIdsSpan, updateAndSelectByIdButton, selectByIdAndNameButton);
}
Aggregations