Added race duration statistic to HasRaceOfCompetitorContext

This commit is contained in:
Lennart Hensler committed 2018-07-25 15:58:51 +02:00
1 parent d3a832746a
commit 2b6822c812
2 files changed
+44 -23

No files matched your search

@@ -4,6 +4,7 @@ import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.NoWindException;
import com.sap.sailing.domain.common.Tack;
import com.sap.sse.common.Distance;
import com.sap.sse.common.Duration;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.Speed;
import com.sap.sse.datamining.annotations.Connector;
@@ -14,74 +15,74 @@ import com.sap.sse.datamining.shared.impl.dto.ClusterDTO;
public interface HasRaceOfCompetitorContext {
@Connector(scanForStatistics=false)
public HasTrackedRaceContext getTrackedRaceContext();
HasTrackedRaceContext getTrackedRaceContext();
@Connector(messageKey="Competitor")
@Statistic(messageKey="")
public Competitor getCompetitor();
Competitor getCompetitor();
@Dimension(messageKey="TackAtStart", ordinal=12)
public Tack getTackAtStart() throws NoWindException;
Tack getTackAtStart() throws NoWindException;
@Dimension(messageKey="DistanceToStarboardSideAtStartOfCompetitor", ordinal=13)
public ClusterDTO getPercentageClusterForDistanceToStarboardSideAtStart();
ClusterDTO getPercentageClusterForDistanceToStarboardSideAtStart();
@Dimension(messageKey="RelativeScoreInPercent", ordinal=14)
public ClusterDTO getPercentageClusterForRelativeScore();
ClusterDTO getPercentageClusterForRelativeScore();
@Statistic(messageKey="DistanceAtStart", resultDecimals=2, ordinal=0)
public Distance getDistanceToStartLineAtStart();
Distance getDistanceToStartLineAtStart();
@Statistic(messageKey="DistanceToStarboardSideAtStartOfCompetitor", resultDecimals=2, ordinal=1)
public Double getNormalizedDistanceToStarboardSideAtStartOfCompetitor();
Double getNormalizedDistanceToStarboardSideAtStartOfCompetitor();
@Statistic(messageKey="DistanceToStarboardSideAtStartOfCompetitorVsRankAtFirstMark", resultDecimals=2, ordinal=1)
public Pair<Double, Double> getNormalizedDistanceToStarboardSideAtStartOfCompetitorVsRankAtFirstMark();
Pair<Double, Double> getNormalizedDistanceToStarboardSideAtStartOfCompetitorVsRankAtFirstMark();
@Statistic(messageKey="WindwardDistanceToAdvantageousEndOfLineAtStartOfRace", resultDecimals=2, ordinal=2)
public Distance getWindwardDistanceToAdvantageousLineEndAtStartofRace();
Distance getWindwardDistanceToAdvantageousLineEndAtStartofRace();
@Statistic(messageKey="WindwardDistanceToAdvantageousEndOfLineAtStartOfCompetitor", resultDecimals=2, ordinal=2)
public Distance getWindwardDistanceToAdvantageousLineEndAtStartofCompetitor();
Distance getWindwardDistanceToAdvantageousLineEndAtStartofCompetitor();
@Connector(messageKey="SpeedWhenStarting", ordinal=3)
public Speed getSpeedWhenStarting();
Speed getSpeedWhenStarting();
@Connector(messageKey="SpeedTenSecondsBeforeStart", ordinal=4)
public Speed getSpeedTenSecondsBeforeStart();
Speed getSpeedTenSecondsBeforeStart();
@Connector(messageKey="SpeedTenSecondsAfterStart", ordinal=5)
public Speed getSpeedTenSecondsAfterStartOfRace();
Speed getSpeedTenSecondsAfterStartOfRace();
@Statistic(messageKey="RankThirtySecondsAfterStart", resultDecimals=2, ordinal=6)
public Double getRankThirtySecondsAfterStartOfRace();
Double getRankThirtySecondsAfterStartOfRace();
@Statistic(messageKey="RankAfterHalfOfTheFirstLeg", resultDecimals=2, ordinal=7)
public Double getRankAfterHalfOfTheFirstLeg();
Double getRankAfterHalfOfTheFirstLeg();
@Statistic(messageKey="RankAtFirstMark", resultDecimals=2, ordinal=8)
public Double getRankAtFirstMark();
Double getRankAtFirstMark();
@Statistic(messageKey="RankGainsOrLossesBetweenFirstMarkAndFinish", resultDecimals=2, ordinal=9)
public Double getRankGainsOrLossesBetweenFirstMarkAndFinish();
Double getRankGainsOrLossesBetweenFirstMarkAndFinish();
@Statistic(messageKey="NumberOfManeuvers", resultDecimals=0, ordinal=10)
public int getNumberOfManeuvers();
int getNumberOfManeuvers();
@Statistic(messageKey="NumberOfTacks", resultDecimals=0, ordinal=11)
public int getNumberOfTacks();
int getNumberOfTacks();
@Statistic(messageKey="NumberOfJibes", resultDecimals=0, ordinal=12)
public int getNumberOfJibes();
int getNumberOfJibes();
@Statistic(messageKey="NumberOfPenaltyCircles", resultDecimals=0, ordinal=13)
public int getNumberOfPenaltyCircles();
int getNumberOfPenaltyCircles();
@Statistic(messageKey="DistanceTraveled", resultDecimals=1)
public Distance getDistanceTraveled();
Distance getDistanceTraveled();
@Statistic(messageKey="LineLengthAtStart", resultDecimals=1)
public Distance getLineLengthAtStart();
Distance getLineLengthAtStart();
@Statistic(messageKey="AbsoluteWindwardDistanceToStarboardSideAtStartOfCompetitor", resultDecimals=2)
Distance getAbsoluteWindwardDistanceToStarboardSideAtStartOfCompetitor();
@@ -94,4 +95,8 @@ public interface HasRaceOfCompetitorContext {
@Statistic(messageKey="RelativeDistanceToAdvantageousEndOfLineAtStartOfRace", resultDecimals=2)
Double getRelativeDistanceToAdvantageousEndOfLineAtStartOfRace();
@Statistic(messageKey="RaceDuration")
Duration getDuration();
}
@@ -29,10 +29,12 @@ import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.WindPositionMode;
import com.sap.sse.common.Distance;
import com.sap.sse.common.Duration;
import com.sap.sse.common.Speed;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.datamining.data.Cluster;
import com.sap.sse.datamining.shared.impl.dto.ClusterDTO;
@@ -357,4 +359,18 @@ public class RaceOfCompetitorWithContext implements HasRaceOfCompetitorContext {
return distance / length;
}
@Override
public Duration getDuration() {
Duration duration = null;
TrackedRace race = getTrackedRace();
Course course = race.getRace().getCourse();
MarkPassing startPassing = race.getMarkPassing(competitor, course.getFirstWaypoint());
MarkPassing finishPassing = race.getMarkPassing(competitor, course.getLastWaypoint());
if (startPassing != null && finishPassing != null) {
long durationMillis = finishPassing.getTimePoint().asMillis() - startPassing.getTimePoint().asMillis();
duration = new MillisecondsDurationImpl(durationMillis);
}
return duration;
}
}