bug 3742: don't assign a competitor points in a MetaLeaderboard if it has no score in the underlying column leaderboard

Change-Id: I1e16044e0fd3196a187edd48a23e424deaa1d428
This commit is contained in:
Axel Uhl committed 2017-11-21 11:10:40 +01:00
1 parent 50364849bc
commit b9d8b4827a
5 files changed
+29 -7

No files matched your search

@@ -269,7 +269,7 @@ public interface Leaderboard extends LeaderboardBase, HasRaceColumns {
* competitor doesn't appear in any of the race column's attached tracked races. A 0.0 score is returned
* if the competitor's result for <code>race</code> is discarded.
*/
Double getNetPoints(Competitor competitor, RaceColumn race, TimePoint timePoint) throws NoWindException;
Double getNetPoints(Competitor competitor, RaceColumn race, TimePoint timePoint);
/**
* Tells whether the contribution of <code>raceColumn</code> is discarded in the current leaderboard's standings for
@@ -568,4 +568,10 @@ public interface Leaderboard extends LeaderboardBase, HasRaceColumns {
BoatClass getBoatClass();
LeaderboardType getLeaderboardType();
/**
* Tells if there is at least one non-{@code null} score for the given {@code competitor} in the
* leaderboard.
*/
boolean hasScores(Competitor competitor, TimePoint timePoint);
}
@@ -1118,4 +1118,13 @@ public abstract class AbstractLeaderboardWithCache implements Leaderboard {
}
}
@Override
public boolean hasScores(Competitor competitor, TimePoint timePoint) {
for (final RaceColumn raceColumn : getRaceColumns()) {
if (getTotalPoints(competitor, raceColumn, timePoint) != null) {
return true;
}
}
return false;
}
}
@@ -425,13 +425,13 @@ public abstract class AbstractSimpleLeaderboardImpl extends AbstractLeaderboardW
}
@Override
public Double getNetPoints(Competitor competitor, RaceColumn raceColumn, TimePoint timePoint) throws NoWindException {
public Double getNetPoints(Competitor competitor, RaceColumn raceColumn, TimePoint timePoint) {
return getNetPoints(competitor, raceColumn, getRaceColumns(), timePoint);
}
@Override
public Double getNetPoints(Competitor competitor, RaceColumn raceColumn,
Iterable<RaceColumn> raceColumnsToConsider, TimePoint timePoint) throws NoWindException {
Iterable<RaceColumn> raceColumnsToConsider, TimePoint timePoint) {
final Set<RaceColumn> discardedRaceColumns = getResultDiscardingRule()
.getDiscardedRaceColumns(competitor, this, raceColumnsToConsider, timePoint);
return getNetPoints(competitor, raceColumn, timePoint, discardedRaceColumns);
@@ -280,7 +280,7 @@ public class DelegatingRegattaLeaderboardWithCompetitorElimination extends Abstr
return getFullLeaderboard().getMaxPointsReason(competitor, race, timePoint);
}
public Double getNetPoints(Competitor competitor, RaceColumn race, TimePoint timePoint) throws NoWindException {
public Double getNetPoints(Competitor competitor, RaceColumn race, TimePoint timePoint) {
return getFullLeaderboard().getNetPoints(competitor, race, timePoint);
}
@@ -171,9 +171,16 @@ public abstract class AbstractMetaLeaderboard extends AbstractSimpleLeaderboardI
@Override
public int getTrackedRank(Competitor competitor, RaceColumn race, TimePoint timePoint) {
final List<Competitor> competitorsFromBestToWorst = ((MetaLeaderboardColumn) race).getLeaderboard().getCompetitorsFromBestToWorst(timePoint);
Util.removeAll(getSuppressedCompetitors(), competitorsFromBestToWorst);
return competitorsFromBestToWorst.indexOf(competitor)+1;
final Leaderboard leaderboard = ((MetaLeaderboardColumn) race).getLeaderboard();
final int result;
if (leaderboard.hasScores(competitor, timePoint)) {
final List<Competitor> competitorsFromBestToWorst = leaderboard.getCompetitorsFromBestToWorst(timePoint);
Util.removeAll(getSuppressedCompetitors(), competitorsFromBestToWorst);
result = competitorsFromBestToWorst.indexOf(competitor)+1;
} else {
result = 0;
}
return result;
}
@Override