Change-Id: I7dc98de04127c7495aed81b9e0cd2be8cb12b10ctags/8.0.0.alpha3
@@ -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())); | |||
}); | |||
} |
@@ -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); | |||
} |
@@ -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); | |||
@@ -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); |
@@ -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); | |||
} | |||
@@ -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; | |||
} | |||
@@ -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()); |
@@ -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); | |||
@@ -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) { |