Subversion Repositories eFlore/Applications.del

Rev

Rev 268 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
261 aurelien 1
package org.tela_botanica.del.client.composants.formulaires;
2
 
3
import com.google.gwt.event.dom.client.KeyPressEvent;
4
import com.google.gwt.event.dom.client.KeyPressHandler;
5
import com.google.gwt.http.client.Request;
6
import com.google.gwt.http.client.RequestBuilder;
7
import com.google.gwt.http.client.RequestCallback;
8
import com.google.gwt.http.client.RequestException;
9
import com.google.gwt.http.client.Response;
10
import com.google.gwt.http.client.URL;
11
import com.google.gwt.json.client.JSONArray;
12
import com.google.gwt.json.client.JSONParser;
13
import com.google.gwt.json.client.JSONValue;
14
import com.google.gwt.user.client.Timer;
15
import com.google.gwt.user.client.ui.HasWidgets;
16
import com.google.gwt.user.client.ui.SuggestOracle;
17
 
18
public class AutoCompletionComboBoxPresenteur {
19
 
20
	private AutoCompletionComboBoxVue autoCompletionComboBoxVue = new AutoCompletionComboBoxVue();
21
 
22
	SuggestOracle.Request requeteOracle;
23
    SuggestOracle.Callback callBackOracle;
24
 
25
	Timer suggestionTimer = null;
26
    int tempsAvantRequete = 500;
27
 
28
	public AutoCompletionComboBoxPresenteur() {
29
 
30
	}
31
 
32
	public void go(HasWidgets composite) {
33
		composite.add(autoCompletionComboBoxVue);
34
		gererEvenements();
35
	}
36
 
37
	public void gererEvenements() {
38
		autoCompletionComboBoxVue.getSuggestBox().addKeyPressHandler(new KeyPressHandler() {
39
			public void onKeyPress(KeyPressEvent event) {
40
 
41
				if(event.getUnicodeCharCode() != 0) {
42
 
43
					if(suggestionTimer == null) {
44
						suggestionTimer = new Timer() {
45
							public void run() {
46
								requeteSuggestions(autoCompletionComboBoxVue.getSuggestBox().getValue());
47
							}
48
						};
49
						suggestionTimer.schedule(tempsAvantRequete);
50
					} else {
51
						suggestionTimer.schedule(tempsAvantRequete);
52
					}
53
				}
54
			}
55
 
56
		});
57
 
58
		requeteOracle = new SuggestOracle.Request();
59
		callBackOracle = new SuggestOracle.Callback() {
60
 
61
			public void onSuggestionsReady(
62
					com.google.gwt.user.client.ui.SuggestOracle.Request request,
63
					com.google.gwt.user.client.ui.SuggestOracle.Response response) {
64
				autoCompletionComboBoxVue.getSuggestBox().showSuggestionList();
65
			}
66
	    };
67
	}
68
 
69
	public void setTempsAvantRequete(int temps) {
70
		tempsAvantRequete = temps;
71
	}
72
 
73
	public int getTempsAvantRequete(int temps) {
74
		return tempsAvantRequete;
75
	}
76
 
77
	public String getValeur() {
78
		return autoCompletionComboBoxVue.getSuggestBox().getValue();
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
		String altUrl = "http://www.tela-botanica.org/eflore/cel2/jrest/NameSearch/";
95
		String urlProxy = "proxy.php?url="+URL.encode(altUrl+requeteAjax);
96
 
97
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlProxy) ;
98
 
99
		try {
100
 
101
			rb.sendRequest(null, new RequestCallback() {
102
 
103
				public void onError(final Request request, final Throwable exception) {
104
					// TODO Auto-generated method stub
105
 
106
				}
107
 
108
				public void onResponseReceived(final Request request,
109
						final Response response) {
110
 
111
					final JSONValue responseValue = JSONParser.parseStrict(response.getText());
112
					JSONArray noms;
113
 
114
					if ((noms=responseValue.isArray()) != null) {
115
 
116
						final int taillemax = noms.size();
117
						String[] valeurs = new String[taillemax];
118
						for (int i = 0; i < taillemax; i++) {
119
							valeurs[i] = (noms.get(i).isArray().get(0).isString().stringValue());
120
						}
121
 
122
						autoCompletionComboBoxVue.remplirListe(valeurs);
123
						requeteOracle.setQuery(requete);
124
						autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle);
125
					}
126
				}
127
			}) ;
128
 
129
		} catch (RequestException e) {
130
			// TODO Auto-generated catch block
131
			e.printStackTrace();
132
		}
133
	}
134
}