Subversion Repositories eFlore/Applications.del

Rev

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

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