Subversion Repositories eFlore/Applications.del

Rev

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

package org.tela_botanica.del.client.services;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;



public class CalculVoteDeterminationService {
        
        public static List<MoyenneVote> calculerVoteDeterminationPlusPopulaire(List<PropositionDetermination> propositions) {
                List<MoyenneVote> pairesVotes = new ArrayList<MoyenneVote>();
                
                for (PropositionDetermination proposition : propositions) {
                        pairesVotes.add(calculerVoteDetermination(proposition));
                }
                
                java.util.Collections.sort(pairesVotes);
                
                return pairesVotes;
        }
        
        public static int getNombreTotalVotants(PropositionDetermination proposition) {
                int nbVotants = 0;
                List<PropositionDetermination> votes = proposition.getObservation().getPropositionDeterminations();
                Iterator<PropositionDetermination> itVotes =  votes.iterator();
                while (itVotes.hasNext()) {
                        PropositionDetermination propositionCourante = itVotes.next();
                        nbVotants += propositionCourante.getVotesDeterminations().size();
                }
                return nbVotants;
        }
        
        public static MoyenneVote calculerVoteDetermination(PropositionDetermination propositionDetermination) {        
                int nbVotants = getNombreTotalVotants(propositionDetermination);
                return calculerProportionVote(propositionDetermination, nbVotants);
        }
        
        public static MoyenneVote calculerMoyenneVoteDetermination(PropositionDetermination propositionDetermination, int nbVotants) {  
                return calculerProportionVote(propositionDetermination, nbVotants);
        }
        
        private static MoyenneVote calculerProportionVote(PropositionDetermination propositionDetermination, int nbVotants) {
                Map<String,VoteDetermination> votes = propositionDetermination.getVotesDeterminations();        
                double scoreVote = 0;
                
                if (votes.size() > 0 && nbVotants > 0) {
                        Set<String> cles = votes.keySet();

                        for (String cle : cles) {
                                String  idAuteur = cle;
                                boolean voteEstPositif = votes.get(cle).getVote() == 1;
                                
                                // un votant identifiant compte comme deux votants supplémentaires
                                // il a donc un vote 3 fois supérieur
                                int valeurVote = estUnAuteurIdentifie(idAuteur) ? 3 : 1;
                                scoreVote += voteEstPositif ? valeurVote : -valeurVote;
                        }
                }
                
                return new MoyenneVote((new Double(scoreVote)).intValue(), propositionDetermination);
        }
        
        private static boolean estUnAuteurIdentifie(String idAuteur) {
                boolean estIdentifie = true;
            try {
                int intIdAuteur = Integer.parseInt(idAuteur);
            } catch (NumberFormatException nfe) {
                estIdentifie = false;
            }
            return estIdentifie;
        }
}