Subversion Repositories eFlore/Applications.del

Rev

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