/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/resultats/votes/MoyenneVotePresenteur.java |
---|
1,34 → 1,64 |
package org.tela_botanica.del.client.vues.rechercheimages.resultats.votes; |
import java.util.Iterator; |
import java.util.List; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.modeles.Image; |
import org.tela_botanica.del.client.modeles.Protocole; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import org.tela_botanica.del.client.modeles.VoteProtocole; |
import org.tela_botanica.del.client.services.rest.VoteProtocoleService; |
import org.tela_botanica.del.client.utils.MockDatasource; |
import com.google.gwt.event.dom.client.ChangeEvent; |
import com.google.gwt.event.dom.client.ChangeHandler; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.HasChangeHandlers; |
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 MoyenneVotePresenteur { |
private MoyenneVoteVue vue; |
public interface Vue extends IsWidget { |
public HasClickHandlers getBoutonVoter(); |
public HasClickHandlers getBoutonAnnuler(); |
public HasText getNbVotes(); |
public HasClickHandlers getVotes(); |
public int getValeurVote(); |
public void afficherBoutonVoter(); |
public void afficherBoutonAnnuler(); |
public void masquerBoutonVoter(); |
public void masquerBoutonAnnuler(); |
public void afficherNbVotes(); |
public void masquerNbVotes(); |
public void reinitialiserVotes(); |
public void rafraichir(int moyenneVote, int nbVotes); |
public void ajouterAuParent(HasWidgets composite); |
} |
private Vue vue; |
private Protocole protocole; |
private final VoteProtocoleService voteProtocoleService = MockDatasource.getInstance(); |
private String idImage; |
private final MockDatasource validationService = MockDatasource.getInstance(); |
private Image image; |
public MoyenneVotePresenteur(List<VoteProtocole> validationDatas, String idImage, Protocole protocole) { |
vue = new MoyenneVoteVue(validationDatas); |
private int valeurVoteDefaut = -1; |
private int valeurVoteUtilisateur = -1; |
private int valeurVoteTotal = 0; |
public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue) { |
this.vue = vue; |
this.protocole = protocole; |
this.idImage = idImage; |
this.image = image; |
} |
public void go(HasWidgets container) { |
container.add(vue); |
public void go(HasWidgets composite) { |
vue.ajouterAuParent(composite); |
gererEvenements(); |
rafraichirVue(); |
} |
public void gererEvenements() { |
35,6 → 65,7 |
vue.getVotes().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
valeurVoteUtilisateur = vue.getValeurVote(); |
vue.afficherBoutonVoter(); |
vue.afficherBoutonAnnuler(); |
vue.masquerNbVotes(); |
44,6 → 75,7 |
vue.getBoutonAnnuler().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
valeurVoteUtilisateur = valeurVoteDefaut; |
vue.masquerBoutonVoter(); |
vue.masquerBoutonAnnuler(); |
vue.afficherNbVotes(); |
54,7 → 86,6 |
vue.getBoutonVoter().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
enregistrerVote(); |
vue.masquerBoutonVoter(); |
vue.masquerBoutonAnnuler(); |
64,12 → 95,48 |
}); |
} |
public void setValeurVoteUtilisateur(int valeurVoteUtilisateur) { |
this.valeurVoteUtilisateur = valeurVoteUtilisateur; |
} |
public void enregistrerVote() { |
VoteProtocole voteProtocole = new VoteProtocole(); |
voteProtocole.setProtocole(this.protocole); |
voteProtocoleService.saveVote(idImage, voteProtocole); |
voteProtocole.setVote(valeurVoteUtilisateur); |
voteProtocole.setContributeur(CacheClient.getInstance().getUtilisateur().getId()); |
// voteProtocoleService.saveVote(idImage, voteProtocole); |
// TODO: sauver vote asynchrone |
image.ajouterVoteProtocole(voteProtocole); |
rafraichirVue(); |
} |
public int getValeurVoteTotal() { |
return valeurVoteTotal; |
} |
public IsWidget getVue() { |
return vue; |
} |
private void rafraichirVue() { |
valeurVoteTotal = calculerMoyenneVotes(); |
vue.rafraichir(valeurVoteTotal, image.getVotesProtocoles(protocole.getId()).size()); |
} |
public int calculerMoyenneVotes() { |
double valeurVote = 0; |
int 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++; |
} |
List<VoteProtocole> observationValidationDatas = validationService.getVotePourImageEtProtocole(idImage, protocole.getNom()); |
vue.rafraichir(observationValidationDatas); |
if (nbVote > 0) { |
valeurVote /= nbVote; |
valeurVote *= 5; |
} |
return (int)Math.round(valeurVote); |
} |
} |
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/resultats/votes/MoyenneVoteVue.java |
---|
9,6 → 9,7 |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.HasChangeHandlers; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.uibinder.client.UiBinder; |
import com.google.gwt.uibinder.client.UiField; |
17,10 → 18,11 |
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.Widget; |
public class MoyenneVoteVue extends Composite { |
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") |
40,16 → 42,13 |
@UiField |
Button boutonVoter, boutonAnnuler; |
protected MoyenneVoteVue(List<VoteProtocole> validationDatas) { |
public MoyenneVoteVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
votes = new Rating(0, 5); |
votes.setReadOnly(false); |
voter.add(votes); |
masquerBoutonAnnuler(); |
masquerBoutonVoter(); |
rafraichir(validationDatas); |
} |
public HasClickHandlers getBoutonVoter() { |
68,6 → 67,10 |
return votes; |
} |
public int getValeurVote() { |
return votes.getValue(); |
} |
public void afficherBoutonVoter() { |
boutonVoter.setVisible(true); |
} |
96,19 → 99,14 |
votes.setValue(valeurOrigine); |
} |
public void rafraichir(List<VoteProtocole> validationDatas) { |
int meanVote = 0; |
int nbVote = 0; |
for (VoteProtocole imageCelValidationData : validationDatas) { |
meanVote += imageCelValidationData.getVote(); |
nbVote++; |
} |
if (nbVote > 0) { |
meanVote /= nbVote; |
} |
votes.setValue(nbVote); |
valeurOrigine = nbVote; |
nbVotes.setText(String.valueOf(validationDatas.size()) + " " +I18n.getVocabulary().nbVotes()); |
public void rafraichir(int moyenneVote, int nombreVotes) { |
valeurOrigine = moyenneVote; |
nbVotes.setText(nombreVotes+" "+I18n.getVocabulary().nbVotes()); |
votes.setValue(moyenneVote); |
} |
@Override |
public void ajouterAuParent(HasWidgets composite) { |
composite.add(this); |
} |
} |
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/resultats/images/ImagePresenteur.java |
---|
1,5 → 1,6 |
package org.tela_botanica.del.client.vues.rechercheimages.resultats.images; |
import java.util.HashMap; |
import java.util.List; |
import org.tela_botanica.del.client.cache.CacheClient; |
26,6 → 27,7 |
import org.tela_botanica.del.client.services.rest.ImageServiceConcret; |
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback; |
import org.tela_botanica.del.client.vues.rechercheimages.resultats.votes.MoyenneVotePresenteur; |
import org.tela_botanica.del.client.vues.rechercheimages.resultats.votes.MoyenneVoteVue; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
58,7 → 60,7 |
private Vue vue; |
private final Image image; |
private boolean detailsOpen = false; |
private boolean detailsOuverts = false; |
private Protocole protocole; |
72,15 → 74,15 |
composite.add(vue.asWidget()); |
vue.loadImage(image); |
new MetadonneesPresenteur(new MetadonneesVue(), image.getObservation(), ModeRecherche.MODE_IMAGE).go(vue.getMetadonnees()); |
loadValidationData(); |
chargerDonneesValidation(); |
gererEvenements(); |
} |
private void loadValidationData() { |
private void chargerDonneesValidation() { |
vue.getZoneVoter().clear(); |
List<VoteProtocole> observationValidationDatas = image.getVotesProtocoles(protocole.getId()); |
HashMap<String, VoteProtocole> observationValidationDatas = image.getVotesProtocoles(protocole.getId()); |
if(observationValidationDatas != null) { |
new MoyenneVotePresenteur(observationValidationDatas, image.getIdImage(), protocole).go(vue.getZoneVoter()); |
new MoyenneVotePresenteur(image, protocole, new MoyenneVoteVue()).go(vue.getZoneVoter()); |
} |
} |
88,7 → 90,7 |
CacheClient.getInstance().setImageCourante(image); |
final Observation obs = image.getObservation(); |
// charge toutes les images de l'observation associee à l'observation en cours |
// charge toutes les images de l'observation associée à l'observation en cours |
ImageService imageService = new ImageServiceConcret(); |
imageService.getImagesParObservation(obs.getId(), new ImagesParTaxonCallback() { |
144,7 → 146,7 |
public void onVoirDetailsImage(EvenementVoirDetailsImage event) { |
if (image.getIdImage().equals(event.getImage().getIdImage())) { |
if (!detailsOpen) { |
if (!detailsOuverts) { |
afficherDetails(); |
} else { |
cacherDetails(); |
159,7 → 161,7 |
@Override |
public void onChangementProtocole(EvenementChangementProtocole event) { |
setProtocole(event.getProtocole()); |
loadValidationData(); |
chargerDonneesValidation(); |
} |
}); |
} |
166,16 → 168,16 |
public void cacherDetails() { |
vue.cacherZoneCache(); |
detailsOpen = false; |
detailsOuverts = false; |
} |
public void afficherDetails() { |
vue.afficherZoneCache(); |
detailsOpen = true; |
detailsOuverts = true; |
} |
public boolean isDetailsOpen() { |
return detailsOpen; |
return detailsOuverts; |
} |
public Protocole getProtocole() { |