attempt to detect the delay to live in millis of the race that started latest and apply it to the LeaderboardPanel's timer

This commit is contained in:
Axel Uhl committed 2012-07-21 21:33:10 +02:00
1 parent 98b6331799
commit e6c4982c41
4 files changed
+79 -39

No files matched your search

@@ -1291,40 +1291,62 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
selectedRaceColumns.addAll(getRaceColumnsToAddImplicitly(leaderboard));
setLeaderboard(leaderboard);
adjustColumnLayout(leaderboard);
adjustDelayToLive();
getData().getList().clear();
if (leaderboard != null) {
getData().getList().addAll(getRowsToDisplay(leaderboard));
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
SortableColumn<?, ?> c = (SortableColumn<?, ?>) getLeaderboardTable().getColumn(i);
c.updateMinMax(leaderboard);
// Toggle pre-selected race, if the setting is set and it isn't open yet
if (!autoExpandPerformedOnce && isAutoExpandPreSelectedRace()
&& c instanceof RaceColumn<?>
&& ((RaceColumn<?>) c).getRace().hasTrackedRace(preSelectedRace)) {
ExpandableSortableColumn<?> expandableSortableColumn = (ExpandableSortableColumn<?>) c;
if (!expandableSortableColumn.isExpanded()) {
expandableSortableColumn.toggleExpansion();
autoExpandPerformedOnce = true;
}
}
}
Comparator<LeaderboardRowDTO> comparator = getComparatorForSelectedSorting();
if (comparator != null) {
Collections.sort(getData().getList(), comparator);
} else {
SortableColumn<LeaderboardRowDTO, ?> columnToSortFor = getDefaultSortColumn();
// if no sorting was selected, sort by ascending rank and mark
// table header so
sort(columnToSortFor, true);
}
// Reselect the selected rows
clearSelection();
for (LeaderboardRowDTO row : data.getList()) {
if (competitorSelectionProvider.isSelected(row.competitor)) {
leaderboardSelectionModel.setSelected(row, true);
getData().getList().addAll(getRowsToDisplay(leaderboard));
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
SortableColumn<?, ?> c = (SortableColumn<?, ?>) getLeaderboardTable().getColumn(i);
c.updateMinMax(leaderboard);
// Toggle pre-selected race, if the setting is set and it isn't open yet
if (!autoExpandPerformedOnce && isAutoExpandPreSelectedRace() && c instanceof RaceColumn<?>
&& ((RaceColumn<?>) c).getRace().hasTrackedRace(preSelectedRace)) {
ExpandableSortableColumn<?> expandableSortableColumn = (ExpandableSortableColumn<?>) c;
if (!expandableSortableColumn.isExpanded()) {
expandableSortableColumn.toggleExpansion();
autoExpandPerformedOnce = true;
}
}
}
Comparator<LeaderboardRowDTO> comparator = getComparatorForSelectedSorting();
if (comparator != null) {
Collections.sort(getData().getList(), comparator);
} else {
SortableColumn<LeaderboardRowDTO, ?> columnToSortFor = getDefaultSortColumn();
// if no sorting was selected, sort by ascending rank and mark
// table header so
sort(columnToSortFor, true);
}
// Reselect the selected rows
clearSelection();
for (LeaderboardRowDTO row : data.getList()) {
if (competitorSelectionProvider.isSelected(row.competitor)) {
leaderboardSelectionModel.setSelected(row, true);
}
}
}
}
/**
* Based on the {@link #selectedRaceColumns}' {@link RaceColumnDTO#getDelayToLiveInMillis()} for the race that has
* the latest {@link RaceColumnDTO#getStartDate(FleetDTO) start time}, if no {@link #settingsUpdatedExplicitly
* explicit setting changes} were performed, automatically adjusts the delay accordingly.
*/
private void adjustDelayToLive() {
if (!settingsUpdatedExplicitly) {
long latestNonNullDelayToLiveInMillis = 0; // if we don't fine anything, use zero delay ("now")
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);
}
}
@@ -431,11 +431,13 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
for (Fleet fleet : raceColumn.getFleets()) {
RegattaAndRaceIdentifier raceIdentifier = null;
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
final FleetDTO fleetDTO = createFleetDTO(fleet);
if (trackedRace != null) {
raceColumnDTO.setDelayToLiveInMillis(fleetDTO, trackedRace.getDelayToLiveInMillis());
raceIdentifier = new RegattaNameAndRaceName(trackedRace.getTrackedRegatta().getRegatta()
.getName(), trackedRace.getRace().getName());
}
result.addRace(raceColumn.getName(), createFleetDTO(fleet), raceColumn.isMedalRace(),
result.addRace(raceColumn.getName(), fleetDTO, raceColumn.isMedalRace(),
raceIdentifier, /* StrippedRaceDTO */ null);
}
result.setCompetitorsFromBestToWorst(raceColumnDTO, getCompetitorDTOList(leaderboard.getCompetitorsFromBestToWorst(raceColumn, timePoint)));
@@ -1796,8 +1798,10 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
StrippedRaceDTO race = null;
for (Fleet fleet : raceColumn.getFleets()) {
RegattaAndRaceIdentifier raceIdentifier = null;
long delayToLiveInMillis = 0;
if (raceColumn.getTrackedRace(fleet) != null) {
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
delayToLiveInMillis = trackedRace.getDelayToLiveInMillis();
raceIdentifier = new RegattaNameAndRaceName(trackedRace.getTrackedRegatta().getRegatta().getName(), trackedRace.getRace().getName());
// Optional: Getting the places of the race
PlacemarkOrderDTO racePlaces = withGeoLocationData ? getRacePlaces(trackedRace) : null;
@@ -1807,7 +1811,10 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
race.startOfTracking = trackedRace.getStartOfTracking() == null ? null : trackedRace.getStartOfTracking().asDate();
race.endOfRace = trackedRace.getEndOfRace() == null ? null : trackedRace.getEndOfRace().asDate();
}
leaderboardDTO.addRace(raceColumn.getName(), createFleetDTO(fleet), raceColumn.isMedalRace(), raceIdentifier, race);
final FleetDTO fleetDTO = createFleetDTO(fleet);
RaceColumnDTO raceColumnDTO = leaderboardDTO.addRace(raceColumn.getName(), fleetDTO,
raceColumn.isMedalRace(), raceIdentifier, race);
raceColumnDTO.setDelayToLiveInMillis(fleetDTO, delayToLiveInMillis);
}
}
leaderboardDTO.hasCarriedPoints = leaderboard.hasCarriedPoints();
@@ -126,23 +126,24 @@ public abstract class AbstractLeaderboardDTO implements IsSerializable {
* @param fleetDTO
* must not be null
*/
public void addRace(String raceColumnName, FleetDTO fleetDTO, boolean medalRace,
public RaceColumnDTO addRace(String raceColumnName, FleetDTO fleetDTO, boolean medalRace,
RegattaAndRaceIdentifier trackedRaceIdentifier, StrippedRaceDTO race) {
assert fleetDTO != null;
RaceColumnDTO raceInLeaderboardDTO = getOrCreateRaceColumn(raceColumnName);
RaceColumnDTO raceColumnDTO = getOrCreateRaceColumn(raceColumnName);
boolean contains = false;
for (FleetDTO fleet : raceInLeaderboardDTO.getFleets()) {
for (FleetDTO fleet : raceColumnDTO.getFleets()) {
if (fleet.name.equals(fleetDTO.name)) {
contains = true;
break;
}
}
if (!contains) {
raceInLeaderboardDTO.addFleet(fleetDTO);
raceColumnDTO.addFleet(fleetDTO);
}
raceInLeaderboardDTO.setMedalRace(medalRace);
raceInLeaderboardDTO.setRaceIdentifier(fleetDTO, trackedRaceIdentifier);
raceInLeaderboardDTO.setRace(fleetDTO, race);
raceColumnDTO.setMedalRace(medalRace);
raceColumnDTO.setRaceIdentifier(fleetDTO, trackedRaceIdentifier);
raceColumnDTO.setRace(fleetDTO, race);
return raceColumnDTO;
}
/**
@@ -17,11 +17,13 @@ public class RaceColumnDTO extends NamedDTO implements IsSerializable {
private List<FleetDTO> fleets;
private Map<FleetDTO, RegattaAndRaceIdentifier> trackedRaceIdentifiersPerFleet;
private Map<FleetDTO, StrippedRaceDTO> racesPerFleet;
private Map<FleetDTO, Long> delayToLiveInMillisPerFleet;
public RaceColumnDTO() {
trackedRaceIdentifiersPerFleet = new HashMap<FleetDTO, RegattaAndRaceIdentifier>();
racesPerFleet = new HashMap<FleetDTO, StrippedRaceDTO>();
fleets = new ArrayList<FleetDTO>();
delayToLiveInMillisPerFleet = new HashMap<FleetDTO, Long>();
}
public String getRaceColumnName() {
@@ -180,4 +182,12 @@ public class RaceColumnDTO extends NamedDTO implements IsSerializable {
public void addFleet(FleetDTO 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);
}
}