diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java index f5b49d15d74..a716c979abd 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/Leaderboard.java @@ -48,6 +48,12 @@ public interface Leaderboard extends Named { * Tells if the net points have been corrected by a {@link ScoreCorrection} */ boolean isNetPointsCorrected(); + + /** + * @return null, if the competitor's fleet in the race column cannot be determined, the + * {@link Fleet} otherwise + */ + Fleet getFleet(); } /** diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardImpl.java index 7da7a7dcb03..2a61ae30a1e 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardImpl.java @@ -77,7 +77,10 @@ public abstract class AbstractLeaderboardImpl implements Leaderboard, RaceColumn private final int totalPoints; private final MaxPointsReason maxPointsReason; private final boolean discarded; - private EntryImpl(int trackedPoints, int netPoints, boolean isNetPointsCorrected, int totalPoints, MaxPointsReason maxPointsReason, boolean discarded) { + private final Fleet fleet; + + private EntryImpl(int trackedPoints, int netPoints, boolean isNetPointsCorrected, int totalPoints, + MaxPointsReason maxPointsReason, boolean discarded, Fleet fleet) { super(); this.trackedPoints = trackedPoints; this.netPoints = netPoints; @@ -85,6 +88,7 @@ public abstract class AbstractLeaderboardImpl implements Leaderboard, RaceColumn this.totalPoints = totalPoints; this.maxPointsReason = maxPointsReason; this.discarded = discarded; + this.fleet = fleet; } @Override public int getTrackedPoints() { @@ -110,6 +114,10 @@ public abstract class AbstractLeaderboardImpl implements Leaderboard, RaceColumn public boolean isDiscarded() { return discarded; } + @Override + public Fleet getFleet() { + return fleet; + } } /** @@ -286,7 +294,7 @@ public abstract class AbstractLeaderboardImpl implements Leaderboard, RaceColumn return new EntryImpl(trackedPoints, correctedResults.getCorrectedScore(), correctedResults.isCorrected(), discarded ? 0 : correctedResults.getCorrectedScore() * (race.isMedalRace() ? MEDAL_RACE_FACTOR : 1), - correctedResults.getMaxPointsReason(), discarded); + correctedResults.getMaxPointsReason(), discarded, race.getFleetOfCompetitor(competitor)); } @Override @@ -312,7 +320,8 @@ public abstract class AbstractLeaderboardImpl implements Leaderboard, RaceColumn boolean discarded = discardedRacesForCompetitor.contains(raceColumn); Entry entry = new EntryImpl(trackedPoints, correctedResults.getCorrectedScore(), correctedResults.isCorrected(), discarded ? 0 : correctedResults.getCorrectedScore() - * (raceColumn.isMedalRace() ? 2 : 1), correctedResults.getMaxPointsReason(), discarded); + * (raceColumn.isMedalRace() ? 2 : 1), correctedResults.getMaxPointsReason(), discarded, + raceColumn.getFleetOfCompetitor(competitor)); result.put(new Pair(competitor, raceColumn), entry); } } 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 cb9ee18ad5d..de6971d0298 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 @@ -271,7 +271,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS throws NoWindException { long startOfRequestHandling = System.currentTimeMillis(); LeaderboardDTO result = null; - Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); + final Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); if (leaderboard != null) { result = new LeaderboardDTO(); final TimePoint timePoint = new MillisecondsTimePoint(date); @@ -304,12 +304,12 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS result.competitors.add(competitorDTO); Map> futuresForColumnName = new HashMap>(); for (final RaceColumn raceColumn : leaderboard.getRaceColumns()) { - final Entry entry = leaderboard.getEntry(competitor, raceColumn, timePoint); RunnableFuture future = new FutureTask(new Callable() { @Override public LeaderboardEntryDTO call() { try { - return getLeaderboardEntryDTO(entry, raceColumn.getTrackedRace(competitor), competitor, timePoint, + Entry entry = leaderboard.getEntry(competitor, raceColumn, timePoint); + return getLeaderboardEntryDTO(entry, raceColumn.getTrackedRace(competitor), competitor, timePoint, namesOfRaceColumnsForWhichToLoadLegDetails != null && namesOfRaceColumnsForWhichToLoadLegDetails.contains(raceColumn.getName())); } catch (NoWindException e) { @@ -389,6 +389,8 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS entryDTO.legDetails.add(legEntry); } } + final Fleet fleet = entry.getFleet(); + entryDTO.fleet = fleet == null ? null : createFleetDTO(fleet); final Distance windwardDistanceToOverallLeader = trackedRace == null ? null : trackedRace.getWindwardDistanceToOverallLeader(competitor, timePoint); entryDTO.windwardDistanceToOverallLeaderInMeters = windwardDistanceToOverallLeader == null ? null : windwardDistanceToOverallLeader.getMeters(); final Distance averageCrossTrackError = trackedRace == null ? null : trackedRace.getAverageCrossTrackError(competitor, timePoint); @@ -495,7 +497,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS private SeriesDTO createSeriesDTO(Series series) { List fleets = new ArrayList(); for (Fleet fleet : series.getFleets()) { - fleets.add(new FleetDTO(fleet.getName(), fleet.getOrdering(), fleet.getColor())); + fleets.add(createFleetDTO(fleet)); } List raceColumns = new ArrayList(); for (RaceColumnInSeries raceColumn : series.getRaceColumns()) { @@ -508,6 +510,10 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS return result; } + private FleetDTO createFleetDTO(Fleet fleet) { + return new FleetDTO(fleet.getName(), fleet.getOrdering(), fleet.getColor()); + } + private List getRaceDTOs(Regatta regatta) { List result = new ArrayList(); for (RaceDefinition r : regatta.getAllRaces()) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardEntryDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardEntryDTO.java index 3544b3c71c2..41da5aec791 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardEntryDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/LeaderboardEntryDTO.java @@ -48,6 +48,13 @@ public class LeaderboardEntryDTO implements IsSerializable { */ public List legDetails; + /** + * null, if the fleet couldn't be determined, e.g., because the tracked race isn't known and therefore + * the link to the fleet is not known; otherwise the description of the fleet in which the competitor scored this + * entry + */ + public FleetDTO fleet; + public LeaderboardEntryDTO() { } @Override