123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- /*
- @ITMillApache2LicenseForJavaFiles@
- */
-
- package com.itmill.toolkit.demo;
-
- import java.sql.SQLException;
-
- import com.itmill.toolkit.data.util.QueryContainer;
- import com.itmill.toolkit.demo.util.SampleDatabase;
- import com.itmill.toolkit.event.Action;
- import com.itmill.toolkit.ui.Label;
- import com.itmill.toolkit.ui.Select;
- import com.itmill.toolkit.ui.Table;
- import com.itmill.toolkit.ui.Tree;
- import com.itmill.toolkit.ui.Window;
-
- /**
- * This example shows how Table, Select and Tree UI components can use
- * Containers. QueryContainer is used to bind SQL table rows into Toolkit UI
- * components. Table has few example actions added. Also embedding XHTML through
- * Label components is used. Demonstrates: how to create
- * <code>com.itmill.toolkit.data.Container</code> and set it as datasource to
- * UI components <code>com.itmill.toolkit.ui.Component.Tree</code>, how to
- * receive ExpandEvent and implement
- * <code>com.itmill.toolkit.ui.Tree.ExpandListener</code>, how to use
- * <code>com.itmill.toolkit.event.Action</code>.
- *
- * @author IT Mill Ltd.
- * @since 4.0.0
- *
- */
- public class QueryContainerDemo extends com.itmill.toolkit.Application
- implements Action.Handler {
-
- private static final String ACTION_DESCRIPTION = "Try right mouse button to initiate "
- + "actions menu.<br />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.
- */
- public void init() {
- final Window main = new Window("QueryContainer demo");
- setMainWindow(main);
-
- // Main window contains heading, table, select and tree
- main
- .addComponent(new Label(
- "<h2>QueryContainer demo</h2>"
- + "<b>Rows are loaded from the server as they are needed.<br />"
- + "Try scrolling the table to see it in action.</b><br />"
- + ACTION_DESCRIPTION, Label.CONTENT_XHTML));
- main.addComponent(table);
- main.addComponent(tableLastAction);
- main.addComponent(new Label("<hr />", Label.CONTENT_XHTML));
- main.addComponent(select);
- main.addComponent(new Label("<hr />", 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 Toolkit 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 Toolkit 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 Toolkit 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);
- }
- }
-
- }
|