package com.vaadin.tests.components.combobox; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import com.vaadin.tests.components.TestBase; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; import com.vaadin.v7.data.Property; import com.vaadin.v7.data.Property.ValueChangeEvent; import com.vaadin.v7.data.util.sqlcontainer.SQLContainer; import com.vaadin.v7.data.util.sqlcontainer.connection.JDBCConnectionPool; import com.vaadin.v7.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool; import com.vaadin.v7.data.util.sqlcontainer.query.TableQuery; import com.vaadin.v7.ui.AbstractSelect.Filtering; import com.vaadin.v7.ui.ComboBox; public class ComboBoxSQLContainerFilteredValueChange extends TestBase { @Override protected void setup() { VerticalLayout layout = new VerticalLayout(); addComponent(layout); final ComboBox myCombo = new ComboBox("MyCaption"); layout.addComponent(myCombo); final Label selectedLabel = new Label("Selected: null"); layout.addComponent(selectedLabel); try { JDBCConnectionPool connectionPool = new SimpleJDBCConnectionPool( "org.hsqldb.jdbc.JDBCDriver", "jdbc:hsqldb:mem:sqlcontainer", "SA", "", 2, 20); createTestTable(connectionPool); insertTestData(connectionPool); TableQuery q = new TableQuery("mytable", connectionPool); q.setVersionColumn("version"); SQLContainer myContainer = new SQLContainer(q); myCombo.setContainerDataSource(myContainer); } catch (SQLException e) { e.printStackTrace(); } myCombo.setItemCaptionPropertyId("MYFIELD"); myCombo.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS); myCombo.setImmediate(true); myCombo.setWidth("100.0%"); myCombo.setHeight("-1px"); myCombo.addListener(new Property.ValueChangeListener() { @Override public void valueChange(ValueChangeEvent event) { selectedLabel.setValue( "Selected: " + event.getProperty().getValue()); } }); } @Override protected String getDescription() { return "Selecting the first filtered item should change the value of the label under the ComboBox to 'Selected: 1'."; } @Override protected Integer getTicketNumber() { return 10471; } /** * (Re)creates the test table * * @param connectionPool */ private void createTestTable(JDBCConnectionPool connectionPool) { Connection conn = null; try { conn = connectionPool.reserveConnection(); Statement statement = conn.createStatement(); try { statement.executeUpdate("DROP TABLE mytable"); } catch (SQLException e) { } statement.execute("CREATE TABLE mytable " + "(id INTEGER GENERATED BY DEFAULT AS IDENTITY, " + "MYFIELD VARCHAR(45), " + "PRIMARY KEY(ID))"); statement.close(); conn.commit(); } catch (SQLException e) { e.printStackTrace(); } finally { connectionPool.releaseConnection(conn); } } /** * Adds test data to the test table * * @param connectionPool * @throws SQLException */ private void insertTestData(JDBCConnectionPool connectionPool) throws SQLException { Connection conn = null; try { conn = connectionPool.reserveConnection(); Statement statement = conn.createStatement(); statement.executeUpdate("INSERT INTO mytable VALUES(1, 'A0')"); statement.executeUpdate("INSERT INTO mytable VALUES(2, 'A1')"); statement.executeUpdate("INSERT INTO mytable VALUES(3, 'B0')"); statement.executeUpdate("INSERT INTO mytable VALUES(4, 'B1')"); statement.close(); conn.commit(); } catch (SQLException e) { e.printStackTrace(); } finally { connectionPool.releaseConnection(conn); } } }