aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit/ui/Select.java
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2007-04-16 12:49:41 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2007-04-16 12:49:41 +0000
commit82294a20e4e625077742da9af6ea647a15c89379 (patch)
tree14508cc139f5a9722069253b7c1b7c93c5cc6fba /src/com/itmill/toolkit/ui/Select.java
parente6ccbbfc194f90e27ec4ab25218a490eae66e0dc (diff)
downloadvaadin-framework-82294a20e4e625077742da9af6ea647a15c89379.tar.gz
vaadin-framework-82294a20e4e625077742da9af6ea647a15c89379.zip
fixes #533 and makes possible to change selects (LazyLoading) filtering logic
svn changeset:1241/svn branch:trunk
Diffstat (limited to 'src/com/itmill/toolkit/ui/Select.java')
-rw-r--r--src/com/itmill/toolkit/ui/Select.java89
1 files changed, 48 insertions, 41 deletions
diff --git a/src/com/itmill/toolkit/ui/Select.java b/src/com/itmill/toolkit/ui/Select.java
index 5c66e1463a..7f0e14f17b 100644
--- a/src/com/itmill/toolkit/ui/Select.java
+++ b/src/com/itmill/toolkit/ui/Select.java
@@ -56,6 +56,8 @@ import com.itmill.toolkit.terminal.PaintException;
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>
@@ -332,12 +334,14 @@ public class Select extends AbstractField implements Container,
} 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");
@@ -1386,7 +1390,7 @@ public class Select extends AbstractField implements Container,
public void setLazyLoading(boolean useLazyLoading) {
if (useLazyLoading != isLazyLoading()) {
if (useLazyLoading) {
- optionsStream = new OptionsStream();
+ optionsStream = new OptionsStream(this);
if (getApplication() != null)
getWindow().addURIHandler(optionsStream);
} else {
@@ -1418,16 +1422,46 @@ public class Select extends AbstractField implements Container,
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)
@@ -1495,42 +1529,14 @@ public class Select extends AbstractField implements Container,
}
/**
- * 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) {
@@ -1579,4 +1585,5 @@ public class Select extends AbstractField implements Container,
return json.toString();
}
}
+
}