race now record wind if there is only startOfRace or startOfTracking set and no previous race records the wind

This commit is contained in:
Alexander Ries committed 2015-06-16 10:28:23 +02:00
1 parent c2576fd985
commit 6d8b8f25eb
2 files changed
+20 -8

No files matched your search

@@ -657,7 +657,7 @@ DynamicTrackedRace, GPSTrackListener<Competitor, GPSFixMoving> {
@Override
public boolean recordWind(Wind wind, WindSource windSource) {
final boolean result;
if(takesWindFix(wind)){
if (takesWindFix(wind)) {
result = getOrCreateWindTrack(windSource).add(wind);
updated(/* time point */null); // wind events shouldn't advance race time
triggerManeuverCacheRecalculationForAllCompetitors();
@@ -1501,15 +1501,27 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
boolean result = false;
TimePoint earliestStartTimePoint = Util.getEarliestOfTimePoints(getStartOfRace(), getStartOfTracking());
TimePoint latestEndTimePoint = Util.getLatestOfTimePoints(getStartOfRace(), getStartOfTracking());
if (earliestStartTimePoint != null && latestEndTimePoint != null) {
if (earliestStartTimePoint != null) {
TimePoint earliestStartTimePointMinusExtra = earliestStartTimePoint.minus(EXTRA_LONG_TIME_BEFORE_START_TO_TRACK_WIND_MILLIS);
TimePoint latestEndTimePointPlusExtra = latestEndTimePoint.plus(TimingConstants.IS_LIVE_GRACE_PERIOD_IN_MILLIS);
if (Util.isTimePointInRangeOfTimePointsAandB(wind.getTimePoint(), /* a */earliestStartTimePointMinusExtra, /* b */latestEndTimePointPlusExtra)) {
Set<TrackedRace> previousRacesInExecutionOrder = getPreviousRacesFromAttachedRaceExecutionOrderProviders();
if(previousRacesInExecutionOrder == null || !previousRacesInExecutionOrder.stream().filter(tr->tr.takesWindFix(wind) == true).findAny().isPresent()){
result = true;
if (latestEndTimePoint != null) {
TimePoint latestEndTimePointPlusExtra = latestEndTimePoint.plus(TimingConstants.IS_LIVE_GRACE_PERIOD_IN_MILLIS);
if (Util.isTimePointInRangeOfTimePointsAandB(wind.getTimePoint(), /* a */earliestStartTimePointMinusExtra, /* b */latestEndTimePointPlusExtra)) {
result = takesNoPreviousRaceWind(wind);
}
}
} else if (latestEndTimePoint == null){
if (wind.getTimePoint().after(earliestStartTimePointMinusExtra)){
result = takesNoPreviousRaceWind(wind);
}
}
}
return result;
}
private boolean takesNoPreviousRaceWind(Wind wind) {
boolean result = false;
Set<TrackedRace> previousRacesInExecutionOrder = getPreviousRacesFromAttachedRaceExecutionOrderProviders();
if (previousRacesInExecutionOrder == null || !previousRacesInExecutionOrder.stream().filter(tr -> tr.takesWindFix(wind) == true).findAny().isPresent()) {
result = true;
}
return result;
}