Correctly removing RaceLogSensorFixTracker instances when tracking is

being stopped
This commit is contained in:
Steffen Schaefer committed 2016-06-09 13:48:20 +02:00
1 parent afb20429bc
commit bf24b52fac
2 files changed
+19 -2

No files matched your search

@@ -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);
}
}
@@ -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);
}
}