Subversion Repositories eFlore/Applications.del

Rev

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