mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-20 19:20:04 +00:00
bug 4387: fix for comment #4, making gpsTrack transient on BravoFixTrackImpl, filling when track is added to TrackedRace
Change-Id: Icba632c7cf033aeadf7db8cffaa1010be6183e69
This commit is contained in:
1 parent
dc24184baa
commit
28ffdac19f
7 files changed
+59
-14
No files matched your search
+2
-2
@@ -10,7 +10,7 @@ import com.sap.sailing.domain.racelog.tracking.SensorFixMapper;
|
||||
import com.sap.sailing.domain.tracking.BravoFixTrack;
|
||||
import com.sap.sailing.domain.tracking.DynamicSensorFixTrack;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.impl.BravoFixTrackImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.CompetitorBravoFixTrackImpl;
|
||||
|
||||
/**
|
||||
* {@link SensorFixMapper} implementation to handle {@link BravoFix}es.
|
||||
@@ -20,7 +20,7 @@ public class BravoDataFixMapper implements SensorFixMapper<BravoFix, DynamicSens
|
||||
@Override
|
||||
public DynamicSensorFixTrack<Competitor, BravoFix> getTrack(DynamicTrackedRace race, Competitor key) {
|
||||
return race.getOrCreateSensorTrack(key, BravoFixTrack.TRACK_NAME,
|
||||
() -> new BravoFixTrackImpl<Competitor>(key, BravoFixTrack.TRACK_NAME, /* hasExtendedFixes */ false,
|
||||
() -> new CompetitorBravoFixTrackImpl(key, BravoFixTrack.TRACK_NAME, /* hasExtendedFixes */ false,
|
||||
race.getTrack(key)));
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ import com.sap.sailing.domain.racelog.tracking.SensorFixMapper;
|
||||
import com.sap.sailing.domain.tracking.BravoFixTrack;
|
||||
import com.sap.sailing.domain.tracking.DynamicSensorFixTrack;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.impl.BravoFixTrackImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.CompetitorBravoFixTrackImpl;
|
||||
|
||||
/**
|
||||
* {@link SensorFixMapper} implementation to handle {@link BravoExtendedFix}es.
|
||||
@@ -21,7 +21,7 @@ public class BravoExtendedDataFixMapper implements SensorFixMapper<BravoFix, Dyn
|
||||
@Override
|
||||
public DynamicSensorFixTrack<Competitor, BravoFix> getTrack(DynamicTrackedRace race, Competitor key) {
|
||||
return race.getOrCreateSensorTrack(key, BravoFixTrack.TRACK_NAME,
|
||||
() -> new BravoFixTrackImpl<Competitor>(key, BravoFixTrack.TRACK_NAME, /* hasExtendedFixes */ true,
|
||||
() -> new CompetitorBravoFixTrackImpl(key, BravoFixTrack.TRACK_NAME, /* hasExtendedFixes */ true,
|
||||
race.getTrack(key)));
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ import com.sap.sailing.domain.racelog.tracking.SensorFixMapper;
|
||||
import com.sap.sailing.domain.tracking.BravoFixTrack;
|
||||
import com.sap.sailing.domain.tracking.DynamicSensorFixTrack;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.impl.BravoFixTrackImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.CompetitorBravoFixTrackImpl;
|
||||
|
||||
/**
|
||||
* {@link SensorFixMapper} implementation to product {@link BravoExtendedFix}es from {@link DoubleVectorFix}es
|
||||
@@ -25,7 +25,7 @@ public class ExpeditionExtendedDataFixMapper implements SensorFixMapper<BravoFix
|
||||
@Override
|
||||
public DynamicSensorFixTrack<Competitor, BravoFix> getTrack(DynamicTrackedRace race, Competitor key) {
|
||||
return race.getOrCreateSensorTrack(key, BravoFixTrack.TRACK_NAME,
|
||||
() -> new BravoFixTrackImpl<Competitor>(key, BravoFixTrack.TRACK_NAME, /* hasExtendedFixes */ true,
|
||||
() -> new CompetitorBravoFixTrackImpl(key, BravoFixTrack.TRACK_NAME, /* hasExtendedFixes */ true,
|
||||
race.getTrack(key)));
|
||||
}
|
||||
|
||||
|
||||
+5
-1
@@ -13,5 +13,9 @@ import com.sap.sse.common.WithID;
|
||||
*/
|
||||
public interface DynamicSensorFixTrack<ItemType extends WithID & Serializable, FixT extends SensorFix> extends
|
||||
SensorFixTrack<ItemType, FixT>, DynamicTrack<FixT> {
|
||||
|
||||
/**
|
||||
* Invoked when this track is added to a tracked race. This default implementation
|
||||
* does nothing.
|
||||
*/
|
||||
default void addedToTrackedRace(TrackedRace trackedRace) {}
|
||||
}
|
||||
+21
-7
@@ -45,7 +45,7 @@ public class BravoFixTrackImpl<ItemType extends WithID & Serializable> extends S
|
||||
* If a GPS track was provided at construction time, remember it non-transiently. It is needed when restoring
|
||||
* the object after de-serialization, so the cache invalidation listener can be re-established.
|
||||
*/
|
||||
private GPSFixTrack<ItemType, GPSFixMoving> gpsTrack;
|
||||
private transient GPSFixTrack<ItemType, GPSFixMoving> gpsTrack;
|
||||
|
||||
private class CacheInvalidationGpsTrackListener implements GPSTrackListener<ItemType, GPSFixMoving> {
|
||||
private static final long serialVersionUID = 6395529765232404414L;
|
||||
@@ -89,6 +89,23 @@ public class BravoFixTrackImpl<ItemType extends WithID & Serializable> extends S
|
||||
this.foilingTimeCache = createFoilingTimeCache(trackedItem);
|
||||
this.foilingDistanceCache = createFoilingDistanceCache(trackedItem);
|
||||
this.averageRideHeightCache = createAverageRideHeightCache(trackedItem);
|
||||
setGpsTrack(gpsTrack);
|
||||
}
|
||||
|
||||
protected GPSFixTrack<ItemType, GPSFixMoving> getGpsTrack() {
|
||||
return gpsTrack;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the {@link #gpsTrack} field and registers a cache invalidation listener
|
||||
* on the {@code gpsTrack} to ensure that the foiling distance is invalidated if needed.<p>
|
||||
*
|
||||
* Must be called only once for a non-{@code null} {@code gpsTrack}.
|
||||
*/
|
||||
protected void setGpsTrack(GPSFixTrack<ItemType, GPSFixMoving> gpsTrack) {
|
||||
if (gpsTrack != null) {
|
||||
assert this.gpsTrack == null;
|
||||
}
|
||||
this.gpsTrack = gpsTrack;
|
||||
if (gpsTrack != null) {
|
||||
gpsTrack.addListener(new CacheInvalidationGpsTrackListener());
|
||||
@@ -119,9 +136,6 @@ public class BravoFixTrackImpl<ItemType extends WithID & Serializable> extends S
|
||||
this.foilingTimeCache = createFoilingTimeCache(getTrackedItem());
|
||||
this.foilingDistanceCache = createFoilingDistanceCache(getTrackedItem());
|
||||
this.averageRideHeightCache = createAverageRideHeightCache(getTrackedItem());
|
||||
if (gpsTrack != null) {
|
||||
gpsTrack.addListener(new CacheInvalidationGpsTrackListener());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -215,8 +229,8 @@ public class BravoFixTrackImpl<ItemType extends WithID & Serializable> extends S
|
||||
|
||||
@Override
|
||||
public Distance getDistanceSpentFoiling(TimePoint from, TimePoint to) {
|
||||
assert gpsTrack != null;
|
||||
return getValueSum(from, to, /* nullElement */ Distance.NULL, Distance::add, foilingDistanceCache,
|
||||
return getGpsTrack() == null ? null :
|
||||
getValueSum(from, to, /* nullElement */ Distance.NULL, Distance::add, foilingDistanceCache,
|
||||
/* valueCalculator */ new Track.TimeRangeValueCalculator<Distance>() {
|
||||
@Override
|
||||
public Distance calculate(TimePoint from, TimePoint to) {
|
||||
@@ -226,7 +240,7 @@ public class BravoFixTrackImpl<ItemType extends WithID & Serializable> extends S
|
||||
for (final BravoFix fix : getFixes(from, true, to, true)) {
|
||||
final boolean fixFoils = isFoiling(fix);
|
||||
if (isFoiling && fixFoils) {
|
||||
result = result.add(gpsTrack.getDistanceTraveled(last, fix.getTimePoint()));
|
||||
result = result.add(getGpsTrack().getDistanceTraveled(last, fix.getTimePoint()));
|
||||
}
|
||||
last = fix.getTimePoint();
|
||||
isFoiling = fixFoils;
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package com.sap.sailing.domain.tracking.impl;
|
||||
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.common.tracking.GPSFixMoving;
|
||||
import com.sap.sailing.domain.tracking.GPSFixTrack;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
|
||||
public class CompetitorBravoFixTrackImpl extends BravoFixTrackImpl<Competitor> {
|
||||
private static final long serialVersionUID = 569731925060211875L;
|
||||
|
||||
public CompetitorBravoFixTrackImpl(Competitor trackedItem, String trackName, boolean hasExtendedFixes,
|
||||
GPSFixTrack<Competitor, GPSFixMoving> gpsTrack) {
|
||||
super(trackedItem, trackName, hasExtendedFixes, gpsTrack);
|
||||
}
|
||||
|
||||
public CompetitorBravoFixTrackImpl(Competitor trackedItem, String trackName, boolean hasExtendedFixes) {
|
||||
super(trackedItem, trackName, hasExtendedFixes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addedToTrackedRace(TrackedRace trackedRace) {
|
||||
if (this.getGpsTrack() == null) {
|
||||
this.setGpsTrack(trackedRace.getTrack(getTrackedItem()));
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
@@ -4194,6 +4194,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
|
||||
DynamicSensorFixTrack<Competitor, FixT> track) {
|
||||
assert sensorTracksLock.isWriteLockedByCurrentThread();
|
||||
sensorTracks.put(key, track);
|
||||
track.addedToTrackedRace(this);
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user