test case that creates race with RaceLogTrackingAdapter

This commit is contained in:
Fredrik Teschke committed 2014-02-16 16:35:55 +01:00
1 parent 9e3541582d
commit 0e6c4f2fad
7 files changed
+222 -30

No files matched your search

@@ -11,11 +11,9 @@ import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.impl.RaceLogRaceTracker;
import com.sap.sailing.domain.tracking.RacesHandle;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.WindStore;
import com.sap.sailing.server.RacingEventService;
public interface RaceLogTrackingAdapter {
@@ -26,8 +24,7 @@ public interface RaceLogTrackingAdapter {
*/
RacesHandle addRace(RacingEventService service,
RegattaIdentifier regattaToAddTo, Leaderboard leaderboard,
RaceColumn raceColumn, Fleet fleet, RaceLogStore raceLogStore,
WindStore windStore, long timeoutInMilliseconds)
RaceColumn raceColumn, Fleet fleet, long timeoutInMilliseconds)
throws MalformedURLException, FileNotFoundException,
URISyntaxException, Exception;
@@ -12,6 +12,7 @@ import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
import com.sap.sailing.domain.racelog.tracking.RaceNotCreatedException;
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RaceInformationFinder;
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer;
import com.sap.sailing.domain.tracking.DynamicTrackedRegatta;
import com.sap.sailing.domain.tracking.RaceTracker;
import com.sap.sailing.domain.tracking.RaceTrackingConnectivityParameters;
import com.sap.sailing.domain.tracking.TrackedRegattaRegistry;
@@ -45,13 +46,13 @@ public class RaceLogConnectivityParams implements RaceTrackingConnectivityParame
@Override
public RaceTracker createRaceTracker(
TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore) throws Exception {
TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore) {
return createRaceTracker(regatta, trackedRegattaRegistry, windStore, gpsFixStore);
}
@Override
public RaceTracker createRaceTracker(Regatta regatta,
TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore) throws Exception {
TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore) {
if (regatta == null) {
BoatClass boatClass = new RaceInformationFinder(raceLog).analyze().getB();
regatta = service.getOrCreateDefaultRegatta("RaceLog-tracking default Regatta", boatClass.getName(), UUID.randomUUID());
@@ -59,7 +60,8 @@ public class RaceLogConnectivityParams implements RaceTrackingConnectivityParame
if (regatta == null) {
throw new RaceNotCreatedException("No regatta for race-log tracked race");
}
return new RaceLogRaceTracker(trackedRegattaRegistry.getOrCreateTrackedRegatta(regatta), this, windStore, gpsFixStore);
DynamicTrackedRegatta trackedRegatta = trackedRegattaRegistry.getOrCreateTrackedRegatta(regatta);
return new RaceLogRaceTracker(trackedRegatta, this, windStore, gpsFixStore);
}
@Override
@@ -318,6 +318,10 @@ public class RaceLogRaceTracker extends BaseRaceLogEventVisitor implements RaceT
Iterable<Sideline> sidelines = Collections.<Sideline>emptyList();
//set race definition, so race is linked to leaderboard automatically
regatta.getRegatta().addRace(raceDef);
raceColumn.setRaceIdentifier(fleet, regatta.getRegatta().getRaceIdentifier(raceDef));
trackedRace = regatta.createTrackedRace(raceDef, sidelines, windStore, gpsFixStore, params.getDelayToLiveInMillis(),
WindTrack.DEFAULT_MILLISECONDS_OVER_WHICH_TO_AVERAGE_WIND, boatClass.getApproximateManeuverDurationInMilliseconds(),
null);
@@ -346,22 +350,26 @@ public class RaceLogRaceTracker extends BaseRaceLogEventVisitor implements RaceT
@Override
public void fixReceived(DeviceIdentifier device, GPSFix fix) {
TimePoint timePoint = fix.getTimePoint();
for (DeviceMapping<Mark> mapping : markMappingsByDevices.get(device)) {
Mark mark = mapping.getMappedTo();
if (mapping.getTimeRange().includes(timePoint)) {
trackedRace.recordFix(mark, fix);
if (markMappingsByDevices.get(device) != null) {
for (DeviceMapping<Mark> mapping : markMappingsByDevices.get(device)) {
Mark mark = mapping.getMappedTo();
if (mapping.getTimeRange().includes(timePoint)) {
trackedRace.recordFix(mark, fix);
}
}
}
for (DeviceMapping<Competitor> mapping : competitorMappingsByDevices.get(device)) {
Competitor comp = mapping.getMappedTo();
if (mapping.getTimeRange().includes(timePoint)) {
if (fix instanceof GPSFixMoving) {
trackedRace.recordFix(comp, (GPSFixMoving) fix);
} else {
logger.log(Level.WARNING,
String.format("Could not add fix for competitor (%s) in race (%s), as it is no GPSFixMoving",
comp, params.getRaceLog()));
if (competitorMappingsByDevices.get(device) != null) {
for (DeviceMapping<Competitor> mapping : competitorMappingsByDevices.get(device)) {
Competitor comp = mapping.getMappedTo();
if (mapping.getTimeRange().includes(timePoint)) {
if (fix instanceof GPSFixMoving) {
trackedRace.recordFix(comp, (GPSFixMoving) fix);
} else {
logger.log(Level.WARNING,
String.format("Could not add fix for competitor (%s) in race (%s), as it is no GPSFixMoving",
comp, params.getRaceLog()));
}
}
}
}
@@ -26,7 +26,6 @@ import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
import com.sap.sailing.domain.racelog.RaceLogStore;
import com.sap.sailing.domain.racelog.tracking.NotDenotableForTrackingException;
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingAdapter;
import com.sap.sailing.domain.racelog.tracking.RaceLogTrackingState;
@@ -34,7 +33,6 @@ import com.sap.sailing.domain.racelog.tracking.RaceNotCreatedException;
import com.sap.sailing.domain.racelog.tracking.analyzing.impl.RaceLogTrackingStateAnalyzer;
import com.sap.sailing.domain.tracking.RacesHandle;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.WindStore;
import com.sap.sailing.server.RacingEventService;
public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
@@ -50,7 +48,7 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
@Override
public RacesHandle addRace(RacingEventService service, RegattaIdentifier regattaToAddTo, Leaderboard leaderboard,
RaceColumn raceColumn, Fleet fleet, RaceLogStore raceLogStore, WindStore windStore, long timeoutInMilliseconds)
RaceColumn raceColumn, Fleet fleet, long timeoutInMilliseconds)
throws MalformedURLException, FileNotFoundException, URISyntaxException, RaceNotCreatedException, Exception {
RaceLog raceLog = raceColumn.getRaceLog(fleet);
Regatta regatta = service.getRegatta(regattaToAddTo);