package org.openbakery.racecontrol; import java.util.Comparator; import org.openbakery.racecontrol.data.Result; public class ResultComparator implements Comparator<Result> { public int compare(Result firstResult, Result secondResult) { if (firstResult.isDisqualified() && !secondResult.isDisqualified()) { return 1; } if (!firstResult.isDisqualified() && secondResult.isDisqualified()) { return -1; } int result = secondResult.getLapsCompleted() - firstResult.getLapsCompleted(); if (result != 0) return result; long firstRaceTime = firstResult.getRaceTime(); long secondRaceTime = secondResult.getRaceTime(); if (firstRaceTime == 0 && secondRaceTime == 0) { // qualifing result return (int) ((firstResult.getBestLapTime() - secondResult.getBestLapTime())%Integer.MAX_VALUE); } int raceTime = (int)(firstRaceTime - secondRaceTime); if (raceTime != 0) { return raceTime; } // when qual result long firstBestLap = firstResult.getBestLapTime(); long secondBestLap = secondResult.getBestLapTime(); return (int)(firstBestLap - secondBestLap); } }