package cryodex.modules.starwarslcg;
import cryodex.modules.TournamentComparator;
public class SWLCGComparator extends TournamentComparator<SWLCGPlayer> {
public static enum CompareOptions {
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 SWLCGTournament t;
private final CompareOptions[] sortOrder;
public SWLCGComparator(SWLCGTournament t, CompareOptions[] sortOrder) {
this.t = t;
this.sortOrder = sortOrder;
}
@Override
public int compare(SWLCGPlayer o1, SWLCGPlayer o2) {
int result = 0;
for (CompareOptions option : sortOrder) {
if (result == 0) {
result = compareOption(o1, o2, option);
}
}
return result;
}
private int compareOption(SWLCGPlayer o1, SWLCGPlayer o2, CompareOptions option) {
int result = 0;
switch (option) {
case SCORE:
result = compareInt(o1.getScore(t), o2.getScore(t));
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;
}
}