mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-25 05:23:51 +00:00
Correctly removing RaceLogSensorFixTracker instances when tracking is
being stopped
This commit is contained in:
1 parent
afb20429bc
commit
bf24b52fac
2 files changed
+19
-2
No files matched your search
+6
-2
@@ -52,11 +52,15 @@ public class RegattaLogSensorDataTracker {
|
||||
removeRaceLogSensorDataTracker(raceIdentifier);
|
||||
}
|
||||
RaceLogSensorFixTracker dataTracker = new RaceLogSensorFixTracker((DynamicTrackedRace) trackedRace,
|
||||
sensorFixStore, sensorFixMapperFactory);
|
||||
sensorFixStore, sensorFixMapperFactory, tracker -> trackerStopped(raceIdentifier, tracker));
|
||||
dataTrackers.put(raceIdentifier, dataTracker);
|
||||
}
|
||||
}
|
||||
|
||||
private void trackerStopped(RegattaAndRaceIdentifier raceIdentifier, RaceLogSensorFixTracker tracker) {
|
||||
dataTrackers.remove(raceIdentifier, tracker);
|
||||
}
|
||||
|
||||
public synchronized void stop() {
|
||||
trackedRegatta.removeRaceListener(raceListener);
|
||||
knownTrackedRaces.keySet().forEach(this::removeRaceLogSensorDataTracker);
|
||||
@@ -68,7 +72,7 @@ public class RegattaLogSensorDataTracker {
|
||||
RaceLogSensorFixTracker currentActiveDataTracker = dataTrackers.get(raceIdentifier);
|
||||
if (currentActiveDataTracker != null) {
|
||||
currentActiveDataTracker.stop();
|
||||
dataTrackers.remove(currentActiveDataTracker);
|
||||
trackerStopped(raceIdentifier, currentActiveDataTracker);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+13
@@ -45,6 +45,11 @@ import com.sap.sse.common.impl.TimeRangeImpl;
|
||||
|
||||
public class RaceLogSensorFixTracker extends AbstractRaceLogFixTracker {
|
||||
private static final Logger logger = Logger.getLogger(RaceLogSensorFixTracker.class.getName());
|
||||
|
||||
public interface Owner {
|
||||
void stopped(RaceLogSensorFixTracker tracker);
|
||||
}
|
||||
|
||||
private final SensorFixStore sensorFixStore;
|
||||
private final GPSFixStore gpsFixStore;
|
||||
private final RaceLogMappingWrapper<WithID> competitorMappings;
|
||||
@@ -134,12 +139,19 @@ public class RaceLogSensorFixTracker extends AbstractRaceLogFixTracker {
|
||||
}
|
||||
};
|
||||
private final SensorFixMapperFactory sensorFixMapperFactory;
|
||||
private final Owner owner;
|
||||
|
||||
public RaceLogSensorFixTracker(DynamicTrackedRace trackedRace,
|
||||
SensorFixStore sensorFixStore, SensorFixMapperFactory sensorFixMapperFactory) {
|
||||
this(trackedRace, sensorFixStore, sensorFixMapperFactory, tracker -> {});
|
||||
}
|
||||
|
||||
public RaceLogSensorFixTracker(DynamicTrackedRace trackedRace,
|
||||
SensorFixStore sensorFixStore, SensorFixMapperFactory sensorFixMapperFactory, Owner owner) {
|
||||
super(trackedRace,
|
||||
"Loading from SensorFix store lock for tracked race " + trackedRace.getRace().getName());
|
||||
this.sensorFixStore = sensorFixStore;
|
||||
this.owner = owner;
|
||||
this.gpsFixStore = new GPSFixStoreImpl(sensorFixStore);
|
||||
this.sensorFixMapperFactory = sensorFixMapperFactory;
|
||||
this.competitorMappings = new RaceLogMappingWrapper<WithID>() {
|
||||
@@ -255,5 +267,6 @@ public class RaceLogSensorFixTracker extends AbstractRaceLogFixTracker {
|
||||
protected void stopTracking() {
|
||||
super.stopTracking();
|
||||
sensorFixStore.removeListener(listener);
|
||||
owner.stopped(this);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user