package org.vaadin.viritin.v7;
import com.vaadin.annotations.Theme;
import com.vaadin.v7.data.Validator;
import com.vaadin.v7.data.Validator.InvalidValueException;
import com.vaadin.v7.ui.AbstractField;
import com.vaadin.ui.Button;
import com.vaadin.v7.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.Notification;
import com.vaadin.v7.ui.VerticalLayout;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.vaadin.addonhelpers.AbstractTest;
import org.vaadin.viritin.v7.fields.LazyComboBox;
@Theme("valo")
public class LazyComboBoxIssue263 extends AbstractTest {
public static final int PAGE_LENGTH = 50;
private class ListProvider implements LazyComboBox.FilterablePagingProvider<String>, LazyComboBox.FilterableCountProvider {
private final List<String> backingList;
private final int pageLength;
public ListProvider(List<String> backingList, int pageLength) {
this.backingList = backingList;
this.pageLength = pageLength;
}
private List<String> getFilteredList(String filter) {
return backingList.stream().filter(item ->
item.toLowerCase().indexOf(filter.toLowerCase()) != -1).collect(Collectors.toList());
}
@Override
public int size(String filter) {
return getFilteredList(filter).size();
}
@Override
public List<String> findEntities(int firstRow, String filter) {
List<String> filteredList = getFilteredList(filter);
return filteredList.subList(firstRow, Math.min(filteredList.size(), firstRow + pageLength));
}
}
private class SuperheroValidator implements Validator {
@Override
public void validate(Object o) throws InvalidValueException {
if ("lorenzo".equals(o)) {
throw new InvalidValueException("Not a superhero!");
}
}
}
@Override
public Component getTestComponent() {
final VerticalLayout layout = new VerticalLayout();
List<String> superheroes = Arrays.asList("Superman", "Hulk", "Spiderman", "Batman", "lorenzo");
ListProvider listProvider = new ListProvider(superheroes, PAGE_LENGTH);
LazyComboBox<String> lazyComboBox = new LazyComboBox<>(
String.class,
listProvider,
listProvider,
PAGE_LENGTH
);
lazyComboBox.setCaption("LazyComboBox");
SuperheroValidator validator = new SuperheroValidator();
lazyComboBox.addValidator(validator);
ComboBox comboBox = new ComboBox();
comboBox.setCaption("ComboBox");
superheroes.forEach(superhero -> comboBox.addItem(superhero));
comboBox.addValidator(validator);
Button button = new Button("Validate");
button.addClickListener(event -> {
validateRequiredField(lazyComboBox);
validateRequiredField(comboBox);
});
layout.addComponents(lazyComboBox, comboBox, button);
layout.setMargin(true);
layout.setSpacing(true);
return layout;
}
private void validateRequiredField(AbstractField<?> field) {
try {
field.setValidationVisible(false);
try {
field.validate();
} catch (Validator.InvalidValueException e) {
Notification.show(e.getMessage());
field.setValidationVisible(true);
}
} catch (Validator.InvalidValueException e) {}
}
}