Subversion Repositories eFlore/Applications.del

Rev

Rev 1833 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.del.client.composants.votes.details;

import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.utils.StringUtils;

import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
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 DetailListeVotesDeterminationVue extends Composite implements DetailListeVotesDeterminationPresenteur.Vue {
        
        private static DetailListeVotesDeterminationVueUIiBinder uiBinder = GWT.create(DetailListeVotesDeterminationVueUIiBinder.class);

        interface DetailListeVotesDeterminationVueUIiBinder extends UiBinder<Widget, DetailListeVotesDeterminationVue> {
        };
        
        @UiField
        HTMLPanel titre, auteur, aucuneDonnees, detailVotePour, detailVoteContre;
        
        @UiField
        Label scorePour, scoreContre, date;
        
        @UiField
        Panel panneauChargement;

        public DetailListeVotesDeterminationVue() {
                initWidget(uiBinder.createAndBindUi(this));
        }
        
        public String formaterDate(String dateNonFormatee) {
                try {
                        DateTimeFormat parseur = DateTimeFormat.getFormat("yyyy-dd-MM HH:mm:ss");
                        Date date = parseur.parse(dateNonFormatee);
                        
                        DateTimeFormat formateur = DateTimeFormat.getFormat("dd/MM/yyyy");
                        return formateur.format(date);
                } catch (IllegalArgumentException e) {
                        return "";
                }
        }
        
        public String formaterDateQuiEstVraimentUneDateEtPasUnString(Date dateNonFormatee) {
                String retour = "";
                try {
                        DateTimeFormat formateur = DateTimeFormat.getFormat("dd/MM/yyyy");
                        retour = formateur.format(dateNonFormatee);
                } catch (IllegalArgumentException e) {
                }
                return retour;
        }

        @Override
        public void afficherVotes(PropositionDetermination propositionDetermination) {
                
                HTML htmlTitre = new HTML(propositionDetermination.getEspece());
                titre.add(htmlTitre);
                
                HTML htmlAuteur = new HTML(I18n.getVocabulary().proposePar()+propositionDetermination.getAuteur());
                auteur.add(htmlAuteur);

                Date datePropDet = propositionDetermination.getDate();
                String date = formaterDateQuiEstVraimentUneDateEtPasUnString(datePropDet);
                this.date.setText(date);
                
                Map<String, VoteDetermination> listeVotes = propositionDetermination.getVotesDeterminations();
                
                int votesAnonymesPour = 0;
                int votesAnonymesContre = 0;
                
                float votesPour = 0;
                float totalVotes = listeVotes.size();
                
                for (Iterator<String> iterator = listeVotes.keySet().iterator(); iterator.hasNext();) {
                        VoteDetermination voteDetermination = listeVotes.get(iterator.next());
                        if (voteDetermination.getVote() == 1) {
                                //Votes pour
                                if (voteDetermination.getAuteur() != null) {
                                        ajouterVote(voteDetermination, detailVotePour);
                                } else {
                                        votesAnonymesPour++;
                                }
                                votesPour++;
                        } else {
                                //Votes contre
                                if (voteDetermination.getAuteur() != null) {
                                        ajouterVote(voteDetermination, detailVoteContre);
                                } else {
                                        votesAnonymesContre++;
                                }
                        }
                }
                
                float moyennePour = (votesPour/totalVotes*100);
                scorePour.setText(StringUtils.formaterNombre(moyennePour, 2)+"%");
                scoreContre.setText(StringUtils.formaterNombre(100 - moyennePour, 2)+"%");
                
                if (votesAnonymesPour > 0) {
                        LigneVotePresenteur presenteurVote= new LigneVotePresenteur(new LigneVoteVue(), votesAnonymesPour);
                        presenteurVote.go(detailVotePour);
                }
                
                if (votesAnonymesContre > 0) {
                        LigneVotePresenteur presenteurVote= new LigneVotePresenteur(new LigneVoteVue(), votesAnonymesContre);
                        presenteurVote.go(detailVoteContre);
                }
        }
        
        public void ajouterVote(VoteDetermination vote, HasWidgets panel) {
                LigneVotePresenteur presenteurVote = new LigneVotePresenteur(new LigneVoteVue(), vote);
                presenteurVote.go(panel);
        }
        
        @Override
        public void startChargement() {
                panneauChargement.setHeight((this.getOffsetHeight()/2)+"px");
                panneauChargement.setWidth((this.getOffsetWidth()/2)+"px");
                panneauChargement.setVisible(true);
        }

        @Override
        public void stopChargement() {
                panneauChargement.setVisible(false);
        }

        @Override
        public void afficherAucuneDonnees() {
                aucuneDonnees.setVisible(true);
        }
}