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;
}