Subversion Repositories eFlore/Applications.del

Rev

Rev 2000 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2000 Rev 2080
1
package org.tela_botanica.del.client.composants.votes.moyennevotes;
1
package org.tela_botanica.del.client.composants.votes.moyennevotes;
2
 
2
 
3
import java.util.ArrayList;
3
import java.util.ArrayList;
4
import java.util.Collections;
4
import java.util.Collections;
5
import java.util.Comparator;
5
import java.util.Comparator;
6
import java.util.HashMap;
6
import java.util.HashMap;
7
import java.util.Iterator;
7
import java.util.Iterator;
8
import java.util.List;
8
import java.util.List;
9
 
9
 
10
import org.tela_botanica.del.client.cache.CacheClient;
10
import org.tela_botanica.del.client.cache.CacheClient;
11
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur;
11
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur;
12
import org.tela_botanica.del.client.composants.votefleur.VoteFleurVue;
12
import org.tela_botanica.del.client.composants.votefleur.VoteFleurVue;
13
import org.tela_botanica.del.client.modeles.Image;
13
import org.tela_botanica.del.client.modeles.Image;
14
import org.tela_botanica.del.client.modeles.Protocole;
14
import org.tela_botanica.del.client.modeles.Protocole;
15
import org.tela_botanica.del.client.modeles.VoteProtocole;
15
import org.tela_botanica.del.client.modeles.VoteProtocole;
16
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
16
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
17
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
17
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
18
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
18
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
19
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
19
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
20
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.GestionnaireEvenementSuppressionCommentaire;
20
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.GestionnaireEvenementSuppressionCommentaire;
21
import org.tela_botanica.del.client.services.rest.VoteProtocoleService;
21
import org.tela_botanica.del.client.services.rest.VoteProtocoleService;
22
import org.tela_botanica.del.client.services.rest.async.AjoutVoteProtocoleCallback;
22
import org.tela_botanica.del.client.services.rest.async.AjoutVoteProtocoleCallback;
23
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback;
23
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback;
24
 
24
 
25
import com.google.gwt.event.dom.client.ClickEvent;
25
import com.google.gwt.event.dom.client.ClickEvent;
26
import com.google.gwt.event.dom.client.ClickHandler;
26
import com.google.gwt.event.dom.client.ClickHandler;
27
import com.google.gwt.event.dom.client.HasClickHandlers;
27
import com.google.gwt.event.dom.client.HasClickHandlers;
28
import com.google.gwt.event.dom.client.HasMouseMoveHandlers;
28
import com.google.gwt.event.dom.client.HasMouseMoveHandlers;
29
import com.google.gwt.event.dom.client.MouseMoveEvent;
29
import com.google.gwt.event.dom.client.MouseMoveEvent;
30
import com.google.gwt.event.dom.client.MouseMoveHandler;
30
import com.google.gwt.event.dom.client.MouseMoveHandler;
31
import com.google.gwt.user.client.Window;
31
import com.google.gwt.user.client.Window;
32
import com.google.gwt.user.client.ui.HasText;
32
import com.google.gwt.user.client.ui.HasText;
33
import com.google.gwt.user.client.ui.HasWidgets;
33
import com.google.gwt.user.client.ui.HasWidgets;
34
import com.google.gwt.user.client.ui.IsWidget;
34
import com.google.gwt.user.client.ui.IsWidget;
35
import com.google.gwt.user.client.ui.Panel;
35
import com.google.gwt.user.client.ui.Panel;
36
 
36
 
37
public class MoyenneVotePresenteur {
37
public class MoyenneVotePresenteur {
38
 
38
 
39
	public interface Vue extends IsWidget {
39
	public interface Vue extends IsWidget {
40
		public HasClickHandlers getBoutonAnnuler();
40
		public HasClickHandlers getBoutonAnnuler();
41
 
41
 
42
		public HasClickHandlers getVotes();
42
		public HasClickHandlers getVotes();
43
 
43
 
44
		public int getValeurVote();
44
		public int getValeurVote();
45
 
45
 
46
		public void afficherBoutonAnnuler();
46
		public void afficherBoutonAnnuler();
47
 
47
 
48
		public void masquerBoutonAnnuler();
48
		public void masquerBoutonAnnuler();
49
 
49
 
50
		public void afficherNbVotes();
50
		public void afficherNbVotes();
51
 
51
 
52
		public void masquerNbVotes();
52
		public void masquerNbVotes();
53
 
53
 
54
		//public void afficherNbPoints();
54
		//public void afficherNbPoints();
55
 
55
 
56
		//public void masquerNbPoints();
56
		//public void masquerNbPoints();
57
 
57
 
58
		public void reinitialiserVotes();
58
		public void reinitialiserVotes();
59
 
59
 
60
		public void rafraichir(int moyenneVote, int nbVotes, int nombrePoints, double moyenneArithmetique, double mediane, HashMap<Integer,Integer> occurrencesParNote, double moyennePonderee);
60
		public void rafraichir(int moyenneVote, int nbVotes, int nombrePoints, double moyenneArithmetique, double mediane, HashMap<Integer,Integer> occurrencesParNote, double moyennePonderee);
61
 
61
 
62
		public void ajouterAuParent(HasWidgets composite);
62
		public void ajouterAuParent(HasWidgets composite);
63
 
63
 
64
		public void afficherVotePrisEnCompte();
64
		public void afficherVotePrisEnCompte();
65
 
65
 
66
		public HasWidgets getZoneFleur();
66
		public HasWidgets getZoneFleur();
67
 
67
 
68
		public HasText getZoneProtocole();
68
		public HasText getZoneProtocole();
69
 
69
 
70
		public HasText getNbVotes();
70
		public HasText getNbVotes();
71
 
71
 
72
		//public HasText getNbPoints();
72
		//public HasText getNbPoints();
73
 
73
 
74
		public HasClickHandlers getLienNbVotes();
74
		public HasClickHandlers getLienNbVotes();
75
 
75
 
76
		public void setNoteGenerale(int note);
76
		public void setNoteGenerale(int note);
77
 
77
 
78
		public void afficherVoteModifie();
78
		public void afficherVoteModifie();
79
 
79
 
80
		public HasMouseMoveHandlers getZoneVoter();
80
		public HasMouseMoveHandlers getZoneVoter();
81
		public void masquerZoneVoter();
81
		public void masquerZoneVoter();
-
 
82
		
-
 
83
		public void afficherMessageVoteIdentifie(boolean doitEtreIdentifiePourVoter);
82
 
84
 
83
		public void setNoteGeneraleToolTip(double valeurVoteTotalPrecise);
85
		public void setNoteGeneraleToolTip(double valeurVoteTotalPrecise);
84
 
86
 
85
		public void desactiverInteractionVote();
87
		public void desactiverInteractionVote();
86
 
88
 
87
		public void activerInteractionVote();
89
		public void activerInteractionVote();
88
 
90
 
89
		public void afficherVoteSupprime();
91
		public void afficherVoteSupprime();
90
 
92
 
91
		public Panel getPanneauDetailVotes();
93
		public Panel getPanneauDetailVotes();
92
 
94
 
93
		public void afficherPanneauDetailVotes();
95
		public void afficherPanneauDetailVotes();
94
 
96
 
95
		public void masquerPanneauDetailVotes();
97
		public void masquerPanneauDetailVotes();
96
 
98
 
97
		public HasClickHandlers getLienPanneauFermer();
99
		public HasClickHandlers getLienPanneauFermer();
98
	}
100
	}
99
 
101
 
100
	private Vue vue;
102
	private Vue vue;
101
	private Protocole protocole;
103
	private Protocole protocole;
102
	private Image image;
104
	private Image image;
103
 
105
 
104
	private int valeurVoteDefaut = -1;
106
	private int valeurVoteDefaut = -1;
105
	private int valeurVoteUtilisateur = -1;
107
	private int valeurVoteUtilisateur = -1;
106
	private int valeurVoteTotal = 0;
108
	private int valeurVoteTotal = 0;
107
	private double moyenneArithmetique = 0;
109
	private double moyenneArithmetique = 0;
108
	private double mediane = 0;
110
	private double mediane = 0;
109
	private int nombrePoints = 0;
111
	private int nombrePoints = 0;
110
	private double valeurVoteTotalPrecise = 0.0;
112
	private double valeurVoteTotalPrecise = 0.0;
111
	private HashMap<Integer,Integer> occurrencesParNote;
113
	private HashMap<Integer,Integer> occurrencesParNote;
112
 
114
 
113
	// TODO: on devrait passer un conteneur qui permet d'accéder à ces services
115
	// TODO: on devrait passer un conteneur qui permet d'accéder à ces services
114
	private VoteProtocoleService voteProtocoleService;
116
	private VoteProtocoleService voteProtocoleService;
115
 
117
 
116
	public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue,
118
	public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue,
117
			VoteProtocoleService voteProtocoleService) {
119
			VoteProtocoleService voteProtocoleService) {
118
		this.vue = vue;
120
		this.vue = vue;
119
		this.protocole = protocole;
121
		this.protocole = protocole;
120
		this.image = image;
122
		this.image = image;
121
		this.voteProtocoleService = voteProtocoleService;
123
		this.voteProtocoleService = voteProtocoleService;
122
 
124
 
123
		String nomProtocole = protocole.getNom();
125
		String nomProtocole = protocole.getNom();
124
		nomProtocole = nomProtocole.substring(0, 1).toUpperCase()
126
		nomProtocole = nomProtocole.substring(0, 1).toUpperCase()
125
				+ nomProtocole.substring(1).toLowerCase();
127
				+ nomProtocole.substring(1).toLowerCase();
126
		vue.getZoneProtocole().setText(nomProtocole);
128
		vue.getZoneProtocole().setText(nomProtocole);
127
	}
129
	}
128
 
130
 
129
	public void go(HasWidgets composite) {
131
	public void go(HasWidgets composite) {
130
		vue.ajouterAuParent(composite);
132
		vue.ajouterAuParent(composite);
131
		gererEvenements();
133
		gererEvenements();
132
		rafraichirVue();
134
		rafraichirVue();
133
	}
135
	}
134
 
136
 
135
	public void gererEvenements() {
137
	public void gererEvenements() {
-
 
138
		
136
		
139
		vue.afficherMessageVoteIdentifie(utilisateurPeutVoter());
137
		vue.getZoneVoter().addMouseMoveHandler(new MouseMoveHandler() {
140
		vue.getZoneVoter().addMouseMoveHandler(new MouseMoveHandler() {
138
			
141
			
139
			@Override
142
			@Override
140
			public void onMouseMove(MouseMoveEvent event) {
143
			public void onMouseMove(MouseMoveEvent event) {
-
 
144
				if(utilisateurPeutVoter()) {
141
				vue.masquerZoneVoter();
145
					vue.masquerZoneVoter();
-
 
146
				}	
142
			}
147
			}
143
		});
148
		});
144
		
149
		
145
		vue.getVotes().addClickHandler(new ClickHandler() {
150
		vue.getVotes().addClickHandler(new ClickHandler() {
146
			@Override
151
			@Override
147
			public void onClick(ClickEvent event) {
152
			public void onClick(ClickEvent event) {
-
 
153
				if(utilisateurPeutVoter()) {
148
				valeurVoteUtilisateur = vue.getValeurVote();
154
					valeurVoteUtilisateur = vue.getValeurVote();
149
				enregistrerVote();
155
					enregistrerVote();
150
				vue.afficherBoutonAnnuler();
156
					vue.afficherBoutonAnnuler();
-
 
157
				} else {
-
 
158
					Window.alert("Voter pour ce protocole nécéssite d'être identifié");
-
 
159
				}
-
 
160
 
151
			}
161
			}
152
		});
162
		});
153
 
163
 
154
		vue.getBoutonAnnuler().addClickHandler(new ClickHandler() {
164
		vue.getBoutonAnnuler().addClickHandler(new ClickHandler() {
155
			@Override
165
			@Override
156
			public void onClick(ClickEvent event) {
166
			public void onClick(ClickEvent event) {
157
				valeurVoteUtilisateur = valeurVoteDefaut;
167
				valeurVoteUtilisateur = valeurVoteDefaut;
158
				vue.masquerBoutonAnnuler();
168
				vue.masquerBoutonAnnuler();
159
				supprimerVote();
169
				supprimerVote();
160
				vue.reinitialiserVotes();
170
				vue.reinitialiserVotes();
161
			}
171
			}
162
		});
172
		});
163
 
173
 
164
		// Affiche un chouette panneau qui montre le détail des votes
174
		// Affiche un chouette panneau qui montre le détail des votes
165
		vue.getLienNbVotes().addClickHandler(new ClickHandler() {
175
		vue.getLienNbVotes().addClickHandler(new ClickHandler() {
166
			@Override
176
			@Override
167
			public void onClick(ClickEvent event) {
177
			public void onClick(ClickEvent event) {
168
				if (vue.getPanneauDetailVotes().isVisible()) {
178
				if (vue.getPanneauDetailVotes().isVisible()) {
169
					vue.masquerPanneauDetailVotes();
179
					vue.masquerPanneauDetailVotes();
170
				} else {
180
				} else {
171
					vue.afficherPanneauDetailVotes();
181
					vue.afficherPanneauDetailVotes();
172
				}
182
				}
173
			}
183
			}
174
		});
184
		});
175
 
185
 
176
		vue.getLienPanneauFermer().addClickHandler(new ClickHandler() {
186
		vue.getLienPanneauFermer().addClickHandler(new ClickHandler() {
177
			@Override
187
			@Override
178
			public void onClick(ClickEvent event) {
188
			public void onClick(ClickEvent event) {
179
				vue.masquerPanneauDetailVotes();
189
				vue.masquerPanneauDetailVotes();
180
			}
190
			}
181
		});
191
		});
182
 
192
 
183
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {		
193
		BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {		
184
			@Override
194
			@Override
185
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
195
			public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
186
				rafraichirVue();
196
				rafraichirVue();
187
			}
197
			}
188
		});
198
		});
189
	}
199
	}
-
 
200
	
-
 
201
	public boolean utilisateurPeutVoter() {
-
 
202
		return !protocole.doitEtreIdentifiePourVoter() || CacheClient.getInstance().getUtilisateur().estIdentifie();
-
 
203
	}
190
 
204
 
191
	public void setValeurVoteUtilisateur(int valeurVoteUtilisateur) {
205
	public void setValeurVoteUtilisateur(int valeurVoteUtilisateur) {
192
		this.valeurVoteUtilisateur = valeurVoteUtilisateur;
206
		this.valeurVoteUtilisateur = valeurVoteUtilisateur;
193
	}
207
	}
194
 
208
 
195
	public void enregistrerVote() {
209
	public void enregistrerVote() {
196
		vue.desactiverInteractionVote();
210
		vue.desactiverInteractionVote();
197
		final VoteProtocole voteProtocole = new VoteProtocole();
211
		final VoteProtocole voteProtocole = new VoteProtocole();
198
		voteProtocole.setProtocole(this.protocole);
212
		voteProtocole.setProtocole(this.protocole);
199
		voteProtocole.setVote(valeurVoteUtilisateur);
213
		voteProtocole.setVote(valeurVoteUtilisateur);
200
		String idContributeur = CacheClient.getInstance().getUtilisateur()
214
		String idContributeur = CacheClient.getInstance().getUtilisateur()
201
				.getId();
215
				.getId();
202
		voteProtocole.setContributeur(idContributeur);
216
		voteProtocole.setContributeur(idContributeur);
203
		
217
		
204
		//TODO: ceci devrait pouvoir être factorisé
218
		//TODO: ceci devrait pouvoir être factorisé
205
		if (image.utilisateurAVotePourProtocole(this.protocole.getId() + "",
219
		if (image.utilisateurAVotePourProtocole(this.protocole.getId() + "",
206
				idContributeur)) {
220
				idContributeur)) {
207
			voteProtocole.setId(image.getVotesProtocoles(this.protocole.getId()+"").get(idContributeur).getId());
221
			voteProtocole.setId(image.getVotesProtocoles(this.protocole.getId()+"").get(idContributeur).getId());
208
			VoteProtocoleCallback vpc = new VoteProtocoleCallback() {
222
			VoteProtocoleCallback vpc = new VoteProtocoleCallback() {
209
				@Override
223
				@Override
210
				public void surRetour(Void objetRetour) {
224
				public void surRetour(Void objetRetour) {
211
					image.ajouterVoteProtocole(voteProtocole);
225
					image.ajouterVoteProtocole(voteProtocole);
212
					rafraichirVue();
226
					rafraichirVue();
213
					vue.afficherVoteModifie();
227
					vue.afficherVoteModifie();
214
					vue.activerInteractionVote();
228
					vue.activerInteractionVote();
215
				}
229
				}
216
			};
230
			};
217
			voteProtocoleService.modifierVote(image.getIdImage(),
231
			voteProtocoleService.modifierVote(image.getIdImage(),
218
					voteProtocole, vpc);
232
					voteProtocole, vpc);
219
		} else {
233
		} else {
220
			AjoutVoteProtocoleCallback vpc = new AjoutVoteProtocoleCallback() {
234
			AjoutVoteProtocoleCallback vpc = new AjoutVoteProtocoleCallback() {
221
				@Override
235
				@Override
222
				public void surRetour(String idVote) {
236
				public void surRetour(String idVote) {
223
					voteProtocole.setId(idVote);
237
					voteProtocole.setId(idVote);
224
					image.ajouterVoteProtocole(voteProtocole);
238
					image.ajouterVoteProtocole(voteProtocole);
225
					rafraichirVue();
239
					rafraichirVue();
226
					vue.afficherVotePrisEnCompte();
240
					vue.afficherVotePrisEnCompte();
227
					vue.activerInteractionVote();
241
					vue.activerInteractionVote();
228
				}
242
				}
229
			};
243
			};
230
			voteProtocoleService.ajouterVote(image.getIdImage(), voteProtocole,
244
			voteProtocoleService.ajouterVote(image.getIdImage(), voteProtocole,
231
					vpc);
245
					vpc);
232
		}
246
		}
233
	}
247
	}
234
	
248
	
235
	public void supprimerVote() {
249
	public void supprimerVote() {
236
		vue.desactiverInteractionVote();
250
		vue.desactiverInteractionVote();
237
		final String idContributeur = CacheClient.getInstance().getUtilisateur()
251
		final String idContributeur = CacheClient.getInstance().getUtilisateur()
238
				.getId();
252
				.getId();
239
		final VoteProtocole voteProtocole = image.getVotesProtocoles(protocole.getId()).get(idContributeur);
253
		final VoteProtocole voteProtocole = image.getVotesProtocoles(protocole.getId()).get(idContributeur);
240
		VoteProtocoleCallback vpc = new VoteProtocoleCallback() {
254
		VoteProtocoleCallback vpc = new VoteProtocoleCallback() {
241
			@Override
255
			@Override
242
			public void surRetour(Void objetRetour) {
256
			public void surRetour(Void objetRetour) {
243
				// TODO: voir si l'on affiche un message en cas de succès ?
257
				// TODO: voir si l'on affiche un message en cas de succès ?
244
				image.supprimerVoteProtocole(protocole.getId() + "", idContributeur);
258
				image.supprimerVoteProtocole(protocole.getId() + "", idContributeur);
245
				rafraichirVue();
259
				rafraichirVue();
246
				vue.afficherVoteSupprime();
260
				vue.afficherVoteSupprime();
247
				vue.activerInteractionVote();
261
				vue.activerInteractionVote();
248
			}
262
			}
249
 
263
 
250
		};
264
		};
251
		voteProtocoleService.supprimerVote(image.getIdImage(), voteProtocole, vpc);
265
		voteProtocoleService.supprimerVote(image.getIdImage(), voteProtocole, vpc);
252
	}
266
	}
253
 
267
 
254
	public int getValeurVoteTotal() {
268
	public int getValeurVoteTotal() {
255
		return valeurVoteTotal;
269
		return valeurVoteTotal;
256
	}
270
	}
257
 
271
 
258
	public IsWidget getVue() {
272
	public IsWidget getVue() {
259
		return vue;
273
		return vue;
260
	}
274
	}
261
 
275
 
262
	private void rafraichirVue() {
276
	private void rafraichirVue() {
263
		valeurVoteTotal = calculerMoyenneVotesArrondie();
277
		valeurVoteTotal = calculerMoyenneVotesArrondie();
264
		moyenneArithmetique = calculerMoyenneVotes();
278
		moyenneArithmetique = calculerMoyenneVotes();
265
		mediane = calculerMedianeVotes();
279
		mediane = calculerMedianeVotes();
266
		valeurVoteTotalPrecise = calculerMoyennePondereeVotes();
280
		valeurVoteTotalPrecise = calculerMoyennePondereeVotes();
267
		nombrePoints = calculerNombrePointsEchelleArbitraire();
281
		nombrePoints = calculerNombrePointsEchelleArbitraire();
268
		VoteProtocole voteProtocole = image.getVotesProtocoles(
282
		VoteProtocole voteProtocole = image.getVotesProtocoles(
269
				protocole.getId()).get(
283
				protocole.getId()).get(
270
				CacheClient.getInstance().getUtilisateur().getId());
284
				CacheClient.getInstance().getUtilisateur().getId());
271
		int voteUtilisateur = 0;
285
		int voteUtilisateur = 0;
272
		if (voteProtocole != null) {
286
		if (voteProtocole != null) {
273
			voteUtilisateur = voteProtocole.getVote();
287
			voteUtilisateur = voteProtocole.getVote();
274
			vue.masquerZoneVoter();
288
			vue.masquerZoneVoter();
275
		}
289
		}
276
		
290
		
277
		if(image.utilisateurAVotePourProtocole(protocole.getId()+"", CacheClient.getInstance().getUtilisateur().getId())) {
291
		if(image.utilisateurAVotePourProtocole(protocole.getId()+"", CacheClient.getInstance().getUtilisateur().getId())) {
278
			vue.afficherBoutonAnnuler();
292
			vue.afficherBoutonAnnuler();
279
		}
293
		}
-
 
294
		
-
 
295
		vue.afficherMessageVoteIdentifie(utilisateurPeutVoter());
280
 
296
 
281
		VoteFleurPresenteur presenteurFleur = new VoteFleurPresenteur(
297
		VoteFleurPresenteur presenteurFleur = new VoteFleurPresenteur(
282
				new VoteFleurVue());
298
				new VoteFleurVue());
283
		presenteurFleur.setNote(valeurVoteTotal);
299
		presenteurFleur.setNote(valeurVoteTotal);
284
		vue.setNoteGenerale(valeurVoteTotal);
300
		vue.setNoteGenerale(valeurVoteTotal);
285
		vue.setNoteGeneraleToolTip(valeurVoteTotalPrecise);
301
		vue.setNoteGeneraleToolTip(valeurVoteTotalPrecise);
286
		presenteurFleur.go(vue.getZoneFleur());
302
		presenteurFleur.go(vue.getZoneFleur());
287
		vue.rafraichir(voteUtilisateur, image.getVotesProtocoles(protocole.getId()).size(), nombrePoints,
303
		vue.rafraichir(voteUtilisateur, image.getVotesProtocoles(protocole.getId()).size(), nombrePoints,
288
					   moyenneArithmetique, mediane, occurrencesParNote, valeurVoteTotalPrecise);
304
					   moyenneArithmetique, mediane, occurrencesParNote, valeurVoteTotalPrecise);
289
	}
305
	}
290
 
306
 
291
	public double calculerMedianeVotes() {
307
	public double calculerMedianeVotes() {
292
		double med = 0;
308
		double med = 0;
293
		// comparateur de votes (le bulldozer Java™ pour écraser une mouche)
309
		// comparateur de votes (le bulldozer Java™ pour écraser une mouche)
294
		class Comparatisateur3000 implements Comparator<VoteProtocole> {
310
		class Comparatisateur3000 implements Comparator<VoteProtocole> {
295
			@Override
311
			@Override
296
			public int compare(VoteProtocole v1, VoteProtocole v2) {
312
			public int compare(VoteProtocole v1, VoteProtocole v2) {
297
				if (v1.getVote() > v2.getVote()) {
313
				if (v1.getVote() > v2.getVote()) {
298
					return 1;
314
					return 1;
299
				} else if (v1.getVote() > v2.getVote()) {
315
				} else if (v1.getVote() > v2.getVote()) {
300
					return -1;
316
					return -1;
301
				} else {
317
				} else {
302
					return 0;
318
					return 0;
303
				}
319
				}
304
			}
320
			}
305
		}
321
		}
306
		// conversion en liste triable
322
		// conversion en liste triable
307
		List<VoteProtocole> liste = new ArrayList<VoteProtocole>(image.getVotesProtocoles(protocole.getId()).values());
323
		List<VoteProtocole> liste = new ArrayList<VoteProtocole>(image.getVotesProtocoles(protocole.getId()).values());
308
		Collections.sort(liste, new Comparatisateur3000());
324
		Collections.sort(liste, new Comparatisateur3000());
309
		int longueur = liste.size();
325
		int longueur = liste.size();
310
		if (longueur > 0) {
326
		if (longueur > 0) {
311
			if (longueur % 2 == 0) {
327
			if (longueur % 2 == 0) {
312
				// moyenne des éléments centraux
328
				// moyenne des éléments centraux
313
				med = (liste.get(longueur / 2 - 1).getVote() + liste.get(longueur / 2).getVote()) / 2;
329
				med = (liste.get(longueur / 2 - 1).getVote() + liste.get(longueur / 2).getVote()) / 2;
314
			} else {
330
			} else {
315
				// élément central
331
				// élément central
316
				med = liste.get((int) (longueur / 2)).getVote(); 
332
				med = liste.get((int) (longueur / 2)).getVote(); 
317
			}
333
			}
318
		}
334
		}
319
		return med;
335
		return med;
320
	}
336
	}
321
 
337
 
322
	// calcule la moyenne arithmétique
338
	// calcule la moyenne arithmétique
323
	public double calculerMoyenneVotes() {
339
	public double calculerMoyenneVotes() {
324
		double valeurVote = 0;
340
		double valeurVote = 0;
325
		double nbVote = 0;
341
		double nbVote = 0;
326
		for (Iterator<String> iterator = image
342
		for (Iterator<String> iterator = image
327
				.getVotesProtocoles(protocole.getId()).keySet().iterator(); iterator
343
				.getVotesProtocoles(protocole.getId()).keySet().iterator(); iterator
328
				.hasNext();) {
344
				.hasNext();) {
329
			VoteProtocole imageCelValidationData = image.getVotesProtocoles(
345
			VoteProtocole imageCelValidationData = image.getVotesProtocoles(
330
					protocole.getId()).get(iterator.next());
346
					protocole.getId()).get(iterator.next());
331
			valeurVote += (double) imageCelValidationData.getVote() / 5;
347
			valeurVote += (double) imageCelValidationData.getVote() / 5;
332
			nbVote++;
348
			nbVote++;
333
		}
349
		}
334
 
350
 
335
		if (nbVote > 0) {
351
		if (nbVote > 0) {
336
			valeurVote /= nbVote;
352
			valeurVote /= nbVote;
337
			valeurVote *= 5;
353
			valeurVote *= 5;
338
		}
354
		}
339
 
355
 
340
		return valeurVote;
356
		return valeurVote;
341
	}
357
	}
342
 
358
 
343
	// Calcule une moyenne, où chaque note est pondérée par son nombre d'occurrences au carré.
359
	// Calcule une moyenne, où chaque note est pondérée par son nombre d'occurrences au carré.
344
	// voir http://www.tela-botanica.org/wikini/DevInformatiques/wakka.php?wiki=AppliDelCalculVotes
360
	// voir http://www.tela-botanica.org/wikini/DevInformatiques/wakka.php?wiki=AppliDelCalculVotes
345
	public double calculerMoyennePondereeVotes() {
361
	public double calculerMoyennePondereeVotes() {
346
 
362
 
347
		double score = 0;
363
		double score = 0;
348
		double diviseur = 0;
364
		double diviseur = 0;
349
		int nbOccurrences;
365
		int nbOccurrences;
350
		// mise à jour des occurrences par note, utile pour le panneau de détails
366
		// mise à jour des occurrences par note, utile pour le panneau de détails
351
		occurrencesParNote = new HashMap<Integer,Integer>();
367
		occurrencesParNote = new HashMap<Integer,Integer>();
352
 
368
 
353
		// rangement par note => occurrences
369
		// rangement par note => occurrences
354
		for (String clef : image.getVotesProtocoles(protocole.getId()).keySet()) {
370
		for (String clef : image.getVotesProtocoles(protocole.getId()).keySet()) {
355
			VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(clef);
371
			VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(clef);
356
			nbOccurrences = 1;
372
			nbOccurrences = 1;
357
			if (occurrencesParNote.containsKey(imageCelValidationData.getVote())) {
373
			if (occurrencesParNote.containsKey(imageCelValidationData.getVote())) {
358
				nbOccurrences = occurrencesParNote.get(imageCelValidationData.getVote()) + 1;
374
				nbOccurrences = occurrencesParNote.get(imageCelValidationData.getVote()) + 1;
359
			}
375
			}
360
			occurrencesParNote.put(imageCelValidationData.getVote(), nbOccurrences);
376
			occurrencesParNote.put(imageCelValidationData.getVote(), nbOccurrences);
361
		}
377
		}
362
 
378
 
363
		// calcul pondéré
379
		// calcul pondéré
364
		for (Integer clef : occurrencesParNote.keySet()) {
380
		for (Integer clef : occurrencesParNote.keySet()) {
365
			score += clef * occurrencesParNote.get(clef) * occurrencesParNote.get(clef);
381
			score += clef * occurrencesParNote.get(clef) * occurrencesParNote.get(clef);
366
			diviseur += occurrencesParNote.get(clef) * occurrencesParNote.get(clef);
382
			diviseur += occurrencesParNote.get(clef) * occurrencesParNote.get(clef);
367
		}
383
		}
368
 
384
 
369
		if (diviseur > 0) {
385
		if (diviseur > 0) {
370
			score /= diviseur;
386
			score /= diviseur;
371
		}
387
		}
372
 
388
 
373
		return score;
389
		return score;
374
	}
390
	}
375
 
391
 
376
	// remplace chaque note par un nombre de points noté dans "echelle" afin de favoriser
392
	// remplace chaque note par un nombre de points noté dans "echelle" afin de favoriser
377
	// les note fortes (5 et 4), pour le défi photo notamment
393
	// les note fortes (5 et 4), pour le défi photo notamment
378
	public int calculerNombrePointsEchelleArbitraire() {
394
	public int calculerNombrePointsEchelleArbitraire() {
379
		int points = 0;
395
		int points = 0;
380
		//int[] echelle = {-1,0,1,4,20};
396
		//int[] echelle = {-1,0,1,4,20};
381
		int[] echelle = {1,10,100,1000,10000};
397
		int[] echelle = {1,10,100,1000,10000};
382
 
398
 
383
		for (String clef : image.getVotesProtocoles(protocole.getId()).keySet()) {
399
		for (String clef : image.getVotesProtocoles(protocole.getId()).keySet()) {
384
			VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(clef);
400
			VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(clef);
385
			if (imageCelValidationData.getVote() > 0) {
401
			if (imageCelValidationData.getVote() > 0) {
386
				points += echelle[imageCelValidationData.getVote() - 1];
402
				points += echelle[imageCelValidationData.getVote() - 1];
387
			}
403
			}
388
		}
404
		}
389
 
405
 
390
		return points;
406
		return points;
391
	}
407
	}
392
 
408
 
393
	public int calculerMoyenneVotesArrondie() {
409
	public int calculerMoyenneVotesArrondie() {
394
		//double valeurVote = calculerMoyenneVotes();
410
		//double valeurVote = calculerMoyenneVotes();
395
		double valeurVote = calculerMoyennePondereeVotes();
411
		double valeurVote = calculerMoyennePondereeVotes();
396
		return (int) Math.round(valeurVote);
412
		return (int) Math.round(valeurVote);
397
	}
413
	}
398
}
414
}