Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1471 → Rev 1535

/tags/v1.1-helium/src/org/tela_botanica/del/client/composants/votes/moyennevotes/moyenne.css
New file
0,0 → 1,72
.moyenne {
background: none repeat scroll 0 0 #333333;
display: block;
margin-left: -5px;
margin-top: -7px;
padding: 5px;
width: 116px;
}
 
.petit {
font-size: 11px;
color: #AAA
}
 
.barreVote {
padding: 0 5px 0 5px
}
 
.validerVote {
font-size: 11px;
margin-left: 5px;
float:left
}
 
.zoneBoutonsVote {
position:absolute;
}
 
.annuler {
background: url("./img/cancel.png") no-repeat;
border: none;
padding-left: 16px;
padding-top: 16px;
margin-left: 5px;
cursor: pointer;
}
 
.zoneNoteGlobale {
background: none repeat scroll 0 0 #333333;
margin-left: 122px;
margin-top: -5px;
position: absolute;
white-space: nowrap;
width: 113px;
height:29px;
padding:5px;
}
 
.zoneFleur {
position:absolute;
top:5px;
margin-left:86px;
}
 
.protocole {
width:124px;
white-space:nowrap;
text-overflow:ellipsis;
overflow:hidden;
}
 
.zoneVoter {
background: none repeat scroll 0 0 #8EB533;
color: white;
font-size: 15px;
height: 29px;
margin-left: -5px;
margin-top: -18px;
padding: 10px 5px 0 39px;
position: absolute;
width: 82px;
}
/tags/v1.1-helium/src/org/tela_botanica/del/client/composants/votes/moyennevotes/MoyenneVoteVue.ui.xml
New file
0,0 → 1,28
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator" ui:generateLocales="default">
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="moyenne.css" />
 
<g:HTMLPanel styleName="{style.moyenne}">
<g:HTMLPanel styleName="{style.zoneNoteGlobale}">
<g:Label styleName="petit enligne">Note générale</g:Label><g:Label ui:field="noteGenerale" styleName="petit enligne"/>
<g:Label ui:field="nbVotes" styleName="{style.petit}"/>
<g:HTMLPanel ui:field="zoneFleur" styleName="{style.zoneFleur}"></g:HTMLPanel>
</g:HTMLPanel>
<g:HorizontalPanel>
<g:Label styleName="{style.petit} {style.protocole}" ui:field="protocole" text="protocole"/>
</g:HorizontalPanel>
<g:Label ui:field="zoneVoter" styleName="{style.zoneVoter}">Votez !</g:Label>
<g:HorizontalPanel ui:field="zoneDeVote">
<g:FocusPanel ui:field="voter" styleName="{style.barreVote}"/>
<g:HTMLPanel ui:field="votePrisEnCompte"><g:Label text="{constants.votePrisEnCompte}"></g:Label></g:HTMLPanel>
<g:HTMLPanel ui:field="voteModifie"><g:Label text="{constants.voteModifie}"></g:Label></g:HTMLPanel>
<g:HTMLPanel ui:field="voteSupprime"><g:Label text="{constants.voteSupprime}"></g:Label></g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneBoutonsVote}">
<g:Button ui:field="boutonAnnuler" title="{constants.supprimerVote}" styleName="{style.annuler}"></g:Button>
</g:HTMLPanel>
</g:HorizontalPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.1-helium/src/org/tela_botanica/del/client/composants/votes/moyennevotes/MoyenneVotePresenteur.java
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);
}
}
/tags/v1.1-helium/src/org/tela_botanica/del/client/composants/votes/moyennevotes/MoyenneVoteVue.java
New file
0,0 → 1,171
package org.tela_botanica.del.client.composants.votes.moyennevotes;
 
import org.cobogw.gwt.user.client.ui.Rating;
import org.tela_botanica.del.client.composants.votes.barrerepartition.InfoBulleAnim;
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasMouseMoveHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MoyenneVoteVue extends Composite implements MoyenneVotePresenteur.Vue {
 
// Annotation can be used to change the name of the associated xml file
// @UiTemplate("MoyenneVoteVue.ui.xml")
interface MyUiBinder extends UiBinder<Widget, MoyenneVoteVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private Rating votes;
private int valeurOrigine;
private InfoBulleAnim animerVotePrisEnCompte;
private InfoBulleAnim animerVoteModifie;
private InfoBulleAnim animerVoteSupprime;
@UiField
FocusPanel voter;
 
@UiField
Panel votePrisEnCompte, voteModifie, voteSupprime, zoneFleur;
@UiField
Label nbVotes, protocole, noteGenerale;
 
@UiField
Button boutonAnnuler;
@UiField
Label zoneVoter;
public MoyenneVoteVue() {
initWidget(uiBinder.createAndBindUi(this));
votes = new Rating(0, 5);
votes.setReadOnly(false);
voter.add(votes);
masquerBoutonAnnuler();
votePrisEnCompte.setVisible(false);
animerVotePrisEnCompte = new InfoBulleAnim(votePrisEnCompte);
animerVoteModifie = new InfoBulleAnim(voteModifie);
animerVoteSupprime = new InfoBulleAnim(voteSupprime);
}
public HasClickHandlers getBoutonAnnuler() {
return boutonAnnuler;
}
public HasText getNbVotes() {
return nbVotes;
}
public HasClickHandlers getVotes() {
return votes;
}
public int getValeurVote() {
return votes.getValue();
}
 
public void afficherBoutonAnnuler() {
boutonAnnuler.setVisible(true);
}
public void masquerBoutonAnnuler() {
boutonAnnuler.setVisible(false);
}
public void afficherNbVotes () {
nbVotes.setVisible(true);
}
public void masquerNbVotes () {
nbVotes.setVisible(false);
}
public void reinitialiserVotes() {
votes.setValue(valeurOrigine);
}
public void rafraichir(int voteUtilisateur, int nombreVotes) {
valeurOrigine = voteUtilisateur;
String valeurVote = nombreVotes+" "+I18n.getVocabulary().nbVotes();
if (nombreVotes > 1) {
valeurVote += "s";
}
nbVotes.setText(valeurVote);
votes.setValue(voteUtilisateur);
}
 
@Override
public void ajouterAuParent(HasWidgets composite) {
composite.add(this);
}
@Override
public void afficherVotePrisEnCompte() {
votePrisEnCompte.setStyleName("votePrisEnCompteOui");
animerVotePrisEnCompte.run(2000);
}
public HasWidgets getZoneFleur() {
return zoneFleur;
}
public HasText getZoneProtocole() {
return protocole;
}
public void setNoteGenerale(int note) {
noteGenerale.setText(" : " + note);
}
@Override
public void setNoteGeneraleToolTip(double valeurVoteTotalPrecise) {
double valeurArrondie = (double)Math.round(valeurVoteTotalPrecise * 1000) / 1000;
zoneFleur.setTitle(I18n.getVocabulary().votesMoyennePrecise()+valeurArrondie);
}
public void afficherVoteModifie() {
voteModifie.setStyleName("votePrisEnCompteOui");
animerVoteModifie.run(2000);
}
@Override
public void afficherVoteSupprime() {
voteSupprime.setStyleName("voteSupprime");
animerVoteSupprime.run(2000);
}
public HasMouseMoveHandlers getZoneVoter() {
return zoneVoter;
}
public void masquerZoneVoter() {
zoneVoter.setVisible(false);
}
@Override
public void desactiverInteractionVote() {
votes.setReadOnly(true);
boutonAnnuler.setEnabled(false);
boutonAnnuler.addStyleName("elementMasque");
votes.addStyleName("elementMasque");
}
@Override
public void activerInteractionVote() {
votes.setReadOnly(false);
boutonAnnuler.setEnabled(true);
boutonAnnuler.removeStyleName("elementMasque");
votes.removeStyleName("elementMasque");
}
}