Subversion Repositories eFlore/Applications.del

Rev

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