Moving update status to status event programming model with source

This commit is contained in:
Papick Garcia Taboada
2016-05-04 15:21:56 +02:00
parent b6cf3dcf71
commit a523f790d3
12 changed files with 30 additions and 48 deletions
@@ -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));
@@ -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);
}
}
@@ -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));
}
}
}
@@ -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:
@@ -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
@@ -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);
}
}
@@ -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,
@@ -2,6 +2,5 @@ package com.sap.sailing.domain.tracking;
public interface TrackingDataLoader {
TrackedRaceStatus getStatus();
}
@@ -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;
}
}
@@ -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
}
@@ -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,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;
}