From 96fb38555f87ea7d50fc8587fd2589b3f624c57d Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Sat, 5 Jul 2014 00:13:37 +0200 Subject: [PATCH] pass cache to more rank calculations, starting from computeDTO --- .../leaderboard/impl/AbstractSimpleLeaderboardImpl.java | 2 +- .../sailing/domain/tracking/TrackedLegOfCompetitor.java | 6 ++++++ .../sap/sailing/domain/tracking/impl/TrackedLegImpl.java | 2 +- .../domain/tracking/impl/TrackedLegOfCompetitorImpl.java | 7 ++++++- 4 files changed, 14 insertions(+), 3 deletions(-) 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;