Subversion Repositories eFlore/Applications.del

Rev

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

package org.tela_botanica.del.client.vues.identiplante.moteur;

import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRechercheVue;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlPresenteur;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.modeles.ActiviteUtilisateur;
import org.tela_botanica.del.client.modeles.ModeRecherche;
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.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.ObservationServiceConcret;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ActiviteUtilisateurCallback;
import org.tela_botanica.del.client.vues.identiplante.resultats.ResultatsIdentiplantePresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.ResultatsIdentiplanteVue;

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

public class MoteurIdentiplantePresenteur extends Presenteur {

        public interface Vue extends IsWidget {
                public HasWidgets getZoneRecherche();

                public HasWidgets getZoneResultats();

                public HasClickHandlers getOngletAConfirmer();
                
                public HasClickHandlers getOngletADeterminer();
                
                public HasClickHandlers getOngletTout();

                public HasClickHandlers getOngletValidees();
                
                public HasClickHandlers getOngletMonActivite();
                
                public void setOngletADeterminerActif();
                
                public void setOngletToutActif();
                
                public void setOngletAConfirmerActif();

                public void setOngletValideesActif();

                void afficherCacherOngletMonActivite(boolean afficher);

                void setOngletMonActiviteActif();

                void setOngletActif(String onglet);

                public void afficherNbEvenements(String nbEvenements);  
                
                public void cacherNbEvenements();       
        }

        private Vue vue;
        private Timer timerRequeteActiviteUtilisateur = null;

        public MoteurIdentiplantePresenteur(ObservationService serviceObs, Vue vue) {
                this.vue = vue;
        }

        public void go(HasWidgets composite) {

                composite.add(vue.asWidget());
                ajouterMoteurRechercheAvancee();
                gererEvenements();
                gererAffichageOngletMonActivite();
                gererTimerRequeteActiviteUtilisateur();
        }

        private void gererAffichageOngletMonActivite() {
                vue.afficherCacherOngletMonActivite(CacheClient.getInstance().getUtilisateur().estIdentifie());
                BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
                        @Override
                        public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
                                Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
                                vue.afficherCacherOngletMonActivite(utilisateur.estIdentifie());
                                vue.cacherNbEvenements();
                                if(!utilisateur.estIdentifie()) {
                                        activerOnglet("tous");
                                } else {
                                        if(utilisateur.getActivite().getNbEvenementsInt() > 0) {
                                                vue.afficherNbEvenements(utilisateur.getActivite().getNbEvenements());
                                                CacheClient.ajouterAuTitreOngletNavigateur(" ("+utilisateur.getActivite().getNbEvenements()+")");
                                        }
                                }
                        }
                });
        }

        protected void ajouterMoteurRechercheAvancee() {
                MoteurRecherchePresenteur presenteur = new MoteurRecherchePresenteur(new MoteurRechercheVue("") {
                }, ModeRecherche.MODE_OBSERVATION) {

                        @Override
                        public void lancerRecherche() {
                                chercherObservations();
                        }
                };
                presenteur.go(vue.getZoneRecherche());
        }

        public void chercherObservations() {
                vue.getZoneResultats().clear();
                CacheClient.getInstance().mettreAjourUrlCourante();
                new ResultatsIdentiplantePresenteur(new ObservationServiceConcret(), new ResultatsIdentiplanteVue()).go(vue.getZoneResultats());
        }

        protected void gererEvenements() {
                // Gestion du clic sur les onglets
                vue.getOngletTout().addClickHandler(new ClickHandler() {                
                        @Override
                        public void onClick(ClickEvent event) {
                                activerOnglet("tous");
                        }
                });
                
                vue.getOngletADeterminer().addClickHandler(new ClickHandler() {         
                        @Override
                        public void onClick(ClickEvent event) {
                                activerOnglet("adeterminer");
                        }
                });
                
                vue.getOngletAConfirmer().addClickHandler(new ClickHandler() {                  
                        @Override
                        public void onClick(ClickEvent event) {
                                activerOnglet("aconfirmer");
                        }
                });

                vue.getOngletValidees().addClickHandler(new ClickHandler() {            
                        @Override
                        public void onClick(ClickEvent event) {
                                activerOnglet("validees");
                        }
                });
                
                vue.getOngletMonActivite().addClickHandler(new ClickHandler() {                 
                        @Override
                        public void onClick(ClickEvent event) { 
                                // S'il y a de nouveau évènements sur l'obs, on les affichera tous sur la même page (dans la limite de 50)
                                int nbEvents = CacheClient.getInstance().getUtilisateur().getActivite().getNbEvenementsInt();   
                                nbEvents = Math.min(nbEvents, 50);
                                if(CacheClient.getInstance().getPasPagination() < nbEvents) {
                                        CacheClient.getInstance().setPasPagination(nbEvents);
                                }
                                
                                activerOnglet("monactivite");
                                vue.cacherNbEvenements();
                                CacheClient.reinitialiserTitreOngletNavigateur();
                        }
                });
        }
        
        
        public void gererTimerRequeteActiviteUtilisateur() {
                timerRequeteActiviteUtilisateur = new Timer() {                 
                        @Override
                        public void run() {
                                Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
                                if(utilisateur.estIdentifie()) {
                                        UtilisateurServiceConcret serviceUtilisateur = new UtilisateurServiceConcret();
                                        serviceUtilisateur.obtenirActiviteUtilisateur(utilisateur.getId(), new ActiviteUtilisateurCallback() {                                  
                                                @Override
                                                public void surRetour(ActiviteUtilisateur activite) {
                                                        CacheClient.getInstance().getUtilisateur().setActivite(activite);
                                                        if(activite.getNbEvenementsInt() > 0) {
                                                                vue.afficherNbEvenements(activite.getNbEvenements());
                                                                CacheClient.ajouterAuTitreOngletNavigateur(" ("+activite.getNbEvenements()+")");
                                                        }
                                                }
                                        });
                                }
                        }
                };
                
                timerRequeteActiviteUtilisateur.scheduleRepeating(30000);
        }
        
        protected void activerOnglet(String onglet) {
                CacheClient.getInstance().setFiltreStatut(onglet);
                CacheClient.getInstance().setPageCouranteRechercheObservations(1);
                chercherObservations();
                vue.setOngletActif(onglet);
        }
}