Subversion Repositories eFlore/Applications.del

Rev

Rev 489 | Blame | Last modification | View Log | RSS feed

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

import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
import org.tela_botanica.del.client.composants.pagination.PaginationVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ModeTri;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
import org.tela_botanica.del.client.vues.rechercheobservations.resultats.observations.ObservationPresenteur;
import org.tela_botanica.del.client.vues.rechercheobservations.resultats.observations.ObservationVue;

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 ResultatsRechercheObservationsPresenteur extends Presenteur {

        private ObservationService serviceObs;

        public abstract interface Vue extends IsWidget {

                public HasWidgets getZoneObservations();

                public HasWidgets getZonePaginationHaut();

                public HasWidgets getZonePaginationBas();

                public void startChargement();

                public void stopChargement();

                public void nettoyer();

                public HasClickHandlers getTriParNbVotesAscendant();

                public HasClickHandlers getTriParNbVotesDescendant();

                public HasClickHandlers getTriParDateAscendant();

                public HasClickHandlers getTriParDateDescendant();
        }

        private Vue vue;

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

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

        protected void gererEvenements() {

                vue.getTriParNbVotesAscendant().addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent arg0) {
                                InformationsRecherche informationsRechercheObservations = CacheClient.getInstance().getInformationsRechercheObservation();
                                informationsRechercheObservations.setTriParNbVotes(ModeTri.TRI_ASCENDANT);
                                informationsRechercheObservations.setTriParDate(ModeTri.PAS_DE_TRI);
                                chercherEtAfficherObservationsPageEnCours();
                        }
                });

                vue.getTriParNbVotesDescendant().addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent arg0) {
                                InformationsRecherche informationsRechercheObservations = CacheClient.getInstance().getInformationsRechercheObservation();
                                informationsRechercheObservations.setTriParNbVotes(ModeTri.TRI_DESCENDANT);
                                informationsRechercheObservations.setTriParDate(ModeTri.PAS_DE_TRI);
                                chercherEtAfficherObservationsPageEnCours();
                        }
                });

                vue.getTriParDateAscendant().addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent arg0) {
                                InformationsRecherche informationsRechercheObservations = CacheClient.getInstance().getInformationsRechercheObservation();
                                informationsRechercheObservations.setTriParDate(ModeTri.TRI_ASCENDANT);
                                informationsRechercheObservations.setTriParNbVotes(ModeTri.PAS_DE_TRI);
                                chercherEtAfficherObservationsPageEnCours();
                        }
                });

                vue.getTriParDateDescendant().addClickHandler(new ClickHandler() {

                        @Override
                        public void onClick(ClickEvent arg0) {
                                InformationsRecherche informationsRechercheObservations = CacheClient.getInstance().getInformationsRechercheObservation();
                                informationsRechercheObservations.setTriParDate(ModeTri.TRI_DESCENDANT);
                                informationsRechercheObservations.setTriParNbVotes(ModeTri.PAS_DE_TRI);
                                chercherEtAfficherObservationsPageEnCours();
                        }
                });
        }

        public void chargerEtAfficherObservations(int debut, int fin) {
                vue.startChargement();
                vue.nettoyer();
                ObservationsCallback callback = new ObservationsCallback() {

                        @Override
                        public void surObservationsRecues(ObservationServiceResultat observationsRecues) {
                                afficherObservations(observationsRecues);
                        }
                };
                serviceObs.getObservations(CacheClient.getInstance().getInformationsRechercheObservation(), debut, fin, callback);
        }

        private void afficherObservations(ObservationServiceResultat observationServiceResultat) {
                vue.nettoyer();
                for (Observation observation : observationServiceResultat.getObservations()) {
                        ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation);
                        presenteur.go(vue.getZoneObservations());
                }
                vue.stopChargement();
        }

        private void creerWidgetPagination(int nbObservations) {
                vue.getZonePaginationHaut().clear();
                vue.getZonePaginationBas().clear();
                PaginationPresenteur paginationPresenteurHaut = creerPresenteurPagination(nbObservations);
                PaginationPresenteur paginationPresenteurBas = creerPresenteurPagination(nbObservations);
                paginationPresenteurHaut.setGroupePagination("pagination_observations");
                paginationPresenteurBas.setGroupePagination("pagination_observations");
                paginationPresenteurHaut.go(vue.getZonePaginationHaut());
                paginationPresenteurBas.go(vue.getZonePaginationBas());
        }

        private PaginationPresenteur creerPresenteurPagination(int nbObservations) {
                PaginationPresenteur paginationPresenteurHaut = new PaginationPresenteur(new PaginationVue(), nbObservations, CacheClient.getInstance().getPasPagination(), CacheClient.getInstance().getPageCouranteRechercheObservations()) {

                        @Override
                        public void chargerElements(int debut, int fin) {
                                chargerEtAfficherObservations(debut, fin);
                                CacheClient.getInstance().setPageCouranteRechercheObservations(getPageCourante());
                        }

                        @Override
                        public void actualiserPasCache(int pas) {
                                CacheClient.getInstance().setPasPagination(pas);
                        }

                };
                return paginationPresenteurHaut;
        }

        public void lancerRechercheEtCreerWidgetPagination() {
                ObservationsCallback callback = new ObservationsCallback() {
                        @Override
                        public void surObservationsRecues(ObservationServiceResultat observationsRecues) {
                                creerWidgetPagination(observationsRecues.getNbTotalObservationsPourLaRecherche());
                                afficherObservations(observationsRecues);
                        }
                };

                int debut = (CacheClient.getInstance().getPageCouranteRechercheObservations() - 1) * CacheClient.getInstance().getPasPagination();
                int fin = (CacheClient.getInstance().getPageCouranteRechercheObservations()) * CacheClient.getInstance().getPasPagination();
                serviceObs.getObservations(CacheClient.getInstance().getInformationsRechercheObservation(), debut, fin, callback);
        }

        public void chercherEtAfficherObservationsPageEnCours() {
                int debut = (CacheClient.getInstance().getPageCouranteRechercheObservations() - 1) * CacheClient.getInstance().getPasPagination();
                int fin = (CacheClient.getInstance().getPageCouranteRechercheObservations()) * CacheClient.getInstance().getPasPagination();
                chargerEtAfficherObservations(debut, fin);
        }

}