summaryrefslogtreecommitdiffstats
path: root/src/com/vaadin/tests/TestComponentsAndLayouts.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/vaadin/tests/TestComponentsAndLayouts.java')
-rw-r--r--src/com/vaadin/tests/TestComponentsAndLayouts.java505
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);
+ }
+
+}