By default let a leaderboard use the delay to live of the latest tracked race associated with it

This commit is contained in:
Axel Uhl committed 2012-07-21 22:09:32 +02:00
1 parent e6c4982c41
commit 9cbb07ab4b
5 files changed
+26 -33

No files matched your search

@@ -1332,21 +1332,8 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
* explicit setting changes} were performed, automatically adjusts the delay accordingly. * explicit setting changes} were performed, automatically adjusts the delay accordingly.
*/ */
private void adjustDelayToLive() { private void adjustDelayToLive() {
if (!settingsUpdatedExplicitly) { if (!settingsUpdatedExplicitly && leaderboard.getDelayToLiveInMillisForLatestRace() != null) {
long latestNonNullDelayToLiveInMillis = 0; // if we don't fine anything, use zero delay ("now") setDelayInMilliseconds(leaderboard.getDelayToLiveInMillisForLatestRace());
Date latestStartTime = new Date(0l);
for (RaceColumnDTO raceColumn : selectedRaceColumns) {
for (FleetDTO fleet : raceColumn.getFleets()) {
Date startTime = raceColumn.getStartDate(fleet);
if (startTime != null && startTime.after(latestStartTime)) {
Long delayToLiveInMillis = raceColumn.getDelayToLiveInMillis(fleet);
if (delayToLiveInMillis != null) {
latestNonNullDelayToLiveInMillis = delayToLiveInMillis;
}
}
}
}
setDelayInMilliseconds(latestNonNullDelayToLiveInMillis);
} }
} }
@@ -426,6 +426,8 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
result.competitors = new ArrayList<CompetitorDTO>(); result.competitors = new ArrayList<CompetitorDTO>();
result.name = leaderboard.getName(); result.name = leaderboard.getName();
result.competitorDisplayNames = new HashMap<CompetitorDTO, String>(); result.competitorDisplayNames = new HashMap<CompetitorDTO, String>();
TimePoint startOfLatestRace = null;
Long delayToLiveInMillisForLatestRace = null;
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
RaceColumnDTO raceColumnDTO = result.createEmptyRaceColumn(raceColumn.getName(), raceColumn.isMedalRace()); RaceColumnDTO raceColumnDTO = result.createEmptyRaceColumn(raceColumn.getName(), raceColumn.isMedalRace());
for (Fleet fleet : raceColumn.getFleets()) { for (Fleet fleet : raceColumn.getFleets()) {
@@ -433,7 +435,9 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet); TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
final FleetDTO fleetDTO = createFleetDTO(fleet); final FleetDTO fleetDTO = createFleetDTO(fleet);
if (trackedRace != null) { if (trackedRace != null) {
raceColumnDTO.setDelayToLiveInMillis(fleetDTO, trackedRace.getDelayToLiveInMillis()); if (startOfLatestRace == null || (trackedRace.getStartOfRace() != null && trackedRace.getStartOfRace().compareTo(startOfLatestRace) > 0)) {
delayToLiveInMillisForLatestRace = trackedRace.getDelayToLiveInMillis();
}
raceIdentifier = new RegattaNameAndRaceName(trackedRace.getTrackedRegatta().getRegatta() raceIdentifier = new RegattaNameAndRaceName(trackedRace.getTrackedRegatta().getRegatta()
.getName(), trackedRace.getRace().getName()); .getName(), trackedRace.getRace().getName());
} }
@@ -442,6 +446,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
} }
result.setCompetitorsFromBestToWorst(raceColumnDTO, getCompetitorDTOList(leaderboard.getCompetitorsFromBestToWorst(raceColumn, timePoint))); result.setCompetitorsFromBestToWorst(raceColumnDTO, getCompetitorDTOList(leaderboard.getCompetitorsFromBestToWorst(raceColumn, timePoint)));
} }
result.setDelayToLiveInMillisForLatestRace(delayToLiveInMillisForLatestRace);
result.rows = new HashMap<CompetitorDTO, LeaderboardRowDTO>(); result.rows = new HashMap<CompetitorDTO, LeaderboardRowDTO>();
result.hasCarriedPoints = leaderboard.hasCarriedPoints(); result.hasCarriedPoints = leaderboard.hasCarriedPoints();
result.discardThresholds = leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces(); result.discardThresholds = leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces();
@@ -1792,16 +1797,19 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
*/ */
private StrippedLeaderboardDTO createStrippedLeaderboardDTO(Leaderboard leaderboard, boolean withGeoLocationData) { private StrippedLeaderboardDTO createStrippedLeaderboardDTO(Leaderboard leaderboard, boolean withGeoLocationData) {
StrippedLeaderboardDTO leaderboardDTO = new StrippedLeaderboardDTO(); StrippedLeaderboardDTO leaderboardDTO = new StrippedLeaderboardDTO();
TimePoint startOfLatestRace = null;
Long delayToLiveInMillisForLatestRace = null;
leaderboardDTO.name = leaderboard.getName(); leaderboardDTO.name = leaderboard.getName();
leaderboardDTO.competitorDisplayNames = new HashMap<CompetitorDTO, String>(); leaderboardDTO.competitorDisplayNames = new HashMap<CompetitorDTO, String>();
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
StrippedRaceDTO race = null; StrippedRaceDTO race = null;
for (Fleet fleet : raceColumn.getFleets()) { for (Fleet fleet : raceColumn.getFleets()) {
RegattaAndRaceIdentifier raceIdentifier = null; RegattaAndRaceIdentifier raceIdentifier = null;
long delayToLiveInMillis = 0;
if (raceColumn.getTrackedRace(fleet) != null) { if (raceColumn.getTrackedRace(fleet) != null) {
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet); TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
delayToLiveInMillis = trackedRace.getDelayToLiveInMillis(); if (startOfLatestRace == null || (trackedRace.getStartOfRace() != null && trackedRace.getStartOfRace().compareTo(startOfLatestRace) > 0)) {
delayToLiveInMillisForLatestRace = trackedRace.getDelayToLiveInMillis();
}
raceIdentifier = new RegattaNameAndRaceName(trackedRace.getTrackedRegatta().getRegatta().getName(), trackedRace.getRace().getName()); raceIdentifier = new RegattaNameAndRaceName(trackedRace.getTrackedRegatta().getRegatta().getName(), trackedRace.getRace().getName());
// Optional: Getting the places of the race // Optional: Getting the places of the race
PlacemarkOrderDTO racePlaces = withGeoLocationData ? getRacePlaces(trackedRace) : null; PlacemarkOrderDTO racePlaces = withGeoLocationData ? getRacePlaces(trackedRace) : null;
@@ -1812,13 +1820,12 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
race.endOfRace = trackedRace.getEndOfRace() == null ? null : trackedRace.getEndOfRace().asDate(); race.endOfRace = trackedRace.getEndOfRace() == null ? null : trackedRace.getEndOfRace().asDate();
} }
final FleetDTO fleetDTO = createFleetDTO(fleet); final FleetDTO fleetDTO = createFleetDTO(fleet);
RaceColumnDTO raceColumnDTO = leaderboardDTO.addRace(raceColumn.getName(), fleetDTO, leaderboardDTO.addRace(raceColumn.getName(), fleetDTO, raceColumn.isMedalRace(), raceIdentifier, race);
raceColumn.isMedalRace(), raceIdentifier, race);
raceColumnDTO.setDelayToLiveInMillis(fleetDTO, delayToLiveInMillis);
} }
} }
leaderboardDTO.hasCarriedPoints = leaderboard.hasCarriedPoints(); leaderboardDTO.hasCarriedPoints = leaderboard.hasCarriedPoints();
leaderboardDTO.discardThresholds = leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces(); leaderboardDTO.discardThresholds = leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces();
leaderboardDTO.setDelayToLiveInMillisForLatestRace(delayToLiveInMillisForLatestRace);
return leaderboardDTO; return leaderboardDTO;
} }
@@ -21,6 +21,8 @@ public abstract class AbstractLeaderboardDTO implements IsSerializable {
public int[] discardThresholds; public int[] discardThresholds;
public RegattaDTO regatta; public RegattaDTO regatta;
private Long delayToLiveInMillisForLatestRace;
public AbstractLeaderboardDTO() { public AbstractLeaderboardDTO() {
races = new ArrayList<RaceColumnDTO>(); races = new ArrayList<RaceColumnDTO>();
} }
@@ -324,4 +326,12 @@ public abstract class AbstractLeaderboardDTO implements IsSerializable {
return competitorDisplayNames.get(competitor) != null; return competitorDisplayNames.get(competitor) != null;
} }
public Long getDelayToLiveInMillisForLatestRace() {
return delayToLiveInMillisForLatestRace;
}
public void setDelayToLiveInMillisForLatestRace(Long delayToLiveInMillisForLatestRace) {
this.delayToLiveInMillisForLatestRace = delayToLiveInMillisForLatestRace;
}
} }
@@ -26,7 +26,7 @@ public class LeaderboardDTO extends AbstractLeaderboardDTO implements IsSerializ
private Date timePointOfLastCorrectionsValidity; private Date timePointOfLastCorrectionsValidity;
private String comment; private String comment;
LeaderboardDTO() {} // for serialization LeaderboardDTO() {} // for serialization
public LeaderboardDTO(Date timePointOfLastCorrectionsValidity, String comment) { public LeaderboardDTO(Date timePointOfLastCorrectionsValidity, String comment) {
@@ -76,5 +76,4 @@ public class LeaderboardDTO extends AbstractLeaderboardDTO implements IsSerializ
return super.equals(obj) && ((competitors == null) ? return super.equals(obj) && ((competitors == null) ?
(((LeaderboardDTO) competitors) != null) ? false : (!competitors.equals(((LeaderboardDTO) obj).competitors)) ? false : true : true); (((LeaderboardDTO) competitors) != null) ? false : (!competitors.equals(((LeaderboardDTO) obj).competitors)) ? false : true : true);
} }
} }
@@ -17,13 +17,11 @@ public class RaceColumnDTO extends NamedDTO implements IsSerializable {
private List<FleetDTO> fleets; private List<FleetDTO> fleets;
private Map<FleetDTO, RegattaAndRaceIdentifier> trackedRaceIdentifiersPerFleet; private Map<FleetDTO, RegattaAndRaceIdentifier> trackedRaceIdentifiersPerFleet;
private Map<FleetDTO, StrippedRaceDTO> racesPerFleet; private Map<FleetDTO, StrippedRaceDTO> racesPerFleet;
private Map<FleetDTO, Long> delayToLiveInMillisPerFleet;
public RaceColumnDTO() { public RaceColumnDTO() {
trackedRaceIdentifiersPerFleet = new HashMap<FleetDTO, RegattaAndRaceIdentifier>(); trackedRaceIdentifiersPerFleet = new HashMap<FleetDTO, RegattaAndRaceIdentifier>();
racesPerFleet = new HashMap<FleetDTO, StrippedRaceDTO>(); racesPerFleet = new HashMap<FleetDTO, StrippedRaceDTO>();
fleets = new ArrayList<FleetDTO>(); fleets = new ArrayList<FleetDTO>();
delayToLiveInMillisPerFleet = new HashMap<FleetDTO, Long>();
} }
public String getRaceColumnName() { public String getRaceColumnName() {
@@ -182,12 +180,4 @@ public class RaceColumnDTO extends NamedDTO implements IsSerializable {
public void addFleet(FleetDTO fleet) { public void addFleet(FleetDTO fleet) {
fleets.add(fleet); fleets.add(fleet);
} }
public long getDelayToLiveInMillis(FleetDTO fleet) {
return delayToLiveInMillisPerFleet.get(fleet);
}
public void setDelayToLiveInMillis(FleetDTO fleet, long delayToLiveInMillis) {
this.delayToLiveInMillisPerFleet.put(fleet, delayToLiveInMillis);
}
} }