package cryodex.modules.destiny; import cryodex.modules.TournamentComparator; public class DestinyComparator extends TournamentComparator<DestinyPlayer> { public static enum CompareOptions { HEAD_TO_HEAD, MARGIN_OF_VICTORY, STRENGH_OF_SCHEDULE, AVERAGE_STRENGTH_OF_SCHEDULE, EXTENDED_STRENGTH_OF_SCHEDULE, SCORE, RANDOM; } public static final CompareOptions[] pairingCompare = { CompareOptions.SCORE }; public static final CompareOptions[] rankingCompare = { CompareOptions.SCORE, CompareOptions.AVERAGE_STRENGTH_OF_SCHEDULE, CompareOptions.EXTENDED_STRENGTH_OF_SCHEDULE, CompareOptions.RANDOM }; private final DestinyTournament t; private final CompareOptions[] sortOrder; public DestinyComparator(DestinyTournament t, CompareOptions[] sortOrder) { this.t = t; this.sortOrder = sortOrder; } @Override public int compare(DestinyPlayer o1, DestinyPlayer o2) { int result = 0; for (CompareOptions option : sortOrder) { if (result == 0) { result = compareOption(o1, o2, option); } } return result; } private int compareOption(DestinyPlayer o1, DestinyPlayer o2, CompareOptions option) { int result = 0; switch (option) { case SCORE: result = compareInt(o1.getScore(t), o2.getScore(t)); break; case HEAD_TO_HEAD: if (o1.getName().equals(o2.getName())) { return 0; } result = o1.isHeadToHeadWinner(t) ? 1 : 0; if(result == 0){ result = o2.isHeadToHeadWinner(t) ? -1 : 0; } break; case STRENGH_OF_SCHEDULE: // Not implemented break; case AVERAGE_STRENGTH_OF_SCHEDULE: result = compareDouble(o1.getAverageSoS(t), o2.getAverageSoS(t)); break; case EXTENDED_STRENGTH_OF_SCHEDULE: result = compareDouble(o1.getExtendedStrengthOfSchedule(t), o2.getExtendedStrengthOfSchedule(t)); break; case MARGIN_OF_VICTORY: // Not Implemented break; case RANDOM: String seedValue1 = o1.getSeedValue(); String seedValue2 = o2.getSeedValue(); try { Double d1 = Double.valueOf(seedValue1); Double d2 = Double.valueOf(seedValue2); result = d1.compareTo(d2); } catch (NumberFormatException e) { result = seedValue1.compareTo(seedValue2); } break; } return result; } }