New file |
0,0 → 1,171 |
package org.tela_botanica.del.client.composants.votes.barrerepartition; |
|
import java.util.Date; |
|
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.modeles.MoyenneVote; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import org.tela_botanica.del.client.modeles.VoteDetermination; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination; |
import org.tela_botanica.del.client.services.CalculVoteDeterminationService; |
import org.tela_botanica.del.client.services.rest.VoteDeterminationService; |
import org.tela_botanica.del.client.services.rest.async.AjoutVoteDeterminationCallback; |
|
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
|
public class BarreRepartitionVotePresenteur { |
|
public interface Vue extends IsWidget { |
public void afficherVotes(int pourcentage, String NomTaxon, String auteur, boolean estPropositionInitiale); |
public HasClickHandlers getBoutonOui(); |
public HasClickHandlers getBoutonNon(); |
public void desactiverBoutons(); |
public void activerBoutons(); |
public void setVoteOuiEffectue(); |
public void setVoteNonEffectue(); |
public void afficherVotePrisEnCompte(boolean b); |
public void afficherVoteModifie(boolean b); |
public void toggleNomEspece(); |
public HasText getScore(); |
} |
|
private Vue vue; |
private MoyenneVote moyenneVote; |
|
// TODO: classe conteneur qui est passé en paramètre au constructeur |
private VoteDeterminationService voteDeterminationService; |
|
public BarreRepartitionVotePresenteur(Vue vue, VoteDeterminationService voteDeterminationService) { |
this.vue = vue; |
this.voteDeterminationService = voteDeterminationService; |
gererEvenements(); |
} |
|
public void go(HasWidgets container) { |
container.add(vue.asWidget()); |
} |
|
public void afficherVotes(MoyenneVote moyenneVote) { |
|
this.moyenneVote = moyenneVote; |
int score = moyenneVote.getScore(); |
|
String intitule = moyenneVote.getIntituleAssocie(); |
PropositionDetermination proposition = moyenneVote.getPropositionAssociee(); |
boolean estPropositionInitiale = false; |
if (proposition != null) { |
estPropositionInitiale = moyenneVote.getPropositionAssociee().estPropositionInitiale(); |
} |
vue.afficherVotes(score, intitule, moyenneVote.getPropositionAssociee().getAuteur(), estPropositionInitiale); |
afficherValeurVoteUtilisateur(); |
} |
|
public void afficherValeurVoteUtilisateur() { |
String idUtilisateur = CacheClient.getInstance().getUtilisateur().getId(); |
if(moyenneVote.getPropositionAssociee().utilisateurAVotePourDetermination(idUtilisateur)) { |
boolean valeurVote = (moyenneVote.getPropositionAssociee().getVotesDeterminations().get(idUtilisateur).getVote() == 1) ? true : false; |
if(valeurVote) { |
vue.setVoteOuiEffectue(); |
} else { |
vue.setVoteNonEffectue(); |
} |
} |
} |
|
public Vue getBarreRepartitionVoteVue() { |
return vue; |
} |
|
public MoyenneVote getMoyenneVote() { |
return moyenneVote; |
} |
|
public void gererEvenements() { |
|
vue.getBoutonOui().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
voter(true); |
|
} |
}); |
|
vue.getBoutonNon().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
voter(false); |
|
} |
}); |
} |
|
private void surVoteDetermination(final VoteDetermination vd) { |
if (vd.getPropositionDetermination().equals(moyenneVote.getPropositionAssociee())) { |
AjoutVoteDeterminationCallback vdc = new AjoutVoteDeterminationCallback() { |
|
@Override |
public void surErreur(String messageErreur) { |
Window.alert(messageErreur); |
vue.activerBoutons(); |
} |
|
@Override |
public void surRetour(Void objetRetour) { |
moyenneVote.getPropositionAssociee().ajouterVoteDetermination(vd); |
moyenneVote = CalculVoteDeterminationService.calculerVoteDetermination(moyenneVote.getPropositionAssociee()); |
afficherVotes(moyenneVote); |
vue.activerBoutons(); |
boolean valeurVote = (vd.getVote() == 1) ? true : false; |
if(valeurVote) { |
vue.setVoteOuiEffectue(); |
} else { |
vue.setVoteNonEffectue(); |
} |
// l'évènement n'est lancé que si le vote est validé |
BusEvenementiel.getInstance().fireEvent(new EvenementVoteDetermination(vd)); |
} |
}; |
|
if (moyenneVote.getPropositionAssociee().utilisateurAVotePourDetermination(vd.getContributeur())) { |
|
voteDeterminationService.modifierVote(vd, vdc); |
vue.afficherVoteModifie(vd.getVote()==1); |
} else { |
|
voteDeterminationService.ajouterVote(vd, vdc); |
vue.afficherVotePrisEnCompte(vd.getVote()==1); |
} |
} |
} |
|
public void toggleNomEspece() { |
vue.toggleNomEspece(); |
} |
|
public void voter(boolean oui) { |
|
VoteDetermination vd = new VoteDetermination(); |
vd.setPropositionDetermination(moyenneVote.getPropositionAssociee()); |
vd.setContributeur(CacheClient.getInstance().getUtilisateur().getId()); |
vd.setDate(new Date()); |
|
int valeurVote = oui ? 1 : 0; |
vd.setVote(valeurVote); |
vd.setId(CacheClient.getInstance().getUtilisateur().getId()); |
|
if (oui) { |
vue.setVoteOuiEffectue(); |
} else { |
vue.setVoteNonEffectue(); |
} |
vue.desactiverBoutons(); |
surVoteDetermination(vd); |
} |
} |