mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-22 12:03:58 +00:00
fixing bug 3331 by recognizing the race logs currently attached (instead of only the last one found) and constructing the analyzers for all logs on demand
This commit is contained in:
1 parent
6f37a77db6
commit
218479a710
1 file changed
+38
-16
+38
-16
@@ -52,11 +52,7 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor {
|
||||
|
||||
private final WindSource raceCommitteeWindSource;
|
||||
|
||||
private LastPublishedCourseDesignFinder courseDesignFinder;
|
||||
private StartTimeFinder startTimeFinder;
|
||||
private AbortingFlagFinder abortingFlagFinder;
|
||||
private MarkPassingDataFinder markPassingDataFinder;
|
||||
private TrackingTimesFinder trackingTimesFinder;
|
||||
|
||||
private MarkPassingUpdateListener markPassingUpdateListener;
|
||||
|
||||
@@ -73,14 +69,26 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor {
|
||||
raceLogs.add(raceLog);
|
||||
trackedRace.invalidateStartTime();
|
||||
trackedRace.invalidateEndTime();
|
||||
courseDesignFinder = new LastPublishedCourseDesignFinder(raceLog);
|
||||
startTimeFinder = new StartTimeFinder(trackedRace.getRaceLogResolver(), raceLog);
|
||||
abortingFlagFinder = new AbortingFlagFinder(raceLog);
|
||||
trackingTimesFinder = new TrackingTimesFinder(raceLog);
|
||||
analyze(raceLog);
|
||||
}
|
||||
}
|
||||
|
||||
private LastPublishedCourseDesignFinder createCourseDesignFinder(RaceLog raceLog) {
|
||||
return new LastPublishedCourseDesignFinder(raceLog);
|
||||
}
|
||||
|
||||
private TrackingTimesFinder createTrackingTimesFinder(RaceLog raceLog) {
|
||||
return new TrackingTimesFinder(raceLog);
|
||||
}
|
||||
|
||||
private AbortingFlagFinder createAbortingFlagFinder(RaceLog raceLog) {
|
||||
return new AbortingFlagFinder(raceLog);
|
||||
}
|
||||
|
||||
private StartTimeFinder createStartTimeFinder(RaceLog raceLog) {
|
||||
return new StartTimeFinder(trackedRace.getRaceLogResolver(), raceLog);
|
||||
}
|
||||
|
||||
public void setMarkPassingUpdateListener(MarkPassingUpdateListener listener) {
|
||||
markPassingUpdateListener = listener;
|
||||
}
|
||||
@@ -152,7 +160,7 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor {
|
||||
}
|
||||
|
||||
private void analyseTrackingTimes(RaceLog raceLog) {
|
||||
Pair<TimePoint, TimePoint> times = trackingTimesFinder.analyze();
|
||||
Pair<TimePoint, TimePoint> times = createTrackingTimesFinder(raceLog).analyze();
|
||||
if (times != null) {
|
||||
trackedRace.setStartOfTrackingReceived(times.getA());
|
||||
trackedRace.setEndOfTrackingReceived(times.getB());
|
||||
@@ -160,11 +168,16 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor {
|
||||
}
|
||||
|
||||
private void analyzeCourseDesign(CourseBase courseBaseProvidedByEvent) {
|
||||
CourseBase courseDesign = courseDesignFinder.analyze();
|
||||
CourseBase courseDesign = null;
|
||||
for (RaceLog raceLog : raceLogs) {
|
||||
courseDesign = createCourseDesignFinder(raceLog).analyze();
|
||||
if (courseDesign != null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (courseDesign == null) {
|
||||
courseDesign = courseBaseProvidedByEvent;
|
||||
}
|
||||
|
||||
// On the initial analyze step after attaching the RaceLog there might be no course design.
|
||||
if (courseDesign != null) {
|
||||
// Because this code can be triggered by an obsolete (delayed) event...
|
||||
@@ -179,13 +192,16 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor {
|
||||
private void analyzeStartTime(TimePoint startTimeProvidedByEvent) {
|
||||
/* start time will be set by StartTimeFinder in TrackedRace.getStartTime() */
|
||||
trackedRace.invalidateStartTime();
|
||||
|
||||
TimePoint startTime = startTimeFinder.analyze().getStartTime();
|
||||
|
||||
TimePoint startTime = null;
|
||||
for (RaceLog raceLog : raceLogs) {
|
||||
startTime = createStartTimeFinder(raceLog).analyze().getStartTime();
|
||||
if (startTime != null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (startTime == null) {
|
||||
startTime = startTimeProvidedByEvent;
|
||||
}
|
||||
|
||||
if (startTime != null) {
|
||||
/* invoke listeners with received start time, this will also trigger tractrac update */
|
||||
trackedRace.onStartTimeChangedByRaceCommittee(startTime);
|
||||
@@ -210,7 +226,13 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor {
|
||||
trackedRace.invalidateStartTime(); // this will notify RaceStateListeners in case the start time changes by the event
|
||||
/* reset start time */
|
||||
trackedRace.onStartTimeChangedByRaceCommittee(null);
|
||||
RaceLogFlagEvent abortingFlag = abortingFlagFinder.analyze();
|
||||
RaceLogFlagEvent abortingFlag = null;
|
||||
for (RaceLog raceLog : raceLogs) {
|
||||
abortingFlag = createAbortingFlagFinder(raceLog).analyze();
|
||||
if (abortingFlag != null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (abortingFlag != null) {
|
||||
// previous pass was aborted; notify TracTrac
|
||||
trackedRace.onAbortedByRaceCommittee(abortingFlag.getUpperFlag());
|
||||
|
||||
Reference in new issue
Block a user