Subversion Repositories eFlore/Applications.del

Rev

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