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 3a6cb5b8c7a..f0bac0d15e1 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 @@ -447,12 +447,12 @@ public class MockedTrackedRace implements DynamicTrackedRace { } @Override - public double getHullLengthRadiusFactor(){ + public Double getHullLengthRadiusFactor(){ return 1.0; } @Override - public void setHullLengthRadiusFactor(double hullLengthRadiusFactor){ + public void setHullLengthRadiusFactor(Double hullLengthRadiusFactor){ } @Override 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 63bb890f4ff..84abdb81054 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 @@ -162,9 +162,9 @@ public interface Regatta extends NamedWithID, IsRegattaLike, HasRaceColumnsAndRe * Define the value which would be multipled by hull length from {@link BoatClass}. * Next the calculated value {@link RegattaUtil} would be used to fill out radius of buoy on race map setting. */ - public double getHullLengthRadiusFactor(); + public Double getHullLengthRadiusFactor(); - public void setHullLengthRadiusFactor(double hullLengthRadiusFactor); + public void setHullLengthRadiusFactor(Double hullLengthRadiusFactor); /** * When there is no race committee app in place and no operator is managing the race start times for 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 46a870143e7..a0b6df51e74 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,7 +115,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene private transient RaceLogStore raceLogStore; private final IsRegattaLike regattaLikeHelper; private final RankingMetricConstructor rankingMetricConstructor; - private double hullLengthRadiusFactor; + private Double hullLengthRadiusFactor; private CourseArea defaultCourseArea; private RegattaConfiguration configuration; @@ -216,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, double hullLengthRadiusFactor, boolean useStartTimeInference, + ScoringScheme scoringScheme, Serializable id, CourseArea courseArea, Double hullLengthRadiusFactor, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetricConstructor rankingMetricConstructor) { super(name); this.rankingMetricConstructor = rankingMetricConstructor; @@ -575,12 +575,12 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene } @Override - public double getHullLengthRadiusFactor() { + public Double getHullLengthRadiusFactor() { return hullLengthRadiusFactor; } @Override - public void setHullLengthRadiusFactor(double hullLengthRadiusFactor) { + public void setHullLengthRadiusFactor(Double hullLengthRadiusFactor) { this.hullLengthRadiusFactor = hullLengthRadiusFactor; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/util/RegattaUtil.java b/java/com.sap.sailing.domain/src/com/sap/sailing/util/RegattaUtil.java index f0b7ab07fc2..9140629822a 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/util/RegattaUtil.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/util/RegattaUtil.java @@ -8,9 +8,9 @@ public class RegattaUtil { public static final double DEFAULT_BUOY_ZONE_RADIUS = 15; - public static double getCalculatedRegattaBuoyZoneRadius(Regatta regatta, BoatClass boatClass) { + public static double getCalculatedRegattaBuoyZoneRadiusInMeters(Regatta regatta, BoatClass boatClass) { double hullLengthRadiusFactor = Regatta.DEFAULT_HULL_LENGHT_FACTOR; - if (regatta != null) { + if (regatta != null && regatta.getHullLengthRadiusFactor() != null) { hullLengthRadiusFactor = regatta.getHullLengthRadiusFactor(); } 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 08567460d40..45883f494a6 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,7 +18,7 @@ public class RegattaMetadataDTO extends RegattaReferenceDTO implements HasRegatt private RegattaState state; private boolean flexibleLeaderboard; private RaceDataInfo raceDataInfo; - private double buoyZoneRadius; + private double buoyZoneRadiusInMeters; public RegattaMetadataDTO() { } @@ -124,12 +124,12 @@ public class RegattaMetadataDTO extends RegattaReferenceDTO implements HasRegatt this.raceDataInfo = raceDataInfo; } - public double getBuoyZoneRadius() { - return buoyZoneRadius; + public double getBuoyZoneRadiusInMeters() { + return buoyZoneRadiusInMeters; } - public void setBuoyZoneRadius(double buoyZoneRadius) { - this.buoyZoneRadius = buoyZoneRadius; + public void setBuoyZoneRadiusInMeters(double buoyZoneRadiusInMeters) { + this.buoyZoneRadiusInMeters = buoyZoneRadiusInMeters; } /** 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 e8ca8bf85ec..39c16648391 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 @@ -181,17 +181,17 @@ 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_BUOY_ZONE_RADIUS, String.valueOf(getRegattaBuoyZoneRadius(regattaName))); + linkParams.put(RaceMapSettings.PARAM_BUOY_ZONE_RADIUS_IN_METERS, String.valueOf(getRegattaBuoyZoneRadius(regattaName))); return linkParams; } private double getRegattaBuoyZoneRadius(String regattaName) { for (RegattaMetadataDTO regatta : eventDTO.getRegattas()) { if (regattaName != null && regattaName.equals(regatta.getId())) { - return regatta.getBuoyZoneRadius(); + return regatta.getBuoyZoneRadiusInMeters(); } } - return RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS; + return RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS_IN_METERS; } @Override 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 78f5417c100..5f25e27d011 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 @@ -275,19 +275,19 @@ public abstract class AbstractEventActivity ex } linkParams.put("raceName", trackedRaceName); linkParams.put("regattaName", regattaName); - linkParams.put(RaceMapSettings.PARAM_BUOY_ZONE_RADIUS, String.valueOf(getRegattaBuoyZoneRadius(regattaName))); + linkParams.put(RaceMapSettings.PARAM_BUOY_ZONE_RADIUS_IN_METERS, String.valueOf(getRegattaBuoyZoneRadiusInMeters(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) { + private double getRegattaBuoyZoneRadiusInMeters(String regattaName) { for (RegattaMetadataDTO regatta : eventDTO.getRegattas()) { if (regattaName != null && regattaName.equals(regatta.getId())) { - return regatta.getBuoyZoneRadius(); + return regatta.getBuoyZoneRadiusInMeters(); } } - return RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS; + return RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS_IN_METERS; } public String getRegattaId() { 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 2f954c304d1..e95ceecbeec 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 @@ -250,13 +250,13 @@ public class LeaderboardContext { RegattaRaceDataInfoCalculator regattaRaceDataInfoCalculator = new RegattaRaceDataInfoCalculator(); forRaces(regattaRaceDataInfoCalculator); regattaDTO.setRaceDataInfo(regattaRaceDataInfoCalculator.getRaceDataInfo()); - regattaDTO.setBuoyZoneRadius(getRegattaBuoyZoneRadius()); + regattaDTO.setBuoyZoneRadiusInMeters(getRegattaBuoyZoneRadiusInMeters()); } - private double getRegattaBuoyZoneRadius() { + private double getRegattaBuoyZoneRadiusInMeters() { Regatta regatta = service.getRegattaByName(getLeaderboardName()); BoatClass boatClass = HomeServiceUtil.getBoatClass(leaderboard); - double boatHullLength = RegattaUtil.getCalculatedRegattaBuoyZoneRadius(regatta, boatClass); + double boatHullLength = RegattaUtil.getCalculatedRegattaBuoyZoneRadiusInMeters(regatta, boatClass); return boatHullLength; } 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 799a9811186..d0453f5dcf1 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 @@ -934,7 +934,7 @@ 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_BUOY_ZONE_RADIUS, String.valueOf(entryDTO.buyZoneRadius)); + raceLinkParameters.put(RaceMapSettings.PARAM_BUOY_ZONE_RADIUS_IN_METERS, String.valueOf(entryDTO.buyZoneRadius)); return EntryPointLinkFactory.createRaceBoardLink(raceLinkParameters); } 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 a4f35440194..42ebc5905ea 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 @@ -192,9 +192,9 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement raceColumnTable.setSelectedLeaderboardName(getSelectedLeaderboardName()); RegattaDTO regatta = getSelectedRegatta(); - double buoyZoneRadius = regatta == null ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS - : regatta.getCalculatedBuoyZoneRadius(); - raceColumnTable.setSelectedRegattaHullLenghtCircleFactor(buoyZoneRadius); + double buoyZoneRadius = regatta == null ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS_IN_METERS + : regatta.getCalculatedBuoyZoneRadiusInMeters(); + raceColumnTable.setSelectedBuoyZoneRadiusInMeters(buoyZoneRadius); } }); 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 b553f24d3ee..435215ee03f 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 @@ -27,7 +27,7 @@ public class CopyCourseAndCompetitorsDialog extends DataEntryDialog races, - String leaderboardName, double regattaHullLenghtCircleFactor, DialogCallback dialogCallback) { + String leaderboardName, double buoyZoneRadiusInMeters, DialogCallback dialogCallback) { super(stringMessages.selectRaces(), stringMessages.selectRaces(), stringMessages.ok(), stringMessages.cancel(), new Validator() { @Override @@ -41,7 +41,7 @@ public class CopyCourseAndCompetitorsDialog extends DataEntryDialog>( sailingService, stringMessages, errorReporter, /* multiSelection */ true); racesTable.setSelectedLeaderboardName(leaderboardName); - racesTable.setSelectedRegattaHullLenghtCircleFactor(regattaHullLenghtCircleFactor); + racesTable.setSelectedBuoyZoneRadiusInMeters(buoyZoneRadiusInMeters); racesTable.getDataProvider().getList().addAll(races); racesTable.getSelectionModel().addSelectionChangeHandler(new Handler() { @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 ade3b54b228..bd5bad9a8cf 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 @@ -26,7 +26,7 @@ public class RaceTableWrapper { private final AnchorTemplates ANCHORTEMPLATE = GWT.create(AnchorTemplates.class); private String selectedLeaderboardName; - private double selectedRegattaHullLenghtCircleFactor; + private double selectedBuoyZoneRadiusInMeters; public RaceTableWrapper(SailingServiceAsync sailingService, StringMessages stringMessages, ErrorReporter errorReporter, boolean multiSelection) { @@ -54,7 +54,7 @@ extends TableWrapper { .getA().getRaceIdentifier(raceInLeaderboardDTOAndFleetName.getB()); Map params = new HashMap<>(); params.put("leaderboardName", selectedLeaderboardName); - params.put(RaceMapSettings.PARAM_BUOY_ZONE_RADIUS, String.valueOf(selectedRegattaHullLenghtCircleFactor)); + params.put(RaceMapSettings.PARAM_BUOY_ZONE_RADIUS_IN_METERS, String.valueOf(selectedBuoyZoneRadiusInMeters)); params.put("regattaName", raceIdentifier.getRegattaName()); params.put("raceName", raceIdentifier.getRaceName()); params.put("canReplayDuringLiveRaces", "true"); @@ -93,7 +93,7 @@ extends TableWrapper { this.selectedLeaderboardName = name; } - public void setSelectedRegattaHullLenghtCircleFactor(double selectedRegattaHullLenghtCircleFactor) { - this.selectedRegattaHullLenghtCircleFactor = selectedRegattaHullLenghtCircleFactor; + public void setSelectedBuoyZoneRadiusInMeters(double selectedBuoyZoneRadiusInMeters) { + this.selectedBuoyZoneRadiusInMeters = selectedBuoyZoneRadiusInMeters; } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsCreateDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsCreateDialog.java index 92aa91d0c2b..bec8aa86bac 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsCreateDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsCreateDialog.java @@ -73,6 +73,10 @@ public class RegattaWithSeriesAndFleetsCreateDialog extends RegattaWithSeriesAnd errorMessage = stringMessages.regattaWithThisNameAlreadyExists(); } + if (regattaToValidate.hullLengthRadiusFactor == null) { + errorMessage = stringMessages.incorrectValueForRegattaHullLengthRadiusFactor(); + } + if (errorMessage == null) { List seriesToValidate = regattaToValidate.series; int index = 0; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsEditDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsEditDialog.java index 65034bd10a8..439198fc283 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsEditDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaWithSeriesAndFleetsEditDialog.java @@ -25,10 +25,27 @@ public class RegattaWithSeriesAndFleetsEditDialog extends RegattaWithSeriesAndFl private RegattaConfigurationDTO currentRegattaConfiguration; + protected static class RegattaParameterValidator implements Validator { + private StringMessages stringMessages; + + public RegattaParameterValidator(StringMessages stringMessages) { + this.stringMessages = stringMessages; + } + + @Override + public String getErrorMessage(RegattaDTO regattaToValidate) { + String errorMessage = null; + if (regattaToValidate.hullLengthRadiusFactor == null) { + errorMessage = stringMessages.incorrectValueForRegattaHullLengthRadiusFactor(); + } + return errorMessage; + } + } + public RegattaWithSeriesAndFleetsEditDialog(RegattaDTO regatta, Collection existingRegattas, List existingEvents, EventDTO correspondingEvent, final StringMessages stringMessages, DialogCallback callback) { super(regatta, regatta.series, existingEvents, correspondingEvent, stringMessages.editRegatta(), stringMessages.ok(), stringMessages, - null, callback); + new RegattaParameterValidator(stringMessages), callback); ensureDebugId("RegattaWithSeriesAndFleetsEditDialog"); currentRegattaConfiguration = regatta.configuration; 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 29f6aca06fd..85b5fb4fe92 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 @@ -49,6 +49,7 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.shared.controls.FlushableCellTable; import com.sap.sailing.gwt.ui.client.shared.controls.SelectionCheckboxColumn; +import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings; import com.sap.sailing.gwt.ui.shared.ControlPointDTO; import com.sap.sailing.gwt.ui.shared.DeviceConfigurationDTO; import com.sap.sailing.gwt.ui.shared.EventDTO; @@ -336,9 +337,11 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC List races = new ArrayList<>(raceColumnTable.getDataProvider().getList()); races.remove(raceColumnDTOAndFleetDTO); - double regattaHullLenghtCircleFactor = getSelectedRegatta() != null ? null : getSelectedRegatta().hullLengthRadiusFactor; + double buoyZoneRadiusInMeters = getSelectedRegatta() == null + ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS_IN_METERS + : getSelectedRegatta().getCalculatedBuoyZoneRadiusInMeters(); new CopyCourseAndCompetitorsDialog(sailingService, errorReporter, stringMessages, races, - leaderboardName, regattaHullLenghtCircleFactor, new DialogCallback() { + leaderboardName, buoyZoneRadiusInMeters, new DialogCallback() { @Override public void ok(CourseAndCompetitorCopyOperation operation) { operation.perform(leaderboardName, raceColumnDTOAndFleetDTO, /* onSuccessCallback */ new Runnable() { 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 a896459ce6b..0005290e88d 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, double hullLengthRadiusFactor, boolean useStartTimeInference, + ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, Double hullLengthRadiusFactor, 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, double hullLengthRadiusFactor, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes); + RegattaConfigurationDTO regattaConfiguration, Double hullLengthRadiusFactor, 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 bc202f927b1..b0a769a65aa 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, double hullLengthRadiusFactor, boolean useStartTimeInference, + ScoringSchemeType scoringSchemeType, UUID defaultCourseAreaId, Double hullLengthRadiusFactor, 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, double hullLengthRadiusFactor, boolean useStartTimeInference, + RegattaConfigurationDTO regattaConfiguration, Double hullLengthRadiusFactor, 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 bb579e5d69e..e664b6cc420 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 @@ -1740,4 +1740,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, String lastFix(); String filterDeviceMappings(); String hullLengthRadiusFactor(); + + String incorrectValueForRegattaHullLengthRadiusFactor(); } 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 3a84d759db5..780f28359f6 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 @@ -1712,4 +1712,5 @@ strategySimulatorReadMore=Learn More impressum=Imprint lastFix=Last fix filterDeviceMappings=Filter device mappings -hullLengthRadiusFactor=Hull length radius factor \ No newline at end of file +hullLengthRadiusFactor=Hull length radius factor +incorrectValueForRegattaHullLengthRadiusFactor=Incorrect value for "Hull length radius factor" \ 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 4f9cf75b291..1a30e1b8097 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,9 +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_BUOY_ZONE_RADIUS = "buoyZoneRadius"; + public static final String PARAM_BUOY_ZONE_RADIUS_IN_METERS = "buoyZoneRadiusInMeters"; - public static final double DEFAULT_BUOY_ZONE_RADIUS = 15; + public static final double DEFAULT_BUOY_ZONE_RADIUS_IN_METERS = 15; private final boolean showDouglasPeuckerPoints; @@ -64,7 +64,7 @@ public class RaceMapSettings extends AbstractSettings { /* showMapControls */ true, new RaceMapHelpLinesSettings(), /* windUp */ false, - /* buoyZoneRadiusInMeters */ DEFAULT_BUOY_ZONE_RADIUS, + /* buoyZoneRadiusInMeters */ DEFAULT_BUOY_ZONE_RADIUS_IN_METERS, /* showWindStreamletOverlay */ false, /* showWindStreamletColors */ false, /* showSimulationOverlay */ false); @@ -243,7 +243,7 @@ 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 */); - final double buoyZoneRadiusInMeters = GwtHttpRequestUtils.getDoubleParameter(PARAM_BUOY_ZONE_RADIUS, 0.0 /* default */); + final double buoyZoneRadiusInMeters = GwtHttpRequestUtils.getDoubleParameter(PARAM_BUOY_ZONE_RADIUS_IN_METERS, DEFAULT_BUOY_ZONE_RADIUS_IN_METERS /* default */); return new RaceMapSettings(showMapControls, showCourseGeometry, windUp, buoyZoneRadiusInMeters, showWindStreamletOverlay, showWindStreamletColors, showSimulationOverlay); } 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 7c8a294ae6d..8b82a971329 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 @@ -208,7 +208,7 @@ public class RaceBoardPanel extends AbstractPerspectiveComposite> entriesPerFleet = new HashMap>(); for (RaceColumn raceColumn : series.getRaceColumns()) { @@ -4252,7 +4252,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S boatClass = trackedRace.getRace().getBoatClass(); break; } - double buyZoneRadius = RegattaUtil.getCalculatedRegattaBuoyZoneRadius(null, boatClass); + double buyZoneRadius = RegattaUtil.getCalculatedRegattaBuoyZoneRadiusInMeters(null, boatClass); Map> entriesPerFleet = new HashMap>(); for (RaceColumn raceColumn : leaderboard.getRaceColumns()) { getRegattaOverviewEntries(showOnlyRacesOfSameDay, dayToCheck, usedCourseArea, 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 238765682ee..cba2085eb9a 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 @@ -5,6 +5,7 @@ import java.util.Date; import java.util.List; import java.util.UUID; +import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.common.RankingMetrics; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaIdentifier; @@ -35,7 +36,7 @@ public class RegattaDTO extends NamedDTO { public boolean useStartTimeInference = true; public boolean controlTrackingFromStartAndFinishTimes = false; public RankingMetrics rankingMetricType; - public double hullLengthRadiusFactor; + public Double hullLengthRadiusFactor; public RegattaDTO() {} @@ -124,9 +125,10 @@ public class RegattaDTO extends NamedDTO { return false; } - public double getCalculatedBuoyZoneRadius() { - double boatHullLength = boatClass == null ? 0.0 : boatClass.getHullLengthInMeters(); - return boatHullLength == 0.0 ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS : (boatHullLength * hullLengthRadiusFactor); + public double getCalculatedBuoyZoneRadiusInMeters() { + Double boatHullLength = boatClass == null ? null : boatClass.getHullLengthInMeters(); + double hullLengthFactor = this.hullLengthRadiusFactor == null ? Regatta.DEFAULT_HULL_LENGHT_FACTOR : this.hullLengthRadiusFactor; + return boatHullLength == null ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS_IN_METERS : (boatHullLength * hullLengthFactor); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java index 4d464e591e5..7653abb1387 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/LeaderboardGroupPanel.java @@ -434,18 +434,18 @@ public class LeaderboardGroupPanel extends SimplePanel implements HasWelcomeWidg Boolean.toString(showNavigationPanel)); linkParams.put("regattaName", raceIdentifier.getRegattaName()); linkParams.put("leaderboardGroupName", leaderboardGroup.getName()); - linkParams.put(RaceMapSettings.PARAM_BUOY_ZONE_RADIUS, - String.valueOf(getRegattaBuoyZoneRadius(raceIdentifier.getRegattaName()))); + linkParams.put(RaceMapSettings.PARAM_BUOY_ZONE_RADIUS_IN_METERS, + String.valueOf(getRegattaBuoyZoneRadiusInMeters(raceIdentifier.getRegattaName()))); if (viewMode != null && !viewMode.isEmpty()) { linkParams.put("viewMode", viewMode); } return linkParams; } - private double getRegattaBuoyZoneRadius(String regattaName) { + private double getRegattaBuoyZoneRadiusInMeters(String regattaName) { RegattaDTO regatta = regattasByName.get(regattaName); - double buoyZoneRadius = regatta == null ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS - : regatta.getCalculatedBuoyZoneRadius(); + double buoyZoneRadius = regatta == null ? RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS_IN_METERS + : regatta.getCalculatedBuoyZoneRadiusInMeters(); return buoyZoneRadius; } 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 429582fa1e3..d9a5ad1bac1 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, double hullLengthRadiusFactor, + boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId, Double hullLengthRadiusFactor, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetricConstructor rankingMetricConstructor); Regatta updateRegatta(RegattaIdentifier regattaIdentifier, TimePoint startDate, TimePoint endDate, Serializable newDefaultCourseAreaId, RegattaConfiguration regattaConfiguration, - Iterable series, double hullLengthRadiusFactor, boolean useStartTimeInference, + Iterable series, Double hullLengthRadiusFactor, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes); /** 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 1fd4f595547..f2b6b964098 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 @@ -1239,7 +1239,7 @@ 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, double hullLengthRadiusFactor, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, + Serializable defaultCourseAreaId, Double hullLengthRadiusFactor, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetricConstructor rankingMetricConstructor) { com.sap.sse.common.Util.Pair regattaWithCreatedFlag = getOrCreateRegattaWithoutReplication( fullRegattaName, boatClassName, startDate, endDate, id, series, persistent, scoringScheme, @@ -2144,7 +2144,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes @Override public Regatta updateRegatta(RegattaIdentifier regattaIdentifier, TimePoint startDate, TimePoint endDate, Serializable newDefaultCourseAreaId, RegattaConfiguration newRegattaConfiguration, - Iterable series, double hullLengthRadiusFactor, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes) { + Iterable series, Double hullLengthRadiusFactor, 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); 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 147c27a8ac2..f43b827096e 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,14 +29,14 @@ public class AddSpecificRegatta extends AbstractAddRegattaOperation { private final boolean persistent; private final ScoringScheme scoringScheme; private final Serializable defaultCourseAreaId; - private final double hullLengthRadiusFactor; + private final Double hullLengthRadiusFactor; 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, double hullLengthRadiusFactor, boolean useStartTimeInference, + boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId, Double hullLengthRadiusFactor, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes, RankingMetrics rankingMetricType) { super(regattaName, boatClassName, startDate, endDate, id); this.seriesNamesWithFleetNamesAndFleetOrderingAndMedalAndStartsWithZeroScoreAndDiscardingThresholds = seriesNamesWithFleetNamesAndFleetOrderingAndMedalAndDiscardingThresholds; 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 8451f150dd3..37623df112d 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,14 +15,14 @@ public class UpdateSpecificRegatta extends AbstractRacingEventServiceOperation