1
2
3
4
5 package org.musicontroller.gui.components;
6
7
8 import java.util.HashMap;
9 import java.util.Map;
10
11 import org.apache.tapestry.IMarkupWriter;
12 import org.apache.tapestry.IRequestCycle;
13 import org.apache.tapestry.IScript;
14 import org.apache.tapestry.PageRenderSupport;
15 import org.apache.tapestry.TapestryUtils;
16 import org.apache.tapestry.form.AbstractFormComponent;
17
18
19
20 public abstract class SuggestInput extends AbstractFormComponent {
21
22 private static int id = 0;
23 public abstract String getValue();
24 public abstract void setValue(String value);
25 public abstract boolean isDisabled();
26 public abstract void setDisabled(boolean dis);
27
28
29
30
31 public abstract IScript getScript();
32
33 @SuppressWarnings({ "unchecked", "deprecation" })
34 protected void renderFormComponent(IMarkupWriter writer, IRequestCycle cycle) {
35 PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(cycle, this);
36 Map symbols = new HashMap();
37 getScript().execute(cycle, pageRenderSupport, symbols);
38
39 String name = getForm().getElementId(this);
40 String uid = getUniqueId();
41
42 writer.begin("input");
43 writer.attribute("type", "text");
44 writer.attribute("autocomplete","off");
45 writer.attribute("id",uid);
46 writer.attribute("name",name);
47 writer.attribute("value",getValue());
48 if (isDisabled())
49 writer.attribute("disabled", "disabled");
50 writer.attribute("onKeyUp","SendQuery('"+uid+"',this.value)");
51 writer.end();
52 writer.begin("div");
53 writer.attribute("class","livesearchbox");
54 writer.attribute("id","out_"+uid);
55 writer.attribute("style","border: 1px solid green; padding: 0pt; z-index: 1; position: absolute; background-color: #8BCD82; visibility: hidden;");
56 writer.end();
57 }
58
59
60
61
62
63
64 private String getUniqueId() {
65 id++;
66 if (id>=10000) id=0;
67 return "livesearch"+id;
68 }
69
70 protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle) {
71
72 String name = getForm().getElementId(this);
73 String userText = cycle.getParameter(name);
74 setValue(userText);
75 }
76
77 }