]> source.dussan.org Git - vaadin-framework.git/commitdiff
Filter select changes & client side implementation
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 3 Sep 2007 13:03:45 +0000 (13:03 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 3 Sep 2007 13:03:45 +0000 (13:03 +0000)
svn changeset:2171/svn branch:trunk

src/com/itmill/toolkit/demo/FilterSelect.java
src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java
src/com/itmill/toolkit/terminal/gwt/public/component-themes/collection.css
src/com/itmill/toolkit/ui/Select.java
src/com/itmill/toolkit/ui/select/ContainsFilter.java
src/com/itmill/toolkit/ui/select/OptionFilter.java
src/com/itmill/toolkit/ui/select/StartsWithFilter.java

index a28782cfc8618f657578bc9c3939a11065ae6582..ce599ae65f248b8cbde1220d2836a0952f5b774e 100644 (file)
@@ -2,9 +2,13 @@ package com.itmill.toolkit.demo;
 
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 
 import com.itmill.toolkit.data.Item;
-import com.itmill.toolkit.ui.*;
+import com.itmill.toolkit.ui.OrderedLayout;
+import com.itmill.toolkit.ui.Panel;
+import com.itmill.toolkit.ui.Select;
+import com.itmill.toolkit.ui.Window;
 import com.itmill.toolkit.ui.select.ContainsFilter;
 import com.itmill.toolkit.ui.select.OptionFilter;
 
@@ -48,12 +52,13 @@ public class FilterSelect extends com.itmill.toolkit.Application {
 
                // default filter
                Select s1 = new Select();
-               for (int i = 0; i < 500; i++)
+               for (int i = 0; i < 105; i++)
                        s1
                                        .addItem(firstnames[(int) (Math.random() * (firstnames.length - 1))]
                                                        + " "
                                                        + lastnames[(int) (Math.random() * (lastnames.length - 1))]);
                s1.setLazyLoading(true);
+               s1.setImmediate(true);
 
                // contains filter
                Select s2 = new Select();
@@ -84,12 +89,12 @@ public class FilterSelect extends com.itmill.toolkit.Application {
                Panel panel3 = new Panel("Select with custom 'EndsWith' filter");
 
                panel1.addComponent(s1);
-               panel2.addComponent(s2);
-               panel3.addComponent(s3);
+//             panel2.addComponent(s2);
+//             panel3.addComponent(s3);
 
                orderedLayout.addComponent(panel1);
-               orderedLayout.addComponent(panel2);
-               orderedLayout.addComponent(panel3);
+//             orderedLayout.addComponent(panel2);
+//             orderedLayout.addComponent(panel3);
                main.addComponent(orderedLayout);
 
        }
@@ -109,9 +114,9 @@ public class FilterSelect extends com.itmill.toolkit.Application {
                        this.s = s;
                }
 
-               public ArrayList filter(String filterstring) {
+               public List filter(String filterstring, int pagelength, int page) {
                        // prefix MUST be in lowercase
-                       if ("".equals(filterstring)) {
+                       if (filterstring == null || "".equals(filterstring)) {
                                this.filteredItemsBuffer = new ArrayList(s.getItemIds());
                                return this.filteredItemsBuffer;
 
@@ -138,6 +143,11 @@ public class FilterSelect extends com.itmill.toolkit.Application {
                        }
                        return this.filteredItemsBuffer;
                }
+
+               public int getMatchCount() {
+                       // TODO Auto-generated method stub
+                       return 0;
+               }
        }
 
 }
index 3b0143e41197f92e2c3dda4f1a97ab2595c90907..70e543199b2cb233e59f0186413624a5e0da13fd 100644 (file)
@@ -9,6 +9,7 @@ import com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout;
 import com.itmill.toolkit.terminal.gwt.client.ui.IDateFieldCalendar;
 import com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded;
 import com.itmill.toolkit.terminal.gwt.client.ui.ICalendar;
+import com.itmill.toolkit.terminal.gwt.client.ui.IFilterSelect;
 import com.itmill.toolkit.terminal.gwt.client.ui.IForm;
 import com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout;
 import com.itmill.toolkit.terminal.gwt.client.ui.ILabel;
@@ -39,209 +40,214 @@ import com.itmill.toolkit.terminal.gwt.client.ui.IWindow;
 
 public class DefaultWidgetFactory implements WidgetFactory {
 
-    public Widget createWidget(UIDL uidl) {
+       public Widget createWidget(UIDL uidl) {
 
-       String className = resolveWidgetTypeName(uidl);
+               String className = resolveWidgetTypeName(uidl);
 
-       if ("com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox"
-               .equals(className)) {
-           return new ICheckBox();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IButton"
-               .equals(className)) {
-           return new IButton();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IView"
-               .equals(className)) {
-           // TODO remove IView?
-           return new IView();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IWindow"
-               .equals(className)) {
-           return new IWindow();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical"
-               .equals(className)) {
-           return new IOrderedLayoutVertical();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal"
-               .equals(className)) {
-           return new IOrderedLayoutHorizontal();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ILabel"
-               .equals(className)) {
-           return new ILabel();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ILink"
-               .equals(className)) {
-           return new ILink();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout"
-               .equals(className)) {
-           return new IGridLayout();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITree"
-               .equals(className)) {
-           return new ITree();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup"
-               .equals(className)) {
-           return new IOptionGroup();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITwinColSelect"
-               .equals(className)) {
-           return new ITwinColSelect();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISelect"
-               .equals(className)) {
-           return new ISelect();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IPanel"
-               .equals(className)) {
-           return new IPanel();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IComponent"
-               .equals(className)) {
-           return new IComponent();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITabsheet"
-               .equals(className)) {
-           return new ITabsheet();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded"
-               .equals(className)) {
-           return new IEmbedded();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout"
-               .equals(className)) {
-           return new ICustomLayout();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITextArea"
-               .equals(className)) {
-           return new ITextArea();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IPasswordField"
-               .equals(className)) {
-           return new IPasswordField();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITextField"
-               .equals(className)) {
-           return new ITextField();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITablePaging"
-               .equals(className)) {
-           return new ITablePaging();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IScrollTable"
-               .equals(className)) {
-           return new IScrollTable();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IDateFieldCalendar"
-               .equals(className)) {
-           return new IDateFieldCalendar();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ICalendar"
-               .equals(className)) {
-           return new ICalendar();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITextualDate"
-               .equals(className)) {
-           return new ITextualDate();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IPopupCalendar"
-               .equals(className)) {
-           return new IPopupCalendar();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISlider"
-               .equals(className)) {
-           return new ISlider();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IForm"
-               .equals(className)) {
-           return new IForm();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IUpload"
-               .equals(className)) {
-           return new IUpload();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelHorizontal"
-                       .equals(className)) {
-                   return new ISplitPanelHorizontal();
-       } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelVertical"
-                       .equals(className)) {
-                   return new ISplitPanelVertical();
-       }
-       return new IUnknownComponent();
+               if ("com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox"
+                               .equals(className)) {
+                       return new ICheckBox();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IButton"
+                               .equals(className)) {
+                       return new IButton();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IView"
+                               .equals(className)) {
+                       // TODO remove IView?
+                       return new IView();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IWindow"
+                               .equals(className)) {
+                       return new IWindow();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical"
+                               .equals(className)) {
+                       return new IOrderedLayoutVertical();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal"
+                               .equals(className)) {
+                       return new IOrderedLayoutHorizontal();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ILabel"
+                               .equals(className)) {
+                       return new ILabel();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ILink"
+                               .equals(className)) {
+                       return new ILink();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout"
+                               .equals(className)) {
+                       return new IGridLayout();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITree"
+                               .equals(className)) {
+                       return new ITree();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup"
+                               .equals(className)) {
+                       return new IOptionGroup();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITwinColSelect"
+                               .equals(className)) {
+                       return new ITwinColSelect();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISelect"
+                               .equals(className)) {
+                       return new ISelect();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IPanel"
+                               .equals(className)) {
+                       return new IPanel();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IComponent"
+                               .equals(className)) {
+                       return new IComponent();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITabsheet"
+                               .equals(className)) {
+                       return new ITabsheet();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded"
+                               .equals(className)) {
+                       return new IEmbedded();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout"
+                               .equals(className)) {
+                       return new ICustomLayout();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITextArea"
+                               .equals(className)) {
+                       return new ITextArea();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IPasswordField"
+                               .equals(className)) {
+                       return new IPasswordField();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITextField"
+                               .equals(className)) {
+                       return new ITextField();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITablePaging"
+                               .equals(className)) {
+                       return new ITablePaging();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IScrollTable"
+                               .equals(className)) {
+                       return new IScrollTable();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IDateFieldCalendar"
+                               .equals(className)) {
+                       return new IDateFieldCalendar();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ICalendar"
+                               .equals(className)) {
+                       return new ICalendar();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITextualDate"
+                               .equals(className)) {
+                       return new ITextualDate();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IPopupCalendar"
+                               .equals(className)) {
+                       return new IPopupCalendar();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISlider"
+                               .equals(className)) {
+                       return new ISlider();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IForm"
+                               .equals(className)) {
+                       return new IForm();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IUpload"
+                               .equals(className)) {
+                       return new IUpload();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelHorizontal"
+                               .equals(className)) {
+                       return new ISplitPanelHorizontal();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelVertical"
+                               .equals(className)) {
+                       return new ISplitPanelVertical();
+               } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IFilterSelect"
+                               .equals(className)) {
+                       return new IFilterSelect();
+               }
+               return new IUnknownComponent();
 
-       /*
-        * TODO: Class based impl, use when GWT supports return
-        * (Widget)GWT.create(resolveWidgetClass(uidl));
-        */
-    }
+               /*
+                * TODO: Class based impl, use when GWT supports return
+                * (Widget)GWT.create(resolveWidgetClass(uidl));
+                */
+       }
 
-    private String resolveWidgetTypeName(UIDL uidl) {
+       private String resolveWidgetTypeName(UIDL uidl) {
 
-       String tag = uidl.getTag();
-       if ("button".equals(tag)) {
-           if ("switch".equals(uidl.getStringAttribute("type"))) {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox";
-           } else {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.IButton";
-           }
-       } else if ("window".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.IWindow";
-       } else if ("orderedlayout".equals(tag)) {
-           if ("horizontal".equals(uidl.getStringAttribute("orientation"))) {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal";
-           } else {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical";
-           }
-       } else if ("label".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.ILabel";
-       } else if ("link".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.ILink";
-       } else if ("gridlayout".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout";
-       } else if ("tree".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.ITree";
-       } else if ("select".equals(tag)) {
-           if ("optiongroup".equals(uidl.getStringAttribute("style"))) {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup";
-           } else if ("twincol".equals(uidl.getStringAttribute("style"))) {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.ITwinColSelect";
-           } else {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.ISelect";
-           }
-       } else if ("panel".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.IPanel";
-       } else if ("component".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.IComponent";
-       } else if ("tabsheet".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.ITabsheet";
-       } else if ("embedded".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded";
-       } else if ("customlayout".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout";
-       } else if ("textfield".equals(tag)) {
-           if (uidl.hasAttribute("multiline")) {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.ITextArea";
-           } else if (uidl.getBooleanAttribute("secret")) {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.IPasswordField";
-           } else {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.ITextField";
-           }
-       } else if ("table".equals(tag)) {
-           if (uidl.hasAttribute("style")) {
-               if ("paging".equals(uidl.getStringAttribute("style"))) {
-                   return "com.itmill.toolkit.terminal.gwt.client.ui.ITablePaging";
-               }
-           } else {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.IScrollTable";
-           }
-       } else if ("datefield".equals(tag)) {
-           if (uidl.hasAttribute("style")) {
-               if ("calendar".equals(uidl.getStringAttribute("style"))) {
-                   return "com.itmill.toolkit.terminal.gwt.client.ui.ICalendar";
-               } else if ("text".equals(uidl.getStringAttribute("style"))) {
-                   return "com.itmill.toolkit.terminal.gwt.client.ui.ITextualDate";
+               String tag = uidl.getTag();
+               if ("button".equals(tag)) {
+                       if ("switch".equals(uidl.getStringAttribute("type"))) {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox";
+                       } else {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.IButton";
+                       }
+               } else if ("window".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.IWindow";
+               } else if ("orderedlayout".equals(tag)) {
+                       if ("horizontal".equals(uidl.getStringAttribute("orientation"))) {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal";
+                       } else {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical";
+                       }
+               } else if ("label".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.ILabel";
+               } else if ("link".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.ILink";
+               } else if ("gridlayout".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout";
+               } else if ("tree".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.ITree";
+               } else if ("select".equals(tag)) {
+                       if ("optiongroup".equals(uidl.getStringAttribute("style"))) {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup";
+                       } else if ("twincol".equals(uidl.getStringAttribute("style"))) {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.ITwinColSelect";
+                       } else if (uidl.hasVariable("page")) {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.IFilterSelect";
+                       } else {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.ISelect";
+                       }
+               } else if ("panel".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.IPanel";
+               } else if ("component".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.IComponent";
+               } else if ("tabsheet".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.ITabsheet";
+               } else if ("embedded".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded";
+               } else if ("customlayout".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout";
+               } else if ("textfield".equals(tag)) {
+                       if (uidl.hasAttribute("multiline")) {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.ITextArea";
+                       } else if (uidl.getBooleanAttribute("secret")) {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.IPasswordField";
+                       } else {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.ITextField";
+                       }
+               } else if ("table".equals(tag)) {
+                       if (uidl.hasAttribute("style")) {
+                               if ("paging".equals(uidl.getStringAttribute("style"))) {
+                                       return "com.itmill.toolkit.terminal.gwt.client.ui.ITablePaging";
+                               }
+                       } else {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.IScrollTable";
+                       }
+               } else if ("datefield".equals(tag)) {
+                       if (uidl.hasAttribute("style")) {
+                               if ("calendar".equals(uidl.getStringAttribute("style"))) {
+                                       return "com.itmill.toolkit.terminal.gwt.client.ui.ICalendar";
+                               } else if ("text".equals(uidl.getStringAttribute("style"))) {
+                                       return "com.itmill.toolkit.terminal.gwt.client.ui.ITextualDate";
+                               }
+                       } else {
+                               return "com.itmill.toolkit.terminal.gwt.client.ui.IPopupCalendar";
+                       }
+               } else if ("calendarfield".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.ICalendar";
+               } else if ("slider".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.ISlider";
+               } else if ("form".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.IForm";
+               } else if ("upload".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.IUpload";
+               } else if ("hsplitpanel".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelHorizontal";
+               } else if ("vsplitpanel".equals(tag)) {
+                       return "com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelVertical";
                }
-           } else {
-               return "com.itmill.toolkit.terminal.gwt.client.ui.IPopupCalendar";
-           }
-       } else if ("calendarfield".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.ICalendar";
-       } else if ("slider".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.ISlider";
-       } else if ("form".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.IForm";
-       } else if ("upload".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.IUpload";
-       } else if ("hsplitpanel".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelHorizontal";
-       } else if ("vsplitpanel".equals(tag)) {
-           return "com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelVertical";
-       }
 
-       return "com.itmill.toolkit.terminal.gwt.client.ui.IUnknownComponent";
+               return "com.itmill.toolkit.terminal.gwt.client.ui.IUnknownComponent";
 
-       /*
-        * TODO: use class based impl when GWT supports it
-        */
-    }
+               /*
+                * TODO: use class based impl when GWT supports it
+                */
+       }
 
-    public boolean isCorrectImplementation(Widget currentWidget, UIDL uidl) {
-       return GWT.getTypeName(currentWidget).equals(
-               resolveWidgetTypeName(uidl));
-    }
+       public boolean isCorrectImplementation(Widget currentWidget, UIDL uidl) {
+               return GWT.getTypeName(currentWidget).equals(
+                               resolveWidgetTypeName(uidl));
+       }
 
 }
index db140e966f45edb69eb10274c9a4fea9461fd7b7..f3145a8b7d388175eff33863f83a4d7ad8b41540 100644 (file)
@@ -10,4 +10,5 @@
 @import "caption/css/caption.css";
 @import "tree/css/tree.css";
 @import "splitpanel/css/splitpanel.css";
+@import "filterselect/css/filterselect.css";
 
index d53a3e34808f2be2b336518dd73888904e7498f5..e49002e8a0f3696978c8f6b9fd0355ef258f790d 100644 (file)
@@ -198,7 +198,7 @@ public class Select extends AbstractField implements Container,
         * enabled with setOptionsLoadingLazy(true).
         * 
         */
-       private OptionsStream optionsStream = null;
+//     private OptionsStream optionsStream = null;
        
        /**
         * Number of options to stream per request ('page size') when lazyLoading
@@ -206,6 +206,14 @@ public class Select extends AbstractField implements Container,
         */
        private int lazyLoadingPageLength = 20;
 
+       private OptionFilter optionFilter;
+
+       private boolean isLazyLoading;
+
+       private int page;
+
+       private String filterstring;
+
        /* Constructors ********************************************************* */
 
        /**
@@ -270,7 +278,7 @@ public class Select extends AbstractField implements Container,
 
                // Paints field properties
                super.paintContent(target);
-
+               
                // Paints select attributes
                if (isMultiSelect())
                        target.addAttribute("selectmode", "multi");
@@ -289,9 +297,9 @@ public class Select extends AbstractField implements Container,
                target.startTag("options");
                // TODO Also use conventional rendering if lazy loading is not supported
                // by terminal
-               if (!isLazyLoading()) {
-                       int keyIndex = 0;
+               int keyIndex = 0;
 
+               if (!isLazyLoading()) {
                        // Support for external null selection item id
                        Collection ids = getItemIds();
                        if (getNullSelectionItemId() != null
@@ -316,46 +324,38 @@ public class Select extends AbstractField implements Container,
                                }
                                target.endTag("so");
                        }
-
-                       // Paints the available selection options from data source
-                       for (Iterator i = getItemIds().iterator(); i.hasNext();) {
-
-                               // Gets the option attribute values
-                               Object id = i.next();
-                               String key = itemIdMapper.key(id);
-                               String caption = getItemCaption(id);
-                               Resource icon = getItemIcon(id);
-
-                               // Paints the option
-                               target.startTag("so");
-                               if (icon != null)
-                                       target.addAttribute("icon", icon);
-                               target.addAttribute("caption", caption);
-                               if (id != null && id.equals(getNullSelectionItemId()))
-                                       target.addAttribute("nullselection", true);
-                               target.addAttribute("key", key);
-                               if (isSelected(id) && keyIndex < selectedKeys.length) {
-                                       target.addAttribute("selected", true);
-                                       selectedKeys[keyIndex++] = key;
-                               }
-                               target.endTag("so");
-                       }
+               }
+                       
+               Iterator i;
+               if(isLazyLoading()) {
+                       i = optionFilter.filter(filterstring, lazyLoadingPageLength, page).iterator();
+                       target.addAttribute("totalMatches", optionFilter.getMatchCount());
                } else {
+                       i = getItemIds().iterator();
+               }
 
-                       // Lazy options loading
-                       if (getApplication() != null) {
-                               target.addAttribute("loadfrom", getApplication().getURL()
-                                               .toString()
-                                               + optionsStream.uri);
-                               target.addAttribute("total",
-                                               (getItemIds() != null) ? getItemIds().size() : 0);
-                               target
-                                               .addAttribute("initial", optionsStream.getJSON(this.lazyLoadingPageLength, 0,
-                                                               ""));
-                               String caption = getItemCaption(getValue());
-                               target.addAttribute("selectedValue", caption == null ? ""
-                                               : caption);
+               // Paints the available selection options from data source
+               while (i.hasNext()) {
+
+                       // Gets the option attribute values
+                       Object id = i.next();
+                       String key = itemIdMapper.key(id);
+                       String caption = getItemCaption(id);
+                       Resource icon = getItemIcon(id);
+
+                       // Paints the option
+                       target.startTag("so");
+                       if (icon != null)
+                               target.addAttribute("icon", icon);
+                       target.addAttribute("caption", caption);
+                       if (id != null && id.equals(getNullSelectionItemId()))
+                               target.addAttribute("nullselection", true);
+                       target.addAttribute("key", key);
+                       if (isSelected(id) && keyIndex < selectedKeys.length) {
+                               target.addAttribute("selected", true);
+                               selectedKeys[keyIndex++] = key;
                        }
+                       target.endTag("so");
                }
                target.endTag("options");
 
@@ -363,6 +363,10 @@ public class Select extends AbstractField implements Container,
                target.addVariable(this, "selected", selectedKeys);
                if (isNewItemsAllowed())
                        target.addVariable(this, "newitem", "");
+               if(isLazyLoading()) {
+                       target.addVariable(this, "filter", filterstring);
+                       target.addVariable(this, "page", page);
+               }
        }
 
        /**
@@ -372,6 +376,14 @@ public class Select extends AbstractField implements Container,
         *      java.util.Map)
         */
        public void changeVariables(Object source, Map variables) {
+               String newFilter;
+               if( (newFilter = (String) variables.get("filter")) != null) {
+                       // this is a filter request
+                       page = ((Integer) variables.get("page")).intValue();
+                       filterstring = newFilter;
+                       requestRepaint();
+                       return;
+               }
 
                // Try to set the property value
 
@@ -1442,24 +1454,16 @@ public class Select extends AbstractField implements Container,
 
        // TODO javadoc
        public boolean isLazyLoading() {
-               return optionsStream != null;
+               return isLazyLoading;
        }
 
        // TODO javadoc
        // TODO What to do when terminal does not support lazy loading?
        public void setLazyLoading(boolean useLazyLoading) {
-               if (useLazyLoading != isLazyLoading()) {
-                       if (useLazyLoading) {
-                               optionsStream = new OptionsStream(this);
-                               Application app = getApplication();
-                               if (app != null)
-                                       app.getMainWindow().addURIHandler(optionsStream);
-                       } else {
-                               if (getApplication() != null)
-                                       getWindow().removeURIHandler(optionsStream);
-                               optionsStream = null;
-                       }
-
+               if (useLazyLoading != isLazyLoading) {
+                       isLazyLoading = useLazyLoading;
+                       if(getOptionFilter() == null)
+                               setOptionFilter(new StartsWithFilter(this));
                        requestRepaint();
                }
        }
@@ -1471,8 +1475,6 @@ public class Select extends AbstractField implements Container,
         */
        public void attach() {
                super.attach();
-               if (optionsStream != null)
-                       getApplication().getMainWindow().addURIHandler(optionsStream);
        }
 
        /**
@@ -1481,177 +1483,25 @@ public class Select extends AbstractField implements Container,
         * @see com.itmill.toolkit.ui.AbstractComponent#detach()
         */
        public void detach() {
-               if (optionsStream != null)
-                       getWindow().removeURIHandler(optionsStream);
                super.detach();
        }
 
+       /**
+        * Sets OptionFilter which will do filtering base on query string
+        * if Select is in lazy loading mode.
+        * 
+        * @param of 
+        *                      OptionFilter to be used in filtering
+        */
        public void setOptionFilter(OptionFilter of) {
-               if (this.optionsStream != null) {
-                       this.optionsStream.setOptionFilter(of);
-               }
+               optionFilter = of;
        }
 
        /**
-        * @return
+        * @return reference to option filter
         */
        public OptionFilter getOptionFilter() {
-               if (this.optionsStream != null) {
-                       return this.optionsStream.getOptionFilter();
-               }
-               return null;
+               return optionFilter;
        }
        
-
-       private class OptionsStream implements URIHandler {
-
-               private String currentFilter = "";
-
-               private ArrayList filteredItemsBuffer = null;
-
-               private OptionFilter of = null;
-
-               private String uri = "selectOptionsStream"
-                               + (long) (Math.random() * 1000000000000000000L);
-
-               OptionsStream(Select select) {
-                       of = new StartsWithFilter(select);
-               }
-
-               public OptionFilter getOptionFilter() {
-                       return of;
-               }
-
-               public void setOptionFilter(OptionFilter of2) {
-                       of = of2;
-               }
-
-               /**
-                * Handles the given relative URI.
-                * 
-                * @see com.itmill.toolkit.terminal.URIHandler#handleURI(java.net.URL,
-                *      java.lang.String)
-                */
-               public DownloadStream handleURI(URL context, String relativeUri) {
-
-                       if (!"".equals(uri)) {
-                               DownloadStream ds = null;
-
-                               if (relativeUri.indexOf(uri + "/feedMoreItems/") != -1) { // this
-                                       // feed visible items
-                                       int i = 0;
-                                       String index = relativeUri.substring(relativeUri
-                                                       .lastIndexOf("/") + 1);
-                                       try {
-                                               i = Integer.parseInt(index);
-                                       } catch (NumberFormatException e) {
-                                               // ignore
-                                       }
-                                       // TODO Req size from client?
-                                       ds = createDownloadStream(lazyLoadingPageLength, i, "");
-                                       return ds;
-
-                               } else if (relativeUri.indexOf(uri) != -1) {
-
-                                       // TODO support '/' character in prefix.
-                                       // read prefix
-                                       String prefix = relativeUri.substring(relativeUri
-                                                       .lastIndexOf("/") + 1);
-                                       // TODO Req size from client?
-                                       ds = createDownloadStream(lazyLoadingPageLength, 0, prefix.trim());
-                                       return ds;
-                               }
-                       }
-                       return null;
-               }
-
-               /**
-                * Creates the DownloadStream for response.
-                * 
-                * @param size
-                *            the Items to be return.
-                * @param first
-                * @param filter
-                * @return the new DownloadStream.
-                */
-               public DownloadStream createDownloadStream(int size, int first,
-                               String filter) {
-
-                       ByteArrayOutputStream os = new ByteArrayOutputStream();
-                       OutputStreamWriter osw = new OutputStreamWriter(os, Charset
-                                       .forName("utf-8"));
-
-                       // JSONObject json = createJSONObject(visibleitems);
-                       String json = getJSON(size, first, filter);
-                       try {
-                               osw.write(json);
-                               osw.flush();
-                               os.flush();
-                       } catch (IOException e) {
-                               e.printStackTrace();
-                       }
-                       DownloadStream ds = new DownloadStream(new ByteArrayInputStream(os
-                                       .toByteArray()), "text/plain;charset=utf-8", "options.js");
-                       return ds;
-               }
-
-               /**
-                * Updates the visible items by given key.
-                * 
-                * @param key
-                *            the key given to OptionFilter
-                * @return All item ids filtered by given key.
-                */
-               public ArrayList filterContent(String key) {
-                       return this.of.filter(key);
-               }
-
-               private void addToJSONArray(StringBuffer json, ArrayList values) {
-                       for (int i = 0; i < values.size(); i++)
-                               json.append((i > 0 ? "," : "") + '"' + values.get(i).toString()
-                                               + '"');
-               }
-
-               private String getJSON(int size, int first, String filter) {
-
-                       // Refilter options, if needed
-                       if ("".equals(filter) || !currentFilter.equals(filter) || filteredItemsBuffer == null) {
-                               filteredItemsBuffer = filterContent(filter);
-                               currentFilter = filter;
-                       }
-
-                       // Creates list of shown options
-                       ArrayList keys = new ArrayList();
-                       ArrayList values = new ArrayList();
-
-                       for (int i = first; i < first + size
-                                       && i < filteredItemsBuffer.size(); i++) {
-                               Object id = filteredItemsBuffer.get(i);
-                               Item item = getItem(id);
-                               keys.add(Select.this.itemIdMapper.key(id));
-                               if (getItemCaptionMode() == ITEM_CAPTION_MODE_PROPERTY)
-                                       try {
-                                               values.add(URLEncoder.encode(item.getItemProperty(
-                                                               getItemCaptionPropertyId()).getValue()
-                                                               .toString(), "ISO-8859-1"));
-                                       } catch (UnsupportedEncodingException e) {
-                                               e.printStackTrace();
-                                       }
-                               else
-                                       values.add(String.valueOf(id));
-                       }
-
-                       // Constructs JSON format for response
-                       StringBuffer json = new StringBuffer();
-                       json.append("{\"keys\":[");
-                       addToJSONArray(json, keys);
-                       json.append("],\"total\":" + this.filteredItemsBuffer.size());
-                       json.append(",\"values\":[");
-                       addToJSONArray(json, values);
-                       json.append("]}");
-
-                       return json.toString();
-               }
-       }
-
 }
index 86130d46cb428349242d1736e0d3a533b7e67d0b..a73c3614797fe3e91101ad3169692932e5476a59 100644 (file)
@@ -2,6 +2,7 @@ package com.itmill.toolkit.ui.select;
 
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 
 import com.itmill.toolkit.data.Item;
 import com.itmill.toolkit.ui.Select;
@@ -15,9 +16,9 @@ public class ContainsFilter implements OptionFilter {
                this.s = s;
        }
 
-       public ArrayList filter(String filterstring) {
+       public List filter(String filterstring, int pageLength, int page) {
                // prefix MUST be in lowercase
-               if ("".equals(filterstring)) {
+               if (filterstring == null || "".equals(filterstring)) {
                        this.filteredItemsBuffer = new ArrayList(s.getItemIds());
                        return this.filteredItemsBuffer;
 
@@ -43,4 +44,8 @@ public class ContainsFilter implements OptionFilter {
                }
                return this.filteredItemsBuffer;
        }
+
+       public int getMatchCount() {
+               return filteredItemsBuffer.size();
+       }
 }
index f9146b90f86fa34f6c82ce80dd8ebea650238847..7f953829f9e1d1a329f669e35c8e57f93c8a3ae6 100644 (file)
@@ -1,7 +1,19 @@
 package com.itmill.toolkit.ui.select;
 
-import java.util.ArrayList;
+import java.util.List;
 
 public interface OptionFilter {
-       public abstract ArrayList filter(String filterstring);
+       /**
+        * 
+        * @param filterstring string to use in filtering
+        * @return List of filtered item id's
+        */
+       public List filter(String filterstring, int pageLength, int page);
+
+       /**
+        * Returns total matches in last filtering process
+        * 
+        * @return
+        */
+       public int getMatchCount();
 }
index 753b85ecb5f58f1d391b38a54362e6b9bb3e893f..1ceba53559daa07525e400ac5fb7643b0ddfa118 100644 (file)
@@ -2,6 +2,7 @@ package com.itmill.toolkit.ui.select;
 
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 
 import com.itmill.toolkit.data.Item;
 import com.itmill.toolkit.ui.Select;
@@ -15,32 +16,55 @@ public class StartsWithFilter implements OptionFilter {
 
        ArrayList filteredItemsBuffer;
 
-       public ArrayList filter(String filterstring) {
-               // prefix MUST be in lowercase
-               if ("".equals(filterstring)) {
-                       this.filteredItemsBuffer = new ArrayList(s.getItemIds());
-                       return this.filteredItemsBuffer;
-
-               } else if (s.getContainerDataSource() != null) {
-                       // all items will be iterated and tested.
-                       // SLOW when there are lot of items.
-                       this.filteredItemsBuffer = new ArrayList();
-                       for (Iterator iter = s.getItemIds().iterator(); iter.hasNext();) {
-                               Object id = iter.next();
-
-                               Item item = s.getItem(id);
-                               String test = "";
-                               if (s.getItemCaptionMode() == Select.ITEM_CAPTION_MODE_PROPERTY)
-                                       test = item.getItemProperty(s.getItemCaptionPropertyId())
-                                                       .getValue().toString().trim();
-                               else
-                                       test = String.valueOf(id);
-
-                               if (test.toLowerCase().startsWith(filterstring)) {
-                                       this.filteredItemsBuffer.add(id);
+       private String prevFilter;
+
+       public List filter(String filterstring, int pageLength, int page) {
+               if(filterstring == null) {
+                       filterstring = "";
+               }
+               if(this.prevFilter != filterstring || filteredItemsBuffer == null) {
+                       if ("".equals(filterstring)) {
+                               this.filteredItemsBuffer = new ArrayList(s.getItemIds());
+                       } else if (s.getContainerDataSource() != null) {
+                               // prefix MUST be in lowercase
+                               filterstring = filterstring.toLowerCase();
+
+                               // all items will be iterated and tested.
+                               // SLOW when there are lot of items.
+                               this.filteredItemsBuffer = new ArrayList();
+                               for (Iterator iter = s.getItemIds().iterator(); iter.hasNext();) {
+                                       Object id = iter.next();
+
+                                       Item item = s.getItem(id);
+                                       String test = "";
+                                       if (s.getItemCaptionMode() == Select.ITEM_CAPTION_MODE_PROPERTY)
+                                               test = item.getItemProperty(s.getItemCaptionPropertyId())
+                                                               .getValue().toString().trim();
+                                       else
+                                               test = String.valueOf(id);
+
+                                       if (test.toLowerCase().startsWith(filterstring)) {
+                                               this.filteredItemsBuffer.add(id);
+                                       }
                                }
                        }
                }
-               return this.filteredItemsBuffer;
+               
+               prevFilter = filterstring;
+               
+               if(filteredItemsBuffer.size() > pageLength) {
+                       int first = page*pageLength;
+                       int last = first + pageLength;
+                       if(filteredItemsBuffer.size() < last) {
+                               last = filteredItemsBuffer.size();
+                       }
+                       return filteredItemsBuffer.subList(first, last);
+               } else {
+                       return filteredItemsBuffer;
+               }
+       }
+
+       public int getMatchCount() {
+               return filteredItemsBuffer.size();
        }
 }