Subversion Repositories eFlore/Applications.cel

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
692 aurelien 1
package org.tela_botanica.client.vues.observation;
2
 
3
import java.util.Vector;
4
 
5
import org.tela_botanica.client.utils.Configuration;
6
 
7
import com.google.gwt.event.dom.client.KeyPressEvent;
8
import com.google.gwt.event.dom.client.KeyPressHandler;
9
import com.google.gwt.http.client.Request;
10
import com.google.gwt.http.client.RequestBuilder;
11
import com.google.gwt.http.client.RequestCallback;
12
import com.google.gwt.http.client.RequestException;
13
import com.google.gwt.http.client.Response;
14
import com.google.gwt.json.client.JSONArray;
15
import com.google.gwt.json.client.JSONParser;
16
import com.google.gwt.json.client.JSONValue;
17
import com.google.gwt.user.client.Timer;
18
import com.google.gwt.user.client.ui.Composite;
19
import com.google.gwt.user.client.ui.IsWidget;
20
import com.google.gwt.user.client.ui.MultiWordSuggestOracle;
21
import com.google.gwt.user.client.ui.SuggestBox;
22
import com.google.gwt.user.client.ui.SuggestOracle;
23
 
24
public class FormulaireAutocompletion extends Composite implements IsWidget {
25
 
26
	MultiWordSuggestOracle msu = new MultiWordSuggestOracle();
27
	SuggestBox suggestions = null;
28
	Timer suggestionTimer = null;
29
 
30
	SuggestOracle.Request requeteOracle;
31
    SuggestOracle.Callback callBackOracle;
32
 
33
    int tempsAvantRequete = 500;
34
 
35
	public FormulaireAutocompletion() {
36
 
37
		suggestions = new SuggestBox(msu);
38
		suggestions.setWidth(300+"px");
39
 
40
		suggestions.addKeyPressHandler(new KeyPressHandler() {
41
			public void onKeyPress(KeyPressEvent event) {
42
 
43
				if(event.getUnicodeCharCode() != 0) {
44
 
45
					if(suggestionTimer == null) {
46
						suggestionTimer = new Timer() {
47
							public void run() {
48
								requeteSuggestions(suggestions.getValue());
49
							}
50
						};
51
						suggestionTimer.schedule(tempsAvantRequete);
52
					} else {
53
						suggestionTimer.schedule(tempsAvantRequete);
54
					}
55
				}
56
			}
57
 
58
		});
59
 
60
		requeteOracle = new SuggestOracle.Request();
61
		callBackOracle = new SuggestOracle.Callback() {
62
 
63
			public void onSuggestionsReady(
64
					com.google.gwt.user.client.ui.SuggestOracle.Request request,
65
					com.google.gwt.user.client.ui.SuggestOracle.Response response) {
66
				suggestions.showSuggestionList();
67
			}
68
	    };
69
 
70
		this.setWidget(suggestions);
71
	}
72
 
73
	public void setTempsAvantRequete(int temps) {
74
		tempsAvantRequete = temps;
75
	}
76
 
77
	public int getTempsAvantRequete(int temps) {
78
		return tempsAvantRequete;
79
	}
80
 
81
	private void requeteSuggestions(final String requete) {
82
 
83
		String requeteAjax = requete;
84
		String[] parties = requete.split(" ", 2);
85
 
86
		if(parties.length == 2) {
87
			if(parties[1].trim().isEmpty()) {
88
				parties[1] = "*";
89
			}
90
 
91
			requeteAjax = parties[0]+"/"+parties[1];
92
		}
93
 
94
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET,Configuration.getServiceBaseUrl()
95
				+"/NameSearch/"+requeteAjax) ;
96
 
97
		try {
98
 
99
			rb.sendRequest(null, new RequestCallback() {
100
 
101
				public void onError(final Request request, final Throwable exception) {
102
					// TODO Auto-generated method stub
103
 
104
				}
105
 
106
				public void onResponseReceived(final Request request,
107
						final Response response) {
108
 
109
						final JSONValue responseValue = JSONParser.parseStrict(response.getText());
110
						JSONArray noms;
111
 
112
						if ((noms=responseValue.isArray()) != null) {
113
 
114
							msu.clear();
115
 
116
							final int taillemax = noms.size();
117
							for (int i = 0; i < taillemax; i++) {
118
								msu.add(noms.get(i).isArray().get(0).isString().stringValue());
119
							}
120
 
121
						    msu.requestSuggestions(requeteOracle, callBackOracle);
122
 
123
						}
124
				}
125
			}) ;
126
 
127
		} catch (RequestException e) {
128
			// TODO Auto-generated catch block
129
			e.printStackTrace();
130
		}
131
	}
132
}