Subversion Repositories eFlore/Applications.del

Rev

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

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