New file |
0,0 → 1,267 |
package org.tela_botanica.del.client.composants.votes.moyennevotes; |
|
import java.util.Iterator; |
|
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur; |
import org.tela_botanica.del.client.composants.votefleur.VoteFleurVue; |
import org.tela_botanica.del.client.modeles.Image; |
import org.tela_botanica.del.client.modeles.Protocole; |
import org.tela_botanica.del.client.modeles.VoteProtocole; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur; |
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur; |
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire; |
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.GestionnaireEvenementSuppressionCommentaire; |
import org.tela_botanica.del.client.services.rest.VoteProtocoleService; |
import org.tela_botanica.del.client.services.rest.async.AjoutVoteProtocoleCallback; |
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback; |
|
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.event.dom.client.HasMouseMoveHandlers; |
import com.google.gwt.event.dom.client.MouseMoveEvent; |
import com.google.gwt.event.dom.client.MouseMoveHandler; |
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 MoyenneVotePresenteur { |
|
public interface Vue extends IsWidget { |
public HasClickHandlers getBoutonAnnuler(); |
|
public HasClickHandlers getVotes(); |
|
public int getValeurVote(); |
|
public void afficherBoutonAnnuler(); |
|
public void masquerBoutonAnnuler(); |
|
public void afficherNbVotes(); |
|
public void masquerNbVotes(); |
|
public void reinitialiserVotes(); |
|
public void rafraichir(int moyenneVote, int nbVotes); |
|
public void ajouterAuParent(HasWidgets composite); |
|
public void afficherVotePrisEnCompte(); |
|
public HasWidgets getZoneFleur(); |
|
public HasText getZoneProtocole(); |
|
public void setNoteGenerale(int note); |
|
public void afficherVoteModifie(); |
|
public HasMouseMoveHandlers getZoneVoter(); |
public void masquerZoneVoter(); |
|
public void setNoteGeneraleToolTip(double valeurVoteTotalPrecise); |
|
void desactiverInteractionVote(); |
|
void activerInteractionVote(); |
|
void afficherVoteSupprime(); |
} |
|
private Vue vue; |
private Protocole protocole; |
private Image image; |
|
private int valeurVoteDefaut = -1; |
private int valeurVoteUtilisateur = -1; |
private int valeurVoteTotal = 0; |
private double valeurVoteTotalPrecise = 0.0; |
|
// TODO: on devrait passer un conteneur qui permet d'accéder à ces services |
private VoteProtocoleService voteProtocoleService; |
|
public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue, |
VoteProtocoleService voteProtocoleService) { |
this.vue = vue; |
this.protocole = protocole; |
this.image = image; |
this.voteProtocoleService = voteProtocoleService; |
|
String nomProtocole = protocole.getNom(); |
nomProtocole = nomProtocole.substring(0, 1).toUpperCase() |
+ nomProtocole.substring(1).toLowerCase(); |
vue.getZoneProtocole().setText(nomProtocole); |
} |
|
public void go(HasWidgets composite) { |
vue.ajouterAuParent(composite); |
gererEvenements(); |
rafraichirVue(); |
} |
|
public void gererEvenements() { |
|
vue.getZoneVoter().addMouseMoveHandler(new MouseMoveHandler() { |
|
@Override |
public void onMouseMove(MouseMoveEvent event) { |
vue.masquerZoneVoter(); |
} |
}); |
|
vue.getVotes().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
valeurVoteUtilisateur = vue.getValeurVote(); |
enregistrerVote(); |
vue.afficherBoutonAnnuler(); |
vue.masquerNbVotes(); |
} |
}); |
|
vue.getBoutonAnnuler().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
valeurVoteUtilisateur = valeurVoteDefaut; |
vue.masquerBoutonAnnuler(); |
supprimerVote(); |
vue.afficherNbVotes(); |
vue.reinitialiserVotes(); |
} |
}); |
|
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() { |
@Override |
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) { |
rafraichirVue(); |
} |
}); |
} |
|
public void setValeurVoteUtilisateur(int valeurVoteUtilisateur) { |
this.valeurVoteUtilisateur = valeurVoteUtilisateur; |
} |
|
public void enregistrerVote() { |
vue.desactiverInteractionVote(); |
final VoteProtocole voteProtocole = new VoteProtocole(); |
voteProtocole.setProtocole(this.protocole); |
voteProtocole.setVote(valeurVoteUtilisateur); |
String idContributeur = CacheClient.getInstance().getUtilisateur() |
.getId(); |
voteProtocole.setContributeur(idContributeur); |
|
//TODO: ceci devrait pouvoir être factorisé |
if (image.utilisateurAVotePourProtocole(this.protocole.getId() + "", |
idContributeur)) { |
voteProtocole.setId(image.getVotesProtocoles(this.protocole.getId()+"").get(idContributeur).getId()); |
VoteProtocoleCallback vpc = new VoteProtocoleCallback() { |
@Override |
public void surRetour(Void objetRetour) { |
image.ajouterVoteProtocole(voteProtocole); |
rafraichirVue(); |
vue.afficherVoteModifie(); |
vue.activerInteractionVote(); |
} |
}; |
voteProtocoleService.modifierVote(image.getIdImage(), |
voteProtocole, vpc); |
} else { |
AjoutVoteProtocoleCallback vpc = new AjoutVoteProtocoleCallback() { |
@Override |
public void surRetour(String idVote) { |
voteProtocole.setId(idVote); |
image.ajouterVoteProtocole(voteProtocole); |
rafraichirVue(); |
vue.afficherVotePrisEnCompte(); |
vue.activerInteractionVote(); |
} |
}; |
voteProtocoleService.ajouterVote(image.getIdImage(), voteProtocole, |
vpc); |
} |
} |
|
public void supprimerVote() { |
vue.desactiverInteractionVote(); |
final String idContributeur = CacheClient.getInstance().getUtilisateur() |
.getId(); |
final VoteProtocole voteProtocole = image.getVotesProtocoles(protocole.getId()).get(idContributeur); |
VoteProtocoleCallback vpc = new VoteProtocoleCallback() { |
@Override |
public void surRetour(Void objetRetour) { |
// TODO: voir si l'on affiche un message en cas de succès ? |
image.supprimerVoteProtocole(protocole.getId() + "", idContributeur); |
rafraichirVue(); |
vue.afficherVoteSupprime(); |
vue.activerInteractionVote(); |
} |
|
}; |
voteProtocoleService.supprimerVote(image.getIdImage(), voteProtocole, vpc); |
} |
|
public int getValeurVoteTotal() { |
return valeurVoteTotal; |
} |
|
public IsWidget getVue() { |
return vue; |
} |
|
private void rafraichirVue() { |
valeurVoteTotal = calculerMoyenneVotesArrondie(); |
valeurVoteTotalPrecise = calculerMoyenneVotes(); |
VoteProtocole voteProtocole = image.getVotesProtocoles( |
protocole.getId()).get( |
CacheClient.getInstance().getUtilisateur().getId()); |
int voteUtilisateur = 0; |
if (voteProtocole != null) { |
voteUtilisateur = voteProtocole.getVote(); |
vue.masquerZoneVoter(); |
} |
|
if(image.utilisateurAVotePourProtocole(protocole.getId()+"", CacheClient.getInstance().getUtilisateur().getId())) { |
vue.afficherBoutonAnnuler(); |
} |
|
VoteFleurPresenteur presenteurFleur = new VoteFleurPresenteur( |
new VoteFleurVue()); |
presenteurFleur.setNote(valeurVoteTotal); |
vue.setNoteGenerale(valeurVoteTotal); |
vue.setNoteGeneraleToolTip(valeurVoteTotalPrecise); |
presenteurFleur.go(vue.getZoneFleur()); |
vue.rafraichir(voteUtilisateur, |
image.getVotesProtocoles(protocole.getId()).size()); |
} |
|
public double calculerMoyenneVotes() { |
double valeurVote = 0; |
double nbVote = 0; |
for (Iterator<String> iterator = image |
.getVotesProtocoles(protocole.getId()).keySet().iterator(); iterator |
.hasNext();) { |
VoteProtocole imageCelValidationData = image.getVotesProtocoles( |
protocole.getId()).get(iterator.next()); |
valeurVote += (double) imageCelValidationData.getVote() / 5; |
nbVote++; |
} |
|
if (nbVote > 0) { |
valeurVote /= nbVote; |
valeurVote *= 5; |
} |
|
return valeurVote; |
} |
|
public int calculerMoyenneVotesArrondie() { |
double valeurVote = calculerMoyenneVotes(); |
return (int) Math.round(valeurVote); |
} |
} |