Subversion Repositories eFlore/Applications.del

Rev

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

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