Fixes StackOverflow in updateStartAndEndOfTracking

This commit is contained in:
Jan Broß committed 2016-03-30 14:55:47 +02:00
1 parent a5c6e1e376
commit 63eb29a015
3 files changed
+14 -12

No files matched your search

@@ -38,12 +38,11 @@ import com.sap.sailing.domain.tracking.TrackedRegatta;
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
import com.sap.sse.common.Duration;
import com.sap.sailing.domain.tracking.impl.TrackedRaceImpl;
import com.sap.sse.common.NoCorrespondingServiceRegisteredException;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest {
private static final Duration BUFFER_DURATION = Duration.ONE_MINUTE.times(5);
private final BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("49er");
@Test
@@ -71,8 +70,8 @@ public class TrackedRaceStartTimeInferenceTest extends AbstractGPSFixStoreTest {
//test inference via race start/end time in racelog
trackedRace.waitForLoadingFromGPSFixStoreToFinishRunning(regattaLog);
assertEquals(new MillisecondsTimePoint(10000).minus(BUFFER_DURATION), trackedRace.getStartOfTracking());
assertEquals(new MillisecondsTimePoint(20000).plus(BUFFER_DURATION), trackedRace.getEndOfTracking());
assertEquals(new MillisecondsTimePoint(10000).minus(TrackedRaceImpl.TRACKING_BUFFER_IN_MINUTES), trackedRace.getStartOfTracking());
assertEquals(new MillisecondsTimePoint(20000).plus(TrackedRaceImpl.TRACKING_BUFFER_IN_MINUTES), trackedRace.getEndOfTracking());
//test inference via manually set start/end of tracking
@@ -308,6 +308,7 @@ DynamicTrackedRace, GPSTrackListener<Competitor, GPSFixMoving> {
if (!Util.equalsWithNull(oldStartOfRace, newStartOfRace)) {
notifyListenersStartOfRaceChanged(oldStartOfRace, newStartOfRace);
}
updateStartAndEndOfTracking();
}
@Override
@@ -160,7 +160,7 @@ import difflib.Patch;
import difflib.PatchFailedException;
public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials implements CourseListener {
private static final int TRACKING_BUFFER_IN_MINUTES = 5;
public static final int TRACKING_BUFFER_IN_MINUTES = 5;
private static final long serialVersionUID = -4825546964220003507L;
@@ -734,7 +734,6 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
@Override
public TimePoint getStartOfTracking() {
updateStartAndEndOfTracking();//FIXME: unclear whether change listeners etc similar to DynamicTrackedRace can be used here for caching and invalidation
return startOfTrackingReceived;
}
@@ -750,11 +749,11 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
if (trackingTimesFromRaceLog != null){
if (trackingTimesFromRaceLog.getA() != null){
setStartOfTrackingReceived(trackingTimesFromRaceLog.getA(), false);
startOfTrackingReceived = trackingTimesFromRaceLog.getA();
startOfTrackingFound = true;
}
if (trackingTimesFromRaceLog.getB() != null){
setEndOfTrackingReceived(trackingTimesFromRaceLog.getB(), false);
endOfTrackingReceived = trackingTimesFromRaceLog.getB();
endOfTrackingFound = true;
}
}
@@ -762,11 +761,11 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
if(!startOfTrackingFound || !endOfTrackingFound){
if (startAndFinishedTimesFromRaceLog != null){
if (!startOfTrackingFound && startAndFinishedTimesFromRaceLog.getA() != null){
setStartOfTrackingReceived(startAndFinishedTimesFromRaceLog.getA().minus(Duration.ONE_MINUTE.times(TRACKING_BUFFER_IN_MINUTES)), false);
startOfTrackingReceived = startAndFinishedTimesFromRaceLog.getA().minus(Duration.ONE_MINUTE.times(TRACKING_BUFFER_IN_MINUTES));
startOfTrackingFound = true;
}
if (!endOfTrackingFound && startAndFinishedTimesFromRaceLog.getB() != null){
setEndOfTrackingReceived(startAndFinishedTimesFromRaceLog.getB().plus(Duration.ONE_MINUTE.times(TRACKING_BUFFER_IN_MINUTES)), false);
endOfTrackingReceived = startAndFinishedTimesFromRaceLog.getB().plus(Duration.ONE_MINUTE.times(TRACKING_BUFFER_IN_MINUTES));
endOfTrackingFound = true;
}
}
@@ -795,11 +794,11 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
}
if (!startOfTrackingFound && earliestMappingStart != null){
setStartOfTrackingReceived(earliestMappingStart, false);
startOfTrackingReceived = earliestMappingStart;
}
if (!endOfTrackingFound && latestMappingEnd != null){
setEndOfTrackingReceived(latestMappingEnd, false);
endOfTrackingReceived = latestMappingEnd;
}
}
}
@@ -834,16 +833,19 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
public void invalidateStartTime() {
startTime = null;
startTimeWithoutInferenceFromStartMarkPassings = null;
updateStartAndEndOfTracking();
}
public void invalidateEndTime() {
endTime = null;
updateStartAndEndOfTracking();
}
protected void invalidateMarkPassingTimes() {
synchronized (markPassingsTimes) {
markPassingsTimes.clear();
}
updateStartAndEndOfTracking();
}
/**