mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-14 16:20:57 +00:00
refactored getTime... methods to return a Duration object
This commit is contained in:
1 parent
2deb54e948
commit
115063d0ac
6 files changed
+27
-23
No files matched your search
+3
-3
@@ -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.
|
||||
|
||||
+14
-13
@@ -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());
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+5
-4
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user