Rev 361 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.del.client.vues.rechercheobservations;
import java.util.Iterator;
import java.util.List;
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.validationobservation.EvenementValidation;
import org.tela_botanica.del.client.vues.rechercheobservations.detail.DetailVoteObservationPresenteur;
import org.tela_botanica.del.client.vues.rechercheobservations.detail.DetailVoteObservationVue;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
public class ObservationPresenteur extends Presenteur {
public abstract interface Vue extends IsWidget {
public void ajouterPhoto(String url, String titre, String alText, ClickHandler GestionnaireClic);
public HasText getAuteur();
public HasText getDate();
public HasText getFamille();
public HasText getLocalite();
public HasText getMotsClefs();
public HasText getNomRetenu();
public HasText getNumNomenclatural();
public HasClickHandlers getPhotoPrincipale();
public HasWidgets getPhotos();
public void setUrlImagePrincipale(String url);
public void setTitreImagePrincipale(String titre);
public void setAltTextImagePrincipale(String altText);
public String getUrlImagePrincipale();
public String getTitreImagePrincipale();
public String getAltTextImagePrincipale();
public void setTexteTableau(int ligne, int colonne, String texte);
public void setElementTableau(int ligne, int colonne, IsWidget element);
public HasClickHandlers getLienDeterminer();
}
private Vue vue;
private Observation observation;
public ObservationPresenteur(Vue vue, Observation observation) {
this.observation = observation;
this.vue = vue;
chargerObservation();
}
public void chargerObservation() {
HasText auteur = vue.getAuteur();
auteur.setText(observation.getAuteur());
vue.getDate().setText(observation.getDate());
vue.getFamille().setText(observation.getFamille());
vue.getLocalite().setText(observation.getLocalite());
List<String> motsCles = observation.getMotsClefs();
Iterator<String> itMotsCles = motsCles.iterator();
String motsClesChaine = "";
while (itMotsCles.hasNext()) {
String motCle = itMotsCles.next();
motsClesChaine += motCle;
if (itMotsCles.hasNext()) {
motsClesChaine += ", ";
}
}
vue.getMotsClefs().setText(motsClesChaine);
vue.getNomRetenu().setText(observation.getNomRetenu());
vue.getNumNomenclatural().setText(observation.getNumNomenclatural());
List<org.tela_botanica.del.client.modeles.Image> images = observation.getImages();
if (images != null && images.size() > 0) {
org.tela_botanica.del.client.modeles.Image imagePrincipale = images.get(0);
vue.setUrlImagePrincipale(imagePrincipale.getUrl());
vue.setTitreImagePrincipale(imagePrincipale.getUrlFormat("L"));
vue.setAltTextImagePrincipale(observation.getAuteur() + " - " + observation.getNomRetenu());
images.remove(0);
}
int nbImagesAffichees = 0;
// TODO : pour résoudre le problème de l'accès aux url depuis le clickhandler, j'ai mis en final l'image courante.
// Et de fait, elle ne doit pas évoluer
for (final org.tela_botanica.del.client.modeles.Image imageCourante : images) {
nbImagesAffichees++;
if (nbImagesAffichees < 5) {
ClickHandler gestionnaireClic = new ClickHandler() {
public void onClick(ClickEvent event) {
ouvrirFenetreModale(new DetailImagePresenteur(imageCourante.getUrlFormat("L"), imageCourante.getObservation().getAuteur()+ " - " + imageCourante.getObservation().getNomRetenu(), new DetailImageVue()));
}
};
vue.ajouterPhoto(imageCourante.getUrlFormat("CRX2S"),
imageCourante.getUrlFormat("L"),
observation.getAuteur() + " - " + observation.getNomRetenu(),
gestionnaireClic);
}
}
List<PropositionDetermination> propositions = observation.getPropositionsDetermination();
int i = 0;
for (PropositionDetermination proposition : propositions) {
HTMLPanel panneau = new HTMLPanel("");
DetailVoteObservationPresenteur presenteurVote = new DetailVoteObservationPresenteur(new DetailVoteObservationVue(), proposition);
presenteurVote.go(panneau);
vue.setElementTableau(i, 0, panneau);
vue.setTexteTableau(i, 1, String.valueOf(proposition.getListeCommentaires().size()) + " " +I18n.getVocabulary().commentaires());
i++;
}
gererEvenements();
// vue.propositions.setText(ch);
}
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
}
protected void gererEvenements() {
vue.getPhotoPrincipale().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
ouvrirFenetreModale(new DetailImagePresenteur(vue.getTitreImagePrincipale(), vue.getAltTextImagePrincipale(), new DetailImageVue()));
}
});
vue.getLienDeterminer().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
List<Image> images = observation.getImages();
if (images.size() > 0) {
CacheClient.getInstance().setImageCourante(images.get(0));
} else {
CacheClient.getInstance().setImageCourante(null);
}
BusEvenementiel.getInstance().fireEvent(new EvenementValidation(observation));
}
});
}
}