import com.itmill.toolkit.terminal.PaintTarget;
import com.itmill.toolkit.terminal.Resource;
import com.itmill.toolkit.terminal.URIHandler;
+import com.itmill.toolkit.ui.select.OptionFilter;
+import com.itmill.toolkit.ui.select.StartsWithFilter;
/**
* <p>
} else {
// Lazy options loading
- target.addAttribute("loadfrom", getApplication().getURL().toString()
- + optionsStream.uri);
- target.addAttribute("total", (getItemIds() != null) ? getItemIds()
- .size() : 0);
- target.addAttribute("initial", optionsStream.getJSON(20,0,""));
- target.addAttribute("selectedValue", toString() == null ? "" : toString());
+ if(getApplication() != null) {
+ target.addAttribute("loadfrom", getApplication().getURL().toString()
+ + optionsStream.uri);
+ target.addAttribute("total", (getItemIds() != null) ? getItemIds()
+ .size() : 0);
+ target.addAttribute("initial", optionsStream.getJSON(20,0,""));
+ target.addAttribute("selectedValue", toString() == null ? "" : toString());
+ }
}
target.endTag("options");
public void setLazyLoading(boolean useLazyLoading) {
if (useLazyLoading != isLazyLoading()) {
if (useLazyLoading) {
- optionsStream = new OptionsStream();
+ optionsStream = new OptionsStream(this);
if (getApplication() != null)
getWindow().addURIHandler(optionsStream);
} else {
getWindow().removeURIHandler(optionsStream);
super.detach();
}
+
+ public void setOptionFilter(OptionFilter of) {
+ if(this.optionsStream != null) {
+ this.optionsStream.setOptionFilter(of);
+ }
+ }
+
+ /**
+ * @return
+ */
+ public OptionFilter getOptionFilter() {
+ if(this.optionsStream != null) {
+ return this.optionsStream.getOptionFilter();
+ }
+ return null;
+ }
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 s) {
+ of = new StartsWithFilter(s);
+ }
+ 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)
}
/**
- * Updates the visible items by given prefix.
+ * Updates the visible items by given key.
*
- * @param prefix
- * the Filter prefix
- * @return All item ids filtered by given prefix.
+ * @param key
+ * the key given to OptionFilter
+ * @return All item ids filtered by given key.
*/
- public ArrayList filterContent(String prefix) {
- // prefix MUST be in lowercase
- if ("".equals(prefix)) {
- this.filteredItemsBuffer = new ArrayList(getItemIds());
- return this.filteredItemsBuffer;
-
- } else if (items != null) {
- // all items will be iterated and tested.
- // SLOW when there are lot of items.
- // TODO Should we add
- this.filteredItemsBuffer = new ArrayList();
- for (Iterator iter = items.getItemIds().iterator(); iter
- .hasNext();) {
- Object id = iter.next();
-
- Item item = getItem(id);
- String test = "";
- if (getItemCaptionMode() == ITEM_CAPTION_MODE_PROPERTY)
- test = item.getItemProperty(getItemCaptionPropertyId())
- .getValue().toString().trim();
- else
- test = String.valueOf(id);
-
- if (test.toLowerCase().startsWith(prefix)) {
- this.filteredItemsBuffer.add(id);
- }
- }
- }
-
- return this.filteredItemsBuffer;
+ public ArrayList filterContent(String key) {
+ return this.of.filter(key);
}
private void addToJSONArray(StringBuffer json, ArrayList values) {
return json.toString();
}
}
+
}
--- /dev/null
+package com.itmill.toolkit.ui.select;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.itmill.toolkit.data.Item;
+import com.itmill.toolkit.ui.Select;
+
+public class ContainsFilter implements OptionFilter {
+ private Select s;
+
+ private ArrayList filteredItemsBuffer;
+
+ public ContainsFilter(Select s) {
+ this.s = s;
+ }
+
+
+ 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().contains(filterstring)) {
+ this.filteredItemsBuffer.add(id);
+ }
+ }
+ }
+ return this.filteredItemsBuffer;
+ }
+}
--- /dev/null
+package com.itmill.toolkit.ui.select;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import com.itmill.toolkit.data.Item;
+import com.itmill.toolkit.ui.Select;
+
+public class StartsWithFilter implements OptionFilter {
+ private Select s;
+
+ public StartsWithFilter(Select s) {
+ this.s = s;
+ }
+
+ 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);
+ }
+ }
+ }
+ return this.filteredItemsBuffer;
+ }
+}