/trunk/src/org/tela_botanica/client/vues/observation/FormulaireSaisieObservationVue.java |
---|
9,25 → 9,21 |
import java.util.Map; |
import org.tela_botanica.client.CarnetEnLigneMediateur; |
import org.tela_botanica.client.cel2; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO; |
import org.tela_botanica.client.modeles.dao.ListeReferentielLocaliteAsynchroneDAO; |
import org.tela_botanica.client.modeles.dao.ListeReferentielNomAsynchroneDAO; |
import org.tela_botanica.client.modeles.dao.ListeReferentielPersoAsynchroneDAO; |
import org.tela_botanica.client.modeles.objets.ChampEtendu; |
import org.tela_botanica.client.modeles.objets.Configuration; |
import org.tela_botanica.client.modeles.objets.EntiteGeographiqueObservation; |
import org.tela_botanica.client.modeles.objets.ListeObservation; |
import org.tela_botanica.client.modeles.objets.ListeReferentielLocalite; |
import org.tela_botanica.client.modeles.objets.ListeReferentielNom; |
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso; |
import org.tela_botanica.client.modeles.objets.Observation; |
import org.tela_botanica.client.modeles.objets.Ontologies; |
import org.tela_botanica.client.modeles.objets.ReferentielLocalite; |
import org.tela_botanica.client.modeles.objets.ReferentielNom; |
import org.tela_botanica.client.modeles.objets.Utilisateur; |
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso.TypesReferentiels; |
import org.tela_botanica.client.observation.ObservationMediateur; |
import org.tela_botanica.client.util.AutoCompletionRefComboBox; |
import org.tela_botanica.client.util.ChampSaisieEtendu; |
import org.tela_botanica.client.util.FormulaireSaisieChampEtendu; |
import org.tela_botanica.client.util.Util; |
36,10 → 32,6 |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONString; |
import com.google.gwt.json.client.JSONValue; |
import com.google.gwt.user.client.Timer; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HTML; |
50,20 → 42,12 |
import com.gwtext.client.core.ExtElement; |
import com.gwtext.client.core.ListenerConfig; |
import com.gwtext.client.core.Position; |
import com.gwtext.client.data.ArrayReader; |
import com.gwtext.client.data.FieldDef; |
import com.gwtext.client.data.MemoryProxy; |
import com.gwtext.client.data.RecordDef; |
import com.gwtext.client.data.Store; |
import com.gwtext.client.data.StringFieldDef; |
import com.gwtext.client.widgets.BoxComponent; |
import com.gwtext.client.widgets.Button; |
import com.gwtext.client.widgets.Component; |
import com.gwtext.client.widgets.Container; |
import com.gwtext.client.widgets.DatePicker; |
import com.gwtext.client.widgets.Panel; |
import com.gwtext.client.widgets.ToolTip; |
import com.gwtext.client.widgets.Toolbar; |
import com.gwtext.client.widgets.event.ButtonListenerAdapter; |
import com.gwtext.client.widgets.event.ContainerListenerAdapter; |
import com.gwtext.client.widgets.event.DatePickerListenerAdapter; |
105,12 → 89,15 |
private AutoCompletionComboBox station = null; |
private AutoCompletionComboBox milieu = null; |
private TextField comment = null; |
private ComboBox localite = null; |
private AutoCompletionComboBox localite = null; |
private String codeLocalite = null; |
private String pays = null; |
private ComboBox espece = null; |
private AutoCompletionComboBox espece = null; |
private Map<String, ReferentielNom> referentielNom = null; |
private Map<String, ReferentielLocalite> referentielLocalite = null; |
private String numeroNom = null; |
private String numeroOrdre = null; |
private String referentielTaxo = null; |
118,7 → 105,7 |
// Pour remise a zero partielle lors d'une validation |
private enum Champs { |
private enum Champs { |
DATE, LIEUDIT, STATION, MILIEU, COMMENT, LOCALITE, ESPECE, TOUT, LATITUDE, LONGITUDE, ALTITUDE, ABONDANCE, CERTITUDE, REFERENTIELTAXO, PHENOLOGIE; |
@Override |
186,8 → 173,6 |
private boolean selectionCertitude = false; |
private boolean selectionPhenologie = false; |
private Toolbar bt = null ; |
private final String VALEURS_MULTIPLES = "(Valeurs multiples)"; |
private final String modeleMessageModif = "localite:lieu-dit:station:milieu:latitude:longitude:altitude:date:espece:commentaire:abondance:identification:referentiel:phenologie"; |
private boolean localiteModifiee = false; |
335,16 → 320,36 |
this.setPaddings(5) ; |
// Accesskey pour debugging |
localite = new ComboBox("Localite","localite\" accesskey=\"1"); |
localite = new AutoCompletionComboBox("Localité", ListeReferentielLocaliteAsynchroneDAO.getUrlReferentielLocalites()) { |
@Override |
protected Map<String, String> parserResultatRequete(Response response) { |
referentielLocalite = Util.parserRetourReferentielLocaliteIndexeParNom(response); |
return Util.convertirListeReferentielLocaliteVersMap(referentielLocalite); |
} |
@Override |
public void onSelectionValeur() { |
localiteModifiee = true; |
surSelectionLocalite(); |
} |
@Override |
protected void onModificationValeur() { |
localiteModifiee = true; |
} |
final String resultTpllocalite = "<div class=\"search-item-localite\">{localite}</div>"; |
localite.setTpl(resultTpllocalite); |
localite.setMode(ComboBox.REMOTE); |
localite.setItemSelector("div.search-item-localite"); |
localite.setTypeAhead(true); |
localite.setLoadingText("Recherche..."); |
localite.setHideTrigger(true); |
@Override |
public void onValidationSaisie() { |
validerSaisie(Champs.LOCALITE); |
} |
/*@Override |
protected String preTraiterUrlRequete(String urlRequete, String valeur) { |
}*/ |
}; |
//création du lien "Accès carto" dans le formulaire |
String aideLienLocaliser = "Via une carte, obtenez les coordonnées (latitude/longitude) de votre observation, Vous pouvez entrer une nom sous la forme commune (departement) ou bien localite (pays) "+ |
"avec un numéro de département sur 2 chiffres ou un code de pays à deux lettres (format iso 3166 1)"; |
387,6 → 392,11 |
@Override |
public void onValidationSaisie() { |
validerSaisie(Champs.STATION); |
} |
@Override |
protected String preTraiterUrlRequete(String urlRequete, String valeur) { |
return ListeReferentielPersoAsynchroneDAO.formaterUrlRequeteAutoCompletionPerso(urlRequete, valeur); |
} |
}; |
panneauPremierColonne.add(station, new AnchorLayoutData("95%")); |
487,18 → 497,46 |
selecteurReferentielTaxo.setForceSelection(true); |
selecteurReferentielTaxo.setTpl(champsListeTpl); |
espece=new ComboBox("Espèce","nom"); |
final String resultTplEspece = "<div class=\"search-item-espece {indicateurNomRetenu}\">{nom}</div>"; |
espece = new AutoCompletionComboBox("Espèce", ListeReferentielNomAsynchroneDAO.getBaseUrlReferentielNom()) { |
@Override |
protected Map<String, String> parserResultatRequete(Response response) { |
referentielNom = Util.parserRetourReferentielNomIndexeParNom(response); |
return Util.convertirListeReferentielNomVersMap(referentielNom); |
} |
@Override |
public void onSelectionValeur() { |
especeModifiee = true; |
surSelectionEspece(); |
} |
@Override |
protected void onModificationValeur() { |
especeModifiee = true; |
} |
@Override |
public void onValidationSaisie() { |
validerSaisie(Champs.ESPECE); |
} |
@Override |
protected String preTraiterUrlRequete(String urlRequete, String valeur) { |
return ListeReferentielNomAsynchroneDAO.formaterUrlAutoCompletionReferentielNom(urlRequete, referentielTaxo, valeur); |
} |
@Override |
protected String preTraiterValeurAvantAffichage(String valeur) { |
ReferentielNom nomValeur = referentielNom.get(valeur); |
String valeurAffichee = nomValeur.getNom(); |
// Pour afficher les noms retenus en gras |
if (nomValeur.estRetenu()) { |
valeurAffichee = "<span class=\"nomRetenu\">" + nomValeur.getNom() + "</span>"; |
} |
return valeurAffichee; |
} |
}; |
espece.setTpl(resultTplEspece); |
espece.setMode(ComboBox.REMOTE); |
espece.setItemSelector("div.search-item-espece"); |
espece.setTypeAhead(true); |
espece.setLoadingText("Recherche..."); |
espece.setHideTrigger(true); |
Panel panelSeparationPp = new Panel(); |
panelSeparationPp.setHeight(15); |
panelSeparationPp.setBorder(false); |
539,6 → 577,11 |
public void onValidationSaisie() { |
validerSaisie(Champs.LIEUDIT); |
} |
@Override |
protected String preTraiterUrlRequete(String urlRequete, String valeur) { |
return ListeReferentielPersoAsynchroneDAO.formaterUrlRequeteAutoCompletionPerso(urlRequete, valeur); |
} |
}; |
panneauSecondeColonne.add(lieudit, new AnchorLayoutData("95%")); |
562,6 → 605,11 |
public void onValidationSaisie() { |
validerSaisie(Champs.MILIEU); |
} |
@Override |
protected String preTraiterUrlRequete(String urlRequete, String valeur) { |
return ListeReferentielPersoAsynchroneDAO.formaterUrlRequeteAutoCompletionPerso(urlRequete, valeur); |
} |
}; |
panneauSecondeColonne.add(milieu, new AnchorLayoutData("95%")); |
705,6 → 753,19 |
saisieTabindex(); |
} |
protected void surSelectionEspece() { |
ReferentielNom nom = referentielNom.get(espece.getText()); |
numeroNom = nom.getNumeroNom(); |
selectionEspece = true; |
observationMediateur.obtenirImageInformationExternes(referentielTaxo, numeroNom); |
} |
protected void surSelectionLocalite() { |
ReferentielLocalite infosLoc = referentielLocalite.get(localite.getText()); |
codeLocalite = infosLoc.getCodeLocalite(); |
selectionlocalite=true; |
} |
private void gererLienAjoutChampsEtendus() { |
popUpAjoutChampEtendu.setStylePrimaryName("popup_champ_etendu"); |
lienAjouterChampsEtendus.addClickHandler(new ClickHandler() { |
815,7 → 876,7 |
@Override |
public void execute(EventObject e) { |
if(localite.getValue() != null && !localite.getValue().equals("")) { |
if(localite.getText() != null && !localite.getText().equals("")) { |
obtenirInformationLocalite(); |
longlatAjoutee = true; |
} else { |
876,10 → 937,8 |
}; |
ajouterListenerChampEvenementsClavier(localite, listenerConfiglocalite); |
ajouterListenerChampEvenementsClavier(date); |
ajouterListenerChampEvenementsClavier(selecteurReferentielTaxo); |
ajouterListenerChampEvenementsClavier(espece, listenerConfigEspece); |
ajouterListenerChampEvenementsClavier(comment); |
ajouterListenerChampEvenementsClavier(latitude); |
ajouterListenerChampEvenementsClavier(longitude); |
935,21 → 994,6 |
} |
private void ajouterListenerChampsCombobox() { |
localite.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
localite.setValue(record.getAsString("localite")); |
codeLocalite=record.getAsString("departement"); |
selectionlocalite=true; |
localite.collapse(); |
} |
@Override |
public void onExpand(ComboBox comboBox) { |
comboBox.focus(); |
} |
}); |
selecteurReferentielTaxo.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
959,16 → 1003,6 |
} |
}); |
espece.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
espece.setValue(record.getAsString("nom")); |
numeroNom=record.getAsString("numeroNom"); |
selectionEspece=true; |
observationMediateur.obtenirImageInformationExternes(referentielTaxo, numeroNom); |
} |
}); |
selecteurAbondance.addListener(new ComboBoxListenerAdapter() { |
@Override |
public void onSelect(ComboBox comboBox, Record record, int index) { |
1154,7 → 1188,6 |
if(champ.equals(espece)) { |
numeroNom=""; |
obtenirListeReferentielNom(); |
especeModifiee = true; |
} |
1169,7 → 1202,6 |
if(champ.equals(localite)) { |
codeLocalite=""; |
localite.collapse(); |
obtenirListeReferentiellocalite(); |
localiteModifiee= true; |
} |
} |
1206,84 → 1238,7 |
@Override |
public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) { |
// si l'on a reçu une liste du referentiel localite (completion referentiel localite) |
if(nouvelleDonnees instanceof ListeReferentielLocalite) |
{ |
ListeReferentielLocalite data = (ListeReferentielLocalite) nouvelleDonnees ; |
Object[][] localiteData = new Object[data.size()][3]; |
int i = 0 ; |
// on la parse et on récupère les informations quiç nous interessent |
for (Iterator it = data.keySet().iterator(); it.hasNext();) |
{ |
ReferentielLocalite ref=data.get(it.next()); |
localiteData[i][0]= ref.getLocalite(); |
localiteData[i][1]= ref.getCodeLocalite(); |
localiteData[i][2]= ref.getCodeInsee(); |
i++ ; |
} |
// creation du store |
FieldDef deflocalite = new StringFieldDef("localite"); |
FieldDef defDepartement = new StringFieldDef("departement"); |
FieldDef defCodeInsee = new StringFieldDef("codeInsee"); |
FieldDef[] defTab = { deflocalite, defDepartement, defCodeInsee}; |
RecordDef rd = new RecordDef(defTab); |
final MemoryProxy dataProxy = new MemoryProxy(localiteData); |
final ArrayReader reader = new ArrayReader(rd); |
Store store=new Store(dataProxy,reader); |
localite.setStore(store); |
store.load(); |
} |
// si l'on a reçu une liste du référentiel nom (complétion referentiel nom) |
if(nouvelleDonnees instanceof ListeReferentielNom) |
{ |
ListeReferentielNom data = (ListeReferentielNom) nouvelleDonnees ; |
Object[][] nomData = new Object[data.size()][3]; |
int i = 0 ; |
// on la parse et on récupère les informations qui nous interessent |
for (Iterator it = data.keySet().iterator(); it.hasNext();) |
{ |
ReferentielNom ref=data.get(it.next()); |
nomData[i][0]= ref.getNom(); |
nomData[i][1]= ref.getNumeroNom(); |
if (ref.getStatut().equals("3")) { |
nomData[i][2]="nom_retenu"; |
} |
else { |
nomData[i][2]=""; |
} |
i++ ; |
} |
FieldDef defNom = new StringFieldDef("nom"); |
FieldDef defNumeroNom = new StringFieldDef("numeroNom"); |
FieldDef indicateurNomRetenu = new StringFieldDef("indicateurNomRetenu"); |
FieldDef[] defTab = { defNom, defNumeroNom, indicateurNomRetenu}; |
RecordDef rd = new RecordDef(defTab); |
final MemoryProxy dataProxy = new MemoryProxy(nomData); |
final ArrayReader reader = new ArrayReader(rd); |
Store store=new Store(dataProxy,reader); |
espece.setStore(store); |
store.load() ; |
} |
// On recoit une observation dont on veut afficher le detail |
if(nouvelleDonnees instanceof Observation) |
{ |
Observation obs = (Observation)nouvelleDonnees ; |
1399,12 → 1354,12 |
if (!nlocalite.isEmpty()) { |
// Vide ou null, on remplace ! |
if(localite.getValue() == null || localite.getValue().trim().isEmpty()) { |
if(localite.getText() == null || localite.getText().trim().isEmpty()) { |
localite.setValue(nlocalite); |
} else { |
// Afin de pas effacer un pays précédemment saisi, si on a déjà saisi une localité |
// avec le même nom mais avec un pays, on ne remplace rien |
if(localite.getValue() != null && !localite.getValue().contains(nlocalite)) { |
if(localite.getText() != null && !localite.getText().contains(nlocalite)) { |
localite.setValue(nlocalite); |
} |
} |
1431,31 → 1386,6 |
coordPanel.setVisible(true); |
} |
public void obtenirListeReferentiellocalite() { |
String com=localite.getText(); |
com=com.replaceAll("%",""); |
observationMediateur.obtenirListeReferentielLocalite(this,com); |
} |
public void obtenirListeReferentielNom() { |
String esp=espece.getText().replaceAll(" ","/*"); |
esp=esp.replaceAll("%",""); |
String referentiel = this.referentielTaxo; |
observationMediateur.obtenirListeReferentielNom(this,referentiel ,esp); |
} |
protected void obtenirListeReferentielMilieu() { |
observationMediateur.obtenirListeReferentielPerso(this,TypesReferentiels.REFERENTIEL_MILIEU,milieu.getText()); |
} |
protected void obtenirReferentielLieuDit() { |
observationMediateur.obtenirListeReferentielPerso(this,TypesReferentiels.REFERENTIEL_LIEU_DIT,lieudit.getText()); |
} |
public void ajouterObservation() { |
if(date.getRawValue() != null && !date.getRawValue().equals("") && !Util.verifierDateFormatCel(date.getRawValue())) { |
1935,7 → 1865,6 |
ChampSaisieEtendu ch = listeChampsEtendus.get(iterator.next()); |
ch.redimensionner(largeur - 15); |
if(ch.getFieldWidth() < ch.getLabelWidth()) { |
cel2.LogVersFirebug(ch.getLabelText()+" : "+ch.getFieldWidth()+" < "+ch.getLabelWidth()); |
ch.addClass("panneauModePetiteLargeur"); |
ch.agrandirChamp(largeur - 82); |
} else { |
2307,8 → 2236,8 |
String valeurlocalite = ""; |
if(localite.getValue() != null) { |
valeurlocalite = localite.getValue(); |
if(localite.getText() != null) { |
valeurlocalite = localite.getText(); |
} |
return valeurlocalite; |
} |
/trunk/src/org/tela_botanica/client/modeles/objets/ReferentielNom.java |
---|
41,5 → 41,9 |
public String getStatut() { |
return statut; |
} |
} |
public boolean estRetenu() { |
return statut != null && statut.equals("3"); |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/dao/ListeReferentielPersoAsynchroneDAO.java |
---|
5,6 → 5,7 |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.objets.Configuration; |
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso; |
import org.tela_botanica.client.modeles.objets.Utilisateur; |
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso.TypesReferentiels; |
import org.tela_botanica.client.observation.ObservationModele; |
20,87 → 21,7 |
import com.google.gwt.json.client.JSONValue; |
public class ListeReferentielPersoAsynchroneDAO { |
/** |
* Cache |
* |
*/ |
private HashMap<String,ListeReferentielPerso> cache = new HashMap(); |
private TypesReferentiels refDemande = null; |
public ListeReferentielPersoAsynchroneDAO(ObservationModele obs) { |
} |
public void setRefDemande(TypesReferentiels refDemande) { |
this.refDemande = refDemande; |
} |
public void obtenirListeDonnees(final Rafraichissable r, String utilisateur, final String critere) { |
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl() + |
"/SelfRefList/"+ |
utilisateur+"/"+ |
refDemande.toString()+ |
"?start=0&limit=50&recherche="+URL.encode(critere)); |
try { |
rb.sendRequest(null, new RequestCallback() { |
@Override |
public void onError(final Request request, final Throwable exception) { |
// TODO Auto-generated method stub |
} |
@Override |
public void onResponseReceived(final Request request, |
final Response response) { |
final ListeReferentielPerso referentielData; |
final JSONValue responseValue = JSONParser.parse(response.getText()); |
JSONArray reponse = null; |
// si c'est un tableau |
if ((reponse = responseValue.isArray()) != null) { |
JSONString elementsRef; |
final int taillemax = reponse.size(); |
referentielData = new ListeReferentielPerso(taillemax, refDemande); |
for (int i = 0; i < taillemax; i++) { |
if ((elementsRef = reponse.get(i).isString()) != null) { |
String valeur = elementsRef.stringValue(); |
referentielData.put(i+"", valeur); |
} |
} |
} else { |
referentielData = new ListeReferentielPerso(0, refDemande); |
} |
// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est |
// le premier à les recevoir |
r.rafraichir(referentielData, true); |
} |
}); |
} catch (RequestException e) { |
e.printStackTrace(); |
} |
} |
public static String getUrlReferentielPerso(TypesReferentiels refDemande) { |
return Configuration.getServiceBaseUrl() + |
"/SelfRefList/"+ |
108,4 → 29,8 |
refDemande.toString()+ |
"?start=0&limit=50&recherche="; |
} |
public static String formaterUrlRequeteAutoCompletionPerso(String urlRequete, String valeur) { |
return urlRequete.replace("{utilisateur}", Utilisateur.getInstance().getIdentifiantUtilisateurConsulte())+URL.encodeQueryString(valeur); |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/dao/ListeReferentielNomAsynchroneDAO.java |
---|
5,7 → 5,6 |
import org.tela_botanica.client.interfaces.FournisseurListe; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.objets.Configuration; |
import org.tela_botanica.client.modeles.objets.ListeReferentielNom; |
import org.tela_botanica.client.modeles.objets.ReferentielNom; |
import org.tela_botanica.client.observation.ObservationModele; |
25,115 → 24,27 |
* @author David Delon |
* |
*/ |
public class ListeReferentielNomAsynchroneDAO implements FournisseurListe { |
public class ListeReferentielNomAsynchroneDAO { |
//TODO : limiter taille du cache ? (si pb performance) |
/** |
* Le modèle associé au DAO |
*/ |
private ObservationModele observationModele = null ; |
private String referentiel = null; |
/** |
* Cache |
* |
*/ |
private HashMap <String,ListeReferentielNom> cache = new HashMap(); |
public ListeReferentielNomAsynchroneDAO(ObservationModele observationModele) |
{ |
this.observationModele=observationModele; |
public static String getBaseUrlReferentielNom() { |
return Configuration.getServiceBaseUrl()+"/NameSearch/{referentiel}/"; |
} |
@Override |
public void obtenirListeDonnees(final Rafraichissable r,final String referentiel, final String critere) |
{ |
ListeReferentielNom referentielNomDataFromCache=null; |
public static String formaterUrlAutoCompletionReferentielNom(String urlRequete, String referentiel, String critere) { |
// On vérifie si un genre et une espèce sont demandées |
// et ajoute le / manuellement car sinon il devient urlencodé |
String[] criteres =critere.split("/"); |
urlRequete = urlRequete.replace("{referentiel}", referentiel); |
if(this.referentiel != referentiel) { |
cache.clear(); |
} |
// En cache ? |
if ((referentielNomDataFromCache=getFromCache(critere))!=null) { |
r.rafraichir(referentielNomDataFromCache,true); |
String params = ""; |
if(criteres.length > 1) { |
String critere1 = criteres[0]; |
String critere2 = criteres[1]; |
params += URL.encode(critere1)+"/"+URL.encode(critere2); |
} else { |
params += URL.encode(critere); |
} |
else { |
// On vérifie si un genre et une espèce sont demandées |
// et ajoute le / manuellement car sinon il devient urlencodé |
String[] criteres =critere.split("/"); |
String urlParams = "/NameSearch/"+referentiel+"/"; |
if(criteres.length > 1) { |
String critere1 = criteres[0]; |
String critere2 = criteres[1]; |
urlParams += URL.encode(critere1)+"/"+URL.encode(critere2); |
} else { |
urlParams += URL.encode(critere); |
} |
this.referentiel = referentiel; |
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl()+urlParams); |
try { |
rb.sendRequest(null, new RequestCallback() { |
@Override |
public void onError(Request request, Throwable exception) { |
// TODO Auto-generated method stub |
} |
@Override |
public void onResponseReceived(Request request, |
Response response) { |
final ListeReferentielNom referentielNomData ; |
final JSONValue responseValue = JSONParser.parse(response.getText()); |
JSONArray reponse=null; |
// si c'est un tableau |
if ((reponse=responseValue.isArray()) != null) { |
JSONArray noms; |
final int taillemax = reponse.size(); |
referentielNomData = new ListeReferentielNom(taillemax); |
for (int i = 0; i < taillemax; i++) { |
if ((noms=reponse.get(i).isArray()) != null) { |
String nom = ((JSONString) noms.get(0)).stringValue(); |
String numeroNom = ((JSONString) noms.get(1)).stringValue(); |
String statut= ((JSONString) noms.get(2)).stringValue(); |
ReferentielNom nomScientifique = new ReferentielNom(nom, numeroNom, statut); |
// FIXME : et si le numero de nom n'est pas unique ? (cas de multirefrentiel....) |
referentielNomData.put(nomScientifique.getNumeroNom(),nomScientifique); |
} |
} |
} else { |
referentielNomData = new ListeReferentielNom(0) ; |
} |
addToCache(critere, referentielNomData); |
r.rafraichir(referentielNomData,true); |
} |
}) ; |
} catch(RequestException e) { |
} |
} // fin else si pas de cache |
return urlRequete+params; |
} |
@Override |
public void obtenirListeDonnees(Rafraichissable r, String critere) { |
obtenirListeDonnees(r, "bdtfx", critere); |
} |
private void addToCache(String query, ListeReferentielNom result) { |
cache.put(query.toLowerCase(),result); |
} |
private ListeReferentielNom getFromCache (String query) { |
return cache.get(query.toLowerCase()); |
} |
} |
/trunk/src/org/tela_botanica/client/modeles/dao/ListeReferentielLocaliteAsynchroneDAO.java |
---|
5,7 → 5,6 |
import org.tela_botanica.client.interfaces.FournisseurListe; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.objets.Configuration; |
import org.tela_botanica.client.modeles.objets.ListeReferentielLocalite; |
import org.tela_botanica.client.modeles.objets.ReferentielLocalite; |
import org.tela_botanica.client.observation.ObservationModele; |
25,122 → 24,9 |
* @author David Delon |
* |
*/ |
public class ListeReferentielLocaliteAsynchroneDAO implements FournisseurListe { |
public class ListeReferentielLocaliteAsynchroneDAO { |
/** |
* Le modèle associé au DAO. |
*/ |
private ObservationModele observationModele = null; |
/** |
* Cache |
* |
*/ |
private HashMap<String,ListeReferentielLocalite> cache = new HashMap(); |
/** |
* Constructeur. |
* @param obs : Modele |
*/ |
public ListeReferentielLocaliteAsynchroneDAO(final ObservationModele obs) { |
this.observationModele = obs; |
public static String getUrlReferentielLocalites() { |
return Configuration.getServiceBaseUrl()+"/LocationSearch/"; |
} |
/** |
* Envoie une requete au serveur jrest pour obtenir les localites correspondant |
* à des critères données en paramètres. |
* @param r le rafraichissable qui demande la mise à jour |
* @param critere un string contenant le terme a rechercher |
*/ |
@Override |
public final void obtenirListeDonnees(final Rafraichissable r, final String critere) { |
ListeReferentielLocalite referentielLocaliteDataFromCache=null; |
// En cache ? |
if ((referentielLocaliteDataFromCache=getFromCache(critere))!=null) { |
r.rafraichir(referentielLocaliteDataFromCache,true); |
} |
else { |
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl() + "/LocationSearch/" + URL.encodeComponent(critere)); |
try { |
rb.sendRequest(null, new RequestCallback() { |
@Override |
public void onError(final Request request, final Throwable exception) { |
// TODO Auto-generated method stub |
} |
@Override |
public void onResponseReceived(final Request request, |
final Response response) { |
final ListeReferentielLocalite referentielLocaliteData; |
final JSONValue responseValue = JSONParser.parse(response.getText()); |
JSONArray reponse = null; |
// si c'est un tableau |
if ((reponse = responseValue.isArray()) != null) { |
JSONArray localites; |
final int taillemax = reponse.size(); |
referentielLocaliteData = new ListeReferentielLocalite(taillemax); |
for (int i = 0; i < taillemax; i++) { |
if ((localites = reponse.get(i).isArray()) != null) { |
String localite = ((JSONString) localites.get(0)).stringValue(); |
String departement = ((JSONString) localites.get(1)).stringValue(); |
ReferentielLocalite com = new ReferentielLocalite(localite, departement); |
referentielLocaliteData.put(com.getLocalite() + com.getCodeLocalite(), com); |
} |
} |
} else { |
referentielLocaliteData = new ListeReferentielLocalite(0); |
} |
addToCache(critere, referentielLocaliteData); |
r.rafraichir(referentielLocaliteData, true); |
} |
}); |
} catch (RequestException e) { |
e.printStackTrace(); |
} |
} // Fin else si pas de cache |
} |
/** |
* Fonction à implémenter dans le futur, lors de l'utilisation de plusieurs |
* référentiels de localité |
*/ |
@Override |
public void obtenirListeDonnees(Rafraichissable r, String referentiel, String critere) { |
// TODO Auto-generated method stub |
} |
private void addToCache(String query, ListeReferentielLocalite result) { |
cache.put(query.toLowerCase(),result); |
} |
private ListeReferentielLocalite getFromCache (String query) { |
return cache.get(query.toLowerCase()); |
} |
} |
/trunk/src/org/tela_botanica/client/observation/ObservationModele.java |
---|
44,7 → 44,6 |
* Booleen indiquant si le médiateur est instancié (l'instance doit être unique donc le booleen est static) |
*/ |
private static boolean estInstancie = false ; |
private static ObservationModele thisModele = null ; |
/** |
55,32 → 54,20 |
/** |
* Le médiateur associé au modèle |
*/ |
private ObservationMediateur observationMediateur = null ; |
/** |
* La liste des mots clés en cours |
*/ |
private HashMap<String, String> motsCles = new HashMap<String, String>(0); |
private HashMap<String, String> motsCles = new HashMap<String, String>(0); |
private Tree arbreMotsCles = new Tree() ; |
/** |
* La liste des observations affichées en cours (verifier utilité) |
*/ |
private ListeObservation cacheObservation = new ListeObservation(0) ; |
/** |
* DAO dont le resultat peut etre mis en cache |
* |
*/ |
private ListeReferentielNomAsynchroneDAO nomDAO=null; |
private ListeReferentielLocaliteAsynchroneDAO refDAO=null; |
private ListeReferentielPersoAsynchroneDAO refPersoDAO=null; |
/** |
* Retourne une instance de manière unique |
* @param im le médiateur à associer |
* @return l'instance du modèle |
167,54 → 154,7 |
loaDAO.obtenirListeObservation(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), criteres2); |
} |
/** |
* Obtenir une liste de localites |
* @param r |
* @param critere |
*/ |
public void obtenirListeReferentielLocalite(Rafraichissable r, String critere) { |
if (refDAO==null) { |
refDAO=new ListeReferentielLocaliteAsynchroneDAO(this); |
} |
refDAO.obtenirListeDonnees(r, critere); |
} |
/** |
* Obtenir une liste de valeur vis à vis d'un champ donné pour un utilisateur |
* @param r |
* @param critere |
*/ |
public void obtenirListeReferentielPerso(Rafraichissable r, TypesReferentiels referentiel, String critere) { |
if (refPersoDAO==null) { |
refPersoDAO=new ListeReferentielPersoAsynchroneDAO(this); |
} |
refPersoDAO.setRefDemande(referentiel); |
refPersoDAO.obtenirListeDonnees(r,Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), critere); |
} |
/** |
* Obtenir une liste de nom scientifique de plante |
* @param r |
* @param critere |
*/ |
public void obtenirListeReferentielNom(Rafraichissable r, String referentiel, String critere) { |
if (nomDAO==null) { |
nomDAO=new ListeReferentielNomAsynchroneDAO(this); |
} |
nomDAO.obtenirListeDonnees(r, referentiel, critere); |
} |
/** |
* |
* Lance la creation d'une observation |
* @param r : la vue demandeuse de donnee |
221,11 → 161,9 |
* @param critere : les criteres de selection |
*/ |
public void ajouterObservation(Rafraichissable r, Observation obs) { |
public void ajouterObservation(Rafraichissable r, Observation obs) { |
ObservationAsynchroneDAO obsDAO=new ObservationAsynchroneDAO(this); |
obsDAO.ajouter(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), obs); |
obsDAO.ajouter(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), obs); |
} |
/** |
234,24 → 172,17 |
* @param r : la vue demandeuse de donnee |
* @param critere : les criteres de selection |
*/ |
public void modifierObservation(Rafraichissable r, Observation obs) { |
public void modifierObservation(Rafraichissable r, Observation obs) { |
ObservationAsynchroneDAO obsDAO=new ObservationAsynchroneDAO(this); |
obsDAO.modifier(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), obs); |
obsDAO.modifier(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), obs); |
} |
public void modifierObservationEnMasse( |
Rafraichissable r, Observation obs) { |
ListeObservationAsynchroneDAO liObsDAO=new ListeObservationAsynchroneDAO(this); |
liObsDAO.modifierEnMasse(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), obs); |
liObsDAO.modifierEnMasse(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), obs); |
} |
public void supprimerObservation(Rafraichissable r, String numeroOrdre) { |
ObservationAsynchroneDAO obsDao = new ObservationAsynchroneDAO(this) ; |
261,8 → 192,6 |
} |
/** |
* Accesseur pour la configuration en cours d'utilisation |
* |
269,10 → 198,8 |
* @return la configuration |
*/ |
public Configuration getConfig() { |
return config; |
} |
/** |
* Obtenir des informations de repartition relative a un numero nomenclatural |
279,8 → 206,6 |
* @param r |
* @param numeroNomenclaturalSaisiObservation |
*/ |
public void obtenirImageInformationRepartition(Rafraichissable r, String referentielTaxo, String numeroNomenclaturalSaisiObservation) { |
ImageInformationRepartitionAsynchroneDAO repDAO= new ImageInformationRepartitionAsynchroneDAO(this); |
294,13 → 219,9 |
* @param r |
* @param numeroNomenclaturalSaisiObservation |
*/ |
public void obtenirImageGenerique( Rafraichissable r, String referentielTaxo, String numeroNomenclaturalSaisiObservation) { |
public void obtenirImageGenerique( Rafraichissable r, String referentielTaxo, String numeroNomenclaturalSaisiObservation) { |
ImageGeneriqueVueAsynchroneDAO imgDAO= new ImageGeneriqueVueAsynchroneDAO(this); |
imgDAO.obtenirURLImage(r, referentielTaxo, numeroNomenclaturalSaisiObservation); |
imgDAO.obtenirURLImage(r, referentielTaxo, numeroNomenclaturalSaisiObservation); |
} |
308,12 → 229,9 |
* Obtenir la liste de l'ensemble des entites geographiques associes aux observation d'un utilisateur |
* @param r |
*/ |
public void obtenirListeEntiteGeographique(Rafraichissable r) { |
ListeEntiteGeographiqueObservationAsynchroneDAO entDAO = new ListeEntiteGeographiqueObservationAsynchroneDAO(this); |
entDAO.obtenirListeEntitesGeographiques(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte()); |
} |
321,18 → 239,14 |
public void obtenirDatesObservation( |
Rafraichissable r) { |
ListeDateObservationAsynchroneDAO ldoDAO = new ListeDateObservationAsynchroneDAO(this); |
ldoDAO.obtenirListeDate(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte()); |
ldoDAO.obtenirListeDate(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte()); |
} |
public void obtenirLiaisonImage(Rafraichissable r, |
String idObservation) { |
public void obtenirLiaisonImage(Rafraichissable r, String idObservation) { |
LienImageAsynchroneDAO liaDAO = new LienImageAsynchroneDAO(this) ; |
liaDAO.obtenirLiaisonsObservationsImages(r, idObservation,Utilisateur.getInstance().getIdentifiantUtilisateurConsulte()) ; |
} |
365,32 → 279,24 |
public void supprimerLiaisonImages(String idImg, String idObs) { |
public void supprimerLiaisonImages(String idImg, String idObs) { |
LienImageAsynchroneDAO lienDAO = new LienImageAsynchroneDAO(this) ; |
lienDAO.supprimerLienImageObservation(idImg, idObs) ; |
lienDAO.supprimerLienImageObservation(idImg, idObs) ; |
} |
public void supprimerListeObservation(Rafraichissable r, |
String numObs) { |
public void supprimerListeObservation(Rafraichissable r, String numObs) { |
ListeObservationAsynchroneDAO lioaDAO = new ListeObservationAsynchroneDAO(this); |
lioaDAO.supprimerListeObservation(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), numObs); |
lioaDAO.supprimerListeObservation(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), numObs); |
} |
public void transmettreListeObservation( |
Rafraichissable r, String numObsapl, boolean publier) { |
public void transmettreListeObservation(Rafraichissable r, String numObsapl, boolean publier) { |
TransmissionObservationAsynchroneDAO toaDAO = new TransmissionObservationAsynchroneDAO(this); |
toaDAO.transmettreObservations(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), numObsapl, publier); |
toaDAO.transmettreObservations(r, Utilisateur.getInstance().getIdentifiantUtilisateurConsulte(), numObsapl, publier); |
} |
public void analyserHistorique(Rafraichissable r,String anum) { |
public void analyserHistorique(Rafraichissable r,String anum) { |
NomRetenuAsynchroneDAO nraDAO = new NomRetenuAsynchroneDAO(this); |
nraDAO.obtenirNomRetenu(r, anum); |
nraDAO.obtenirNomRetenu(r, anum); |
} |
397,24 → 303,19 |
public void importerObservations() { |
ImportObservationAsynchroneDAO ioDAO = new ImportObservationAsynchroneDAO(this); |
ioDAO.importerObservations(); |
ioDAO.importerObservations(); |
} |
public void obtenirArbreMotsCles(Rafraichissable r) { |
public void obtenirArbreMotsCles(Rafraichissable r) { |
MotsClesAsynchroneDAO mcoDAO = new MotsClesAsynchroneDAO("obs"); |
mcoDAO.obtenirListeMotsCles(this); |
mcoDAO.obtenirListeMotsCles(this); |
} |
@Override |
public void rafraichir(Object nouvelleDonnees, |
boolean repandreRaffraichissement) { |
if(nouvelleDonnees instanceof JSONArray) { |
public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) { |
if(nouvelleDonnees instanceof JSONArray) { |
JSONArray donneesArbre = (JSONArray)nouvelleDonnees; |
Object[] arbreEtCorrespondancesIds = MotsClesUtilitaire.construireArbre("Projets", "racine_obs", donneesArbre, false); |
431,7 → 332,6 |
if(nouvelleDonnees instanceof Observation) { |
observationMediateur.obtenirNombreObservation(); |
} |
} |
/** |
/trunk/src/org/tela_botanica/client/observation/ObservationMediateur.java |
---|
1,12 → 1,7 |
package org.tela_botanica.client.observation; |
// TODO : systematiser les onQuelquechose, appelle depuis les vues |
import java.util.Map; |
import org.tela_botanica.client.CarnetEnLigneMediateur; |
import org.tela_botanica.client.cel2; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.dao.InformationLocaliteDAO; |
import org.tela_botanica.client.modeles.objets.Configuration; |
15,8 → 10,6 |
import org.tela_botanica.client.modeles.objets.ListeObservation; |
import org.tela_botanica.client.modeles.objets.Observation; |
import org.tela_botanica.client.modeles.objets.Utilisateur; |
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso.TypesReferentiels; |
import org.tela_botanica.client.util.Util; |
import org.tela_botanica.client.vues.observation.CartographieObservationVue; |
import org.tela_botanica.client.vues.observation.FormulaireImportObservationVue; |
import org.tela_botanica.client.vues.observation.FormulaireSaisieObservationVue; |
31,7 → 24,6 |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.user.client.History; |
import com.google.gwt.user.client.Window; |
import com.google.maps.gwt.client.LatLng; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.core.Ext; |
import com.gwtext.client.core.ExtElement; |
51,7 → 43,6 |
import com.gwtext.client.widgets.layout.FitLayout; |
import com.gwtext.client.widgets.layout.RowLayout; |
import com.gwtext.client.widgets.layout.RowLayoutData; |
import com.gwtext.client.widgets.map.LatLonPoint; |
import com.gwtext.client.widgets.tree.TreeNode; |
100,7 → 91,6 |
/** |
* Saisie des Observations |
*/ |
private FormulaireSaisieObservationVue formulaireSaisieObservationVue=null; |
109,7 → 99,6 |
* Import des observations depuis un fichier |
* |
*/ |
private FormulaireImportObservationVue formImportObs=null; |
466,13 → 455,13 |
} |
} |
public void obtenirImageInformationExternes(String referentielTaxo, String numeroNomenclaturalSaisiObservation) { |
public void obtenirImageInformationExternes(String referentielTaxo, String numeroNomenclaturalSaisiObservation) { |
if(details.isVisible()) { |
if(GWT.isScript()) { |
masquerChargementInfosObservations() ; |
} |
liExtVue.rafraichir(numeroNomenclaturalSaisiObservation, false); |
String[] infosRefNom = {numeroNomenclaturalSaisiObservation, referentielTaxo}; |
liExtVue.rafraichir(infosRefNom, false); |
observationModele.obtenirImageInformationRepartition(informationRepartitionVue, referentielTaxo, numeroNomenclaturalSaisiObservation) ; |
observationModele.obtenirImageGenerique(imageGeneriqueVue, referentielTaxo, numeroNomenclaturalSaisiObservation) ; |
} |
611,46 → 600,7 |
return listeObservation.getStore().getCount() > 0; |
} |
// Assistants de saisie |
/** |
* |
* Lance un appel de recherche d'une liste de localite correspondant aux criteres de selection |
* @param r : la vue demandeuse de donnee |
* @param critere : les criteres de selection |
*/ |
public void obtenirListeReferentielLocalite(Rafraichissable r, String critere) { |
observationModele.obtenirListeReferentielLocalite(r,critere) ; |
} |
// Assistants de saisie |
/** |
* |
* Lance un appel de recherche d'une liste de résultats |
* correspondant aux criteres de selections pour un référentiel donné |
* @param r : la vue demandeuse de donnee |
* @param referentiel : le référentiel demandé |
* @param critere : les criteres de selection |
*/ |
public void obtenirListeReferentielPerso(Rafraichissable r, TypesReferentiels referentiel, String critere) { |
observationModele.obtenirListeReferentielPerso(r, referentiel, critere) ; |
} |
/** |
* |
* Lance un appel de recherche d'une liste de nom scientifique correspondant aux criteres de selectionne |
* @param r : la vue demandeuse de donnee |
* @param critere : les criteres de selection |
*/ |
public void obtenirListeReferentielNom(Rafraichissable r,String referentiel, String critere) { |
observationModele.obtenirListeReferentielNom(r, referentiel, critere) ; |
} |
// Etat du syteme |
/** |
* C'est dans cette fonction que doivent être renvoyé les valeurs des filtres |
* sous forme de tableau [nom, valeur] |