/* @ITMillApache2LicenseForJavaFiles@ */ package com.vaadin.tests; import java.sql.SQLException; import com.vaadin.data.util.QueryContainer; import com.vaadin.demo.util.SampleDatabase; import com.vaadin.event.Action; import com.vaadin.ui.Label; import com.vaadin.ui.Select; import com.vaadin.ui.Table; import com.vaadin.ui.Tree; import com.vaadin.ui.Window; /** * This example shows how Table, Select and Tree UI components can use * Containers. QueryContainer is used to bind SQL table rows into Vaadin UI * components. Table has few example actions added. Also embedding XHTML through * Label components is used. Demonstrates: how to create * com.vaadin.data.Container and set it as datasource to UI * components com.vaadin.ui.Component.Tree, how to receive * ExpandEvent and implement com.vaadin.ui.Tree.ExpandListener, how * to use com.vaadin.event.Action. * * @author IT Mill Ltd. * @since 4.0.0 * */ public class QueryContainerDemo extends com.vaadin.Application implements Action.Handler { private static final String ACTION_DESCRIPTION = "Try right mouse button to initiate " + "actions menu.
Note: on Opera you use meta key " + "and left mouse button."; private static final String TABLE_CAPTION = SampleDatabase.ROWCOUNT + " dynamically loaded rows from example SQL table"; // Table component where SQL rows are attached (using QueryContainer) private final Table table = new Table(); private final Label tableLastAction = new Label( "No action selected for table."); // Select component where SQL rows are attached (using QueryContainer) private final Select select = new Select(); // Tree component that uses select as datasource private final Tree tree = new Tree(); private final Label treeLastAction = new Label( "No action selected for tree."); // Database provided with sample data private SampleDatabase sampleDatabase; // Example Actions for table private final Action ACTION1 = new Action("Upload"); private final Action ACTION2 = new Action("Download"); private final Action ACTION3 = new Action("Show history"); private final Action[] actions = new Action[] { ACTION1, ACTION2, ACTION3 }; /** * Initialize Application. Demo components are added to main window. */ @Override public void init() { final Window main = new Window("QueryContainer demo"); setMainWindow(main); // Main window contains heading, table, select and tree main .addComponent(new Label( "

QueryContainer demo

" + "Rows are loaded from the server as they are needed.
" + "Try scrolling the table to see it in action.

" + ACTION_DESCRIPTION, Label.CONTENT_XHTML)); main.addComponent(table); main.addComponent(tableLastAction); main.addComponent(new Label("
", Label.CONTENT_XHTML)); main.addComponent(select); main.addComponent(new Label("
", Label.CONTENT_XHTML)); main.addComponent(tree); main.addComponent(treeLastAction); // create demo database sampleDatabase = new SampleDatabase(); // initialize demo components initTable(); initSelect(); initTree(); } /** * Populates table component with all rows from employee table. * */ private void initTable() { // init table table.setCaption(TABLE_CAPTION); table.setPageLength(10); table.setSelectable(true); table.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX); table.setColumnCollapsingAllowed(true); table.setColumnReorderingAllowed(true); table.setSelectable(true); // this class handles table actions (see handleActions method below) table.addActionHandler(this); table.setDescription(ACTION_DESCRIPTION); // populate Vaadin table component with test SQL table rows try { final QueryContainer qc = new QueryContainer( "SELECT * FROM employee", sampleDatabase.getConnection()); table.setContainerDataSource(qc); } catch (final SQLException e) { e.printStackTrace(); } // define which columns should be visible on Table component table.setVisibleColumns(new Object[] { "FIRSTNAME", "LASTNAME", "TITLE", "UNIT" }); table.setItemCaptionPropertyId("ID"); } /** * Populates select component with distinct unit values from employee table. * */ private void initSelect() { // init select select.setCaption("All distinct units from employee table."); select.setItemCaptionPropertyId("UNIT"); // populate Vaadin select component with test SQL table rows try { final QueryContainer qc = new QueryContainer( "SELECT DISTINCT UNIT FROM employee", sampleDatabase .getConnection()); select.setContainerDataSource(qc); } catch (final SQLException e) { e.printStackTrace(); } } /** * Populates tree component using select component as data source for root * nodes, child nodes are queried from database. Implementation is done for * example purposes only. * */ private void initTree() { // init tree tree.setCaption("All distinct units from employee table."); tree.setItemCaptionPropertyId("UNIT"); tree.setSelectable(true); // this class handles tree actions (see handleActions method below) tree.addActionHandler(this); tree.setDescription("Try right mouse button to initiate " + "actions menu. Note: on Opera you use meta key " + "and left mouse button."); // Populate Vaadin Tree using select component as data source tree.setContainerDataSource(select.getContainerDataSource()); } /** * Return example actions */ public Action[] getActions(Object target, Object sender) { return actions; } /** * Executed by right mouse button on table or tree component. */ public void handleAction(Action action, Object sender, Object target) { if (sender == table) { tableLastAction.setValue("Last action clicked was '" + action.getCaption() + "' on item " + target); } else if (sender == tree) { treeLastAction.setValue("Last action clicked was '" + action.getCaption() + "' on item " + target); } } }