Subversion Repositories eFlore/Applications.del

Rev

Rev 966 | Rev 1005 | 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);
25
		public HasClickHandlers getBoutonOui();
26
		public HasClickHandlers getBoutonNon();
867 aurelien 27
		public void desactiverBoutons();
28
		public void activerBoutons();
303 aurelien 29
		public void setVoteOuiEffectue();
30
		public void setVoteNonEffectue();
672 gduche 31
		public void afficherVotePrisEnCompte(boolean b);
1004 benjamin 32
		public void afficherVoteModifie(boolean b);
966 gduche 33
		public void toggleNomEspece();
276 aurelien 34
	}
939 benjamin 35
 
276 aurelien 36
	private Vue vue;
186 aurelien 37
	private MoyenneVote moyenneVote;
939 benjamin 38
 
833 aurelien 39
	// TODO: classe conteneur qui est passé en paramètre au constructeur
959 benjamin 40
	private VoteDeterminationService voteDeterminationService;
939 benjamin 41
 
959 benjamin 42
	public BarreRepartitionVotePresenteur(Vue vue, VoteDeterminationService voteDeterminationService) {
276 aurelien 43
		this.vue = vue;
959 benjamin 44
		this.voteDeterminationService = voteDeterminationService;
227 aurelien 45
		gererEvenements();
140 aurelien 46
	}
939 benjamin 47
 
276 aurelien 48
	public void go(HasWidgets container) {
49
		container.add(vue.asWidget());
50
	}
140 aurelien 51
 
186 aurelien 52
	public void afficherVotes(MoyenneVote moyenneVote) {
53
		this.moyenneVote = moyenneVote;
611 gduche 54
		int score = moyenneVote.getScore();
939 benjamin 55
		String intitule = moyenneVote.getIntituleAssocie();
611 gduche 56
		vue.afficherVotes(score, intitule);
140 aurelien 57
	}
939 benjamin 58
 
276 aurelien 59
	public Vue getBarreRepartitionVoteVue() {
140 aurelien 60
		return vue;
61
	}
939 benjamin 62
 
276 aurelien 63
	public MoyenneVote getMoyenneVote() {
64
		return moyenneVote;
65
	}
939 benjamin 66
 
186 aurelien 67
	public void gererEvenements() {
939 benjamin 68
 
248 aurelien 69
		vue.getBoutonOui().addClickHandler(new ClickHandler() {
70
			@Override
71
			public void onClick(ClickEvent event) {
72
				voter(true);
1004 benjamin 73
 
939 benjamin 74
			}
248 aurelien 75
		});
939 benjamin 76
 
186 aurelien 77
		vue.getBoutonNon().addClickHandler(new ClickHandler() {
78
			@Override
79
			public void onClick(ClickEvent event) {
248 aurelien 80
				voter(false);
1004 benjamin 81
 
939 benjamin 82
			}
186 aurelien 83
		});
84
	}
939 benjamin 85
 
882 aurelien 86
	private void surVoteDetermination(final VoteDetermination vd) {
939 benjamin 87
		if (vd.getPropositionDetermination().equals(moyenneVote.getPropositionAssociee())) {
88
			AjoutVoteDeterminationCallback vdc = new AjoutVoteDeterminationCallback() {
833 aurelien 89
 
90
				@Override
939 benjamin 91
				public void surErreur(String messageErreur) {
92
					Window.alert(messageErreur);
93
					vue.activerBoutons();
94
				}
95
 
96
				@Override
97
				public void surRetour(Void objetRetour) {
882 aurelien 98
					moyenneVote.getPropositionAssociee().ajouterVoteDetermination(vd);
833 aurelien 99
					moyenneVote = CalculVoteDeterminationService.calculerVoteDetermination(moyenneVote.getPropositionAssociee());
100
					afficherVotes(moyenneVote);
867 aurelien 101
					vue.activerBoutons();
882 aurelien 102
					// l'évènement n'est lancé que si le vote est validé
103
					BusEvenementiel.getInstance().fireEvent(new EvenementVoteDetermination(vd));
833 aurelien 104
				}
939 benjamin 105
			};
833 aurelien 106
 
939 benjamin 107
			if (moyenneVote.getPropositionAssociee().utilisateurAVotePourDetermination(vd.getContributeur())) {
1004 benjamin 108
 
882 aurelien 109
				voteDeterminationService.modifierVote(vd, vdc);
1004 benjamin 110
				vue.afficherVoteModifie(vd.getVote()==1);
842 aurelien 111
			} else {
1004 benjamin 112
 
882 aurelien 113
				voteDeterminationService.ajouterVote(vd, vdc);
1004 benjamin 114
				vue.afficherVotePrisEnCompte(vd.getVote()==1);
833 aurelien 115
			}
939 benjamin 116
		}
833 aurelien 117
	}
966 gduche 118
 
119
	public void toggleNomEspece() {
120
		vue.toggleNomEspece();
121
	}
939 benjamin 122
 
248 aurelien 123
	public void voter(boolean oui) {
939 benjamin 124
 
248 aurelien 125
		VoteDetermination vd = new VoteDetermination();
126
		vd.setPropositionDetermination(moyenneVote.getPropositionAssociee());
565 aurelien 127
		vd.setContributeur(CacheClient.getInstance().getUtilisateur().getId());
248 aurelien 128
		vd.setDate(new Date());
939 benjamin 129
 
248 aurelien 130
		int valeurVote = oui ? 1 : 0;
131
		vd.setVote(valeurVote);
565 aurelien 132
		vd.setId(CacheClient.getInstance().getUtilisateur().getId());
939 benjamin 133
 
134
		if (oui) {
611 gduche 135
			vue.setVoteOuiEffectue();
136
		} else {
137
			vue.setVoteNonEffectue();
138
		}
867 aurelien 139
		vue.desactiverBoutons();
882 aurelien 140
		surVoteDetermination(vd);
248 aurelien 141
	}
140 aurelien 142
}