Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1971 → Rev 2033

/trunk/src/org/tela_botanica/client/vues/observation/ListeObservationVue.java
1,6 → 1,7
package org.tela_botanica.client.vues.observation;
 
 
import java.util.HashMap;
import java.util.Iterator;
 
import org.tela_botanica.client.modeles.objets.ListeObservation;
13,6 → 14,8
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.interfaces.VueListable;
 
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventCallback;
import com.gwtext.client.core.EventObject;
328,11 → 331,20
* Ajoute les listeners pour la gestion des évènements
*/
private void ajouterListeners() {
this.addGridHeaderListener(new GridHeaderListenerAdapter() {
@Override
public void onHeaderClick(GridPanel grid, int colIndex, EventObject e) {
triActif = true;
Timer t = new Timer() {
@Override
public void run() {
enregistrerEtatTri();
observationMediateur.obtenirListeObservation();
}
};
t.schedule(200);
}
});
969,4 → 981,23
public void setTailleInitialisee() {
tailleInitialisee = true;
}
 
public String renvoyerTri() {
String tri = "ordre";
if(triActif) {
HashMap<String, String> corr = Ontologies.getCorrespondanceGrilleObservationChampsTri();
if(corr.containsKey(champTri)) {
tri = corr.get(champTri);
}
}
return tri;
}
 
public String renvoyerDirectionTri() {
try {
return (triActif) ? directionTri.getDirection() : "ASC";
} catch (Exception e) {
return "ASC";
}
}
}
/trunk/src/org/tela_botanica/client/cel2.java
23,17 → 23,24
// A décommenter + compiler en detailed dans le cas d'une erreur
// survernant uniquement sur le serveur
/*GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void onUncaughtException(Throwable e) {
Window.alert("uncaught: " + e.getMessage());
String s = buildStackTrace(e, "RuntimeException:\n");
Window.alert(s);
e.printStackTrace();
/*GWT.setUncaughtExceptionHandler(null);
GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
@Override
public void onUncaughtException(Throwable e) {
Window.alert("uncaught: " + e.getMessage());
String s = buildStackTrace(e, "RuntimeException:\n");
Window.alert(s);
e.printStackTrace();
}
});*/
// TODO: config devrait être un singleton
Configuration config = new Configuration();
// Chargement de l'api google maps v3 avant l'initialisation pour
// éviter des "complications"
// TODO: fabriquer une classe qui cherche dans la config une liste d'api
// à charger, les instancie et ensuite lance l'application
AjaxLoaderOptions optAj = AjaxLoaderOptions.newInstance();
optAj.setOtherParms("key="+Configuration.getCleGoogleMaps()+"&sensor=false");
60,7 → 67,7
t.schedule(3000);
}
private String buildStackTrace(Throwable t, String log) {
/*private String buildStackTrace(Throwable t, String log) {
if (t != null) {
log += t.getClass().toString();
log += t.getMessage();
83,5 → 90,5
}
}
return log;
}
}*/
}
/trunk/src/org/tela_botanica/client/modeles/dao/ListeReferentielChampsEtendusDAO.java
6,6 → 6,8
 
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.objets.Configuration;
import org.tela_botanica.client.modeles.objets.ListeChampsEtendus;
import org.tela_botanica.client.modeles.objets.ListeGroupesChampsEtendus;
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso;
import org.tela_botanica.client.observation.ObservationModele;
 
46,23 → 48,7
public void onResponseReceived(final Request request,
final Response response) {
 
 
HashMap<String, String> labelCles = new HashMap<String, String>();
final JSONValue responseValue = JSONParser.parse(response.getText());
JSONObject reponse = null;
// si c'est un tableau
if ((reponse = responseValue.isObject()) != null) {
Iterator<String> it = reponse.keySet().iterator();
while(it.hasNext()) {
String cle = it.next();
String valeur = reponse.get(cle).isString().stringValue();
labelCles.put(cle, valeur);
}
}
ListeChampsEtendus labelCles = new ListeChampsEtendus(response.getText());
r.rafraichir(labelCles, true);
}
 
121,4 → 107,27
e.printStackTrace();
}
}
public void obtenirGroupesChampsEtendus(final Rafraichissable r) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl() +
"/GroupesChampsEtendus/");
try {
rb.sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(final Request request,
final Response response) {
ListeGroupesChampsEtendus valeurs = new ListeGroupesChampsEtendus(response.getText());
r.rafraichir(valeurs, true);
}
@Override
public void onError(Request request, Throwable exception) {
// TODO Auto-generated method stub
}
});
} catch (RequestException e) {
e.printStackTrace();
}
}
}
/trunk/src/org/tela_botanica/client/modeles/objets/Configuration.java
63,8 → 63,6
private static List<InfosReferentielNom> referentielsDispos;
private static Map<String,HashMap<String, String>> groupesChampsEtendus;
private static String activerSaisieChampsEtendus = "0";
 
/**
135,42 → 133,8
activerSaisieChampsEtendus = "0";
}
}
groupesChampsEtendus = new HashMap<String,HashMap<String, String>>();
if(activerSaisieChampsEtendus.equals("1")) {
if(Dictionary.getDictionary("configuration").get("groupesChampsEtendus") != null &&
!Dictionary.getDictionary("configuration").get("groupesChampsEtendus").isEmpty()) {
groupesChampsEtendus = parserGroupesChampsEtendus(Dictionary.getDictionary("configuration").get(
"groupesChampsEtendus"));
}
}
}
private HashMap<String,HashMap<String, String>> parserGroupesChampsEtendus(String groupeChampsEtendusJson) {
HashMap<String,HashMap<String, String>> groupesChampsEtendus = new HashMap<String,HashMap<String, String>>();
try {
JSONValue groupesJson = JSONParser.parse(groupeChampsEtendusJson);
JSONObject groupes = groupesJson.isObject();
for (Iterator<String> iterator = groupes.keySet().iterator(); iterator.hasNext();) {
String groupe = iterator.next();
JSONValue listeClesLabelsJson = groupes.get(groupe);
JSONObject listeClesLabels = listeClesLabelsJson.isObject();
HashMap<String, String> groupesClesLabel = new HashMap<String, String>();
for (Iterator<String> itCleLabels = listeClesLabels.keySet().iterator(); itCleLabels.hasNext();) {
String cle = itCleLabels.next();
String label = listeClesLabels.get(cle).isString().stringValue();
groupesClesLabel.put(cle, label);
}
groupesChampsEtendus.put(groupe, groupesClesLabel);
}
} catch (Exception e) {
// TODO: handle exception
}
return groupesChampsEtendus;
}
private List<InfosReferentielNom> parserReferentielsDispos(String chaineListeReferentiels) {
String[] tabReferentiels = chaineListeReferentiels.split(";");
List<InfosReferentielNom> referentiels = new ArrayList<InfosReferentielNom>(tabReferentiels.length);
287,8 → 251,4
public static boolean saisieChampsEtendusActivee() {
return activerSaisieChampsEtendus.equals("1");
}
public static Map<String,HashMap<String, String>> getGroupesChampsEtendus() {
return groupesChampsEtendus;
}
}
/trunk/src/org/tela_botanica/client/modeles/objets/ListeGroupesChampsEtendus.java
New file
0,0 → 1,34
package org.tela_botanica.client.modeles.objets;
 
import java.util.HashMap;
import java.util.Iterator;
 
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
 
public class ListeGroupesChampsEtendus extends HashMap<String,HashMap<String, String>> {
public ListeGroupesChampsEtendus(String groupeChampsEtendusJson) {
super();
try {
JSONValue groupesJson = JSONParser.parse(groupeChampsEtendusJson);
JSONObject groupes = groupesJson.isObject();
for (Iterator<String> iterator = groupes.keySet().iterator(); iterator.hasNext();) {
String groupe = iterator.next();
JSONValue listeClesLabelsJson = groupes.get(groupe);
JSONObject listeClesLabels = listeClesLabelsJson.isObject();
HashMap<String, String> groupesClesLabel = new HashMap<String, String>();
for (Iterator<String> itCleLabels = listeClesLabels.keySet().iterator(); itCleLabels.hasNext();) {
String cle = itCleLabels.next();
String label = listeClesLabels.get(cle).isString().stringValue();
groupesClesLabel.put(cle, label);
}
this.put(groupe, groupesClesLabel);
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
/trunk/src/org/tela_botanica/client/modeles/objets/Ontologies.java
4,8 → 4,11
import java.util.Iterator;
import java.util.List;
 
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.IntegerFieldDef;
import com.gwtext.client.data.SimpleStore;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
 
public class Ontologies {
123,4 → 126,23
storeAbondance.load();
return storeAbondance;
}
public static HashMap<String, String> getCorrespondanceGrilleObservationChampsTri() {
HashMap<String, String> correspondances = new HashMap<String, String>();
correspondances.put("etat_observation", "transmission");
correspondances.put("referentiel_taxo_observation", "nom_referentiel");
correspondances.put("nomSaisi_observation", "nom_sel");
correspondances.put("certitude", "certitude");
correspondances.put("nomRetenu_observation", "nom_ret");
correspondances.put("famille_observation", "famille");
correspondances.put("abondance", "abondance");
correspondances.put("phenologie", "phenologie");
correspondances.put("etat_observation", "transmission");
correspondances.put("lieu", "ce_zone_geo");
correspondances.put("altitude_observation", "altitude");
correspondances.put("date_observation", "date_observation");
correspondances.put("ordre_observation", "ordre");
return correspondances;
}
}
/trunk/src/org/tela_botanica/client/modeles/objets/ListeChampsEtendus.java
New file
0,0 → 1,30
package org.tela_botanica.client.modeles.objets;
 
import java.util.HashMap;
import java.util.Iterator;
 
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.client.Window;
 
public class ListeChampsEtendus extends HashMap<String, String> {
public ListeChampsEtendus(String listeChampsEtendusJson) {
super();
final JSONValue responseValue = JSONParser.parse(listeChampsEtendusJson);
JSONObject reponse = null;
// si c'est un objet
if ((reponse = responseValue.isObject()) != null) {
Iterator<String> it = reponse.keySet().iterator();
while(it.hasNext()) {
String cle = it.next();
String valeur = reponse.get(cle).isString().stringValue();
this.put(cle, valeur);
}
}
}
}
/trunk/src/org/tela_botanica/client/observation/ObservationModele.java
137,21 → 137,26
String[][] criteres = {{"",""}} ;
criteres = observationMediateur.renvoyerFiltres() ;
criteres = observationMediateur.renvoyerFiltres() ;
// on rassemble les critères
// ensuite on demande la page correspondante avec les mêmes critères
String[][] criteres2 = new String[criteres.length+2][2] ;
String[][] criteres2 = new String[criteres.length+4][2] ;
criteres2[0][0] = "limite" ;
criteres2[0][1] = ""+taillePage ;
criteres2[1][0] = "numero_page" ;
criteres2[1][1] = ""+pageEncours ;
criteres2[2][0] = "tri" ;
criteres2[2][1] = ""+observationMediateur.renvoyerTri();
criteres2[3][0] = "tri_dir";
criteres2[3][1] = ""+observationMediateur.renvoyerDirectionTri() ;
for(int i = 0 ; i < criteres.length ; i++)
{
criteres2[i+2][0] = criteres[i][0] ;
criteres2[i+2][1] = criteres[i][1] ;
criteres2[i+4][0] = criteres[i][0] ;
criteres2[i+4][1] = criteres[i][1] ;
}
// et on crée un DAO auquel on les transmet et qui envoie une requete pour recevoir les images
/trunk/src/org/tela_botanica/client/observation/ObservationMediateur.java
1243,4 → 1243,12
public void setRefTaxSelectionne(InfosReferentielNom refTax) {
refTaxSelectionne = refTax;
}
 
public String renvoyerTri() {
return listeObservation.renvoyerTri();
}
 
public String renvoyerDirectionTri() {
return listeObservation.renvoyerDirectionTri();
}
}
/trunk/src/org/tela_botanica/client/util/ChampSaisieEtendu.java
166,7 → 166,7
@SuppressWarnings("unchecked")
ArrayList<String> valeurs = (ArrayList<String>)nouvelleDonnees;
cacheValeurs = valeurs;
 
int i = 0;
Object[][] refData = new Object[valeurs.size()][1];
191,7 → 191,7
}
private void obtenirListeValeurs() {
String valeurChamp = getValue();
String valeurChamp = getRawValue();
obtenirListeValeurs(valeurChamp);
}
234,4 → 234,12
valeurBrute = valeur;
super.setValue(valeur);
}
public String getCle() {
return cle;
}
public String getLabel() {
return label;
}
}
/trunk/src/org/tela_botanica/client/util/FormulaireSaisieChampEtendu.java
10,6 → 10,8
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO;
import org.tela_botanica.client.modeles.objets.Configuration;
import org.tela_botanica.client.modeles.objets.ListeChampsEtendus;
import org.tela_botanica.client.modeles.objets.ListeGroupesChampsEtendus;
 
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
27,11 → 29,13
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.form.ComboBox;
import com.gwtext.client.widgets.form.Field;
import com.gwtext.client.widgets.form.FormPanel;
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
import com.gwtext.client.widgets.layout.FormLayout;
 
@SuppressWarnings("unchecked")
public abstract class FormulaireSaisieChampEtendu extends FormPanel implements Rafraichissable {
60,11 → 64,15
Button annulerAjouterChampEtendu;
String idChamp = null;
Panel conteneurGroupesChampsEtendus;
final ComboBox groupesChampsEtendus;
HTML indicationSaisieGroupe;
private static ListeGroupesChampsEtendus cacheGroupes;
private Timer timer = null;
private Map<String, String> cacheClesValeur;
private static Map<String, String> cacheClesValeur;
private Record rdSelectionne = null;
private Record groupeSelectionne = null;
private String valeurBrute = "";
74,14 → 82,14
setPaddings(3);
setBodyBorder(false);
HTML indicationSaisieGroupe = new HTML("Vous pouvez ajouter plusieurs champs à la fois correspondant à un groupe "+
"par exemple les champs du projet sauvage de ma rue ou florilèges, ou bien "+
"les champs phytosociolgiques ");
indicationSaisieGroupe = new HTML("Vous pouvez ajouter plusieurs champs à la fois correspondant à un groupe "+
"par exemple les champs des projet 'sauvages de ma rue' ou 'florilèges', etc... <br />"+
"De nouveaux groupes seront ajoutés régulièrement en fonction des champs les plus utilisés");
indicationSaisieGroupe.addStyleName("aideCreerChampEtendu");
groupesChampsEtendus = new ComboBox();
groupesChampsEtendus.setWidth("350px");
groupesChampsEtendus.setLabel("Ajouter un groupe de champs");
groupesChampsEtendus.setStore(getGroupesChampsEtendusStore());
groupesChampsEtendus.setDisplayField("label") ;
groupesChampsEtendus.setValueField("valeur");
groupesChampsEtendus.setEditable(false);
90,14 → 98,25
groupesChampsEtendus.setCls("champ-separation");
groupesChampsEtendus.setValue("");
if(groupesChampsEtendusSontDefinis()) {
add(indicationSaisieGroupe);
add(groupesChampsEtendus);
conteneurGroupesChampsEtendus = new Panel();
conteneurGroupesChampsEtendus.setBorder(false);
conteneurGroupesChampsEtendus.setPaddings(0);
conteneurGroupesChampsEtendus.setMargins(0);
conteneurGroupesChampsEtendus.setLayout(new FormLayout());
conteneurGroupesChampsEtendus.setWidth("100%");
add(conteneurGroupesChampsEtendus);
if(cacheGroupes == null) {
ListeReferentielChampsEtendusDAO lrceDao = new ListeReferentielChampsEtendusDAO(null);
lrceDao.obtenirGroupesChampsEtendus(this);
} else {
this.rafraichir(cacheGroupes, false);
}
HTML indicationSaisie = new HTML("Saisissez un nom de champ ou choisisez un nom proposé par l'autocomplétion "+
"Si vous choissisez un nom de champ existant vous pourrez profiter d'une autocomplétion "+
"sur les valeur déjà saisies pour ce champ par les autres utilisateurs");
"sur les valeurs déjà saisies pour ce champ par les autres utilisateurs");
indicationSaisie.addStyleName("aideCreerChampEtendu");
add(indicationSaisie);
126,7 → 145,7
nChamp.setLoadingText("Recherche...");
nChamp.setHideTrigger(true);
nChamp.setValidateOnBlur(false);
nChamp.setWidth("250px");
nChamp.setWidth("350px");
nChamp.focus();
ajouterListeners();
275,7 → 294,7
private List<ChampSaisieEtendu> renvoyerListeChampsEtendus(String groupe) {
List<ChampSaisieEtendu> champsDuGroupe = new ArrayList<ChampSaisieEtendu>();
HashMap<String, String> listeChampsEtendus = Configuration.getGroupesChampsEtendus().get(groupe);
HashMap<String, String> listeChampsEtendus = cacheGroupes.get(groupe);
for (Iterator<String> iterator = listeChampsEtendus.keySet().iterator(); iterator.hasNext();) {
String cle = iterator.next();
String label = listeChampsEtendus.get(cle);
315,44 → 334,51
public abstract void surAnnulation();
public void rafraichir(Object nouvelleDonnees, boolean repandreRaffraichissement) {
int i = 0;
HashMap<String, String> clesLabels = (HashMap<String, String>)nouvelleDonnees;
cacheClesValeur = clesLabels;
Object[][] refData = new Object[clesLabels.keySet().size()][2];
for (Iterator<String> it = clesLabels.keySet().iterator(); it.hasNext();)
{
String cle = it.next();
String label= clesLabels.get(cle);
refData[i][0]= cle;
refData[i][1]= label;
i++;
if(nouvelleDonnees instanceof ListeChampsEtendus) {
int i = 0;
ListeChampsEtendus clesLabels = (ListeChampsEtendus)nouvelleDonnees;
cacheClesValeur = clesLabels;
Object[][] refData = new Object[clesLabels.keySet().size()][2];
for (Iterator<String> it = clesLabels.keySet().iterator(); it.hasNext();)
{
String cle = it.next();
String label= clesLabels.get(cle);
refData[i][0]= cle;
refData[i][1]= label;
i++;
}
FieldDef defCle = new StringFieldDef("cle");
FieldDef defLabel = new StringFieldDef("label");
FieldDef[] defTab = {defCle, defLabel};
RecordDef rd = new RecordDef(defTab);
final MemoryProxy dataProxy = new MemoryProxy(refData);
final ArrayReader reader = new ArrayReader(rd);
Store store=new Store(dataProxy,reader);
nChamp.setStore(store);
store.load();
}
FieldDef defCle = new StringFieldDef("cle");
FieldDef defLabel = new StringFieldDef("label");
FieldDef[] defTab = {defCle, defLabel};
RecordDef rd = new RecordDef(defTab);
final MemoryProxy dataProxy = new MemoryProxy(refData);
final ArrayReader reader = new ArrayReader(rd);
Store store=new Store(dataProxy,reader);
nChamp.setStore(store);
store.load();
if(nouvelleDonnees instanceof ListeGroupesChampsEtendus) {
cacheGroupes = (ListeGroupesChampsEtendus)nouvelleDonnees;
groupesChampsEtendus.setStore(getGroupesChampsEtendusStore(cacheGroupes));
if(cacheGroupes.size() > 0) {
conteneurGroupesChampsEtendus.add(indicationSaisieGroupe);
conteneurGroupesChampsEtendus.add(groupesChampsEtendus);
doLayout();
}
}
}
private boolean groupesChampsEtendusSontDefinis() {
return Configuration.getGroupesChampsEtendus().size() > 0;
}
private Store getGroupesChampsEtendusStore() {
int i = 1;
Map<String, HashMap<String, String>> listeGroupesChampsEtendus = Configuration.getGroupesChampsEtendus();
private Store getGroupesChampsEtendusStore(ListeGroupesChampsEtendus listeGroupesChampsEtendus) {
int i = 1;
Object[][] valeurs = new Object[listeGroupesChampsEtendus.size()+1][2];
valeurs[0][0] = "...";