diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/ManeuverRetrievalProcessor.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/ManeuverRetrievalProcessor.java index c11ab0f524e..2f012425313 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/ManeuverRetrievalProcessor.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/ManeuverRetrievalProcessor.java @@ -2,7 +2,6 @@ package com.sap.sailing.datamining.impl.components; import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.concurrent.ExecutorService; import com.sap.sailing.datamining.data.HasManeuverContext; @@ -26,7 +25,7 @@ public class ManeuverRetrievalProcessor extends AbstractRetrievalProcessor maneuvers = element.getTrackedLegOfCompetitor().getManeuvers(finishTime, false); + Iterable maneuvers = element.getTrackedLegOfCompetitor().getManeuvers(finishTime, false); for (Maneuver maneuver : maneuvers) { maneuversWithContext.add(new ManeuverWithContext(element, maneuver)); } diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/MarkPassingRetrievalProcessor.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/MarkPassingRetrievalProcessor.java index 8b178c44678..5f1b685ab4a 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/MarkPassingRetrievalProcessor.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/components/MarkPassingRetrievalProcessor.java @@ -2,7 +2,6 @@ package com.sap.sailing.datamining.impl.components; import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.concurrent.ExecutorService; import com.sap.sailing.datamining.data.HasMarkPassingContext; @@ -29,7 +28,7 @@ public class MarkPassingRetrievalProcessor extends AbstractRetrievalProcessor maneuvers = element.getTrackedLegOfCompetitor().getManeuvers(finishTime, false); + Iterable maneuvers = element.getTrackedLegOfCompetitor().getManeuvers(finishTime, false); for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.MARK_PASSING) { maneuversWithContext.add(new MarkPassingWithContext(element, (MarkPassingManeuver) maneuver)); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/AbstractManeuverDetectionTestCase.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/AbstractManeuverDetectionTestCase.java index 08ade4a6031..78310bc4a74 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/AbstractManeuverDetectionTestCase.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/AbstractManeuverDetectionTestCase.java @@ -41,7 +41,7 @@ public abstract class AbstractManeuverDetectionTestCase extends OnlineTracTracBa * @param toleranceInMillis * The tolerance of time, the maneuver should have happened in milliseconds. */ - protected void assertManeuver(List maneuverList, ManeuverType maneuverType, + protected void assertManeuver(Iterable maneuverList, ManeuverType maneuverType, TimePoint maneuverTimePoint, int toleranceInMillis) { for (Maneuver maneuver : maneuverList) { assertNotNull(maneuver.getTimePoint()); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysis505Test.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysis505Test.java index d52fc48641d..e8f02584d55 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysis505Test.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysis505Test.java @@ -27,6 +27,7 @@ import com.sap.sailing.domain.common.impl.WindImpl; import com.sap.sailing.domain.common.impl.WindSourceImpl; import com.sap.sailing.domain.tracking.Maneuver; import com.sap.sailing.domain.tractracadapter.ReceiverType; +import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.tractrac.model.lib.api.event.CreateModelException; import com.tractrac.subscription.lib.api.SubscriberInitializationException; @@ -62,9 +63,10 @@ public class ManeuverAnalysis505Test extends AbstractManeuverDetectionTestCase { Date toDate = dateFormat.parse("06/23/2011-15:29:50"); assertNotNull(fromDate); assertNotNull(toDate); - List maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), + Iterable maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), new MillisecondsTimePoint(toDate), /* waitForLatest */ true); - maneuversInvalid = new ArrayList(maneuvers); + maneuversInvalid = new ArrayList(); + Util.addAll(maneuvers, maneuversInvalid); assertManeuver(maneuvers, ManeuverType.TACK, new MillisecondsTimePoint(dateFormat.parse("06/23/2011-15:28:24")), TACK_TOLERANCE); @@ -85,9 +87,10 @@ public class ManeuverAnalysis505Test extends AbstractManeuverDetectionTestCase { Date toDate = dateFormat.parse("06/23/2011-16:38:01"); assertNotNull(fromDate); assertNotNull(toDate); - List maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), + Iterable maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), new MillisecondsTimePoint(toDate), /* waitForLatest */ true); - maneuversInvalid = new ArrayList(maneuvers); + maneuversInvalid = new ArrayList(); + Util.addAll(maneuvers, maneuversInvalid); assertManeuver(maneuvers, ManeuverType.TACK, new MillisecondsTimePoint(dateFormat.parse("06/23/2011-15:28:24")), TACK_TOLERANCE); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysisIDMChampionsFinalTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysisIDMChampionsFinalTest.java index 62053e43c6d..e758bcfb0f4 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysisIDMChampionsFinalTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysisIDMChampionsFinalTest.java @@ -38,6 +38,7 @@ import com.sap.sailing.domain.tracking.Maneuver; import com.sap.sailing.domain.tracking.impl.TrackedLegImpl; import com.sap.sailing.domain.tractracadapter.ReceiverType; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.tractrac.model.lib.api.event.CreateModelException; import com.tractrac.subscription.lib.api.SubscriberInitializationException; @@ -100,9 +101,10 @@ public class ManeuverAnalysisIDMChampionsFinalTest extends AbstractManeuverDetec Date fromDate = new Date(toDate.getTime()-450000l); final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); TimePoint maneuverTime = new MillisecondsTimePoint(dateFormatter.parse("2011-10-03T15:52:30.000+0200")); - List maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), + Iterable maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), new MillisecondsTimePoint(toDate), /* waitForLatest */ true); - maneuversInvalid = new ArrayList(maneuvers); + maneuversInvalid = new ArrayList(); + Util.addAll(maneuvers, maneuversInvalid); assertManeuver(maneuvers, ManeuverType.PENALTY_CIRCLE, maneuverTime, PENALTYCIRCLE_TOLERANCE); List maneuverTypesFound = new ArrayList(); maneuverTypesFound.add(ManeuverType.PENALTY_CIRCLE); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysisQingdao2014Test.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysisQingdao2014Test.java index 51a51493063..37ea5e4e4c5 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysisQingdao2014Test.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverAnalysisQingdao2014Test.java @@ -12,7 +12,6 @@ import java.net.URL; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; -import java.util.List; import org.junit.Before; import org.junit.Test; @@ -27,6 +26,7 @@ import com.sap.sailing.domain.common.impl.WindImpl; import com.sap.sailing.domain.common.impl.WindSourceImpl; import com.sap.sailing.domain.tracking.Maneuver; import com.sap.sailing.domain.tractracadapter.ReceiverType; +import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.tractrac.model.lib.api.event.CreateModelException; import com.tractrac.subscription.lib.api.SubscriberInitializationException; @@ -68,9 +68,10 @@ public class ManeuverAnalysisQingdao2014Test extends AbstractManeuverDetectionTe Date toDate = dateFormat.parse("05/01/2014-09:10:00"); assertNotNull(fromDate); assertNotNull(toDate); - List maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), + Iterable maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), new MillisecondsTimePoint(toDate), /* waitForLatest */ true); - maneuversInvalid = new ArrayList(maneuvers); + maneuversInvalid = new ArrayList(); + Util.addAll(maneuvers, maneuversInvalid); assertManeuver(maneuvers, ManeuverType.JIBE, new MillisecondsTimePoint(dateFormat.parse("05/01/2014-09:08:15")), 5000); assertManeuver(maneuvers, ManeuverType.TACK, new MillisecondsTimePoint(dateFormat.parse("05/01/2014-09:08:51")), 5000); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnKielerWoche505Race2DataTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnKielerWoche505Race2DataTest.java index 8053a8ab7b9..68caa7b3e68 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnKielerWoche505Race2DataTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnKielerWoche505Race2DataTest.java @@ -87,7 +87,7 @@ public class ManeuverDetectionOnKielerWoche505Race2DataTest extends OnlineTracTr public void testManeuversForHasso() throws NoWindException { Competitor hasso = getCompetitorByName("Dr.Plattner"); NavigableSet hassosMarkPassings = getTrackedRace().getMarkPassings(hasso); - List maneuvers = getTrackedRace().getManeuvers(hasso, hassosMarkPassings.first().getTimePoint(), + Iterable maneuvers = getTrackedRace().getManeuvers(hasso, hassosMarkPassings.first().getTimePoint(), hassosMarkPassings.last().getTimePoint(), /* waitForLatest */ true); Calendar c = new GregorianCalendar(TimeZone.getTimeZone("Europe/Berlin")); c.clear(); @@ -105,7 +105,7 @@ public class ManeuverDetectionOnKielerWoche505Race2DataTest extends OnlineTracTr assertManeuver(maneuvers, ManeuverType.JIBE, Tack.PORT, new MillisecondsTimePoint(c.getTime()), /* tolerance in milliseconds */ 3000); } - private void assertManeuver(List maneuvers, ManeuverType type, Tack newTack, + private void assertManeuver(Iterable maneuvers, ManeuverType type, Tack newTack, MillisecondsTimePoint timePoint, int toleranceInMilliseconds) { for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == type && (newTack == null || newTack == maneuver.getNewTack()) && diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnMdM2011SemifinalTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnMdM2011SemifinalTest.java index e5603916460..9715f1dd631 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnMdM2011SemifinalTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/ManeuverDetectionOnMdM2011SemifinalTest.java @@ -9,7 +9,6 @@ import java.text.ParseException; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.NavigableSet; import java.util.TimeZone; @@ -77,7 +76,7 @@ public class ManeuverDetectionOnMdM2011SemifinalTest extends OnlineTracTracBased public void testManeuversForDennis() throws NoWindException { Competitor dennis = getCompetitorByName("Gehrlein"); NavigableSet dennisMarkPassings = getTrackedRace().getMarkPassings(dennis); - List maneuvers = getTrackedRace().getManeuvers(dennis, dennisMarkPassings.first().getTimePoint(), + Iterable maneuvers = getTrackedRace().getManeuvers(dennis, dennisMarkPassings.first().getTimePoint(), dennisMarkPassings.last().getTimePoint(), /* waitForLatest */ true); Calendar c = new GregorianCalendar(TimeZone.getTimeZone("Europe/Berlin")); c.set(2011, 10-1, 30, 13, 32, 42); @@ -96,7 +95,7 @@ public class ManeuverDetectionOnMdM2011SemifinalTest extends OnlineTracTracBased assertManeuver(maneuvers, ManeuverType.JIBE, Tack.STARBOARD, new MillisecondsTimePoint(c.getTime()), /* tolerance in milliseconds */ 3000); } - private void assertManeuver(List maneuvers, ManeuverType type, Tack newTack, + private void assertManeuver(Iterable maneuvers, ManeuverType type, Tack newTack, MillisecondsTimePoint timePoint, int toleranceInMilliseconds) { for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == type && (newTack == null || newTack == maneuver.getNewTack()) && diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/PhilippBuhlsDoublePenaltyCircleAtKielerWoche2014Test.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/PhilippBuhlsDoublePenaltyCircleAtKielerWoche2014Test.java index 1f56074ffac..f8ad9387227 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/PhilippBuhlsDoublePenaltyCircleAtKielerWoche2014Test.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/PhilippBuhlsDoublePenaltyCircleAtKielerWoche2014Test.java @@ -13,7 +13,6 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.Collections; import java.util.Date; -import java.util.List; import org.junit.Before; import org.junit.Test; @@ -28,6 +27,7 @@ import com.sap.sailing.domain.common.impl.WindImpl; import com.sap.sailing.domain.common.impl.WindSourceImpl; import com.sap.sailing.domain.tracking.Maneuver; import com.sap.sailing.domain.tractracadapter.ReceiverType; +import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.tractrac.model.lib.api.event.CreateModelException; import com.tractrac.subscription.lib.api.SubscriberInitializationException; @@ -83,9 +83,10 @@ public class PhilippBuhlsDoublePenaltyCircleAtKielerWoche2014Test extends Abstra assertNotNull(fromDate); assertNotNull(toDate); assertNotNull(competitor); - List maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), + Iterable maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), new MillisecondsTimePoint(toDate), /* waitForLatest */ true); - maneuversInvalid = new ArrayList(maneuvers); + maneuversInvalid = new ArrayList(); + Util.addAll(maneuvers, maneuversInvalid); for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.PENALTY_CIRCLE) { assertTrue(Math.abs(maneuver.getDirectionChangeInDegrees()) < 700); // the second penalty has to count for its own diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TackThatLookedABitLikePenaltyCircleAtTravemuenderWoche2014Test.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TackThatLookedABitLikePenaltyCircleAtTravemuenderWoche2014Test.java index e1c6da8405a..81d6938d63e 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TackThatLookedABitLikePenaltyCircleAtTravemuenderWoche2014Test.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/TackThatLookedABitLikePenaltyCircleAtTravemuenderWoche2014Test.java @@ -13,7 +13,6 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.Collections; import java.util.Date; -import java.util.List; import org.junit.Before; import org.junit.Test; @@ -28,6 +27,7 @@ import com.sap.sailing.domain.common.impl.WindImpl; import com.sap.sailing.domain.common.impl.WindSourceImpl; import com.sap.sailing.domain.tracking.Maneuver; import com.sap.sailing.domain.tractracadapter.ReceiverType; +import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.tractrac.model.lib.api.event.CreateModelException; import com.tractrac.subscription.lib.api.SubscriberInitializationException; @@ -80,9 +80,10 @@ public class TackThatLookedABitLikePenaltyCircleAtTravemuenderWoche2014Test exte assertNotNull(fromDate); assertNotNull(toDate); assertNotNull(competitor); - List maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), + Iterable maneuvers = getTrackedRace().getManeuvers(competitor, new MillisecondsTimePoint(fromDate), new MillisecondsTimePoint(toDate), /* waitForLatest */ true); - maneuversInvalid = new ArrayList(maneuvers); + maneuversInvalid = new ArrayList(); + Util.addAll(maneuvers, maneuversInvalid); for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.TACK) { assertTrue(Math.abs(maneuver.getDirectionChangeInDegrees()) < 700); // the second penalty has to count for its own diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java index bb4298e6ecd..71f2eddc302 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java @@ -645,7 +645,7 @@ public class MockedTrackedRace implements DynamicTrackedRace { } @Override - public List getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) { + public Iterable getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) { return null; } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java index ecb3dab6078..9fb5a29a017 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithStartTimeAndRanks.java @@ -333,7 +333,7 @@ public class MockedTrackedRaceWithStartTimeAndRanks implements TrackedRace { } @Override - public List getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) { + public Iterable getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) { return null; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java index 8d363628303..d24c4c15781 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java @@ -1814,7 +1814,7 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race if (startOfRace != null && trackedLeg.hasStartedLeg(timePoint)) { // not using trackedLeg.getManeuvers(...) because it may not catch the mark passing maneuver starting this leg // because that may have been detected as slightly before the mark passing time, hence associated with the previous leg - List maneuvers = trackedLeg.getTrackedLeg().getTrackedRace() + Iterable maneuvers = trackedLeg.getTrackedLeg().getTrackedRace() .getManeuvers(trackedLeg.getCompetitor(), startOfRace, timePoint, waitForLatestAnalyses); if (maneuvers != null) { result.numberOfManeuvers = new HashMap(); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java index dc47af1cce1..d46f0dbd25c 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedLegOfCompetitor.java @@ -1,7 +1,6 @@ package com.sap.sailing.domain.tracking; import java.io.Serializable; -import java.util.List; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Leg; @@ -117,7 +116,7 @@ public interface TrackedLegOfCompetitor extends Serializable { * may be part of the respective adjacent leg, depending on the maneuver's time point which may be slightly before, at, or * after the corresponding mark passing event. */ - List getManeuvers(TimePoint timePoint, boolean waitForLatest) throws NoWindException; + Iterable getManeuvers(TimePoint timePoint, boolean waitForLatest) throws NoWindException; /** * @param waitForLatest TODO diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java index a456b3f8d49..ba1a93e755d 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRace.java @@ -562,7 +562,7 @@ public interface TrackedRace extends Serializable, IsManagedByCachewaitForLatest==false) or, if a re-calculation * for the key is still ongoing, the result of that ongoing re-calculation is returned. */ - List getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest); + Iterable getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest); /** * @return true if this race is known to start with an {@link LegType#UPWIND upwind} leg. If this is diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java index b2258f4d2f8..5cba23df87e 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java @@ -369,7 +369,7 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor { public Integer getNumberOfTacks(TimePoint timePoint, boolean waitForLatest) throws NoWindException { Integer result = null; if (hasStartedLeg(timePoint)) { - List maneuvers = getManeuvers(timePoint, waitForLatest); + Iterable maneuvers = getManeuvers(timePoint, waitForLatest); result = 0; for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.TACK) { @@ -381,14 +381,14 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor { } @Override - public List getManeuvers(TimePoint timePoint, boolean waitForLatest) throws NoWindException { + public Iterable getManeuvers(TimePoint timePoint, boolean waitForLatest) throws NoWindException { MarkPassing legEnd = getMarkPassingForLegEnd(); TimePoint end = timePoint; if (legEnd != null && timePoint.compareTo(legEnd.getTimePoint()) > 0) { // timePoint is after leg finish; take leg end and end time point end = legEnd.getTimePoint(); } - List maneuvers = getTrackedRace().getManeuvers(getCompetitor(), + Iterable maneuvers = getTrackedRace().getManeuvers(getCompetitor(), getMarkPassingForLegStart().getTimePoint(), end, waitForLatest); return maneuvers; } @@ -397,7 +397,7 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor { public Integer getNumberOfJibes(TimePoint timePoint, boolean waitForLatest) throws NoWindException { Integer result = null; if (hasStartedLeg(timePoint)) { - List maneuvers = getManeuvers(timePoint, waitForLatest); + Iterable maneuvers = getManeuvers(timePoint, waitForLatest); result = 0; for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.JIBE) { @@ -412,7 +412,7 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor { public Integer getNumberOfPenaltyCircles(TimePoint timePoint, boolean waitForLatest) throws NoWindException { Integer result = null; if (hasStartedLeg(timePoint)) { - List maneuvers = getManeuvers(timePoint, waitForLatest); + Iterable maneuvers = getManeuvers(timePoint, waitForLatest); result = 0; for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.PENALTY_CIRCLE) { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index 8f1cf87f9f9..659d9eb2942 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -2840,7 +2840,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl * competitor, reduced to the interval requested, will be returned. */ @Override - public List getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) { + public Iterable getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) { com.sap.sse.common.Util.Triple> allManeuvers = maneuverCache.get(competitor, waitForLatest); List result; if (allManeuvers == null) { diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java index a97e253a59a..c81115d8799 100644 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/MockedTrackedRace.java @@ -378,7 +378,7 @@ public class MockedTrackedRace implements DynamicTrackedRace { } @Override - public List getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) { + public Iterable getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) { return null; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 38aa9a36f42..5303006a12f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -3185,7 +3185,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public Map> getManeuvers(RegattaAndRaceIdentifier raceIdentifier, Map from, Map to) throws NoWindException { - Map> result = new HashMap>(); + Map> result = new HashMap<>(); final TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier); if (trackedRace != null) { Map>> futures = new HashMap>>(); @@ -3198,8 +3198,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S new Callable>() { @Override public List call() { - List maneuversForCompetitor; - maneuversForCompetitor = trackedRace.getManeuvers(competitor, timePointFrom, + final Iterable maneuversForCompetitor = trackedRace.getManeuvers(competitor, timePointFrom, timePointTo, /* waitForLatest */ true); return createManeuverDTOsForCompetitor(maneuversForCompetitor, trackedRace, competitor); } @@ -3221,7 +3220,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S return result; } - private List createManeuverDTOsForCompetitor(List maneuvers, TrackedRace trackedRace, Competitor competitor) { + private List createManeuverDTOsForCompetitor(Iterable maneuvers, TrackedRace trackedRace, Competitor competitor) { List result = new ArrayList(); for (Maneuver maneuver : maneuvers) { final ManeuverDTO maneuverDTO; diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/AbstractTrackedRaceDataJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/AbstractTrackedRaceDataJsonSerializer.java new file mode 100755 index 00000000000..0736d16a858 --- /dev/null +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/AbstractTrackedRaceDataJsonSerializer.java @@ -0,0 +1,13 @@ +package com.sap.sailing.server.gateway.serialization.impl; + +import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.server.gateway.serialization.JsonSerializer; + +public abstract class AbstractTrackedRaceDataJsonSerializer implements JsonSerializer{ + + public static final String TIMEASISO = "timeasiso"; + public static final String TIMEASMILLIS = "timeasmillis"; + public static final String COMPETITOR = "competitor"; + public static final String BYCOMPETITOR = "bycompetitor"; + +} diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/DefaultWindTrackJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/DefaultWindTrackJsonSerializer.java similarity index 97% rename from java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/DefaultWindTrackJsonSerializer.java rename to java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/DefaultWindTrackJsonSerializer.java index 2a8440b3aee..89831252202 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/DefaultWindTrackJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/DefaultWindTrackJsonSerializer.java @@ -1,4 +1,4 @@ -package com.sap.sailing.server.gateway.jaxrs.api; +package com.sap.sailing.server.gateway.serialization.impl; import java.util.ArrayList; import java.util.Iterator; @@ -9,8 +9,8 @@ import org.json.simple.JSONObject; import com.sap.sailing.domain.common.Wind; import com.sap.sailing.domain.common.WindSource; import com.sap.sailing.domain.tracking.WindTrack; -import com.sap.sailing.server.gateway.jaxrs.RoundingUtil; import com.sap.sse.common.TimePoint; +import com.sap.sse.common.util.RoundingUtil; public class DefaultWindTrackJsonSerializer implements WindTrackJsonSerializer { public static final String FIELD_ID = "id"; diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/DistanceJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/DistanceJsonSerializer.java similarity index 95% rename from java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/DistanceJsonSerializer.java rename to java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/DistanceJsonSerializer.java index c60f7b7ff36..057670efba5 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/DistanceJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/DistanceJsonSerializer.java @@ -1,4 +1,4 @@ -package com.sap.sailing.server.gateway.jaxrs.api; +package com.sap.sailing.server.gateway.serialization.impl; import org.json.simple.JSONObject; diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventRaceStatesSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/EventRaceStatesSerializer.java similarity index 98% rename from java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventRaceStatesSerializer.java rename to java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/EventRaceStatesSerializer.java index 7786cd92f83..7133b5d3d95 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventRaceStatesSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/EventRaceStatesSerializer.java @@ -1,4 +1,4 @@ -package com.sap.sailing.server.gateway.jaxrs.api; +package com.sap.sailing.server.gateway.serialization.impl; import java.util.Calendar; import java.util.Date; diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/ManeuverJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/ManeuverJsonSerializer.java new file mode 100755 index 00000000000..ed71f6e5389 --- /dev/null +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/ManeuverJsonSerializer.java @@ -0,0 +1,42 @@ +package com.sap.sailing.server.gateway.serialization.impl; + +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.tracking.Maneuver; +import com.sap.sailing.server.gateway.serialization.JsonSerializer; + +public class ManeuverJsonSerializer implements JsonSerializer { + public static final String MANEUVER_TYPE = "maneuverType"; + public static final String NEW_TACK = "newTack"; + public static final String SPEED_BEFORE_IN_KNOTS = "speedBeforeInKnots"; + public static final String COG_BEFORE_IN_TRUE_DEGREES = "cogBeforeInTrueDegrees"; + public static final String SPEED_AFTER_IN_KNOTS = "speedAfterInKnots"; + public static final String COG_AFTER_IN_TRUE_DEGREES = "cogAfterInTrueDegrees"; + public static final String DIRECTION_CHANGE_IN_DEGREES = "directionChangeInDegrees"; + public static final String MANEUVER_LOSS = "maneuverLoss"; + public static final String POSITION_AND_TIME = "positionAndTime"; + + private final GPSFixJsonSerializer gpsFixSerializer; + private final DistanceJsonSerializer distanceSerializer; + + public ManeuverJsonSerializer(GPSFixJsonSerializer gpsFixSerializer, DistanceJsonSerializer distanceSerializer) { + super(); + this.gpsFixSerializer = gpsFixSerializer; + this.distanceSerializer = distanceSerializer; + } + + @Override + public JSONObject serialize(Maneuver maneuver) { + final JSONObject result = new JSONObject(); + result.put(MANEUVER_TYPE, maneuver.getType()==null?null:maneuver.getType().name()); + result.put(NEW_TACK, maneuver.getNewTack()==null?null:maneuver.getNewTack().name()); + result.put(SPEED_BEFORE_IN_KNOTS, maneuver.getSpeedWithBearingBefore()==null?null:maneuver.getSpeedWithBearingBefore().getKnots()); + result.put(COG_BEFORE_IN_TRUE_DEGREES, maneuver.getSpeedWithBearingBefore()==null?null:maneuver.getSpeedWithBearingBefore().getBearing().getDegrees()); + result.put(SPEED_AFTER_IN_KNOTS, maneuver.getSpeedWithBearingAfter()==null?null:maneuver.getSpeedWithBearingAfter().getKnots()); + result.put(COG_AFTER_IN_TRUE_DEGREES, maneuver.getSpeedWithBearingAfter()==null?null:maneuver.getSpeedWithBearingAfter().getBearing().getDegrees()); + result.put(DIRECTION_CHANGE_IN_DEGREES, maneuver.getDirectionChangeInDegrees()); + result.put(MANEUVER_LOSS, maneuver.getManeuverLoss()==null?null:distanceSerializer.serialize(maneuver.getManeuverLoss())); + result.put(POSITION_AND_TIME, gpsFixSerializer.serialize(maneuver)); + return result; + } +} diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/ManeuversJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/ManeuversJsonSerializer.java new file mode 100755 index 00000000000..2a2ee0331e3 --- /dev/null +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/ManeuversJsonSerializer.java @@ -0,0 +1,59 @@ +package com.sap.sailing.server.gateway.serialization.impl; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.tracking.Maneuver; +import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sse.common.TimePoint; +import com.sap.sse.common.impl.MillisecondsTimePoint; + +public class ManeuversJsonSerializer extends AbstractTrackedRaceDataJsonSerializer { + public final static String MANEUVERS = "maneuvers"; + + private final CompetitorJsonSerializer competitorSerializer; + private final ManeuverJsonSerializer maneuverSerializer; + + public ManeuversJsonSerializer(CompetitorJsonSerializer competitorSerializer, ManeuverJsonSerializer maneuverSerializer) { + super(); + this.competitorSerializer = competitorSerializer; + this.maneuverSerializer = maneuverSerializer; + } + + @Override + public JSONObject serialize(TrackedRace trackedRace) { + final JSONObject result = new JSONObject(); + JSONArray byCompetitorJson = new JSONArray(); + result.put(BYCOMPETITOR, byCompetitorJson); + for (Competitor competitor : trackedRace.getRace().getCompetitors()) { + final JSONObject forCompetitorJson = new JSONObject(); + byCompetitorJson.add(forCompetitorJson); + forCompetitorJson.put(COMPETITOR, competitorSerializer.serialize(competitor)); + final JSONArray maneuvers = new JSONArray(); + forCompetitorJson.put(MANEUVERS, maneuvers); + for (final Maneuver maneuver : getManeuversDuringRace(trackedRace, competitor)) { + maneuvers.add(maneuverSerializer.serialize(maneuver)); + } + } + return result; + } + + private Iterable getManeuversDuringRace(TrackedRace trackedRace, Competitor competitor) { + final TimePoint startTime = trackedRace.getStartOfRace(); + final TimePoint endOfRace = trackedRace.getEndOfRace(); + final TimePoint endTime; + if (endOfRace != null) { + endTime = endOfRace; + } else { + final TimePoint endOfTracking = trackedRace.getEndOfTracking(); + if (endOfTracking == null || endOfTracking.after(MillisecondsTimePoint.now())) { + endTime = MillisecondsTimePoint.now(); + } else { + endTime = endOfTracking; + } + } + return trackedRace.getManeuvers(competitor, startTime, endTime, /* waitForLatest */ true); + } + +} diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/MarkPassingsJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/MarkPassingsJsonSerializer.java similarity index 71% rename from java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/MarkPassingsJsonSerializer.java rename to java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/MarkPassingsJsonSerializer.java index 9bd5fb04f0b..97ba39bbae6 100755 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/MarkPassingsJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/MarkPassingsJsonSerializer.java @@ -1,4 +1,4 @@ -package com.sap.sailing.server.gateway.jaxrs.api; +package com.sap.sailing.server.gateway.serialization.impl; import java.text.SimpleDateFormat; import java.util.NavigableSet; @@ -11,11 +11,12 @@ import com.sap.sailing.domain.base.Course; import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.tracking.MarkPassing; import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.server.gateway.serialization.JsonSerializer; -import com.sap.sailing.server.gateway.serialization.impl.BoatJsonSerializer; -import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer; -public class MarkPassingsJsonSerializer implements JsonSerializer { +public class MarkPassingsJsonSerializer extends AbstractTrackedRaceDataJsonSerializer { + public static final String ZERO_BASED_WAYPOINT_INDEX = "zeroBasedWaypointIndex"; + public static final String WAYPOINT_NAME = "waypointName"; + public static final String BYWAYPOINT = "bywaypoint"; + public static final String MARKPASSINGS = "markpassings"; private static SimpleDateFormat TIMEPOINT_FORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); @Override @@ -24,14 +25,14 @@ public class MarkPassingsJsonSerializer implements JsonSerializer { JSONObject result = new JSONObject(); CompetitorJsonSerializer competitorSerializer = new CompetitorJsonSerializer(null, BoatJsonSerializer.create()); JSONArray byCompetitorJson = new JSONArray(); - result.put("bycompetitor", byCompetitorJson); + result.put(BYCOMPETITOR, byCompetitorJson); for (Competitor competitor : trackedRace.getRace().getCompetitors()) { JSONObject forCompetitorJson = new JSONObject(); byCompetitorJson.add(forCompetitorJson); - forCompetitorJson.put("competitor", competitorSerializer.serialize(competitor)); + forCompetitorJson.put(COMPETITOR, competitorSerializer.serialize(competitor)); final NavigableSet markPassingsForCompetitor = trackedRace.getMarkPassings(competitor); JSONArray markPassingsForCompetitorJson = new JSONArray(); - forCompetitorJson.put("markpassings", markPassingsForCompetitorJson); + forCompetitorJson.put(MARKPASSINGS, markPassingsForCompetitorJson); trackedRace.lockForRead(markPassingsForCompetitor); try { for (MarkPassing markPassing : markPassingsForCompetitor) { @@ -45,7 +46,7 @@ public class MarkPassingsJsonSerializer implements JsonSerializer { } } JSONArray byWaypointJson = new JSONArray(); - result.put("bywaypoint", byWaypointJson); + result.put(BYWAYPOINT, byWaypointJson); for (Waypoint waypoint : course.getWaypoints()) { JSONObject jsonForWaypoint = new JSONObject(); byWaypointJson.add(jsonForWaypoint); @@ -54,11 +55,11 @@ public class MarkPassingsJsonSerializer implements JsonSerializer { trackedRace.lockForRead(markPassingsForWaypoint); try { JSONArray markPassingsForWaypointJson = new JSONArray(); - jsonForWaypoint.put("markpassings", markPassingsForWaypointJson); + jsonForWaypoint.put(MARKPASSINGS, markPassingsForWaypointJson); for (MarkPassing markPassing : markPassingsForWaypoint) { JSONObject markPassingJson = new JSONObject(); markPassingsForWaypointJson.add(markPassingJson); - markPassingJson.put("competitor", competitorSerializer.serialize(markPassing.getCompetitor())); + markPassingJson.put(COMPETITOR, competitorSerializer.serialize(markPassing.getCompetitor())); addMarkPassingTime(markPassing, markPassingJson); } } finally { @@ -69,12 +70,12 @@ public class MarkPassingsJsonSerializer implements JsonSerializer { } private void addMarkPassingTime(MarkPassing markPassing, JSONObject markPassingJson) { - markPassingJson.put("timeasmillis", markPassing.getTimePoint().asMillis()); - markPassingJson.put("timeasiso", TIMEPOINT_FORMATTER.format(markPassing.getTimePoint().asDate())); + markPassingJson.put(TIMEASMILLIS, markPassing.getTimePoint().asMillis()); + markPassingJson.put(TIMEASISO, TIMEPOINT_FORMATTER.format(markPassing.getTimePoint().asDate())); } private void addWaypoint(final Course course, Waypoint waypoint, JSONObject jsonToAddTo) { - jsonToAddTo.put("waypointName", waypoint.getName()); - jsonToAddTo.put("zeroBasedWaypointIndex", course.getIndexOfWaypoint(waypoint)); + jsonToAddTo.put(WAYPOINT_NAME, waypoint.getName()); + jsonToAddTo.put(ZERO_BASED_WAYPOINT_INDEX, course.getIndexOfWaypoint(waypoint)); } } diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RaceStateSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/RaceStateSerializer.java similarity index 98% rename from java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RaceStateSerializer.java rename to java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/RaceStateSerializer.java index 6395c77e30e..5ad592fbc2b 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RaceStateSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/RaceStateSerializer.java @@ -1,4 +1,4 @@ -package com.sap.sailing.server.gateway.jaxrs.api; +package com.sap.sailing.server.gateway.serialization.impl; import java.util.Calendar; diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/TrackedRaceJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/TrackedRaceJsonSerializer.java index 4aabbbd6629..36671083912 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/TrackedRaceJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/TrackedRaceJsonSerializer.java @@ -1,21 +1,101 @@ package com.sap.sailing.server.gateway.serialization.impl; +import java.util.ArrayList; +import java.util.List; + +import org.json.simple.JSONArray; import org.json.simple.JSONObject; +import com.sap.sailing.domain.common.WindSource; +import com.sap.sailing.domain.common.WindSourceType; +import com.sap.sailing.domain.common.impl.WindSourceImpl; import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.domain.tracking.WindTrack; import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sse.common.TimePoint; public class TrackedRaceJsonSerializer implements JsonSerializer { + public static final String FIELD_ID = "id"; public static final String FIELD_NAME = "name"; - public static final String FIELD_START_TIME = "startTime"; + public static final String FIELD_REGATTA = "regatta"; + public static final String FIELD_WINDSOURCES = "windSources"; - @Override - public JSONObject serialize(TrackedRace trackedRace) { - JSONObject result = new JSONObject(); - result.put("name", trackedRace.getRace().getName()); - TimePoint startTime = trackedRace.getStartOfRace(); - result.put(FIELD_START_TIME, startTime == null ? Long.MAX_VALUE : startTime.asMillis()); - return result; + public static final String ALL_WINDSOURCES = "ALL"; + + private String windSourceToSerialize; + private String windSourceIdToSerialize; + private TimePoint fromTime; + private TimePoint toTime; + private final WindTrackJsonSerializer windTrackSerializer; + + public TrackedRaceJsonSerializer(WindTrackJsonSerializer windTrackSerializer) { + this.windTrackSerializer = windTrackSerializer; + windSourceToSerialize = WindSourceType.COMBINED.name(); } -} + + public JSONObject serialize(TrackedRace trackedRace) { + JSONObject jsonRace = new JSONObject(); + + jsonRace.put(FIELD_NAME, trackedRace.getRace().getName()); + jsonRace.put(FIELD_REGATTA, trackedRace.getRaceIdentifier().getRegattaName()); + + if(windTrackSerializer != null) { + JSONArray windTracks = new JSONArray(); + + List windSources = getAvailableWindSources(trackedRace); + JSONArray jsonWindSourcesDisplayed = new JSONArray(); + for (WindSource windSource : windSources) { + JSONObject windSourceInformation = new JSONObject(); + windSourceInformation.put("typeName", windSource.getType().name()); + windSourceInformation.put("id", windSource.getId() != null ? windSource.getId().toString() : ""); + jsonWindSourcesDisplayed.add(windSourceInformation); + } + jsonRace.put("availableWindSources", jsonWindSourcesDisplayed); + for (WindSource windSource : windSources) { + if (ALL_WINDSOURCES.equals(windSourceToSerialize) || windSource.getType().name().equalsIgnoreCase(windSourceToSerialize)) { + if (windSourceIdToSerialize != null && windSource.getId() != null && !windSource.getId().toString().equalsIgnoreCase(windSourceIdToSerialize)) { + continue; + } + windTrackSerializer.setFromTime(fromTime); + windTrackSerializer.setToTime(toTime); + windTrackSerializer.setWindSource(windSource); + + WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource); + JSONObject jsonWindTrack = windTrackSerializer.serialize(windTrack); + windTracks.add(jsonWindTrack); + } + } + jsonRace.put(FIELD_WINDSOURCES, windTracks); + } + + return jsonRace; + } + + public void setWindSource(String windSourceToSerialize) { + this.windSourceToSerialize = windSourceToSerialize; + } + + public void setFromTime(TimePoint fromTime) { + this.fromTime = fromTime; + } + + public void setToTime(TimePoint toTime) { + this.toTime = toTime; + } + + private List getAvailableWindSources(TrackedRace trackedRace) { + List windSources = new ArrayList(); + for (WindSource windSource : trackedRace.getWindSources()) { + windSources.add(windSource); + } + for (WindSource windSourceToExclude : trackedRace.getWindSourcesToExclude()) { + windSources.remove(windSourceToExclude); + } + windSources.add(new WindSourceImpl(WindSourceType.COMBINED)); + return windSources; + } + + public void setWindSourceId(String windSourceId) { + this.windSourceIdToSerialize = windSourceId; + } +} \ No newline at end of file diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/WindTrackJsonSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/WindTrackJsonSerializer.java similarity index 87% rename from java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/WindTrackJsonSerializer.java rename to java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/WindTrackJsonSerializer.java index b87aadc1cea..f4b7cf0b4a3 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/WindTrackJsonSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/impl/WindTrackJsonSerializer.java @@ -1,4 +1,4 @@ -package com.sap.sailing.server.gateway.jaxrs.api; +package com.sap.sailing.server.gateway.serialization.impl; import com.sap.sailing.domain.common.WindSource; import com.sap.sailing.domain.tracking.WindTrack; diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java index 6d349818588..fae700c942c 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java @@ -22,6 +22,7 @@ import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource; import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.EventRaceStatesSerializer; import com.sap.sailing.server.gateway.serialization.impl.LeaderboardGroupBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer; import com.sap.sse.common.Duration; diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java index 73b49c30cb6..4a04072a27b 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java @@ -49,19 +49,25 @@ import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.WindPositionMode; import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource; -import com.sap.sailing.server.gateway.jaxrs.RoundingUtil; import com.sap.sailing.server.gateway.serialization.JsonSerializer; import com.sap.sailing.server.gateway.serialization.coursedata.impl.ControlPointJsonSerializer; import com.sap.sailing.server.gateway.serialization.coursedata.impl.CourseBaseJsonSerializer; import com.sap.sailing.server.gateway.serialization.coursedata.impl.GateJsonSerializer; import com.sap.sailing.server.gateway.serialization.coursedata.impl.MarkJsonSerializer; import com.sap.sailing.server.gateway.serialization.coursedata.impl.WaypointJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.AbstractTrackedRaceDataJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.BoatClassJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.BoatJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.ColorJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.CompetitorWithChangingBoatJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.DefaultWindTrackJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.DistanceJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.FleetJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.GPSFixJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.ManeuverJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.ManeuversJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.MarkPassingsJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.NationalityJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.PersonJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.PositionJsonSerializer; @@ -70,12 +76,14 @@ import com.sap.sailing.server.gateway.serialization.impl.RegattaJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.SeriesJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.TargetTimeInfoSerializer; import com.sap.sailing.server.gateway.serialization.impl.TeamJsonSerializer; +import com.sap.sailing.server.gateway.serialization.impl.TrackedRaceJsonSerializer; import com.sap.sailing.server.gateway.serialization.impl.WindJsonSerializer; import com.sap.sse.InvalidDateException; import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; import com.sap.sse.common.impl.MillisecondsTimePoint; +import com.sap.sse.common.util.RoundingUtil; import com.sap.sse.datamining.shared.impl.PredefinedQueryIdentifier; @Path("/v1/regattas") @@ -827,7 +835,7 @@ public class RegattasResource extends AbstractSailingServerResource { .build(); } else { TrackedRace trackedRace = findTrackedRace(regattaName, raceName); - MarkPassingsJsonSerializer serializer = new MarkPassingsJsonSerializer(); + AbstractTrackedRaceDataJsonSerializer serializer = new MarkPassingsJsonSerializer(); JSONObject jsonMarkPassings = serializer.serialize(trackedRace); String json = jsonMarkPassings.toJSONString(); return Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build(); @@ -836,6 +844,34 @@ public class RegattasResource extends AbstractSailingServerResource { return response; } + @GET + @Produces("application/json;charset=UTF-8") + @Path("{regattaname}/races/{racename}/maneuvers") + public Response getManeuvers(@PathParam("regattaname") String regattaName, @PathParam("racename") String raceName) { + Response response; + Regatta regatta = findRegattaByName(regattaName); + if (regatta == null) { + response = Response.status(Status.NOT_FOUND) + .entity("Could not find a regatta with name '" + StringEscapeUtils.escapeHtml(regattaName) + "'.").type(MediaType.TEXT_PLAIN) + .build(); + } else { + RaceDefinition race = findRaceByName(regatta, raceName); + if (race == null) { + response = Response.status(Status.NOT_FOUND) + .entity("Could not find a race with name '" + StringEscapeUtils.escapeHtml(raceName) + "'.").type(MediaType.TEXT_PLAIN) + .build(); + } else { + TrackedRace trackedRace = findTrackedRace(regattaName, raceName); + ManeuversJsonSerializer serializer = new ManeuversJsonSerializer(new CompetitorJsonSerializer(), + new ManeuverJsonSerializer(new GPSFixJsonSerializer(), new DistanceJsonSerializer())); + JSONObject jsonMarkPassings = serializer.serialize(trackedRace); + String json = jsonMarkPassings.toJSONString(); + return Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build(); + } + } + return response; + } + @GET @Produces("application/json;charset=UTF-8") @Path("{regattaname}/races") diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/TrackedRaceJsonSerializer.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/TrackedRaceJsonSerializer.java deleted file mode 100644 index e4efd9d1062..00000000000 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/TrackedRaceJsonSerializer.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.sap.sailing.server.gateway.jaxrs.api; - -import java.util.ArrayList; -import java.util.List; - -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; - -import com.sap.sailing.domain.common.WindSource; -import com.sap.sailing.domain.common.WindSourceType; -import com.sap.sailing.domain.common.impl.WindSourceImpl; -import com.sap.sailing.domain.tracking.TrackedRace; -import com.sap.sailing.domain.tracking.WindTrack; -import com.sap.sailing.server.gateway.serialization.JsonSerializer; -import com.sap.sse.common.TimePoint; - -public class TrackedRaceJsonSerializer implements JsonSerializer { - public static final String FIELD_ID = "id"; - public static final String FIELD_NAME = "name"; - public static final String FIELD_REGATTA = "regatta"; - public static final String FIELD_WINDSOURCES = "windSources"; - - public static final String ALL_WINDSOURCES = "ALL"; - - private String windSourceToSerialize; - private String windSourceIdToSerialize; - private TimePoint fromTime; - private TimePoint toTime; - private final WindTrackJsonSerializer windTrackSerializer; - - public TrackedRaceJsonSerializer(WindTrackJsonSerializer windTrackSerializer) { - this.windTrackSerializer = windTrackSerializer; - windSourceToSerialize = WindSourceType.COMBINED.name(); - } - - public JSONObject serialize(TrackedRace trackedRace) { - JSONObject jsonRace = new JSONObject(); - - jsonRace.put(FIELD_NAME, trackedRace.getRace().getName()); - jsonRace.put(FIELD_REGATTA, trackedRace.getRaceIdentifier().getRegattaName()); - - if(windTrackSerializer != null) { - JSONArray windTracks = new JSONArray(); - - List windSources = getAvailableWindSources(trackedRace); - JSONArray jsonWindSourcesDisplayed = new JSONArray(); - for (WindSource windSource : windSources) { - JSONObject windSourceInformation = new JSONObject(); - windSourceInformation.put("typeName", windSource.getType().name()); - windSourceInformation.put("id", windSource.getId() != null ? windSource.getId().toString() : ""); - jsonWindSourcesDisplayed.add(windSourceInformation); - } - jsonRace.put("availableWindSources", jsonWindSourcesDisplayed); - for (WindSource windSource : windSources) { - if (ALL_WINDSOURCES.equals(windSourceToSerialize) || windSource.getType().name().equalsIgnoreCase(windSourceToSerialize)) { - if (windSourceIdToSerialize != null && windSource.getId() != null && !windSource.getId().toString().equalsIgnoreCase(windSourceIdToSerialize)) { - continue; - } - windTrackSerializer.setFromTime(fromTime); - windTrackSerializer.setToTime(toTime); - windTrackSerializer.setWindSource(windSource); - - WindTrack windTrack = trackedRace.getOrCreateWindTrack(windSource); - JSONObject jsonWindTrack = windTrackSerializer.serialize(windTrack); - windTracks.add(jsonWindTrack); - } - } - jsonRace.put(FIELD_WINDSOURCES, windTracks); - } - - return jsonRace; - } - - public void setWindSource(String windSourceToSerialize) { - this.windSourceToSerialize = windSourceToSerialize; - } - - public void setFromTime(TimePoint fromTime) { - this.fromTime = fromTime; - } - - public void setToTime(TimePoint toTime) { - this.toTime = toTime; - } - - private List getAvailableWindSources(TrackedRace trackedRace) { - List windSources = new ArrayList(); - for (WindSource windSource : trackedRace.getWindSources()) { - windSources.add(windSource); - } - for (WindSource windSourceToExclude : trackedRace.getWindSourcesToExclude()) { - windSources.remove(windSourceToExclude); - } - windSources.add(new WindSourceImpl(WindSourceType.COMBINED)); - return windSources; - } - - public void setWindSourceId(String windSourceId) { - this.windSourceIdToSerialize = windSourceId; - } -} \ No newline at end of file diff --git a/java/com.sap.sailing.server.gateway/webservices/api/v1/raceManeuversGetDoc.html b/java/com.sap.sailing.server.gateway/webservices/api/v1/raceManeuversGetDoc.html new file mode 100755 index 00000000000..cd9f3a39b79 --- /dev/null +++ b/java/com.sap.sailing.server.gateway/webservices/api/v1/raceManeuversGetDoc.html @@ -0,0 +1,115 @@ + + + + + + + + SAP Sailing Analytics Webservices API Version 1.0 + + +

SAP Sailing Analytics Webservices API Version 1.0

+

URL: /api/v1/regattas/{regattaname}/races/{racename}/maneuvers

+ +Description: +

Gets the maneuvers of the race specified, keyed by competitor. The mark passings are computed +from the start of the race up to the end of the race, or the end of tracking or the current time point, +whichever is earliest.

+The maneuvers for each competitor are ordered by the time point.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Webservice Type:REST
Output format:Json
Mandatory parameters:None
Optional parameters:None
Request method:GET
Example:http://www.sapsailing.com/sailingserver/api/v1/regattas/TW%202013%20(Finn)/races/Finn%20Race%204/maneuvers
Example Output:
+{
+"bycompetitor": [
+{
+"competitor": {
+"idtype": "java.util.UUID",
+"id": "acc1c7d1-cb00-44f6-bb8a-33b6386bc444",
+"name": "Agerup/Agerup",
+"displayColor": null,
+"email": null,
+"searchTag": null,
+"sailID": "NOR 888",
+"nationality": "NOR",
+"nationalityISO2": "NO",
+"nationalityISO3": "NOR",
+"timeOnTimeFactor": 1,
+"timeOnDistanceAllowanceInSecondsPerNauticalMile": 0
+},
+"maneuvers": [
+{
+"maneuverType": "TACK",
+"newTack": "PORT",
+"speedBeforeInKnots": 4.890263402216131,
+"cogBeforeInTrueDegrees": 11.910947801778443,
+"speedAfterInKnots": 7.882531591630032,
+"cogAfterInTrueDegrees": 124.81663607363905,
+"directionChangeInDegrees": 112.9056882718606,
+"maneuverLoss": {
+"geographicalMiles": 0.00022784339412441508,
+"seaMiles": 0.0002278338270171018,
+"nauticalMiles": 0.00022787073314458839,
+"meters": 0.4220165977837777,
+"kilometers": 0.0004220165977837777,
+"centralAngleDeg": 0.0000037973899020735846,
+"centralAngleRad": 6.62769567731691e-8
+},
+"positionAndTime": {
+"type": "GPSFix",
+"lat_deg": -34.462334,
+"lon_deg": -58.460133000000006,
+"unixtime": 1447696753000
+}
+},
+{
+"maneuverType": "HEAD_UP",
+"newTack": "PORT",
+"speedBeforeInKnots": 7.882531591630032,
+"cogBeforeInTrueDegrees": 124.81663607363905,
+"speedAfterInKnots": 7.748306094677595,
+"cogAfterInTrueDegrees": 101.79781832895219,
+"directionChangeInDegrees": -23.018817744686856,
+"maneuverLoss": null,
+"positionAndTime": {
+"type": "GPSFix",
+"lat_deg": -34.46242499999999,
+"lon_deg": -58.45991099999999,
+"unixtime": 1447696762000
+}
+},
+...
+]
+}
+		
+
+
+Back to Web Service Overview + + diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/masterdata/DummyTrackedRace.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/masterdata/DummyTrackedRace.java index 2b3736f605a..b1f791bd968 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/masterdata/DummyTrackedRace.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/masterdata/DummyTrackedRace.java @@ -321,7 +321,7 @@ public class DummyTrackedRace extends TrackedRaceWithWindEssentials { } @Override - public List getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) { + public Iterable getManeuvers(Competitor competitor, TimePoint from, TimePoint to, boolean waitForLatest) { return null; } diff --git a/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/ExportAction.java b/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/ExportAction.java index f733673081e..ea11e4b74ef 100644 --- a/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/ExportAction.java +++ b/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/ExportAction.java @@ -2,7 +2,6 @@ package com.sap.sailing.xmlexport; import java.io.IOException; import java.io.StringWriter; -import java.util.List; import java.util.NavigableSet; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -271,13 +270,13 @@ public abstract class ExportAction { return result; } - public List getManeuvers(TrackedRace trackedRace, Competitor competitor, boolean waitForLatest) throws NoWindException { - List maneuvers = trackedRace.getManeuvers(competitor, + public Iterable getManeuvers(TrackedRace trackedRace, Competitor competitor, boolean waitForLatest) throws NoWindException { + Iterable maneuvers = trackedRace.getManeuvers(competitor, trackedRace.getStartOfRace(), trackedRace.getEndOfRace(), waitForLatest); return maneuvers; } - public Integer getNumberOfJibes(List maneuvers) throws NoWindException { + public Integer getNumberOfJibes(Iterable maneuvers) throws NoWindException { int result = 0; for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.JIBE) { @@ -287,7 +286,7 @@ public abstract class ExportAction { return result; } - public Integer getNumberOfPenaltyCircles(List maneuvers) throws NoWindException { + public Integer getNumberOfPenaltyCircles(Iterable maneuvers) throws NoWindException { int result = 0; for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.PENALTY_CIRCLE) { @@ -297,7 +296,7 @@ public abstract class ExportAction { return result; } - public Integer getNumberOfTacks(List maneuvers) throws NoWindException { + public Integer getNumberOfTacks(Iterable maneuvers) throws NoWindException { int result = 0; for (Maneuver maneuver : maneuvers) { if (maneuver.getType() == ManeuverType.TACK) { diff --git a/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/LeaderboardData.java b/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/LeaderboardData.java index 1943f3c9764..9610f817ad5 100644 --- a/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/LeaderboardData.java +++ b/java/com.sap.sailing.xmlexport/src/com/sap/sailing/xmlexport/LeaderboardData.java @@ -438,8 +438,8 @@ public class LeaderboardData extends ExportAction { continue; } - List maneuvers = getManeuvers(race, competitor, /*waitForLatest*/ false); - addNamedElementWithValue(competitorRaceDataElement, "number_of_maneuvers", maneuvers != null ? maneuvers.size() : 0); + Iterable maneuvers = getManeuvers(race, competitor, /*waitForLatest*/ false); + addNamedElementWithValue(competitorRaceDataElement, "number_of_maneuvers", maneuvers != null ? Util.size(maneuvers) : 0); addNamedElementWithValue(competitorRaceDataElement, "number_of_tacks", getNumberOfTacks(maneuvers)); addNamedElementWithValue(competitorRaceDataElement, "number_of_jibes", getNumberOfJibes(maneuvers)); addNamedElementWithValue(competitorRaceDataElement, "number_of_penalty_circles", getNumberOfPenaltyCircles(maneuvers)); @@ -778,8 +778,8 @@ public class LeaderboardData extends ExportAction { addNamedElementWithValue(competitorLegDataElement, "rank_gain_for_this_leg_between_start_and_finish", 0); } - List maneuvers = competitorLeg.getManeuvers(legFinishTime, /*waitForLatest*/false); - addNamedElementWithValue(competitorLegDataElement, "maneuver_count", maneuvers.size()); + Iterable maneuvers = competitorLeg.getManeuvers(legFinishTime, /*waitForLatest*/false); + addNamedElementWithValue(competitorLegDataElement, "maneuver_count", Util.size(maneuvers)); Element maneuversElement = new Element("maneuvers"); int maneuverCounter = 0; for (Maneuver man : maneuvers) { diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/RoundingUtil.java b/java/com.sap.sse.common/src/com/sap/sse/common/util/RoundingUtil.java similarity index 95% rename from java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/RoundingUtil.java rename to java/com.sap.sse.common/src/com/sap/sse/common/util/RoundingUtil.java index 2d2bdfe3e20..bcef177ea65 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/RoundingUtil.java +++ b/java/com.sap.sse.common/src/com/sap/sse/common/util/RoundingUtil.java @@ -1,4 +1,4 @@ -package com.sap.sailing.server.gateway.jaxrs; +package com.sap.sse.common.util; public class RoundingUtil {