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