# moved CourseDesignChanged Listener and Log Listener code to DynamicTrackedRace and its Impl

This commit is contained in:
Lukas Niemeier committed 2013-05-16 15:28:32 +02:00
1 parent 57e47e3172
commit 97ca5034fc
6 files changed
+120 -111

No files matched your search

@@ -6,7 +6,6 @@ import java.util.List;
import java.util.NavigableSet;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.Leg;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.RaceDefinition;
@@ -495,12 +494,6 @@ public class MockedTrackedRaceWithStartTimeAndRanks implements TrackedRace {
return null;
}
@Override
public void onCourseDesignChangedByRaceCommittee(CourseBase courseDesign) {
// TODO Auto-generated method stub
}
@Override
public void setCourseDesignChangedListener(CourseDesignChangedListener listener) {
// TODO Auto-generated method stub
@@ -1,6 +1,7 @@
package com.sap.sailing.domain.tracking;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.WindSource;
@@ -78,4 +79,11 @@ public interface DynamicTrackedRace extends TrackedRace {
void setRaceIsKnownToStartUpwind(boolean raceIsKnownToStartUpwind);
void setStatus(TrackedRaceStatus newStatus);
/**
* whenever a new course design is published by the race committee and the appropriate event occures in the race log, this method is
* called to propagate the course design to the tracking provider.
* @param courseDesign the new course design to be published
*/
void onCourseDesignChangedByRaceCommittee(CourseBase courseDesign);
}
@@ -7,7 +7,6 @@ import java.util.SortedSet;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Course;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.Leg;
import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.base.RaceDefinition;
@@ -496,13 +495,6 @@ public interface TrackedRace extends Serializable {
* Otherwise <code>null</code>.
*/
RaceLog getRaceLog();
/**
* whenever a new course design is published by the race committee and the appropriate event occures in the race log, this method is
* called to propagate the course design to the tracking provider.
* @param courseDesign the new course design to be published
*/
void onCourseDesignChangedByRaceCommittee(CourseBase courseDesign);
/**
* a setter for the listener on course design changes. The listener is mostly part of the tracking provider adapter.
@@ -27,6 +27,8 @@ import com.sap.sailing.domain.common.WindSource;
import com.sap.sailing.domain.common.WindSourceType;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.WindSourceImpl;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.tracking.CourseDesignChangedListener;
import com.sap.sailing.domain.tracking.DynamicGPSFixTrack;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
@@ -55,12 +57,17 @@ DynamicTrackedRace, GPSTrackListener<Competitor, GPSFixMoving> {
private boolean raceIsKnownToStartUpwind;
private boolean delayToLiveInMillisFixed;
private transient DynamicTrackedRaceLogListener logListener;
private transient CourseDesignChangedListener courseDesignChangedListener;
public DynamicTrackedRaceImpl(TrackedRegatta trackedRegatta, RaceDefinition race,
WindStore windStore, long delayToLiveInMillis, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
long delayForCacheInvalidationOfWindEstimation) {
super(trackedRegatta, race, windStore, delayToLiveInMillis, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed,
delayForCacheInvalidationOfWindEstimation);
this.logListener = new DynamicTrackedRaceLogListener(this);
this.raceIsKnownToStartUpwind = race.getBoatClass().typicallyStartsUpwind();
if (!raceIsKnownToStartUpwind) {
Set<WindSource> windSourcesToExclude = new HashSet<WindSource>();
@@ -653,6 +660,24 @@ DynamicTrackedRace, GPSTrackListener<Competitor, GPSFixMoving> {
public boolean raceIsKnownToStartUpwind() {
return raceIsKnownToStartUpwind;
}
@Override
public void attachRaceLog(RaceLog raceLog) {
super.attachRaceLog(raceLog);
attachedRaceLog.addListener(logListener);
}
@Override
public void detachRaceLog() {
attachedRaceLog.removeListener(logListener);
logListener.detach();
super.detachRaceLog();
}
@Override
public void setCourseDesignChangedListener(CourseDesignChangedListener listener) {
this.courseDesignChangedListener = listener;
}
@Override
public void onCourseDesignChangedByRaceCommittee(CourseBase newCourseDesign) {
@@ -1,82 +1,86 @@
package com.sap.sailing.domain.tracking.impl;
import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogEventVisitor;
import com.sap.sailing.domain.racelog.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
import com.sap.sailing.domain.racelog.RaceLogGateLineOpeningTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent;
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.TrackedRace;
public class TrackedRaceLogListener implements RaceLogEventVisitor {
private TrackedRace trackedRace;
public TrackedRaceLogListener(TrackedRace trackedRace) {
this.trackedRace = trackedRace;
}
@Override
public void visit(RaceLogFlagEvent event) {
//do nothing
}
@Override
public void visit(RaceLogPassChangeEvent event) {
//do nothing
}
@Override
public void visit(RaceLogRaceStatusEvent event) {
// TODO Auto-generated method stub
}
@Override
public void visit(RaceLogStartTimeEvent event) {
((DynamicTrackedRace) trackedRace).setStartTimeReceived(event.getStartTime());
}
@Override
public void visit(RaceLogCourseAreaChangedEvent event) {
//do nothing
}
@Override
public void visit(RaceLogCourseDesignChangedEvent event) {
trackedRace.onCourseDesignChangedByRaceCommittee(event.getCourseDesign());
}
@Override
public void visit(RaceLogFinishPositioningListChangedEvent event) {
// do nothing (wait for RaceLogFinishPositioningConfirmedEvent to perform score corrections)
}
@Override
public void visit(RaceLogFinishPositioningConfirmedEvent event) {
// do nothing score correction is handled by the leaderboard
}
@Override
public void visit(RaceLogPathfinderEvent event) {
// do nothing
}
@Override
public void visit(RaceLogGateLineOpeningTimeEvent event) {
// do nothing
}
@Override
public void visit(RaceLogStartProcedureChangedEvent event) {
// do nothing
}
}
package com.sap.sailing.domain.tracking.impl;
import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogEventVisitor;
import com.sap.sailing.domain.racelog.RaceLogFinishPositioningConfirmedEvent;
import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
import com.sap.sailing.domain.racelog.RaceLogGateLineOpeningTimeEvent;
import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent;
import com.sap.sailing.domain.racelog.RaceLogPathfinderEvent;
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.domain.racelog.RaceLogStartProcedureChangedEvent;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
import com.sap.sailing.domain.tracking.DynamicTrackedRace;
public class DynamicTrackedRaceLogListener implements RaceLogEventVisitor {
private DynamicTrackedRace trackedRace;
public DynamicTrackedRaceLogListener(DynamicTrackedRace trackedRace) {
this.trackedRace = trackedRace;
}
public void detach() {
// TODO Auto-generated method stub
}
@Override
public void visit(RaceLogFlagEvent event) {
//do nothing
}
@Override
public void visit(RaceLogPassChangeEvent event) {
//do nothing
}
@Override
public void visit(RaceLogRaceStatusEvent event) {
// TODO Auto-generated method stub
}
@Override
public void visit(RaceLogStartTimeEvent event) {
trackedRace.setStartTimeReceived(event.getStartTime());
}
@Override
public void visit(RaceLogCourseAreaChangedEvent event) {
//do nothing
}
@Override
public void visit(RaceLogCourseDesignChangedEvent event) {
trackedRace.onCourseDesignChangedByRaceCommittee(event.getCourseDesign());
}
@Override
public void visit(RaceLogFinishPositioningListChangedEvent event) {
// do nothing (wait for RaceLogFinishPositioningConfirmedEvent to perform score corrections)
}
@Override
public void visit(RaceLogFinishPositioningConfirmedEvent event) {
// do nothing score correction is handled by the leaderboard
}
@Override
public void visit(RaceLogPathfinderEvent event) {
// do nothing
}
@Override
public void visit(RaceLogGateLineOpeningTimeEvent event) {
// do nothing
}
@Override
public void visit(RaceLogStartProcedureChangedEvent event) {
// do nothing
}
}
@@ -71,7 +71,6 @@ import com.sap.sailing.domain.confidence.Weigher;
import com.sap.sailing.domain.confidence.impl.HyperbolicTimeDifferenceWeigher;
import com.sap.sailing.domain.confidence.impl.PositionAndTimePointWeigher;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.tracking.CourseDesignChangedListener;
import com.sap.sailing.domain.tracking.GPSFix;
import com.sap.sailing.domain.tracking.GPSFixMoving;
import com.sap.sailing.domain.tracking.GPSFixTrack;
@@ -221,11 +220,7 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
private transient CombinedWindTrackImpl combinedWindTrack;
private transient RaceLog attachedRaceLog;
private transient TrackedRaceLogListener raceLogListener;
protected transient CourseDesignChangedListener courseDesignChangedListener;
protected transient RaceLog attachedRaceLog;
/**
* The time delay to the current point in time in milliseconds.
@@ -277,7 +272,6 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
this.startToNextMarkCacheInvalidationListeners = new ConcurrentHashMap<Mark, TrackedRaceImpl.StartToNextMarkCacheInvalidationListener>();
this.maneuverCache = createManeuverCache();
this.markTracks = new ConcurrentHashMap<Mark, GPSFixTrack<Mark, GPSFix>>();
this.raceLogListener = new TrackedRaceLogListener(this);
this.crossTrackErrorCache = new CrossTrackErrorCache(this);
int i = 0;
for (Waypoint waypoint : race.getCourse().getWaypoints()) {
@@ -2338,12 +2332,10 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
@Override
public void attachRaceLog(RaceLog raceLog) {
this.attachedRaceLog = raceLog;
attachedRaceLog.addListener(raceLogListener);
}
@Override
public void detachRaceLog() {
this.attachedRaceLog.removeListener(raceLogListener);
this.attachedRaceLog = null;
}
@@ -2352,11 +2344,6 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
return attachedRaceLog;
}
@Override
public void setCourseDesignChangedListener(CourseDesignChangedListener listener) {
this.courseDesignChangedListener = listener;
}
@Override
public Distance getDistanceToStartLine(Competitor competitor, TimePoint timePoint) {
Waypoint startWaypoint = getRace().getCourse().getFirstWaypoint();