unified the way RaceColumnDTO.isLive() works for stripped and complete leaderboards

This commit is contained in:
Axel Uhl committed 2012-12-03 16:24:11 +01:00
1 parent 835460f255
commit 024ca01e4a
2 files changed
+21 -17

No files matched your search

@@ -1924,6 +1924,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
private StrippedLeaderboardDTO createStrippedLeaderboardDTO(Leaderboard leaderboard, boolean withGeoLocationData) {
StrippedLeaderboardDTO leaderboardDTO = new StrippedLeaderboardDTO();
TimePoint startOfLatestRace = null;
TimePoint now = MillisecondsTimePoint.now();
Long delayToLiveInMillisForLatestRace = null;
leaderboardDTO.name = leaderboard.getName();
leaderboardDTO.competitorDisplayNames = new HashMap<CompetitorDTO, String>();
@@ -1942,6 +1943,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
leaderboardDTO.hasCarriedPoints = leaderboard.hasCarriedPoints();
leaderboardDTO.discardThresholds = leaderboard.getResultDiscardingRule().getDiscardIndexResultsStartingWithHowManyRaces();
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
TimePoint latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive = null;
for (Fleet fleet : raceColumn.getFleets()) {
RaceDTO raceDTO = null;
RegattaAndRaceIdentifier raceIdentifier = null;
@@ -1962,10 +1964,25 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
raceDTO.places = racePlaces;
raceDTO.startOfRace = trackedRace.getStartOfRace() == null ? null : trackedRace.getStartOfRace().asDate();
raceDTO.endOfRace = trackedRace.getEndOfRace() == null ? null : trackedRace.getEndOfRace().asDate();
if (trackedRace.hasStarted(now) && trackedRace.hasGPSData() && trackedRace.hasWindData()) {
TimePoint liveTimePointForTrackedRace = now;
final TimePoint endOfRace = trackedRace.getEndOfRace();
if (endOfRace != null) {
liveTimePointForTrackedRace = endOfRace;
}
if (latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive == null
|| liveTimePointForTrackedRace
.after(latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive)) {
latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive = liveTimePointForTrackedRace;
}
}
}
final FleetDTO fleetDTO = convertToFleetDTO(fleet);
leaderboardDTO.addRace(raceColumn.getName(), raceColumn.getExplicitFactor(), fleetDTO,
RaceColumnDTO raceColumnDTO = leaderboardDTO.addRace(raceColumn.getName(), raceColumn.getExplicitFactor(), fleetDTO,
raceColumn.isMedalRace(), raceIdentifier, raceDTO);
if (latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive != null) {
raceColumnDTO.setWhenLastTrackedRaceWasLive(latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive.asDate());
}
}
}
return leaderboardDTO;
@@ -13,7 +13,7 @@ import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
public class RaceColumnDTO extends NamedDTO implements IsSerializable {
private static final long IS_LIVE_GRACE_PERIOD_IN_MILLIS = 5 * 60 * 1000; // five minutes
private static final long IS_LIVE_GRACE_PERIOD_IN_MILLIS = 3 * 60 * 1000; // three minutes
private boolean medalRace;
private List<FleetDTO> fleets;
@@ -146,23 +146,10 @@ public class RaceColumnDTO extends NamedDTO implements IsSerializable {
*/
public boolean isLive() {
boolean result = false;
final long now = System.currentTimeMillis();
if (getWhenLastTrackedRaceWasLive() != null
&& getWhenLastTrackedRaceWasLive().getTime() > System.currentTimeMillis() - IS_LIVE_GRACE_PERIOD_IN_MILLIS) {
&& getWhenLastTrackedRaceWasLive().getTime() > now - IS_LIVE_GRACE_PERIOD_IN_MILLIS) {
result = true;
} else {
for (FleetDTO fleet : getFleets()) {
final RaceDTO raceDTO = racesPerFleet.get(fleet);
if (trackedRaceIdentifiersPerFleet.get(fleet) != null
&& raceDTO != null
&& raceDTO.trackedRace != null
&& raceDTO.trackedRace.hasGPSData && raceDTO.trackedRace.hasWindData
&& raceDTO.endOfRace == null
&& (raceDTO.trackedRace.startOfTracking != null ? new Date()
.after(raceDTO.trackedRace.startOfTracking) : false)) {
result = true;
break;
}
}
}
return result;
}