From 4c96d2e23c65f40ac555aa93f3f457dec97f1cd3 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 21 Nov 2011 21:30:28 +0100 Subject: [PATCH] factored out the common stop() functionality of RaceTrackers --- .../impl/SwissTimingRaceTrackerImpl.java | 23 ++++++++----- .../impl/TracTracRaceTrackerImpl.java | 27 ++++----------- .../tracking/AbstractRaceTrackerImpl.java | 34 +++++++++++++++++++ 3 files changed, 55 insertions(+), 29 deletions(-) create mode 100755 java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/AbstractRaceTrackerImpl.java diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java index 62a2c2850ea..2afd8318e7c 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java @@ -30,6 +30,7 @@ import com.sap.sailing.domain.swisstimingadapter.SailMasterListener; import com.sap.sailing.domain.swisstimingadapter.StartList; import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory; import com.sap.sailing.domain.swisstimingadapter.SwissTimingRaceTracker; +import com.sap.sailing.domain.tracking.AbstractRaceTrackerImpl; import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet; import com.sap.sailing.domain.tracking.DynamicTrack; import com.sap.sailing.domain.tracking.DynamicTrackedEvent; @@ -41,6 +42,7 @@ import com.sap.sailing.domain.tracking.MarkPassing; import com.sap.sailing.domain.tracking.RaceHandle; import com.sap.sailing.domain.tracking.RaceTracker; import com.sap.sailing.domain.tracking.TrackedEventRegistry; +import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.WindTrack; import com.sap.sailing.util.Util; @@ -48,7 +50,7 @@ import com.sap.sailing.util.Util.Triple; import difflib.PatchFailedException; -public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailMasterListener { +public class SwissTimingRaceTrackerImpl extends AbstractRaceTrackerImpl implements SwissTimingRaceTracker, SailMasterListener { private static final Logger logger = Logger.getLogger(SwissTimingRaceTrackerImpl.class.getName()); private final SailMasterConnector connector; @@ -57,7 +59,6 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM private final DomainFactory domainFactory; private final Triple id; private final Event event; - private final DynamicTrackedEvent trackedEvent; private final WindStore windStore; private RaceDefinition race; @@ -76,7 +77,7 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM this.id = new Triple(raceID, hostname, port); connector.addSailMasterListener(raceID, this); event = domainFactory.getOrCreateEvent(raceID); - trackedEvent = trackedEventRegistry.getOrCreateTrackedEvent(event); + setTrackedEvent(trackedEventRegistry.getOrCreateTrackedEvent(event)); connector.trackRace(raceID); } @@ -84,6 +85,15 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM @Override public void stop() throws MalformedURLException, IOException, InterruptedException { connector.removeSailMasterListener(raceID, this); + Set races = getRaces(); + if (races != null && !races.isEmpty()) { + for (RaceDefinition race : races) { + TrackedRace trackedRace = getTrackedEvent().getExistingTrackedRace(race); + if (trackedRace != null) { + getTrackedEvent().removedTrackedRace(trackedRace); + } + } + } } @Override @@ -111,7 +121,7 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM @Override public DynamicTrackedEvent getTrackedEvent() { - return trackedEvent; + return SwissTimingRaceTrackerImpl.this.getTrackedEvent(); } @Override @@ -121,11 +131,6 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM }; } - @Override - public DynamicTrackedEvent getTrackedEvent() { - return trackedEvent; - } - @Override public WindStore getWindStore() { return windStore; diff --git a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracRaceTrackerImpl.java b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracRaceTrackerImpl.java index 70cdc13874a..c43bfa7bef9 100755 --- a/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracRaceTrackerImpl.java +++ b/java/com.sap.sailing.domain.tractracadapter/src/com/sap/sailing/domain/tractracadapter/impl/TracTracRaceTrackerImpl.java @@ -21,12 +21,13 @@ import com.sap.sailing.domain.base.Course; import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.impl.DegreePosition; import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; +import com.sap.sailing.domain.tracking.AbstractRaceTrackerImpl; import com.sap.sailing.domain.tracking.DynamicRaceDefinitionSet; import com.sap.sailing.domain.tracking.DynamicTrack; -import com.sap.sailing.domain.tracking.DynamicTrackedEvent; import com.sap.sailing.domain.tracking.DynamicTrackedRace; import com.sap.sailing.domain.tracking.GPSFix; import com.sap.sailing.domain.tracking.RaceHandle; +import com.sap.sailing.domain.tracking.TrackedEvent; import com.sap.sailing.domain.tracking.TrackedEventRegistry; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.WindStore; @@ -44,7 +45,7 @@ import com.tractrac.clientmodule.data.DataController; import com.tractrac.clientmodule.data.DataController.Listener; import com.tractrac.clientmodule.setup.KeyValue; -public class TracTracRaceTrackerImpl implements Listener, TracTracRaceTracker, DynamicRaceDefinitionSet { +public class TracTracRaceTrackerImpl extends AbstractRaceTrackerImpl implements Listener, TracTracRaceTracker, DynamicRaceDefinitionSet { private static final Logger logger = Logger.getLogger(TracTracRaceTrackerImpl.class.getName()); /** @@ -59,7 +60,6 @@ public class TracTracRaceTrackerImpl implements Listener, TracTracRaceTracker, D private final DataController controller; private final Set receivers; private final DomainFactory domainFactory; - private final DynamicTrackedEvent trackedEvent; private final WindStore windStore; private final Set races; @@ -90,7 +90,7 @@ public class TracTracRaceTrackerImpl implements Listener, TracTracRaceTracker, D * Provides the capability to obtain the {@link WindTrack}s for the different wind sources. A trivial * implementation is {@link EmptyWindStore} which simply provides new, empty tracks. This is always * available but loses track of the wind, e.g., during server restarts. - * @param trackedEventRegistry TODO + * @param trackedEventRegistry used to create the {@link TrackedEvent} for the domain event */ protected TracTracRaceTrackerImpl(DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI, WindStore windStore, TrackedEventRegistry trackedEventRegistry) throws URISyntaxException, @@ -119,10 +119,10 @@ public class TracTracRaceTrackerImpl implements Listener, TracTracRaceTracker, D domainFactory.removeRace(tractracEvent, tractracRace, trackedEventRegistry); } domainEvent = domainFactory.getOrCreateEvent(tractracEvent); - trackedEvent = trackedEventRegistry.getOrCreateTrackedEvent(domainEvent); + setTrackedEvent(trackedEventRegistry.getOrCreateTrackedEvent(domainEvent)); receivers = new HashSet(); Set typeControllers = new HashSet(); - for (Receiver receiver : domainFactory.getUpdateReceivers(trackedEvent, tractracEvent, windStore, this)) { + for (Receiver receiver : domainFactory.getUpdateReceivers(getTrackedEvent(), tractracEvent, windStore, this)) { receivers.add(receiver); for (TypeController typeController : receiver.getTypeControllersAndStart()) { typeControllers.add(typeController); @@ -182,11 +182,6 @@ public class TracTracRaceTrackerImpl implements Listener, TracTracRaceTracker, D return windStore; } - @Override - public DynamicTrackedEvent getTrackedEvent() { - return trackedEvent; - } - @Override public RaceHandle getRaceHandle() { return new RaceHandleImpl(domainFactory, tractracEvent, getTrackedEvent(), this); @@ -232,15 +227,7 @@ public class TracTracRaceTrackerImpl implements Listener, TracTracRaceTracker, D } ioThread.join(3000); // wait no more than three seconds logger.info("Joined TracTrac IO thread for race(s) "+getRaces()); - Set races = getRaces(); - if (races != null && !races.isEmpty()) { - for (RaceDefinition race : races) { - TrackedRace trackedRace = trackedEvent.getExistingTrackedRace(race); - if (trackedRace != null) { - trackedEvent.removedTrackedRace(trackedRace); - } - } - } + super.stop(); } protected DataController getController() { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/AbstractRaceTrackerImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/AbstractRaceTrackerImpl.java new file mode 100755 index 00000000000..f89c1e3dd51 --- /dev/null +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/AbstractRaceTrackerImpl.java @@ -0,0 +1,34 @@ +package com.sap.sailing.domain.tracking; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.Set; + +import com.sap.sailing.domain.base.RaceDefinition; + +public abstract class AbstractRaceTrackerImpl implements RaceTracker { + private DynamicTrackedEvent trackedEvent; + + @Override + public DynamicTrackedEvent getTrackedEvent() { + return trackedEvent; + } + + protected void setTrackedEvent(DynamicTrackedEvent trackedEvent) { + this.trackedEvent = trackedEvent; + } + + @Override + public void stop() throws MalformedURLException, IOException, InterruptedException { + Set races = getRaces(); + if (races != null && !races.isEmpty()) { + for (RaceDefinition race : races) { + TrackedRace trackedRace = trackedEvent.getExistingTrackedRace(race); + if (trackedRace != null) { + trackedEvent.removedTrackedRace(trackedRace); + } + } + } + } + +}