From 3312208fbce2ac3b2449d320bd38f9490283c996 Mon Sep 17 00:00:00 2001 From: Alexander Tatarinovich Date: Tue, 20 Sep 2016 16:56:05 +0300 Subject: [PATCH] bug 1564 Change-Id: Ibfaaa8d92513413b1c8164dcd5cc34567837ab11 --- .../impl/DomainObjectFactoryImpl.java | 3 +- .../domain/persistence/impl/FieldNames.java | 1 + .../impl/MongoObjectFactoryImpl.java | 1 + .../impl/CreateAndTrackWithRaceLogTest.java | 2 +- .../domain/test/mock/MockedTrackedRace.java | 7 + .../com/sap/sailing/domain/base/Regatta.java | 7 + .../sailing/domain/base/impl/RegattaImpl.java | 18 +- .../ui/test/PingMarkViaRegattaLogTest.java | 2 +- .../event/GetEventViewAction.java | 1 + .../communication/eventview/EventViewDTO.java | 2 +- .../eventview/RegattaMetadataDTO.java | 11 +- .../places/event/AbstractEventActivity.java | 14 ++ .../places/event/AbstractEventActivity.java | 15 +- .../gwt/home/server/LeaderboardContext.java | 15 +- .../client/RegattaRaceStatesComponent.java | 4 + .../sailing/gwt/server/HomeServiceUtil.java | 8 + .../AbstractLeaderboardConfigPanel.java | 9 +- ...tractRegattaWithSeriesAndFleetsDialog.java | 14 +- .../CopyCourseAndCompetitorsDialog.java | 157 +++++++++--------- .../adminconsole/CreateRegattaCallback.java | 2 +- .../gwt/ui/adminconsole/RaceTableWrapper.java | 10 +- .../ui/adminconsole/RegattaListComposite.java | 2 +- ...martphoneTrackingEventManagementPanel.java | 5 +- .../sailing/gwt/ui/client/SailingService.java | 4 +- .../gwt/ui/client/SailingServiceAsync.java | 4 +- .../sailing/gwt/ui/client/StringMessages.java | 1 + .../gwt/ui/client/StringMessages.properties | 3 +- .../shared/racemap/RaceMapSettings.java | 15 +- .../gwt/ui/raceboard/RaceBoardPanel.java | 15 +- .../gwt/ui/server/SailingServiceImpl.java | 37 +++-- .../sap/sailing/gwt/ui/shared/RegattaDTO.java | 5 +- .../ui/shared/RegattaOverviewEntryDTO.java | 3 +- ...tStoringAndRetrievingRaceLogInRegatta.java | 2 +- ...estStoringAndLoadingEventsAndRegattas.java | 4 +- .../jaxrs/LeaderboardGroupResourceTest.java | 3 +- .../test/jaxrs/LeaderboardsResourceTest.java | 3 +- .../test/jaxrs/RegattasResourceTest.java | 2 +- .../test/AbstractLogReplicationTest.java | 2 +- .../test/CompetitorReplicationTest.java | 2 +- ...tialLoadReplicationObjectIdentityTest.java | 2 +- .../test/RegattaReplicationTest.java | 43 +++-- .../server/test/MasterDataImportTest.java | 50 +++--- .../server/test/SearchServiceTest.java | 6 +- .../sailing/server/RacingEventService.java | 6 +- .../server/impl/RacingEventServiceImpl.java | 13 +- .../AddSpecificRegatta.java | 6 +- .../UpdateSpecificRegatta.java | 6 +- 47 files changed, 355 insertions(+), 192 deletions(-) diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java index 23ce73b6fc3..66eaec1a31a 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java @@ -1144,11 +1144,12 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { logger.log(Level.WARNING, "Error loading racing procedure configration for regatta.", e); } } + final Double cicleRadius = (Double) dbRegatta.get(FieldNames.REGATTA_CIRCLE_RADIUS.name()); final Boolean useStartTimeInference = (Boolean) dbRegatta.get(FieldNames.REGATTA_USE_START_TIME_INFERENCE.name()); final Boolean controlTrackingFromStartAndFinishTimes = (Boolean) dbRegatta.get(FieldNames.REGATTA_CONTROL_TRACKING_FROM_START_AND_FINISH_TIMES.name()); final RankingMetricConstructor rankingMetricConstructor = loadRankingMetricConstructor(dbRegatta); result = new RegattaImpl(getRaceLogStore(), getRegattaLogStore(), name, boatClass, startDate, endDate, series, /* persistent */true, - loadScoringScheme(dbRegatta), id, courseArea, useStartTimeInference == null ? true + loadScoringScheme(dbRegatta), id, courseArea, cicleRadius == null ? Regatta.DEFAULT_HULL_LENGHT_FACTOR : cicleRadius, useStartTimeInference == null ? true : useStartTimeInference, controlTrackingFromStartAndFinishTimes == null ? false : controlTrackingFromStartAndFinishTimes, rankingMetricConstructor); result.setRegattaConfiguration(configuration); diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java index 9b584e69be1..c1735c0f2dc 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/FieldNames.java @@ -34,6 +34,7 @@ public enum FieldNames { REGATTA_END_DATE, REGATTA_SERIES, REGATTA_REGATTA_CONFIGURATION, + REGATTA_CIRCLE_RADIUS, REGATTA_USE_START_TIME_INFERENCE, REGATTA_CONTROL_TRACKING_FROM_START_AND_FINISH_TIMES, SERIES_NAME, diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index a1de34ee94c..c0cc79f0900 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -646,6 +646,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { DBObject configurationObject = (DBObject) JSON.parse(json.toString()); dbRegatta.put(FieldNames.REGATTA_REGATTA_CONFIGURATION.name(), configurationObject); } + dbRegatta.put(FieldNames.REGATTA_CIRCLE_RADIUS.name(), regatta.getCircleRadius()); dbRegatta.put(FieldNames.REGATTA_USE_START_TIME_INFERENCE.name(), regatta.useStartTimeInference()); dbRegatta.put(FieldNames.REGATTA_CONTROL_TRACKING_FROM_START_AND_FINISH_TIMES.name(), regatta.isControlTrackingFromStartAndFinishTimes()); dbRegatta.put(FieldNames.REGATTA_RANKING_METRIC.name(), storeRankingMetric(regatta)); diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java index 577ea0522ee..c1a9683b794 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java @@ -86,7 +86,7 @@ public class CreateAndTrackWithRaceLogTest { service); regatta = service.createRegatta(RegattaImpl.getDefaultName("regatta", "Laser"), "Laser", /* startDate */null, /* endDate */null, UUID.randomUUID(), Collections. singletonList(series), false, - new HighPoint(), UUID.randomUUID(), /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + new HighPoint(), UUID.randomUUID(), /*circleRadius*/1.0, /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); series.addRaceColumn(columnName, /* trackedRegattaRegistry */null); leaderboard = service.addRegattaLeaderboard(regatta.getRegattaIdentifier(), "RegattaLeaderboard", new int[] {}); adapter = RaceLogTrackingAdapterFactory.INSTANCE.getAdapter(DomainFactory.INSTANCE); 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 f1de4300373..e8edbfa14d1 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 @@ -446,6 +446,13 @@ public class MockedTrackedRace implements DynamicTrackedRace { } + public double getCircleRadius(){ + return 1.0; + } + + public void setCircleRadius(double circleRadius){ + } + @Override public RegattaLikeIdentifier getRegattaLikeIdentifier() { return null; diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/Regatta.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/Regatta.java index 7baa54ce040..34c9292bd9c 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/Regatta.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/Regatta.java @@ -24,6 +24,9 @@ import com.sap.sse.common.TimePoint; * */ public interface Regatta extends NamedWithID, IsRegattaLike, HasRaceColumnsAndRegattaLike { + + public static final double DEFAULT_HULL_LENGHT_FACTOR = 2; + ScoringScheme getScoringScheme(); /** @@ -155,6 +158,10 @@ public interface Regatta extends NamedWithID, IsRegattaLike, HasRaceColumnsAndRe RegattaAndRaceIdentifier getRaceIdentifier(RaceDefinition race); + public double getCircleRadius(); + + public void setCircleRadius(double circleRadius); + /** * When there is no race committee app in place and no operator is managing the race start times for this regatta, * start times can optionally be inferred from the start mark passings by the {@link TrackedRace}s in this regatta. diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java index 4211f49b125..19ca45d9ff1 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java @@ -115,6 +115,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene private transient RaceLogStore raceLogStore; private final IsRegattaLike regattaLikeHelper; private final RankingMetricConstructor rankingMetricConstructor; + private double circleRadius; private CourseArea defaultCourseArea; private RegattaConfiguration configuration; @@ -162,7 +163,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene Iterable series, boolean persistent, ScoringScheme scoringScheme, Serializable id, CourseArea courseArea, RankingMetricConstructor rankingMetricConstructor) { this(EmptyRaceLogStore.INSTANCE, EmptyRegattaLogStore.INSTANCE, name, boatClass, startDate, endDate, series, - persistent, scoringScheme, id, courseArea, /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, + persistent, scoringScheme, id, courseArea, 0.0, /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, rankingMetricConstructor); } @@ -204,7 +205,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene /* isMedal */false, /* isFleetsCanRunInParallel */ true, Collections .singletonList(new FleetImpl(LeaderboardNameConstants.DEFAULT_FLEET_NAME)), /* race column names */new ArrayList(), trackedRegattaRegistry)), /* persistent */false, - scoringScheme, id, courseArea, /* useStartTimeInference */true, controlTrackingFromStartAndFinishTimes, + scoringScheme, id, courseArea, 1.0, /* useStartTimeInference */true, controlTrackingFromStartAndFinishTimes, rankingMetricConstructor); } @@ -215,7 +216,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene */ public RegattaImpl(RaceLogStore raceLogStore, RegattaLogStore regattaLogStore, String name, BoatClass boatClass, TimePoint startDate, TimePoint endDate, Iterable series, boolean persistent, - ScoringScheme scoringScheme, Serializable id, CourseArea courseArea, boolean useStartTimeInference, + ScoringScheme scoringScheme, Serializable id, CourseArea courseArea, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetricConstructor rankingMetricConstructor) { super(name); this.rankingMetricConstructor = rankingMetricConstructor; @@ -241,6 +242,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene this.scoringScheme = scoringScheme; this.defaultCourseArea = courseArea; this.configuration = null; + this.circleRadius = circleRadius; this.regattaLikeHelper = new BaseRegattaLikeImpl(new RegattaAsRegattaLikeIdentifier(this), regattaLogStore) { private static final long serialVersionUID = 8546222568682770206L; @@ -572,6 +574,16 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene this.endDate = endDate; } + @Override + public double getCircleRadius() { + return circleRadius; + } + + @Override + public void setCircleRadius(double circleRadius) { + this.circleRadius = circleRadius; + } + @Override public CourseArea getDefaultCourseArea() { return defaultCourseArea; diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PingMarkViaRegattaLogTest.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PingMarkViaRegattaLogTest.java index 1f039de6673..e90e633a12d 100644 --- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PingMarkViaRegattaLogTest.java +++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PingMarkViaRegattaLogTest.java @@ -41,7 +41,7 @@ public class PingMarkViaRegattaLogTest { Collections.singletonList(columnName), service); Regatta regatta = service.createRegatta(RegattaImpl.getDefaultName("regatta", "Laser"), "Laser", /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), Collections.singletonList(series), - false, new HighPoint(), UUID.randomUUID(), /* useStartTimeInference */ true, + false, new HighPoint(), UUID.randomUUID(), /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, RankingMetricsFactory.getRankingMetricConstructor(RankingMetrics.ONE_DESIGN)); RegattaLeaderboard leaderboard = service.addRegattaLeaderboard(regatta.getRegattaIdentifier(), "RegattaLeaderboard", new int[] {}); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java index 4b953e93309..fc2dc8fb042 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java @@ -117,6 +117,7 @@ public class GetEventViewAction implements SailingAction, IsClient } else { dto.setType(dto.getRegattas().size() == 1 ? EventType.SINGLE_REGATTA: EventType.MULTI_REGATTA); } + return dto; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java index 3a29e720bac..3892d3c7076 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java @@ -19,7 +19,7 @@ public class EventViewDTO extends EventMetadataDTO implements Result, HasLogo { private TreeSet regattas = new TreeSet<>(); private ArrayList eventsOfSeries = new ArrayList<>(); - + private EventType type; private boolean hasMedia; private boolean hasAnalytics; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/RegattaMetadataDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/RegattaMetadataDTO.java index 36b47abaecd..08567460d40 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/RegattaMetadataDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/RegattaMetadataDTO.java @@ -18,6 +18,7 @@ public class RegattaMetadataDTO extends RegattaReferenceDTO implements HasRegatt private RegattaState state; private boolean flexibleLeaderboard; private RaceDataInfo raceDataInfo; + private double buoyZoneRadius; public RegattaMetadataDTO() { } @@ -122,7 +123,15 @@ public class RegattaMetadataDTO extends RegattaReferenceDTO implements HasRegatt public void setRaceDataInfo(RaceDataInfo raceDataInfo) { this.raceDataInfo = raceDataInfo; } - + + public double getBuoyZoneRadius() { + return buoyZoneRadius; + } + + public void setBuoyZoneRadius(double buoyZoneRadius) { + this.buoyZoneRadius = buoyZoneRadius; + } + /** * Holder class for flags, which inform about GPS, wind, video or audio data availability. */ diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/event/AbstractEventActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/event/AbstractEventActivity.java index c2d804bc70e..2dce1e87f68 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/event/AbstractEventActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/event/AbstractEventActivity.java @@ -18,6 +18,7 @@ import com.sap.sailing.gwt.home.communication.event.EventState; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO.EventType; import com.sap.sailing.gwt.home.communication.eventview.HasRegattaMetadata; +import com.sap.sailing.gwt.home.communication.eventview.RegattaMetadataDTO; import com.sap.sailing.gwt.home.communication.media.GetMediaForEventAction; import com.sap.sailing.gwt.home.communication.media.MediaDTO; import com.sap.sailing.gwt.home.communication.race.SimpleRaceMetadataDTO; @@ -180,9 +181,22 @@ public abstract class AbstractEventActivity ex linkParams.put(RaceMapSettings.PARAM_SHOW_MAPCONTROLS, "true"); linkParams.put(RaceBoardPerspectiveSettings.PARAM_VIEW_SHOW_NAVIGATION_PANEL, "true"); linkParams.put("regattaName", regattaName); + linkParams.put(RaceMapSettings.PARAM_VIEW_BUOY_ZONE_RADIUS, String.valueOf(getRegattaBuoyZoneRadius(regattaName))); return linkParams; } + private double getRegattaBuoyZoneRadius(String regattaName) { + if (regattaName == null) { + return RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS; + } + for (RegattaMetadataDTO regatta : eventDTO.getRegattas()) { + if (regattaName.equals(regatta.getId())) { + return regatta.getBuoyZoneRadius(); + } + } + return RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS; + } + @Override public PlaceNavigation getHomeNavigation() { return homePlacesNavigator.getHomeNavigation(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/AbstractEventActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/AbstractEventActivity.java index 33a801f2a19..0a9a104135a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/AbstractEventActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/event/AbstractEventActivity.java @@ -45,6 +45,7 @@ import com.sap.sailing.gwt.home.shared.places.fakeseries.SeriesDefaultPlace; import com.sap.sailing.gwt.ui.client.EntryPointLinkFactory; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.refresh.ErrorAndBusyClientFactory; +import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings; import com.sap.sse.common.Util; import com.sap.sse.common.util.NaturalComparator; @@ -266,12 +267,24 @@ public abstract class AbstractEventActivity ex } linkParams.put("raceName", trackedRaceName); linkParams.put("regattaName", regattaName); + linkParams.put(RaceMapSettings.PARAM_VIEW_BUOY_ZONE_RADIUS, String.valueOf(getRegattaBuoyZoneRadius(regattaName))); // TODO this must only be forwarded if there is a logged-on user // linkParams.put(RaceBoardViewConfiguration.PARAM_CAN_REPLAY_DURING_LIVE_RACES, "true"); return linkParams; } - + private double getRegattaBuoyZoneRadius(String regattaName) { + if (regattaName == null) { + return RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS; + } + for (RegattaMetadataDTO regatta : eventDTO.getRegattas()) { + if (regattaName.equals(regatta.getId())) { + return regatta.getBuoyZoneRadius(); + } + } + return RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS; + } + public String getRegattaId() { String regattaId = place.getRegattaId(); if(regattaId != null) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/server/LeaderboardContext.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/server/LeaderboardContext.java index c57209a12cd..0046b08a7bc 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/server/LeaderboardContext.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/server/LeaderboardContext.java @@ -32,6 +32,7 @@ import com.sap.sailing.gwt.home.communication.eventview.RegattaMetadataDTO; import com.sap.sailing.gwt.home.communication.regatta.RegattaWithProgressDTO; import com.sap.sailing.gwt.home.server.EventActionUtil.RaceCallback; import com.sap.sailing.gwt.server.HomeServiceUtil; +import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings; import com.sap.sailing.server.RacingEventService; import com.sap.sse.common.Duration; import com.sap.sse.common.TimePoint; @@ -248,8 +249,20 @@ public class LeaderboardContext { RegattaRaceDataInfoCalculator regattaRaceDataInfoCalculator = new RegattaRaceDataInfoCalculator(); forRaces(regattaRaceDataInfoCalculator); regattaDTO.setRaceDataInfo(regattaRaceDataInfoCalculator.getRaceDataInfo()); + regattaDTO.setBuoyZoneRadius(getRegattaBuoyZoneRadius()); } - + + private double getRegattaBuoyZoneRadius() { + Regatta regatta = service.getRegattaByName(getLeaderboardName()); + Double boatHullLength = HomeServiceUtil.getBoatClassHullLenght(leaderboard); + if (regatta != null) { + return boatHullLength == null ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS + : (boatHullLength * regatta.getCircleRadius()); + } + + return boatHullLength == null ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS : boatHullLength * Regatta.DEFAULT_HULL_LENGHT_FACTOR; + } + private static boolean hasMultipleLeaderboardGroups(EventBase event) { return Util.size(event.getLeaderboardGroups()) > 1; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RegattaRaceStatesComponent.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RegattaRaceStatesComponent.java index aff6371303f..3738e9f7288 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RegattaRaceStatesComponent.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RegattaRaceStatesComponent.java @@ -55,6 +55,7 @@ import com.sap.sailing.gwt.ui.client.AnchorCell; import com.sap.sailing.gwt.ui.client.EntryPointLinkFactory; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings; import com.sap.sailing.gwt.ui.shared.ClickableSafeHtmlCell; import com.sap.sailing.gwt.ui.shared.EventDTO; import com.sap.sailing.gwt.ui.shared.RaceCourseDTO; @@ -933,10 +934,13 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component raceLinkParameters.put("raceName", entryDTO.raceInfo.raceIdentifier.getRaceName()); raceLinkParameters.put("canReplayDuringLiveRaces", "true"); raceLinkParameters.put("regattaName", entryDTO.regattaName); + raceLinkParameters.put(RaceMapSettings.PARAM_VIEW_BUOY_ZONE_RADIUS, String.valueOf(entryDTO.buyZoneRadius)); + return EntryPointLinkFactory.createRaceBoardLink(raceLinkParameters); } return null; } + private String createRegattaLink(RegattaOverviewEntryDTO entryDTO) { String leaderboardLink = EntryPointLinkFactory.createLeaderboardTabLink(eventId.toString(), entryDTO.regattaName); return leaderboardLink; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java index 6ed4b53e7e8..24b6ed0f531 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java @@ -25,6 +25,7 @@ import com.sap.sailing.domain.base.LeaderboardGroupBase; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.base.RemoteSailingServerReference; +import com.sap.sailing.domain.common.Distance; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.LeaderboardGroup; @@ -228,6 +229,13 @@ public final class HomeServiceUtil { return boatClass == null ? null : boatClass.getName(); } + public static Double getBoatClassHullLenght(Leaderboard leaderboard) { + BoatClass boatClass = getBoatClass(leaderboard); + Distance boatHullLength = boatClass == null ? null + : boatClass.getHullLength(); + return boatHullLength == null ? null : boatHullLength.getMeters(); + } + private static BoatClass getBoatClass(Leaderboard leaderboard) { if(leaderboard instanceof RegattaLeaderboard) { RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardConfigPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardConfigPanel.java index 4192a0490cb..92da777d7d6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardConfigPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardConfigPanel.java @@ -189,6 +189,13 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement public void onSelectionChange(SelectionChangeEvent event) { leaderboardSelectionChanged(); raceColumnTable.setSelectedLeaderboardName(getSelectedLeaderboardName()); + + RegattaDTO regatta = getSelectedRegatta(); + if (regatta != null) { + double buoyZoneRadiusInMeters = regatta.boatClass == null ? 15 /* default if no boat class */ + : (regatta.boatClass.getHullLengthInMeters() * regatta.circleRadius); + raceColumnTable.setSelectedRegattaHullLenghtCircleFactor(buoyZoneRadiusInMeters); + } } }); filteredLeaderboardList.addDataDisplay(leaderboardTable); @@ -706,7 +713,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement * Looks up the regatta for the selected leaderboard by name in {@link #allRegattas} */ protected RegattaDTO getSelectedRegatta() { - final String regattaName = getSelectedLeaderboard().regattaName; + final String regattaName = getSelectedLeaderboard() == null ? "" : getSelectedLeaderboard().regattaName; return getRegattaByName(regattaName); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java index 050d4092e97..15c1b8c4325 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRegattaWithSeriesAndFleetsDialog.java @@ -9,6 +9,7 @@ import com.google.gwt.dom.client.SelectElement; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.user.client.ui.CheckBox; +import com.google.gwt.user.client.ui.DoubleBox; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; @@ -50,9 +51,10 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog extends DataEn protected final ListBox sailingEventsListBox; protected final CheckBox useStartTimeInferenceCheckBox; protected final CheckBox controlTrackingFromStartAndFinishTimesCheckBox; + protected final DoubleBox circleRadiusDoubleBox; protected final ListEditorComposite seriesEditor; private final ListBox rankingMetricListBox; - + protected final List existingEvents; private EventDTO defaultEvent; @@ -93,7 +95,10 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog extends DataEn controlTrackingFromStartAndFinishTimesCheckBox = createCheckbox(stringMessages.controlTrackingFromStartAndFinishTimes()); controlTrackingFromStartAndFinishTimesCheckBox.ensureDebugId("ControlTrackingFromStartAndFinishTimesCheckBox"); controlTrackingFromStartAndFinishTimesCheckBox.setValue(regatta.controlTrackingFromStartAndFinishTimes); - + + circleRadiusDoubleBox = createDoubleBox(regatta.circleRadius, 10); + circleRadiusDoubleBox.ensureDebugId("CircleRadiusDoubleBox"); + courseAreaListBox = createListBox(false); courseAreaListBox.ensureDebugId("CourseAreaListBox"); courseAreaListBox.setEnabled(false); @@ -142,7 +147,7 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog extends DataEn if (additionalWidget != null) { panel.add(additionalWidget); } - Grid formGrid = new Grid(8, 2); + Grid formGrid = new Grid(9, 2); panel.add(formGrid); formGrid.setWidget(0, 0, new Label(stringMessages.timeZone() + ":")); @@ -161,6 +166,8 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog extends DataEn formGrid.setWidget(6, 1, useStartTimeInferenceCheckBox); formGrid.setWidget(7, 0, new Label(stringMessages.controlTrackingFromStartAndFinishTimes() + ":")); formGrid.setWidget(7, 1, controlTrackingFromStartAndFinishTimesCheckBox); + formGrid.setWidget(8, 0, new Label(stringMessages.circleRadius() + ":")); + formGrid.setWidget(8, 1, circleRadiusDoubleBox); setupAdditionalWidgetsOnPanel(panel, formGrid); return panel; } @@ -285,6 +292,7 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog extends DataEn result.scoringScheme = getSelectedScoringSchemeType(); result.useStartTimeInference = useStartTimeInferenceCheckBox.getValue(); result.controlTrackingFromStartAndFinishTimes = controlTrackingFromStartAndFinishTimesCheckBox.getValue(); + result.circleRadius = circleRadiusDoubleBox.getValue(); setCourseAreaInRegatta(result); result.series = getSeriesEditor().getValue(); return result; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CopyCourseAndCompetitorsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CopyCourseAndCompetitorsDialog.java index 8be9fd0699f..49b50525bbd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CopyCourseAndCompetitorsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CopyCourseAndCompetitorsDialog.java @@ -1,78 +1,79 @@ -package com.sap.sailing.gwt.ui.adminconsole; - -import java.util.Collection; -import java.util.Set; - -import com.google.gwt.user.client.ui.CheckBox; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.SelectionChangeEvent; -import com.google.gwt.view.client.SelectionChangeEvent.Handler; -import com.sap.sailing.gwt.ui.adminconsole.AbstractLeaderboardConfigPanel.RaceColumnDTOAndFleetDTOWithNameBasedEquality; -import com.sap.sailing.gwt.ui.client.SailingServiceAsync; -import com.sap.sailing.gwt.ui.client.StringMessages; -import com.sap.sse.gwt.client.ErrorReporter; -import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel; -import com.sap.sse.gwt.client.dialog.DataEntryDialog; - -public class CopyCourseAndCompetitorsDialog extends DataEntryDialog { - private final RaceTableWrapper> - racesTable; - private final CheckBox courseCheckBox; - private final CheckBox competitorCheckBox; - private SailingServiceAsync sailingService; - private ErrorReporter errorReporter; - - - public CopyCourseAndCompetitorsDialog(SailingServiceAsync sailingService, ErrorReporter errorReporter, final StringMessages stringMessages, - Collection races, - String leaderboardName, DialogCallback dialogCallback) { - super(stringMessages.selectRaces(), stringMessages.selectRaces(), stringMessages.ok(), stringMessages.cancel(), - new Validator() { - @Override - public String getErrorMessage(CourseAndCompetitorCopyOperation valueToValidate) { - if (valueToValidate.getRaceLogsToCopyTo().isEmpty()) { - return stringMessages.selectAtLeastOne(); - } - return null; - } - }, true, dialogCallback); - racesTable = new RaceTableWrapper>( - sailingService, stringMessages, errorReporter, /* multiSelection */ true); - racesTable.setSelectedLeaderboardName(leaderboardName); - racesTable.getDataProvider().getList().addAll(races); - racesTable.getSelectionModel().addSelectionChangeHandler(new Handler() { - @Override - public void onSelectionChange(SelectionChangeEvent event) { - validate(); - } - }); - courseCheckBox = new CheckBox(stringMessages.copyCourse()); - courseCheckBox.setValue(true); - competitorCheckBox = new CheckBox(stringMessages.copyCompetitors()); - competitorCheckBox.setValue(false); // competitors are usually registered on the regatta - this.sailingService = sailingService; - this.errorReporter = errorReporter; - } - - @Override - protected Widget getAdditionalWidget() { - FlowPanel mainPanel = new FlowPanel(); - - HorizontalPanel checkBoxPanel = new HorizontalPanel(); - checkBoxPanel.add(courseCheckBox); - checkBoxPanel.add(competitorCheckBox); - - mainPanel.add(checkBoxPanel); - mainPanel.add(racesTable); - return mainPanel; - } - - @Override - protected CourseAndCompetitorCopyOperation getResult() { - Set racesToCopyTo = racesTable.getSelectionModel().getSelectedSet(); - return new CourseAndCompetitorCopyOperation(racesToCopyTo, courseCheckBox.getValue(), competitorCheckBox.getValue(), sailingService, errorReporter); - } - -} +package com.sap.sailing.gwt.ui.adminconsole; + +import java.util.Collection; +import java.util.Set; + +import com.google.gwt.user.client.ui.CheckBox; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.view.client.SelectionChangeEvent; +import com.google.gwt.view.client.SelectionChangeEvent.Handler; +import com.sap.sailing.gwt.ui.adminconsole.AbstractLeaderboardConfigPanel.RaceColumnDTOAndFleetDTOWithNameBasedEquality; +import com.sap.sailing.gwt.ui.client.SailingServiceAsync; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sse.gwt.client.ErrorReporter; +import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel; +import com.sap.sse.gwt.client.dialog.DataEntryDialog; + +public class CopyCourseAndCompetitorsDialog extends DataEntryDialog { + private final RaceTableWrapper> + racesTable; + private final CheckBox courseCheckBox; + private final CheckBox competitorCheckBox; + private SailingServiceAsync sailingService; + private ErrorReporter errorReporter; + + + public CopyCourseAndCompetitorsDialog(SailingServiceAsync sailingService, ErrorReporter errorReporter, final StringMessages stringMessages, + Collection races, + String leaderboardName, double regattaHullLenghtCircleFactor, DialogCallback dialogCallback) { + super(stringMessages.selectRaces(), stringMessages.selectRaces(), stringMessages.ok(), stringMessages.cancel(), + new Validator() { + @Override + public String getErrorMessage(CourseAndCompetitorCopyOperation valueToValidate) { + if (valueToValidate.getRaceLogsToCopyTo().isEmpty()) { + return stringMessages.selectAtLeastOne(); + } + return null; + } + }, true, dialogCallback); + racesTable = new RaceTableWrapper>( + sailingService, stringMessages, errorReporter, /* multiSelection */ true); + racesTable.setSelectedLeaderboardName(leaderboardName); + racesTable.setSelectedRegattaHullLenghtCircleFactor(regattaHullLenghtCircleFactor); + racesTable.getDataProvider().getList().addAll(races); + racesTable.getSelectionModel().addSelectionChangeHandler(new Handler() { + @Override + public void onSelectionChange(SelectionChangeEvent event) { + validate(); + } + }); + courseCheckBox = new CheckBox(stringMessages.copyCourse()); + courseCheckBox.setValue(true); + competitorCheckBox = new CheckBox(stringMessages.copyCompetitors()); + competitorCheckBox.setValue(false); // competitors are usually registered on the regatta + this.sailingService = sailingService; + this.errorReporter = errorReporter; + } + + @Override + protected Widget getAdditionalWidget() { + FlowPanel mainPanel = new FlowPanel(); + + HorizontalPanel checkBoxPanel = new HorizontalPanel(); + checkBoxPanel.add(courseCheckBox); + checkBoxPanel.add(competitorCheckBox); + + mainPanel.add(checkBoxPanel); + mainPanel.add(racesTable); + return mainPanel; + } + + @Override + protected CourseAndCompetitorCopyOperation getResult() { + Set racesToCopyTo = racesTable.getSelectionModel().getSelectedSet(); + return new CourseAndCompetitorCopyOperation(racesToCopyTo, courseCheckBox.getValue(), competitorCheckBox.getValue(), sailingService, errorReporter); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CreateRegattaCallback.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CreateRegattaCallback.java index 0ea2ac020f8..7539f032369 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CreateRegattaCallback.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CreateRegattaCallback.java @@ -66,7 +66,7 @@ public class CreateRegattaCallback implements DialogCallback{ sailingService.createRegatta(newRegatta.getName(), newRegatta.boatClass==null?null:newRegatta.boatClass.getName(), newRegatta.startDate, newRegatta.endDate, new RegattaCreationParametersDTO(seriesStructure), true, - newRegatta.scoringScheme, newRegatta.defaultCourseAreaUuid, newRegatta.useStartTimeInference, + newRegatta.scoringScheme, newRegatta.defaultCourseAreaUuid, newRegatta.circleRadius, newRegatta.useStartTimeInference, newRegatta.controlTrackingFromStartAndFinishTimes, newRegatta.rankingMetricType, new AsyncCallback() { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceTableWrapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceTableWrapper.java index 8a5819a8dbb..fa268f34d76 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceTableWrapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceTableWrapper.java @@ -16,6 +16,8 @@ import com.sap.sailing.gwt.ui.adminconsole.LeaderboardConfigPanel.AnchorTemplate import com.sap.sailing.gwt.ui.client.EntryPointLinkFactory; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings; +import com.sap.sailing.gwt.ui.shared.RegattaDTO; import com.sap.sse.common.util.NaturalComparator; import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.celltable.EntityIdentityComparator; @@ -25,7 +27,8 @@ public class RaceTableWrapper { private final AnchorTemplates ANCHORTEMPLATE = GWT.create(AnchorTemplates.class); private String selectedLeaderboardName; - + private double selectedRegattaHullLenghtCircleFactor; + public RaceTableWrapper(SailingServiceAsync sailingService, StringMessages stringMessages, ErrorReporter errorReporter, boolean multiSelection) { super(sailingService, stringMessages, errorReporter, multiSelection, /* enablePager */ false, @@ -52,6 +55,7 @@ extends TableWrapper { .getA().getRaceIdentifier(raceInLeaderboardDTOAndFleetName.getB()); Map params = new HashMap<>(); params.put("leaderboardName", selectedLeaderboardName); + params.put(RaceMapSettings.PARAM_VIEW_BUOY_ZONE_RADIUS, String.valueOf(selectedRegattaHullLenghtCircleFactor)); params.put("regattaName", raceIdentifier.getRegattaName()); params.put("raceName", raceIdentifier.getRaceName()); params.put("canReplayDuringLiveRaces", "true"); @@ -89,4 +93,8 @@ extends TableWrapper { public void setSelectedLeaderboardName(String name) { this.selectedLeaderboardName = name; } + + public void setSelectedRegattaHullLenghtCircleFactor(double selectedRegattaHullLenghtCircleFactor) { + this.selectedRegattaHullLenghtCircleFactor = selectedRegattaHullLenghtCircleFactor; + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java index 50fff1a62c8..9be6a35d5ca 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java @@ -290,7 +290,7 @@ public class RegattaListComposite extends Composite implements RegattasDisplayer final RegattaIdentifier regattaName = new RegattaName(editedRegatta.getName()); sailingService.updateRegatta(regattaName, editedRegatta.startDate, editedRegatta.endDate, editedRegatta.defaultCourseAreaUuid, - editedRegatta.configuration, editedRegatta.useStartTimeInference, editedRegatta.controlTrackingFromStartAndFinishTimes, + editedRegatta.configuration, editedRegatta.circleRadius, editedRegatta.useStartTimeInference, editedRegatta.controlTrackingFromStartAndFinishTimes, new MarkedAsyncCallback(new AsyncCallback() { @Override public void onFailure(Throwable caught) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java index 4c424bd5b85..0f786614231 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java @@ -336,8 +336,9 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC List races = new ArrayList<>(raceColumnTable.getDataProvider().getList()); races.remove(raceColumnDTOAndFleetDTO); + double regattaHullLenghtCircleFactor = getSelectedRegatta() != null ? null : getSelectedRegatta().circleRadius; new CopyCourseAndCompetitorsDialog(sailingService, errorReporter, stringMessages, races, - leaderboardName, new DialogCallback() { + leaderboardName, regattaHullLenghtCircleFactor, new DialogCallback() { @Override public void ok(CourseAndCompetitorCopyOperation operation) { operation.perform(leaderboardName, raceColumnDTOAndFleetDTO, /* onSuccessCallback */ new Runnable() { @@ -618,7 +619,7 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC DeviceConfigurationDTO.RegattaConfigurationDTO configuration) { final RegattaIdentifier regattaIdentifier = new RegattaName(regatta.getName()); sailingService.updateRegatta(regattaIdentifier, regatta.startDate, regatta.endDate, - regatta.defaultCourseAreaUuid, configuration, regatta.useStartTimeInference, + regatta.defaultCourseAreaUuid, configuration, regatta.circleRadius, regatta.useStartTimeInference, regatta.controlTrackingFromStartAndFinishTimes, new MarkedAsyncCallback(new AsyncCallback() { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index edc40108a01..40b871e5474 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -215,7 +215,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS RegattaDTO createRegatta(String regattaName, String boatClassName, Date startDate, Date endDate, RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, boolean persistent, - ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, boolean useStartTimeInference, + ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetrics rankingMetricType); void removeRegatta(RegattaIdentifier regattaIdentifier); @@ -225,7 +225,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS void removeRegattas(Collection regattas); void updateRegatta(RegattaIdentifier regattaIdentifier, Date startDate, Date endDate, UUID defaultCourseAreaUuid, - RegattaConfigurationDTO regattaConfiguration, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes); + RegattaConfigurationDTO regattaConfiguration, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes); List addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName, List> columnNames); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 11109ad8e55..4ae811a3a4b 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -441,7 +441,7 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan void createRegatta(String regattaName, String boatClassName, Date startDate, Date endDate, RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, boolean persistent, - ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, boolean useStartTimeInference, + ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetrics rankingMetricType, AsyncCallback callback); @@ -528,7 +528,7 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan void storeSwissTimingArchiveConfiguration(String swissTimingUrl, AsyncCallback asyncCallback); void updateRegatta(RegattaIdentifier regattaIdentifier, Date startDate, Date endDate, UUID defaultCourseAreaUuid, - RegattaConfigurationDTO regattaConfiguration, boolean useStartTimeInference, + RegattaConfigurationDTO regattaConfiguration, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, AsyncCallback callback); /** diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index 5f5466ce28e..9accc9b9c55 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -1645,4 +1645,5 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, String notificationRegattaConfigurationUpdatedUsingByMarks(); String warningOverrideRegattaConfigurationCourseDesignerToByMarks(); String allRacesHaveBeenDenoted(); + String circleRadius(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index 57d018bf986..9b2cd8942ce 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -1617,4 +1617,5 @@ winningLanes=Winning lanes maximumNumberOfDiscards=Maximum number of discards notificationRegattaConfigurationUpdatedUsingByMarks=Active regatta configuration was set, using the "By Marks" course designer. warningOverrideRegattaConfigurationCourseDesignerToByMarks=Active regatta configuration already exists, but with the wrong course designer setting.\nWould you like to override course designer setting to "By Marks"? -allRacesHaveBeenDenoted=All races have been denoted for racelog tracking. \ No newline at end of file +allRacesHaveBeenDenoted=All races have been denoted for racelog tracking. +circleRadius=Circle radius \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapSettings.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapSettings.java index ac9929cc983..b2806fd119d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapSettings.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMapSettings.java @@ -17,6 +17,9 @@ public class RaceMapSettings extends AbstractSettings { public static final String PARAM_VIEW_SHOW_STREAMLETS = "viewShowStreamlets"; public static final String PARAM_VIEW_SHOW_STREAMLET_COLORS = "viewShowStreamletColors"; public static final String PARAM_VIEW_SHOW_SIMULATION = "viewShowSimulation"; + public static final String PARAM_VIEW_BUOY_ZONE_RADIUS = "regattaHullLenghtCircleFactor"; + + public static final double DEFAULT_BUOY_ZONE_RADIUS = 15; private final boolean showDouglasPeuckerPoints; @@ -61,6 +64,7 @@ public class RaceMapSettings extends AbstractSettings { /* showMapControls */ true, new RaceMapHelpLinesSettings(), /* windUp */ false, + /* showDouglasPeuckerPoints */ 0.0, /* showWindStreamletOverlay */ false, /* showWindStreamletColors */ false, /* showSimulationOverlay */ false); @@ -88,11 +92,11 @@ public class RaceMapSettings extends AbstractSettings { this.showDouglasPeuckerPoints = showDouglasPeuckerPoints; } - private RaceMapSettings(boolean showMapControls, boolean showCourseGeometry, boolean windUp, boolean showWindStreamletOverlay, boolean showWindStreamletColors, boolean showSimulationOverlay) { - this(showMapControls, new RaceMapHelpLinesSettings(createHelpLineSettings(showCourseGeometry)), windUp, showWindStreamletOverlay, showWindStreamletColors, showSimulationOverlay); + private RaceMapSettings(boolean showMapControls, boolean showCourseGeometry, boolean windUp, double buoyZoneRadiusInMeters, boolean showWindStreamletOverlay, boolean showWindStreamletColors, boolean showSimulationOverlay) { + this(showMapControls, new RaceMapHelpLinesSettings(createHelpLineSettings(showCourseGeometry)), windUp, buoyZoneRadiusInMeters, showWindStreamletOverlay, showWindStreamletColors, showSimulationOverlay); } - private RaceMapSettings(boolean showMapControls, RaceMapHelpLinesSettings helpLineSettings, boolean windUp, boolean showWindStreamletOverlay, boolean showWindStreamletColors, boolean showSimulationOverlay) { + private RaceMapSettings(boolean showMapControls, RaceMapHelpLinesSettings helpLineSettings, boolean windUp, double buoyZoneRadiusInMeters, boolean showWindStreamletOverlay, boolean showWindStreamletColors, boolean showSimulationOverlay) { this( new RaceMapZoomSettings(), helpLineSettings, @@ -100,7 +104,7 @@ public class RaceMapSettings extends AbstractSettings { /* hoverlineStrokeWeight as discussed with Stefan on 2015-12-08 */ 15, /* tailLengthInMilliseconds */ 100000l, /* windUp */ windUp, - /* buoyZoneRadiusInMeters */ 0.0, + /* buoyZoneRadiusInMeters */ buoyZoneRadiusInMeters, /* showOnlySelectedCompetitors */ false, /* showSelectedCompetitorsInfo */ true, /* showWindStreamletColors */ showWindStreamletColors, @@ -239,7 +243,8 @@ public class RaceMapSettings extends AbstractSettings { final boolean showWindStreamletOverlay = GwtHttpRequestUtils.getBooleanParameter(PARAM_VIEW_SHOW_STREAMLETS, defaultForViewShowStreamlets /* default */); final boolean showWindStreamletColors = GwtHttpRequestUtils.getBooleanParameter(PARAM_VIEW_SHOW_STREAMLET_COLORS, defaultForViewShowStreamletColors /* default */); final boolean showSimulationOverlay = GwtHttpRequestUtils.getBooleanParameter(PARAM_VIEW_SHOW_SIMULATION, defaultForViewShowSimulation /* default */); - return new RaceMapSettings(showMapControls, showCourseGeometry, windUp, showWindStreamletOverlay, showWindStreamletColors, showSimulationOverlay); + final double buoyZoneRadiusInMeters = GwtHttpRequestUtils.getDoubleParameter(PARAM_VIEW_BUOY_ZONE_RADIUS, 0.0 /* default */); + return new RaceMapSettings(showMapControls, showCourseGeometry, windUp, buoyZoneRadiusInMeters, showWindStreamletOverlay, showWindStreamletColors, showSimulationOverlay); } public Set getManeuverTypesToShow() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index daad9911bf1..89ccaa10ff0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -86,6 +86,7 @@ import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent; import com.sap.sse.gwt.client.shared.perspective.AbstractPerspectiveComposite; import com.sap.sse.gwt.client.shared.perspective.PerspectiveLifecycleWithAllSettings; import com.sap.sse.gwt.client.useragent.UserAgentDetails; +import com.sap.sse.gwt.shared.GwtHttpRequestUtils; import com.sap.sse.security.ui.authentication.generic.GenericAuthentication; import com.sap.sse.security.ui.authentication.view.AuthenticationMenuView; import com.sap.sse.security.ui.authentication.view.AuthenticationMenuViewImpl; @@ -202,11 +203,21 @@ public class RaceBoardPanel extends AbstractPerspectiveComposite(), getService())), false, - baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, + baseDomainFactory.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, RankingMetricsFactory.getRankingMetricConstructor(RankingMetrics.ONE_DESIGN)); // TODO: is course area relevant for swiss timing replay? } else { @@ -3919,7 +3921,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public void updateRegatta(RegattaIdentifier regattaName, Date startDate, Date endDate, UUID defaultCourseAreaUuid, - RegattaConfigurationDTO configurationDTO, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes) { + RegattaConfigurationDTO configurationDTO, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes) { Regatta regatta = getService().getRegatta(regattaName); if (regatta != null) { SecurityUtils.getSubject().checkPermission(Permission.REGATTA.getStringPermissionForObjects(Mode.UPDATE, regatta.getName())); @@ -3927,7 +3929,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S TimePoint startTimePoint = startDate != null ? new MillisecondsTimePoint(startDate) : null; TimePoint endTimePoint = endDate != null ? new MillisecondsTimePoint(endDate) : null; getService().apply(new UpdateSpecificRegatta(regattaName, startTimePoint, endTimePoint, - defaultCourseAreaUuid, convertToRegattaConfiguration(configurationDTO), useStartTimeInference, controlTrackingFromStartAndFinishTimes)); + defaultCourseAreaUuid, convertToRegattaConfiguration(configurationDTO), circleRadius, useStartTimeInference, controlTrackingFromStartAndFinishTimes)); } @Override @@ -4018,7 +4020,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S @Override public RegattaDTO createRegatta(String regattaName, String boatClassName, Date startDate, Date endDate, RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedal, - boolean persistent, ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, boolean useStartTimeInference, + boolean persistent, ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetrics rankingMetricType) { SecurityUtils.getSubject().checkPermission(Permission.REGATTA.getStringPermissionForObjects(Mode.CREATE, regattaName)); TimePoint startTimePoint = startDate != null ? new MillisecondsTimePoint(startDate) : null; @@ -4027,7 +4029,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S new AddSpecificRegatta( regattaName, boatClassName, startTimePoint, endTimePoint, UUID.randomUUID(), seriesNamesWithFleetNamesAndFleetOrderingAndMedal, - persistent, baseDomainFactory.createScoringScheme(scoringSchemeType), defaultCourseAreaId, useStartTimeInference, + persistent, baseDomainFactory.createScoringScheme(scoringSchemeType), defaultCourseAreaId, circleRadius, useStartTimeInference, controlTrackingFromStartAndFinishTimes, rankingMetricType)); return convertToRegattaDTO(regatta); } @@ -4239,12 +4241,16 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S String regattaName = getRegattaNameFromLeaderboard(leaderboard); if (leaderboard instanceof RegattaLeaderboard) { RegattaLeaderboard regattaLeaderboard = (RegattaLeaderboard) leaderboard; - BoatClass boatClass = regattaLeaderboard.getRegatta().getBoatClass(); - for (Series series : regattaLeaderboard.getRegatta().getSeries()) { + Regatta regatta = regattaLeaderboard.getRegatta(); + BoatClass boatClass = regatta.getBoatClass(); + Distance boatHullLength = boatClass.getHullLength(); + double buyZoneRadius = boatHullLength == null ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS + : boatHullLength.getMeters() * regatta.getCircleRadius(); + for (Series series : regatta.getSeries()) { Map> entriesPerFleet = new HashMap>(); for (RaceColumn raceColumn : series.getRaceColumns()) { getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, - usedCourseArea, leaderboard, boatClass.getName(), regattaName, series.getName(), raceColumn, entriesPerFleet); + usedCourseArea, leaderboard, boatClass.getName(), regattaName, buyZoneRadius, series.getName(), raceColumn, entriesPerFleet); } result.addAll(getRegattaOverviewEntriesToBeShown(showOnlyCurrentlyRunningRaces, entriesPerFleet)); } @@ -4255,10 +4261,13 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S boatClass = trackedRace.getRace().getBoatClass(); break; } + Distance boatHullLength = boatClass == null ? null : boatClass.getHullLength(); + double buyZoneRadius = boatHullLength == null ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS + : boatHullLength.getMeters() * Regatta.DEFAULT_HULL_LENGHT_FACTOR; Map> entriesPerFleet = new HashMap>(); for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, usedCourseArea, - leaderboard, boatClass == null ? "" : boatClass.getName(), regattaName, LeaderboardNameConstants.DEFAULT_SERIES_NAME, raceColumn, entriesPerFleet); + leaderboard, boatClass == null ? "" : boatClass.getName(), regattaName, buyZoneRadius, LeaderboardNameConstants.DEFAULT_SERIES_NAME, raceColumn, entriesPerFleet); } result.addAll(getRegattaOverviewEntriesToBeShown(showOnlyCurrentlyRunningRaces, entriesPerFleet)); } @@ -4270,7 +4279,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S SecurityUtils.getSubject().checkPermission(Permission.REGATTA.getStringPermissionForObjects(Mode.CREATE, regatta.getName())); this.createRegatta(regatta.getName(), regatta.boatClass.getName(), regatta.startDate, regatta.endDate, new RegattaCreationParametersDTO(getSeriesCreationParameters(regatta)), - true, regatta.scoringScheme, regatta.defaultCourseAreaUuid, regatta.useStartTimeInference, + true, regatta.scoringScheme, regatta.defaultCourseAreaUuid, regatta.circleRadius, regatta.useStartTimeInference, regatta.controlTrackingFromStartAndFinishTimes, regatta.rankingMetricType); } @@ -4399,12 +4408,12 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } private void getRegattaOverviewEntries(boolean showOnlyRacesOfSameDay, Calendar dayToCheck, - CourseArea courseArea, Leaderboard leaderboard, String boatClassName, String regattaName, String seriesName, RaceColumn raceColumn, + CourseArea courseArea, Leaderboard leaderboard, String boatClassName, String regattaName, double buyZoneRadius, String seriesName, RaceColumn raceColumn, Map> entriesPerFleet) { if (!raceColumn.isCarryForward()) { for (Fleet fleet : raceColumn.getFleets()) { RegattaOverviewEntryDTO entry = createRegattaOverviewEntryDTO(courseArea, - leaderboard, boatClassName, regattaName, seriesName, raceColumn, fleet, + leaderboard, boatClassName, regattaName, buyZoneRadius, seriesName, raceColumn, fleet, showOnlyRacesOfSameDay, dayToCheck); if (entry != null) { addRegattaOverviewEntryToEntriesPerFleet(entriesPerFleet, fleet, entry); @@ -4455,7 +4464,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S } private RegattaOverviewEntryDTO createRegattaOverviewEntryDTO(CourseArea courseArea, Leaderboard leaderboard, String boatClassName, - String regattaName, String seriesName, RaceColumn raceColumn, Fleet fleet, boolean showOnlyRacesOfSameDay, Calendar dayToCheck) { + String regattaName, double buyZoneRadius, String seriesName, RaceColumn raceColumn, Fleet fleet, boolean showOnlyRacesOfSameDay, Calendar dayToCheck) { RegattaOverviewEntryDTO entry = new RegattaOverviewEntryDTO(); if (courseArea != null) { entry.courseAreaName = courseArea.getName(); @@ -4469,7 +4478,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S entry.regattaName = leaderboard.getName(); entry.raceInfo = createRaceInfoDTO(seriesName, raceColumn, fleet); entry.currentServerTime = new Date(); - + entry.buyZoneRadius = buyZoneRadius; if (showOnlyRacesOfSameDay) { if (!RaceStateOfSameDayHelper.isRaceStateOfSameDay(entry.raceInfo.startTime, entry.raceInfo.finishedTime, entry.raceInfo.abortingTimeInPassBefore, dayToCheck)) { entry = null; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaDTO.java index 172ceb47351..e5f43336a86 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaDTO.java @@ -34,7 +34,8 @@ public class RegattaDTO extends NamedDTO { public boolean useStartTimeInference = true; public boolean controlTrackingFromStartAndFinishTimes = false; public RankingMetrics rankingMetricType; - + public double circleRadius; + public RegattaDTO() {} public RegattaDTO(String name, ScoringSchemeType scoringScheme) { @@ -64,6 +65,8 @@ public class RegattaDTO extends NamedDTO { this.configuration = other.configuration; this.useStartTimeInference = other.useStartTimeInference; this.controlTrackingFromStartAndFinishTimes = other.controlTrackingFromStartAndFinishTimes; + this.circleRadius = other.circleRadius; + } public Pair getSeriesAndFleet(RegattaAndRaceIdentifier raceIdentifier) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaOverviewEntryDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaOverviewEntryDTO.java index 8b589bd8207..3976b030f18 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaOverviewEntryDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/RegattaOverviewEntryDTO.java @@ -12,7 +12,8 @@ public class RegattaOverviewEntryDTO implements IsSerializable { public String regattaName; public String boatClassName; public Date currentServerTime; - + public double buyZoneRadius; + // for GWT serialization public RegattaOverviewEntryDTO() { } diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/AbstractTestStoringAndRetrievingRaceLogInRegatta.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/AbstractTestStoringAndRetrievingRaceLogInRegatta.java index 01e5911f9e0..e889fd3f354 100755 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/AbstractTestStoringAndRetrievingRaceLogInRegatta.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/AbstractTestStoringAndRetrievingRaceLogInRegatta.java @@ -62,7 +62,7 @@ public abstract class AbstractTestStoringAndRetrievingRaceLogInRegatta extends R List series = createSeriesForTestRegatta(); Regatta regatta = new RegattaImpl(getRaceLogStore(), getRegattaLogStore(), RegattaImpl.getDefaultName(regattaBaseName, boatClass == null ? null : boatClass.getName()), boatClass, /*startDate*/ null, /*endDate*/ null, series, persistent, scoringScheme, "123", - courseArea, /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + courseArea, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); return regatta; } diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java index a6d36025a81..8298be90591 100755 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java @@ -405,7 +405,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest regattaStartDate, regattaEndDate, /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, OneDesignRankingMetric::new); final String regattaName = regattaProxy.getName(); Regatta regatta = res.createRegatta(regattaName, regattaProxy.getBoatClass().getName(), regattaStartDate, regattaEndDate, - "123", regattaProxy.getSeries(), regattaProxy.isPersistent(), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + "123", regattaProxy.getSeries(), regattaProxy.isPersistent(), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); addRaceColumns(numberOfQualifyingRaces, numberOfFinalRaces, regatta); res.addRegattaLeaderboard(regatta.getRegattaIdentifier(), null, new int[] { 3, 5 }); DomainObjectFactory dof = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE); @@ -447,7 +447,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest Regatta regattaProxy = createRegatta(RegattaImpl.getDefaultName(regattaBaseName, boatClass.getName()), boatClass, regattaStartDate, regattaEndDate, /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, OneDesignRankingMetric::new); Regatta regatta = res.createRegatta(regattaProxy.getName(), regattaProxy.getBoatClass().getName(), regattaProxy.getStartDate(), regattaProxy.getEndDate(), - "123", regattaProxy.getSeries(), regattaProxy.isPersistent(), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + "123", regattaProxy.getSeries(), regattaProxy.isPersistent(), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); trackedRegatta[0] = new DynamicTrackedRegattaImpl(regatta); addRaceColumns(numberOfQualifyingRaces, numberOfFinalRaces, regatta); logColumnsInRegatta(regatta); diff --git a/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardGroupResourceTest.java b/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardGroupResourceTest.java index 451a2c62ba1..8a5b1b47c90 100644 --- a/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardGroupResourceTest.java +++ b/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardGroupResourceTest.java @@ -51,7 +51,8 @@ public class LeaderboardGroupResourceTest extends AbstractJaxRsApiTest { series.add(testSeries); regatta = racingEventService.createRegatta(RegattaImpl.getDefaultName(regattaName, boatClassName), boatClassName, /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), series, /*persistent*/ true, - DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /*circleRadius*/1.0, + /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); testSeries.addRaceColumn("R1", /* trackedRegattaRegistry */ null); testSeries.addRaceColumn("R2", /* trackedRegattaRegistry */ null); List competitors = createCompetitors(4); diff --git a/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardsResourceTest.java b/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardsResourceTest.java index aac730fbe7e..569ba676672 100644 --- a/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardsResourceTest.java +++ b/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardsResourceTest.java @@ -58,7 +58,8 @@ public class LeaderboardsResourceTest extends AbstractJaxRsApiTest { series.add(testSeries); regatta = racingEventService.createRegatta(RegattaImpl.getDefaultName(regattaBaseName, boatClassName), boatClassName, /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), series, /*persistent*/ true, - DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); testSeries.addRaceColumn("R1", /* trackedRegattaRegistry */ null); testSeries.addRaceColumn("R2", /* trackedRegattaRegistry */ null); List competitors = createCompetitors(4); diff --git a/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/RegattasResourceTest.java b/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/RegattasResourceTest.java index 3def955ee84..972629fa794 100644 --- a/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/RegattasResourceTest.java +++ b/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/RegattasResourceTest.java @@ -49,7 +49,7 @@ public class RegattasResourceTest extends AbstractJaxRsApiTest { series.add(testSeries); racingEventService.createRegatta(RegattaImpl.getDefaultName(regattaName, boatClassName), boatClassName, startDate, endDate, UUID.randomUUID(), series, /*persistent*/ true, - DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); testSeries.addRaceColumn("R1", /* trackedRegattaRegistry */ null); testSeries.addRaceColumn("R2", /* trackedRegattaRegistry */ null); } diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/AbstractLogReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/AbstractLogReplicationTest.java index e2bc42b0336..9a5cfd90ade 100644 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/AbstractLogReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/AbstractLogReplicationTest.java @@ -104,7 +104,7 @@ public abstract class AbstractLogReplicationTest series = Collections.emptyList(); Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName(baseEventName, boatClassName), boatClassName, /*startDate*/ null, /*endDate*/ null, regattaId, series, - /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, + /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); Iterable emptyWaypointList = Collections.emptyList(); final String competitorName = "Der mit dem Kiel zieht"; diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java index 02f55614501..f8b9234be8e 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/InitialLoadReplicationObjectIdentityTest.java @@ -123,7 +123,7 @@ public class InitialLoadReplicationObjectIdentityTest extends AbstractServerRepl final Iterable series = Collections.emptyList(); Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName(baseEventName, boatClassName), boatClassName, /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), series, - /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, + /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric.CONSTRUCTOR); assertNotNull(master.getRegatta(masterRegatta.getRegattaIdentifier())); assertTrue(master.getAllRegattas().iterator().hasNext()); diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RegattaReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RegattaReplicationTest.java index ea4382fd063..c71ecec4077 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RegattaReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RegattaReplicationTest.java @@ -46,7 +46,7 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { final UUID regattaId = UUID.randomUUID(); Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName(baseEventName, boatClassName), boatClassName, /*startDate*/ null, /*endDate*/ null, regattaId, series, - /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); Thread.sleep(1000); @@ -75,12 +75,12 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { UUID currentCourseAreaId = null; Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName("Kiel Week 2012", "49er"), "49er", /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), Collections.emptyList(), - /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), currentCourseAreaId, /* useStartTimeInference */ true, - /* /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); - + /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), currentCourseAreaId, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + // Test for 'null' master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, - currentCourseAreaId, null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); + currentCourseAreaId, null, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); Thread.sleep(1000); replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName())); assertNotNull(replicatedRegatta); @@ -89,7 +89,7 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { // Test for 'alpha' currentCourseAreaId = alphaCourseAreaId; master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, - currentCourseAreaId, null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); + currentCourseAreaId, null, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); Thread.sleep(1000); replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName())); assertNotNull(replicatedRegatta); @@ -98,7 +98,7 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { // Test for 'tv' currentCourseAreaId = tvCourseAreaId; master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, - currentCourseAreaId, null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); + currentCourseAreaId, null, /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); Thread.sleep(1000); replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName())); assertNotNull(replicatedRegatta); @@ -106,7 +106,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { // Test back to 'null' currentCourseAreaId = null; - master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, currentCourseAreaId, null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); + master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, currentCourseAreaId, null, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); Thread.sleep(1000); replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName())); assertNotNull(replicatedRegatta); @@ -124,7 +125,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { master.addCourseAreas(event.getId(), new String[] {"Golf"}, new UUID[] {golfCourseAreaId}); final String regattaName = RegattaImpl.getDefaultName("Kiel Week 2012", "49er"); Regatta masterRegatta = master.createRegatta(regattaName, "49er", /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), Collections.emptyList(), - /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), tvCourseAreaId, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), tvCourseAreaId, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event = master.getEvent(event.getId()); assertTrue(event.getRegattas().iterator().hasNext()); assertEquals(regattaName, event.getRegattas().iterator().next().getName()); @@ -133,7 +135,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { Iterator regattasInReplicatedEvent = replicatedEvent.getRegattas().iterator(); assertTrue(regattasInReplicatedEvent.hasNext()); assertEquals(regattaName, regattasInReplicatedEvent.next().getName()); - master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, golfCourseAreaId, null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); + master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, golfCourseAreaId, null, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); } @Test @@ -149,10 +152,12 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { UUID currentCourseAreaId = null; Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName("RR", "49er"), "49er", /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), Collections.emptyList(), - true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), currentCourseAreaId, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), currentCourseAreaId, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); // Test for 'null' - master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, currentCourseAreaId, null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); + master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, currentCourseAreaId, null, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); Thread.sleep(1000); replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName())); assertNotNull(replicatedRegatta); @@ -161,7 +166,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { // Test for values RegattaConfigurationImpl config = new RegattaConfigurationImpl(); config.setDefaultCourseDesignerMode(CourseDesignerMode.BY_MARKS); - master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, currentCourseAreaId, config, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); + master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, currentCourseAreaId, config, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false)); Thread.sleep(1000); replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName())); assertNotNull(replicatedRegatta); @@ -193,7 +199,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { Series medal = new SeriesImpl("Medal", /* isMedal */ true, /* isFleetsCanRunInParallel */ true, Arrays.asList(new Fleet[] { new FleetImpl("Medal") }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null); Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName(baseEventName, boatClassName), boatClassName, /*startDate*/ null, /*endDate*/ null, - UUID.randomUUID(), Arrays.asList(new Series[] { qualification, finals, medal }), /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + UUID.randomUUID(), Arrays.asList(new Series[] { qualification, finals, medal }), /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); Thread.sleep(1000); Regatta replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName())); assertNotNull(replicatedRegatta); @@ -228,7 +235,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { Series qualification = new SeriesImpl("Qualification", /* isMedal */ false, /* isFleetsCanRunInParallel */ true, Arrays.asList(new Fleet[] { new FleetImpl("Yellow"), new FleetImpl("Blue") }), emptyRaceColumnNamesList, /* trackedRegattaRegistry */ null); Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName(baseEventName, boatClassName), boatClassName, /*startDate*/ null, /*endDate*/ null, - UUID.randomUUID(), Arrays.asList(new Series[] { qualification }), /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + UUID.randomUUID(), Arrays.asList(new Series[] { qualification }), /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); Thread.sleep(1000); Regatta replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName())); assertNotNull(replicatedRegatta); @@ -273,7 +281,7 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName(baseEventName, boatClassName), boatClassName, /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), Arrays.asList(new Series[] { qualification }), /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, - /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); Thread.sleep(1000); Regatta replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName())); @@ -309,7 +317,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest { CourseArea masterCourseArea = master.addCourseAreas(masterEvent.getId(), new String[] {courseArea}, new UUID[] {UUID.randomUUID()})[0]; Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName(eventName, boatClassName), boatClassName, /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), series, - /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), masterCourseArea.getId(), /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), masterCourseArea.getId(), + /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); Thread.sleep(1000); Event replicatedEvent = replica.getEvent(masterEvent.getId()); assertNotNull(replicatedEvent); diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java index 852de012472..f843ba74898 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java @@ -210,8 +210,8 @@ public class MasterDataImportTest { UUID regattaUUID = UUID.randomUUID(); Regatta regatta = sourceService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, - /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event.addRegatta(regatta); for (String name : raceColumnNames) { series.get(0).addRaceColumn(name, sourceService); @@ -473,8 +473,8 @@ public class MasterDataImportTest { UUID regattaUUID = UUID.randomUUID(); Regatta regatta = sourceService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, - /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event.addRegatta(regatta); for (String name : raceColumnNames) { series.get(0).addRaceColumn(name, sourceService); @@ -631,8 +631,8 @@ public class MasterDataImportTest { series.add(new SeriesImpl("testSeries", false, /* isFleetsCanRunInParallel */ true, fleets, emptyRaceColumnNamesList, sourceService)); UUID regattaUUID = UUID.randomUUID(); Regatta regatta = sourceService.createRegatta(RegattaImpl.getDefaultName("testRegatta", "29er"), "29er", - /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event.addRegatta(regatta); for (String name : raceColumnNames) { series.get(0).addRaceColumn(name, sourceService); @@ -795,8 +795,8 @@ public class MasterDataImportTest { UUID regattaUUID = UUID.randomUUID(); Regatta regatta = sourceService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, - /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event.addRegatta(regatta); for (String name : raceColumnNames) { series.get(0).addRaceColumn(name, sourceService); @@ -955,8 +955,8 @@ public class MasterDataImportTest { UUID regattaUUID = UUID.randomUUID(); Regatta regatta = sourceService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, - /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event.addRegatta(regatta); for (String name : raceColumnNames) { series.get(0).addRaceColumn(name, sourceService); @@ -1069,8 +1069,8 @@ public class MasterDataImportTest { destService)); Regatta regattaNotToOverride = destService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, /* startDate */ - null, /* endDate */null, regattaUUID, seriesNotToOverride, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + null, /* endDate */null, regattaUUID, seriesNotToOverride, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event.addRegatta(regattaNotToOverride); for (String name : raceColumnNamesNotToOverride) { seriesNotToOverride.get(0).addRaceColumn(name, destService); @@ -1157,8 +1157,8 @@ public class MasterDataImportTest { UUID regattaUUID = UUID.randomUUID(); Regatta regatta = sourceService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, - /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event.addRegatta(regatta); for (String name : raceColumnNames) { series.get(0).addRaceColumn(name, sourceService); @@ -1267,8 +1267,8 @@ public class MasterDataImportTest { destService)); Regatta regattaToOverride = destService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, /* startDate */ - null, /* endDate */null, regattaUUID, seriesToOverride, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + null, /* endDate */null, regattaUUID, seriesToOverride, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event.addRegatta(regattaToOverride); for (String name : raceColumnNamesToOverride) { seriesToOverride.get(0).addRaceColumn(name, destService); @@ -1378,7 +1378,7 @@ public class MasterDataImportTest { Regatta regatta = sourceService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, /* startDate */ null, /* endDate */null, UUID.randomUUID(), new ArrayList(), true, new LowPoint(), - defaultCourseArea.getId(), /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + defaultCourseArea.getId(), /*circleRadius*/1.0, /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); // Let's use the setters directly because we are not testing replication RegattaConfigurationImpl configuration = new RegattaConfigurationImpl(); configuration.setDefaultCourseDesignerMode(CourseDesignerMode.BY_MAP); @@ -1460,7 +1460,7 @@ public class MasterDataImportTest { Regatta regatta = sourceService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), - defaultCourseArea.getId(), /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + defaultCourseArea.getId(), /*circleRadius*/1.0, /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); for (String name : raceColumnNames) { series.get(0).addRaceColumn(name, sourceService); } @@ -1593,8 +1593,8 @@ public class MasterDataImportTest { UUID regattaUUID = UUID.randomUUID(); Regatta regatta = sourceService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, - /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event.addRegatta(regatta); for (String name : raceColumnNames) { series.get(0).addRaceColumn(name, sourceService); @@ -1837,8 +1837,8 @@ public class MasterDataImportTest { UUID regattaUUID = UUID.randomUUID(); Regatta regatta = sourceService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, - /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + /* startDate */null, /* endDate */null, regattaUUID, series, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); event.addRegatta(regatta); for (String name : raceColumnNames) { series.get(0).addRaceColumn(name, sourceService); @@ -2068,8 +2068,8 @@ public class MasterDataImportTest { UUID regattaUUID = UUID.randomUUID(); Regatta regatta = sourceService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, /* startDate */ - null, /* endDate */null, regattaUUID, seriesOnSource, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */ - true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + null, /* endDate */null, regattaUUID, seriesOnSource, true, new LowPoint(), courseAreaUUID, /*circleRadius*/1.0, + /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); for (String name : raceColumnNames) { seriesOnSource.get(0).addRaceColumn(name, sourceService); } @@ -2197,7 +2197,7 @@ public class MasterDataImportTest { Regatta regattaOnTarget = destService.createRegatta( RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, /* startDate */null, /* endDate */null, regattaUUID, seriesOnTarget, true, new LowPoint(), - courseAreaUUID, /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); + courseAreaUUID, /*circleRadius*/1.0, /* useStartTimeInference */true, /* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new); raceColumnOnTarget.setTrackedRace(defaultFleetOnTarget, new DummyTrackedRace(raceId, competitors, regattaOnTarget, null, sourceService.getWindStore())); diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java index 2ad726747b6..76db677bf37 100755 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/SearchServiceTest.java @@ -141,7 +141,7 @@ public class SearchServiceTest { pfingstbusch29er = server.apply(new AddSpecificRegatta(RegattaImpl.getDefaultName("Pfingstbusch", "29er"), "29er", /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), new RegattaCreationParametersDTO(seriesCreationParams), /* persistent */ - true, new LowPoint(), kielAlpha.getId(), /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, RankingMetrics.ONE_DESIGN)); + true, new LowPoint(), kielAlpha.getId(), /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, RankingMetrics.ONE_DESIGN)); server.apply(new AddColumnToSeries(pfingstbusch29er.getRegattaIdentifier(), "Default", "R1")); server.apply(new AddColumnToSeries(pfingstbusch29er.getRegattaIdentifier(), "Default", "R2")); server.apply(new AddColumnToSeries(pfingstbusch29er.getRegattaIdentifier(), "Default", "R3")); @@ -149,7 +149,7 @@ public class SearchServiceTest { /* leaderboardDisplayName */ null, /* discardThresholds */ new int[0])); pfingstbusch470 = server.apply(new AddSpecificRegatta(RegattaImpl.getDefaultName("Pfingstbusch", "470"), "470", /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), new RegattaCreationParametersDTO(seriesCreationParams), /* persistent */ - true, new LowPoint(), kielBravo.getId(), /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, RankingMetrics.ONE_DESIGN)); + true, new LowPoint(), kielBravo.getId(), /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, RankingMetrics.ONE_DESIGN)); server.apply(new AddColumnToSeries(pfingstbusch470.getRegattaIdentifier(), "Default", "R1")); server.apply(new AddColumnToSeries(pfingstbusch470.getRegattaIdentifier(), "Default", "R2")); server.apply(new AddColumnToSeries(pfingstbusch470.getRegattaIdentifier(), "Default", "R3")); @@ -172,7 +172,7 @@ public class SearchServiceTest { aalRegatta = server.apply(new AddSpecificRegatta(RegattaImpl.getDefaultName("Aalregatta", "ORC"), "ORC", /*startDate*/ null, /*endDate*/ null, UUID.randomUUID(), new RegattaCreationParametersDTO(seriesCreationParams), /* persistent */ - true, new LowPoint(), flensburgStandard.getId(), /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, RankingMetrics.ONE_DESIGN)); + true, new LowPoint(), flensburgStandard.getId(), /*circleRadius*/1.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false, RankingMetrics.ONE_DESIGN)); server.apply(new AddColumnToSeries(aalRegatta.getRegattaIdentifier(), "Default", "R1")); server.apply(new AddColumnToSeries(aalRegatta.getRegattaIdentifier(), "Default", "R2")); RegattaLeaderboard aalRegattaLeaderboard = server.apply(new CreateRegattaLeaderboard(aalRegatta.getRegattaIdentifier(), diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java index b22b1c6cabe..e86e696746a 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/RacingEventService.java @@ -314,12 +314,12 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch * @param controlTrackingFromStartAndFinishTimes TODO */ Regatta createRegatta(String regattaName, String boatClassName, TimePoint startDate, TimePoint endDate, Serializable id, Iterable series, - boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId, + boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetricConstructor rankingMetricConstructor); Regatta updateRegatta(RegattaIdentifier regattaIdentifier, TimePoint startDate, TimePoint endDate, Serializable newDefaultCourseAreaId, RegattaConfiguration regattaConfiguration, - Iterable series, boolean useStartTimeInference, + Iterable series, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes); /** @@ -465,7 +465,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch Util.Pair getOrCreateRegattaWithoutReplication(String fullRegattaName, String boatClassName, TimePoint startDate, TimePoint endDate, Serializable id, Iterable series, boolean persistent, ScoringScheme scoringScheme, - Serializable defaultCourseAreaId, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetricConstructor rankingMetricConstructor); + Serializable defaultCourseAreaId, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetricConstructor rankingMetricConstructor); /** * @return map where keys are the toString() representation of the {@link RaceDefinition#getId() IDs} of races passed to diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index f9f913c2e1b..84027442beb 100644 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -1247,11 +1247,11 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes @Override public Regatta createRegatta(String fullRegattaName, String boatClassName, TimePoint startDate, TimePoint endDate, Serializable id, Iterable series, boolean persistent, ScoringScheme scoringScheme, - Serializable defaultCourseAreaId, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, + Serializable defaultCourseAreaId, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetricConstructor rankingMetricConstructor) { com.sap.sse.common.Util.Pair regattaWithCreatedFlag = getOrCreateRegattaWithoutReplication( fullRegattaName, boatClassName, startDate, endDate, id, series, persistent, scoringScheme, - defaultCourseAreaId, useStartTimeInference, controlTrackingFromStartAndFinishTimes, rankingMetricConstructor); + defaultCourseAreaId, circleRadius, useStartTimeInference, controlTrackingFromStartAndFinishTimes, rankingMetricConstructor); Regatta regatta = regattaWithCreatedFlag.getA(); if (regattaWithCreatedFlag.getB()) { onRegattaLikeAdded(regatta); @@ -1284,12 +1284,12 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes public com.sap.sse.common.Util.Pair getOrCreateRegattaWithoutReplication(String fullRegattaName, String boatClassName, TimePoint startDate, TimePoint endDate, Serializable id, Iterable series, boolean persistent, ScoringScheme scoringScheme, - Serializable defaultCourseAreaId, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, + Serializable defaultCourseAreaId, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetricConstructor rankingMetricConstructor) { CourseArea courseArea = getCourseArea(defaultCourseAreaId); Regatta regatta = new RegattaImpl(getRaceLogStore(), getRegattaLogStore(), fullRegattaName, getBaseDomainFactory().getOrCreateBoatClass(boatClassName), startDate, endDate, series, persistent, - scoringScheme, id, courseArea, useStartTimeInference, controlTrackingFromStartAndFinishTimes, rankingMetricConstructor); + scoringScheme, id, courseArea, circleRadius, useStartTimeInference, controlTrackingFromStartAndFinishTimes, rankingMetricConstructor); boolean wasCreated = addAndConnectRegatta(persistent, defaultCourseAreaId, regatta); if (wasCreated) { logger.info("Created regatta " + regatta.getName() + " (" + hashCode() + ") on " + this); @@ -1470,7 +1470,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes replicate(new AddSpecificRegatta(regatta.getName(), regatta.getBoatClass() == null ? null : regatta .getBoatClass().getName(), regatta.getStartDate(), regatta.getEndDate(), regatta.getId(), getSeriesWithoutRaceColumnsConstructionParametersAsMap(regatta), regatta.isPersistent(), - regatta.getScoringScheme(), courseAreaId, regatta.useStartTimeInference(), regatta.isControlTrackingFromStartAndFinishTimes(), + regatta.getScoringScheme(), courseAreaId, regatta.getCircleRadius(), regatta.useStartTimeInference(), regatta.isControlTrackingFromStartAndFinishTimes(), regatta.getRankingMetricType())); RegattaIdentifier regattaIdentifier = regatta.getRegattaIdentifier(); for (RaceDefinition race : regatta.getAllRaces()) { @@ -2152,7 +2152,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes @Override public Regatta updateRegatta(RegattaIdentifier regattaIdentifier, TimePoint startDate, TimePoint endDate, Serializable newDefaultCourseAreaId, RegattaConfiguration newRegattaConfiguration, - Iterable series, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes) { + Iterable series, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes) { // We're not doing any renaming of the regatta itself, therefore we don't have to sync on the maps. Regatta regatta = getRegatta(regattaIdentifier); CourseArea newCourseArea = getCourseArea(newDefaultCourseAreaId); @@ -2161,6 +2161,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes } regatta.setStartDate(startDate); regatta.setEndDate(endDate); + regatta.setCircleRadius(circleRadius); regatta.setControlTrackingFromStartAndFinishTimes(controlTrackingFromStartAndFinishTimes); if (regatta.useStartTimeInference() != useStartTimeInference) { regatta.setUseStartTimeInference(useStartTimeInference); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AddSpecificRegatta.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AddSpecificRegatta.java index 4644545e764..d1365460285 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AddSpecificRegatta.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/AddSpecificRegatta.java @@ -29,13 +29,14 @@ public class AddSpecificRegatta extends AbstractAddRegattaOperation { private final boolean persistent; private final ScoringScheme scoringScheme; private final Serializable defaultCourseAreaId; + private final double circleRadius; private final boolean useStartTimeInference; private final boolean controlTrackingFromStartAndFinishTimes; private final RankingMetrics rankingMetricType; public AddSpecificRegatta(String regattaName, String boatClassName, TimePoint startDate, TimePoint endDate, Serializable id, RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedalAndDiscardingThresholds, - boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId, boolean useStartTimeInference, + boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId, double circleRadius, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetrics rankingMetricType) { super(regattaName, boatClassName, startDate, endDate, id); this.seriesNamesWithFleetNamesAndFleetOrderingAndMedalAndStartsWithZeroScoreAndDiscardingThresholds = seriesNamesWithFleetNamesAndFleetOrderingAndMedalAndDiscardingThresholds; @@ -45,12 +46,13 @@ public class AddSpecificRegatta extends AbstractAddRegattaOperation { this.useStartTimeInference = useStartTimeInference; this.controlTrackingFromStartAndFinishTimes = controlTrackingFromStartAndFinishTimes; this.rankingMetricType = rankingMetricType; + this.circleRadius = circleRadius; } @Override public Regatta internalApplyTo(RacingEventService toState) throws Exception { Regatta regatta = toState.createRegatta(getRegattaName(), getBoatClassName(), getStartDate(), getEndDate(), getId(), createSeries(toState), - persistent, scoringScheme, defaultCourseAreaId, useStartTimeInference, controlTrackingFromStartAndFinishTimes, RankingMetricsFactory.getRankingMetricConstructor(rankingMetricType)); + persistent, scoringScheme, defaultCourseAreaId, circleRadius, useStartTimeInference, controlTrackingFromStartAndFinishTimes, RankingMetricsFactory.getRankingMetricConstructor(rankingMetricType)); return regatta; } diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateSpecificRegatta.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateSpecificRegatta.java index b6ca415e563..d20aa20074e 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateSpecificRegatta.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/UpdateSpecificRegatta.java @@ -15,13 +15,14 @@ public class UpdateSpecificRegatta extends AbstractRacingEventServiceOperation