/trunk/src/org/tela_botanica/del/client/composants/formulairerechercheeflore/FormulaireRechercheEflorePresenteur.java |
---|
7,6 → 7,7 |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.comparaisoneflore.EvenementComparaisonEflore; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService; |
import com.google.gwt.event.dom.client.ClickEvent; |
65,7 → 66,7 |
} |
@Override |
protected String[] parserResultatRequete(Response response) { |
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) { |
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response); |
} |
}; |
/trunk/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRecherchePresenteur.java |
---|
12,6 → 12,7 |
import org.tela_botanica.del.client.modeles.InformationsRecherche; |
import org.tela_botanica.del.client.modeles.ModeRecherche; |
import org.tela_botanica.del.client.services.ReferentielService; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService; |
import com.google.gwt.event.dom.client.ClickEvent; |
207,7 → 208,7 |
} |
@Override |
protected String[] parserResultatRequete(Response response) { |
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) { |
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response); |
// A décommenter lors de l'utilisation des web services eflore |
// return RetourAutoCompletionService.parserRetourOss(response); |
232,7 → 233,7 |
} |
@Override |
protected String[] parserResultatRequete(Response response) { |
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) { |
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response); |
} |
}; |
/trunk/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionPresenteur.java |
---|
19,12 → 19,15 |
import org.tela_botanica.del.client.services.ReferentielService; |
import org.tela_botanica.del.client.services.rest.PropositionDeterminationService; |
import org.tela_botanica.del.client.services.rest.async.PropositionDeterminationCallBack; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
80,7 → 83,7 |
private AutoCompletionComboBoxPresenteur autoCompletionNomTaxonsPresenteur; |
private PropositionDeterminationService propositionDeterminationService; |
private Map<String, String> cacheTaxons = new HashMap<String, String>(); |
private Map<String, InfosNomPourAutocompletion> cacheTaxons = new HashMap<String, InfosNomPourAutocompletion>(); |
public FormulairePropositionPresenteur(Vue vue, PropositionDeterminationService propositionDeterminationService) { |
this.vue = vue; |
119,7 → 122,7 |
} |
@Override |
protected String[] parserResultatRequete(Response response) { |
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) { |
cacheTaxons = UtilitairesAutoCompletionService.extraireTaxonsNumNomsResultatRetourSimple(response); |
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response); |
} |
248,7 → 251,7 |
String nomTaxon = autoCompletionNomTaxonsPresenteur.getValeur(); |
propositionAjoutee.setEspece(nomTaxon); |
if(cacheTaxons.containsKey(nomTaxon)) { |
propositionAjoutee.setNumNomenclatural(cacheTaxons.get(nomTaxon)); |
propositionAjoutee.setNumNomenclatural("" + cacheTaxons.get(nomTaxon).getNn()); |
} |
if(vue.getReferentiel() != "tous") { |
/trunk/src/org/tela_botanica/del/client/composants/formulaires/autocompletion/AutoCompletionComboBoxPresenteur.java |
---|
1,5 → 1,7 |
package org.tela_botanica.del.client.composants.formulaires.autocompletion; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import com.google.gwt.core.shared.GWT; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.dom.client.KeyPressEvent; |
27,7 → 29,7 |
public void ajouterVue(HasWidgets composite); |
public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers(); |
public String getValeur(); |
public void remplirListe(String[] suggestions); |
public void remplirListe(InfosNomPourAutocompletion[] suggestions); |
public void afficherSuggestions(SuggestOracle.Request request,SuggestOracle.Callback response); |
public void afficherListeDeroulante(); |
public void nettoyer(); |
149,7 → 151,7 |
} |
public void surReponseRequete(String requete, Response response) { |
String[] valeurs = parserResultatRequete(response); |
InfosNomPourAutocompletion[] valeurs = parserResultatRequete(response); |
autoCompletionComboBoxVue.remplirListe(valeurs); |
requeteOracle.setQuery(requete); |
autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle); |
176,7 → 178,7 |
* @param Response la réponse à la requête asynchrone |
* @return String[] le tableau des suggestions qui sera affiché dans la combobox |
*/ |
protected abstract String[] parserResultatRequete(Response response); |
protected abstract InfosNomPourAutocompletion[] parserResultatRequete(Response response); |
public Vue getAutoCompletionComboBoxVue() { |
return autoCompletionComboBoxVue; |
/trunk/src/org/tela_botanica/del/client/composants/formulaires/autocompletion/AutoCompletionComboBoxVue.java |
---|
1,5 → 1,6 |
package org.tela_botanica.del.client.composants.formulaires.autocompletion; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import org.tela_botanica.del.client.utils.TBSuggestOracle; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
27,7 → 28,7 |
return suggestions; |
} |
public void remplirListe(String[] listePropositions) { |
public void remplirListe(InfosNomPourAutocompletion[] listePropositions) { |
msu.clear(); |
for (int i = 0; i < listePropositions.length; i++) { |
/trunk/src/org/tela_botanica/del/client/utils/TBSuggestOracle.java |
---|
15,10 → 15,10 |
public class TBSuggestOracle extends SuggestOracle { |
// On devrait gérer des objets qui contiennent le nn plutôt que de se baser uniquement sur des Strings |
protected ArrayList<String> possibilites; |
protected ArrayList<InfosNomPourAutocompletion> possibilites; |
public TBSuggestOracle() { |
this.possibilites = new ArrayList<String>(); |
this.possibilites = new ArrayList<InfosNomPourAutocompletion>(); |
} |
public void clear() { |
25,7 → 25,7 |
this.possibilites.clear(); |
} |
public void add(String suggestion) { |
public void add(InfosNomPourAutocompletion suggestion) { |
this.possibilites.add(suggestion); |
} |
34,10 → 34,14 |
int limit = request.getLimit(); |
List<MultiWordSuggestion> retenus = new ArrayList<MultiWordSuggestion>(); |
for (String possibilite : this.possibilites) { |
String possibiliteHtml = possibilite; |
if (possibilite.toLowerCase().startsWith(query)) { |
MultiWordSuggestion muWoSug = new MultiWordSuggestion(possibilite, possibiliteHtml); |
for (InfosNomPourAutocompletion possibilite : this.possibilites) { |
String possibiliteTexte = possibilite.getNs(); |
String possibiliteHtml = possibiliteTexte; |
if (possibilite.isRetenu()) { |
possibiliteHtml = "<strong>" + possibiliteHtml + "</strong>"; |
} |
if (possibiliteTexte.toLowerCase().startsWith(query)) { |
MultiWordSuggestion muWoSug = new MultiWordSuggestion(possibiliteTexte, possibiliteHtml); |
retenus.add(muWoSug); |
} |
} |
/trunk/src/org/tela_botanica/del/client/utils/InfosNomPourAutocompletion.java |
---|
New file |
0,0 → 1,48 |
package org.tela_botanica.del.client.utils; |
/** |
* Juste histoire de pouvoir stocker le nom scientifique, le numéro nomenclatural et |
* le statut "retenu" dans un même endroit, pour nourrir ensuite l'autocomplétion |
* |
* @author mathias |
*/ |
public class InfosNomPourAutocompletion { |
/** numéro nomenclatural - un int suffit largement */ |
protected int nn; |
/** nom scientifique (complet, avec auteur) */ |
protected String ns; |
/** si true, désigne un nom retenu */ |
protected boolean retenu; |
public InfosNomPourAutocompletion(int nn, String ns, boolean retenu) { |
this.nn = nn; |
this.ns = ns; |
this.retenu = retenu; |
} |
// le parseur JSON produit des double, soyons courtois |
public InfosNomPourAutocompletion(double nn, String ns, boolean retenu) { |
this((int)nn, ns, retenu); |
} |
public int getNn() { |
return nn; |
} |
public String getNs() { |
return ns; |
} |
public boolean isRetenu() { |
return retenu; |
} |
public void setNn(int nn) { |
this.nn = nn; |
} |
public void setNs(String ns) { |
this.ns = ns; |
} |
public void setRetenu(boolean retenu) { |
this.retenu = retenu; |
} |
} |
/trunk/src/org/tela_botanica/del/client/utils/UtilitairesAutoCompletionService.java |
---|
1,13 → 1,15 |
package org.tela_botanica.del.client.utils; |
import java.util.HashMap; |
import java.util.LinkedHashMap; |
import java.util.Map; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONObject; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONValue; |
import com.google.gwt.user.client.Window; |
public class UtilitairesAutoCompletionService { |
31,30 → 33,42 |
return chaineTraitee; |
} |
public static Map<String, String> extraireTaxonsNumNomsResultatRetourSimple(Response response) { |
public static Map<String, InfosNomPourAutocompletion> extraireTaxonsNumNomsResultatRetourSimple(Response response) { |
JSONObject responseValue = JSONParser.parseStrict(response.getText()).isObject(); |
JSONArray noms = responseValue.get("resultats").isArray(); |
final int taillemax = noms.size(); |
Map<String, String> retourTaxons = new HashMap<String, String>(taillemax); |
// LinkedHashMap préserve l'ordre |
Map<String, InfosNomPourAutocompletion> retourTaxons = new LinkedHashMap<String, InfosNomPourAutocompletion>(taillemax); |
for (int i = 0; i < taillemax; i++) { |
String nom = (noms.get(i).isArray().get(0).isString().stringValue()); |
String taxon = (noms.get(i).isArray().get(1).isString().stringValue()); |
retourTaxons.put(nom, taxon); |
// comment rendre compliqué un format fait pour être simple |
JSONObject obj = noms.get(i).isObject(); |
String ns = obj.get("ns").isString().stringValue(); |
double nn = obj.get("nn").isNumber().doubleValue(); |
boolean retenu = obj.get("retenu").isBoolean().booleanValue(); |
// empile, Gérard ! |
retourTaxons.put(ns, new InfosNomPourAutocompletion(nn, ns, retenu)); |
} |
return retourTaxons; |
} |
public static String[] parserResultatRetourSimple(Response response) { |
public static InfosNomPourAutocompletion[] parserResultatRetourSimple(Response response) { |
JSONObject responseValue = JSONParser.parseStrict(response.getText()).isObject(); |
JSONArray noms = responseValue.get("resultats").isArray(); |
String[] valeurs = new String[0]; |
final int taillemax = noms.size(); |
valeurs = new String[taillemax]; |
InfosNomPourAutocompletion[] valeurs = new InfosNomPourAutocompletion[taillemax]; |
// Eh les gars, si on refaisait le même truc ici que celui qu'on vient de faire en haut ? |
for (int i = 0; i < taillemax; i++) { |
valeurs[i] = (noms.get(i).isArray().get(0).isString().stringValue()); |
// comment rendre comp... euh j'ai déjà dit ça il y a 20 lignes, non ? |
JSONObject obj = noms.get(i).isObject(); |
String ns = obj.get("ns").isString().stringValue(); |
double nn = obj.get("nn").isNumber().doubleValue(); |
boolean retenu = obj.get("retenu").isBoolean().booleanValue(); |
// empile, Marcel ! |
valeurs[i] = new InfosNomPourAutocompletion(nn, ns, retenu); |
} |
return valeurs; |
} |