Subversion Repositories eFlore/Applications.del

Rev

Rev 1471 | 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.moyennevotes;
9 benjamin 2
 
629 aurelien 3
import java.util.Iterator;
9 benjamin 4
 
629 aurelien 5
import org.tela_botanica.del.client.cache.CacheClient;
1085 gduche 6
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur;
7
import org.tela_botanica.del.client.composants.votefleur.VoteFleurVue;
629 aurelien 8
import org.tela_botanica.del.client.modeles.Image;
423 gduche 9
import org.tela_botanica.del.client.modeles.Protocole;
148 benjamin 10
import org.tela_botanica.del.client.modeles.VoteProtocole;
1471 aurelien 11
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
12
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
13
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
14
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
15
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.GestionnaireEvenementSuppressionCommentaire;
423 gduche 16
import org.tela_botanica.del.client.services.rest.VoteProtocoleService;
1471 aurelien 17
import org.tela_botanica.del.client.services.rest.async.AjoutVoteProtocoleCallback;
823 aurelien 18
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback;
939 benjamin 19
 
423 gduche 20
import com.google.gwt.event.dom.client.ClickEvent;
21
import com.google.gwt.event.dom.client.ClickHandler;
629 aurelien 22
import com.google.gwt.event.dom.client.HasClickHandlers;
1095 gduche 23
import com.google.gwt.event.dom.client.HasMouseMoveHandlers;
24
import com.google.gwt.event.dom.client.MouseMoveEvent;
25
import com.google.gwt.event.dom.client.MouseMoveHandler;
1471 aurelien 26
import com.google.gwt.user.client.Window;
629 aurelien 27
import com.google.gwt.user.client.ui.HasText;
9 benjamin 28
import com.google.gwt.user.client.ui.HasWidgets;
629 aurelien 29
import com.google.gwt.user.client.ui.IsWidget;
9 benjamin 30
 
14 benjamin 31
public class MoyenneVotePresenteur {
9 benjamin 32
 
629 aurelien 33
	public interface Vue extends IsWidget {
34
		public HasClickHandlers getBoutonAnnuler();
939 benjamin 35
 
629 aurelien 36
		public HasClickHandlers getVotes();
939 benjamin 37
 
629 aurelien 38
		public int getValeurVote();
939 benjamin 39
 
629 aurelien 40
		public void afficherBoutonAnnuler();
939 benjamin 41
 
629 aurelien 42
		public void masquerBoutonAnnuler();
939 benjamin 43
 
629 aurelien 44
		public void afficherNbVotes();
939 benjamin 45
 
46
		public void masquerNbVotes();
47
 
629 aurelien 48
		public void reinitialiserVotes();
939 benjamin 49
 
629 aurelien 50
		public void rafraichir(int moyenneVote, int nbVotes);
939 benjamin 51
 
629 aurelien 52
		public void ajouterAuParent(HasWidgets composite);
1095 gduche 53
 
1084 gduche 54
		public void afficherVotePrisEnCompte();
1095 gduche 55
 
1085 gduche 56
		public HasWidgets getZoneFleur();
1095 gduche 57
 
1086 gduche 58
		public HasText getZoneProtocole();
1095 gduche 59
 
1088 gduche 60
		public void setNoteGenerale(int note);
1095 gduche 61
 
1092 gduche 62
		public void afficherVoteModifie();
1095 gduche 63
 
64
		public HasMouseMoveHandlers getZoneVoter();
65
		public void masquerZoneVoter();
1266 aurelien 66
 
67
		public void setNoteGeneraleToolTip(double valeurVoteTotalPrecise);
1471 aurelien 68
 
69
		void desactiverInteractionVote();
70
 
71
		void activerInteractionVote();
72
 
73
		void afficherVoteSupprime();
629 aurelien 74
	}
939 benjamin 75
 
629 aurelien 76
	private Vue vue;
423 gduche 77
	private Protocole protocole;
629 aurelien 78
	private Image image;
939 benjamin 79
 
629 aurelien 80
	private int valeurVoteDefaut = -1;
81
	private int valeurVoteUtilisateur = -1;
82
	private int valeurVoteTotal = 0;
1266 aurelien 83
	private double valeurVoteTotalPrecise = 0.0;
939 benjamin 84
 
85
	// TODO: on devrait passer un conteneur qui permet d'accéder à ces services
959 benjamin 86
	private VoteProtocoleService voteProtocoleService;
939 benjamin 87
 
1095 gduche 88
	public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue,
89
			VoteProtocoleService voteProtocoleService) {
629 aurelien 90
		this.vue = vue;
423 gduche 91
		this.protocole = protocole;
629 aurelien 92
		this.image = image;
959 benjamin 93
		this.voteProtocoleService = voteProtocoleService;
1095 gduche 94
 
1086 gduche 95
		String nomProtocole = protocole.getNom();
1095 gduche 96
		nomProtocole = nomProtocole.substring(0, 1).toUpperCase()
97
				+ nomProtocole.substring(1).toLowerCase();
1086 gduche 98
		vue.getZoneProtocole().setText(nomProtocole);
9 benjamin 99
	}
100
 
629 aurelien 101
	public void go(HasWidgets composite) {
102
		vue.ajouterAuParent(composite);
423 gduche 103
		gererEvenements();
629 aurelien 104
		rafraichirVue();
9 benjamin 105
	}
939 benjamin 106
 
423 gduche 107
	public void gererEvenements() {
1095 gduche 108
 
109
		vue.getZoneVoter().addMouseMoveHandler(new MouseMoveHandler() {
110
 
111
			@Override
112
			public void onMouseMove(MouseMoveEvent event) {
113
				vue.masquerZoneVoter();
114
			}
115
		});
116
 
423 gduche 117
		vue.getVotes().addClickHandler(new ClickHandler() {
118
			@Override
119
			public void onClick(ClickEvent event) {
629 aurelien 120
				valeurVoteUtilisateur = vue.getValeurVote();
1471 aurelien 121
				enregistrerVote();
423 gduche 122
				vue.afficherBoutonAnnuler();
123
				vue.masquerNbVotes();
124
			}
125
		});
939 benjamin 126
 
423 gduche 127
		vue.getBoutonAnnuler().addClickHandler(new ClickHandler() {
128
			@Override
129
			public void onClick(ClickEvent event) {
629 aurelien 130
				valeurVoteUtilisateur = valeurVoteDefaut;
423 gduche 131
				vue.masquerBoutonAnnuler();
1471 aurelien 132
				supprimerVote();
423 gduche 133
				vue.afficherNbVotes();
134
				vue.reinitialiserVotes();
135
			}
136
		});
1471 aurelien 137
 
138
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
423 gduche 139
			@Override
1471 aurelien 140
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
141
				rafraichirVue();
423 gduche 142
			}
143
		});
144
	}
939 benjamin 145
 
629 aurelien 146
	public void setValeurVoteUtilisateur(int valeurVoteUtilisateur) {
147
		this.valeurVoteUtilisateur = valeurVoteUtilisateur;
148
	}
939 benjamin 149
 
423 gduche 150
	public void enregistrerVote() {
1471 aurelien 151
		vue.desactiverInteractionVote();
939 benjamin 152
		final VoteProtocole voteProtocole = new VoteProtocole();
423 gduche 153
		voteProtocole.setProtocole(this.protocole);
629 aurelien 154
		voteProtocole.setVote(valeurVoteUtilisateur);
1095 gduche 155
		String idContributeur = CacheClient.getInstance().getUtilisateur()
156
				.getId();
823 aurelien 157
		voteProtocole.setContributeur(idContributeur);
1471 aurelien 158
 
159
		//TODO: ceci devrait pouvoir être factorisé
1095 gduche 160
		if (image.utilisateurAVotePourProtocole(this.protocole.getId() + "",
161
				idContributeur)) {
1471 aurelien 162
			voteProtocole.setId(image.getVotesProtocoles(this.protocole.getId()+"").get(idContributeur).getId());
163
			VoteProtocoleCallback vpc = new VoteProtocoleCallback() {
164
				@Override
165
				public void surRetour(Void objetRetour) {
166
					image.ajouterVoteProtocole(voteProtocole);
167
					rafraichirVue();
168
					vue.afficherVoteModifie();
169
					vue.activerInteractionVote();
170
				}
171
			};
1095 gduche 172
			voteProtocoleService.modifierVote(image.getIdImage(),
173
					voteProtocole, vpc);
823 aurelien 174
		} else {
1471 aurelien 175
			AjoutVoteProtocoleCallback vpc = new AjoutVoteProtocoleCallback() {
176
				@Override
177
				public void surRetour(String idVote) {
178
					voteProtocole.setId(idVote);
179
					image.ajouterVoteProtocole(voteProtocole);
180
					rafraichirVue();
181
					vue.afficherVotePrisEnCompte();
182
					vue.activerInteractionVote();
183
				}
184
			};
1095 gduche 185
			voteProtocoleService.ajouterVote(image.getIdImage(), voteProtocole,
186
					vpc);
823 aurelien 187
		}
629 aurelien 188
	}
1471 aurelien 189
 
190
	public void supprimerVote() {
191
		vue.desactiverInteractionVote();
192
		final String idContributeur = CacheClient.getInstance().getUtilisateur()
193
				.getId();
194
		final VoteProtocole voteProtocole = image.getVotesProtocoles(protocole.getId()).get(idContributeur);
195
		VoteProtocoleCallback vpc = new VoteProtocoleCallback() {
196
			@Override
197
			public void surRetour(Void objetRetour) {
198
				// TODO: voir si l'on affiche un message en cas de succès ?
199
				image.supprimerVoteProtocole(protocole.getId() + "", idContributeur);
200
				rafraichirVue();
201
				vue.afficherVoteSupprime();
202
				vue.activerInteractionVote();
203
			}
939 benjamin 204
 
1471 aurelien 205
		};
206
		voteProtocoleService.supprimerVote(image.getIdImage(), voteProtocole, vpc);
207
	}
208
 
629 aurelien 209
	public int getValeurVoteTotal() {
210
		return valeurVoteTotal;
211
	}
212
 
213
	public IsWidget getVue() {
214
		return vue;
215
	}
939 benjamin 216
 
629 aurelien 217
	private void rafraichirVue() {
1266 aurelien 218
		valeurVoteTotal = calculerMoyenneVotesArrondie();
219
		valeurVoteTotalPrecise = calculerMoyenneVotes();
1095 gduche 220
		VoteProtocole voteProtocole = image.getVotesProtocoles(
221
				protocole.getId()).get(
222
				CacheClient.getInstance().getUtilisateur().getId());
1088 gduche 223
		int voteUtilisateur = 0;
224
		if (voteProtocole != null) {
225
			voteUtilisateur = voteProtocole.getVote();
1095 gduche 226
			vue.masquerZoneVoter();
1088 gduche 227
		}
1471 aurelien 228
 
229
		if(image.utilisateurAVotePourProtocole(protocole.getId()+"", CacheClient.getInstance().getUtilisateur().getId())) {
230
			vue.afficherBoutonAnnuler();
231
		}
1095 gduche 232
 
233
		VoteFleurPresenteur presenteurFleur = new VoteFleurPresenteur(
234
				new VoteFleurVue());
1085 gduche 235
		presenteurFleur.setNote(valeurVoteTotal);
1088 gduche 236
		vue.setNoteGenerale(valeurVoteTotal);
1266 aurelien 237
		vue.setNoteGeneraleToolTip(valeurVoteTotalPrecise);
1085 gduche 238
		presenteurFleur.go(vue.getZoneFleur());
1095 gduche 239
		vue.rafraichir(voteUtilisateur,
240
				image.getVotesProtocoles(protocole.getId()).size());
629 aurelien 241
	}
1266 aurelien 242
 
243
	public double calculerMoyenneVotes() {
629 aurelien 244
		double valeurVote = 0;
1266 aurelien 245
		double nbVote = 0;
1095 gduche 246
		for (Iterator<String> iterator = image
247
				.getVotesProtocoles(protocole.getId()).keySet().iterator(); iterator
248
				.hasNext();) {
249
			VoteProtocole imageCelValidationData = image.getVotesProtocoles(
250
					protocole.getId()).get(iterator.next());
939 benjamin 251
			valeurVote += (double) imageCelValidationData.getVote() / 5;
629 aurelien 252
			nbVote++;
253
		}
939 benjamin 254
 
629 aurelien 255
		if (nbVote > 0) {
256
			valeurVote /= nbVote;
257
			valeurVote *= 5;
258
		}
259
 
1266 aurelien 260
		return valeurVote;
261
	}
262
 
263
	public int calculerMoyenneVotesArrondie() {
264
		double valeurVote = calculerMoyenneVotes();
939 benjamin 265
		return (int) Math.round(valeurVote);
423 gduche 266
	}
9 benjamin 267
}