Subversion Repositories eFlore/Applications.del

Rev

Rev 1152 | Blame | 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 scoreVoteIdentifie = 0;
                double scoreVoteAnonyme = 0;
                
                double scoreVote = 0;
                
                
                if(votes.size() > 0) {
                        Set<String> cles = votes.keySet();

                        for (String cle : cles) {
                                String  idAuteur = cle;
                                int valeurVote = votes.get(cle).getVote();
                                if(estUnAuteurIdentifie(idAuteur)) {
                                        // un votant identifiant compte comme deux votants supplémentaires
                                        // il a donc un vote 3 fois supérieur
                                        scoreVoteIdentifie += valeurVote;
                                        //nbVotants += 2;
                                } else {
                                        scoreVoteAnonyme += valeurVote;
                                }
                        }
                        
                        scoreVote = ((scoreVoteAnonyme + scoreVoteIdentifie)/(nbVotants))*100;
                } else {
                        scoreVote = -1;
                }
                
                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;
        }
}