Rev 1767 | 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érieurint 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;}}