factored out the common stop() functionality of RaceTrackers

This commit is contained in:
Axel Uhl committed 2011-11-21 21:30:28 +01:00
1 parent 0955c2fd64
commit 4c96d2e23c
3 files changed
+55 -29

No files matched your search

@@ -30,6 +30,7 @@ import com.sap.sailing.domain.swisstimingadapter.SailMasterListener;
import com.sap.sailing.domain.swisstimingadapter.StartList; import com.sap.sailing.domain.swisstimingadapter.StartList;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory; import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingRaceTracker; 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.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrack; import com.sap.sailing.domain.tracking.DynamicTrack;
import com.sap.sailing.domain.tracking.DynamicTrackedEvent; 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.RaceHandle;
import com.sap.sailing.domain.tracking.RaceTracker; import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.TrackedEventRegistry; 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.WindStore;
import com.sap.sailing.domain.tracking.WindTrack; import com.sap.sailing.domain.tracking.WindTrack;
import com.sap.sailing.util.Util; import com.sap.sailing.util.Util;
@@ -48,7 +50,7 @@ import com.sap.sailing.util.Util.Triple;
import difflib.PatchFailedException; 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 static final Logger logger = Logger.getLogger(SwissTimingRaceTrackerImpl.class.getName());
private final SailMasterConnector connector; private final SailMasterConnector connector;
@@ -57,7 +59,6 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM
private final DomainFactory domainFactory; private final DomainFactory domainFactory;
private final Triple<String, String, Integer> id; private final Triple<String, String, Integer> id;
private final Event event; private final Event event;
private final DynamicTrackedEvent trackedEvent;
private final WindStore windStore; private final WindStore windStore;
private RaceDefinition race; private RaceDefinition race;
@@ -76,7 +77,7 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM
this.id = new Triple<String, String, Integer>(raceID, hostname, port); this.id = new Triple<String, String, Integer>(raceID, hostname, port);
connector.addSailMasterListener(raceID, this); connector.addSailMasterListener(raceID, this);
event = domainFactory.getOrCreateEvent(raceID); event = domainFactory.getOrCreateEvent(raceID);
trackedEvent = trackedEventRegistry.getOrCreateTrackedEvent(event); setTrackedEvent(trackedEventRegistry.getOrCreateTrackedEvent(event));
connector.trackRace(raceID); connector.trackRace(raceID);
} }
@@ -84,6 +85,15 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM
@Override @Override
public void stop() throws MalformedURLException, IOException, InterruptedException { public void stop() throws MalformedURLException, IOException, InterruptedException {
connector.removeSailMasterListener(raceID, this); connector.removeSailMasterListener(raceID, this);
Set<RaceDefinition> races = getRaces();
if (races != null && !races.isEmpty()) {
for (RaceDefinition race : races) {
TrackedRace trackedRace = getTrackedEvent().getExistingTrackedRace(race);
if (trackedRace != null) {
getTrackedEvent().removedTrackedRace(trackedRace);
}
}
}
} }
@Override @Override
@@ -111,7 +121,7 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM
@Override @Override
public DynamicTrackedEvent getTrackedEvent() { public DynamicTrackedEvent getTrackedEvent() {
return trackedEvent; return SwissTimingRaceTrackerImpl.this.getTrackedEvent();
} }
@Override @Override
@@ -121,11 +131,6 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM
}; };
} }
@Override
public DynamicTrackedEvent getTrackedEvent() {
return trackedEvent;
}
@Override @Override
public WindStore getWindStore() { public WindStore getWindStore() {
return windStore; return windStore;
@@ -21,12 +21,13 @@ import com.sap.sailing.domain.base.Course;
import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.domain.base.impl.DegreePosition; import com.sap.sailing.domain.base.impl.DegreePosition;
import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; 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.DynamicRaceDefinitionSet;
import com.sap.sailing.domain.tracking.DynamicTrack; 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.DynamicTrackedRace;
import com.sap.sailing.domain.tracking.GPSFix; import com.sap.sailing.domain.tracking.GPSFix;
import com.sap.sailing.domain.tracking.RaceHandle; 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.TrackedEventRegistry;
import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.WindStore; 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.data.DataController.Listener;
import com.tractrac.clientmodule.setup.KeyValue; 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()); 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 DataController controller;
private final Set<Receiver> receivers; private final Set<Receiver> receivers;
private final DomainFactory domainFactory; private final DomainFactory domainFactory;
private final DynamicTrackedEvent trackedEvent;
private final WindStore windStore; private final WindStore windStore;
private final Set<RaceDefinition> races; private final Set<RaceDefinition> 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 * 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 * 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. * 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, protected TracTracRaceTrackerImpl(DomainFactory domainFactory, URL paramURL, URI liveURI, URI storedURI,
WindStore windStore, TrackedEventRegistry trackedEventRegistry) throws URISyntaxException, WindStore windStore, TrackedEventRegistry trackedEventRegistry) throws URISyntaxException,
@@ -119,10 +119,10 @@ public class TracTracRaceTrackerImpl implements Listener, TracTracRaceTracker, D
domainFactory.removeRace(tractracEvent, tractracRace, trackedEventRegistry); domainFactory.removeRace(tractracEvent, tractracRace, trackedEventRegistry);
} }
domainEvent = domainFactory.getOrCreateEvent(tractracEvent); domainEvent = domainFactory.getOrCreateEvent(tractracEvent);
trackedEvent = trackedEventRegistry.getOrCreateTrackedEvent(domainEvent); setTrackedEvent(trackedEventRegistry.getOrCreateTrackedEvent(domainEvent));
receivers = new HashSet<Receiver>(); receivers = new HashSet<Receiver>();
Set<TypeController> typeControllers = new HashSet<TypeController>(); Set<TypeController> typeControllers = new HashSet<TypeController>();
for (Receiver receiver : domainFactory.getUpdateReceivers(trackedEvent, tractracEvent, windStore, this)) { for (Receiver receiver : domainFactory.getUpdateReceivers(getTrackedEvent(), tractracEvent, windStore, this)) {
receivers.add(receiver); receivers.add(receiver);
for (TypeController typeController : receiver.getTypeControllersAndStart()) { for (TypeController typeController : receiver.getTypeControllersAndStart()) {
typeControllers.add(typeController); typeControllers.add(typeController);
@@ -182,11 +182,6 @@ public class TracTracRaceTrackerImpl implements Listener, TracTracRaceTracker, D
return windStore; return windStore;
} }
@Override
public DynamicTrackedEvent getTrackedEvent() {
return trackedEvent;
}
@Override @Override
public RaceHandle getRaceHandle() { public RaceHandle getRaceHandle() {
return new RaceHandleImpl(domainFactory, tractracEvent, getTrackedEvent(), this); 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 ioThread.join(3000); // wait no more than three seconds
logger.info("Joined TracTrac IO thread for race(s) "+getRaces()); logger.info("Joined TracTrac IO thread for race(s) "+getRaces());
Set<RaceDefinition> races = getRaces(); super.stop();
if (races != null && !races.isEmpty()) {
for (RaceDefinition race : races) {
TrackedRace trackedRace = trackedEvent.getExistingTrackedRace(race);
if (trackedRace != null) {
trackedEvent.removedTrackedRace(trackedRace);
}
}
}
} }
protected DataController getController() { protected DataController getController() {
@@ -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<RaceDefinition> races = getRaces();
if (races != null && !races.isEmpty()) {
for (RaceDefinition race : races) {
TrackedRace trackedRace = trackedEvent.getExistingTrackedRace(race);
if (trackedRace != null) {
trackedEvent.removedTrackedRace(trackedRace);
}
}
}
}
}