/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; |
} |
} |
/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/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/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")); |
} |
} |