]> source.dussan.org Git - vaadin-framework.git/commitdiff
Brought multiple new demos which demonstrate (SplitPanel, ExpandLayout, RichTextEdito...
authorJani Laakso <jani.laakso@itmill.com>
Mon, 26 Nov 2007 09:50:29 +0000 (09:50 +0000)
committerJani Laakso <jani.laakso@itmill.com>
Mon, 26 Nov 2007 09:50:29 +0000 (09:50 +0000)
svn changeset:2946/svn branch:trunk

14 files changed:
src/com/itmill/toolkit/demo/NativeWindowing.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestBench.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestForAlignments.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestForBasicApplicationLayout.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestForContainerFilterable.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestForMultipleStyleNames.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestForPreconfiguredComponents.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestForRichTextEditor.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestForTrees.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestForUpload.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestForWindowOpen.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestForWindowing.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestSetVisibleAndCaching.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/testbench/TestSplitPanel.java [new file with mode: 0644]

diff --git a/src/com/itmill/toolkit/demo/NativeWindowing.java b/src/com/itmill/toolkit/demo/NativeWindowing.java
new file mode 100644 (file)
index 0000000..9b44292
--- /dev/null
@@ -0,0 +1,124 @@
+package com.itmill.toolkit.demo;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import com.itmill.toolkit.Application;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.Window;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+
+public class NativeWindowing extends Application {
+
+    Window main = new Window("Windowing test");
+
+    public void init() {
+
+        setMainWindow(main);
+
+        main.addComponent(new Button("Add new subwindow",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        final Window w = new Window("sw "
+                                + System.currentTimeMillis());
+                        main.addWindow(w);
+                        w.setPositionX(100);
+                        w.setPositionY(100);
+                        w.setWidth(200);
+                        w.setHeight(200);
+
+                        w.setWidth(100);
+                        w.setHeight(400);
+
+                        Button closebutton = new Button("Close "
+                                + w.getCaption(), new Button.ClickListener() {
+                            public void buttonClick(ClickEvent event) {
+                                main.removeWindow(w);
+                            }
+
+                        });
+                        w.addComponent(closebutton);
+
+                        w.addComponent(new Label(
+                                "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>"
+                                        + "<p>Lorem ipsum dolor sit amet.</p>",
+                                Label.CONTENT_XHTML));
+
+                    }
+                }));
+
+        main.addComponent(new Button(
+                "Open a currently uncreated application level window",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        try {
+                            main
+                                    .open(
+                                            new com.itmill.toolkit.terminal.ExternalResource(
+                                                    new URL(
+                                                            getURL(),
+                                                            "mainwin-"
+                                                                    + System
+                                                                            .currentTimeMillis()
+                                                                    + "/")),
+                                            null);
+                        } catch (MalformedURLException e) {
+                        }
+                    }
+                }));
+
+        main.addComponent(new Button(
+                "Commit (saves window state: size, place, scrollpos)"));
+    }
+
+    public Window getWindow(String name) {
+
+        Window w = super.getWindow(name);
+        if (w != null) {
+            return w;
+        }
+
+        if (name != null && name.startsWith("mainwin-")) {
+            String postfix = name.substring("mainwin-".length());
+            final Window ww = new Window("Window: " + postfix);
+            ww.setName(name);
+            ww.addComponent(new Label(
+                    "This is a application-level window opened with name: "
+                            + name));
+            ww.addComponent(new Button("Click me", new Button.ClickListener() {
+                int state = 0;
+
+                public void buttonClick(ClickEvent event) {
+                    ww.addComponent(new Label("Button clicked " + (++state)
+                            + " times"));
+                }
+            }));
+            addWindow(ww);
+            return ww;
+        }
+
+        return null;
+    }
+
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestBench.java b/src/com/itmill/toolkit/demo/testbench/TestBench.java
new file mode 100644 (file)
index 0000000..46a5565
--- /dev/null
@@ -0,0 +1,203 @@
+package com.itmill.toolkit.demo.testbench;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import com.itmill.toolkit.Application;
+import com.itmill.toolkit.data.Property;
+import com.itmill.toolkit.data.util.HierarchicalContainer;
+import com.itmill.toolkit.terminal.Sizeable;
+import com.itmill.toolkit.ui.Component;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.ExpandLayout;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.SplitPanel;
+import com.itmill.toolkit.ui.Tree;
+import com.itmill.toolkit.ui.Window;
+
+/**
+ * TestBench finds out testable classes within given java packages and adds them
+ * to menu from where they can be executed. Class is considered testable if it
+ * is of class CustomComponent.
+ * 
+ * Note: edit TestBench.testablePackages array
+ * 
+ * @author IT Mill Ltd.
+ * 
+ */
+public class TestBench extends com.itmill.toolkit.Application implements
+        Property.ValueChangeListener {
+
+    // Add here packages which are used for finding testable classes
+    String[] testablePackages = { "com.itmill.toolkit.demo.tests" };
+
+    HierarchicalContainer testables = new HierarchicalContainer();
+
+    Window mainWindow = new Window("TestBench window");
+
+    // Main layout consists of tree menu and body layout
+    SplitPanel mainLayout = new SplitPanel(SplitPanel.ORIENTATION_HORIZONTAL);
+
+    Tree menu;
+
+    Panel bodyLayout = new Panel();
+
+    HashMap itemCaptions = new HashMap();
+
+    public void init() {
+
+        // Add testable classes to hierarchical container
+        for (int p = 0; p < testablePackages.length; p++) {
+            testables.addItem(testablePackages[p]);
+            try {
+                List testableClasses = getTestableClassesForPackage(testablePackages[p]);
+                for (Iterator it = testableClasses.iterator(); it.hasNext();) {
+                    Class t = (Class) it.next();
+                    // ignore TestBench itself
+                    if (t.equals(TestBench.class)) {
+                        continue;
+                    }
+                    try {
+                        testables.addItem(t);
+                        itemCaptions.put(t, t.getName());
+                        testables.setParent(t, testablePackages[p]);
+                        continue;
+                    } catch (Exception e) {
+                        try {
+                            testables.addItem(t);
+                            itemCaptions.put(t, t.getName());
+                            testables.setParent(t, testablePackages[p]);
+                            continue;
+                        } catch (Exception e1) {
+                            e1.printStackTrace();
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        menu = new Tree("Testables", testables);
+        // simplify captions
+        for (Iterator i = itemCaptions.keySet().iterator(); i.hasNext();) {
+            Class testable = (Class) i.next();
+            menu.setItemCaption(testable, testable.getName());
+        }
+        menu.addListener(this);
+        menu.setImmediate(true);
+
+        mainLayout.addComponent(menu);
+
+        bodyLayout.addStyleName("light");
+        bodyLayout.setHeight(100);
+        bodyLayout.setHeightUnits(Sizeable.UNITS_PERCENTAGE);
+        bodyLayout.setLayout(new ExpandLayout());
+
+        mainLayout.addComponent(bodyLayout);
+
+        mainLayout.setSplitPosition(30);
+
+        mainWindow.setLayout(mainLayout);
+
+        setMainWindow(mainWindow);
+    }
+
+    private Component createTestable(Class c) {
+        try {
+            Application app = (Application) c.newInstance();
+            app.init();
+            return app.getMainWindow().getLayout();
+        } catch (Exception e) {
+            try {
+                CustomComponent cc = (CustomComponent) c.newInstance();
+                return cc;
+            } catch (Exception e1) {
+                e1.printStackTrace();
+                return new Label("Cannot create custom component: "
+                        + e1.toString());
+            }
+        }
+    }
+
+    // Handle menu selection and update body
+    public void valueChange(Property.ValueChangeEvent event) {
+        bodyLayout.removeAllComponents();
+        bodyLayout.setCaption(null);
+
+        String title = ((Class) menu.getValue()).getName();
+        bodyLayout.setCaption(title);
+        bodyLayout.addComponent(createTestable((Class) menu.getValue()));
+    }
+
+    /**
+     * Return all testable classes within given package. Class is considered
+     * testable if it's superclass is CustomComponent.
+     * 
+     * @param packageName
+     * @return
+     * @throws ClassNotFoundException
+     */
+    public static List getTestableClassesForPackage(String packageName)
+            throws Exception {
+        ArrayList directories = new ArrayList();
+        try {
+            ClassLoader cld = Thread.currentThread().getContextClassLoader();
+            if (cld == null) {
+                throw new ClassNotFoundException("Can't get class loader.");
+            }
+            String path = packageName.replace('.', '/');
+            // Ask for all resources for the path
+            Enumeration resources = cld.getResources(path);
+            while (resources.hasMoreElements()) {
+                URL url = (URL) resources.nextElement();
+                directories.add(new File(url.getFile()));
+            }
+        } catch (Exception x) {
+            throw new Exception(packageName
+                    + " does not appear to be a valid package.");
+        }
+
+        ArrayList classes = new ArrayList();
+        // For every directory identified capture all the .class files
+        for (Iterator it = directories.iterator(); it.hasNext();) {
+            File directory = (File) it.next();
+            if (directory.exists()) {
+                // Get the list of the files contained in the package
+                String[] files = directory.list();
+                for (int j = 0; j < files.length; j++) {
+                    // we are only interested in .class files
+                    if (files[j].endsWith(".class")) {
+                        // removes the .class extension
+                        String p = packageName + '.'
+                                + files[j].substring(0, files[j].length() - 6);
+                        Class c = Class.forName(p);
+                        if (c.getSuperclass() != null) {
+                            // if ((c.getSuperclass()
+                            // .equals(com.itmill.toolkit.Application.class))) {
+                            // classes.add(c);
+                            // } else
+                            if ((c.getSuperclass()
+                                    .equals(com.itmill.toolkit.ui.CustomComponent.class))) {
+                                classes.add(c);
+                            }
+                        }
+                    }
+                }
+            } else {
+                throw new ClassNotFoundException(packageName + " ("
+                        + directory.getPath()
+                        + ") does not appear to be a valid package");
+            }
+        }
+
+        return classes;
+    }
+
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestForAlignments.java b/src/com/itmill/toolkit/demo/testbench/TestForAlignments.java
new file mode 100644 (file)
index 0000000..2fe5344
--- /dev/null
@@ -0,0 +1,62 @@
+package com.itmill.toolkit.demo.testbench;
+
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.DateField;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.TextField;
+
+public class TestForAlignments extends CustomComponent {
+
+    public TestForAlignments() {
+
+        OrderedLayout main = new OrderedLayout();
+
+        Button b1 = new Button("Right");
+        Button b2 = new Button("Left");
+        Button b3 = new Button("Bottom");
+        Button b4 = new Button("Top");
+        TextField t1 = new TextField("Right aligned");
+        TextField t2 = new TextField("Bottom aligned");
+        DateField d1 = new DateField("Center aligned");
+        DateField d2 = new DateField("Center aligned");
+
+        OrderedLayout vert = new OrderedLayout();
+        vert.addComponent(b1);
+        vert.addComponent(b2);
+        vert.addComponent(t1);
+        vert.addComponent(d1);
+        vert.setWidth(500);
+        vert.setComponentAlignment(b1, OrderedLayout.ALIGNMENT_RIGHT,
+                OrderedLayout.ALIGNMENT_TOP);
+        vert.setComponentAlignment(b2, OrderedLayout.ALIGNMENT_LEFT,
+                OrderedLayout.ALIGNMENT_TOP);
+        vert.setComponentAlignment(t1, OrderedLayout.ALIGNMENT_RIGHT,
+                OrderedLayout.ALIGNMENT_TOP);
+        vert.setComponentAlignment(d1,
+                OrderedLayout.ALIGNMENT_HORIZONTAL_CENTER,
+                OrderedLayout.ALIGNMENT_TOP);
+        OrderedLayout hori = new OrderedLayout(
+                OrderedLayout.ORIENTATION_HORIZONTAL);
+        hori.addComponent(b3);
+        hori.addComponent(b4);
+        hori.addComponent(t2);
+        hori.addComponent(d2);
+        hori.setHeight(200);
+        hori.setComponentAlignment(b3, OrderedLayout.ALIGNMENT_LEFT,
+                OrderedLayout.ALIGNMENT_BOTTOM);
+        hori.setComponentAlignment(b4, OrderedLayout.ALIGNMENT_LEFT,
+                OrderedLayout.ALIGNMENT_TOP);
+        hori.setComponentAlignment(t2, OrderedLayout.ALIGNMENT_LEFT,
+                OrderedLayout.ALIGNMENT_BOTTOM);
+        hori.setComponentAlignment(d2, OrderedLayout.ALIGNMENT_LEFT,
+                OrderedLayout.ALIGNMENT_VERTICAL_CENTER);
+
+        main.addComponent(vert);
+        main.addComponent(hori);
+
+        setCompositionRoot(main);
+
+    }
+
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestForBasicApplicationLayout.java b/src/com/itmill/toolkit/demo/testbench/TestForBasicApplicationLayout.java
new file mode 100644 (file)
index 0000000..77f671c
--- /dev/null
@@ -0,0 +1,115 @@
+package com.itmill.toolkit.demo.testbench;\r
+\r
+import java.sql.SQLException;\r
+import java.util.Locale;\r
+\r
+import com.itmill.toolkit.data.util.QueryContainer;\r
+import com.itmill.toolkit.demo.util.SampleDatabase;\r
+import com.itmill.toolkit.terminal.Sizeable;\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.CustomComponent;\r
+import com.itmill.toolkit.ui.DateField;\r
+import com.itmill.toolkit.ui.ExpandLayout;\r
+import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.OrderedLayout;\r
+import com.itmill.toolkit.ui.Panel;\r
+import com.itmill.toolkit.ui.SplitPanel;\r
+import com.itmill.toolkit.ui.TabSheet;\r
+import com.itmill.toolkit.ui.Table;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+import com.itmill.toolkit.ui.Button.ClickListener;\r
+\r
+public class TestForBasicApplicationLayout extends CustomComponent {\r
+\r
+    private Button click;\r
+    private Button click2;\r
+    private TabSheet tab;\r
+\r
+    // Database provided with sample data\r
+    private SampleDatabase sampleDatabase;\r
+\r
+    public TestForBasicApplicationLayout() {\r
+\r
+        click = new Button("Set height -1", new ClickListener() {\r
+\r
+            public void buttonClick(ClickEvent event) {\r
+                tab.setHeight(-1);\r
+            }\r
+\r
+        });\r
+\r
+        click2 = new Button("Set height 100%", new ClickListener() {\r
+\r
+            public void buttonClick(ClickEvent event) {\r
+                tab.setHeight(100);\r
+                tab.setHeightUnits(Sizeable.UNITS_PERCENTAGE);\r
+            }\r
+\r
+        });\r
+\r
+        SplitPanel sp = new SplitPanel(SplitPanel.ORIENTATION_HORIZONTAL);\r
+        sp.setSplitPosition(290, Sizeable.UNITS_PIXELS);\r
+\r
+        SplitPanel sp2 = new SplitPanel(SplitPanel.ORIENTATION_VERTICAL);\r
+        sp2.setSplitPosition(255, Sizeable.UNITS_PIXELS);\r
+\r
+        Panel p = new Panel("Accordion Panel");\r
+        p.setSizeFull();\r
+\r
+        tab = new TabSheet();\r
+        tab.setSizeFull();\r
+\r
+        Panel report = new Panel("Monthly Program Runs", new ExpandLayout());\r
+        OrderedLayout controls = new OrderedLayout();\r
+        controls.setMargin(true);\r
+        controls.addComponent(new Label("Report tab"));\r
+        controls.addComponent(click);\r
+        controls.addComponent(click2);\r
+        report.addComponent(controls);\r
+        DateField cal = new DateField();\r
+        cal.setResolution(DateField.RESOLUTION_DAY);\r
+        cal.setLocale(new Locale("en", "US"));\r
+        report.addComponent(cal);\r
+        ((ExpandLayout) report.getLayout()).expand(controls);\r
+        report.addStyleName(Panel.STYLE_LIGHT);\r
+        report.setHeight(100);\r
+        report.setHeightUnits(Sizeable.UNITS_PERCENTAGE);\r
+\r
+        sp2.setFirstComponent(report);\r
+\r
+        Table table = new Table();\r
+        // populate Toolkit table component with test SQL table rows\r
+        try {\r
+            QueryContainer qc = new QueryContainer("SELECT * FROM employee",\r
+                    sampleDatabase.getConnection());\r
+            table.setContainerDataSource(qc);\r
+        } catch (SQLException e) {\r
+            e.printStackTrace();\r
+        }\r
+        // define which columns should be visible on Table component\r
+        table.setVisibleColumns(new Object[] { "FIRSTNAME", "LASTNAME",\r
+                "TITLE", "UNIT" });\r
+        table.setItemCaptionPropertyId("ID");\r
+        table.setPageLength(15);\r
+        table.setSelectable(true);\r
+        table.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX);\r
+        table.setColumnCollapsingAllowed(true);\r
+        table.setColumnReorderingAllowed(true);\r
+        table.setSortDisabled(false);\r
+        table.setSizeFull();\r
+        table.addStyleName("table-inline");\r
+        sp2.setSecondComponent(table);\r
+\r
+        tab.addTab(new Label("Tab1"), "Summary", null);\r
+        tab.addTab(sp2, "Reports", null);\r
+        tab.addTab(new Label("Tab 3"), "Statistics", null);\r
+        tab.addTab(new Label("Tab 4"), "Error Tracking", null);\r
+        tab.setSelectedTab(sp2);\r
+\r
+        sp.setFirstComponent(p);\r
+        sp.setSecondComponent(tab);\r
+\r
+        setCompositionRoot(sp);\r
+    }\r
+\r
+}\r
diff --git a/src/com/itmill/toolkit/demo/testbench/TestForContainerFilterable.java b/src/com/itmill/toolkit/demo/testbench/TestForContainerFilterable.java
new file mode 100644 (file)
index 0000000..946c605
--- /dev/null
@@ -0,0 +1,93 @@
+package com.itmill.toolkit.demo.testbench;
+
+import com.itmill.toolkit.data.util.IndexedContainer;
+import com.itmill.toolkit.terminal.Sizeable;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.Table;
+import com.itmill.toolkit.ui.TextField;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+
+public class TestForContainerFilterable extends CustomComponent {
+
+    OrderedLayout lo = new OrderedLayout();
+    IndexedContainer ic = new IndexedContainer();
+    Table t = new Table();
+    private static String parts[] = { "Neo", "Sa", "rem", "the", "adi", "za",
+            "tre", "day", "Ca", "re", "cen", "ter", "mi", "nal" };
+    TextField fooFilter = new TextField("foo-filter");
+    TextField barFilter = new TextField("bar-filter");
+    Button filterButton = new Button("Filter");
+    Label count = new Label();
+
+    public TestForContainerFilterable() {
+        setCompositionRoot(lo);
+
+        // Init datasource
+        ic.addContainerProperty("foo", String.class, "");
+        ic.addContainerProperty("bar", String.class, "");
+        for (int i = 0; i < 1000; i++) {
+            Object id = ic.addItem();
+            ic.getContainerProperty(id, "foo").setValue(randomWord());
+            ic.getContainerProperty(id, "bar").setValue(randomWord());
+        }
+
+        // Init filtering view
+        Panel filterPanel = new Panel("Filter", new OrderedLayout(
+                OrderedLayout.ORIENTATION_HORIZONTAL));
+        filterPanel.setWidth(100);
+        filterPanel.setWidthUnits(Sizeable.UNITS_PERCENTAGE);
+        lo.addComponent(filterPanel);
+        filterPanel.addComponent(fooFilter);
+        filterPanel.addComponent(barFilter);
+        filterPanel.addComponent(filterButton);
+        fooFilter
+                .setDescription("Filters foo column in case-sensitive contains manner.");
+        barFilter
+                .setDescription("Filters bar column in case-insensitive prefix manner.");
+        filterPanel.addComponent(count);
+
+        // Table
+        lo.addComponent(t);
+        t.setPageLength(12);
+        t.setWidth(100);
+        t.setWidthUnits(Sizeable.UNITS_PERCENTAGE);
+        t.setContainerDataSource(ic);
+
+        // Handler
+        filterButton.addListener(new Button.ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                ic.removeAllContainerFilters();
+                if (fooFilter.toString().length() > 0) {
+                    ic.addContainerFilter("foo", fooFilter.toString(), false,
+                            false);
+                }
+                if (barFilter.toString().length() > 0) {
+                    ic.addContainerFilter("bar", barFilter.toString(), true,
+                            true);
+                }
+                count.setValue("Rows in table: " + ic.size());
+            }
+        });
+
+        // Resetbutton
+        lo.addComponent(new Button("Rebind table datasource",
+                new Button.ClickListener() {
+                    public void buttonClick(ClickEvent event) {
+                        t.setContainerDataSource(ic);
+                    }
+                }));
+    }
+
+    private String randomWord() {
+        int len = (int) (Math.random() * 4);
+        StringBuffer buf = new StringBuffer();
+        while (len-- >= 0) {
+            buf.append(parts[(int) (Math.random() * parts.length)]);
+        }
+        return buf.toString();
+    }
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestForMultipleStyleNames.java b/src/com/itmill/toolkit/demo/testbench/TestForMultipleStyleNames.java
new file mode 100644 (file)
index 0000000..d8f8649
--- /dev/null
@@ -0,0 +1,92 @@
+package com.itmill.toolkit.demo.testbench;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.data.Property.ValueChangeListener;
+import com.itmill.toolkit.data.util.IndexedContainer;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.TwinColSelect;
+
+/**
+ * TODO: Note you need to add Theme under WebContent/ITMILL/Themes/mytheme in
+ * order to see actual visible results on the browser. Currently changes are
+ * visible only by inspecting DOM.
+ * 
+ * @author IT Mill Ltd.
+ */
+public class TestForMultipleStyleNames extends CustomComponent implements
+        ValueChangeListener {
+
+    private final OrderedLayout main = new OrderedLayout();
+
+    private Label l;
+
+    private final TwinColSelect s = new TwinColSelect();
+
+    private ArrayList styleNames2;
+
+    public TestForMultipleStyleNames() {
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(new Label(
+                "TK5 supports multiple stylenames for components."));
+        main.addComponent(new Label("Note you need to add Theme under"
+                + " WebContent/ITMILL/Themes/mytheme"
+                + " in order to see actual visible results"
+                + " on the browser. Currently changes are"
+                + " visible only by inspecting DOM."));
+
+        styleNames2 = new ArrayList();
+
+        styleNames2.add("red");
+        styleNames2.add("bold");
+        styleNames2.add("italic");
+
+        s.setContainerDataSource(new IndexedContainer(styleNames2));
+        s.addListener(this);
+        s.setImmediate(true);
+        main.addComponent(s);
+
+        l = new Label("Test labele");
+        main.addComponent(l);
+
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+
+        String currentStyle = l.getStyle();
+        String[] tmp = currentStyle.split(" ");
+        ArrayList curStyles = new ArrayList();
+        for (int i = 0; i < tmp.length; i++) {
+            if (tmp[i] != "") {
+                curStyles.add(tmp[i]);
+            }
+        }
+
+        Collection styles = (Collection) s.getValue();
+
+        for (Iterator iterator = styles.iterator(); iterator.hasNext();) {
+            String styleName = (String) iterator.next();
+            if (curStyles.contains(styleName)) {
+                // already added
+                curStyles.remove(styleName);
+            } else {
+                l.addStyleName(styleName);
+            }
+        }
+        for (Iterator iterator2 = curStyles.iterator(); iterator2.hasNext();) {
+            String object = (String) iterator2.next();
+            l.removeStyleName(object);
+        }
+    }
+
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestForPreconfiguredComponents.java b/src/com/itmill/toolkit/demo/testbench/TestForPreconfiguredComponents.java
new file mode 100644 (file)
index 0000000..e3d21ee
--- /dev/null
@@ -0,0 +1,182 @@
+package com.itmill.toolkit.demo.testbench;
+
+import com.itmill.toolkit.event.Action;
+import com.itmill.toolkit.event.Action.Handler;
+import com.itmill.toolkit.ui.AbstractSelect;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CheckBox;
+import com.itmill.toolkit.ui.Component;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.NativeSelect;
+import com.itmill.toolkit.ui.OptionGroup;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.Tree;
+import com.itmill.toolkit.ui.TwinColSelect;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Button.ClickListener;
+
+/**
+ * @author IT Mill Ltd.
+ */
+public class TestForPreconfiguredComponents extends CustomComponent implements
+        Handler {
+
+    private static final String[] firstnames = new String[] { "John", "Mary",
+            "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
+
+    private static final String[] lastnames = new String[] { "Torvalds",
+            "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding",
+            "Einstein" };
+
+    private final OrderedLayout main = new OrderedLayout();
+
+    private final Action[] actions = new Action[] { new Action("edit"),
+            new Action("delete") };
+
+    private Panel al;
+
+    private Tree contextTree;
+
+    public TestForPreconfiguredComponents() {
+
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main
+                .addComponent(new Label(
+                        "In Toolkit 5 we introduce new componens. Previously we"
+                                + " usually used setStyle or some other methods on possibly "
+                                + "multiple steps to configure component for ones needs. These new "
+                                + "server side components are mostly just classes that in constructor "
+                                + "set base class to state that programmer wants."));
+
+        main.addComponent(new Button("commit"));
+
+        Panel test = createTestBench(new CheckBox());
+        test.setCaption("CheckBox (configured from button)");
+        main.addComponent(test);
+
+        AbstractSelect s = new TwinColSelect();
+        fillSelect(s, 20);
+        test = createTestBench(s);
+        test.setCaption("TwinColSelect (configured from select)");
+        main.addComponent(test);
+
+        s = new NativeSelect();
+        fillSelect(s, 20);
+        test = createTestBench(s);
+        test.setCaption("Native (configured from select)");
+        main.addComponent(test);
+
+        s = new OptionGroup();
+        fillSelect(s, 20);
+        test = createTestBench(s);
+        test.setCaption("OptionGroup (configured from select)");
+        main.addComponent(test);
+
+        s = new OptionGroup();
+        fillSelect(s, 20);
+        s.setMultiSelect(true);
+        test = createTestBench(s);
+        test
+                .setCaption("OptionGroup + multiselect manually (configured from select)");
+        main.addComponent(test);
+
+        Button b = new Button("refresh view", this, "createNewView");
+        main.addComponent(b);
+
+    }
+
+    public static void fillSelect(AbstractSelect s, int items) {
+        for (int i = 0; i < items; i++) {
+            String name = firstnames[(int) (Math.random() * (firstnames.length - 1))]
+                    + " "
+                    + lastnames[(int) (Math.random() * (lastnames.length - 1))];
+            s.addItem(name);
+        }
+    }
+
+    public Tree createTestTree() {
+        Tree t = new Tree("Tree");
+        String[] names = new String[100];
+        for (int i = 0; i < names.length; i++) {
+            names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))]
+                    + " "
+                    + lastnames[(int) (Math.random() * (lastnames.length - 1))];
+        }
+
+        // Create tree
+        t = new Tree("Organization Structure");
+        for (int i = 0; i < 100; i++) {
+            t.addItem(names[i]);
+            String parent = names[(int) (Math.random() * (names.length - 1))];
+            if (t.containsId(parent)) {
+                t.setParent(names[i], parent);
+            }
+        }
+
+        // Forbid childless people to have children (makes them leaves)
+        for (int i = 0; i < 100; i++) {
+            if (!t.hasChildren(names[i])) {
+                t.setChildrenAllowed(names[i], false);
+            }
+        }
+        return t;
+    }
+
+    public Panel createTestBench(Component t) {
+        Panel ol = new Panel();
+        ol.setLayout(new OrderedLayout(OrderedLayout.ORIENTATION_HORIZONTAL));
+
+        ol.addComponent(t);
+
+        final OrderedLayout ol2 = new OrderedLayout(
+                OrderedLayout.ORIENTATION_HORIZONTAL);
+        final Panel status = new Panel("Events");
+        final Button clear = new Button("clear event log");
+        clear.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                status.removeAllComponents();
+                status.addComponent(ol2);
+            }
+        });
+        ol2.addComponent(clear);
+        final Button commit = new Button("commit changes");
+        ol2.addComponent(commit);
+        status.addComponent(ol2);
+
+        status.setHeight(300);
+        status.setWidth(400);
+
+        ol.addComponent(status);
+
+        t.addListener(new Listener() {
+            public void componentEvent(Event event) {
+                status.addComponent(new Label(event.getClass().getName()));
+                status.addComponent(new Label("selected: "
+                        + event.getSource().toString()));
+            }
+        });
+
+        return ol;
+    }
+
+    public Action[] getActions(Object target, Object sender) {
+        return actions;
+    }
+
+    public void handleAction(Action action, Object sender, Object target) {
+        if (action == actions[1]) {
+            al.addComponent(new Label("Delete selected on " + target));
+            contextTree.removeItem(target);
+
+        } else {
+            al.addComponent(new Label("Edit selected on " + target));
+        }
+    }
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestForRichTextEditor.java b/src/com/itmill/toolkit/demo/testbench/TestForRichTextEditor.java
new file mode 100644 (file)
index 0000000..b0897e9
--- /dev/null
@@ -0,0 +1,51 @@
+package com.itmill.toolkit.demo.testbench;
+
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.data.Property.ValueChangeListener;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.RichTextArea;
+
+/**
+ * 
+ * @author IT Mill Ltd.
+ */
+public class TestForRichTextEditor extends CustomComponent implements
+        ValueChangeListener {
+
+    private OrderedLayout main = new OrderedLayout();
+
+    private Label l;
+
+    private RichTextArea rte;
+
+    public TestForRichTextEditor() {
+
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main.addComponent(new Label(
+                "RTE uses google richtextArea and their examples toolbar."));
+
+        rte = new RichTextArea();
+        rte.addListener(this);
+
+        main.addComponent(rte);
+
+        main.addComponent(new Button("commit content to label below"));
+
+        l = new Label("", Label.CONTENT_XHTML);
+        main.addComponent(l);
+
+    }
+
+    public void valueChange(ValueChangeEvent event) {
+        l.setValue(rte.getValue());
+    }
+
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestForTrees.java b/src/com/itmill/toolkit/demo/testbench/TestForTrees.java
new file mode 100644 (file)
index 0000000..a13cf4d
--- /dev/null
@@ -0,0 +1,162 @@
+package com.itmill.toolkit.demo.testbench;
+
+import com.itmill.toolkit.event.Action;
+import com.itmill.toolkit.event.Action.Handler;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.Component;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.Tree;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Button.ClickListener;
+
+/**
+ * Some test cases for trees. Events panel logs events that happen server side.
+ * 
+ * @author IT Mill Ltd.
+ */
+public class TestForTrees extends CustomComponent implements Handler {
+
+    private static final String[] firstnames = new String[] { "John", "Mary",
+            "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" };
+
+    private static final String[] lastnames = new String[] { "Torvalds",
+            "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding",
+            "Einstein" };
+
+    private OrderedLayout main = new OrderedLayout();
+
+    private Action[] actions = new Action[] { new Action("edit"),
+            new Action("delete") };
+
+    private Panel al;
+
+    private Tree contextTree;
+
+    public TestForTrees() {
+
+        setCompositionRoot(main);
+        createNewView();
+    }
+
+    public void createNewView() {
+        main.removeAllComponents();
+        main
+                .addComponent(new Label(
+                        "Some test cases for trees. Events panel logs events that happen server side."));
+
+        main.addComponent(new Button("commit"));
+
+        Tree t;
+
+        t = createTestTree();
+        t.setCaption("Default settings");
+        main.addComponent(createTestBench(t));
+
+        t = createTestTree();
+        t.setCaption("Multiselect settings");
+        t.setMultiSelect(true);
+        main.addComponent(createTestBench(t));
+
+        t = createTestTree();
+        t.setCaption("Multiselect and immediate");
+        t.setImmediate(true);
+        t.setMultiSelect(true);
+        main.addComponent(createTestBench(t));
+
+        t = createTestTree();
+        t.setCaption("immediate");
+        t.setImmediate(true);
+        main.addComponent(createTestBench(t));
+
+        t = createTestTree();
+        t.setCaption("with actions");
+        t.setImmediate(true);
+        t.addActionHandler(this);
+        OrderedLayout ol = (OrderedLayout) createTestBench(t);
+        al = new Panel("action log");
+        ol.addComponent(al);
+        main.addComponent(ol);
+        contextTree = t;
+
+        Button b = new Button("refresh view", this, "createNewView");
+        main.addComponent(b);
+
+    }
+
+    public Tree createTestTree() {
+        Tree t = new Tree("Tree");
+        String[] names = new String[100];
+        for (int i = 0; i < names.length; i++) {
+            names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))]
+                    + " "
+                    + lastnames[(int) (Math.random() * (lastnames.length - 1))];
+        }
+
+        // Create tree
+        t = new Tree("Organization Structure");
+        for (int i = 0; i < 100; i++) {
+            t.addItem(names[i]);
+            String parent = names[(int) (Math.random() * (names.length - 1))];
+            if (t.containsId(parent)) {
+                t.setParent(names[i], parent);
+            }
+        }
+
+        // Forbid childless people to have children (makes them leaves)
+        for (int i = 0; i < 100; i++) {
+            if (!t.hasChildren(names[i])) {
+                t.setChildrenAllowed(names[i], false);
+            }
+        }
+        return t;
+    }
+
+    public Component createTestBench(Tree t) {
+        OrderedLayout ol = new OrderedLayout();
+        ol.setOrientation(OrderedLayout.ORIENTATION_HORIZONTAL);
+
+        ol.addComponent(t);
+
+        final Panel status = new Panel("Events");
+        final Button clear = new Button("c");
+        clear.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                status.removeAllComponents();
+                status.addComponent(clear);
+            }
+        });
+        status.addComponent(clear);
+
+        status.setHeight(300);
+        status.setWidth(400);
+
+        ol.addComponent(status);
+
+        t.addListener(new Listener() {
+            public void componentEvent(Event event) {
+                status.addComponent(new Label(event.getClass().getName()));
+                status.addComponent(new Label("selected: "
+                        + event.getSource().toString()));
+            }
+        });
+
+        return ol;
+    }
+
+    public Action[] getActions(Object target, Object sender) {
+        return actions;
+    }
+
+    public void handleAction(Action action, Object sender, Object target) {
+        if (action == actions[1]) {
+            al.addComponent(new Label("Delete selected on " + target));
+            contextTree.removeItem(target);
+
+        } else {
+            al.addComponent(new Label("Edit selected on " + target));
+        }
+    }
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestForUpload.java b/src/com/itmill/toolkit/demo/testbench/TestForUpload.java
new file mode 100644 (file)
index 0000000..56a381c
--- /dev/null
@@ -0,0 +1,345 @@
+package com.itmill.toolkit.demo.testbench;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.terminal.StreamResource;
+import com.itmill.toolkit.ui.AbstractField;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.Layout;
+import com.itmill.toolkit.ui.Link;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.ProgressIndicator;
+import com.itmill.toolkit.ui.Select;
+import com.itmill.toolkit.ui.Upload;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Upload.FailedEvent;
+import com.itmill.toolkit.ui.Upload.FailedListener;
+import com.itmill.toolkit.ui.Upload.FinishedEvent;
+import com.itmill.toolkit.ui.Upload.FinishedListener;
+import com.itmill.toolkit.ui.Upload.StartedEvent;
+import com.itmill.toolkit.ui.Upload.StartedListener;
+import com.itmill.toolkit.ui.Upload.SucceededEvent;
+import com.itmill.toolkit.ui.Upload.SucceededListener;
+
+public class TestForUpload extends CustomComponent implements
+        Upload.FinishedListener, FailedListener, SucceededListener,
+        Upload.ProgressListener, StartedListener {
+
+    Layout main = new OrderedLayout();
+
+    Buffer buffer = new MemoryBuffer();
+
+    Panel status = new Panel("Uploaded file:");
+
+    private final Upload up;
+
+    private final Label l;
+
+    private final ProgressIndicator pi = new ProgressIndicator();
+
+    private final Label memoryStatus;
+
+    private final Select uploadBufferSelector;
+
+    public TestForUpload() {
+        setCompositionRoot(main);
+        main.addComponent(new Label(
+                "This is a simple test for upload application. "
+                        + "Upload should work with big files and concurrent "
+                        + "requests should not be blocked. Button 'b' reads "
+                        + "current state into label below it. Memory receiver "
+                        + "streams upload contents into memory. You may track"
+                        + "consumption."
+                        + "tempfile receiver writes upload to file and "
+                        + "should have low memory consumption."));
+
+        main
+                .addComponent(new Label(
+                        "Clicking on button b updates information about upload components status or same with garbage collector."));
+
+        up = new Upload("Upload", buffer);
+        up.setImmediate(true);
+        up.addListener((FinishedListener) this);
+        up.addListener((FailedListener) this);
+        up.addListener((SucceededListener) this);
+        up.addListener((StartedListener) this);
+
+        up.setProgressListener(this);
+
+        Button b = new Button("b", this, "readState");
+
+        Button c = new Button("b with gc", this, "gc");
+
+        main.addComponent(b);
+        main.addComponent(c);
+
+        uploadBufferSelector = new Select("Receiver type");
+        uploadBufferSelector.setImmediate(true);
+        uploadBufferSelector.addItem("memory");
+        uploadBufferSelector.setValue("memory");
+        uploadBufferSelector.addItem("tempfile");
+        uploadBufferSelector
+                .addListener(new AbstractField.ValueChangeListener() {
+                    public void valueChange(ValueChangeEvent event) {
+                        setBuffer();
+                    }
+                });
+        main.addComponent(uploadBufferSelector);
+
+        main.addComponent(up);
+        l = new Label("Idle");
+        main.addComponent(l);
+
+        pi.setVisible(false);
+        pi.setPollingInterval(1000);
+        main.addComponent(pi);
+
+        memoryStatus = new Label();
+        main.addComponent(memoryStatus);
+
+        status.setVisible(false);
+        main.addComponent(status);
+
+        Button restart = new Button("R");
+        restart.addListener(new Button.ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                getApplication().close();
+            }
+        });
+        main.addComponent(restart);
+
+    }
+
+    private void setBuffer() {
+        String id = (String) uploadBufferSelector.getValue();
+        if ("memory".equals(id)) {
+            buffer = new MemoryBuffer();
+        } else if ("tempfile".equals(id)) {
+            buffer = new TmpFileBuffer();
+        }
+        up.setReceiver(buffer);
+    }
+
+    public void gc() {
+        Runtime.getRuntime().gc();
+        readState();
+    }
+
+    public void readState() {
+        StringBuffer sb = new StringBuffer();
+
+        if (up.isUploading()) {
+            sb.append("Uploading...");
+            sb.append(up.getBytesRead());
+            sb.append("/");
+            sb.append(up.getUploadSize());
+            sb.append(" ");
+            sb.append(Math.round(100 * up.getBytesRead()
+                    / (double) up.getUploadSize()));
+            sb.append("%");
+        } else {
+            sb.append("Idle");
+        }
+        l.setValue(sb.toString());
+        refreshMemUsage();
+    }
+
+    public void uploadFinished(FinishedEvent event) {
+        status.removeAllComponents();
+        InputStream stream = buffer.getStream();
+        if (stream == null) {
+            status.addComponent(new Label(
+                    "Upload finished, but output buffer is null!!"));
+        } else {
+            status
+                    .addComponent(new Label("<b>Name:</b> "
+                            + event.getFilename(), Label.CONTENT_XHTML));
+            status.addComponent(new Label("<b>Mimetype:</b> "
+                    + event.getMIMEType(), Label.CONTENT_XHTML));
+            status.addComponent(new Label("<b>Size:</b> " + event.getLength()
+                    + " bytes.", Label.CONTENT_XHTML));
+
+            status.addComponent(new Link("Download " + buffer.getFileName(),
+                    new StreamResource(buffer, buffer.getFileName(),
+                            getApplication())));
+
+            status.setVisible(true);
+        }
+    }
+
+    public interface Buffer extends StreamResource.StreamSource,
+            Upload.Receiver {
+
+        String getFileName();
+    }
+
+    public class MemoryBuffer implements Buffer {
+        ByteArrayOutputStream outputBuffer = null;
+
+        String mimeType;
+
+        String fileName;
+
+        public MemoryBuffer() {
+
+        }
+
+        public InputStream getStream() {
+            if (outputBuffer == null) {
+                return null;
+            }
+            return new ByteArrayInputStream(outputBuffer.toByteArray());
+        }
+
+        /**
+         * @see com.itmill.toolkit.ui.Upload.Receiver#receiveUpload(String,
+         *      String)
+         */
+        public OutputStream receiveUpload(String filename, String MIMEType) {
+            fileName = filename;
+            mimeType = MIMEType;
+            outputBuffer = new ByteArrayOutputStream();
+            return outputBuffer;
+        }
+
+        /**
+         * Returns the fileName.
+         * 
+         * @return String
+         */
+        public String getFileName() {
+            return fileName;
+        }
+
+        /**
+         * Returns the mimeType.
+         * 
+         * @return String
+         */
+        public String getMimeType() {
+            return mimeType;
+        }
+
+    }
+
+    public class TmpFileBuffer implements Buffer {
+        String mimeType;
+
+        String fileName;
+
+        private File file;
+
+        private FileInputStream stream;
+
+        public TmpFileBuffer() {
+            String tempFileName = "upload_tmpfile_"
+                    + System.currentTimeMillis();
+            try {
+                file = File.createTempFile(tempFileName, null);
+            } catch (IOException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+
+        }
+
+        public InputStream getStream() {
+            if (file == null) {
+                return null;
+            }
+            try {
+                return new FileInputStream(file);
+            } catch (FileNotFoundException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            return null;
+        }
+
+        /**
+         * @see com.itmill.toolkit.ui.Upload.Receiver#receiveUpload(String,
+         *      String)
+         */
+        public OutputStream receiveUpload(String filename, String MIMEType) {
+            fileName = filename;
+            mimeType = MIMEType;
+            try {
+                return new FileOutputStream(file);
+            } catch (FileNotFoundException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            return null;
+        }
+
+        /**
+         * Returns the fileName.
+         * 
+         * @return String
+         */
+        public String getFileName() {
+            return fileName;
+        }
+
+        /**
+         * Returns the mimeType.
+         * 
+         * @return String
+         */
+        public String getMimeType() {
+            return mimeType;
+        }
+
+    }
+
+    public void uploadFailed(FailedEvent event) {
+        System.out.println(event);
+
+        System.out.println(event.getSource());
+
+    }
+
+    public void uploadSucceeded(SucceededEvent event) {
+        pi.setVisible(false);
+        l.setValue("Finished upload, idle");
+        System.out.println(event);
+        setBuffer();
+    }
+
+    public void updateProgress(long readBytes, long contentLenght) {
+        pi.setValue(new Float(readBytes / (float) contentLenght));
+
+        refreshMemUsage();
+    }
+
+    private void refreshMemUsage() {
+        memoryStatus.setValue("Not available in Java 1.4");
+        /*
+         * StringBuffer mem = new StringBuffer(); MemoryMXBean mmBean =
+         * ManagementFactory.getMemoryMXBean(); mem.append("Heap (M):");
+         * mem.append(mmBean.getHeapMemoryUsage().getUsed() / 1048576);
+         * mem.append(" |�Non-Heap (M):");
+         * mem.append(mmBean.getNonHeapMemoryUsage().getUsed() / 1048576);
+         * memoryStatus.setValue(mem.toString());
+         */
+    }
+
+    public void uploadStarted(StartedEvent event) {
+        pi.setVisible(true);
+        l.setValue("Started uploading file " + event.getFilename());
+    }
+
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestForWindowOpen.java b/src/com/itmill/toolkit/demo/testbench/TestForWindowOpen.java
new file mode 100644 (file)
index 0000000..4c15462
--- /dev/null
@@ -0,0 +1,55 @@
+package com.itmill.toolkit.demo.testbench;
+
+import com.itmill.toolkit.terminal.ExternalResource;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+
+public class TestForWindowOpen extends CustomComponent {
+
+    public TestForWindowOpen() {
+
+        OrderedLayout main = new OrderedLayout();
+        setCompositionRoot(main);
+
+        main.addComponent(new Button("Open in this window",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        ExternalResource r = new ExternalResource(
+                                "http://www.google.com");
+                        getApplication().getMainWindow().open(r);
+
+                    }
+
+                }));
+
+        main.addComponent(new Button("Open in target \"mytarget\"",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        ExternalResource r = new ExternalResource(
+                                "http://www.google.com");
+                        getApplication().getMainWindow().open(r, "mytarget");
+
+                    }
+
+                }));
+
+        main.addComponent(new Button("Open in target \"secondtarget\"",
+                new Button.ClickListener() {
+
+                    public void buttonClick(ClickEvent event) {
+                        ExternalResource r = new ExternalResource(
+                                "http://www.google.com");
+                        getApplication().getMainWindow()
+                                .open(r, "secondtarget");
+
+                    }
+
+                }));
+
+    }
+
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestForWindowing.java b/src/com/itmill/toolkit/demo/testbench/TestForWindowing.java
new file mode 100644 (file)
index 0000000..41b1b03
--- /dev/null
@@ -0,0 +1,84 @@
+package com.itmill.toolkit.demo.testbench;
+
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.data.Property.ValueChangeListener;
+import com.itmill.toolkit.ui.AbstractSelect;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.CustomComponent;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.OptionGroup;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Select;
+import com.itmill.toolkit.ui.Slider;
+import com.itmill.toolkit.ui.Window;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Button.ClickListener;
+
+public class TestForWindowing extends CustomComponent {
+
+    private Select s2;
+
+    public TestForWindowing() {
+
+        OrderedLayout main = new OrderedLayout();
+
+        main.addComponent(new Label(
+                "Click the button to create a new inline window."));
+
+        Button create = new Button("Create a new window", new ClickListener() {
+
+            public void buttonClick(ClickEvent event) {
+                Window w = new Window("Testing Window");
+
+                AbstractSelect s1 = new OptionGroup();
+                s1.setCaption("1. Select output format");
+                s1.addItem("Excel sheet");
+                s1.addItem("CSV plain text");
+                s1.setValue("Excel sheet");
+
+                s2 = new Select();
+                s2.addItem("Separate by comma (,)");
+                s2.addItem("Separate by colon (:)");
+                s2.addItem("Separate by semicolon (;)");
+                s2.setEnabled(false);
+
+                s1.addListener(new ValueChangeListener() {
+
+                    public void valueChange(ValueChangeEvent event) {
+                        String v = (String) event.getProperty().getValue();
+                        if (v.equals("CSV plain text")) {
+                            s2.setEnabled(true);
+                        } else {
+                            s2.setEnabled(false);
+                        }
+                    }
+
+                });
+
+                w.addComponent(s1);
+                w.addComponent(s2);
+
+                Slider s = new Slider();
+                s.setCaption("Volume");
+                s.setMax(13);
+                s.setMin(12);
+                s.setResolution(2);
+                s.setImmediate(true);
+                // s.setOrientation(Slider.ORIENTATION_VERTICAL);
+                // s.setArrows(false);
+
+                w.addComponent(s);
+
+                getApplication().getMainWindow().addWindow(w);
+
+            }
+
+        });
+
+        main.addComponent(create);
+
+        setCompositionRoot(main);
+
+    }
+
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestSetVisibleAndCaching.java b/src/com/itmill/toolkit/demo/testbench/TestSetVisibleAndCaching.java
new file mode 100644 (file)
index 0000000..037e3f3
--- /dev/null
@@ -0,0 +1,77 @@
+package com.itmill.toolkit.demo.testbench;
+
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.Window;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+import com.itmill.toolkit.ui.Button.ClickListener;
+
+public class TestSetVisibleAndCaching extends com.itmill.toolkit.Application {
+
+    Panel panelA = new Panel("Panel A");
+    Panel panelB = new Panel("Panel B");
+    Panel panelC = new Panel("Panel C");
+
+    Button buttonNextPanel = new Button("Show next panel");
+
+    int selectedPanel = 0;
+
+    public void init() {
+        Window mainWindow = new Window("TestSetVisibleAndCaching");
+        setMainWindow(mainWindow);
+
+        panelA.addComponent(new Label(
+                "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
+        panelB.addComponent(new Label(
+                "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"));
+        panelC.addComponent(new Label(
+                "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"));
+
+        mainWindow
+                .addComponent(new Label(
+                        "Inspect transfered data from server to "
+                                + "client using firebug (http request / response cycles)."
+                                + " See how widgets are re-used,"
+                                + " after each panel is once shown in GUI then"
+                                + " their contents are not resend."));
+        mainWindow.addComponent(buttonNextPanel);
+        mainWindow.addComponent(panelA);
+        mainWindow.addComponent(panelB);
+        mainWindow.addComponent(panelC);
+
+        selectPanel(selectedPanel);
+
+        buttonNextPanel.addListener(new ClickListener() {
+            public void buttonClick(ClickEvent event) {
+                selectedPanel++;
+                if (selectedPanel > 2) {
+                    selectedPanel = 0;
+                }
+                selectPanel(selectedPanel);
+            }
+        });
+
+    }
+
+    private void selectPanel(int selectedPanel) {
+        System.err.println("Selecting panel " + selectedPanel);
+        switch (selectedPanel) {
+        case 0:
+            panelA.setVisible(true);
+            panelB.setVisible(false);
+            panelC.setVisible(false);
+            break;
+        case 1:
+            panelA.setVisible(false);
+            panelB.setVisible(true);
+            panelC.setVisible(false);
+            break;
+        case 2:
+            panelA.setVisible(false);
+            panelB.setVisible(false);
+            panelC.setVisible(true);
+            break;
+        }
+    }
+}
diff --git a/src/com/itmill/toolkit/demo/testbench/TestSplitPanel.java b/src/com/itmill/toolkit/demo/testbench/TestSplitPanel.java
new file mode 100644 (file)
index 0000000..7493d0f
--- /dev/null
@@ -0,0 +1,22 @@
+package com.itmill.toolkit.demo.testbench;
+
+import com.itmill.toolkit.ui.Label;
+import com.itmill.toolkit.ui.SplitPanel;
+import com.itmill.toolkit.ui.Window;
+
+public class TestSplitPanel extends com.itmill.toolkit.Application {
+
+    SplitPanel verticalSplit = new SplitPanel(SplitPanel.ORIENTATION_VERTICAL);
+
+    public void init() {
+        Window mainWindow = new Window("Feature Browser");
+        setMainWindow(mainWindow);
+
+        verticalSplit.setFirstComponent(new Label("vertical first"));
+        verticalSplit.setSecondComponent(new Label("vertical second"));
+
+        mainWindow.setLayout(verticalSplit);
+
+    }
+
+}