/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] = "..."; |