diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java
index 8e56e2ecc5e..31e0876e7a8 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java
@@ -462,8 +462,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
for (RaceColumn raceColumn : leaderboard.getRaceColumns()) {
RaceColumnDTO raceColumnDTO = result.createEmptyRaceColumn(raceColumn.getName(), raceColumn.isMedalRace(),
leaderboard.getScoringScheme().isValidInTotalScore(leaderboard, raceColumn, timePoint));
- TimePoint latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive = null;
for (Fleet fleet : raceColumn.getFleets()) {
+ TimePoint latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive = null;
RegattaAndRaceIdentifier raceIdentifier = null;
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
final FleetDTO fleetDTO = convertToFleetDTO(fleet);
@@ -476,19 +476,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
if (endOfRace != null) {
liveTimePointForTrackedRace = endOfRace;
}
- if (latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive == null ||
- liveTimePointForTrackedRace.after(latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive)) {
- latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive = liveTimePointForTrackedRace;
- }
+ latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive = liveTimePointForTrackedRace;
}
}
// Note: the RaceColumnDTO won't be created by the following addRace call because it has been created
// above by the result.createEmptyRaceColumn call
result.addRace(raceColumn.getName(), raceColumn.getExplicitFactor(), fleetDTO,
raceColumn.isMedalRace(), raceIdentifier, /* StrippedRaceDTO */ null);
- }
- if (latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive != null) {
- raceColumnDTO.setWhenLastTrackedRaceWasLive(latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive.asDate());
+ if (latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive != null) {
+ raceColumnDTO.setWhenLastTrackedRaceWasLive(fleetDTO, latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive.asDate());
+ }
}
result.setCompetitorsFromBestToWorst(raceColumnDTO, getCompetitorDTOList(leaderboard.getCompetitorsFromBestToWorst(raceColumn, timePoint)));
}
@@ -1943,8 +1940,8 @@ 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()) {
+ TimePoint latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive = null;
RaceDTO raceDTO = null;
RegattaAndRaceIdentifier raceIdentifier = null;
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
@@ -1970,18 +1967,14 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
if (endOfRace != null) {
liveTimePointForTrackedRace = endOfRace;
}
- if (latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive == null
- || liveTimePointForTrackedRace
- .after(latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive)) {
- latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive = liveTimePointForTrackedRace;
- }
+ latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive = liveTimePointForTrackedRace;
}
}
final FleetDTO fleetDTO = convertToFleetDTO(fleet);
RaceColumnDTO raceColumnDTO = leaderboardDTO.addRace(raceColumn.getName(), raceColumn.getExplicitFactor(), fleetDTO,
raceColumn.isMedalRace(), raceIdentifier, raceDTO);
if (latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive != null) {
- raceColumnDTO.setWhenLastTrackedRaceWasLive(latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive.asDate());
+ raceColumnDTO.setWhenLastTrackedRaceWasLive(fleetDTO, latestTimePointAfterQueryTimePointWhenATrackedRaceWasLive.asDate());
}
}
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLeaderboardDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLeaderboardDTO.java
index b881c439f3a..b5455d56907 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLeaderboardDTO.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/AbstractLeaderboardDTO.java
@@ -263,8 +263,10 @@ public abstract class AbstractLeaderboardDTO implements IsSerializable {
*/
public boolean containsLiveRace() {
for (RaceColumnDTO race : getRaceList()) {
- if (race.isLive()) {
- return true;
+ for (FleetDTO fleet : race.getFleets()) {
+ if (race.isLive(fleet)) {
+ return true;
+ }
}
}
return false;
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceColumnDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceColumnDTO.java
index 6fdb294988d..f5baf8d7580 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceColumnDTO.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RaceColumnDTO.java
@@ -34,7 +34,7 @@ public class RaceColumnDTO extends NamedDTO implements IsSerializable {
* If no tracked race is attached to this column or none of the tracked races attached has started at the query time
* point, this field is null.
*/
- private Date whenLastTrackedRaceWasLive;
+ private Map whenLastTrackedRaceWasLiveByFleet;
RaceColumnDTO() {} // for GWT serialization
@@ -43,6 +43,7 @@ public class RaceColumnDTO extends NamedDTO implements IsSerializable {
trackedRaceIdentifiersPerFleet = new HashMap();
racesPerFleet = new HashMap();
fleets = new ArrayList();
+ whenLastTrackedRaceWasLiveByFleet = new HashMap();
}
public boolean isValidInTotalScore() {
@@ -142,13 +143,14 @@ public class RaceColumnDTO extends NamedDTO implements IsSerializable {
}
/**
+ * @param fleet TODO
* @return true if the startOfTracking is after the current date and there's no end of the race
*/
- public boolean isLive() {
+ public boolean isLive(FleetDTO fleet) {
boolean result = false;
final long now = System.currentTimeMillis();
- if (getWhenLastTrackedRaceWasLive() != null
- && getWhenLastTrackedRaceWasLive().getTime() > now - IS_LIVE_GRACE_PERIOD_IN_MILLIS) {
+ if (getWhenLastTrackedRaceWasLive(fleet) != null
+ && getWhenLastTrackedRaceWasLive(fleet).getTime() > now - IS_LIVE_GRACE_PERIOD_IN_MILLIS) {
result = true;
}
return result;
@@ -208,11 +210,11 @@ public class RaceColumnDTO extends NamedDTO implements IsSerializable {
fleets.add(fleet);
}
- private Date getWhenLastTrackedRaceWasLive() {
- return whenLastTrackedRaceWasLive;
+ private Date getWhenLastTrackedRaceWasLive(FleetDTO fleet) {
+ return whenLastTrackedRaceWasLiveByFleet.get(fleet);
}
- public void setWhenLastTrackedRaceWasLive(Date whenLastTrackedRaceWasLive) {
- this.whenLastTrackedRaceWasLive = whenLastTrackedRaceWasLive;
+ public void setWhenLastTrackedRaceWasLive(FleetDTO fleet, Date whenLastTrackedRaceWasLive) {
+ this.whenLastTrackedRaceWasLiveByFleet.put(fleet, whenLastTrackedRaceWasLive);
}
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java
index 83bc35c776a..99026b157af 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java
@@ -371,7 +371,7 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
for (RaceColumnDTO raceColumn : raceColumnsPerDay) {
String raceColumnName = raceColumn.getRaceColumnName();
RaceDTO race = raceColumn.getRace(defaultFleet);
- renderRaceLink(leaderboard.name, race, raceColumn.isLive(), raceColumnName, b);
+ renderRaceLink(leaderboard.name, race, raceColumn.isLive(defaultFleet), raceColumnName, b);
}
b.appendHtmlConstant("");
@@ -424,7 +424,7 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
for (RaceColumnDTO raceColumn : raceColumns) {
String raceColumnName = raceColumn.getRaceColumnName();
RaceDTO race = raceColumn.getRace(fleet);
- renderRaceLink(leaderboardName, race, raceColumn.isLive(), raceColumnName, b);
+ renderRaceLink(leaderboardName, race, raceColumn.isLive(fleet), raceColumnName, b);
}
}