Browse Source

Move ItemCaptionProvider out of ComboBox (#184).

Change-Id: I7dc98de04127c7495aed81b9e0cd2be8cb12b10c
tags/8.0.0.alpha3
Denis Anisimov 7 years ago
parent
commit
8939d3257f

+ 17
- 29
server/src/main/java/com/vaadin/ui/ComboBox.java View File

@@ -67,7 +67,7 @@ public class ComboBox<T> extends AbstractSingleSelect<T> implements HasValue<T>,
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<T> extends AbstractSingleSelect<T> implements HasValue<T>,
public interface NewItemHandler extends Consumer<String>, Serializable {
}

/**
* ItemCaptionProvider can be used to customize the string shown to the user
* for an item.
*
* @see ComboBox#setItemCaptionProvider(ItemCaptionProvider)
* @param <T>
* item type in the combo box
*/
@FunctionalInterface
public interface ItemCaptionProvider<T>
extends Function<T, String>, Serializable {
}

/**
* ItemIconProvider can be used to add custom icons to combo box items shown
* in the popup.
@@ -160,7 +147,7 @@ public class ComboBox<T> extends AbstractSingleSelect<T> implements HasValue<T>,
*/
private NewItemHandler newItemHandler;

private ItemCaptionProvider<T> itemCaptionProvider = String::valueOf;
private ItemCaptionGenerator<T> itemCaptionGenerator = String::valueOf;

private StyleGenerator<T> itemStyleGenerator = item -> null;
private ItemIconProvider<T> itemIconProvider = item -> null;
@@ -169,7 +156,8 @@ public class ComboBox<T> extends AbstractSingleSelect<T> implements HasValue<T>,
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<T> extends AbstractSingleSelect<T> implements HasValue<T>,

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<T> extends AbstractSingleSelect<T> implements HasValue<T>,
}

/**
* 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<T> getItemCaptionProvider() {
return itemCaptionProvider;
public ItemCaptionGenerator<T> 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<T> itemCaptionProvider) {
Objects.requireNonNull(itemCaptionProvider,
"Item caption providers must not be null");
this.itemCaptionProvider = itemCaptionProvider;
public void setItemCaptionGenerator(
ItemCaptionGenerator<T> itemCaptionGenerator) {
Objects.requireNonNull(itemCaptionGenerator,
"Item caption generators must not be null");
this.itemCaptionGenerator = itemCaptionGenerator;
getDataCommunicator().reset();
}

@@ -580,7 +568,7 @@ public class ComboBox<T> extends AbstractSingleSelect<T> implements HasValue<T>,
HasValue.ValueChangeListener<? super T> listener) {
return addSelectionListener(event -> {
((ValueChangeListener<T>) listener)
.accept(new ValueChange<T>(event.getConnector(),
.accept(new ValueChange<>(event.getConnector(),
event.getValue(), event.isUserOriginated()));
});
}

+ 44
- 0
server/src/main/java/com/vaadin/ui/ItemCaptionGenerator.java View File

@@ -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 <T>
* item type
* @since 8.0
* @author Vaadin Ltd
*/
@FunctionalInterface
public interface ItemCaptionGenerator<T>
extends Function<T, String>, 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);
}

+ 1
- 1
uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxDuplicateCaption.java View File

@@ -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);


+ 1
- 1
uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxIdenticalItems.java View File

@@ -12,7 +12,7 @@ public class ComboBoxIdenticalItems extends AbstractTestUI {
@Override
protected void setup(VaadinRequest request) {
final ComboBox<String> select = new ComboBox<>("ComboBox");
select.setItemCaptionProvider(
select.setItemCaptionGenerator(
item -> item.startsWith("one") ? "One" : "Two");
select.setItems("one-1", "one-2", "two");
select.setEmptySelectionAllowed(false);

+ 3
- 3
uitest/src/main/java/com/vaadin/tests/components/combobox/Comboboxes.java View File

@@ -50,7 +50,7 @@ public class Comboboxes extends ComponentTestCase<ComboBox> {
"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<ComboBox> {
"200px wide select with 50 items");
s8.setWidth("200px");
populate(s8, 50);
s8.setItemCaptionProvider(StringBean::getValue);
s8.setItemCaptionGenerator(StringBean::getValue);
addTestComponent(s8);

ComboBox<StringBean> s9 = new PageLength0ComboBox();
s9.setImmediate(true);
s9.setCaption("Pagelength 0");
populate(s9, 15);
s9.setItemCaptionProvider(StringBean::getValue);
s9.setItemCaptionGenerator(StringBean::getValue);
addTestComponent(s9);
}


+ 1
- 1
uitest/src/main/java/com/vaadin/tests/components/combobox/PopUpWidth.java View File

@@ -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;
}


+ 1
- 1
uitest/src/main/java/com/vaadin/tests/components/notification/NotificationsWaiAria.java View File

@@ -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());

+ 1
- 1
uitest/src/main/java/com/vaadin/tests/components/select/EnumSelect.java View File

@@ -37,7 +37,7 @@ public class EnumSelect extends AbstractTestUIWithLog {
setLocale(new Locale("fi", "FI"));
ComboBox<Constant> cb = new ComboBox<>(null,
Arrays.asList(Constant.values()));
cb.setItemCaptionProvider(value -> StringToEnumConverter
cb.setItemCaptionGenerator(value -> StringToEnumConverter
.enumToString(value, getLocale()));
addComponent(cb);


+ 1
- 1
uitest/src/main/java/com/vaadin/tests/components/window/WindowMaximizeRestoreTest.java View File

@@ -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) {

Loading…
Cancel
Save