Subversion Repositories eFlore/Applications.del

Rev

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

package org.tela_botanica.del.client.composants.votes.moyennevotes;

import java.util.Iterator;
import java.util.List;

import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.modeles.VoteProtocole;
import org.tela_botanica.del.client.services.rest.VoteProtocoleService;
import org.tela_botanica.del.client.utils.MockDatasource;

import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
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 MoyenneVotePresenteur {

        public interface Vue extends IsWidget {
                public HasClickHandlers getBoutonVoter();
                public HasClickHandlers getBoutonAnnuler();
                public HasText getNbVotes();
                public HasClickHandlers getVotes();
                public int getValeurVote();
                public void afficherBoutonVoter();
                public void afficherBoutonAnnuler();
                public void masquerBoutonVoter();
                public void masquerBoutonAnnuler();
                public void afficherNbVotes();
                public void masquerNbVotes();   
                public void reinitialiserVotes();
                public void rafraichir(int moyenneVote, int nbVotes);
                public void ajouterAuParent(HasWidgets composite);
        }
        
        private Vue vue;
        private Protocole protocole;
        private Image image;
        
        private int valeurVoteDefaut = -1;
        private int valeurVoteUtilisateur = -1;
        private int valeurVoteTotal = 0;
        
        public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue) {
                this.vue = vue;
                this.protocole = protocole;
                this.image = image;
        }

        public void go(HasWidgets composite) {
                vue.ajouterAuParent(composite);
                gererEvenements();
                rafraichirVue();
        }
        
        public void gererEvenements() {
                vue.getVotes().addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                valeurVoteUtilisateur = vue.getValeurVote();
                                vue.afficherBoutonVoter();
                                vue.afficherBoutonAnnuler();
                                vue.masquerNbVotes();
                        }
                });
                
                vue.getBoutonAnnuler().addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                valeurVoteUtilisateur = valeurVoteDefaut;
                                vue.masquerBoutonVoter();
                                vue.masquerBoutonAnnuler();
                                vue.afficherNbVotes();
                                vue.reinitialiserVotes();
                        }
                });
                
                vue.getBoutonVoter().addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                enregistrerVote();
                                vue.masquerBoutonVoter();
                                vue.masquerBoutonAnnuler();
                                vue.afficherNbVotes();
                                vue.reinitialiserVotes();
                        }
                });
        }
        
        public void setValeurVoteUtilisateur(int valeurVoteUtilisateur) {
                this.valeurVoteUtilisateur = valeurVoteUtilisateur;
        }
        
        public void enregistrerVote() {
                VoteProtocole voteProtocole  = new VoteProtocole();
                voteProtocole.setProtocole(this.protocole);
                voteProtocole.setVote(valeurVoteUtilisateur);
                voteProtocole.setContributeur(CacheClient.getInstance().getUtilisateur().getId());
                // voteProtocoleService.saveVote(idImage, voteProtocole);
                // TODO: sauver vote asynchrone
                image.ajouterVoteProtocole(voteProtocole);
                rafraichirVue();
        }
        
        public int getValeurVoteTotal() {
                return valeurVoteTotal;
        }

        public IsWidget getVue() {
                return vue;
        }
        
        private void rafraichirVue() {
                valeurVoteTotal = calculerMoyenneVotes();
                vue.rafraichir(valeurVoteTotal, image.getVotesProtocoles(protocole.getId()).size());
        }
        
        public int calculerMoyenneVotes() {
                double valeurVote = 0;
                int nbVote = 0;
                for (Iterator<String> iterator = image.getVotesProtocoles(protocole.getId()).keySet().iterator(); iterator.hasNext();) {
                        VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(iterator.next());
                        valeurVote += (double)imageCelValidationData.getVote()/5;
                        nbVote++;
                }
                
                if (nbVote > 0) {
                        valeurVote /= nbVote;
                        valeurVote *= 5;
                }

                return (int)Math.round(valeurVote);
        }
}