Subversion Repositories eFlore/Applications.del

Rev

Rev 939 | Rev 966 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
638 aurelien 1
package org.tela_botanica.del.client.composants.votes.barrerepartition;
140 aurelien 2
 
186 aurelien 3
import java.util.Date;
4
 
565 aurelien 5
import org.tela_botanica.del.client.cache.CacheClient;
186 aurelien 6
import org.tela_botanica.del.client.modeles.MoyenneVote;
7
import org.tela_botanica.del.client.modeles.VoteDetermination;
248 aurelien 8
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
9
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
186 aurelien 10
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
833 aurelien 11
import org.tela_botanica.del.client.services.rest.VoteDeterminationService;
939 benjamin 12
import org.tela_botanica.del.client.services.rest.async.AjoutVoteDeterminationCallback;
140 aurelien 13
 
186 aurelien 14
import com.google.gwt.event.dom.client.ClickEvent;
15
import com.google.gwt.event.dom.client.ClickHandler;
276 aurelien 16
import com.google.gwt.event.dom.client.HasClickHandlers;
611 gduche 17
import com.google.gwt.user.client.Window;
140 aurelien 18
import com.google.gwt.user.client.ui.HasWidgets;
276 aurelien 19
import com.google.gwt.user.client.ui.IsWidget;
140 aurelien 20
 
21
public class BarreRepartitionVotePresenteur {
939 benjamin 22
 
276 aurelien 23
	public interface Vue extends IsWidget {
303 aurelien 24
		public void afficherVotes(int pourcentage, String NomTaxon);
939 benjamin 25
 
303 aurelien 26
		public HasClickHandlers getBoutonOui();
939 benjamin 27
 
303 aurelien 28
		public HasClickHandlers getBoutonNon();
939 benjamin 29
 
867 aurelien 30
		public void desactiverBoutons();
939 benjamin 31
 
867 aurelien 32
		public void activerBoutons();
939 benjamin 33
 
303 aurelien 34
		public void setVoteOuiEffectue();
939 benjamin 35
 
303 aurelien 36
		public void setVoteNonEffectue();
939 benjamin 37
 
672 gduche 38
		public void afficherVotePrisEnCompte(boolean b);
276 aurelien 39
	}
939 benjamin 40
 
276 aurelien 41
	private Vue vue;
186 aurelien 42
	private MoyenneVote moyenneVote;
939 benjamin 43
 
833 aurelien 44
	// TODO: classe conteneur qui est passé en paramètre au constructeur
959 benjamin 45
	private VoteDeterminationService voteDeterminationService;
939 benjamin 46
 
959 benjamin 47
	public BarreRepartitionVotePresenteur(Vue vue, VoteDeterminationService voteDeterminationService) {
276 aurelien 48
		this.vue = vue;
959 benjamin 49
		this.voteDeterminationService = voteDeterminationService;
227 aurelien 50
		gererEvenements();
140 aurelien 51
	}
939 benjamin 52
 
276 aurelien 53
	public void go(HasWidgets container) {
54
		container.add(vue.asWidget());
55
	}
140 aurelien 56
 
186 aurelien 57
	public void afficherVotes(MoyenneVote moyenneVote) {
58
		this.moyenneVote = moyenneVote;
611 gduche 59
		int score = moyenneVote.getScore();
939 benjamin 60
		String intitule = moyenneVote.getIntituleAssocie();
611 gduche 61
		vue.afficherVotes(score, intitule);
140 aurelien 62
	}
939 benjamin 63
 
276 aurelien 64
	public Vue getBarreRepartitionVoteVue() {
140 aurelien 65
		return vue;
66
	}
939 benjamin 67
 
276 aurelien 68
	public MoyenneVote getMoyenneVote() {
69
		return moyenneVote;
70
	}
939 benjamin 71
 
186 aurelien 72
	public void gererEvenements() {
939 benjamin 73
 
248 aurelien 74
		vue.getBoutonOui().addClickHandler(new ClickHandler() {
75
			@Override
76
			public void onClick(ClickEvent event) {
77
				voter(true);
672 gduche 78
				vue.afficherVotePrisEnCompte(true);
939 benjamin 79
			}
248 aurelien 80
		});
939 benjamin 81
 
186 aurelien 82
		vue.getBoutonNon().addClickHandler(new ClickHandler() {
83
			@Override
84
			public void onClick(ClickEvent event) {
248 aurelien 85
				voter(false);
672 gduche 86
				vue.afficherVotePrisEnCompte(false);
939 benjamin 87
			}
186 aurelien 88
		});
89
	}
939 benjamin 90
 
882 aurelien 91
	private void surVoteDetermination(final VoteDetermination vd) {
939 benjamin 92
		if (vd.getPropositionDetermination().equals(moyenneVote.getPropositionAssociee())) {
93
			AjoutVoteDeterminationCallback vdc = new AjoutVoteDeterminationCallback() {
833 aurelien 94
 
95
				@Override
939 benjamin 96
				public void surErreur(String messageErreur) {
97
					Window.alert(messageErreur);
98
					vue.activerBoutons();
99
				}
100
 
101
				@Override
102
				public void surRetour(Void objetRetour) {
882 aurelien 103
					moyenneVote.getPropositionAssociee().ajouterVoteDetermination(vd);
833 aurelien 104
					moyenneVote = CalculVoteDeterminationService.calculerVoteDetermination(moyenneVote.getPropositionAssociee());
105
					afficherVotes(moyenneVote);
867 aurelien 106
					vue.activerBoutons();
882 aurelien 107
					// l'évènement n'est lancé que si le vote est validé
108
					BusEvenementiel.getInstance().fireEvent(new EvenementVoteDetermination(vd));
833 aurelien 109
				}
939 benjamin 110
			};
833 aurelien 111
 
939 benjamin 112
			if (moyenneVote.getPropositionAssociee().utilisateurAVotePourDetermination(vd.getContributeur())) {
882 aurelien 113
				voteDeterminationService.modifierVote(vd, vdc);
842 aurelien 114
			} else {
882 aurelien 115
				voteDeterminationService.ajouterVote(vd, vdc);
833 aurelien 116
			}
939 benjamin 117
		}
833 aurelien 118
	}
939 benjamin 119
 
248 aurelien 120
	public void voter(boolean oui) {
939 benjamin 121
 
248 aurelien 122
		VoteDetermination vd = new VoteDetermination();
123
		vd.setPropositionDetermination(moyenneVote.getPropositionAssociee());
565 aurelien 124
		vd.setContributeur(CacheClient.getInstance().getUtilisateur().getId());
248 aurelien 125
		vd.setDate(new Date());
939 benjamin 126
 
248 aurelien 127
		int valeurVote = oui ? 1 : 0;
128
		vd.setVote(valeurVote);
565 aurelien 129
		vd.setId(CacheClient.getInstance().getUtilisateur().getId());
939 benjamin 130
 
131
		if (oui) {
611 gduche 132
			vue.setVoteOuiEffectue();
133
		} else {
134
			vue.setVoteNonEffectue();
135
		}
867 aurelien 136
		vue.desactiverBoutons();
882 aurelien 137
		surVoteDetermination(vd);
248 aurelien 138
	}
140 aurelien 139
}