Subversion Repositories eFlore/Applications.del

Rev

Rev 337 | Go to most recent revision | 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;
                for (org.tela_botanica.del.client.modeles.Image imageCourante : images) {
                        nbImagesAffichees++;
                        if (nbImagesAffichees < 5) {
                                ClickHandler gestionnaireClic = new ClickHandler() {
                                        public void onClick(ClickEvent event) {
                                                IsWidget image = (IsWidget)event.getSource();
                                                ouvrirFenetreModale(new DetailImagePresenteur(image, 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) {
                                //FIXME : faire une interface pour les images
                                IsWidget image = (IsWidget)event.getSource();
                                ouvrirFenetreModale(new DetailImagePresenteur(image, 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));
                        }
                });
        }
}