Merge branch 'master' into test

This commit is contained in:
Axel Uhl committed 2011-06-21 03:33:21 +02:00
commit b56e46b5ad
16 files changed
+95 -64

No files matched your search

@@ -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) {
@@ -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
@@ -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;
@@ -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;
}
@@ -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);
}
@@ -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);
@@ -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);