handle case where race hasn't received start of tracking or a last event yet

This commit is contained in:
Axel Uhl committed 2012-03-05 22:58:16 +01:00
1 parent 800104865b
commit 4039269568
1 file changed
+26 -8
@@ -60,8 +60,13 @@ public class EstimatedWindFixesAsNavigableSet extends AbstractUnmodifiableNaviga
private TimePoint lowerToResolution(Wind w) {
TimePoint result;
if (w.getTimePoint().compareTo(trackedRace.getTimePointOfLastEvent()) > 0) {
result = lowerToResolution(new DummyWind(trackedRace.getTimePointOfLastEvent()));
final TimePoint timePointOfLastEvent = trackedRace.getTimePointOfLastEvent();
if (timePointOfLastEvent == null) {
// nothing received yet; "lowering" to end of time
result = new MillisecondsTimePoint((Long.MAX_VALUE - 1) / RESOLUTION_IN_MILLISECONDS
* RESOLUTION_IN_MILLISECONDS);
} else if (w.getTimePoint().compareTo(timePointOfLastEvent) > 0) {
result = lowerToResolution(new DummyWind(timePointOfLastEvent));
} else {
result = new MillisecondsTimePoint((w.getTimePoint().asMillis() - 1) / RESOLUTION_IN_MILLISECONDS
* RESOLUTION_IN_MILLISECONDS);
@@ -71,8 +76,13 @@ public class EstimatedWindFixesAsNavigableSet extends AbstractUnmodifiableNaviga
private TimePoint floorToResolution(Wind w) {
TimePoint result;
if (w.getTimePoint().compareTo(trackedRace.getTimePointOfLastEvent()) > 0) {
result = floorToResolution(new DummyWind(trackedRace.getTimePointOfLastEvent()));
final TimePoint timePointOfLastEvent = trackedRace.getTimePointOfLastEvent();
if (timePointOfLastEvent == null) {
// nothing received yet; "lowering" to end of time
result = new MillisecondsTimePoint((Long.MAX_VALUE - 1) / RESOLUTION_IN_MILLISECONDS
* RESOLUTION_IN_MILLISECONDS);
} else if (w.getTimePoint().compareTo(timePointOfLastEvent) > 0) {
result = floorToResolution(new DummyWind(timePointOfLastEvent));
} else {
result = new MillisecondsTimePoint(w.getTimePoint().asMillis() / RESOLUTION_IN_MILLISECONDS
* RESOLUTION_IN_MILLISECONDS);
@@ -82,8 +92,12 @@ public class EstimatedWindFixesAsNavigableSet extends AbstractUnmodifiableNaviga
private TimePoint ceilingToResolution(Wind w) {
TimePoint result;
if (w.getTimePoint().compareTo(trackedRace.getStartOfTracking()) < 0) {
result = ceilingToResolution(new DummyWind(trackedRace.getStartOfTracking()));
final TimePoint startOfTracking = trackedRace.getStartOfTracking();
if (startOfTracking == null) {
// no start of tracking yet; "ceiling" to beginning of time
result = new MillisecondsTimePoint(0);
} else if (w.getTimePoint().compareTo(startOfTracking) < 0) {
result = ceilingToResolution(new DummyWind(startOfTracking));
} else {
result = new MillisecondsTimePoint(((w.getTimePoint().asMillis() - 1) / RESOLUTION_IN_MILLISECONDS + 1)
* RESOLUTION_IN_MILLISECONDS);
@@ -93,8 +107,12 @@ public class EstimatedWindFixesAsNavigableSet extends AbstractUnmodifiableNaviga
private TimePoint higherToResolution(Wind w) {
TimePoint result;
if (w.getTimePoint().compareTo(trackedRace.getStartOfTracking()) < 0) {
result = higherToResolution(new DummyWind(trackedRace.getStartOfTracking()));
final TimePoint startOfTracking = trackedRace.getStartOfTracking();
if (startOfTracking == null) {
// no start of tracking yet; "ceiling" to beginning of time
result = new MillisecondsTimePoint(0);
} else if (w.getTimePoint().compareTo(startOfTracking) < 0) {
result = higherToResolution(new DummyWind(startOfTracking));
} else {
result = new MillisecondsTimePoint((w.getTimePoint().asMillis() / RESOLUTION_IN_MILLISECONDS + 1)
* RESOLUTION_IN_MILLISECONDS);