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); } }