Subversion Repositories eFlore/Applications.del

Rev

Rev 375 | Go to most recent revision | Details | Compare with Previous | 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
 
268 aurelien 18
public abstract class AutoCompletionComboBoxPresenteur {
261 aurelien 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;
268 aurelien 27
 
28
    String urlRequete = "";
261 aurelien 29
 
268 aurelien 30
	public AutoCompletionComboBoxPresenteur(String urlRequete) {
31
		this.urlRequete = urlRequete;
261 aurelien 32
	}
33
 
34
	public void go(HasWidgets composite) {
35
		composite.add(autoCompletionComboBoxVue);
36
		gererEvenements();
37
	}
38
 
39
	public void gererEvenements() {
40
		autoCompletionComboBoxVue.getSuggestBox().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(autoCompletionComboBoxVue.getSuggestBox().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
				autoCompletionComboBoxVue.getSuggestBox().showSuggestionList();
67
			}
68
	    };
69
	}
70
 
71
	public void setTempsAvantRequete(int temps) {
72
		tempsAvantRequete = temps;
73
	}
74
 
75
	public int getTempsAvantRequete(int temps) {
76
		return tempsAvantRequete;
77
	}
78
 
79
	public String getValeur() {
80
		return autoCompletionComboBoxVue.getSuggestBox().getValue();
81
	}
82
 
415 gduche 83
	public void setValeur(String taxon) {
84
		autoCompletionComboBoxVue.setValeur(taxon);
85
	}
86
 
87
	public void nettoyer() {
88
		autoCompletionComboBoxVue.nettoyer();
89
	}
90
 
261 aurelien 91
	private void requeteSuggestions(final String requete) {
92
 
328 aurelien 93
		String requeteAjax = effectuerPreTraitementChaineRequete(requete);
375 aurelien 94
		String urlProxy = URL.encode(urlRequete+requeteAjax);
261 aurelien 95
 
96
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlProxy) ;
97
 
98
		try {
99
 
100
			rb.sendRequest(null, new RequestCallback() {
101
 
102
				public void onError(final Request request, final Throwable exception) {
103
					// TODO Auto-generated method stub
104
 
105
				}
106
 
107
				public void onResponseReceived(final Request request,
108
						final Response response) {
109
 
268 aurelien 110
					String[] valeurs = parserResultatRequete(response);
261 aurelien 111
 
268 aurelien 112
					autoCompletionComboBoxVue.remplirListe(valeurs);
113
					requeteOracle.setQuery(requete);
114
					autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle);
261 aurelien 115
				}
116
			}) ;
117
 
118
		} catch (RequestException e) {
119
			// TODO Auto-generated catch block
120
			e.printStackTrace();
121
		}
122
	}
268 aurelien 123
 
328 aurelien 124
	/**
125
	 * Permet d'intervenir sur la chaine tapée par l'utilisateur avant que celle-ci ne soit passée
126
	 * à la requête asynchrone pour pouvoir la formater (pour mettre en minuscule, séparer des termes)
127
	 * par défaut renvoie la chaine telle quelle, à surcharger au besoin
128
	 * @param String requete chaine de recherche contenant ce que l'utilisateur à tapé
129
	 * @return String une chaine transformée
130
	 */
131
	protected String effectuerPreTraitementChaineRequete(String requete) {
132
		return requete;
133
	}
134
 
135
	/**
136
	 * Parse les résultats de la requete afin de pouvoir les utiliser à implémenter par le
137
	 * composants qui crée la combobox selon le contexte et le web service appelé.
138
	 * @param Response la réponse à la requête asynchrone
139
	 * @return String[] le tableau des suggestions qui sera affiché dans la combobox
140
	 */
268 aurelien 141
	protected abstract String[] parserResultatRequete(Response response);
261 aurelien 142
}