Subversion Repositories eFlore/Applications.del

Rev

Rev 1085 | Rev 1088 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1085 Rev 1086
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.Iterator;
3
import java.util.Iterator;
4
 
4
 
5
import org.tela_botanica.del.client.cache.CacheClient;
5
import org.tela_botanica.del.client.cache.CacheClient;
6
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur;
6
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur;
7
import org.tela_botanica.del.client.composants.votefleur.VoteFleurVue;
7
import org.tela_botanica.del.client.composants.votefleur.VoteFleurVue;
8
import org.tela_botanica.del.client.modeles.Image;
8
import org.tela_botanica.del.client.modeles.Image;
9
import org.tela_botanica.del.client.modeles.Protocole;
9
import org.tela_botanica.del.client.modeles.Protocole;
10
import org.tela_botanica.del.client.modeles.VoteProtocole;
10
import org.tela_botanica.del.client.modeles.VoteProtocole;
11
import org.tela_botanica.del.client.services.rest.VoteProtocoleService;
11
import org.tela_botanica.del.client.services.rest.VoteProtocoleService;
12
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback;
12
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback;
13
 
13
 
14
import com.google.gwt.event.dom.client.ClickEvent;
14
import com.google.gwt.event.dom.client.ClickEvent;
15
import com.google.gwt.event.dom.client.ClickHandler;
15
import com.google.gwt.event.dom.client.ClickHandler;
16
import com.google.gwt.event.dom.client.HasClickHandlers;
16
import com.google.gwt.event.dom.client.HasClickHandlers;
17
import com.google.gwt.user.client.Window;
17
import com.google.gwt.user.client.Window;
18
import com.google.gwt.user.client.ui.HasText;
18
import com.google.gwt.user.client.ui.HasText;
19
import com.google.gwt.user.client.ui.HasWidgets;
19
import com.google.gwt.user.client.ui.HasWidgets;
20
import com.google.gwt.user.client.ui.IsWidget;
20
import com.google.gwt.user.client.ui.IsWidget;
21
 
21
 
22
public class MoyenneVotePresenteur {
22
public class MoyenneVotePresenteur {
23
 
23
 
24
	public interface Vue extends IsWidget {
24
	public interface Vue extends IsWidget {
25
		public HasClickHandlers getBoutonVoter();
25
		public HasClickHandlers getBoutonVoter();
26
 
26
 
27
		public HasClickHandlers getBoutonAnnuler();
27
		public HasClickHandlers getBoutonAnnuler();
28
 
-
 
29
		public HasText getNbVotes();
-
 
30
 
28
 
31
		public HasClickHandlers getVotes();
29
		public HasClickHandlers getVotes();
32
 
30
 
33
		public int getValeurVote();
31
		public int getValeurVote();
34
 
32
 
35
		public void afficherBoutonVoter();
33
		public void afficherBoutonVoter();
36
 
34
 
37
		public void afficherBoutonAnnuler();
35
		public void afficherBoutonAnnuler();
38
 
36
 
39
		public void masquerBoutonVoter();
37
		public void masquerBoutonVoter();
40
 
38
 
41
		public void masquerBoutonAnnuler();
39
		public void masquerBoutonAnnuler();
42
 
40
 
43
		public void afficherNbVotes();
41
		public void afficherNbVotes();
44
 
42
 
45
		public void masquerNbVotes();
43
		public void masquerNbVotes();
46
 
44
 
47
		public void reinitialiserVotes();
45
		public void reinitialiserVotes();
48
 
46
 
49
		public void rafraichir(int moyenneVote, int nbVotes);
47
		public void rafraichir(int moyenneVote, int nbVotes);
50
 
48
 
51
		public void ajouterAuParent(HasWidgets composite);
49
		public void ajouterAuParent(HasWidgets composite);
52
		
50
		
53
		public void afficherVotePrisEnCompte();
51
		public void afficherVotePrisEnCompte();
54
		
52
		
55
		public HasWidgets getZoneFleur();
53
		public HasWidgets getZoneFleur();
-
 
54
		
-
 
55
		public HasText getZoneProtocole();
56
	}
56
	}
57
 
57
 
58
	private Vue vue;
58
	private Vue vue;
59
	private Protocole protocole;
59
	private Protocole protocole;
60
	private Image image;
60
	private Image image;
61
 
61
 
62
	private int valeurVoteDefaut = -1;
62
	private int valeurVoteDefaut = -1;
63
	private int valeurVoteUtilisateur = -1;
63
	private int valeurVoteUtilisateur = -1;
64
	private int valeurVoteTotal = 0;
64
	private int valeurVoteTotal = 0;
65
	
65
	
66
 
66
 
67
	// TODO: on devrait passer un conteneur qui permet d'accéder à ces services
67
	// TODO: on devrait passer un conteneur qui permet d'accéder à ces services
68
	private VoteProtocoleService voteProtocoleService;
68
	private VoteProtocoleService voteProtocoleService;
69
 
69
 
70
	public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue, VoteProtocoleService voteProtocoleService) {
70
	public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue, VoteProtocoleService voteProtocoleService) {
71
		this.vue = vue;
71
		this.vue = vue;
72
		this.protocole = protocole;
72
		this.protocole = protocole;
73
		this.image = image;
73
		this.image = image;
74
		this.voteProtocoleService = voteProtocoleService;
74
		this.voteProtocoleService = voteProtocoleService;
-
 
75
		
-
 
76
		String nomProtocole = protocole.getNom();
-
 
77
		nomProtocole = nomProtocole.substring(0, 1).toUpperCase()+ nomProtocole.substring(1).toLowerCase();
-
 
78
		vue.getZoneProtocole().setText(nomProtocole);
75
	}
79
	}
76
 
80
 
77
	public void go(HasWidgets composite) {
81
	public void go(HasWidgets composite) {
78
		vue.ajouterAuParent(composite);
82
		vue.ajouterAuParent(composite);
79
		gererEvenements();
83
		gererEvenements();
80
		rafraichirVue();
84
		rafraichirVue();
81
	}
85
	}
82
 
86
 
83
	public void gererEvenements() {
87
	public void gererEvenements() {
84
		vue.getVotes().addClickHandler(new ClickHandler() {
88
		vue.getVotes().addClickHandler(new ClickHandler() {
85
			@Override
89
			@Override
86
			public void onClick(ClickEvent event) {
90
			public void onClick(ClickEvent event) {
87
				valeurVoteUtilisateur = vue.getValeurVote();
91
				valeurVoteUtilisateur = vue.getValeurVote();
88
				vue.afficherBoutonVoter();
92
				vue.afficherBoutonVoter();
89
				vue.afficherBoutonAnnuler();
93
				vue.afficherBoutonAnnuler();
90
				vue.masquerNbVotes();
94
				vue.masquerNbVotes();
91
			}
95
			}
92
		});
96
		});
93
 
97
 
94
		vue.getBoutonAnnuler().addClickHandler(new ClickHandler() {
98
		vue.getBoutonAnnuler().addClickHandler(new ClickHandler() {
95
			@Override
99
			@Override
96
			public void onClick(ClickEvent event) {
100
			public void onClick(ClickEvent event) {
97
				valeurVoteUtilisateur = valeurVoteDefaut;
101
				valeurVoteUtilisateur = valeurVoteDefaut;
98
				vue.masquerBoutonVoter();
102
				vue.masquerBoutonVoter();
99
				vue.masquerBoutonAnnuler();
103
				vue.masquerBoutonAnnuler();
100
				vue.afficherNbVotes();
104
				vue.afficherNbVotes();
101
				vue.reinitialiserVotes();
105
				vue.reinitialiserVotes();
102
			}
106
			}
103
		});
107
		});
104
 
108
 
105
		vue.getBoutonVoter().addClickHandler(new ClickHandler() {
109
		vue.getBoutonVoter().addClickHandler(new ClickHandler() {
106
			@Override
110
			@Override
107
			public void onClick(ClickEvent event) {
111
			public void onClick(ClickEvent event) {
108
				enregistrerVote();
112
				enregistrerVote();
109
				vue.masquerBoutonVoter();
113
				vue.masquerBoutonVoter();
110
				vue.masquerBoutonAnnuler();
114
				vue.masquerBoutonAnnuler();
111
				vue.afficherNbVotes();
115
				vue.afficherNbVotes();
112
				vue.reinitialiserVotes();
116
				vue.reinitialiserVotes();
113
				vue.afficherVotePrisEnCompte();
117
				vue.afficherVotePrisEnCompte();
114
			}
118
			}
115
		});
119
		});
116
	}
120
	}
117
 
121
 
118
	public void setValeurVoteUtilisateur(int valeurVoteUtilisateur) {
122
	public void setValeurVoteUtilisateur(int valeurVoteUtilisateur) {
119
		this.valeurVoteUtilisateur = valeurVoteUtilisateur;
123
		this.valeurVoteUtilisateur = valeurVoteUtilisateur;
120
	}
124
	}
121
 
125
 
122
	public void enregistrerVote() {
126
	public void enregistrerVote() {
123
		final VoteProtocole voteProtocole = new VoteProtocole();
127
		final VoteProtocole voteProtocole = new VoteProtocole();
124
		voteProtocole.setProtocole(this.protocole);
128
		voteProtocole.setProtocole(this.protocole);
125
		voteProtocole.setVote(valeurVoteUtilisateur);
129
		voteProtocole.setVote(valeurVoteUtilisateur);
126
		String idContributeur = CacheClient.getInstance().getUtilisateur().getId();
130
		String idContributeur = CacheClient.getInstance().getUtilisateur().getId();
127
		voteProtocole.setContributeur(idContributeur);
131
		voteProtocole.setContributeur(idContributeur);
128
		// TODO: Mettre un message de chargement pendant l'envoi du vote ?
132
		// TODO: Mettre un message de chargement pendant l'envoi du vote ?
129
		// C'est très rapide mais bon
133
		// C'est très rapide mais bon
130
		VoteProtocoleCallback vpc = new VoteProtocoleCallback() {
134
		VoteProtocoleCallback vpc = new VoteProtocoleCallback() {
131
 
135
 
132
			@Override
136
			@Override
133
			public void surRetour(Void objetRetour) {
137
			public void surRetour(Void objetRetour) {
134
				// TODO: voir si l'on affiche un message en cas de succès ?
138
				// TODO: voir si l'on affiche un message en cas de succès ?
135
				image.ajouterVoteProtocole(voteProtocole);
139
				image.ajouterVoteProtocole(voteProtocole);
136
				rafraichirVue();
140
				rafraichirVue();
137
			}
141
			}
138
 
142
 
139
		};
143
		};
140
 
144
 
141
		if (image.utilisateurAVotePourProtocole(this.protocole.getId() + "", idContributeur)) {
145
		if (image.utilisateurAVotePourProtocole(this.protocole.getId() + "", idContributeur)) {
142
			voteProtocoleService.modifierVote(image.getIdImage(), voteProtocole, vpc);
146
			voteProtocoleService.modifierVote(image.getIdImage(), voteProtocole, vpc);
143
		} else {
147
		} else {
144
			voteProtocoleService.ajouterVote(image.getIdImage(), voteProtocole, vpc);
148
			voteProtocoleService.ajouterVote(image.getIdImage(), voteProtocole, vpc);
145
		}
149
		}
146
	}
150
	}
147
 
151
 
148
	public int getValeurVoteTotal() {
152
	public int getValeurVoteTotal() {
149
		return valeurVoteTotal;
153
		return valeurVoteTotal;
150
	}
154
	}
151
 
155
 
152
	public IsWidget getVue() {
156
	public IsWidget getVue() {
153
		return vue;
157
		return vue;
154
	}
158
	}
155
 
159
 
156
	private void rafraichirVue() {
160
	private void rafraichirVue() {
157
		valeurVoteTotal = calculerMoyenneVotes();
161
		valeurVoteTotal = calculerMoyenneVotes();
158
		VoteFleurPresenteur presenteurFleur = new VoteFleurPresenteur(new VoteFleurVue());
162
		VoteFleurPresenteur presenteurFleur = new VoteFleurPresenteur(new VoteFleurVue());
159
		presenteurFleur.setNote(valeurVoteTotal);
163
		presenteurFleur.setNote(valeurVoteTotal);
160
		presenteurFleur.go(vue.getZoneFleur());
164
		presenteurFleur.go(vue.getZoneFleur());
161
		vue.rafraichir(valeurVoteTotal, image.getVotesProtocoles(protocole.getId()).size());
165
		vue.rafraichir(valeurVoteTotal, image.getVotesProtocoles(protocole.getId()).size());
162
	}
166
	}
163
 
167
 
164
	public int calculerMoyenneVotes() {
168
	public int calculerMoyenneVotes() {
165
		double valeurVote = 0;
169
		double valeurVote = 0;
166
		int nbVote = 0;
170
		int nbVote = 0;
167
		for (Iterator<String> iterator = image.getVotesProtocoles(protocole.getId()).keySet().iterator(); iterator.hasNext();) {
171
		for (Iterator<String> iterator = image.getVotesProtocoles(protocole.getId()).keySet().iterator(); iterator.hasNext();) {
168
			VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(iterator.next());
172
			VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(iterator.next());
169
			valeurVote += (double) imageCelValidationData.getVote() / 5;
173
			valeurVote += (double) imageCelValidationData.getVote() / 5;
170
			nbVote++;
174
			nbVote++;
171
		}
175
		}
172
 
176
 
173
		if (nbVote > 0) {
177
		if (nbVote > 0) {
174
			valeurVote /= nbVote;
178
			valeurVote /= nbVote;
175
			valeurVote *= 5;
179
			valeurVote *= 5;
176
		}
180
		}
177
 
181
 
178
		return (int) Math.round(valeurVote);
182
		return (int) Math.round(valeurVote);
179
	}
183
	}
180
}
184
}