Skip to content

Commit

Permalink
Move ItemCaptionProvider out of ComboBox (vaadin#184).
Browse files Browse the repository at this point in the history
Change-Id: I7dc98de04127c7495aed81b9e0cd2be8cb12b10c
  • Loading branch information
Denis Anisimov committed Sep 20, 2016
1 parent c6e195a commit 8939d32
Show file tree
Hide file tree
Showing 9 changed files with 70 additions and 38 deletions.
46 changes: 17 additions & 29 deletions server/src/main/java/com/vaadin/ui/ComboBox.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ protected void doSetSelectedKey(String key) {
String selectedCaption = null;
T value = getDataCommunicator().getKeyMapper().get(key);
if (value != null) {
selectedCaption = getItemCaptionProvider().apply(value);
selectedCaption = getItemCaptionGenerator().apply(value);
}
getState().selectedItemCaption = selectedCaption;
}
Expand All @@ -82,19 +82,6 @@ protected void doSetSelectedKey(String key) {
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.
Expand Down Expand Up @@ -160,7 +147,7 @@ protected void fireEvent(Component.Event event) {
*/
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;
Expand All @@ -169,7 +156,8 @@ protected void fireEvent(Component.Event event) {
if (filterText == null) {
return true;
} else {
return getItemCaptionProvider().apply(item).toLowerCase(getLocale())
return getItemCaptionGenerator().apply(item)
.toLowerCase(getLocale())
.contains(filterText.toLowerCase(getLocale()));
}
};
Expand Down Expand Up @@ -248,7 +236,7 @@ private void init() {

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);
Expand Down Expand Up @@ -429,28 +417,28 @@ public boolean isScrollToSelectedItem() {
}

/**
* 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();
}

Expand Down Expand Up @@ -580,7 +568,7 @@ public Registration addValueChangeListener(
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()));
});
}
Expand Down
44 changes: 44 additions & 0 deletions server/src/main/java/com/vaadin/ui/ItemCaptionGenerator.java
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ protected void setup() {
log.log("Person = " + p.getFirstName() + " " + p.getLastName());
});
box.setItems(list);
box.setItemCaptionProvider(Person::getLastName);
box.setItemCaptionGenerator(Person::getLastName);

addComponent(log);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ protected void initializeComponents() {
"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);

Expand All @@ -72,14 +72,14 @@ protected void initializeComponents() {
"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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ private ComboBox<Integer> createComboBox(String caption) {
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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ protected void setup(VaadinRequest request) {
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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ protected void setup(VaadinRequest request) {
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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ protected void setup(VaadinRequest request) {

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) {
Expand Down

0 comments on commit 8939d32

Please sign in to comment.