mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-24 22:48:34 +00:00
Moving update status to status event programming model with source
This commit is contained in:
+4
-3
@@ -65,6 +65,7 @@ import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.RaceHandle;
|
||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackingDataLoader;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
import com.sap.sailing.domain.tracking.WindTrack;
|
||||
import com.sap.sailing.domain.tracking.impl.TrackedRaceStatusImpl;
|
||||
@@ -84,7 +85,7 @@ import difflib.PatchFailedException;
|
||||
*
|
||||
* @author Fredrik Teschke
|
||||
*/
|
||||
public class RaceLogRaceTracker implements RaceTracker {
|
||||
public class RaceLogRaceTracker implements RaceTracker, TrackingDataLoader {
|
||||
|
||||
private static final String LOGGER_AND_LOGAUTHOR_NAME = RaceLogRaceTracker.class.getName();
|
||||
private static final Logger logger = Logger.getLogger(LOGGER_AND_LOGAUTHOR_NAME);
|
||||
@@ -178,7 +179,7 @@ public class RaceLogRaceTracker implements RaceTracker {
|
||||
|
||||
// mark passing calculator is automatically stopped, when the race status is set to {@link
|
||||
// TrackedRaceStatusEnum#FINISHED}
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.FINISHED, 100));
|
||||
trackedRace.onStatusChanged(this, new TrackedRaceStatusImpl(TrackedRaceStatusEnum.FINISHED, 100));
|
||||
|
||||
// remove listeners on logs
|
||||
for (Entry<AbstractLog<?, ?>, Object> visitor : visitors.entrySet()) {
|
||||
@@ -315,7 +316,7 @@ public class RaceLogRaceTracker implements RaceTracker {
|
||||
trackedRace = regatta.createTrackedRace(raceDef, sidelines, windStore, gpsFixStore,
|
||||
params.getDelayToLiveInMillis(), WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND,
|
||||
boatClass.getApproximateManeuverDurationInMilliseconds(), null, /*useMarkPassingCalculator*/ true, raceLogResolver);
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.TRACKING, 0));
|
||||
trackedRace.onStatusChanged(this, new TrackedRaceStatusImpl(TrackedRaceStatusEnum.TRACKING, 0));
|
||||
|
||||
raceLogGPSFixTracker = new RaceLogGPSFixTracker(regatta, trackedRace, gpsFixStore);
|
||||
logger.info(String.format("Started tracking race-log race (%s)", raceLog));
|
||||
|
||||
+6
-3
@@ -60,6 +60,7 @@ import com.sap.sailing.domain.tracking.RaceTracker;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRaceStatus;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sailing.domain.tracking.TrackingDataLoader;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
import com.sap.sailing.domain.tracking.WindTrack;
|
||||
import com.sap.sailing.domain.tracking.impl.TrackedRaceStatusImpl;
|
||||
@@ -69,7 +70,8 @@ import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
import difflib.PatchFailedException;
|
||||
|
||||
public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implements SwissTimingRaceTracker, SailMasterListener {
|
||||
public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl
|
||||
implements SwissTimingRaceTracker, SailMasterListener, TrackingDataLoader {
|
||||
private static final Logger logger = Logger.getLogger(SwissTimingRaceTrackerImpl.class.getName());
|
||||
|
||||
private final SailMasterConnector connector;
|
||||
@@ -146,6 +148,7 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implemen
|
||||
this.delayToLiveInMillis = delayToLiveInMillis;
|
||||
this.competitorsByBoatId = new HashMap<String, Competitor>();
|
||||
this.useInternalMarkPassingAlgorithm = useInternalMarkPassingAlgorithm;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -161,7 +164,7 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implemen
|
||||
public void stop(boolean preemptive) throws MalformedURLException, IOException, InterruptedException {
|
||||
if (isTrackedRaceStillReachable()) {
|
||||
TrackedRaceStatus newStatus = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.FINISHED, 1.0);
|
||||
trackedRace.setStatus(newStatus);
|
||||
trackedRace.onStatusChanged(this, newStatus);
|
||||
}
|
||||
connector.removeSailMasterListener(this);
|
||||
}
|
||||
@@ -416,7 +419,7 @@ public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implemen
|
||||
} else {
|
||||
newStatus = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, progress);
|
||||
}
|
||||
trackedRace.setStatus(newStatus);
|
||||
trackedRace.onStatusChanged(this, newStatus);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -48,6 +48,7 @@ import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sailing.domain.tracking.TrackingDataLoader;
|
||||
import com.sap.sailing.domain.tracking.WindTrack;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.domain.tracking.impl.MarkPassingImpl;
|
||||
@@ -70,7 +71,7 @@ import difflib.PatchFailedException;
|
||||
* @author Axel Uhl (D043530)
|
||||
*
|
||||
*/
|
||||
public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter {
|
||||
public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter implements TrackingDataLoader {
|
||||
private static final int THRESHOLD_FOR_EARLIEST_MARK_PASSING_BEFORE_START_IN_MILLIS = 30000;
|
||||
|
||||
private static final Logger logger = Logger.getLogger(SwissTimingReplayToDomainAdapter.class.getName());
|
||||
@@ -322,7 +323,7 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter {
|
||||
WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND,
|
||||
/* time over which to average speed: */ race.getBoatClass().getApproximateManeuverDurationInMilliseconds(),
|
||||
/* raceDefinitionSetToUpdate */ null, useInternalMarkPassingAlgorithm, raceLogResolver);
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0));
|
||||
trackedRace.onStatusChanged(this, new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0));
|
||||
TimePoint bestStartTimeKnownSoFar = bestStartTimePerRaceID.get(currentRaceID);
|
||||
if (bestStartTimeKnownSoFar != null) {
|
||||
trackedRace.setStartTimeReceived(bestStartTimeKnownSoFar);
|
||||
@@ -392,7 +393,7 @@ public class SwissTimingReplayToDomainAdapter extends SwissTimingReplayAdapter {
|
||||
} else {
|
||||
newStatus = TrackedRaceStatusEnum.LOADING;
|
||||
}
|
||||
trackedRace.setStatus(new TrackedRaceStatusImpl(newStatus, progress));
|
||||
trackedRace.onStatusChanged(this, new TrackedRaceStatusImpl(newStatus, progress));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-4
@@ -34,6 +34,7 @@ import com.sap.sailing.domain.regattalog.impl.EmptyRegattaLogStore;
|
||||
import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.TrackingDataLoader;
|
||||
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
@@ -63,7 +64,7 @@ import com.tractrac.subscription.lib.api.event.IStoredDataEvent;
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public abstract class OnlineTracTracBasedTest extends AbstractTracTracLiveTest {
|
||||
public abstract class OnlineTracTracBasedTest extends AbstractTracTracLiveTest implements TrackingDataLoader {
|
||||
private final Logger logger = Logger.getLogger(OnlineTracTracBasedTest.class.getName());
|
||||
private DomainFactoryImpl domainFactory;
|
||||
private Regatta domainEvent;
|
||||
@@ -137,20 +138,20 @@ public abstract class OnlineTracTracBasedTest extends AbstractTracTracLiveTest {
|
||||
logger.info("Stored data begin");
|
||||
lastStatus = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, 0);
|
||||
if (getTrackedRace() != null) {
|
||||
getTrackedRace().setStatus(lastStatus);
|
||||
getTrackedRace().onStatusChanged(OnlineTracTracBasedTest.this, lastStatus);
|
||||
}
|
||||
break;
|
||||
case End:
|
||||
logger.info("Stored data end");
|
||||
lastStatus = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.TRACKING, 1);
|
||||
if (getTrackedRace() != null) {
|
||||
getTrackedRace().setStatus(lastStatus);
|
||||
getTrackedRace().onStatusChanged(OnlineTracTracBasedTest.this, lastStatus);
|
||||
}
|
||||
break;
|
||||
case Progress:
|
||||
lastStatus = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.LOADING, storedDataEvent.getProgress());
|
||||
if (getTrackedRace() != null) {
|
||||
getTrackedRace().setStatus(lastStatus);
|
||||
getTrackedRace().onStatusChanged(OnlineTracTracBasedTest.this, lastStatus);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
+1
-1
@@ -812,7 +812,7 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatus(TrackingDataLoader loader, TrackedRaceStatus status) {
|
||||
public void onStatusChanged(TrackingDataLoader loader, TrackedRaceStatus status) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
-2
@@ -41,6 +41,7 @@ import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRaceStatus;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
|
||||
import com.sap.sailing.domain.tracking.TrackingDataLoader;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
import com.sap.sailing.domain.tracking.WindTrack;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
@@ -69,7 +70,8 @@ import com.tractrac.subscription.lib.api.event.ILiveDataEvent;
|
||||
import com.tractrac.subscription.lib.api.event.IStoredDataEvent;
|
||||
import com.tractrac.subscription.lib.api.race.IRacesListener;
|
||||
|
||||
public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements IConnectionStatusListener, TracTracRaceTracker, DynamicRaceDefinitionSet {
|
||||
public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl
|
||||
implements IConnectionStatusListener, TracTracRaceTracker, DynamicRaceDefinitionSet, TrackingDataLoader {
|
||||
private static final Logger logger = Logger.getLogger(TracTracRaceTrackerImpl.class.getName());
|
||||
|
||||
/**
|
||||
@@ -601,7 +603,7 @@ public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements
|
||||
} else {
|
||||
status = lastStatus;
|
||||
}
|
||||
trackedRace.setStatus(status);
|
||||
trackedRace.onStatusChanged(this, status);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -162,7 +162,7 @@ public interface DynamicTrackedRace extends TrackedRace {
|
||||
|
||||
void setStatus(TrackedRaceStatus newStatus);
|
||||
|
||||
void setStatus(TrackingDataLoader loader, TrackedRaceStatus status);
|
||||
void onStatusChanged(TrackingDataLoader source, TrackedRaceStatus status);
|
||||
|
||||
/**
|
||||
* whenever a new course design is published by the race committee and the appropriate event occurs in the race log,
|
||||
|
||||
-1
@@ -2,6 +2,5 @@ package com.sap.sailing.domain.tracking;
|
||||
|
||||
public interface TrackingDataLoader {
|
||||
|
||||
TrackedRaceStatus getStatus();
|
||||
|
||||
}
|
||||
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
package com.sap.sailing.domain.tracking.impl;
|
||||
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRaceStatus;
|
||||
import com.sap.sailing.domain.tracking.TrackingDataLoader;
|
||||
|
||||
public abstract class AbstractTrackingDataLoaderImpl implements TrackingDataLoader {
|
||||
|
||||
private final DynamicTrackedRace trackedRace;
|
||||
private TrackedRaceStatus status;
|
||||
|
||||
protected AbstractTrackingDataLoaderImpl(DynamicTrackedRace trackedRace) {
|
||||
this.trackedRace = trackedRace;
|
||||
}
|
||||
|
||||
protected void updateStatus(TrackedRaceStatus status) {
|
||||
this.status = status;
|
||||
this.trackedRace.setStatus(this, status);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TrackedRaceStatus getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -187,7 +187,7 @@ DynamicTrackedRace, GPSTrackListener<Competitor, GPSFixMoving> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatus(TrackingDataLoader loader, TrackedRaceStatus status) {
|
||||
public void onStatusChanged(TrackingDataLoader source, TrackedRaceStatus status) {
|
||||
// FIXME implement loader status aggregation
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -569,7 +569,7 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatus(TrackingDataLoader loader, TrackedRaceStatus status) {
|
||||
public void onStatusChanged(TrackingDataLoader loader, TrackedRaceStatus status) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -3,10 +3,11 @@ package com.sap.sailing.server.operationaltransformation;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRaceStatus;
|
||||
import com.sap.sailing.domain.tracking.TrackingDataLoader;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
|
||||
public class UpdateTrackedRaceStatus extends AbstractRaceOperation<Void> {
|
||||
public class UpdateTrackedRaceStatus extends AbstractRaceOperation<Void> implements TrackingDataLoader {
|
||||
private static final long serialVersionUID = 5847067037829132465L;
|
||||
private final TrackedRaceStatus newStatus;
|
||||
|
||||
@@ -18,7 +19,7 @@ public class UpdateTrackedRaceStatus extends AbstractRaceOperation<Void> {
|
||||
@Override
|
||||
public Void internalApplyTo(RacingEventService toState) throws Exception {
|
||||
DynamicTrackedRace trackedRace = (DynamicTrackedRace) toState.getTrackedRace(getRaceIdentifier());
|
||||
trackedRace.setStatus(newStatus);
|
||||
trackedRace.onStatusChanged(this, newStatus);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user