Subversion Repositories eFlore/Applications.del

Rev

Rev 823 | Rev 959 | 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.VoteProtocoleServiceConcret;
11
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback;
939 benjamin 12
 
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;
16
import com.google.gwt.user.client.ui.HasText;
9 benjamin 17
import com.google.gwt.user.client.ui.HasWidgets;
629 aurelien 18
import com.google.gwt.user.client.ui.IsWidget;
9 benjamin 19
 
14 benjamin 20
public class MoyenneVotePresenteur {
9 benjamin 21
 
629 aurelien 22
	public interface Vue extends IsWidget {
23
		public HasClickHandlers getBoutonVoter();
939 benjamin 24
 
629 aurelien 25
		public HasClickHandlers getBoutonAnnuler();
939 benjamin 26
 
629 aurelien 27
		public HasText getNbVotes();
939 benjamin 28
 
629 aurelien 29
		public HasClickHandlers getVotes();
939 benjamin 30
 
629 aurelien 31
		public int getValeurVote();
939 benjamin 32
 
629 aurelien 33
		public void afficherBoutonVoter();
939 benjamin 34
 
629 aurelien 35
		public void afficherBoutonAnnuler();
939 benjamin 36
 
629 aurelien 37
		public void masquerBoutonVoter();
939 benjamin 38
 
629 aurelien 39
		public void masquerBoutonAnnuler();
939 benjamin 40
 
629 aurelien 41
		public void afficherNbVotes();
939 benjamin 42
 
43
		public void masquerNbVotes();
44
 
629 aurelien 45
		public void reinitialiserVotes();
939 benjamin 46
 
629 aurelien 47
		public void rafraichir(int moyenneVote, int nbVotes);
939 benjamin 48
 
629 aurelien 49
		public void ajouterAuParent(HasWidgets composite);
50
	}
939 benjamin 51
 
629 aurelien 52
	private Vue vue;
423 gduche 53
	private Protocole protocole;
629 aurelien 54
	private Image image;
939 benjamin 55
 
629 aurelien 56
	private int valeurVoteDefaut = -1;
57
	private int valeurVoteUtilisateur = -1;
58
	private int valeurVoteTotal = 0;
939 benjamin 59
 
60
	// TODO: on devrait passer un conteneur qui permet d'accéder à ces services
823 aurelien 61
	private VoteProtocoleService voteProtocoleService = new VoteProtocoleServiceConcret();
939 benjamin 62
 
629 aurelien 63
	public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue) {
64
		this.vue = vue;
423 gduche 65
		this.protocole = protocole;
629 aurelien 66
		this.image = image;
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
}