Subversion Repositories eFlore/Applications.cel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 2567 → Rev 2568

/trunk/src/org/tela_botanica/client/modeles/dao/InformationCommuneDAO.java
File deleted
/trunk/src/org/tela_botanica/client/modeles/dao/ListeReferentielCommuneAsynchroneDAO.java
File deleted
/trunk/src/org/tela_botanica/client/modeles/dao/ListeReferentielLocaliteAsynchroneDAO.java
New file
0,0 → 1,146
package org.tela_botanica.client.modeles.dao;
 
import java.util.HashMap;
 
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;
 
import com.google.gwt.http.client.Request;
import org.tela_botanica.client.util.RequestBuilderWithCredentials;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
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;
 
/**
* DAO la liste des localites. Utilisation d'un cache pour eviter les requetes inutiles
* @author David Delon
*
*/
public class ListeReferentielLocaliteAsynchroneDAO implements FournisseurListe {
 
/**
* 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;
}
/**
* 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/dao/ObservationAsynchroneDAO.java
58,6 → 58,7
+"&nom_sel="+URL.encodeComponent(obs.getNomSaisi())
+"&nom_sel_nn="+obs.getNumeroNomenclaturalSaisi()
+"&zone_geo="+URL.encodeComponent(obs.getLocalite())
+"&pays="+ (obs.getPays() != null ? obs.getPays() : "")
+"&ce_zone_geo="+obs.getIdentifiantLocalite()
+"&date_observation=" + obs.getDate()
+"&lieudit="+ URL.encodeComponent(obs.getLieudit())
113,6 → 114,7
+ "&nom_sel=" + URL.encodeComponent(obs.getNomSaisi())
+ "&nom_sel_nn=" + obs.getNumeroNomenclaturalSaisi()
+ "&zone_geo=" + URL.encodeComponent(obs.getLocalite())
+"&pays="+ (obs.getPays() != null ? obs.getPays() : "")
+ "&ce_zone_geo=" + obs.getIdentifiantLocalite()
+ "&date_observation=" + obs.getDate()
+ "&lieudit="+ URL.encodeComponent(obs.getLieudit())
/trunk/src/org/tela_botanica/client/modeles/dao/ListeObservationAsynchroneDAO.java
60,7 → 60,7
if(criteres != null)
{
// on construit les paramètres du get avec les critères (&critere1=valeur1&critere2=valeur2 etc...)
// ils contiennent limite et taille page et autres filtres (communes , lieu dit etc ...)S
// ils contiennent limite et taille page et autres filtres (localites , lieu dit etc ...)S
for (int i = 0; i < criteres.length; i++) {
144,6 → 144,10
postData += "&nom_sel_nn=" + obs.getNumeroNomenclaturalSaisi();
}
if(obs.getPays() != null) {
postData += "&pays=" + URL.encodeComponent(obs.getPays());
}
if(obs.getIdentifiantLocalite() != null) {
postData += "&ce_zone_geo=" + obs.getIdentifiantLocalite();
}
/trunk/src/org/tela_botanica/client/modeles/dao/ListeEntiteGeographiqueObservationAsynchroneDAO.java
18,7 → 18,7
import com.google.gwt.json.client.JSONValue;
 
/**
* DAO la liste des communes.
* DAO la liste des localites.
* @author David Delon
*
*/
40,23 → 40,10
public ListeEntiteGeographiqueObservationAsynchroneDAO(final ObservationModele obs) {
this.observationModele = obs;
}
/**
* Envoie une requete au serveur jrest pour obtenir les communes 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
*/
public final void obtenirListeEntitesGeographiques(final Rafraichissable r, final String utilisateur) {
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl() + "/InventoryLocationList/" + utilisateur);
try {
rb.sendRequest(null, new RequestCallback() {
63,22 → 50,17
 
@Override
public void onError(final Request request, final Throwable exception) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
}
 
@Override
public void onResponseReceived(final Request request,
final Response response) {
final ListeEntiteGeographiqueObservation listeEntiteGeographiqueObservation;
final JSONValue responseValue = JSONParser.parse(response.getText());
final ListeEntiteGeographiqueObservation listeEntiteGeographiqueObservation;
final JSONValue responseValue = JSONParser.parse(response.getText());
JSONArray reponse = null;
// si c'est un tableau
if ((reponse = responseValue.isArray()) != null) {
94,19 → 76,18
String zoneGeo = Util.getValeurJsonOuVide(entites, "zone_geo");
String lieuDit = Util.getValeurJsonOuVide(entites, "lieudit");
String station = Util.getValeurJsonOuVide(entites, "station");
String pays = Util.getValeurJsonOuVide(entites, "pays");
EntiteGeographiqueObservation ent = new EntiteGeographiqueObservation(idZoneGeo, zoneGeo, lieuDit, station);
ent.setPays(pays);
listeEntiteGeographiqueObservation.put(ent);
}
}
} else {
listeEntiteGeographiqueObservation = new ListeEntiteGeographiqueObservation(0);
}
// 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(listeEntiteGeographiqueObservation, true);
}
119,4 → 100,4
}
}
}
}
/trunk/src/org/tela_botanica/client/modeles/dao/InformationLocaliteDAO.java
New file
0,0 → 1,200
package org.tela_botanica.client.modeles.dao;
 
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.objets.Configuration;
import org.tela_botanica.client.modeles.objets.EntiteGeographiqueObservation;
import org.tela_botanica.client.util.Util;
 
import com.google.gwt.http.client.Request;
import org.tela_botanica.client.util.RequestBuilderWithCredentials;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
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 InformationLocaliteDAO {
 
private final String NOM_SERVICE = "CoordSearch";
private final String CODE_PAYS = "FR";
// Ce DAO peut être fréquemment sollicité lors de l'utilisation de la carte
// et peut empiler beaucoup de longues requête, ceci permet donc de les annuler facilement
private static Request requeteEnCours = null;
 
Rafraichissable r = null;
 
public InformationLocaliteDAO(Rafraichissable r) {
this.r = r;
}
 
public void obtenirLocalitePlusProche(final Rafraichissable r, final double lng,
final double lat) {
annulerRequeteEnCours();
 
String adresseAppel = Configuration.getServiceBaseUrl() + "/"
+ NOM_SERVICE + "?lat="+URL.encode("" + lat) + "&lon="+URL.encode("" + lng);
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, adresseAppel);
 
try {
requeteEnCours = rb.sendRequest(null, new RequestCallback() {
 
@Override
public void onError(Request request, Throwable exception) {
Window.alert(exception.getMessage());
requeteEnCours = null;
}
 
@Override
public void onResponseReceived(Request request,
Response response) {
EntiteGeographiqueObservation infos;
String idLocalite = "";
String nomLocalite = "";
String pays = "";
 
if (response.getStatusCode() == Response.SC_BAD_REQUEST) {
Window.alert("Requete mal formée");
} else {
if(response.getText().equals("")) {
 
infos = new EntiteGeographiqueObservation(idLocalite, nomLocalite, null, null);
infos.setLat(""+lat);
infos.setLon(""+lng);
r.rafraichir(infos, false);
}
final JSONValue responseValue = JSONParser
.parse(response.getText());
 
if (responseValue.isObject() != null) {
JSONObject objectRetour = responseValue.isObject();
if(objectRetour.get("nom").isString() != null) {
nomLocalite = objectRetour.get("nom").isString().stringValue();
}
if(objectRetour.get("code_zone").isString() != null) {
idLocalite = objectRetour.get("code_zone").isString().stringValue().substring(0, 2);
}
if(objectRetour.get("code_pays").isString() != null) {
pays = objectRetour.get("code_pays").isString().stringValue();
}
}
}
infos = new EntiteGeographiqueObservation(idLocalite, nomLocalite, null, null);
infos.setLat(""+lat);
infos.setLon(""+lng);
infos.setPays(pays);
 
r.rafraichir(infos, false);
}
});
} catch (RequestException e) {
Window.alert(e.getMessage());
}
}
 
public void obtenirInfosLocalite(final Rafraichissable r,
String valeurLocalite, String codeLoc) {
annulerRequeteEnCours();
codeLoc = codeLoc.replaceAll("000null", "*");
codeLoc = codeLoc.replaceAll("\"", "");
valeurLocalite = valeurLocalite.split(" \\([0-9][0-9]\\)")[0];
valeurLocalite = valeurLocalite.replaceAll("000null", "*");
valeurLocalite = valeurLocalite.replaceAll("\"", "");
String adresseAppel = Configuration.getServiceBaseUrl() + "/"
+ NOM_SERVICE+"?zone="+ URL.encode(valeurLocalite);
if(!codeLoc.trim().isEmpty()) {
// Cas du code de département ou postal
if(Util.estUnNombre(codeLoc)) {
adresseAppel += "&code="+URL.encode(codeLoc)+"&pays="+URL.encode(CODE_PAYS);
} else {
//cas du code pays
adresseAppel += "&pays="+URL.encode(codeLoc);
}
}
 
RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, adresseAppel);
 
try {
requeteEnCours = rb.sendRequest(null, new RequestCallback() {
 
@Override
public void onError(Request request, Throwable exception) {
Window.alert(exception.getMessage());
}
 
@Override
public void onResponseReceived(Request request,
Response response) {
 
if (response.getStatusCode() == Response.SC_BAD_REQUEST) {
r.rafraichir("Impossible de géolocaliser cette observation", false);
} else {
final JSONValue responseValue = JSONParser
.parse(response.getText());
if (responseValue.isObject() != null) {
EntiteGeographiqueObservation infos;
Double lng = 0.0;
Double lat = 0.0;
JSONObject objectRetour = responseValue.isObject();
String nomLocalite = Util.getValeurJsonOuVide(objectRetour, "nom");
String idLocalite = Util.getValeurJsonOuVide(objectRetour, "code_zone");
lat = Util.jsonNonNull(objectRetour,"lat") ? objectRetour.get("lat").isNumber().doubleValue(): 0.0;
lng = Util.jsonNonNull(objectRetour,"lng") ? objectRetour.get("lng").isNumber().doubleValue(): 0.0;
String pays = Util.getValeurJsonOuVide(objectRetour, "code_pays");
infos = new EntiteGeographiqueObservation(idLocalite, nomLocalite, null, null);
infos.setLat(""+lat);
infos.setLon(""+lng);
infos.setPays(pays);
r.rafraichir(infos, false);
} else {
EntiteGeographiqueObservation infos;
String idLocalite = "";
String nomLocalite = "";
 
infos = new EntiteGeographiqueObservation(idLocalite, nomLocalite, null, null);
infos.setLat("");
infos.setLon("");
r.rafraichir(infos, false);
}
}
}
});
} catch (RequestException e) {
Window.alert(e.getMessage());
}
}
public static void annulerRequeteEnCours() {
if(requeteEnCours != null) {
requeteEnCours.cancel();
requeteEnCours = null;
}
}
}
/trunk/src/org/tela_botanica/client/modeles/objets/ReferentielCommune.java
File deleted
/trunk/src/org/tela_botanica/client/modeles/objets/ListeReferentielCommune.java
File deleted
/trunk/src/org/tela_botanica/client/modeles/objets/ReferentielLocalite.java
New file
0,0 → 1,41
package org.tela_botanica.client.modeles.objets;
 
/**
*
* Classe representant un element du referentiel de localites
*
*/
 
public class ReferentielLocalite {
 
private String localite = null;
private String codeLocalite = null;
private String codeInsee = null;
 
/**
* @param localite
* @param code
*/
public ReferentielLocalite(String localite, String code) {
this.localite = localite;
if(code.length() == 5) {
codeInsee = code;
codeLocalite = code.substring(0,2);
} else {
codeLocalite = code;
}
}
 
public String getLocalite() {
return localite;
}
 
public String getCodeLocalite() {
return codeLocalite;
}
 
public String getCodeInsee() {
return codeInsee;
}
}
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/trunk/src/org/tela_botanica/client/modeles/objets/ListeReferentielLocalite.java
New file
0,0 → 1,53
package org.tela_botanica.client.modeles.objets;
 
import java.util.HashMap;
 
/**
* table de hachage composée de localites, renvoyé par les objets de type DAO
* pour les localites
* TODO : utiliser un identifiant localite
* La clé est le nom de la localite + code de la localite dans la base de données, et la valeur un objet
* de type ReferentielLocalite
* @author david delon
*
*/
public class ListeReferentielLocalite extends HashMap<String, ReferentielLocalite> {
private static final long serialVersionUID = 2714510270773281540L;
/**
* Constructeur sans paramètres
*/
public ListeReferentielLocalite()
{
super();
}
/**
* Constructeur avec paramètre
* @param taille la taille de la table de hachage
*/
public ListeReferentielLocalite(int taille)
{
super(taille);
}
/**
* Constructeur avec paramètre
* @param ic un tableau d'ImageCarnet
*/
public ListeReferentielLocalite(ReferentielLocalite[] com)
{
super() ;
for (int i = 0; i < com.length; i++)
{
if(com[i] != null && com[i] instanceof ReferentielLocalite)
{
this.put(com[i].getLocalite()+com[i].getCodeLocalite(),com[i]);
}
}
}
}
/trunk/src/org/tela_botanica/client/modeles/objets/Observation.java
34,6 → 34,7
private String certitude=null;
private String phenologie=null;
private String altitude=null;
private String pays=null;
private Map<String, ChampEtendu> champsEtendus=null;
 
60,7 → 61,7
* @param date
* @param numeroOrdre
*/
public Observation(String transmis, String nomSaisi, String nomRetenu, String numeroNomenclaturalSaisi, String numeroNomenclaturalRetenu, String numeroTaxonomique, String famille, String localite, String identifiantLocalite, String lieudit, String station, String milieu, String commentaire, String date, String numeroOrdre) {
public Observation(String transmis, String nomSaisi, String nomRetenu, String numeroNomenclaturalSaisi, String numeroNomenclaturalRetenu, String numeroTaxonomique, String famille, String localite, String identifiantLocalite, String lieudit, String station, String milieu, String commentaire, String date, String numeroOrdre, String pays) {
this.transmis = transmis;
this.nomSaisi = nomSaisi;
93,6 → 94,7
public Observation(JSONObject observation) {
this.transmis = Util.getValeurJsonOuVide(observation, "transmission");
this.pays = Util.getValeurJsonOuVide(observation, "pays");
this.identifiantLocalite = Util.getValeurJsonOuVide(observation, "ce_zone_geo");
this.nomSaisi = Util.getValeurJsonOuVide(observation, "nom_sel");
this.nomRetenu = (Util.getValeurJsonOuVide(observation,"nom_ret"));
202,6 → 204,14
}
return identifiantLocalite;
}
public String getPays() {
return pays;
}
public void setPays(String pays) {
this.pays = pays;
}
 
public String getMilieu() {