Subversion Repositories eFlore/Applications.del

Rev

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

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

import org.tela_botanica.del.client.composants.commentaires.DetailCommentairePresenteur;
import org.tela_botanica.del.client.composants.commentaires.DetailCommentaireVue;
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.votes.details.DetailListeVotesDeterminationPresenteur;
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationVue;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;

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 LignePropositionPresenteur {

        private int nbCommentaires, nbVotes;

        public abstract interface Vue extends IsWidget {
                public HasClickHandlers getZoneNbVotes();

                public HasClickHandlers getZoneNbCommentaires();

                public void setNbVotes(int nbVotes);

                public void setNbCommentaires(int nbCommentaires);

                public void enleverLienCommentaires();

                public void enleverLienVotes();
                
                public void ajouterLienVotes();
        }

        private Vue vue;

        private PropositionDetermination propositionDetermination;

        public LignePropositionPresenteur(Vue vue,
                        PropositionDetermination propositionDetermination) {
                this.vue = vue;
                this.propositionDetermination = propositionDetermination;
        }

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

        public void chargerPropositionDetermination() {
                this.nbCommentaires = propositionDetermination.getTotalCommentaires();
                this.nbVotes = propositionDetermination.getVotesDeterminations().size();
                vue.setNbCommentaires(nbCommentaires);
                vue.setNbVotes(nbVotes);
        }

        public void gererEvenements() {
                gererEvenementsVotes();
                if (nbCommentaires > 0) {
                        vue.getZoneNbCommentaires().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent event) {
                                        if (nbCommentaires > 0) {
                                                FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(
                                                                new FenetreOverlayDefilanteVue());
                                                DetailCommentairePresenteur detailCommentairePresenteur = new DetailCommentairePresenteur(
                                                                new DetailCommentaireVue(),
                                                                new CommentaireServiceConcret(),
                                                                propositionDetermination);
                                                fenetreOverlaySimplePresenteur
                                                                .ouvrirFenetreModale(detailCommentairePresenteur);
                                                detailCommentairePresenteur.afficherCommentaires();
                                        }
                                }
                        });
                } else {
                        vue.enleverLienCommentaires();
                }
                
                BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
                        @Override
                        public void onVoteDetermination(VoteDetermination event) {
                                if(event.getPropositionDetermination() == propositionDetermination) {
                                        if(nbVotes == 0) {
                                                nbVotes++;
                                                gererEvenementsVotes();
                                        } 
                                        vue.setNbVotes(nbVotes);
                                }
                                
                        }
                });
        }

        private void gererEvenementsVotes() {
                if (nbVotes > 0) {
                        vue.getZoneNbVotes().addClickHandler(new ClickHandler() {
                                @Override
                                public void onClick(ClickEvent event) {
                                        if (nbVotes > 0) {
                                                FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(
                                                                new FenetreOverlayDefilanteVue());
                                                DetailListeVotesDeterminationPresenteur detailListeVotesDeterminationPresenteur = new DetailListeVotesDeterminationPresenteur(
                                                                new DetailListeVotesDeterminationVue());
                                                fenetreOverlaySimplePresenteur
                                                                .ouvrirFenetreModale(detailListeVotesDeterminationPresenteur);
                                                detailListeVotesDeterminationPresenteur
                                                                .afficherVotes(propositionDetermination);
                                        }
                                }
                        });
                        vue.ajouterLienVotes();
                } else {
                        vue.enleverLienVotes();
                }
        }
}