migrated ride height from a double value to a Distance

Change-Id: I15c18f90df384b0241f2ec5ef7e223ded96561d9
This commit is contained in:
Axel Uhl committed 2016-10-21 14:49:43 +02:00
1 parent 02be736b12
commit d8429d6766
16 files changed
+54 -38

No files matched your search

@@ -1,5 +1,7 @@
package com.sap.sailing.domain.common.tracking;
import com.sap.sailing.domain.common.Distance;
/**
* Specific {@link SensorFix} for bravo devices (http://www.bravosystems.es/).
*
@@ -12,5 +14,5 @@ public interface BravoFix extends SensorFix {
*
* @return the ride height
*/
double getRideHeight();
Distance getRideHeight();
}
@@ -1,5 +1,7 @@
package com.sap.sailing.domain.common.tracking.impl;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.impl.MeterDistance;
import com.sap.sailing.domain.common.sensordata.BravoSensorDataMetadata;
import com.sap.sailing.domain.common.tracking.BravoFix;
import com.sap.sailing.domain.common.tracking.DoubleVectorFix;
@@ -32,8 +34,8 @@ public class BravoFixImpl implements BravoFix {
}
@Override
public double getRideHeight() {
return fix.get(BravoSensorDataMetadata.INSTANCE.rideHeightColumn);
public Distance getRideHeight() {
return new MeterDistance(fix.get(BravoSensorDataMetadata.INSTANCE.rideHeightColumn));
}
}
@@ -1129,7 +1129,7 @@ public class MockedTrackedRace implements DynamicTrackedRace {
}
@Override
public Double getAverageRideHeight(Competitor competitor, TimePoint timePoint) {
public Distance getAverageRideHeight(Competitor competitor, TimePoint timePoint) {
return null;
}
}
@@ -683,7 +683,7 @@ public class MockedTrackedRaceWithStartTimeAndRanks implements TrackedRace {
}
@Override
public Double getAverageRideHeight(Competitor competitor, TimePoint timePoint) {
public Distance getAverageRideHeight(Competitor competitor, TimePoint timePoint) {
return null;
}
}
@@ -82,8 +82,8 @@ public class BravoFixTrackSerializationTest {
assertRideHeight(track, testFixData.timePoint, testFixData.rideHeight);
}
private void assertRideHeight(BravoFixTrack<Competitor> track, TimePoint timePoint, double expected) {
assertEquals(expected, track.getRideHeight(timePoint), 0.0);
private void assertRideHeight(BravoFixTrack<Competitor> track, TimePoint timePoint, double expectedRideHeightInMeters) {
assertEquals(expectedRideHeightInMeters, track.getRideHeight(timePoint).getMeters(), 0.0);
}
@SuppressWarnings("unchecked")
@@ -1437,7 +1437,8 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race
} else {
entryDTO.timeSinceLastPositionFixInSeconds = null;
}
entryDTO.averageRideHeightInMeters = trackedRace.getAverageRideHeight(competitor, timePoint);
final Distance averageRideHeight = trackedRace.getAverageRideHeight(competitor, timePoint);
entryDTO.averageRideHeightInMeters = averageRideHeight == null ? null : averageRideHeight.getMeters();
}
if (addLegDetails && trackedRace != null) {
try {
@@ -1722,11 +1723,13 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race
Double speedOverGroundInKnots;
if (trackedLeg.hasFinishedLeg(timePoint)) {
speedOverGroundInKnots = averageSpeedOverGround == null ? null : averageSpeedOverGround.getKnots();
result.currentRideHeightInMeters = trackedLeg.getAverageRideHeight(timePoint);
final Distance averageRideHeight = trackedLeg.getAverageRideHeight(timePoint);
result.currentRideHeightInMeters = averageRideHeight == null ? null : averageRideHeight.getMeters();
} else {
final SpeedWithBearing speedOverGround = trackedLeg.getSpeedOverGround(timePoint);
speedOverGroundInKnots = speedOverGround == null ? null : speedOverGround.getKnots();
result.currentRideHeightInMeters = trackedLeg.getRideHeight(timePoint);
final Distance rideHeight = trackedLeg.getRideHeight(timePoint);
result.currentRideHeightInMeters = rideHeight == null ? null : rideHeight.getMeters();
}
result.currentSpeedOverGroundInKnots = speedOverGroundInKnots == null ? null : speedOverGroundInKnots;
Distance distanceTraveled = trackedLeg.getDistanceTraveled(timePoint);
@@ -2,6 +2,7 @@ package com.sap.sailing.domain.tracking;
import java.io.Serializable;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.tracking.BravoFix;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.WithID;
@@ -22,7 +23,7 @@ public interface BravoFixTrack<ItemType extends WithID & Serializable> extends S
* @return the ride height for the given {@link TimePoint} or <code>null</code> if the {@link TimePoint} is not in the range
* where we have fixes for.
*/
Double getRideHeight(TimePoint timePoint);
Distance getRideHeight(TimePoint timePoint);
/**
* Calculates the average ride height for the given time range.
@@ -34,5 +35,5 @@ public interface BravoFixTrack<ItemType extends WithID & Serializable> extends S
* @return the average ride height for the given time range or <code>null</code> if there are no fixes in the given
* time range.
*/
Double getAverageRideHeight(TimePoint from, TimePoint to);
Distance getAverageRideHeight(TimePoint from, TimePoint to);
}
@@ -97,7 +97,7 @@ public interface TrackedLegOfCompetitor extends Serializable {
* <code>timePoint</code>. If the competitor already completed the leg at <code>timePoint</code> and the respective
* mark passing event was already received, the average ride height for the entire leg (and no further) is computed.
*/
Double getAverageRideHeight(TimePoint timePoint);
Distance getAverageRideHeight(TimePoint timePoint);
/**
* @return <code>null</code> if the competitor hasn't started this leg yet, otherwise the fix where the maximum speed was
@@ -237,7 +237,7 @@ public interface TrackedLegOfCompetitor extends Serializable {
* <code>timePoint</code>, returns the current ride height for this time point. If the competitor has already
* finished the leg, the ride height at the time the competitor finished the leg is returned.
*/
Double getRideHeight(TimePoint at);
Distance getRideHeight(TimePoint at);
/**
* Computes the distance along the wind track to the wind-projected position of the race's overall leader. If leader
@@ -686,7 +686,7 @@ public interface TrackedRace extends Serializable, IsManagedByCache<SharedDomain
Distance getAverageSignedCrossTrackError(Competitor competitor, TimePoint from, TimePoint to, boolean upwindOnly,
boolean waitForLatestAnalysis) throws NoWindException;
public Double getAverageRideHeight(Competitor competitor, TimePoint timePoint);
public Distance getAverageRideHeight(Competitor competitor, TimePoint timePoint);
WindStore getWindStore();
@@ -1,10 +1,8 @@
package com.sap.sailing.domain.tracking.impl;
import java.io.Serializable;
import java.util.OptionalDouble;
import java.util.Spliterator;
import java.util.stream.StreamSupport;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.sensordata.BravoSensorDataMetadata;
import com.sap.sailing.domain.common.tracking.BravoFix;
import com.sap.sailing.domain.tracking.BravoFixTrack;
@@ -34,7 +32,7 @@ public class BravoFixTrackImpl<ItemType extends WithID & Serializable> extends S
}
@Override
public Double getRideHeight(TimePoint timePoint) {
public Distance getRideHeight(TimePoint timePoint) {
BravoFix fixAfter = getFirstFixAtOrAfter(timePoint);
if (fixAfter != null && fixAfter.getTimePoint().compareTo(timePoint) == 0) {
// exact match of timepoint -> no interpolation necessary
@@ -54,17 +52,24 @@ public class BravoFixTrackImpl<ItemType extends WithID & Serializable> extends S
}
@Override
public Double getAverageRideHeight(TimePoint from, TimePoint to) {
public Distance getAverageRideHeight(TimePoint from, TimePoint to) {
final Distance result;
lockForRead();
try {
Spliterator<BravoFix> fixes = getFixes(from, true, to, true).spliterator();
OptionalDouble average = StreamSupport.stream(fixes, false).mapToDouble(BravoFix::getRideHeight).average();
if (average.isPresent()) {
return average.getAsDouble();
Distance sum = Distance.NULL;
int count = 0;
for (final BravoFix fix : getFixes(from, true, to, true)) {
sum = sum.add(fix.getRideHeight());
count++;
}
if (count > 0) {
result = sum.scale(1./count);
} else {
result = null;
}
} finally {
unlockAfterRead();
}
return null;
return result;
}
}
@@ -183,7 +183,7 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor {
}
@Override
public Double getAverageRideHeight(TimePoint timePoint) {
public Distance getAverageRideHeight(TimePoint timePoint) {
MarkPassing legStart = getMarkPassingForLegStart();
if (legStart != null) {
BravoFixTrack<Competitor> track = getTrackedRace()
@@ -676,15 +676,17 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor {
}
@Override
public Double getRideHeight(TimePoint at) {
public Distance getRideHeight(TimePoint at) {
final Distance result;
if (hasStartedLeg(at)) {
TimePoint timePoint =hasFinishedLeg(at) ? getMarkPassingForLegEnd().getTimePoint() : at;
BravoFixTrack<Competitor> track = getTrackedRace()
.<BravoFix, BravoFixTrack<Competitor>> getSensorTrack(competitor, BravoFixTrack.TRACK_NAME);
return track == null ? null : track.getRideHeight(timePoint);
result = track == null ? null : track.getRideHeight(timePoint);
} else {
return null;
result = null;
}
return result;
}
@Override
@@ -1539,8 +1539,8 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
}
@Override
public Double getAverageRideHeight(Competitor competitor, TimePoint timePoint) {
final Double result;
public Distance getAverageRideHeight(Competitor competitor, TimePoint timePoint) {
final Distance result;
BravoFixTrack<Competitor> track = getSensorTrack(competitor, BravoFixTrack.TRACK_NAME);
final Leg firstLeg;
final TrackedLegOfCompetitor firstTrackedLeg;
@@ -862,7 +862,7 @@ public class MockedTrackedRace implements DynamicTrackedRace {
}
@Override
public Double getAverageRideHeight(Competitor competitor, TimePoint timePoint) {
public Distance getAverageRideHeight(Competitor competitor, TimePoint timePoint) {
return null;
}
}
@@ -2941,7 +2941,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
final BravoFixTrack<Competitor> bravoFixTrack = trackedRace
.<BravoFix, BravoFixTrack<Competitor>> getSensorTrack(competitor, BravoFixTrack.TRACK_NAME);
if (bravoFixTrack != null) {
result = bravoFixTrack.getRideHeight(timePoint);
final Distance rideHeight = bravoFixTrack.getRideHeight(timePoint);
result = rideHeight == null ? null : rideHeight.getMeters();
}
break;
default:
@@ -19,12 +19,12 @@ public class BravoDataImportTest {
private final DoubleVectorFixImporter bravoDataImporter = new BravoDataImporterImpl();
private int callbackCallCount = 0;
private double sumRideHeight = 0.0;
private double sumRideHeightInMeters = 0.0;
@Before
public void setUp() {
this.callbackCallCount = 0;
this.sumRideHeight = 0.0;
this.sumRideHeightInMeters = 0.0;
}
@Test
@@ -51,12 +51,12 @@ public class BravoDataImportTest {
bravoDataImporter.importFixes(importData.getInputStream(), (fixes, device) -> {
for (DoubleVectorFix fix : fixes) {
callbackCallCount++;
sumRideHeight += new BravoFixImpl(fix).getRideHeight();
sumRideHeightInMeters += new BravoFixImpl(fix).getRideHeight().getMeters();
}
}, "filename", "source");
Assert.assertEquals(importData.expectedFixesCount, callbackCallCount);
Assert.assertEquals(importData.expectedAverageRideHeight,
callbackCallCount == 0 ? sumRideHeight : sumRideHeight / callbackCallCount, 0.00001);
callbackCallCount == 0 ? sumRideHeightInMeters : sumRideHeightInMeters / callbackCallCount, 0.00001);
}
private enum ImportData {
@@ -658,7 +658,7 @@ public class DummyTrackedRace extends TrackedRaceWithWindEssentials {
}
@Override
public Double getAverageRideHeight(Competitor competitor, TimePoint timePoint) {
public Distance getAverageRideHeight(Competitor competitor, TimePoint timePoint) {
return null;
}
}