Subversion Repositories eFlore/Applications.del

Rev

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

package org.tela_botanica.del.client.composants.metadonnees;

import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.detailsimage.EvenementRechercheImage;
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.EvenementRechercheObservation;
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat;

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.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
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 MetadonneesPresenteur extends Presenteur {

        public abstract interface Vue extends IsWidget {
                public HasText getNomRetenu();

                public HasClickHandlers getLienNomRetenu();

                public HasText getNomCommun();

                public HasText getFamille();

                public HasText getLocalite();

                public HasText getLieuDit();

                public HasText getMilieu();

                public HasText getCommentaire();

                public HasText getAuteur();
                
                public HasText getCourrielAuteur();
                
                public void setCourrielAuteurHref(String courriel);
                
                public HasText getDateTransmission();

                public HasText getMotsClefs();

                public HasText getNumNomenclatural();

                public HasText getDateReleve();
                
                public HasText getPays();

                public HasClickHandlers getLienFamille();

                public HasClickHandlers getLienAuteur();
                
                public HasClickHandlers getLienCourrielAuteur();

                public HasClickHandlers getLienDateTransmission();

                public HasClickHandlers getLienDateReleve();
                
                public HasClickHandlers getLienPays();
                
                public HasClickHandlers getLienLocalite();

                public HasClickHandlers getLienMotsClefs();

                public HasClickHandlers getLienNumNomenclatural();

                public HasClickHandlers getLienNomCommun();

                public HasClickHandlers getLienMilieu();

                public HasClickHandlers getLienCommentaire();
                
                public void setStation(String station) ;
                
                public void masquerChampsVides();
                
                public void activerLiens();
                
                public void activerLienAuteur();
                
                public void activerLienNomRetenu();
                
                public void setLienIdentiplante(String id);

                void desactiverLienAuteur();

                public HasText getReferentiel();
                
                public void afficherCourrielAuteur();
                
                public void cacherCourrielAuteur();
        }

        private Vue vue;
        private Observation observation;
        private ModeRecherche modeRecherche;
        private boolean avecLiens;
        
        public MetadonneesPresenteur(Vue vue, Observation observation, ModeRecherche modeRecherche, boolean avecLiens) {
                this.vue = vue;
                this.modeRecherche = modeRecherche;
                setObservation(observation);
                this.avecLiens = avecLiens;
        }

        public void setObservation(Observation observation) {
                this.observation = observation;
        }

        public void chargerMetaDonnees() {
                vue.getNomRetenu().setText(observation.getNomRetenu());
                vue.getNomCommun().setText(observation.getNomCommun());
                vue.getReferentiel().setText(observation.getReferentiel());
                vue.getFamille().setText(observation.getFamille());
                if(CacheClient.getInstance().getListePays() != null) {
                        vue.getPays().setText(CacheClient.getInstance().getListePays().get(observation.getPays()));
                } else {
                        vue.getPays().setText(observation.getPays());
                }

                vue.getLocalite().setText(observation.getLocaliteAvecIdFormatee());
                vue.getLieuDit().setText(observation.getLieuDit());
                vue.setStation(observation.getStation());
                vue.getMilieu().setText(observation.getMilieu());
                vue.getCommentaire().setText(observation.getCommentaire());
                vue.getAuteur().setText(observation.getAuteur());
                vue.getDateTransmission().setText(formaterDate(observation.getDateTransmission()));
                vue.getDateReleve().setText(formaterDate(observation.getDateReleve()));
                gererAffichageCourrielAuteur();
                
                // ATTENTION : Masquer champs vide doit se faire en dernier !
                vue.masquerChampsVides();
        }

        public String formaterDate(String dateNonFormatee) {
                try {
                        String dateFormatee = DateTimeFormat.getFormat("dd/MM/yyyy").format(UtilitairesServiceResultat.parserDateObservation(dateNonFormatee));
                        dateFormatee = (dateFormatee == "01/01/1970") ? "???" : dateFormatee ;
                        return dateFormatee;
                } catch (IllegalArgumentException e) {
                        return "";
                }
        }
        
        @Override
        public void go(HasWidgets composite) {
                composite.add(vue.asWidget());
                chargerMetaDonnees();
                gererEvenements();
        }

        @Override
        protected void gererEvenements() {
                if (this.avecLiens) {
                        if (!observation.getIdAuteur().equals("0")) {
                                vue.getLienAuteur().addClickHandler(new ClickHandler() {
                                        @Override
                                        public void onClick(ClickEvent arg0) {
                                                InformationsRecherche informationsRecherche = new InformationsRecherche();
                                                informationsRecherche.setAuteur(vue.getAuteur().getText());
                                                setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                                History.fireCurrentHistoryState();
                                        }
                                });
                        }
                
                        vue.getLienDateReleve().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent arg0) {
                                        InformationsRecherche informationsRecherche = new InformationsRecherche();
                                        informationsRecherche.setDate(vue.getDateReleve().getText());
                                        setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                        History.fireCurrentHistoryState();
                                }
                        });
        
                        vue.getLienDateTransmission().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent arg0) {
                                        InformationsRecherche informationsRecherche = new InformationsRecherche();
                                        informationsRecherche.setDate(vue.getDateReleve().getText());
                                        setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                        History.fireCurrentHistoryState();
                                }
                        });
        
                        vue.getLienFamille().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent arg0) {
                                        InformationsRecherche informationsRecherche = new InformationsRecherche();
                                        informationsRecherche.setFamille(vue.getFamille().getText());
                                        setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                        History.fireCurrentHistoryState();
                                }
                        });
        
                        vue.getLienLocalite().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent arg0) {
                                        InformationsRecherche informationsRecherche = new InformationsRecherche();
                                        informationsRecherche.setCommune(vue.getLocalite().getText());
                                        setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                        History.fireCurrentHistoryState();
                                }
                        });
                        
                        vue.getLienPays().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent arg0) {
                                        InformationsRecherche informationsRecherche = new InformationsRecherche();
                                        if(CacheClient.getInstance().getListePaysInversee() != null) {
                                                informationsRecherche.setPays(CacheClient.getInstance().getListePaysInversee().get(vue.getPays().getText()));
                                        } else {
                                                informationsRecherche.setPays(vue.getPays().getText());
                                        }
                                        setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                        History.fireCurrentHistoryState();
                                }
                        });
        
                        vue.getLienMotsClefs().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent arg0) {
                                        InformationsRecherche informationsRecherche = new InformationsRecherche();
                                        informationsRecherche.setMotClef(vue.getMotsClefs().getText());
                                        setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                        History.fireCurrentHistoryState();
                                }
                        });
        
                        vue.getLienNomCommun().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent arg0) {
                                        InformationsRecherche informationsRecherche = new InformationsRecherche();
                                        informationsRecherche.setRechercheLibre(vue.getNomCommun().getText());
                                        setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                        History.fireCurrentHistoryState();
                                }
                        });
        
                        vue.getLienNomRetenu().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent arg0) {
                                        InformationsRecherche informationsRecherche = new InformationsRecherche();
                                        informationsRecherche.setRechercheLibre(vue.getNomRetenu().getText());
                                        setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                        History.fireCurrentHistoryState();
                                }
                        });
        
                        vue.getLienMilieu().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent arg0) {
                                        InformationsRecherche informationsRecherche = new InformationsRecherche();
                                        informationsRecherche.setRechercheLibre(vue.getMilieu().getText());
                                        setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                        History.fireCurrentHistoryState();
                                }
                        });
        
                        vue.getLienCommentaire().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent arg0) {
                                        InformationsRecherche informationsRecherche = new InformationsRecherche();
                                        informationsRecherche.setRechercheLibre(vue.getCommentaire().getText());
                                        setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche);
                                        History.fireCurrentHistoryState();
                                }
                        });

                        vue.setLienIdentiplante(this.observation.getId());
                        vue.activerLiens();
                        
                        if (observation.getIdAuteur().equals("0")) {
                                vue.desactiverLienAuteur();
                        }
                } else {
                        if (! observation.getIdAuteur().equals("0")) {
                                vue.getLienAuteur().addClickHandler(new ClickHandler() {
                                        @Override
                                        public void onClick(ClickEvent event) {
                                                Config config = new Config();
                                                Window.open(config.getUrl("profil") + observation.getIdAuteur(), "Consultation de l'annuaire", config.getInfo("popupOptions"));
                                        }
                                });
                                
                                vue.activerLienAuteur();
                        }

                        if (observation.getNumNomenclatural() != null && ! observation.getNumNomenclatural().equals("0") && ! observation.getNumNomenclatural().equals("")) {
                                vue.activerLienNomRetenu();
                                vue.getLienNomRetenu().addClickHandler(new ClickHandler() {
                                        @Override
                                        public void onClick(ClickEvent arg0) {
                                                Config config = new Config();
                                                String efloreUrlFicheTpl = config.getUrl("efloreTaxon");
                                                String efloreUrlFiche = efloreUrlFicheTpl.replaceAll("referentiel-nn-num_nom", observation.getReferentiel()+"-nn-"+observation.getNumNomenclatural());
                                                Window.open(efloreUrlFiche, "Fiche eflore", config.getInfo("popupOptions"));
                                        }
                                });
                        }
                }
                
                BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
                        @Override
                        public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
                                gererAffichageCourrielAuteur();
                        }
                });
        }
        
        public void gererAffichageCourrielAuteur() {
                GWT.log("Auteur courrriel :"+observation.getCourrielAuteur());
                Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
                if (utilisateur.etreAdmin()) {
                        vue.getCourrielAuteur().setText(observation.getCourrielAuteur());
                        vue.setCourrielAuteurHref(observation.getCourrielAuteur());
                        vue.afficherCourrielAuteur();
                } else {
                        vue.getCourrielAuteur().setText("");
                        vue.setCourrielAuteurHref("");
                        vue.cacherCourrielAuteur();
                }
        }

        public void setInfosRechercheEnCacheEtLancerEvenement(InformationsRecherche informationsRecherche) {
                switch (modeRecherche) {
                        case MODE_IMAGE:
                                CacheClient.getInstance().setPageCouranteRechercheImages(1);
                                CacheClient.getInstance().setInformationsRechercheImage(informationsRecherche);
                                BusEvenementiel.getInstance().fireEvent(new EvenementRechercheImage());
                                break;
                        case MODE_OBSERVATION:
                                CacheClient.getInstance().setPageCouranteRechercheObservations(1);
                                CacheClient.getInstance().setInformationsRechercheObservation(informationsRecherche);
                                BusEvenementiel.getInstance().fireEvent(new EvenementRechercheObservation());
                        default:
                                break;
                }
        }
}