Subversion Repositories eFlore/Applications.del

Rev

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