Subversion Repositories eFlore/Applications.del

Rev

Rev 2067 | Blame | Compare with Previous | Last modification | View Log | RSS feed

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

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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.EvenementObs;
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.utils.StringUtils;
import org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations.ObservationDeterminationPresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations.ObservationDeterminationVue;

import com.gargoylesoftware.htmlunit.html.Util;
import com.google.gwt.core.shared.GWT;
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.Window;
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 void setNbCommentaires(String nbCommentaires);
                
                public HasClickHandlers getBoutonAjoutCommentaire();
                public HasClickHandlers getBoutonPlusDeDetails();

                public void afficherEvenementsObservation(String evenementsObs);

                public void cacherEvenementsObservation();

                public void mettreEnValeurEvenementsObs();
        }

        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).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());
                vue.setNbCommentaires(observation.getNbCommentaires());
                gererAffichageEvenementsObs();
                gererEvenements();
        }

        private void gererAffichageEvenementsObs() {
                if(!observation.getEvenementsAssocies().isEmpty()) {                    
                        List<EvenementObs> evts = observation.getEvenementsAssocies();
                        StringBuilder stb = new StringBuilder();
                        stb.append("<ul class=\"listeEvenementsObs\">");
                        for (Iterator<EvenementObs> iterator = evts.iterator(); iterator.hasNext();) {
                                        EvenementObs evt = iterator.next();
                                        stb.append("<li>");
                                        stb.append(StringUtils.getCorrespondanceChaineEvenementObs(evt.getType()));
                                        if(!evt.getInfosComplementaires().isEmpty()) {
                                                String infos = StringUtils.ellipsize(evt.getInfosComplementaires(), 50, 10);
                                                String classeEvt = StringUtils.getClasseEvenementObs(evt.getType());
                                                stb.append("&nbsp;<span class=\"evtObsinfosComplementaires "+classeEvt+"\">"+infos+"</span>");
                                        }
                                        stb.append("</li>");
                        }
                        stb.append("</ul>");
                        vue.afficherEvenementsObservation(stb.toString());
                } else {
                        vue.cacherEvenementsObservation();
                }
        }

        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());
        }

        public void mettreEnValeurEvenementsObs() {
                vue.mettreEnValeurEvenementsObs();
        }
}