Subversion Repositories eFlore/Applications.del

Rev

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