diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java index c7e72a6e978..b956abd9b95 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java @@ -101,7 +101,7 @@ public class MongoSensorFixStoreImpl implements MongoSensorFixStore { queryBuilder.greaterThanEquals(loadFixesFrom.asMillis()).and(FieldNames.TIME_AS_MILLIS.name()) .lessThanEquals(loadFixesTo.asMillis()); } else { - queryBuilder.greaterThan(loadFixesFrom.asMillis()).and(FieldNames.TIME_AS_MILLIS.name()).lessThan(loadFixesTo.asMillis()); + queryBuilder.greaterThanEquals(loadFixesFrom.asMillis()).and(FieldNames.TIME_AS_MILLIS.name()).lessThan(loadFixesTo.asMillis()); } DBObject query = queryBuilder.get(); DBCursor result = fixesCollection.find(query); diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreTest.java index eb670d2c9cf..aaf8f9c59fe 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/SensorFixStoreTest.java @@ -114,10 +114,10 @@ public class SensorFixStoreTest { } @Test - public void testFixesOnExclusiveBoundsArentLoaded() throws Exception { - addBravoFix(device, FIX_TIMESTAMP, FIX_RIDE_HEIGHT); + public void testFixesOnExclusiveEndBoundsArentLoaded() throws Exception { + DoubleVectorFix fix = addBravoFix(device, FIX_TIMESTAMP, FIX_RIDE_HEIGHT); addBravoFix(device, FIX_TIMESTAMP2, FIX_RIDE_HEIGHT2); - verifyNoFix(FIX_TIMESTAMP, FIX_TIMESTAMP2, device, false); + verifySingleFix(fix, FIX_TIMESTAMP, FIX_TIMESTAMP2, device, false); } @Test @@ -268,22 +268,17 @@ public class SensorFixStoreTest { return listener; } - private void verifySingleFix(Timed expectedFix, long start, long end, DeviceIdentifier device, boolean inclusive) throws Exception { - List loadedFixes = loadFixes(start, end, device, inclusive); + private void verifySingleFix(Timed expectedFix, long start, long end, DeviceIdentifier device, boolean endIsInclusive) throws Exception { + List loadedFixes = loadFixes(start, end, device, endIsInclusive); assertEquals(1, loadedFixes.size()); assertEquals(expectedFix, loadedFixes.get(0)); } - private void verifyNoFix(long start, long end, DeviceIdentifier device, boolean inclusive) throws Exception { - List loadedFixes = loadFixes(start, end, device, inclusive); - assertEquals(0, loadedFixes.size()); - } - - private List loadFixes(long start, long end, DeviceIdentifier device, boolean inclusive) + private List loadFixes(long start, long end, DeviceIdentifier device, boolean endIsInclusive) throws TransformationException { List loadedFixes = new ArrayList<>(); - store.loadFixes(loadedFixes::add, device, new MillisecondsTimePoint(start), new MillisecondsTimePoint(end), inclusive); + store.loadFixes(loadedFixes::add, device, new MillisecondsTimePoint(start), new MillisecondsTimePoint(end), endIsInclusive); return loadedFixes; } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/FixLoaderAndTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/FixLoaderAndTracker.java index 09e921fed82..b910c5807b6 100755 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/FixLoaderAndTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/FixLoaderAndTracker.java @@ -273,7 +273,7 @@ public class FixLoaderAndTracker implements TrackingDataLoader { // competitor retrieved from the mapping event does not have a track in trackedRace try { sensorFixStore.loadFixes((DoubleVectorFix fix) -> mapper.addFix(track, fix), mapping.getDevice(), - timeRangeToLoad.from(), timeRangeToLoad.to(), true); + timeRangeToLoad.from(), timeRangeToLoad.to(), /* toIsInclusive */ false); } catch (NoCorrespondingServiceRegisteredException | TransformationException e) { logger.log(Level.WARNING, "Could not load track for competitor: " + mapping.getMappedTo() + "; device: " + mapping.getDevice()); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/GPSFixStoreImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/GPSFixStoreImpl.java index 2cc9e41a089..834021cca1b 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/GPSFixStoreImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/impl/GPSFixStoreImpl.java @@ -38,9 +38,9 @@ public class GPSFixStoreImpl implements GPSFixStore { } private void loadTrack(DynamicGPSFixTrack track, DeviceIdentifier device, - TimePoint from, TimePoint to, boolean inclusive) throws NoCorrespondingServiceRegisteredException, + TimePoint from, TimePoint to, boolean toIsInclusive) throws NoCorrespondingServiceRegisteredException, TransformationException { - sensorFixStore.loadFixes(fix->track.add(fix, /* replace */ true), device, from, to, inclusive); + sensorFixStore.loadFixes(fix->track.add(fix, /* replace */ true), device, from, to, toIsInclusive); } @Override @@ -50,7 +50,7 @@ public class GPSFixStoreImpl implements GPSFixStore { .analyze().get(competitor); if (mappings != null) { for (DeviceMapping mapping : mappings) { - loadTrack(track, mapping.getDevice(), mapping.getTimeRange().from(), mapping.getTimeRange().to(), true /*inclusive*/); + loadTrack(track, mapping.getDevice(), mapping.getTimeRange().from(), mapping.getTimeRange().to(), false /*toIsInclusive*/); } } } @@ -62,7 +62,7 @@ public class GPSFixStoreImpl implements GPSFixStore { .get(mark); if (mappings != null) { for (DeviceMapping mapping : mappings) { - loadTrack(track, mapping.getDevice(), mapping.getTimeRange().from(), mapping.getTimeRange().to(), true /*inclusive*/); + loadTrack(track, mapping.getDevice(), mapping.getTimeRange().from(), mapping.getTimeRange().to(), false /*toIsInclusive*/); } } } @@ -90,7 +90,7 @@ public class GPSFixStoreImpl implements GPSFixStore { // /*inclusive*/); final TimePoint from = Util.getLatestOfTimePoints(start, mapping.getTimeRange().from()); final TimePoint to = Util.getEarliestOfTimePoints(end, mapping.getTimeRange().to()); - loadTrack(track, mapping.getDevice(), from, to, true /* inclusive */); + loadTrack(track, mapping.getDevice(), from, to, false /* toIsInclusive */); } @@ -100,7 +100,7 @@ public class GPSFixStoreImpl implements GPSFixStore { throws TransformationException, NoCorrespondingServiceRegisteredException { final TimePoint from = Util.getLatestOfTimePoints(start, mapping.getTimeRange().from()); final TimePoint to = Util.getEarliestOfTimePoints(end, mapping.getTimeRange().to()); - loadTrack(track, mapping.getDevice(), from, to, true /* inclusive */); + loadTrack(track, mapping.getDevice(), from, to, false /* toIsInclusive */); } @Override @@ -112,7 +112,7 @@ public class GPSFixStoreImpl implements GPSFixStore { for (DeviceMapping mapping : mappings) { final TimePoint from = Util.getLatestOfTimePoints(start, mapping.getTimeRange().from()); final TimePoint to = Util.getEarliestOfTimePoints(end, mapping.getTimeRange().to()); - loadTrack(track, mapping.getDevice(), from, to, true /*inclusive*/); + loadTrack(track, mapping.getDevice(), from, to, false /*toIsInclusive*/); } } } @@ -120,7 +120,7 @@ public class GPSFixStoreImpl implements GPSFixStore { @Override public void loadTrack(DynamicGPSFixTrack track, DeviceMapping mapping) throws NoCorrespondingServiceRegisteredException, TransformationException { - loadTrack(track, mapping.getDevice(), mapping.getTimeRange().from(), mapping.getTimeRange().to(), true); + loadTrack(track, mapping.getDevice(), mapping.getTimeRange().from(), mapping.getTimeRange().to(), false /* toIsInlusive */); } @Override @@ -136,9 +136,9 @@ public class GPSFixStoreImpl implements GPSFixStore { @Override public void loadFixes(Consumer consumer, DeviceIdentifier deviceIdentifier, - TimePoint start, TimePoint end, boolean inclusive) + TimePoint start, TimePoint end, boolean endIsInclusive) throws NoCorrespondingServiceRegisteredException, TransformationException { - sensorFixStore.loadFixes(consumer, deviceIdentifier, start, end, inclusive); + sensorFixStore.loadFixes(consumer, deviceIdentifier, start, end, endIsInclusive); } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/SensorFixStore.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/SensorFixStore.java index 5df10b28b80..ebb901e6c73 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/SensorFixStore.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/SensorFixStore.java @@ -20,13 +20,22 @@ public interface SensorFixStore { /** * Loads fixes for a device in a given time range. * - * @param consumer will be called for each loaded fix. Must not be null. - * @param deviceIdentifier the device to load the fixes for. Must not be null. - * @param start the lower bound of the time range to load. If null, fixes are loaded from {@link TimePoint#BeginningOfTime}. - * @param end the upper bound of the time range to load. If null, fixes are loaded to {@link TimePoint#EndOfTime}. - * @param inclusive true if fixes exactly at the bounds of the time range should be loaded, false otherwise. + * @param consumer + * will be called for each loaded fix. Must not be null. + * @param deviceIdentifier + * the device to load the fixes for. Must not be null. + * @param start + * the lower bound of the time range to load. If null, fixes are loaded from + * {@link TimePoint#BeginningOfTime}. + * @param end + * the upper bound of the time range to load. If null, fixes are loaded to + * {@link TimePoint#EndOfTime}. + * @param toIsInclusive + * true if fixes exactly at the {@code end} bounds of the time range should be loaded, false otherwise. + * Fixes exactly on the {@code start} bounds are always loaded. */ - void loadFixes(Consumer consumer, DeviceIdentifier deviceIdentifier, TimePoint start, TimePoint end, boolean inclusive) throws NoCorrespondingServiceRegisteredException, + void loadFixes(Consumer consumer, DeviceIdentifier deviceIdentifier, TimePoint start, TimePoint end, + boolean toIsInclusive) throws NoCorrespondingServiceRegisteredException, TransformationException; /** diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java index 3880fcd120a..1b1deb6cc65 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java @@ -471,10 +471,10 @@ public class MasterDataImportTest { Assert.assertEquals(registerEvent.getId(), registerEventOnTarget2.getId()); } - private void verifyFix(Timed expectedFix, SensorFixStore store, TimePoint start, TimePoint end, DeviceIdentifier deviceIdentifier) { + private void verifyFix(Timed expectedFix, SensorFixStore store, TimePoint start, TimePoint endInclusive, DeviceIdentifier deviceIdentifier) { List fixes = new ArrayList<>(1); try { - store.loadFixes(fixes::add, deviceIdentifier, start, end, true); + store.loadFixes(fixes::add, deviceIdentifier, start, endInclusive, /* toIsInclusive */ true); assertEquals(1, fixes.size()); assertEquals(expectedFix, fixes.get(0)); } catch (Exception e) {