Subversion Repositories eFlore/Applications.del

Rev

Rev 1553 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.del.client.vues.identiplante.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.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
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.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
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.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
import org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations.ObservationDeterminationPresenteur;
import org.tela_botanica.del.client.vues.identiplante.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 getNomEspece();

                public void setNomEspece(String nomEspece);
                
                public HasClickHandlers getBoutonAjoutCommentaire();
                public HasClickHandlers getBoutonPlusDeDetails();
        }

        private Vue vue;

        private Observation observation;
        
        private Image imagePrincipale;

        private ObservationDeterminationPresenteur observationDeterminationPresenteur;

        private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;

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

        public void chargerObservation() {
                new ObservationImagesPresenteur(new ObservationImagesVue(), observation, imagePrincipale, ConstantesNavigation.PAGE_RECHERCHE_OBSERVATIONS).go(vue.getImagesPanel());
                new MetadonneesPresenteur(new MetadonneesVue(), observation, ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonneesPanel());
                observationDeterminationPresenteur = new ObservationDeterminationPresenteur(new ObservationDeterminationVue(), observation.getPropositionDeterminations());
                observationDeterminationPresenteur.go(vue.getDeterminationsPanel());
                vue.setNomEspece(observation.getNomRetenu());
                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.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(), new PropositionDeterminationServiceConcret()));
                        }
                });
                
                ClickHandler versDetails = new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                BusEvenementiel.getInstance().fireEvent(new EvenementValidation(observation));
                        }
                };
                vue.getNomEspece().addClickHandler(versDetails);
                vue.getBoutonPlusDeDetails().addClickHandler(versDetails);
                
                vue.getBoutonAjoutCommentaire().addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(observation, new CommentaireServiceConcret(), new FormulaireCommentaireVue());
                                fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
                                fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
                        }
                });
                
                BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {

                        @Override
                        public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
                                if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
                                        fenetreOverlaySimplePresenteur.fermerFenetreModale();
                                }
                        }
                });
        }

        private void ajouterPropositionDetermination(PropositionDetermination propositionDetermination) {
                observationDeterminationPresenteur.setPropositions(observation.getPropositionDeterminations());
        }
}