Subversion Repositories eFlore/Applications.del

Rev

Rev 618 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

package org.tela_botanica.del.client.vues.rechercheobservations.resultats.observations;

import java.util.List;

import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesVue;
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ModeRecherche;
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.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.validationobservation.EvenementValidation;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionPresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionVue;
import org.tela_botanica.del.client.vues.rechercheobservations.resultats.observationdeterminations.ObservationDeterminationPresenteur;
import org.tela_botanica.del.client.vues.rechercheobservations.resultats.observationdeterminations.ObservationDeterminationVue;

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.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;

public class ObservationPresenteur extends Presenteur {

        public interface Vue extends IsWidget {
                public HasClickHandlers getBoutonAjoutProposition();
                public HasWidgets getDeterminationsPanel();
                public HasWidgets getImagesPanel();             
                public HasWidgets getMetadonneesPanel();
                public HasClickHandlers getLienDeterminer();
        }

        private Vue vue;

        private Observation observation;
        
        private ObservationDeterminationPresenteur observationDeterminationPresenteur;
        
        private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;

        public ObservationPresenteur(Vue vue, Observation observation) {
                this.observation = observation;
                this.vue = vue;
                chargerObservation();
        }

        public void chargerObservation() {
                new ObservationImagesPresenteur(new ObservationImagesVue(), observation).go(vue.getImagesPanel());
                new MetadonneesPresenteur(new MetadonneesVue(), observation, ModeRecherche.MODE_OBSERVATION).go(vue.getMetadonneesPanel());
                observationDeterminationPresenteur = new ObservationDeterminationPresenteur(new ObservationDeterminationVue(), observation.getPropositionDeterminations());
                observationDeterminationPresenteur.go(vue.getDeterminationsPanel());

                gererEvenements();
        }

        public void go(HasWidgets composite) {
                composite.add(vue.asWidget());
        }

        protected void gererEvenements() {
                
                BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
                        @Override
                        public void onAjoutDetermination(EvenementAjoutDetermination event) {
                                if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
                                        fenetreOverlaySimplePresenteur.fermerFenetreModale();
                                        ajouterPropositionDetermination(event.getPropositionDetermination());
                                }
                        }
                });
                
                vue.getLienDeterminer().addClickHandler(new ClickHandler() {
                        @Override
                        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));
                        }
                });

                vue.getBoutonAjoutProposition().addClickHandler(new ClickHandler() {
                        @Override
                        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);
                                }
                                CacheClient.getInstance().setObservationCourante(observation);
                                fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
                                fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue()));
                        }
                });
        }
        
        private void ajouterPropositionDetermination(PropositionDetermination propositionDetermination) {
                observationDeterminationPresenteur.setPropositions(observation.getPropositionDeterminations());
        }
}