mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 03:13:49 +00:00
factored out the common stop() functionality of RaceTrackers
This commit is contained in:
1 parent
0955c2fd64
commit
4c96d2e23c
3 files changed
+55
-29
No files matched your search
+14
-9
@@ -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;
|
||||||
|
|||||||
+7
-20
@@ -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() {
|
||||||
|
|||||||
Executable
+34
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in new issue
Block a user