Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 391 → Rev 392

/trunk/src/org/tela_botanica/del/client/vues/rechercheobservations/RechercheObservationsVue.ui.xml
11,6 → 11,9
</g:HTMLPanel>
<g:HTMLPanel>
<g:VerticalPanel ui:field="zonePaginationHaut" />
<g:VerticalPanel ui:field="panneauChargement" >
<g:Image url="./img/wait.gif"></g:Image>
</g:VerticalPanel>
<g:HTMLPanel ui:field="zoneObservations" styleName="{style.zoneObservation}"/>
<g:VerticalPanel ui:field="zonePaginationBas" />
</g:HTMLPanel>
/trunk/src/org/tela_botanica/del/client/vues/rechercheobservations/RechercheObservationsPresenteur.java
9,7 → 9,8
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.utils.MockDatasource;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
16,6 → 17,8
import com.google.gwt.user.client.ui.RootPanel;
 
public class RechercheObservationsPresenteur extends Presenteur {
private ObservationService serviceObs;
 
public abstract interface Vue extends IsWidget {
public HasWidgets getZoneRecherche();
22,13 → 25,23
public HasWidgets getZoneObservations();
public HasWidgets getZonePaginationHaut();
public HasWidgets getZonePaginationBas();
public void startChargement();
public void stopChargement();
public void nettoyer();
}
 
private Vue vue;
private PaginationPresenteur paginationHautPresenteur, paginationBasPresenteur;
public RechercheObservationsPresenteur(Vue vue) {
/**
* Ceci sert à éviter que les deux présenteurs paginations fassent deux requêtes par changement de page
* En attendant d'en discuter avec les autres
*/
private boolean requeteEnCours = false;
public RechercheObservationsPresenteur(ObservationService serviceObs, Vue vue) {
this.vue = vue;
this.serviceObs = serviceObs;
}
 
public void go(HasWidgets composite) {
38,9 → 51,16
composite.add(vue.asWidget());
ajouterMoteurRechercheAvancee();
 
ObservationServiceResultat observationServiceResultat = MockDatasource.getInstance().getObservations(CacheClient.getInstance().getInformationsRechercheObservation(), 0, CacheClient.getInstance().getPasPagination());
creerWidgetPagination(observationServiceResultat.getNbTotalObservationsPourLaRecherche());
afficherObservations(observationServiceResultat);
ObservationsCallback callback = new ObservationsCallback() {
@Override
public void surObservationsRecues(
ObservationServiceResultat observationsRecues) {
creerWidgetPagination(observationsRecues.getNbTotalObservationsPourLaRecherche());
afficherObservations(observationsRecues);
}
};
serviceObs.getObservations(CacheClient.getInstance().getInformationsRechercheObservation(), 0, CacheClient.getInstance().getPasPagination(),callback);
}
 
protected void ajouterMoteurRechercheAvancee() {
59,16 → 79,27
}
 
public void chargerEtAfficherObservations(int debut, int fin) {
ObservationServiceResultat observationServiceResultat = MockDatasource.getInstance().getObservations(CacheClient.getInstance().getInformationsRechercheObservation(), debut, fin);
afficherObservations(observationServiceResultat);
vue.startChargement();
vue.nettoyer();
ObservationsCallback callback = new ObservationsCallback() {
@Override
public void surObservationsRecues(ObservationServiceResultat observationsRecues) {
afficherObservations(observationsRecues);
requeteEnCours = false;
}
};
requeteEnCours = true;
serviceObs.getObservations(CacheClient.getInstance().getInformationsRechercheObservation(), debut, fin, callback);
}
 
private void afficherObservations(ObservationServiceResultat observationServiceResultat) {
vue.getZoneObservations().clear();
vue.nettoyer();
for (Observation observation : observationServiceResultat.getObservations()) {
ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation);
presenteur.go(vue.getZoneObservations());
}
vue.stopChargement();
}
 
private void creerWidgetPagination(int nbObservations) {
99,8 → 130,10
 
@Override
public void changerPage(int debut, int fin) {
chargerEtAfficherObservations(debut, fin);
CacheClient.getInstance().setPageCouranteRechercheObservations(getPageCourante());
if(!requeteEnCours) {
chargerEtAfficherObservations(debut, fin);
CacheClient.getInstance().setPageCouranteRechercheObservations(getPageCourante());
}
}
 
@Override
/trunk/src/org/tela_botanica/del/client/vues/rechercheobservations/RechercheObservationsVue.java
10,6 → 10,9
 
public class RechercheObservationsVue extends Composite implements RechercheObservationsPresenteur.Vue {
 
@UiField
Panel panneauChargement;
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, RechercheObservationsVue> {
}
41,5 → 44,23
public HasWidgets getZonePaginationBas() {
return zonePaginationBas;
}
/**
* Nettoie et remet à zéro les composants du panneau qui doivent l'être
* */
@Override
public void nettoyer() {
zoneObservations.clear();
}
 
@Override
public void startChargement() {
panneauChargement.setHeight(zoneObservations.getOffsetHeight()+"px");
panneauChargement.setVisible(true);
}
 
@Override
public void stopChargement() {
panneauChargement.setVisible(false);
}
}
/trunk/src/org/tela_botanica/del/client/services/rest/ObservationServiceConcret.java
New file
0,0 → 1,35
package org.tela_botanica.del.client.services.rest;
 
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
 
import com.google.gwt.http.client.RequestBuilder;
 
public class ObservationServiceConcret implements ObservationService {
private String serverUrl = "../jrest/";
 
@Override
public ObservationServiceResultat getObservations(
InformationsRecherche infos, int debut, int fin, ObservationsCallback callback) {
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, serverUrl+"Observations"+assemblerChaineRequete(infos, debut, fin));
try {
rb.sendRequest(null, callback);
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
private String assemblerChaineRequete(InformationsRecherche infos, int debut, int fin) {
String chaineRequete = "?debut="+debut+"&limite="+(fin-debut);
if(infos != null && infos.getTaxon() != null && !infos.getTaxon().trim().isEmpty()) {
chaineRequete = "nom_taxon="+infos.getTaxon()+chaineRequete;
}
return chaineRequete;
}
 
}
/trunk/src/org/tela_botanica/del/client/services/rest/ObservationService.java
2,9 → 2,10
 
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
 
public interface ObservationService {
 
public ObservationServiceResultat getObservations(InformationsRecherche informationsRecherche, int debut, int fin);
public ObservationServiceResultat getObservations(InformationsRecherche informationsRecherche, int debut, int fin, ObservationsCallback callback);
 
}
/trunk/src/org/tela_botanica/del/client/services/rest/async/ObservationsCallback.java
New file
0,0 → 1,35
package org.tela_botanica.del.client.services.rest.async;
 
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
 
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.user.client.Window;
 
public abstract class ObservationsCallback implements RequestCallback {
 
public ObservationsCallback() {
 
}
 
@Override
public void onResponseReceived(Request request, Response response) {
ObservationServiceResultat observationsRecues = convertirReponseVersListeObservation(response);
surObservationsRecues(observationsRecues);
}
 
@Override
public void onError(Request request, Throwable exception) {
Window.alert(exception.getMessage());
}
 
public abstract void surObservationsRecues(ObservationServiceResultat observationsRecues);
 
private ObservationServiceResultat convertirReponseVersListeObservation(Response reponse) {
ObservationServiceResultat resultat = new ObservationServiceResultat(JSONParser.parseStrict(reponse.getText()));
return resultat;
}
 
}
/trunk/src/org/tela_botanica/del/client/gestionhistorique/GestionnaireHistorique.java
1,6 → 1,7
package org.tela_botanica.del.client.gestionhistorique;
 
import org.tela_botanica.del.client.services.rest.ImageServiceConcret;
import org.tela_botanica.del.client.services.rest.ObservationServiceConcret;
import org.tela_botanica.del.client.utils.MockDatasource;
import org.tela_botanica.del.client.vues.comparaisoneflore.ComparaisonEflorePresenteur;
import org.tela_botanica.del.client.vues.comparaisoneflore.ComparaisonEfloreVue;
42,7 → 43,7
new ComparaisonEflorePresenteur(new ComparaisonEfloreVue(), MockDatasource.getInstance(), new ImageServiceConcret()).go(RootPanel.get("contenu"));
} else if (event.getValue().equals(ConstantesNavigation.PAGE_RECHERCHE_OBSERVATIONS)) {
RootPanel.get("contenu").clear();
RechercheObservationsPresenteur presenteur = new RechercheObservationsPresenteur(new RechercheObservationsVue());
RechercheObservationsPresenteur presenteur = new RechercheObservationsPresenteur(new ObservationServiceConcret(), new RechercheObservationsVue());
presenteur.go(RootPanel.get("contenu"));
}
}
/trunk/src/org/tela_botanica/del/client/modeles/ObservationServiceResultat.java
1,7 → 1,14
package org.tela_botanica.del.client.modeles;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONValue;
 
public class ObservationServiceResultat {
private List<Observation> observations;
8,6 → 15,59
private int nbTotalObservationsPourLaRecherche;
 
public ObservationServiceResultat(JSONValue retourJson) {
//TODO ajouter vérifications plus précises
double total = retourJson.isObject().get("total").isNumber().doubleValue();
nbTotalObservationsPourLaRecherche = (int) total;
JSONArray tableauObs = retourJson.isObject().get("contenu").isArray();
observations = new ArrayList<Observation>();
int nbResultats = tableauObs.size();
for (int i = 0; i < nbResultats; i++) {
JSONObject observationJson = tableauObs.get(i).isObject();
Observation observation = new Observation();
observation.setAuteur(observationJson.get("prenom_utilisateur").isString().stringValue()+
" "+observationJson.get("nom_utilisateur").isString().stringValue());
observation.setDate(observationJson.get("date_observation").isString().stringValue());
observation.setFamille(observationJson.get("famille").isString().stringValue());
observation.setId(observationJson.get("id_observation").isString().stringValue());
observation.setLocalite(observationJson.get("ce_zone_geo").isString().stringValue());
observation.setNomRetenu(observationJson.get("nom_ret").isString().stringValue());
observation.setNumNomenclatural(observationJson.get("nom_ret_nn").isString().stringValue());
observation.setMotsClefs(parserMotsCles(observationJson.get("mots_cles_texte").isString().stringValue()));
PropositionDetermination propositionDetermination = new PropositionDetermination();
propositionDetermination.setContributeur(observationJson.get("prenom_utilisateur").isString().stringValue()+
" "+observationJson.get("nom_utilisateur").isString().stringValue());
java.util.Date datePropDeter = parserDateObservation(observationJson.get("date_observation").isString().stringValue());
propositionDetermination.setDate(datePropDeter);
propositionDetermination.setEspece(observationJson.get("nom_ret").isString().stringValue());
observation.addImageCelValidationData(propositionDetermination);
JSONArray tableauImagesObs = observationJson.get("images").isArray();
List<Image> imagesPourObs = new ArrayList<Image>();
int nbImages = tableauImagesObs.size();
for (int j = 0; j < nbImages; j++) {
JSONObject imageJson = tableauImagesObs.get(j).isObject();
Image image = new Image();
String idImage = "1"+imageJson.get("id_image").isString().stringValue();
image.setIdImage(idImage);
image.setUrlFormat("http://www.tela-botanica.org/appli:cel-img:"+getIdAvecPadding(idImage)+"%s%.jpg");
image.setUrl("http://www.tela-botanica.org/appli:cel-img:"+getIdAvecPadding(idImage)+"CRS.jpg");
image.setMiniature("http://www.tela-botanica.org/appli:cel-img:"+getIdAvecPadding(idImage)+"XS.jpg");
image.setObservation(observation);
imagesPourObs.add(image);
}
observation.setImages(imagesPourObs);
observations.add(observation);
}
}
 
public List<Observation> getObservations() {
return observations;
}
23,6 → 83,38
public void setNbTotalObservationsPourLaRecherche(int nbTotalObservationsPourLaRecherche) {
this.nbTotalObservationsPourLaRecherche = nbTotalObservationsPourLaRecherche;
}
private String getIdAvecPadding(String id) {
 
int maxZeros = 9 - id.length();
 
for (int i = 0; i < maxZeros; i++) {
id = "0" + id;
}
return id;
}
private Date parserDateObservation(String date) {
Date dateParsee = new Date();
DateTimeFormat formatDateObs = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss");
try{
dateParsee = formatDateObs.parse(date);
} catch (IllegalArgumentException e) {
dateParsee = new java.sql.Date(0);
}
return dateParsee;
}
private List<String> parserMotsCles(String motsClesTexte) {
String[] tabMotsCle = motsClesTexte.split(",");
List<String> motsClesParses = new ArrayList<String>();
for (int i = 0; i < tabMotsCle.length; i++) {
motsClesParses.add(tabMotsCle[i]);
}
return motsClesParses;
}
 
}
/trunk/src/org/tela_botanica/del/client/utils/MockDatasource.java
23,6 → 23,7
import org.tela_botanica.del.client.services.rest.ProtocoleService;
import org.tela_botanica.del.client.services.rest.VoteProtocoleService;
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
 
public class MockDatasource implements ObservationService, ImageService, ProtocoleService, VoteProtocoleService, PropositionDeterminationService {
 
236,35 → 237,6
/*
* (non-Javadoc)
*
* @see
* org.tela_botanica.del.client.utils.ObservationService#getObservations
* (java.util.HashMap)
*/
@Override
public ObservationServiceResultat getObservations(InformationsRecherche informationsRecherche, int debut, int fin) {
 
ObservationServiceResultat resultat = new ObservationServiceResultat();
resultat.setNbTotalObservationsPourLaRecherche(observations.size());
resultat.setObservations(getObservations(debut, fin));
return resultat;
 
// if (informationsRecherche == null) {
// return getObservations(debut, fin);
// } else {
// int nbResultats = fin - debut;
// List<Observation> resultatRecherche = new ArrayList<Observation>();
// for (int i = 0; i < nbResultats; i++) {
// int numeroResultat = (int) Math.round(Math.random() *
// (observations.size() - 1));
// resultatRecherche.add(observations.get(numeroResultat));
// }
// return resultatRecherche;
// }
}
 
/*
* (non-Javadoc)
*
* @see org.tela_botanica.del.client.utils.ObservationService#getImages()
*/
public List<Image> getImages(int debut, int fin) {
439,4 → 411,12
 
}
 
@Override
public ObservationServiceResultat getObservations(
InformationsRecherche informationsRecherche, int debut, int fin,
ObservationsCallback callback) {
// TODO Auto-generated method stub
return null;
}
 
}