Subversion Repositories eFlore/Applications.del

Rev

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