package com.vaadin.tests.components.abstractlisting; import java.util.LinkedHashMap; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; import com.vaadin.ui.AbstractMultiSelect; import com.vaadin.ui.ItemCaptionGenerator; public abstract class AbstractMultiSelectTestUI<MULTISELECT extends AbstractMultiSelect<Object>> extends AbstractListingTestUI<MULTISELECT> { protected final String selectionCategory = "Selection"; @Override protected void createActions() { super.createActions(); createItemCaptionGeneratorMenu(); createSelectionMenu(); createListenerMenu(); } protected void createItemCaptionGeneratorMenu() { LinkedHashMap<String, ItemCaptionGenerator<Object>> options = new LinkedHashMap<>(); options.put("Null Caption Generator", item -> null); options.put("Default Caption Generator", item -> item.toString()); options.put("Custom Caption Generator", item -> item.toString() + " Caption"); createSelectAction("Item Caption Generator", "Item Generator", options, "None", (abstractMultiSelect, captionGenerator, data) -> { abstractMultiSelect .setItemCaptionGenerator(captionGenerator); abstractMultiSelect.getDataCommunicator().getDataProvider() .refreshAll(); }, true); } protected void createSelectionMenu() { createClickAction("Clear selection", selectionCategory, (component, item, data) -> component.deselectAll(), ""); Command<MULTISELECT, String> toggleSelection = (component, item, data) -> toggleSelection(item); List<String> items = IntStream.of(0, 1, 5, 10, 25) .mapToObj(i -> "Item " + i).collect(Collectors.toList()); items.forEach(item -> createClickAction("Toggle " + item, selectionCategory, toggleSelection, item)); Command<MULTISELECT, Boolean> toggleMultiSelection = (component, i, data) -> toggleMultiSelection(i, items); createBooleanAction("Toggle items 0, 1, 5, 10, 25", selectionCategory, false, toggleMultiSelection, items); } private void toggleSelection(String item) { if (getComponent().isSelected(item)) { getComponent().deselect(item); } else { getComponent().select(item); } } private void toggleMultiSelection(boolean add, List<String> items) { if (add) { getComponent().select(items.toArray()); } else { getComponent().deselect(items.toArray()); } } protected void createListenerMenu() { createListenerAction("Selection listener", "Listeners", c -> c.addSelectionListener( e -> log("Selected: " + e.getNewSelection()))); } }