Subversion Repositories eFlore/Applications.del

Rev

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