From 115063d0ac7f4f3883e9d066f87c8fd04c023d39 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 24 Apr 2014 16:53:37 +0200 Subject: [PATCH] refactored getTime... methods to return a Duration object --- .../domain/test/TimeInLegProgressesTest.java | 6 ++--- .../domain/leaderboard/Leaderboard.java | 3 ++- .../impl/AbstractSimpleLeaderboardImpl.java | 27 ++++++++++--------- .../tracking/TrackedLegOfCompetitor.java | 3 ++- .../impl/TrackedLegOfCompetitorImpl.java | 9 ++++--- .../sailing/xmlexport/LeaderboardData.java | 2 +- 6 files changed, 27 insertions(+), 23 deletions(-) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TimeInLegProgressesTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TimeInLegProgressesTest.java index 44e2c5d1a92..29d8066a0c4 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TimeInLegProgressesTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TimeInLegProgressesTest.java @@ -49,8 +49,8 @@ public class TimeInLegProgressesTest extends OnlineTracTracBasedTest { final Competitor findel = getCompetitorByName("Findel"); TrackedLegOfCompetitor findelsSecondLeg = getTrackedRace().getTrackedLeg(getTrackedRace().getRace().getCourse().getLegs().get(1)).getTrackedLeg(findel); TimePoint findelStartedHisSecondLegAt = findelsSecondLeg.getStartTime(); - assertEquals(null, findelsSecondLeg.getTimeInMilliSeconds(findelStartedHisSecondLegAt.minus(1))); - assertEquals(0.0, findelsSecondLeg.getTimeInMilliSeconds(findelStartedHisSecondLegAt), 0.00001); - assertEquals(10000.0, findelsSecondLeg.getTimeInMilliSeconds(findelStartedHisSecondLegAt.plus(10000)), 0.00001); + assertEquals(null, findelsSecondLeg.getTime(findelStartedHisSecondLegAt.minus(1))); + assertEquals(0.0, findelsSecondLeg.getTime(findelStartedHisSecondLegAt).asMillis(), 0.00001); + assertEquals(10000.0, findelsSecondLeg.getTime(findelStartedHisSecondLegAt.plus(10000)).asMillis(), 0.00001); } } 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 bbeae7174cb..ad4eb01c558 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 @@ -13,6 +13,7 @@ import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceColumnListener; import com.sap.sailing.domain.base.Series; import com.sap.sailing.domain.common.Distance; +import com.sap.sailing.domain.common.Duration; import com.sap.sailing.domain.common.LegType; import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.Named; @@ -386,7 +387,7 @@ public interface Leaderboard extends Named { * or the competitor hasn't started sailing a single downwind leg at timePoint for any of the tracked * races attached to this leaderboard */ - Long getTotalTimeSailedInLegTypeInMilliseconds(Competitor competitor, LegType legType, TimePoint timePoint) throws NoWindException; + Duration getTotalTimeSailedInLegType(Competitor competitor, LegType legType, TimePoint timePoint) throws NoWindException; /** * Starts counting when the gun goes off, not when the competitor passed the line. 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 ab17d07356c..6d53164997d 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 @@ -39,6 +39,7 @@ import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceColumnListener; import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.common.Distance; +import com.sap.sailing.domain.common.Duration; import com.sap.sailing.domain.common.LegType; import com.sap.sailing.domain.common.ManeuverType; import com.sap.sailing.domain.common.MaxPointsReason; @@ -911,8 +912,8 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race } @Override - public Long getTotalTimeSailedInLegTypeInMilliseconds(Competitor competitor, LegType legType, TimePoint timePoint) throws NoWindException { - Long result = null; + public Duration getTotalTimeSailedInLegType(Competitor competitor, LegType legType, TimePoint timePoint) throws NoWindException { + Duration result = null; // TODO should we ensure that competitor participated in all race columns? outerLoop: for (TrackedRace trackedRace : getTrackedRaces()) { @@ -927,12 +928,12 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race LegType trackedLegType = trackedRace.getTrackedLeg(leg).getLegType( trackedLeg.getStartTime()); if (legType == trackedLegType) { - Long millisecondsSpendOnDownwind = trackedLeg.getTimeInMilliSeconds(timePoint); - if (millisecondsSpendOnDownwind != null) { + Duration timeSpentOnDownwind = trackedLeg.getTime(timePoint); + if (timeSpentOnDownwind != null) { if (result == null) { - result = millisecondsSpendOnDownwind; + result = timeSpentOnDownwind; } else { - result += millisecondsSpendOnDownwind; + result = result.plus(timeSpentOnDownwind); } } else { // Although the competitor has started the leg, no value was produced. This @@ -1239,12 +1240,12 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race row.maximumSpeedOverGroundInKnots = maximumSpeedOverGround.getB().getKnots(); row.whenMaximumSpeedOverGroundWasAchieved = maximumSpeedOverGround.getA().getTimePoint().asDate(); } - final Long totalTimeSailedDownwindInMilliseconds = this.getTotalTimeSailedInLegTypeInMilliseconds(competitor, LegType.DOWNWIND, timePoint); - row.totalTimeSailedDownwindInSeconds = totalTimeSailedDownwindInMilliseconds==null?null:1./1000.*totalTimeSailedDownwindInMilliseconds; - final Long totalTimeSailedUpwindInMilliseconds = this.getTotalTimeSailedInLegTypeInMilliseconds(competitor, LegType.UPWIND, timePoint); - row.totalTimeSailedUpwindInSeconds = totalTimeSailedUpwindInMilliseconds==null?null:1./1000.*totalTimeSailedUpwindInMilliseconds; - final Long totalTimeSailedReachingInMilliseconds = this.getTotalTimeSailedInLegTypeInMilliseconds(competitor, LegType.REACHING, timePoint); - row.totalTimeSailedReachingInSeconds = totalTimeSailedReachingInMilliseconds==null?null:1./1000.*totalTimeSailedReachingInMilliseconds; + final Duration totalTimeSailedDownwind = this.getTotalTimeSailedInLegType(competitor, LegType.DOWNWIND, timePoint); + row.totalTimeSailedDownwindInSeconds = totalTimeSailedDownwind==null?null:totalTimeSailedDownwind.asSeconds(); + final Duration totalTimeSailedUpwind = this.getTotalTimeSailedInLegType(competitor, LegType.UPWIND, timePoint); + row.totalTimeSailedUpwindInSeconds = totalTimeSailedUpwind==null?null:totalTimeSailedUpwind.asSeconds(); + final Duration totalTimeSailedReaching = this.getTotalTimeSailedInLegType(competitor, LegType.REACHING, timePoint); + row.totalTimeSailedReachingInSeconds = totalTimeSailedReaching==null?null:totalTimeSailedReaching.asSeconds(); final Long totalTimeSailedInMilliseconds = this.getTotalTimeSailedInMilliseconds(competitor, timePoint); row.totalTimeSailedInSeconds = totalTimeSailedInMilliseconds==null?null:1./1000.*totalTimeSailedInMilliseconds; final Distance totalDistanceTraveledInMeters = this.getTotalDistanceTraveled(competitor, timePoint); @@ -1489,7 +1490,7 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race Distance distanceTraveled = trackedLeg.getDistanceTraveled(timePoint); result.distanceTraveledInMeters = distanceTraveled == null ? null : distanceTraveled.getMeters(); result.estimatedTimeToNextWaypointInSeconds = trackedLeg.getEstimatedTimeToNextMarkInSeconds(timePoint); - result.timeInMilliseconds = trackedLeg.getTimeInMilliSeconds(timePoint); + result.timeInMilliseconds = trackedLeg.getTime(timePoint).asMillis(); result.finished = trackedLeg.hasFinishedLeg(timePoint); result.gapToLeaderInSeconds = trackedLeg.getGapToLeaderInSeconds(timePoint, legRanksCache.get(trackedLeg.getLeg()).entrySet().iterator().next().getKey()); 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 7976545e2e2..cfce168504d 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 @@ -7,6 +7,7 @@ import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Leg; import com.sap.sailing.domain.common.Bearing; import com.sap.sailing.domain.common.Distance; +import com.sap.sailing.domain.common.Duration; import com.sap.sailing.domain.common.LegType; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.Speed; @@ -26,7 +27,7 @@ public interface TrackedLegOfCompetitor extends Serializable { * competitor to complete the leg is returned. If the competitor didn't finish the leg before the end of tracking, * null is returned because this indicates that the tracker stopped sending valid data. */ - Long getTimeInMilliSeconds(TimePoint timePoint); + Duration getTime(TimePoint timePoint); /** * The distance over ground traveled by the competitor in this leg up to timePoint. If 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 71a93aead9f..59a309665a0 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 @@ -11,6 +11,7 @@ import com.sap.sailing.domain.base.Leg; import com.sap.sailing.domain.base.Mark; import com.sap.sailing.domain.common.Bearing; import com.sap.sailing.domain.common.Distance; +import com.sap.sailing.domain.common.Duration; import com.sap.sailing.domain.common.ManeuverType; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.Position; @@ -66,20 +67,20 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor { } @Override - public Long getTimeInMilliSeconds(TimePoint timePoint) { - Long result; + public Duration getTime(TimePoint timePoint) { + Duration result; MarkPassing passedStartWaypoint = getTrackedRace().getMarkPassing(getCompetitor(), getTrackedLeg().getLeg().getFrom()); if (passedStartWaypoint != null && !passedStartWaypoint.getTimePoint().after(timePoint)) { MarkPassing passedEndWaypoint = getTrackedRace().getMarkPassing(getCompetitor(), getTrackedLeg().getLeg().getTo()); if (passedEndWaypoint != null) { - result = passedEndWaypoint.getTimePoint().asMillis() - passedStartWaypoint.getTimePoint().asMillis(); + result = passedStartWaypoint.getTimePoint().until(passedEndWaypoint.getTimePoint()); } else { if (getTrackedRace().getEndOfTracking() != null && timePoint.after(getTrackedRace().getEndOfTracking())) { result = null; } else { - result = timePoint.asMillis() - passedStartWaypoint.getTimePoint().asMillis(); + result = passedStartWaypoint.getTimePoint().until(timePoint); } } } else { diff --git a/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/LeaderboardData.java b/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/LeaderboardData.java index 794cf60b2c4..bfe5551fed7 100644 --- a/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/LeaderboardData.java +++ b/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/LeaderboardData.java @@ -513,7 +513,7 @@ public class LeaderboardData extends ExportAction { addNamedElementWithValue(competitorLegDataElement, "average_velocity_made_good_in_knots", averageVelocityMadeGood != null ? averageVelocityMadeGood.getKnots() : 0); addNamedElementWithValue(competitorLegDataElement, "leg_finished_time_as_millis", handleValue(legFinishTime)); addNamedElementWithValue(competitorLegDataElement, "total_race_time_elapsed_as_millis", handleValue(legFinishTime)-handleValue(trackedLeg.getTrackedRace().getStartOfRace())); - addNamedElementWithValue(competitorLegDataElement, "time_spend_in_this_leg_as_millis", competitorLeg.getTimeInMilliSeconds(legFinishTime)); + addNamedElementWithValue(competitorLegDataElement, "time_spend_in_this_leg_as_millis", competitorLeg.getTime(legFinishTime).asMillis()); addNamedElementWithValue(competitorLegDataElement, "gap_to_leader_at_finish_in_seconds", competitorLeg.getGapToLeaderInSeconds(legFinishTime)); Distance windwardDistanceToOverallLeader = competitorLeg.getWindwardDistanceToOverallLeader(legFinishTime); addNamedElementWithValue(competitorLegDataElement, "windward_distance_to_overall_leader_that_has_finished_this_leg_in_meters", windwardDistanceToOverallLeader != null ? windwardDistanceToOverallLeader.getMeters() : 0);