diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java
index e82c9117ee2..fa5732a938d 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java
@@ -1681,7 +1681,7 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race
if (legRanks != null) {
result.rank = legRanks.get(trackedLeg.getCompetitor());
} else {
- result.rank = trackedLeg.getRank(timePoint);
+ result.rank = trackedLeg.getRank(timePoint, cache);
}
result.started = trackedLeg.hasStartedLeg(timePoint);
Speed velocityMadeGood;
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java
index 23581241bae..28eed19c39d 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java
@@ -128,6 +128,12 @@ public interface TrackedLegOfCompetitor extends Serializable {
*/
int getRank(TimePoint timePoint);
+ /**
+ * Same as {@link #getRank(TimePoint)} with the additional option to provide a cache
+ * that can help avoid redundant calculations of wind and leg data.
+ */
+ int getRank(TimePoint timePoint, WindLegTypeAndLegBearingCache cache);
+
/**
* Computes the gap in seconds to the leader / winner of this leg. Returns null in case this leg's
* competitor hasn't started the leg yet.
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java
index 807ed950074..ddcd33f7c2c 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java
@@ -98,7 +98,7 @@ public class TrackedLegImpl implements TrackedLeg, RaceChangeListener {
return getCompetitorTracksOrderedByRank(timePoint, new NoCachingWindLegTypeAndLegBearingCache());
}
- private List getCompetitorTracksOrderedByRank(TimePoint timePoint, WindLegTypeAndLegBearingCache cache) {
+ List getCompetitorTracksOrderedByRank(TimePoint timePoint, WindLegTypeAndLegBearingCache cache) {
List rankedCompetitorList;
synchronized (competitorTracksOrderedByRank) {
rankedCompetitorList = competitorTracksOrderedByRank.get(timePoint);
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java
index 86aaebc55a0..79ec5c61275 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java
@@ -276,9 +276,14 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor {
*/
@Override
public int getRank(TimePoint timePoint) {
+ return getRank(timePoint, new NoCachingWindLegTypeAndLegBearingCache());
+ }
+
+ @Override
+ public int getRank(TimePoint timePoint, WindLegTypeAndLegBearingCache cache) {
int result = 0;
if (hasStartedLeg(timePoint)) {
- List competitorTracksByRank = getTrackedLeg().getCompetitorTracksOrderedByRank(timePoint);
+ List competitorTracksByRank = getTrackedLeg().getCompetitorTracksOrderedByRank(timePoint, cache);
result = competitorTracksByRank.indexOf(this)+1;
}
return result;