Subversion Repositories eFlore/Applications.del

Rev

Rev 1886 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1886 Rev 1957
1
package org.tela_botanica.del.client.composants.formulaires.autocompletion;
1
package org.tela_botanica.del.client.composants.formulaires.autocompletion;
2
 
2
 
3
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion;
3
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion;
4
 
4
 
5
import com.google.gwt.core.shared.GWT;
5
import com.google.gwt.core.client.Callback;
6
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
6
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
7
import com.google.gwt.event.dom.client.KeyPressEvent;
7
import com.google.gwt.event.dom.client.KeyPressEvent;
8
import com.google.gwt.event.dom.client.KeyPressHandler;
8
import com.google.gwt.event.dom.client.KeyPressHandler;
9
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
9
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
10
import com.google.gwt.event.logical.shared.SelectionEvent;
10
import com.google.gwt.event.logical.shared.SelectionEvent;
11
import com.google.gwt.event.logical.shared.SelectionHandler;
11
import com.google.gwt.event.logical.shared.SelectionHandler;
12
import com.google.gwt.http.client.Request;
12
import com.google.gwt.http.client.Request;
13
import com.google.gwt.http.client.RequestBuilder;
13
import com.google.gwt.http.client.RequestBuilder;
14
import com.google.gwt.http.client.RequestCallback;
14
import com.google.gwt.http.client.RequestCallback;
15
import com.google.gwt.http.client.RequestException;
15
import com.google.gwt.http.client.RequestException;
16
import com.google.gwt.http.client.Response;
16
import com.google.gwt.http.client.Response;
17
import com.google.gwt.http.client.URL;
17
import com.google.gwt.http.client.URL;
18
import com.google.gwt.user.client.Timer;
18
import com.google.gwt.user.client.Timer;
19
import com.google.gwt.user.client.Window;
-
 
20
import com.google.gwt.user.client.ui.HasText;
19
import com.google.gwt.user.client.ui.HasText;
21
import com.google.gwt.user.client.ui.HasWidgets;
20
import com.google.gwt.user.client.ui.HasWidgets;
22
import com.google.gwt.user.client.ui.IsWidget;
21
import com.google.gwt.user.client.ui.IsWidget;
23
import com.google.gwt.user.client.ui.SuggestOracle;
22
import com.google.gwt.user.client.ui.SuggestOracle;
24
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
23
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
25
 
24
 
26
public abstract class AutoCompletionComboBoxPresenteur {
25
public abstract class AutoCompletionComboBoxPresenteur {
27
	
26
	
28
	public interface Vue extends IsWidget {
27
	public interface Vue extends IsWidget {
29
		public void ajouterVue(HasWidgets composite);
28
		public void ajouterVue(HasWidgets composite);
30
		public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers();
29
		public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers();
31
		public String getValeur();
30
		public String getValeur();
32
		public void remplirListe(InfosNomPourAutocompletion[] suggestions);
31
		public void remplirListe(InfosNomPourAutocompletion[] suggestions);
33
		public void afficherSuggestions(SuggestOracle.Request request,SuggestOracle.Callback response);
32
		public void afficherSuggestions(SuggestOracle.Request request,SuggestOracle.Callback response);
34
		public void afficherListeDeroulante();
33
		public void afficherListeDeroulante();
35
		public void nettoyer();
34
		public void nettoyer();
36
		public void setValeur(String valeur);
35
		public void setValeur(String valeur);
37
		public HasSelectionHandlers<Suggestion> getSuggestBoxHasSelectionChangeHandlers();
36
		public HasSelectionHandlers<Suggestion> getSuggestBoxHasSelectionChangeHandlers();
38
		public HasText getSuggestBox();
37
		public HasText getSuggestBox();
39
		public void afficherStyleErreur(String styleErreur);
38
		public void afficherStyleErreur(String styleErreur);
40
		public void supprimerStyleErreur(String styleErreur);
39
		public void supprimerStyleErreur(String styleErreur);
-
 
40
		public void setHandlerCopierColler(Callback<String, String> cb);
41
	}
41
	}
42
	private Vue autoCompletionComboBoxVue;
42
	private Vue autoCompletionComboBoxVue;
43
	
43
	
44
	SuggestOracle.Request requeteOracle;
44
	SuggestOracle.Request requeteOracle;
45
    SuggestOracle.Callback callBackOracle;
45
    SuggestOracle.Callback callBackOracle;
46
    
46
    
47
	Timer suggestionTimer = null;
47
	Timer suggestionTimer = null;
48
    int tempsAvantRequete = 500;
48
    int tempsAvantRequete = 500;
49
    
49
    
50
    String urlRequete = "";
50
    String urlRequete = "";
51
	
51
	
52
	public AutoCompletionComboBoxPresenteur(Vue vue, String urlRequete) {
52
	public AutoCompletionComboBoxPresenteur(Vue vue, String urlRequete) {
53
		this.autoCompletionComboBoxVue = vue;
53
		this.autoCompletionComboBoxVue = vue;
54
		this.urlRequete = urlRequete;
54
		this.urlRequete = urlRequete;
55
		gererEvenements();
55
		gererEvenements();
56
	}
56
	}
57
	
57
	
58
	public void go(HasWidgets composite) {
58
	public void go(HasWidgets composite) {
59
		autoCompletionComboBoxVue.ajouterVue(composite);
59
		autoCompletionComboBoxVue.ajouterVue(composite);
60
	}
60
	}
61
	
61
	
62
	public void gererEvenements() {
62
	public void gererEvenements() {
63
		autoCompletionComboBoxVue.getSuggestBoxHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() {
63
		autoCompletionComboBoxVue.getSuggestBoxHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() {
64
			public void onKeyPress(KeyPressEvent event) {		
64
			public void onKeyPress(KeyPressEvent event) {		
65
				if(event.getUnicodeCharCode() != 0) {
65
				if(event.getUnicodeCharCode() != 0) {
66
					gererTimer();
66
					gererTimer();
67
				}
67
				}
68
			}
68
			}
69
		});
69
		});
70
		
70
		
71
		requeteOracle = new SuggestOracle.Request();
71
		requeteOracle = new SuggestOracle.Request();
72
		callBackOracle = new SuggestOracle.Callback() {
72
		callBackOracle = new SuggestOracle.Callback() {
73
 
73
 
74
			public void onSuggestionsReady(SuggestOracle.Request request, SuggestOracle.Response response) {
74
			public void onSuggestionsReady(SuggestOracle.Request request, SuggestOracle.Response response) {
75
				autoCompletionComboBoxVue.afficherListeDeroulante();	
75
				autoCompletionComboBoxVue.afficherListeDeroulante();	
76
			}
76
			}
77
	    };
77
	    };
78
	    
78
	    
79
	    autoCompletionComboBoxVue.getSuggestBoxHasSelectionChangeHandlers().addSelectionHandler(new SelectionHandler<SuggestOracle.Suggestion>(){				
79
	    autoCompletionComboBoxVue.getSuggestBoxHasSelectionChangeHandlers().addSelectionHandler(new SelectionHandler<SuggestOracle.Suggestion>(){				
80
			@Override
80
			@Override
81
			public void onSelection(SelectionEvent<Suggestion> event) {
81
			public void onSelection(SelectionEvent<Suggestion> event) {
82
				surSelectionSuggestion(event.getSelectedItem().getReplacementString());
82
				surSelectionSuggestion(event.getSelectedItem().getReplacementString());
83
			}
83
			}
84
		});
84
		});
-
 
85
	    
-
 
86
	    autoCompletionComboBoxVue.setHandlerCopierColler(new Callback<String, String>() {		
-
 
87
			@Override
-
 
88
			public void onSuccess(String result) {
-
 
89
				gererTimer();
-
 
90
			}
-
 
91
			
-
 
92
			@Override
-
 
93
			public void onFailure(String reason) {
-
 
94
				// rien à faire ça n'échoue jamais
-
 
95
			}
-
 
96
		});
85
	}
97
	}
86
	
98
	
87
	public void gererTimer() {
99
	public void gererTimer() {
88
		if(suggestionTimer == null) {
100
		if(suggestionTimer == null) {
89
			suggestionTimer = new Timer() {
101
			suggestionTimer = new Timer() {
90
				public void run() {
102
				public void run() {
91
					requeteSuggestions();
103
					requeteSuggestions();
92
				}	
104
				}	
93
			};					
105
			};					
94
			suggestionTimer.schedule(tempsAvantRequete);
106
			suggestionTimer.schedule(tempsAvantRequete);
95
		} else {
107
		} else {
96
			suggestionTimer.schedule(tempsAvantRequete);
108
			suggestionTimer.schedule(tempsAvantRequete);
97
		}
109
		}
98
	}
110
	}
99
	
111
	
100
	public void setTempsAvantRequete(int temps) {
112
	public void setTempsAvantRequete(int temps) {
101
		tempsAvantRequete = temps;
113
		tempsAvantRequete = temps;
102
	}
114
	}
103
	
115
	
104
	public int getTempsAvantRequete(int temps) {
116
	public int getTempsAvantRequete(int temps) {
105
		return tempsAvantRequete;
117
		return tempsAvantRequete;
106
	}
118
	}
107
	
119
	
108
	public String getValeur() {
120
	public String getValeur() {
109
		return autoCompletionComboBoxVue.getValeur();
121
		return autoCompletionComboBoxVue.getValeur();
110
	}
122
	}
111
	
123
	
112
	public void setValeur(String taxon) {
124
	public void setValeur(String taxon) {
113
		autoCompletionComboBoxVue.setValeur(taxon);
125
		autoCompletionComboBoxVue.setValeur(taxon);
114
	}
126
	}
115
	
127
	
116
	public void nettoyer() {
128
	public void nettoyer() {
117
		autoCompletionComboBoxVue.nettoyer();
129
		autoCompletionComboBoxVue.nettoyer();
118
	}
130
	}
119
	
131
	
120
	public void requeteSuggestions() {
132
	public void requeteSuggestions() {
-
 
133
		
-
 
134
		// Suppression des espaces et caractères inutiles
-
 
135
		String valeur = autoCompletionComboBoxVue.getValeur().trim();
-
 
136
		autoCompletionComboBoxVue.setValeur(valeur);
121
		
137
		
122
		final String requete = URL.encodeQueryString(autoCompletionComboBoxVue.getValeur());
138
		final String requete = URL.encodeQueryString(valeur);
123
		String requeteAjax = effectuerPreTraitementChaineRequete(requete);	
139
		String requeteAjax = effectuerPreTraitementChaineRequete(requete);	
124
		
140
		
125
		// ceci permet au composant qui utilise l'autocomplétion
141
		// ceci permet au composant qui utilise l'autocomplétion
126
		// d'annuler une requete
142
		// d'annuler une requete
127
		if(requeteAjax == null) {
143
		if(requeteAjax == null) {
128
			return;
144
			return;
129
		}
145
		}
130
		
146
		
131
		String urlProxy = urlRequete+requeteAjax;
147
		String urlProxy = urlRequete+requeteAjax;
132
		
148
		
133
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlProxy) ;
149
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlProxy) ;
134
		try {		
150
		try {		
135
			rb.sendRequest(null, new RequestCallback() {
151
			rb.sendRequest(null, new RequestCallback() {
136
				public void onError(final Request request, final Throwable exception) {
152
				public void onError(final Request request, final Throwable exception) {
137
					// TODO Auto-generated method stub
153
					// TODO Auto-generated method stub		
138
					
-
 
139
				}
154
				}
140
 
155
 
141
				public void onResponseReceived(final Request request,
156
				public void onResponseReceived(final Request request,
142
						final Response response) {
157
						final Response response) {
143
					surReponseRequete(requete, response);
158
					surReponseRequete(requete, response);
144
				}
159
				}
145
			}) ;
160
			}) ;
146
 
161
 
147
		} catch (RequestException e) {
162
		} catch (RequestException e) {
148
			// TODO Auto-generated catch block
163
			// TODO Auto-generated catch block
149
			e.printStackTrace();
164
			e.printStackTrace();
150
		}
165
		}
151
	}
166
	}
152
	
167
	
153
	public void surReponseRequete(String requete, Response response) {
168
	public void surReponseRequete(String requete, Response response) {
154
		InfosNomPourAutocompletion[] valeurs = parserResultatRequete(response);
169
		InfosNomPourAutocompletion[] valeurs = parserResultatRequete(response);
155
		autoCompletionComboBoxVue.remplirListe(valeurs);
170
		autoCompletionComboBoxVue.remplirListe(valeurs);
156
		requeteOracle.setQuery(requete);
171
		requeteOracle.setQuery(requete);
157
		autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle);	
172
		autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle);	
158
	}
173
	}
159
	
174
	
160
	protected void surSelectionSuggestion(String suggestion) {
175
	protected void surSelectionSuggestion(String suggestion) {
161
		return;
176
		return;
162
	}
177
	}
163
	
178
	
164
	/**
179
	/**
165
	 * Permet d'intervenir sur la chaine tapée par l'utilisateur avant que celle-ci ne soit passée 
180
	 * Permet d'intervenir sur la chaine tapée par l'utilisateur avant que celle-ci ne soit passée 
166
	 * à la requête asynchrone pour pouvoir la formater (pour mettre en minuscule, séparer des termes) 
181
	 * à la requête asynchrone pour pouvoir la formater (pour mettre en minuscule, séparer des termes) 
167
	 * par défaut renvoie la chaine telle quelle, à surcharger au besoin
182
	 * par défaut renvoie la chaine telle quelle, à surcharger au besoin
168
	 * @param String requete chaine de recherche contenant ce que l'utilisateur à tapé
183
	 * @param String requete chaine de recherche contenant ce que l'utilisateur à tapé
169
	 * @return String une chaine transformée 
184
	 * @return String une chaine transformée 
170
	 */
185
	 */
171
	protected String effectuerPreTraitementChaineRequete(String requete) {
186
	protected String effectuerPreTraitementChaineRequete(String requete) {
172
		return requete;
187
		return requete;
173
	}
188
	}
174
	
189
	
175
	/**
190
	/**
176
	 * Parse les résultats de la requete afin de pouvoir les utiliser à implémenter par le 
191
	 * Parse les résultats de la requete afin de pouvoir les utiliser à implémenter par le 
177
	 * composants qui crée la combobox selon le contexte et le web service appelé.	
192
	 * composants qui crée la combobox selon le contexte et le web service appelé.	
178
	 * @param Response la réponse à la requête asynchrone
193
	 * @param Response la réponse à la requête asynchrone
179
	 * @return String[] le tableau des suggestions qui sera affiché dans la combobox
194
	 * @return String[] le tableau des suggestions qui sera affiché dans la combobox
180
	 */
195
	 */
181
	protected abstract InfosNomPourAutocompletion[] parserResultatRequete(Response response);
196
	protected abstract InfosNomPourAutocompletion[] parserResultatRequete(Response response);
182
 
197
 
183
	public Vue getAutoCompletionComboBoxVue() {
198
	public Vue getAutoCompletionComboBoxVue() {
184
		return autoCompletionComboBoxVue;
199
		return autoCompletionComboBoxVue;
185
	}
200
	}
186
	
201
	
187
	public void afficherStyleErreur(String styleErreur) {
202
	public void afficherStyleErreur(String styleErreur) {
188
		autoCompletionComboBoxVue.afficherStyleErreur(styleErreur);
203
		autoCompletionComboBoxVue.afficherStyleErreur(styleErreur);
189
	}
204
	}
190
	
205
	
191
	public void supprimerStyleErreur(String styleErreur) {
206
	public void supprimerStyleErreur(String styleErreur) {
192
		autoCompletionComboBoxVue.supprimerStyleErreur(styleErreur);
207
		autoCompletionComboBoxVue.supprimerStyleErreur(styleErreur);
193
	}
208
	}
194
}
209
}