mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-22 12:03:58 +00:00
fixed bug in isEliminated, making formerly failing test case pass
Change-Id: I8fb9160e2289949413700aaa2dd9419974d4976f
This commit is contained in:
1 parent
ec4f8791ea
commit
81b547b6a0
5 files changed
+84
-115
No files matched your search
+6
-5
@@ -65,7 +65,7 @@ import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets10Or8AndLastBre
|
|||||||
import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets12Or8AndLastBreaksTie2017;
|
import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets12Or8AndLastBreaksTie2017;
|
||||||
import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl;
|
import com.sap.sailing.domain.leaderboard.impl.LeaderboardGroupImpl;
|
||||||
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
|
import com.sap.sailing.domain.leaderboard.impl.LowPoint;
|
||||||
import com.sap.sailing.domain.leaderboard.impl.RegattaLeaderboardCountingButNotRankingSuppressedImpl;
|
import com.sap.sailing.domain.leaderboard.impl.DelegatingRegattaLeaderboardWithCompetitorElimination;
|
||||||
import com.sap.sailing.domain.leaderboard.impl.RegattaLeaderboardImpl;
|
import com.sap.sailing.domain.leaderboard.impl.RegattaLeaderboardImpl;
|
||||||
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
|
import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl;
|
||||||
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
|
import com.sap.sailing.domain.leaderboard.meta.LeaderboardGroupMetaLeaderboard;
|
||||||
@@ -90,9 +90,10 @@ public class LeaderboardScoringAndRankingTest extends LeaderboardScoringAndRanki
|
|||||||
return new RegattaLeaderboardImpl(regatta, discardingRules);
|
return new RegattaLeaderboardImpl(regatta, discardingRules);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Leaderboard createRegattaLeaderboardCountingButNotRankingSuppressed(Regatta regatta, String leaderboardName, int[] discardingThresholds) {
|
protected DelegatingRegattaLeaderboardWithCompetitorElimination createDelegatingRegattaLeaderboardWithCompetitorElimination(
|
||||||
|
Regatta regatta, String leaderboardName, int[] discardingThresholds) {
|
||||||
final RegattaLeaderboard fullLeaderboard = createLeaderboard(regatta, discardingThresholds);
|
final RegattaLeaderboard fullLeaderboard = createLeaderboard(regatta, discardingThresholds);
|
||||||
return new RegattaLeaderboardCountingButNotRankingSuppressedImpl(fullLeaderboard, leaderboardName);
|
return new DelegatingRegattaLeaderboardWithCompetitorElimination(fullLeaderboard, leaderboardName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -693,7 +694,7 @@ public class LeaderboardScoringAndRankingTest extends LeaderboardScoringAndRanki
|
|||||||
Regatta regatta = createRegatta(/* qualifying */0, new String[] { "Default" }, /* final */3, new String[] { "Default" },
|
Regatta regatta = createRegatta(/* qualifying */0, new String[] { "Default" }, /* final */3, new String[] { "Default" },
|
||||||
/* medal */ false, /* medal */ 0, "testTotalTimeNotCountedForRacesStartedLaterThanTimePointReqeusted",
|
/* medal */ false, /* medal */ 0, "testTotalTimeNotCountedForRacesStartedLaterThanTimePointReqeusted",
|
||||||
DomainFactory.INSTANCE.getOrCreateBoatClass("49er", /* typicallyStartsUpwind */true), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT));
|
DomainFactory.INSTANCE.getOrCreateBoatClass("49er", /* typicallyStartsUpwind */true), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT));
|
||||||
Leaderboard leaderboard = createRegattaLeaderboardCountingButNotRankingSuppressed(regatta, "Test not counting suppressed", /* discarding thresholds */ new int[0]);
|
DelegatingRegattaLeaderboardWithCompetitorElimination leaderboard = createDelegatingRegattaLeaderboardWithCompetitorElimination(regatta, "Test not counting suppressed", /* discarding thresholds */ new int[0]);
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<Competitor, TimePoint>[] lastMarkPassingTimesForCompetitors = (Map<Competitor, TimePoint>[]) new HashMap<?, ?>[3];
|
Map<Competitor, TimePoint>[] lastMarkPassingTimesForCompetitors = (Map<Competitor, TimePoint>[]) new HashMap<?, ?>[3];
|
||||||
lastMarkPassingTimesForCompetitors[0] = new HashMap<>();
|
lastMarkPassingTimesForCompetitors[0] = new HashMap<>();
|
||||||
@@ -710,7 +711,7 @@ public class LeaderboardScoringAndRankingTest extends LeaderboardScoringAndRanki
|
|||||||
lastMarkPassingTimesForCompetitors[2].put(c[2], finish);
|
lastMarkPassingTimesForCompetitors[2].put(c[2], finish);
|
||||||
createAndAttachTrackedRacesWithStartTimeAndLastMarkPassingTimes(series.get(1), "Default",
|
createAndAttachTrackedRacesWithStartTimeAndLastMarkPassingTimes(series.get(1), "Default",
|
||||||
new Competitor[][] { f1 }, new TimePoint[] { earlier, now, later }, lastMarkPassingTimesForCompetitors);
|
new Competitor[][] { f1 }, new TimePoint[] { earlier, now, later }, lastMarkPassingTimesForCompetitors);
|
||||||
leaderboard.setSuppressed(c[1], true);
|
leaderboard.setEliminated(c[1], true);
|
||||||
assertEquals(1.0, leaderboard.getTotalPoints(c[0], leaderboard.getRaceColumns().iterator().next(), later), 0.000001);
|
assertEquals(1.0, leaderboard.getTotalPoints(c[0], leaderboard.getRaceColumns().iterator().next(), later), 0.000001);
|
||||||
assertEquals(2.0, leaderboard.getTotalPoints(c[1], leaderboard.getRaceColumns().iterator().next(), later), 0.000001);
|
assertEquals(2.0, leaderboard.getTotalPoints(c[1], leaderboard.getRaceColumns().iterator().next(), later), 0.000001);
|
||||||
assertEquals(3.0, leaderboard.getTotalPoints(c[2], leaderboard.getRaceColumns().iterator().next(), later), 0.000001);
|
assertEquals(3.0, leaderboard.getTotalPoints(c[2], leaderboard.getRaceColumns().iterator().next(), later), 0.000001);
|
||||||
|
|||||||
@@ -308,7 +308,8 @@ public interface Leaderboard extends LeaderboardBase, HasRaceColumns {
|
|||||||
List<Competitor> getCompetitorsFromBestToWorst(TimePoint timePoint);
|
List<Competitor> getCompetitorsFromBestToWorst(TimePoint timePoint);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the total rank of the given competitor.
|
* Returns the total rank of the given competitor or {@code 0} if no rank can be determined for
|
||||||
|
* the {@code competitor} in this leaderboard.
|
||||||
*/
|
*/
|
||||||
int getTotalRankOfCompetitor(Competitor competitor, TimePoint timePoint) throws NoWindException;
|
int getTotalRankOfCompetitor(Competitor competitor, TimePoint timePoint) throws NoWindException;
|
||||||
|
|
||||||
|
|||||||
+66
@@ -57,6 +57,7 @@ import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
|||||||
import com.sap.sailing.domain.common.dto.RaceDTO;
|
import com.sap.sailing.domain.common.dto.RaceDTO;
|
||||||
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
||||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||||
|
import com.sap.sailing.domain.leaderboard.ResultDiscardingRule;
|
||||||
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
|
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
|
||||||
import com.sap.sailing.domain.leaderboard.caching.LeaderboardDTOCache;
|
import com.sap.sailing.domain.leaderboard.caching.LeaderboardDTOCache;
|
||||||
import com.sap.sailing.domain.leaderboard.caching.LeaderboardDTOCalculationReuseCache;
|
import com.sap.sailing.domain.leaderboard.caching.LeaderboardDTOCalculationReuseCache;
|
||||||
@@ -230,6 +231,71 @@ public abstract class AbstractLeaderboardWithCache implements Leaderboard, RaceC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trackedRaceLinked(RaceColumn raceColumn, Fleet fleet, TrackedRace trackedRace) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutTrackedRaceLinked(raceColumn, fleet, trackedRace);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void isMedalRaceChanged(RaceColumn raceColumn, boolean newIsMedalRace) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutIsMedalRaceChanged(raceColumn, newIsMedalRace);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void isFleetsCanRunInParallelChanged(RaceColumn raceColumn, boolean newIsFleetsCanRunInParallel) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutIsFleetsCanRunInParallelChanged(raceColumn, newIsFleetsCanRunInParallel);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void isStartsWithZeroScoreChanged(RaceColumn raceColumn, boolean newIsStartsWithZeroScore) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutIsStartsWithZeroScoreChanged(raceColumn, newIsStartsWithZeroScore);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void isFirstColumnIsNonDiscardableCarryForwardChanged(RaceColumn raceColumn, boolean firstColumnIsNonDiscardableCarryForward) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutIsFirstColumnIsNonDiscardableCarryForwardChanged(raceColumn, firstColumnIsNonDiscardableCarryForward);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void hasSplitFleetContiguousScoringChanged(RaceColumn raceColumn, boolean hasSplitFleetContiguousScoring) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutHasSplitFleetContiguousScoringChanged(raceColumn, hasSplitFleetContiguousScoring);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void raceColumnMoved(RaceColumn raceColumn, int newIndex) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutRaceColumnMoved(raceColumn, newIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void factorChanged(RaceColumn raceColumn, Double oldFactor, Double newFactor) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutFactorChanged(raceColumn, oldFactor, newFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void raceColumnAddedToContainer(RaceColumn raceColumn) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutRaceColumnAddedToContainer(raceColumn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void raceColumnRemovedFromContainer(RaceColumn raceColumn) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutRaceColumnRemovedFromContainer(raceColumn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void competitorDisplayNameChanged(Competitor competitor, String oldDisplayName, String displayName) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutCompetitorDisplayNameChanged(competitor, oldDisplayName, displayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void resultDiscardingRuleChanged(ResultDiscardingRule oldDiscardingRule, ResultDiscardingRule newDiscardingRule) {
|
||||||
|
getRaceColumnListeners().notifyListenersAboutResultDiscardingRuleChanged(oldDiscardingRule, newDiscardingRule);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isTransient() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
protected void notifyLeaderboardChangeListeners(Consumer<LeaderboardChangeListener> notifier) {
|
protected void notifyLeaderboardChangeListeners(Consumer<LeaderboardChangeListener> notifier) {
|
||||||
for (final LeaderboardChangeListener listener : leaderboardChangeListeners) {
|
for (final LeaderboardChangeListener listener : leaderboardChangeListeners) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
-65
@@ -647,46 +647,6 @@ public abstract class AbstractSimpleLeaderboardImpl extends AbstractLeaderboardW
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void trackedRaceLinked(RaceColumn raceColumn, Fleet fleet, TrackedRace trackedRace) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutTrackedRaceLinked(raceColumn, fleet, trackedRace);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void isMedalRaceChanged(RaceColumn raceColumn, boolean newIsMedalRace) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutIsMedalRaceChanged(raceColumn, newIsMedalRace);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void isFleetsCanRunInParallelChanged(RaceColumn raceColumn, boolean newIsFleetsCanRunInParallel) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutIsFleetsCanRunInParallelChanged(raceColumn, newIsFleetsCanRunInParallel);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void isStartsWithZeroScoreChanged(RaceColumn raceColumn, boolean newIsStartsWithZeroScore) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutIsStartsWithZeroScoreChanged(raceColumn, newIsStartsWithZeroScore);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void isFirstColumnIsNonDiscardableCarryForwardChanged(RaceColumn raceColumn, boolean firstColumnIsNonDiscardableCarryForward) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutIsFirstColumnIsNonDiscardableCarryForwardChanged(raceColumn, firstColumnIsNonDiscardableCarryForward);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void hasSplitFleetContiguousScoringChanged(RaceColumn raceColumn, boolean hasSplitFleetContiguousScoring) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutHasSplitFleetContiguousScoringChanged(raceColumn, hasSplitFleetContiguousScoring);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void raceColumnMoved(RaceColumn raceColumn, int newIndex) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutRaceColumnMoved(raceColumn, newIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void factorChanged(RaceColumn raceColumn, Double oldFactor, Double newFactor) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutFactorChanged(raceColumn, oldFactor, newFactor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A leaderboard will only accept the addition of a race column if the column's name is unique across the leaderboard.
|
* A leaderboard will only accept the addition of a race column if the column's name is unique across the leaderboard.
|
||||||
*/
|
*/
|
||||||
@@ -702,31 +662,6 @@ public abstract class AbstractSimpleLeaderboardImpl extends AbstractLeaderboardW
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void raceColumnAddedToContainer(RaceColumn raceColumn) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutRaceColumnAddedToContainer(raceColumn);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void raceColumnRemovedFromContainer(RaceColumn raceColumn) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutRaceColumnRemovedFromContainer(raceColumn);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void competitorDisplayNameChanged(Competitor competitor, String oldDisplayName, String displayName) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutCompetitorDisplayNameChanged(competitor, oldDisplayName, displayName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void resultDiscardingRuleChanged(ResultDiscardingRule oldDiscardingRule, ResultDiscardingRule newDiscardingRule) {
|
|
||||||
getRaceColumnListeners().notifyListenersAboutResultDiscardingRuleChanged(oldDiscardingRule, newDiscardingRule);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isTransient() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds out the time point when any of the {@link Leaderboard#getTrackedRaces() tracked races currently attached to
|
* Finds out the time point when any of the {@link Leaderboard#getTrackedRaces() tracked races currently attached to
|
||||||
* the <code>leaderboard</code>} and the {@link Leaderboard#getScoreCorrection() score corrections} have last been
|
* the <code>leaderboard</code>} and the {@link Leaderboard#getScoreCorrection() score corrections} have last been
|
||||||
|
|||||||
+10
-44
@@ -1,30 +1,25 @@
|
|||||||
package com.sap.sailing.domain.leaderboard.impl;
|
package com.sap.sailing.domain.leaderboard.impl;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
|
|
||||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||||
import com.sap.sailing.domain.base.BoatClass;
|
import com.sap.sailing.domain.base.BoatClass;
|
||||||
import com.sap.sailing.domain.base.Competitor;
|
import com.sap.sailing.domain.base.Competitor;
|
||||||
import com.sap.sailing.domain.base.CourseArea;
|
import com.sap.sailing.domain.base.CourseArea;
|
||||||
import com.sap.sailing.domain.base.DomainFactory;
|
|
||||||
import com.sap.sailing.domain.base.Fleet;
|
import com.sap.sailing.domain.base.Fleet;
|
||||||
import com.sap.sailing.domain.base.LeaderboardChangeListener;
|
import com.sap.sailing.domain.base.LeaderboardChangeListener;
|
||||||
import com.sap.sailing.domain.base.RaceColumn;
|
import com.sap.sailing.domain.base.RaceColumn;
|
||||||
import com.sap.sailing.domain.base.RaceColumnListener;
|
import com.sap.sailing.domain.base.RaceColumnListener;
|
||||||
import com.sap.sailing.domain.base.Regatta;
|
import com.sap.sailing.domain.base.Regatta;
|
||||||
import com.sap.sailing.domain.common.Distance;
|
import com.sap.sailing.domain.common.LeaderboardType;
|
||||||
import com.sap.sailing.domain.common.LegType;
|
|
||||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||||
import com.sap.sailing.domain.common.NoWindException;
|
import com.sap.sailing.domain.common.NoWindException;
|
||||||
import com.sap.sailing.domain.common.Speed;
|
import com.sap.sailing.domain.common.Speed;
|
||||||
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
|
||||||
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
||||||
import com.sap.sailing.domain.leaderboard.NumberOfCompetitorsInLeaderboardFetcher;
|
import com.sap.sailing.domain.leaderboard.NumberOfCompetitorsInLeaderboardFetcher;
|
||||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||||
@@ -34,13 +29,11 @@ import com.sap.sailing.domain.leaderboard.SettableScoreCorrection;
|
|||||||
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
|
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
|
||||||
import com.sap.sailing.domain.regattalike.IsRegattaLike;
|
import com.sap.sailing.domain.regattalike.IsRegattaLike;
|
||||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
|
||||||
import com.sap.sse.common.Duration;
|
|
||||||
import com.sap.sse.common.ObscuringIterable;
|
import com.sap.sse.common.ObscuringIterable;
|
||||||
import com.sap.sse.common.TimePoint;
|
import com.sap.sse.common.TimePoint;
|
||||||
import com.sap.sse.common.Util.Pair;
|
import com.sap.sse.common.Util.Pair;
|
||||||
|
|
||||||
public class RegattaLeaderboardCountingButNotRankingSuppressedImpl implements RegattaLeaderboard {
|
public class DelegatingRegattaLeaderboardWithCompetitorElimination extends AbstractLeaderboardWithCache implements RegattaLeaderboard {
|
||||||
private static final long serialVersionUID = 8331154893189722924L;
|
private static final long serialVersionUID = 8331154893189722924L;
|
||||||
private final String name;
|
private final String name;
|
||||||
private final RegattaLeaderboard fullLeaderboard;
|
private final RegattaLeaderboard fullLeaderboard;
|
||||||
@@ -56,7 +49,7 @@ public class RegattaLeaderboardCountingButNotRankingSuppressedImpl implements Re
|
|||||||
*/
|
*/
|
||||||
private final ConcurrentHashMap<Competitor, Boolean> eliminatedCompetitors;
|
private final ConcurrentHashMap<Competitor, Boolean> eliminatedCompetitors;
|
||||||
|
|
||||||
public RegattaLeaderboardCountingButNotRankingSuppressedImpl(RegattaLeaderboard fullLeaderboard, String name) {
|
public DelegatingRegattaLeaderboardWithCompetitorElimination(RegattaLeaderboard fullLeaderboard, String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.fullLeaderboard = fullLeaderboard;
|
this.fullLeaderboard = fullLeaderboard;
|
||||||
this.eliminatedCompetitors = new ConcurrentHashMap<>();
|
this.eliminatedCompetitors = new ConcurrentHashMap<>();
|
||||||
@@ -119,13 +112,6 @@ public class RegattaLeaderboardCountingButNotRankingSuppressedImpl implements Re
|
|||||||
fullLeaderboard.deregisterCompetitors(competitor);
|
fullLeaderboard.deregisterCompetitors(competitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LeaderboardDTO computeDTO(TimePoint timePoint, Collection<String> namesOfRaceColumnsForWhichToLoadLegDetails,
|
|
||||||
boolean addOverallDetails, boolean waitForLatestAnalyses, TrackedRegattaRegistry trackedRegattaRegistry,
|
|
||||||
DomainFactory baseDomainFactory, boolean fillTotalPointsUncorrected) throws NoWindException {
|
|
||||||
return fullLeaderboard.computeDTO(timePoint, namesOfRaceColumnsForWhichToLoadLegDetails, addOverallDetails,
|
|
||||||
waitForLatestAnalyses, trackedRegattaRegistry, baseDomainFactory, fillTotalPointsUncorrected);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Iterable<Competitor> getCompetitors() {
|
public Iterable<Competitor> getCompetitors() {
|
||||||
return new ObscuringIterable<>(fullLeaderboard.getCompetitors(), eliminatedCompetitors.keySet());
|
return new ObscuringIterable<>(fullLeaderboard.getCompetitors(), eliminatedCompetitors.keySet());
|
||||||
}
|
}
|
||||||
@@ -139,7 +125,7 @@ public class RegattaLeaderboardCountingButNotRankingSuppressedImpl implements Re
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEliminated(Competitor competitor) {
|
public boolean isEliminated(Competitor competitor) {
|
||||||
return eliminatedCompetitors.contains(competitor);
|
return eliminatedCompetitors.containsKey(competitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterable<Competitor> getAllCompetitors() {
|
public Iterable<Competitor> getAllCompetitors() {
|
||||||
@@ -244,7 +230,7 @@ public class RegattaLeaderboardCountingButNotRankingSuppressedImpl implements Re
|
|||||||
public List<Competitor> getCompetitorsFromBestToWorst(TimePoint timePoint) {
|
public List<Competitor> getCompetitorsFromBestToWorst(TimePoint timePoint) {
|
||||||
final List<Competitor> result = new ArrayList<>();
|
final List<Competitor> result = new ArrayList<>();
|
||||||
for (final Competitor c : fullLeaderboard.getCompetitorsFromBestToWorst(timePoint)) {
|
for (final Competitor c : fullLeaderboard.getCompetitorsFromBestToWorst(timePoint)) {
|
||||||
if (!isSuppressed(c)) {
|
if (!isEliminated(c)) {
|
||||||
result.add(c);
|
result.add(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -358,19 +344,6 @@ public class RegattaLeaderboardCountingButNotRankingSuppressedImpl implements Re
|
|||||||
return fullLeaderboard.getAverageSpeedOverGround(competitor, timePoint);
|
return fullLeaderboard.getAverageSpeedOverGround(competitor, timePoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Duration getTotalTimeSailedInLegType(Competitor competitor, LegType legType, TimePoint timePoint)
|
|
||||||
throws NoWindException {
|
|
||||||
return fullLeaderboard.getTotalTimeSailedInLegType(competitor, legType, timePoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Duration getTotalTimeSailed(Competitor competitor, TimePoint timePoint) {
|
|
||||||
return fullLeaderboard.getTotalTimeSailed(competitor, timePoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Distance getTotalDistanceTraveled(Competitor competitor, TimePoint timePoint) {
|
|
||||||
return fullLeaderboard.getTotalDistanceTraveled(competitor, timePoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getNetPoints(Competitor competitor, RaceColumn raceColumn, Iterable<RaceColumn> raceColumnsToConsider,
|
public Double getNetPoints(Competitor competitor, RaceColumn raceColumn, Iterable<RaceColumn> raceColumnsToConsider,
|
||||||
TimePoint timePoint) throws NoWindException {
|
TimePoint timePoint) throws NoWindException {
|
||||||
return fullLeaderboard.getNetPoints(competitor, raceColumn, raceColumnsToConsider, timePoint);
|
return fullLeaderboard.getNetPoints(competitor, raceColumn, raceColumnsToConsider, timePoint);
|
||||||
@@ -389,18 +362,6 @@ public class RegattaLeaderboardCountingButNotRankingSuppressedImpl implements Re
|
|||||||
return fullLeaderboard.getDefaultCourseArea();
|
return fullLeaderboard.getDefaultCourseArea();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void destroy() {
|
|
||||||
fullLeaderboard.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
public LeaderboardDTO getLeaderboardDTO(TimePoint timePoint,
|
|
||||||
Collection<String> namesOfRaceColumnsForWhichToLoadLegDetails, boolean addOverallDetails,
|
|
||||||
TrackedRegattaRegistry trackedRegattaRegistry, DomainFactory baseDomainFactory,
|
|
||||||
boolean fillTotalPointsUncorrected) throws NoWindException, InterruptedException, ExecutionException {
|
|
||||||
return fullLeaderboard.getLeaderboardDTO(timePoint, namesOfRaceColumnsForWhichToLoadLegDetails,
|
|
||||||
addOverallDetails, trackedRegattaRegistry, baseDomainFactory, fillTotalPointsUncorrected);
|
|
||||||
}
|
|
||||||
|
|
||||||
public NumberOfCompetitorsInLeaderboardFetcher getNumberOfCompetitorsInLeaderboardFetcher() {
|
public NumberOfCompetitorsInLeaderboardFetcher getNumberOfCompetitorsInLeaderboardFetcher() {
|
||||||
return fullLeaderboard.getNumberOfCompetitorsInLeaderboardFetcher();
|
return fullLeaderboard.getNumberOfCompetitorsInLeaderboardFetcher();
|
||||||
}
|
}
|
||||||
@@ -412,4 +373,9 @@ public class RegattaLeaderboardCountingButNotRankingSuppressedImpl implements Re
|
|||||||
public BoatClass getBoatClass() {
|
public BoatClass getBoatClass() {
|
||||||
return fullLeaderboard.getBoatClass();
|
return fullLeaderboard.getBoatClass();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected LeaderboardType getLeaderboardType() {
|
||||||
|
return LeaderboardType.RegattaLeaderboard;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user