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;
}
}