Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2608 → Rev 2609

/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/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/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/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]