refactored getTime... methods to return a Duration object

This commit is contained in:
Axel Uhl committed 2014-04-24 16:53:37 +02:00
1 parent 2deb54e948
commit 115063d0ac
6 files changed
+27 -23

No files matched your search

@@ -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);
}
}
@@ -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 <code>timePoint</code> 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.
@@ -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());
@@ -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,
* <code>null</code> 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 <code>timePoint</code>. If
@@ -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 {
@@ -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);