mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 19:33:52 +00:00
Merge branch 'master' into test
This commit is contained in:
commit
b56e46b5ad
16 files changed
+95
-64
No files matched your search
+1
-1
@@ -69,7 +69,7 @@ public class CourseUpdateTest extends AbstractTracTracLiveTest {
|
||||
domainEvent = domainFactory.createEvent(getEvent());
|
||||
trackedEvent = domainFactory.getOrCreateTrackedEvent(domainEvent);
|
||||
receivers.add(new RaceCourseReceiver(domainFactory, trackedEvent, getEvent(), /* millisecondsOverWhichToAverageWind */
|
||||
EmptyWindStore.INSTANCE,
|
||||
EmptyWindStore.INSTANCE, this,
|
||||
30000, /* millisecondsOverWhichToAverageSpeed */30000) {
|
||||
@Override
|
||||
protected void handleEvent(Triple<Route, RouteData, Race> event) {
|
||||
|
||||
+2
-2
@@ -90,12 +90,12 @@ public class ReceiveTrackingDataTest extends AbstractTracTracLiveTest {
|
||||
public void raceRemoved(TrackedRace trackedRace) {
|
||||
}
|
||||
});
|
||||
for (Receiver receiver : domainFactory.getUpdateReceivers(trackedEvent, getEvent(), EmptyWindStore.INSTANCE)) {
|
||||
for (Receiver receiver : domainFactory.getUpdateReceivers(trackedEvent, getEvent(), EmptyWindStore.INSTANCE, this)) {
|
||||
for (TypeController raceListener : receiver.getTypeControllers()) {
|
||||
listeners.add(raceListener);
|
||||
}
|
||||
}
|
||||
addListenersForStoredDataAndStartController(domainFactory.getUpdateReceivers(trackedEvent, getEvent(), EmptyWindStore.INSTANCE));
|
||||
addListenersForStoredDataAndStartController(domainFactory.getUpdateReceivers(trackedEvent, getEvent(), EmptyWindStore.INSTANCE, this));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+19
-18
@@ -114,23 +114,22 @@ public interface DomainFactory {
|
||||
BoatClass getBoatClass(CompetitorClass competitorClass);
|
||||
|
||||
/**
|
||||
* For each race listed by the <code>tractracEvent</code>, produces
|
||||
* {@link TypeController listeners} that, when
|
||||
* {@link DataController#add(TypeController) registered} with the
|
||||
* controller, create a {@link RaceDefinition} with the {@link Course}
|
||||
* defined in proper order, and
|
||||
* {@link com.sap.sailing.domain.base.Event#addRace(RaceDefinition) add} it
|
||||
* to the <code>event</code>. Other listeners of those returned will listen
|
||||
* for raw position and aggregated position data and update the
|
||||
* {@link TrackedEvent}'s content accordingly.
|
||||
* For each race listed by the <code>tractracEvent</code>, produces {@link TypeController listeners} that, when
|
||||
* {@link DataController#add(TypeController) registered} with the controller, create a {@link RaceDefinition} with
|
||||
* the {@link Course} defined in proper order, and {@link com.sap.sailing.domain.base.Event#addRace(RaceDefinition)
|
||||
* add} it to the <code>event</code>. Other listeners of those returned will listen for raw position and aggregated
|
||||
* position data and update the {@link TrackedEvent}'s content accordingly.
|
||||
*
|
||||
* @param trackedEvent
|
||||
* must have been created before through
|
||||
* {@link #getOrCreateTrackedEvent(com.sap.sailing.domain.base.Event)} because
|
||||
* otherwise the link to the {@link Event} can't be established
|
||||
* @param windStore TODO
|
||||
* {@link #getOrCreateTrackedEvent(com.sap.sailing.domain.base.Event)} because otherwise the link to the
|
||||
* {@link Event} can't be established
|
||||
* @param tokenToRetrieveAssociatedRace
|
||||
* used in {@link #getRace} to retrieve the {@link RaceDefinition} received by the
|
||||
* {@link RaceCourseReceiver} created by this call
|
||||
*/
|
||||
Iterable<Receiver> getUpdateReceivers(DynamicTrackedEvent trackedEvent, Event tractracEvent, WindStore windStore);
|
||||
Iterable<Receiver> getUpdateReceivers(DynamicTrackedEvent trackedEvent, Event tractracEvent, WindStore windStore,
|
||||
Object tokenToRetrieveAssociatedRace);
|
||||
|
||||
RaceDefinition createRaceDefinition(Race race, Course course);
|
||||
|
||||
@@ -145,17 +144,19 @@ public interface DomainFactory {
|
||||
|
||||
MarkPassing createMarkPassing(com.tractrac.clientmodule.Competitor competitor, Waypoint passed, TimePoint time);
|
||||
|
||||
Iterable<Receiver> getUpdateReceivers(DynamicTrackedEvent trackedEvent, Event tractracEvent, WindStore windStore, ReceiverType... types);
|
||||
Iterable<Receiver> getUpdateReceivers(DynamicTrackedEvent trackedEvent, Event tractracEvent, WindStore windStore,
|
||||
Object tokenToRetrieveAssociatedRace, ReceiverType... types);
|
||||
|
||||
DynamicTrackedRace trackRace(TrackedEvent trackedEvent, RaceDefinition raceDefinition,
|
||||
WindStore windStore, long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, Event tractracEvent);
|
||||
DynamicTrackedRace trackRace(TrackedEvent trackedEvent, RaceDefinition raceDefinition, WindStore windStore,
|
||||
long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed, Event tractracEvent,
|
||||
Object tokenToRetrieveAssociatedRace);
|
||||
|
||||
/**
|
||||
* Non-blocking call that returns <code>null</code> if the {@link RaceDefinition} for the TracTrac Event
|
||||
* Non-blocking call that returns <code>null</code> if the {@link RaceDefinition} for the token
|
||||
* hasn't been created yet, e.g., because the course definition hasn't been received yet or the listener
|
||||
* for receiving course information hasn't been registered (yet).
|
||||
*/
|
||||
RaceDefinition getRace(Event tractracEvent);
|
||||
RaceDefinition getRace(Object tokenToRetrieveAssociatedRace);
|
||||
|
||||
JSONService parseJSONURL(URL jsonURL) throws IOException, ParseException, org.json.simple.parser.ParseException;
|
||||
|
||||
|
||||
+22
-9
@@ -105,7 +105,12 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
private final Map<Pair<String, String>, com.sap.sailing.domain.base.Event> eventCache =
|
||||
new HashMap<Pair<String, String>, com.sap.sailing.domain.base.Event>();
|
||||
|
||||
private final Map<com.tractrac.clientmodule.Event, RaceDefinition> tractracEventToRaceDefinitionMap = new HashMap<com.tractrac.clientmodule.Event, RaceDefinition>();
|
||||
/**
|
||||
* Keyed by an object that the client that started the {@link RaceCourseReceiver} which then provided the
|
||||
* {@link RaceDefinition} has provided to retrieve the {@link RaceDefinition} again using
|
||||
* {@link #getRace}.
|
||||
*/
|
||||
private final Map<Object, RaceDefinition> tractracEventToRaceDefinitionMap = new HashMap<Object, RaceDefinition>();
|
||||
|
||||
private final Map<Race, RaceDefinition> raceCache = new HashMap<Race, RaceDefinition>();
|
||||
|
||||
@@ -321,13 +326,15 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Receiver> getUpdateReceivers(DynamicTrackedEvent trackedEvent, com.tractrac.clientmodule.Event tractracEvent, WindStore windStore, ReceiverType... types) {
|
||||
public Iterable<Receiver> getUpdateReceivers(DynamicTrackedEvent trackedEvent, com.tractrac.clientmodule.Event tractracEvent,
|
||||
WindStore windStore, Object tokenToRetrieveAssociatedRace, ReceiverType... types) {
|
||||
Collection<Receiver> result = new ArrayList<Receiver>();
|
||||
for (ReceiverType type : types) {
|
||||
switch (type) {
|
||||
case RACECOURSE:
|
||||
result.add(new RaceCourseReceiver(
|
||||
this, trackedEvent, tractracEvent, windStore, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed));
|
||||
this, trackedEvent, tractracEvent, windStore,
|
||||
tokenToRetrieveAssociatedRace, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed));
|
||||
break;
|
||||
case MARKPOSITIONS:
|
||||
result.add(new MarkPositionReceiver(
|
||||
@@ -352,8 +359,8 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
|
||||
@Override
|
||||
public Iterable<Receiver> getUpdateReceivers(DynamicTrackedEvent trackedEvent,
|
||||
com.tractrac.clientmodule.Event tractracEvent, WindStore windStore) {
|
||||
return getUpdateReceivers(trackedEvent, tractracEvent, windStore, ReceiverType.RACECOURSE,
|
||||
com.tractrac.clientmodule.Event tractracEvent, WindStore windStore, Object tokenToRetrieveAssociatedRace) {
|
||||
return getUpdateReceivers(trackedEvent, tractracEvent, windStore, tokenToRetrieveAssociatedRace, ReceiverType.RACECOURSE,
|
||||
ReceiverType.MARKPASSINGS, ReceiverType.MARKPOSITIONS, ReceiverType.RACESTARTFINISH,
|
||||
ReceiverType.RAWPOSITIONS);
|
||||
}
|
||||
@@ -445,18 +452,24 @@ public class DomainFactoryImpl implements DomainFactory {
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceDefinition getRace(com.tractrac.clientmodule.Event tractracEvent) {
|
||||
return tractracEventToRaceDefinitionMap.get(tractracEvent);
|
||||
public RaceDefinition getRace(Object tokenToRetrieveAssociatedRace) {
|
||||
return tractracEventToRaceDefinitionMap.get(tokenToRetrieveAssociatedRace);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DynamicTrackedRace trackRace(TrackedEvent trackedEvent, RaceDefinition raceDefinition,
|
||||
WindStore windStore, long millisecondsOverWhichToAverageWind,
|
||||
long millisecondsOverWhichToAverageSpeed, com.tractrac.clientmodule.Event tractracEvent) {
|
||||
long millisecondsOverWhichToAverageSpeed, com.tractrac.clientmodule.Event tractracEvent, Object tokenToRetrieveAssociatedRace) {
|
||||
logger.log(Level.INFO, "Creating DynamicTrackedRaceImpl for RaceDefinition "+raceDefinition.getName());
|
||||
DynamicTrackedRaceImpl result = new DynamicTrackedRaceImpl(trackedEvent, raceDefinition,
|
||||
windStore, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed);
|
||||
tractracEventToRaceDefinitionMap.put(tractracEvent, raceDefinition);
|
||||
if (!tractracEventToRaceDefinitionMap.containsKey(tokenToRetrieveAssociatedRace)) {
|
||||
tractracEventToRaceDefinitionMap.put(tokenToRetrieveAssociatedRace, raceDefinition);
|
||||
} else {
|
||||
logger.severe("There is already something ("+tokenToRetrieveAssociatedRace+") tracking "+
|
||||
tractracEventToRaceDefinitionMap.get(tokenToRetrieveAssociatedRace)+" while trying to start tracking for race "+
|
||||
raceDefinition);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
+5
-1
@@ -40,9 +40,11 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue<Route, RouteDa
|
||||
private final long millisecondsOverWhichToAverageWind;
|
||||
private final long millisecondsOverWhichToAverageSpeed;
|
||||
private final WindStore windStore;
|
||||
private final Object tokenToRetrieveAssociatedRace;
|
||||
|
||||
public RaceCourseReceiver(DomainFactory domainFactory, TrackedEvent trackedEvent,
|
||||
com.tractrac.clientmodule.Event tractracEvent, WindStore windStore,
|
||||
Object tokenToRetrieveAssociatedRace,
|
||||
long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed) {
|
||||
super(domainFactory);
|
||||
this.trackedEvent = trackedEvent;
|
||||
@@ -50,6 +52,7 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue<Route, RouteDa
|
||||
this.millisecondsOverWhichToAverageWind = millisecondsOverWhichToAverageWind;
|
||||
this.millisecondsOverWhichToAverageSpeed = millisecondsOverWhichToAverageSpeed;
|
||||
this.windStore = windStore;
|
||||
this.tokenToRetrieveAssociatedRace = tokenToRetrieveAssociatedRace;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -109,7 +112,8 @@ public class RaceCourseReceiver extends AbstractReceiverWithQueue<Route, RouteDa
|
||||
|
||||
private void createTrackedRace(RaceDefinition race) {
|
||||
DynamicTrackedRace trackedRace = getDomainFactory().trackRace(trackedEvent, race,
|
||||
windStore, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, tractracEvent);
|
||||
windStore, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed, tractracEvent,
|
||||
tokenToRetrieveAssociatedRace);
|
||||
trackedEvent.addTrackedRace(trackedRace);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -106,7 +106,7 @@ public class RaceTrackerImpl implements Listener, RaceTracker {
|
||||
trackedEvent = domainFactory.getOrCreateTrackedEvent(domainEvent);
|
||||
receivers = new HashSet<Receiver>();
|
||||
Set<TypeController> typeControllers = new HashSet<TypeController>();
|
||||
for (Receiver receiver : domainFactory.getUpdateReceivers(trackedEvent, tractracEvent, windStore)) {
|
||||
for (Receiver receiver : domainFactory.getUpdateReceivers(trackedEvent, tractracEvent, windStore, this)) {
|
||||
receivers.add(receiver);
|
||||
for (TypeController typeController : receiver.getTypeControllers()) {
|
||||
typeControllers.add(typeController);
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@ public class TestStoringAndRetrievingWindTracks extends AbstractTracTracLiveTest
|
||||
RaceDefinition race = domainFactory.getRaceDefinition(getEvent().getRaceList().iterator().next());
|
||||
DynamicTrackedRace trackedRace = domainFactory.trackRace(trackedEvent, race, /* millisecondsOverWhichToAverageWind */
|
||||
EmptyWindStore.INSTANCE, /* millisecondsOverWhichToAverageSpeed */
|
||||
30000, 10000, getEvent());
|
||||
30000, 10000, getEvent(), this);
|
||||
WindSource windSource = WindSource.WEB;
|
||||
MongoObjectFactory.INSTANCE.addWindTrackDumper(trackedEvent, trackedRace, windSource, db);
|
||||
WindTrack windTrack = trackedRace.getWindTrack(windSource);
|
||||
|
||||
Reference in new issue
Block a user