package com.vaadin.tests.containers; import com.vaadin.server.Sizeable; import com.vaadin.tests.components.TestBase; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.CheckBox; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; import com.vaadin.v7.data.Item; import com.vaadin.v7.data.util.BeanItemContainer; import com.vaadin.v7.ui.Table; import com.vaadin.v7.ui.TextField; public class BeanItemContainerFilteringTest extends TestBase { private Table table; private BeanItemContainer<TestBean> container; private TextField filterString; private TextField position; private int nextToAdd = 1; private Label nextLabel; protected static class TestBean { private String id; private String value; public TestBean() { } public TestBean(String id, String value) { setId(id); setValue(value); } public void setId(String id) { this.id = id; } public String getId() { return id; } public void setValue(String value) { this.value = value; } public String getValue() { return value; } } @Override protected String getDescription() { return "Test adding items in a filtered BeanItemContainer."; } @Override protected Integer getTicketNumber() { return new Integer(1061); } @Override protected void setup() { table = new Table(); try { container = new BeanItemContainer<>(TestBean.class); table.setContainerDataSource(container); table.setWidth(300, Sizeable.UNITS_PIXELS); table.setSelectable(true); table.setMultiSelect(false); table.setEditable(true); table.setImmediate(true); // table.addContainerProperty("column1", String.class, "test"); for (int i = 0; i < 25; ++i) { container.addItem(new TestBean("Item " + i, "Value for " + i)); } VerticalLayout vl = new VerticalLayout(); // activate & deactivate filtering filterString = new TextField("Filter string:", "1"); vl.addComponent(filterString); final CheckBox cb = new CheckBox("Filter on value"); cb.addValueChangeListener(event -> { container.removeAllContainerFilters(); if (event.getValue()) { container.addContainerFilter("value", filterString.getValue().toString(), false, false); } }); vl.addComponent(cb); nextLabel = new Label(); nextLabel.setCaption("Next id: " + nextToAdd); vl.addComponent(nextLabel); // addItemAt(idx), addItemAfter(selection), addItem() final Button addItemButton = new Button("addItem()", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { container.addItem( new TestBean("addItem() " + nextToAdd, "value " + nextToAdd)); nextToAdd++; nextLabel.setCaption("Next id: " + nextToAdd); } }); vl.addComponent(addItemButton); final Button addItemAfterButton = new Button("addItemAfter()", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { Object selection = table.getValue(); if (selection == null) { return; } TestBean bean = new TestBean( "addItemAfter() " + nextToAdd, "value " + nextToAdd); Item item = container.addItemAfter(selection, bean); if (item == null) { getMainWindow() .showNotification("Adding item after " + selection + " failed"); } nextToAdd++; nextLabel.setCaption("Next id: " + nextToAdd); } }); vl.addComponent(addItemAfterButton); position = new TextField("Position:", "0"); vl.addComponent(position); final Button addItemAtButton = new Button("addItemAt()", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { int index = Integer .parseInt(position.getValue().toString()); TestBean bean = new TestBean( "addItemAt() " + nextToAdd, "value " + nextToAdd); Item item = container.addItemAt(index, bean); if (item == null) { getMainWindow().showNotification( "Adding item at index " + position.getValue() + " failed"); } nextToAdd++; nextLabel.setCaption("Next id: " + nextToAdd); } }); vl.addComponent(addItemAtButton); getLayout().addComponent(table); getLayout().addComponent(vl); } catch (Exception ex) { ex.printStackTrace(); } } }