diff options
Diffstat (limited to 'src/com/vaadin/tests/TestComponentsAndLayouts.java')
-rw-r--r-- | src/com/vaadin/tests/TestComponentsAndLayouts.java | 505 |
1 files changed, 505 insertions, 0 deletions
diff --git a/src/com/vaadin/tests/TestComponentsAndLayouts.java b/src/com/vaadin/tests/TestComponentsAndLayouts.java new file mode 100644 index 0000000000..02593c983f --- /dev/null +++ b/src/com/vaadin/tests/TestComponentsAndLayouts.java @@ -0,0 +1,505 @@ +/* +@ITMillApache2LicenseForJavaFiles@ + */ + +package com.vaadin.tests; + +import java.io.File; +import java.sql.SQLException; + +import com.vaadin.Application; +import com.vaadin.data.Container; +import com.vaadin.data.util.FilesystemContainer; +import com.vaadin.data.util.QueryContainer; +import com.vaadin.demo.util.SampleDatabase; +import com.vaadin.demo.util.SampleDirectory; +import com.vaadin.event.Action; +import com.vaadin.terminal.ClassResource; +import com.vaadin.terminal.ErrorMessage; +import com.vaadin.terminal.ExternalResource; +import com.vaadin.terminal.UserError; +import com.vaadin.ui.AbstractComponent; +import com.vaadin.ui.Accordion; +import com.vaadin.ui.Button; +import com.vaadin.ui.CheckBox; +import com.vaadin.ui.Component; +import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.DateField; +import com.vaadin.ui.Embedded; +import com.vaadin.ui.ExpandLayout; +import com.vaadin.ui.GridLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.Layout; +import com.vaadin.ui.Link; +import com.vaadin.ui.NativeSelect; +import com.vaadin.ui.OptionGroup; +import com.vaadin.ui.OrderedLayout; +import com.vaadin.ui.Panel; +import com.vaadin.ui.RichTextArea; +import com.vaadin.ui.Select; +import com.vaadin.ui.Slider; +import com.vaadin.ui.SplitPanel; +import com.vaadin.ui.TabSheet; +import com.vaadin.ui.Table; +import com.vaadin.ui.TextField; +import com.vaadin.ui.Tree; +import com.vaadin.ui.TwinColSelect; +import com.vaadin.ui.Upload; +import com.vaadin.ui.Window; +import com.vaadin.ui.Component.Event; +import com.vaadin.ui.Component.Listener; + +/** + * Search for "TWEAK these" keyword and configure Custom/AbstractComponents to + * various states and see how they work inside different Layouts. + * + */ +public class TestComponentsAndLayouts extends Application implements Listener, + Action.Handler { + + // event listener feedback (see console) + Label eventListenerFeedback = new Label( + "See console for event listener log."); + int eventCount = 0; + + Window window; + + // component counter + int count = 0; + + 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 }; + + @Override + public void init() { + sampleDatabase = new SampleDatabase(); + createNewView(); + } + + public void createNewView() { + final Window main = new Window("Main window"); + setMainWindow(main); + + // By default push all containers inside main window + Layout target = main.getLayout(); + + main + .addComponent(new Label( + "Each Layout and their contained components should " + + "have icon, caption, description, user error defined. " + + "Eeach layout should contain similar components. " + + "All components are in immmediate mode. See source how to tweak this test.")); + main.addComponent(eventListenerFeedback); + + // ////////////////////////////////////////////////////////////////////// + // //// + if (false) { + window = new Window("Components inside Window (TEST: Window)"); + + if (false) { + // push every container and their components inside window + target = window.getLayout(); + } else { + // window is just one container to be tested + populateLayout(window.getLayout()); + } + getMainWindow().addWindow(window); + } + + // ////////////////////////////////////////////////////////////////////// + // //// + if (false) { + target + .addComponent(new Label( + "<hr /><h1>Components inside horizontal OrderedLayout</h3>", + Label.CONTENT_XHTML)); + final OrderedLayout ol = new OrderedLayout( + OrderedLayout.ORIENTATION_HORIZONTAL); + populateLayout(ol); + target.addComponent(ol); + } + + // ////////////////////////////////////////////////////////////////////// + // //// + if (false) { + target + .addComponent(new Label( + "<br/><br/><br/><hr /><h1>Components inside vertical OrderedLayout</h3>", + Label.CONTENT_XHTML)); + final OrderedLayout ol2 = new OrderedLayout( + OrderedLayout.ORIENTATION_VERTICAL); + populateLayout(ol2); + target.addComponent(ol2); + } + + // ////////////////////////////////////////////////////////////////////// + // //// + if (false) { + target.addComponent(new Label( + "<hr /><h1>Components inside TabSheet</h3>", + Label.CONTENT_XHTML)); + final TabSheet tabsheet = new TabSheet(); + final OrderedLayout tab1 = new OrderedLayout(); + tab1.addComponent(new Label("try tab2")); + final OrderedLayout tab2 = new OrderedLayout(); + populateLayout(tab2); + tabsheet.addTab(tab1, "TabSheet tab1", new ClassResource("m.gif", + this)); + tabsheet.addTab(tab2, "TabSheet tab2", new ClassResource("m.gif", + this)); + target.addComponent(tabsheet); + // test(tabsheet); + // test(tab1); + // test(tab2); + // test(expandLayout); + } + + // ////////////////////////////////////////////////////////////////////// + // //// + if (true) { + target.addComponent(new Label( + "<hr /><h1>Components inside Accordion</h3>", + Label.CONTENT_XHTML)); + final Accordion accordion = new Accordion(); + accordion.setHeight(500); + final OrderedLayout acc1 = new OrderedLayout(); + acc1.addComponent(new Label("try acc2")); + final OrderedLayout acc2 = new OrderedLayout(); + populateLayout(acc2); + accordion.addTab(acc1, "Accordion acc1", new ClassResource("m.gif", + this)); + accordion.addTab(acc2, "Accordion acc2", new ClassResource("m.gif", + this)); + target.addComponent(accordion); + // test(accordion); + // test(acc1); + // test(acc2); + // test(expandLayout); + } + + // ////////////////////////////////////////////////////////////////////// + // //// + if (false) { + target.addComponent(new Label( + "<hr /><h1>Components inside GridLayout</h3>", + Label.CONTENT_XHTML)); + final GridLayout gridLayout = new GridLayout(4, 100); + populateLayout(gridLayout); + target.addComponent(gridLayout); + // test(gridLayout); + } + + // ////////////////////////////////////////////////////////////////////// + // //// + if (false) { + target + .addComponent(new Label( + "<hr /><h1>Components inside ExpandLayout (height 250px)</h3>", + Label.CONTENT_XHTML)); + final ExpandLayout el = new ExpandLayout(); + el.setHeight(250, Component.UNITS_PIXELS); + el.expand(new Label("This label will expand on expand layout")); + populateLayout(el); + target.addComponent(el); + } + + // ////////////////////////////////////////////////////////////////////// + // //// + if (false) { + target.addComponent(new Label( + "<hr /><h1>Components inside Panel</h3>", + Label.CONTENT_XHTML)); + final Panel panel = new Panel("Panel"); + populateLayout(panel.getLayout()); + target.addComponent(panel); + } + + // ////////////////////////////////////////////////////////////////////// + // //// + if (false) { + target + .addComponent(new Label( + "<hr /><h1>Components inside vertical SplitPanel (splitpanel is under 250height ExpandLayout)</h3>", + Label.CONTENT_XHTML)); + final ExpandLayout sp1l = new ExpandLayout(); + sp1l.setHeight(250, ExpandLayout.UNITS_PIXELS); + final SplitPanel sp1 = new SplitPanel( + SplitPanel.ORIENTATION_VERTICAL); + sp1l.addComponent(sp1); + final OrderedLayout sp1first = new OrderedLayout(); + final OrderedLayout sp1second = new OrderedLayout(); + sp1.setFirstComponent(sp1first); + populateLayout(sp1first); + populateLayout(sp1second); + sp1.setSecondComponent(sp1second); + target.addComponent(sp1l); + } + + // ////////////////////////////////////////////////////////////////////// + // //// + if (false) { + target + .addComponent(new Label( + "<hr /><h1>Components inside horizontal SplitPanel (splitpanel is under 250px height ExpandLayout)</h3>", + Label.CONTENT_XHTML)); + final ExpandLayout sp2l = new ExpandLayout(); + sp2l.setHeight(250, SplitPanel.UNITS_PIXELS); + final SplitPanel sp2 = new SplitPanel( + SplitPanel.ORIENTATION_HORIZONTAL); + sp2l.addComponent(sp2); + final OrderedLayout sp2first = new OrderedLayout(); + final OrderedLayout sp2second = new OrderedLayout(); + sp2.setFirstComponent(sp2first); + populateLayout(sp2first); + populateLayout(sp2second); + sp2.setSecondComponent(sp2second); + target.addComponent(sp2l); + } + + } + + void populateLayout(Layout layout) { + final Button button = new Button("Button " + count++); + test(layout, button); + + final DateField df = new DateField("DateField " + count++); + test(layout, df); + + final CheckBox cb = new CheckBox("Checkbox " + count++); + test(layout, cb); + + final ClassResource flashResource = new ClassResource( + "itmill_spin.swf", this); + final Embedded emb = new Embedded("Embedded " + count++, flashResource); + emb.setType(Embedded.TYPE_OBJECT); + emb.setMimeType("application/x-shockwave-flash"); + emb.setWidth(250); + emb.setHeight(100); + test(layout, emb); + + final Panel panel = new Panel("Panel " + count++); + test(layout, panel); + + final Label label = new Label("Label " + count++); + test(layout, label); + + final Link link = new Link("Link " + count++, new ExternalResource( + "www.itmill.com")); + test(layout, link); + + final NativeSelect nativeSelect = new NativeSelect("NativeSelect " + + count++); + nativeSelect.setContainerDataSource(getContainer()); + test(layout, nativeSelect); + + final OptionGroup optionGroup = new OptionGroup("OptionGroup " + + count++); + optionGroup.setContainerDataSource(getSmallContainer()); + optionGroup.setItemCaptionPropertyId("UNIT"); + test(layout, optionGroup); + + // final ProgressIndicator pi = new ProgressIndicator(); + // pi.setCaption("ProgressIndicator"); + // test(layout, pi); + + final RichTextArea rta = new RichTextArea(); + test(layout, rta); + + final Select select = new Select("Select " + count++); + select.setContainerDataSource(getSmallContainer()); + select.setItemCaptionPropertyId("UNIT"); + test(layout, select); + + final Slider slider = new Slider("Slider " + count++); + test(layout, slider); + + final Table table = new Table("Table " + count++); + table.setPageLength(10); + table.setSelectable(true); + table.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX); + table.setColumnCollapsingAllowed(true); + table.setColumnReorderingAllowed(true); + table.setSelectable(true); + table.addActionHandler(this); + table.setContainerDataSource(getContainer()); + table.setVisibleColumns(new Object[] { "FIRSTNAME", "LASTNAME", + "TITLE", "UNIT" }); + table.setItemCaptionPropertyId("ID"); + test(layout, table); + + final TabSheet tabsheet = new TabSheet(); + final OrderedLayout tab1 = new OrderedLayout(); + tab1.addComponent(new Label("tab1 " + count++)); + final OrderedLayout tab2 = new OrderedLayout(); + tab2.addComponent(new Label("tab2 " + count++)); + tabsheet.addTab(tab1, "Default (not configured) TabSheet tab1", + new ClassResource("m.gif", this)); + tabsheet.addTab(tab2, "Configured TabSheet tab2", new ClassResource( + "m.gif", this)); + test(layout, tabsheet); + + final Accordion accordion = new Accordion(); + final OrderedLayout acc1 = new OrderedLayout(); + acc1.addComponent(new Label("acc1 " + count++)); + final OrderedLayout acc2 = new OrderedLayout(); + acc2.addComponent(new Label("acc2 " + count++)); + accordion.addTab(acc1, "Default (not configured) Accordion acc1", + new ClassResource("m.gif", this)); + accordion.addTab(acc2, "Configured Accordion acc2", new ClassResource( + "m.gif", this)); + test(layout, accordion); + + final TextField tf = new TextField("Textfield " + count++); + test(layout, tf); + // do not configure acc1 + // test(acc1); + test(acc2); + + final Tree tree = new Tree("Tree " + count++); + final File sampleDir = SampleDirectory.getDirectory(this); + final FilesystemContainer fsc = new FilesystemContainer(sampleDir, true); + tree.setContainerDataSource(fsc); + test(layout, tree); + + final TwinColSelect twinColSelect = new TwinColSelect("TwinColSelect " + + count++); + twinColSelect.setContainerDataSource(getSmallContainer()); + twinColSelect.setItemCaptionPropertyId("UNIT"); + test(layout, twinColSelect); + + final Upload upload = new Upload("Upload (non-functional)", null); + test(layout, upload); + + // Custom components + layout.addComponent(new Label("<B>Below are few custom components</B>", + Label.CONTENT_XHTML)); + final TestForUpload tfu = new TestForUpload(); + layout.addComponent(tfu); + layout.addComponent(new Label("<br/><b>----------<br/></p>", + Label.CONTENT_XHTML)); + test(tfu); + + // DISABLED + // TableSelectTest tst = new TableSelectTest(); + // layout.addComponent(tst); + // test(tst); + // layout.addComponent(new Label("<HR />", Label.CONTENT_XHTML)); + + } + + Container getContainer() { + // populate container with test SQL table rows + try { + return new QueryContainer("SELECT * FROM employee", sampleDatabase + .getConnection()); + } catch (final SQLException e) { + e.printStackTrace(); + } + return null; + } + + Container getSmallContainer() { + // populate container with test SQL table rows + try { + return new QueryContainer( + "SELECT DISTINCT UNIT AS UNIT FROM employee", + sampleDatabase.getConnection()); + } catch (final SQLException e) { + e.printStackTrace(); + } + return null; + } + + // common component configuration + void setComponentProperties(Component c) { + // TWEAK these + // c.setEnabled(false); + // c.setVisible(false); + // c.setStyleName("testStyleName"); + // c.setReadOnly(true); + + // try to add listener + try { + c.addListener(this); + } catch (final Exception e) { + System.err.println("Could not add listener for component " + c + + ", count was " + count); + } + } + + /** + * Stresses component by configuring it + * + * @param c + */ + void test(AbstractComponent c) { + // configure common component properties + // setComponentProperties(c); + + // AbstractComponent specific configuration + final ClassResource res = new ClassResource("m.gif", this); + final ErrorMessage errorMsg = new UserError("User error " + c); + if ((c.getCaption() == null) || (c.getCaption().length() <= 0)) { + c.setCaption("Caption " + c); + } + + // TWEAK these + // c.setComponentError(errorMsg); + // c.setIcon(res); + // c.setImmediate(true); + // c.addStyleName("addedTestStyleName"); + // c.setStyleName("singleTestStyleName"); + // c.setDescription("Description here.."); + } + + void test(CustomComponent c) { + // configure common component properties + setComponentProperties(c); + + // CustomComponent specific configuration + // TWEAK these + // c.setComponentType("foo"); + c.addStyleName("addedTestStyleName"); + } + + /** + * Stresses component by configuring it in a given layout + * + * @param c + */ + void test(Layout layout, AbstractComponent c) { + test(c); + layout.addComponent(c); + // add separator + if (!(layout instanceof GridLayout)) { + layout.addComponent(new Label("<br/><b>NEXT<br/></p>", + Label.CONTENT_XHTML)); + } + } + + public void componentEvent(Event event) { + eventCount++; + final String feedback = "eventCount=" + eventCount + ", class=" + + event.getClass() + ", source=" + event.getSource() + + ", toString()=" + event.toString(); + System.out.println("eventListenerFeedback: " + feedback); + eventListenerFeedback.setValue("Events: " + eventCount); + } + + // For sample actions + public Action[] getActions(Object target, Object sender) { + return actions; + } + + // For sample actions + public void handleAction(Action action, Object sender, Object target) { + System.out.println("ACTION: " + action.getCaption() + " on item " + + target); + } + +} |