Enabled replication for SensorFixTrack and SensorFixes

This commit is contained in:
Benjamin Barth committed 2016-04-12 15:02:13 +02:00
1 parent 5875db842f
commit 4718ae59ee
6 files changed
+69 -4

No files matched your search

@@ -10,6 +10,7 @@ import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.WindSource;
import com.sap.sailing.domain.common.tracking.GPSFix;
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
import com.sap.sailing.domain.common.tracking.SensorFix;
import com.sap.sse.common.TimePoint;
@@ -54,4 +55,8 @@ public interface RaceChangeListener extends CourseListener {
void windSourcesToExcludeChanged(Iterable<? extends WindSource> windSourcesToExclude);
void statusChanged(TrackedRaceStatus newStatus, TrackedRaceStatus oldStatus);
void trackAdded(DynamicSensorFixTrack<Competitor, ?> track);
void fixAdded(Competitor competitor, String trackName, SensorFix fix);
}
@@ -4,6 +4,6 @@ import com.sap.sailing.domain.common.tracking.SensorFix;
public interface SensorFixTrackListener<ItemType, FixType extends SensorFix> extends TrackListener {
void fixReceived(FixType fix, ItemType item, boolean firstFixInTrack);
void fixReceived(FixType fix, ItemType item, String trackName, boolean firstFixInTrack);
}
@@ -9,6 +9,8 @@ import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.WindSource;
import com.sap.sailing.domain.common.tracking.GPSFix;
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
import com.sap.sailing.domain.common.tracking.SensorFix;
import com.sap.sailing.domain.tracking.DynamicSensorFixTrack;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.RaceChangeListener;
import com.sap.sailing.domain.tracking.TrackedRaceStatus;
@@ -113,4 +115,14 @@ public abstract class AbstractRaceChangeListener implements RaceChangeListener {
public void waypointRemoved(int zeroBasedIndex, Waypoint waypointThatGotRemoved) {
defaultAction();
}
@Override
public void trackAdded(DynamicSensorFixTrack<Competitor, ?> track) {
defaultAction();
}
@Override
public void fixAdded(Competitor competitor, String trackName, SensorFix fix) {
defaultAction();
}
}
@@ -52,6 +52,7 @@ import com.sap.sailing.domain.tracking.GPSTrackListener;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.RaceAbortedListener;
import com.sap.sailing.domain.tracking.RaceChangeListener;
import com.sap.sailing.domain.tracking.SensorFixTrackListener;
import com.sap.sailing.domain.tracking.StartTimeChangedListener;
import com.sap.sailing.domain.tracking.TrackFactory;
import com.sap.sailing.domain.tracking.TrackedLeg;
@@ -61,6 +62,7 @@ import com.sap.sailing.domain.tracking.WindStore;
import com.sap.sailing.domain.tracking.WindTrack;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.concurrent.LockUtil;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
@@ -486,6 +488,14 @@ DynamicTrackedRace, GPSTrackListener<Competitor, GPSFixMoving> {
private void notifyListeners(Competitor competitor, Map<Waypoint, MarkPassing> oldMarkPassings, Iterable<MarkPassing> markPassings) {
notifyListeners(listener -> listener.markPassingReceived(competitor, oldMarkPassings, markPassings));
}
private void notifyListeners(DynamicSensorFixTrack<Competitor, ?> track) {
notifyListeners(listener -> listener.trackAdded(track));
}
private void notifyListeners(Competitor competitor, String trackName, SensorFix fix) {
notifyListeners(listener -> listener.fixAdded(competitor, trackName, fix));
}
/**
* A mark passing produced from a {@link RaceLogFinishPositioningConfirmedEvent} where a
@@ -1053,4 +1063,24 @@ DynamicTrackedRace, GPSTrackListener<Competitor, GPSFixMoving> {
public void addSensorTrack(Competitor competitor, String trackName, DynamicSensorFixTrack<Competitor, ?> track) {
super.addSensorTrack(competitor, trackName, track);
}
@Override
protected <FixT extends SensorFix> void addSensorTrackInternal(Pair<Competitor, String> key,
DynamicSensorFixTrack<Competitor, FixT> track) {
super.addSensorTrackInternal(key, track);
track.addListener(new SensorFixTrackListener<Competitor, FixT>() {
private static final long serialVersionUID = 6143309919537011377L;
@Override
public boolean isTransient() {
return true;
}
@Override
public void fixReceived(FixT fix, Competitor item, String trackName, boolean firstFixInTrack) {
notifyListeners(item, trackName, fix);
}
});
notifyListeners(track);
}
}
@@ -4089,8 +4089,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
TrackT result = getTrackInternal(key);
if (result == null) {
result = newTrackFactory.get();
// TODO add listener (replicate fix) and replicate track
sensorTracks.put(key, result);
addSensorTrackInternal(key, result);
}
return result;
} finally {
@@ -4108,12 +4107,17 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
+ competitor.getName() + "; trackName: " + trackName);
}
} else {
// TODO add
this.addSensorTrackInternal(key, track);
}
} finally {
LockUtil.unlockAfterWrite(sensorTracksLock);
}
}
protected <FixT extends SensorFix> void addSensorTrackInternal(Pair<Competitor, String> key,
DynamicSensorFixTrack<Competitor, FixT> track) {
sensorTracks.put(key, track);
}
@SuppressWarnings("unchecked")
private <TrackT extends SensorFixTrack<Competitor, ?>> TrackT getTrackInternal(Pair<Competitor, String> key) {
@@ -109,6 +109,7 @@ import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.domain.common.tracking.GPSFix;
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
import com.sap.sailing.domain.common.tracking.SensorFix;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.FlexibleRaceColumn;
import com.sap.sailing.domain.leaderboard.Leaderboard;
@@ -145,6 +146,7 @@ import com.sap.sailing.domain.regattalike.HasRegattaLike;
import com.sap.sailing.domain.regattalike.IsRegattaLike;
import com.sap.sailing.domain.regattalike.LeaderboardThatHasRegattaLike;
import com.sap.sailing.domain.regattalog.RegattaLogStore;
import com.sap.sailing.domain.tracking.DynamicSensorFixTrack;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
import com.sap.sailing.domain.tracking.EmptyTrackedRegattaListener;
@@ -186,6 +188,8 @@ import com.sap.sailing.server.operationaltransformation.CreateOrUpdateDeviceConf
import com.sap.sailing.server.operationaltransformation.CreateTrackedRace;
import com.sap.sailing.server.operationaltransformation.DataImportFailed;
import com.sap.sailing.server.operationaltransformation.RecordCompetitorGPSFix;
import com.sap.sailing.server.operationaltransformation.RecordCompetitorSensorFix;
import com.sap.sailing.server.operationaltransformation.RecordCompetitorSensorFixTrack;
import com.sap.sailing.server.operationaltransformation.RecordMarkGPSFix;
import com.sap.sailing.server.operationaltransformation.RecordMarkGPSFixForExistingTrack;
import com.sap.sailing.server.operationaltransformation.RecordMarkGPSFixForNewMarkTrack;
@@ -1703,6 +1707,16 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
public void speedAveragingChanged(long oldMillisecondsOverWhichToAverage, long newMillisecondsOverWhichToAverage) {
replicate(new UpdateWindAveragingTime(getRaceIdentifier(), newMillisecondsOverWhichToAverage));
}
@Override
public void trackAdded(DynamicSensorFixTrack<Competitor, ?> track) {
replicate(new RecordCompetitorSensorFixTrack(getRaceIdentifier(), track));
}
@Override
public void fixAdded(Competitor competitor, String trackName, SensorFix fix) {
replicate(new RecordCompetitorSensorFix(getRaceIdentifier(), competitor, trackName, fix));
}
private RegattaAndRaceIdentifier getRaceIdentifier() {
return trackedRace.getRaceIdentifier();