From 22e340cd9322b4b01d7230160a105283b9bb1b65 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 15 Nov 2011 13:32:16 +0100 Subject: [PATCH] provided an untested implementation of receiveTimingData for SwissTiming connector --- .../swisstimingadapter/DomainFactory.java | 6 +++++- .../impl/DomainFactoryImpl.java | 7 +++++++ .../impl/SwissTimingRaceTrackerImpl.java | 18 +++++++++++++++++- .../src/com/sap/sailing/util/Util.java | 15 +++++++++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java index 32ec1048d43..fadf4dd5cd5 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/DomainFactory.java @@ -7,8 +7,10 @@ import com.sap.sailing.domain.base.Event; import com.sap.sailing.domain.base.Nationality; import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.TimePoint; +import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.swisstimingadapter.impl.DomainFactoryImpl; import com.sap.sailing.domain.tracking.GPSFixMoving; +import com.sap.sailing.domain.tracking.MarkPassing; import difflib.PatchFailedException; @@ -27,7 +29,9 @@ public interface DomainFactory { GPSFixMoving createGPSFix(TimePoint timePointOfTransmission, Fix fix); - Competitor getCompetitorByBoatID(String sailNumber); + Competitor getCompetitorByBoatID(String boatID); void updateCourseWaypoints(Course courseToUpdate, Iterable marks) throws PatchFailedException; + + MarkPassing createMarkPassing(String raceID, String boatID, Waypoint waypoint, TimePoint timePoint); } diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java index 504c59338c9..402458e3759 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/DomainFactoryImpl.java @@ -37,7 +37,9 @@ import com.sap.sailing.domain.swisstimingadapter.MessageType; import com.sap.sailing.domain.swisstimingadapter.Race; import com.sap.sailing.domain.swisstimingadapter.StartList; import com.sap.sailing.domain.tracking.GPSFixMoving; +import com.sap.sailing.domain.tracking.MarkPassing; import com.sap.sailing.domain.tracking.impl.GPSFixMovingImpl; +import com.sap.sailing.domain.tracking.impl.MarkPassingImpl; import com.sap.sailing.util.CourseAsWaypointList; import com.sap.sailing.util.Util; @@ -212,4 +214,9 @@ public class DomainFactoryImpl implements DomainFactory { } } + @Override + public MarkPassing createMarkPassing(String raceID, String boatID, Waypoint waypoint, TimePoint timePoint) { + return new MarkPassingImpl(timePoint, waypoint, getCompetitorByBoatID(boatID)); + } + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java index 40522872747..df3f016ff5a 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter/src/com/sap/sailing/domain/swisstimingadapter/impl/SwissTimingRaceTrackerImpl.java @@ -8,6 +8,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.TreeMap; import java.util.logging.Logger; import com.sap.sailing.domain.base.Buoy; @@ -16,6 +17,8 @@ import com.sap.sailing.domain.base.Distance; import com.sap.sailing.domain.base.Event; import com.sap.sailing.domain.base.RaceDefinition; import com.sap.sailing.domain.base.TimePoint; +import com.sap.sailing.domain.base.Waypoint; +import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; import com.sap.sailing.domain.swisstimingadapter.Course; import com.sap.sailing.domain.swisstimingadapter.DomainFactory; import com.sap.sailing.domain.swisstimingadapter.Fix; @@ -34,11 +37,13 @@ import com.sap.sailing.domain.tracking.DynamicTrackedRace; import com.sap.sailing.domain.tracking.GPSFix; import com.sap.sailing.domain.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.GPSFixTrack; +import com.sap.sailing.domain.tracking.MarkPassing; import com.sap.sailing.domain.tracking.RaceHandle; import com.sap.sailing.domain.tracking.RaceTracker; import com.sap.sailing.domain.tracking.TrackedEventRegistry; import com.sap.sailing.domain.tracking.WindStore; import com.sap.sailing.domain.tracking.WindTrack; +import com.sap.sailing.util.Util; import com.sap.sailing.util.Util.Triple; import difflib.PatchFailedException; @@ -172,7 +177,18 @@ public class SwissTimingRaceTrackerImpl implements SwissTimingRaceTracker, SailM @Override public void receivedTimingData(String raceID, String boatID, List> markIndicesRanksAndTimesSinceStartInMilliseconds) { - // TODO implement receivedTimingData; generate MarkPassing objects and update tracked race accordingly + assert this.raceID.equals(raceID); + TreeMap markPassingsByMarkIndex = new TreeMap(); + for (Triple markIndexRankAndTimeSinceStartInMilliseconds : markIndicesRanksAndTimesSinceStartInMilliseconds) { + Waypoint waypoint = Util.get(trackedRace.getRace().getCourse().getWaypoints(), + markIndexRankAndTimeSinceStartInMilliseconds.getA()); + MillisecondsTimePoint timePoint = new MillisecondsTimePoint(trackedRace.getStart().asMillis() + + markIndexRankAndTimeSinceStartInMilliseconds.getC()); + MarkPassing markPassing = domainFactory.createMarkPassing(raceID, boatID, waypoint, timePoint); + markPassingsByMarkIndex.put(markIndexRankAndTimeSinceStartInMilliseconds.getA(), markPassing); + } + Competitor competitor = domainFactory.getCompetitorByBoatID(boatID); + trackedRace.updateMarkPassings(competitor, markPassingsByMarkIndex.values()); } @Override diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/util/Util.java b/java/com.sap.sailing.domain/src/com/sap/sailing/util/Util.java index 24e60e234a7..1154aec095a 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/util/Util.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/util/Util.java @@ -2,6 +2,7 @@ package com.sap.sailing.util; import java.util.Collection; import java.util.Iterator; +import java.util.List; public class Util { public static int size(Iterable i) { @@ -17,6 +18,20 @@ public class Util { return result; } } + + public static T get(Iterable iterable, int i) { + if (iterable instanceof List) { + List l = (List) iterable; + return l.get(i); + } else { + Iterator iter = iterable.iterator(); + T result = iter.next(); + for (int j=0; j boolean contains(Iterable ts, T t) { if (ts instanceof Collection) {