1,5 → 1,6 |
package org.tela_botanica.del.client.composants.formulaires; |
|
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.dom.client.KeyPressEvent; |
import com.google.gwt.event.dom.client.KeyPressHandler; |
import com.google.gwt.http.client.Request; |
8,17 → 9,25 |
import com.google.gwt.http.client.RequestException; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.http.client.URL; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONValue; |
import com.google.gwt.user.client.Timer; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
import com.google.gwt.user.client.ui.SuggestOracle; |
|
public abstract class AutoCompletionComboBoxPresenteur { |
|
private AutoCompletionComboBoxVue autoCompletionComboBoxVue = new AutoCompletionComboBoxVue(); |
|
public interface Vue extends IsWidget { |
public void ajouterVue(HasWidgets composite); |
public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers(); |
public String getValeur(); |
public void remplirListe(String[] suggestions); |
public void afficherSuggestions(SuggestOracle.Request request,SuggestOracle.Callback response); |
public void afficherListeDeroulante(); |
public void nettoyer(); |
public void setValeur(String valeur); |
} |
private Vue autoCompletionComboBoxVue; |
|
SuggestOracle.Request requeteOracle; |
SuggestOracle.Callback callBackOracle; |
|
27,47 → 36,47 |
|
String urlRequete = ""; |
|
public AutoCompletionComboBoxPresenteur(String urlRequete) { |
public AutoCompletionComboBoxPresenteur(Vue vue, String urlRequete) { |
this.autoCompletionComboBoxVue = vue; |
this.urlRequete = urlRequete; |
gererEvenements(); |
} |
|
public void go(HasWidgets composite) { |
composite.add(autoCompletionComboBoxVue); |
gererEvenements(); |
autoCompletionComboBoxVue.ajouterVue(composite); |
} |
|
public void gererEvenements() { |
autoCompletionComboBoxVue.getSuggestBox().addKeyPressHandler(new KeyPressHandler() { |
public void onKeyPress(KeyPressEvent event) { |
|
autoCompletionComboBoxVue.getSuggestBoxHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() { |
public void onKeyPress(KeyPressEvent event) { |
if(event.getUnicodeCharCode() != 0) { |
|
if(suggestionTimer == null) { |
suggestionTimer = new Timer() { |
public void run() { |
requeteSuggestions(autoCompletionComboBoxVue.getSuggestBox().getValue()); |
} |
}; |
suggestionTimer.schedule(tempsAvantRequete); |
} else { |
suggestionTimer.schedule(tempsAvantRequete); |
} |
gererTimer(); |
} |
} |
|
}); |
|
requeteOracle = new SuggestOracle.Request(); |
callBackOracle = new SuggestOracle.Callback() { |
|
public void onSuggestionsReady( |
com.google.gwt.user.client.ui.SuggestOracle.Request request, |
com.google.gwt.user.client.ui.SuggestOracle.Response response) { |
autoCompletionComboBoxVue.getSuggestBox().showSuggestionList(); |
public void onSuggestionsReady(SuggestOracle.Request request, SuggestOracle.Response response) { |
autoCompletionComboBoxVue.afficherListeDeroulante(); |
} |
}; |
} |
|
public void gererTimer() { |
if(suggestionTimer == null) { |
suggestionTimer = new Timer() { |
public void run() { |
requeteSuggestions(); |
} |
}; |
suggestionTimer.schedule(tempsAvantRequete); |
} else { |
suggestionTimer.schedule(tempsAvantRequete); |
} |
} |
|
public void setTempsAvantRequete(int temps) { |
tempsAvantRequete = temps; |
} |
77,7 → 86,7 |
} |
|
public String getValeur() { |
return autoCompletionComboBoxVue.getSuggestBox().getValue(); |
return autoCompletionComboBoxVue.getValeur(); |
} |
|
public void setValeur(String taxon) { |
88,17 → 97,15 |
autoCompletionComboBoxVue.nettoyer(); |
} |
|
private void requeteSuggestions(final String requete) { |
public void requeteSuggestions() { |
|
final String requete = autoCompletionComboBoxVue.getValeur(); |
String requeteAjax = effectuerPreTraitementChaineRequete(requete); |
String urlProxy = URL.encode(urlRequete+requeteAjax); |
|
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlProxy) ; |
|
try { |
|
try { |
rb.sendRequest(null, new RequestCallback() { |
|
public void onError(final Request request, final Throwable exception) { |
// TODO Auto-generated method stub |
|
106,12 → 113,7 |
|
public void onResponseReceived(final Request request, |
final Response response) { |
|
String[] valeurs = parserResultatRequete(response); |
|
autoCompletionComboBoxVue.remplirListe(valeurs); |
requeteOracle.setQuery(requete); |
autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle); |
surReponseRequete(requete, response); |
} |
}) ; |
|
121,6 → 123,14 |
} |
} |
|
public void surReponseRequete(String requete, Response response) { |
String[] valeurs = parserResultatRequete(response); |
|
autoCompletionComboBoxVue.remplirListe(valeurs); |
requeteOracle.setQuery(requete); |
autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle); |
} |
|
/** |
* Permet d'intervenir sur la chaine tapée par l'utilisateur avant que celle-ci ne soit passée |
* à la requête asynchrone pour pouvoir la formater (pour mettre en minuscule, séparer des termes) |