From 8939d3257f2f48ce5525b908c3d3450cee837aaf Mon Sep 17 00:00:00 2001 From: Denis Anisimov Date: Thu, 15 Sep 2016 09:02:56 +0300 Subject: [PATCH] Move ItemCaptionProvider out of ComboBox (#184). Change-Id: I7dc98de04127c7495aed81b9e0cd2be8cb12b10c --- .../src/main/java/com/vaadin/ui/ComboBox.java | 46 +++++++------------ .../com/vaadin/ui/ItemCaptionGenerator.java | 44 ++++++++++++++++++ .../combobox/ComboBoxDuplicateCaption.java | 2 +- .../combobox/ComboBoxIdenticalItems.java | 2 +- .../tests/components/combobox/Comboboxes.java | 6 +-- .../tests/components/combobox/PopUpWidth.java | 2 +- .../notification/NotificationsWaiAria.java | 2 +- .../tests/components/select/EnumSelect.java | 2 +- .../window/WindowMaximizeRestoreTest.java | 2 +- 9 files changed, 70 insertions(+), 38 deletions(-) create mode 100644 server/src/main/java/com/vaadin/ui/ItemCaptionGenerator.java diff --git a/server/src/main/java/com/vaadin/ui/ComboBox.java b/server/src/main/java/com/vaadin/ui/ComboBox.java index 0b1b4923f8..d39d8a7c4e 100644 --- a/server/src/main/java/com/vaadin/ui/ComboBox.java +++ b/server/src/main/java/com/vaadin/ui/ComboBox.java @@ -67,7 +67,7 @@ public class ComboBox extends AbstractSingleSelect implements HasValue, String selectedCaption = null; T value = getDataCommunicator().getKeyMapper().get(key); if (value != null) { - selectedCaption = getItemCaptionProvider().apply(value); + selectedCaption = getItemCaptionGenerator().apply(value); } getState().selectedItemCaption = selectedCaption; } @@ -82,19 +82,6 @@ public class ComboBox extends AbstractSingleSelect implements HasValue, public interface NewItemHandler extends Consumer, Serializable { } - /** - * ItemCaptionProvider can be used to customize the string shown to the user - * for an item. - * - * @see ComboBox#setItemCaptionProvider(ItemCaptionProvider) - * @param - * item type in the combo box - */ - @FunctionalInterface - public interface ItemCaptionProvider - extends Function, Serializable { - } - /** * ItemIconProvider can be used to add custom icons to combo box items shown * in the popup. @@ -160,7 +147,7 @@ public class ComboBox extends AbstractSingleSelect implements HasValue, */ private NewItemHandler newItemHandler; - private ItemCaptionProvider itemCaptionProvider = String::valueOf; + private ItemCaptionGenerator itemCaptionGenerator = String::valueOf; private StyleGenerator itemStyleGenerator = item -> null; private ItemIconProvider itemIconProvider = item -> null; @@ -169,7 +156,8 @@ public class ComboBox extends AbstractSingleSelect implements HasValue, if (filterText == null) { return true; } else { - return getItemCaptionProvider().apply(item).toLowerCase(getLocale()) + return getItemCaptionGenerator().apply(item) + .toLowerCase(getLocale()) .contains(filterText.toLowerCase(getLocale())); } }; @@ -248,7 +236,7 @@ public class ComboBox extends AbstractSingleSelect implements HasValue, addDataGenerator((T data, JsonObject jsonObject) -> { jsonObject.put(DataCommunicatorConstants.NAME, - getItemCaptionProvider().apply(data)); + getItemCaptionGenerator().apply(data)); String style = itemStyleGenerator.apply(data); if (style != null) { jsonObject.put(ComboBoxConstants.STYLE, style); @@ -429,28 +417,28 @@ public class ComboBox extends AbstractSingleSelect implements HasValue, } /** - * Gets the item caption provider that is used to produce the strings shown + * Gets the item caption generator that is used to produce the strings shown * in the combo box for each item. * - * @return the item caption provider used, not null + * @return the item caption generator used, not null */ - public ItemCaptionProvider getItemCaptionProvider() { - return itemCaptionProvider; + public ItemCaptionGenerator getItemCaptionGenerator() { + return itemCaptionGenerator; } /** - * Sets the item caption provider that is used to produce the strings shown + * Sets the item caption generator that is used to produce the strings shown * in the combo box for each item. By default, * {@link String#valueOf(Object)} is used. * - * @param itemCaptionProvider + * @param itemCaptionGenerator * the item caption provider to use, not null */ - public void setItemCaptionProvider( - ItemCaptionProvider itemCaptionProvider) { - Objects.requireNonNull(itemCaptionProvider, - "Item caption providers must not be null"); - this.itemCaptionProvider = itemCaptionProvider; + public void setItemCaptionGenerator( + ItemCaptionGenerator itemCaptionGenerator) { + Objects.requireNonNull(itemCaptionGenerator, + "Item caption generators must not be null"); + this.itemCaptionGenerator = itemCaptionGenerator; getDataCommunicator().reset(); } @@ -580,7 +568,7 @@ public class ComboBox extends AbstractSingleSelect implements HasValue, HasValue.ValueChangeListener listener) { return addSelectionListener(event -> { ((ValueChangeListener) listener) - .accept(new ValueChange(event.getConnector(), + .accept(new ValueChange<>(event.getConnector(), event.getValue(), event.isUserOriginated())); }); } diff --git a/server/src/main/java/com/vaadin/ui/ItemCaptionGenerator.java b/server/src/main/java/com/vaadin/ui/ItemCaptionGenerator.java new file mode 100644 index 0000000000..dc699c077b --- /dev/null +++ b/server/src/main/java/com/vaadin/ui/ItemCaptionGenerator.java @@ -0,0 +1,44 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.ui; + +import java.io.Serializable; +import java.util.function.Function; + +/** + * {@link ItemCaptionGenerator} can be used to customize the string shown to the + * user for an item. + * + * @see ComboBox#setItemCaptionGenerator(ItemCaptionProvider) + * @param + * item type + * @since 8.0 + * @author Vaadin Ltd + */ +@FunctionalInterface +public interface ItemCaptionGenerator + extends Function, Serializable { + + /** + * Gets a caption for the {@code item}. + * + * @param item + * the item to get caption for + * @return the caption of the item + */ + @Override + String apply(T item); +} diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java index df093a2976..1f4d67c1d5 100644 --- a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java +++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java @@ -33,7 +33,7 @@ public class ComboBoxDuplicateCaption extends TestBase { log.log("Person = " + p.getFirstName() + " " + p.getLastName()); }); box.setItems(list); - box.setItemCaptionProvider(Person::getLastName); + box.setItemCaptionGenerator(Person::getLastName); addComponent(log); diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxIdenticalItems.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxIdenticalItems.java index 3de97dc46c..1f0ebf2f1c 100644 --- a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxIdenticalItems.java +++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxIdenticalItems.java @@ -12,7 +12,7 @@ public class ComboBoxIdenticalItems extends AbstractTestUI { @Override protected void setup(VaadinRequest request) { final ComboBox select = new ComboBox<>("ComboBox"); - select.setItemCaptionProvider( + select.setItemCaptionGenerator( item -> item.startsWith("one") ? "One" : "Two"); select.setItems("one-1", "one-2", "two"); select.setEmptySelectionAllowed(false); diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/Comboboxes.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/Comboboxes.java index 4cc8ca7919..711c20a398 100644 --- a/uitest/src/main/java/com/vaadin/tests/components/combobox/Comboboxes.java +++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/Comboboxes.java @@ -50,7 +50,7 @@ public class Comboboxes extends ComponentTestCase { "Undefined wide select with 50 items"); s4.setWidth(null); populate(s4, 50); - s4.setItemCaptionProvider(StringBean::getValue); + s4.setItemCaptionGenerator(StringBean::getValue); s4.setScrollToSelectedItem(true); addTestComponent(s4); @@ -72,14 +72,14 @@ public class Comboboxes extends ComponentTestCase { "200px wide select with 50 items"); s8.setWidth("200px"); populate(s8, 50); - s8.setItemCaptionProvider(StringBean::getValue); + s8.setItemCaptionGenerator(StringBean::getValue); addTestComponent(s8); ComboBox s9 = new PageLength0ComboBox(); s9.setImmediate(true); s9.setCaption("Pagelength 0"); populate(s9, 15); - s9.setItemCaptionProvider(StringBean::getValue); + s9.setItemCaptionGenerator(StringBean::getValue); addTestComponent(s9); } diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/PopUpWidth.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/PopUpWidth.java index 6cbfc42ab8..c0607d49ed 100644 --- a/uitest/src/main/java/com/vaadin/tests/components/combobox/PopUpWidth.java +++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/PopUpWidth.java @@ -26,7 +26,7 @@ public class PopUpWidth extends TestBase { cb.setItems(items); cb.setItemIconProvider( item -> new ThemeResource("../runo/icons/16/users.png")); - cb.setItemCaptionProvider(item -> "Item " + item); + cb.setItemCaptionGenerator(item -> "Item " + item); return cb; } diff --git a/uitest/src/main/java/com/vaadin/tests/components/notification/NotificationsWaiAria.java b/uitest/src/main/java/com/vaadin/tests/components/notification/NotificationsWaiAria.java index c2df9a2cbe..e35304aa74 100644 --- a/uitest/src/main/java/com/vaadin/tests/components/notification/NotificationsWaiAria.java +++ b/uitest/src/main/java/com/vaadin/tests/components/notification/NotificationsWaiAria.java @@ -69,7 +69,7 @@ public class NotificationsWaiAria extends AbstractTestUI { items.put(Notification.Type.TRAY_NOTIFICATION, "Tray"); items.put(Notification.Type.ASSISTIVE_NOTIFICATION, "Assistive"); - type.setItemCaptionProvider(item -> items.get(item)); + type.setItemCaptionGenerator(item -> items.get(item)); type.setItems(items.keySet()); type.setValue(items.keySet().iterator().next()); diff --git a/uitest/src/main/java/com/vaadin/tests/components/select/EnumSelect.java b/uitest/src/main/java/com/vaadin/tests/components/select/EnumSelect.java index ad98a4b38a..399913778e 100644 --- a/uitest/src/main/java/com/vaadin/tests/components/select/EnumSelect.java +++ b/uitest/src/main/java/com/vaadin/tests/components/select/EnumSelect.java @@ -37,7 +37,7 @@ public class EnumSelect extends AbstractTestUIWithLog { setLocale(new Locale("fi", "FI")); ComboBox cb = new ComboBox<>(null, Arrays.asList(Constant.values())); - cb.setItemCaptionProvider(value -> StringToEnumConverter + cb.setItemCaptionGenerator(value -> StringToEnumConverter .enumToString(value, getLocale())); addComponent(cb); diff --git a/uitest/src/main/java/com/vaadin/tests/components/window/WindowMaximizeRestoreTest.java b/uitest/src/main/java/com/vaadin/tests/components/window/WindowMaximizeRestoreTest.java index 0288eafad5..ec735cfa3c 100644 --- a/uitest/src/main/java/com/vaadin/tests/components/window/WindowMaximizeRestoreTest.java +++ b/uitest/src/main/java/com/vaadin/tests/components/window/WindowMaximizeRestoreTest.java @@ -29,7 +29,7 @@ public class WindowMaximizeRestoreTest extends AbstractTestUI { addWindowAgain = new ComboBox<>("Add Window Again"); addWindowAgain - .setItemCaptionProvider(window -> window.getData().toString()); + .setItemCaptionGenerator(window -> window.getData().toString()); addWindowAgain.addValueChangeListener(event -> { Object value = event.getValue(); if (value != null && value instanceof Window) { -- 2.39.5