mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-24 22:48:34 +00:00
Added synchronized and fixed handler registration to maps
This commit is contained in:
+12
-16
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
@@ -10,10 +11,8 @@ import com.sap.sailing.domain.tracking.RaceListener;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
|
||||
public class RegattaLogSensorDataTracker {
|
||||
|
||||
private final ConcurrentHashMap<RegattaAndRaceIdentifier, DynamicTrackedRace> knownTrackedRaces = new ConcurrentHashMap<>();
|
||||
private final ConcurrentHashMap<RegattaAndRaceIdentifier, RaceLogSensorDataTracker> dataTrackers = new ConcurrentHashMap<>();
|
||||
|
||||
private final Map<RegattaAndRaceIdentifier, DynamicTrackedRace> knownTrackedRaces = new ConcurrentHashMap<>();
|
||||
private final Map<RegattaAndRaceIdentifier, RaceLogSensorDataTracker> dataTrackers = new ConcurrentHashMap<>();
|
||||
private final DynamicTrackedRegatta trackedRegatta;
|
||||
private final RaceListener raceListener;
|
||||
private final SensorFixStore sensorFixStore;
|
||||
@@ -26,36 +25,34 @@ public class RegattaLogSensorDataTracker {
|
||||
public void raceRemoved(TrackedRace trackedRace) {
|
||||
RegattaLogSensorDataTracker.this.raceRemoved(trackedRace);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void raceAdded(TrackedRace trackedRace) {
|
||||
RegattaLogSensorDataTracker.this.raceAdded(trackedRace);
|
||||
}
|
||||
};
|
||||
|
||||
trackedRegatta.addRaceListener(raceListener);
|
||||
}
|
||||
|
||||
|
||||
public void raceRemoved(TrackedRace trackedRace) {
|
||||
removeRaceLogSensorDataTracker(trackedRace.getRaceIdentifier());
|
||||
}
|
||||
|
||||
public void raceAdded(TrackedRace trackedRace) {
|
||||
|
||||
public synchronized void raceAdded(TrackedRace trackedRace) {
|
||||
if (trackedRace instanceof DynamicTrackedRace) {
|
||||
DynamicTrackedRace dynamicTrackedRace = (DynamicTrackedRace) trackedRace;
|
||||
RegattaAndRaceIdentifier raceIdentifier = dynamicTrackedRace.getRaceIdentifier();
|
||||
DynamicTrackedRace existingRace = knownTrackedRaces.putIfAbsent(raceIdentifier, dynamicTrackedRace);
|
||||
DynamicTrackedRace existingRace = knownTrackedRaces.get(raceIdentifier);
|
||||
if (existingRace != null) {
|
||||
removeRaceLogSensorDataTracker(raceIdentifier);
|
||||
} else {
|
||||
RaceLogSensorDataTracker dataTracker = new RaceLogSensorDataTracker(
|
||||
(DynamicTrackedRace) trackedRace, trackedRegatta,
|
||||
sensorFixStore);
|
||||
dataTrackers.put(raceIdentifier, dataTracker);
|
||||
}
|
||||
RaceLogSensorDataTracker dataTracker = new RaceLogSensorDataTracker((DynamicTrackedRace) trackedRace,
|
||||
trackedRegatta, sensorFixStore);
|
||||
dataTrackers.put(raceIdentifier, dataTracker);
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
public synchronized void stop() {
|
||||
trackedRegatta.removeRaceListener(raceListener);
|
||||
knownTrackedRaces.keySet().forEach(raceIdentifier -> {
|
||||
removeRaceLogSensorDataTracker(raceIdentifier);
|
||||
@@ -71,5 +68,4 @@ public class RegattaLogSensorDataTracker {
|
||||
dataTrackers.remove(currentActiveDataTracker);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+15
-14
@@ -1,7 +1,9 @@
|
||||
package com.sap.sailing.domain.racelogtracking.impl;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.osgi.util.tracker.ServiceTracker;
|
||||
|
||||
@@ -11,10 +13,10 @@ import com.sap.sailing.domain.tracking.TrackedRegattaListener;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
|
||||
public class RegattaLogSensorDataTrackerTrackedRegattaListener implements TrackedRegattaListener {
|
||||
|
||||
private final ConcurrentHashMap<Serializable, TrackedRegatta> knownRegattas = new ConcurrentHashMap<Serializable, TrackedRegatta>();
|
||||
private final ConcurrentHashMap<Serializable, RegattaLogSensorDataTracker> registeredTrackers = new ConcurrentHashMap<Serializable, RegattaLogSensorDataTracker>();
|
||||
|
||||
private static final Logger log = Logger.getLogger(RegattaLogSensorDataTrackerTrackedRegattaListener.class
|
||||
.getName());
|
||||
private final Map<Serializable, TrackedRegatta> knownRegattas = new ConcurrentHashMap<Serializable, TrackedRegatta>();
|
||||
private final Map<Serializable, RegattaLogSensorDataTracker> registeredTrackers = new ConcurrentHashMap<Serializable, RegattaLogSensorDataTracker>();
|
||||
private final ServiceTracker<RacingEventService, RacingEventService> racingEventServiceTracker;
|
||||
|
||||
public RegattaLogSensorDataTrackerTrackedRegattaListener(
|
||||
@@ -28,16 +30,13 @@ public class RegattaLogSensorDataTrackerTrackedRegattaListener implements Tracke
|
||||
if (knownRegattas.putIfAbsent(regattaId, trackedRegatta) == null) {
|
||||
synchronized (knownRegattas) {
|
||||
RegattaLogSensorDataTracker tracker = null;
|
||||
try {
|
||||
tracker = new RegattaLogSensorDataTracker((DynamicTrackedRegatta) trackedRegatta,
|
||||
racingEventServiceTracker.getService().getSensorFixStore());
|
||||
registeredTrackers.put(regattaId, tracker);
|
||||
} finally {
|
||||
if (tracker != null) {
|
||||
tracker.stop();
|
||||
}
|
||||
}
|
||||
tracker = new RegattaLogSensorDataTracker((DynamicTrackedRegatta) trackedRegatta,
|
||||
racingEventServiceTracker.getService().getSensorFixStore());
|
||||
registeredTrackers.put(regattaId, tracker);
|
||||
log.fine("Added sensor data tracker to tracked regatta: " + trackedRegatta.getRegatta().getName());
|
||||
}
|
||||
} else {
|
||||
log.warning("Regatta already known, not adding sensor twice");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +46,9 @@ public class RegattaLogSensorDataTrackerTrackedRegattaListener implements Tracke
|
||||
Serializable regattaId = trackedRegatta.getRegatta().getId();
|
||||
try {
|
||||
RegattaLogSensorDataTracker tracker = registeredTrackers.get(trackedRegatta.getRegatta().getId());
|
||||
tracker.stop();
|
||||
if (tracker != null) {
|
||||
tracker.stop();
|
||||
}
|
||||
} finally {
|
||||
knownRegattas.remove(regattaId);
|
||||
registeredTrackers.remove(regattaId);
|
||||
|
||||
Reference in New Issue
Block a user