View Javadoc

1   /*
2    * Created on Jun 20, 2005
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  //TODO when a request is made, all text in the input-box should be selected, and the cursor should be placed into the inputbox
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       * Injected by Spring.
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  	 * Geeft een unieke ID-string voor suggest-elementen. Hierdoor kunnen er op 1 pagina
61  	 * meerdere suggest-elementen worden opgenomen. (Maximaal 9999 elementen.) 
62  	 * @return Een string in de vorm suggestXXXX, waarbij XXXX varieert tussen 1 en 9999.
63  	 */
64  	private String getUniqueId() {
65  		id++;
66  		if (id>=10000) id=0; //Turnover van deze int na 10.000 iteraties om een hypothetische overflow te voorkomen.
67  		return "livesearch"+id;
68  	}
69  
70  	protected void rewindFormComponent(IMarkupWriter writer, IRequestCycle cycle) {
71  		// Haal uit het http-request de inhoud van het juiste suggest-veld weer op.
72  		String name = getForm().getElementId(this);
73  		String userText = cycle.getParameter(name);
74  		setValue(userText);		
75  	}
76  
77  }