add secret for registration link to regatta dialog in the admin console

This commit is contained in:
Thomas Wiese
2018-10-15 14:23:32 +02:00
parent 558e6360c2
commit ca0633dbc7
19 changed files with 170 additions and 21 deletions
@@ -1297,7 +1297,6 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
} else {
competitorRegistrationType = CompetitorRegistrationType.CLOSED;
}
final RankingMetricConstructor rankingMetricConstructor = loadRankingMetricConstructor(dbRegatta);
if (createMigratableRegatta) {
result = new MigratableRegattaImpl(getRaceLogStore(), getRegattaLogStore(), name, boatClass,
@@ -1319,6 +1318,8 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
rankingMetricConstructor);
}
result.setRegattaConfiguration(configuration);
String registrationLinkSecret = (String) dbRegatta.get(FieldNames.REGATTA_REGISTRATION_LINK_SECRET.name());
result.setRegistrationLinkSecret(registrationLinkSecret);
}
return result;
}
@@ -40,6 +40,7 @@ public enum FieldNames {
REGATTA_CONTROL_TRACKING_FROM_START_AND_FINISH_TIMES,
REGATTA_CAN_BOATS_OF_COMPETITORS_CHANGE_PER_RACE,
REGATTA_COMPETITOR_REGISTRATION_TYPE,
REGATTA_REGISTRATION_LINK_SECRET,
SERIES_NAME,
SERIES_IS_MEDAL,
SERIES_IS_FLEETS_CAN_RUN_IN_PARALLEL,
@@ -717,6 +717,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
dbRegatta.put(FieldNames.REGATTA_CONTROL_TRACKING_FROM_START_AND_FINISH_TIMES.name(), regatta.isControlTrackingFromStartAndFinishTimes());
dbRegatta.put(FieldNames.REGATTA_CAN_BOATS_OF_COMPETITORS_CHANGE_PER_RACE.name(), regatta.canBoatsOfCompetitorsChangePerRace());
dbRegatta.put(FieldNames.REGATTA_COMPETITOR_REGISTRATION_TYPE.name(), regatta.getCompetitorRegistrationType().name());
dbRegatta.put(FieldNames.REGATTA_REGISTRATION_LINK_SECRET.name(), regatta.getRegistrationLinkSecret());
dbRegatta.put(FieldNames.REGATTA_RANKING_METRIC.name(), storeRankingMetric(regatta));
boolean success = false;
final int MAX_TRIES = 3;
@@ -9,6 +9,9 @@ import com.google.gwt.dom.client.OptionElement;
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.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.DoubleBox;
import com.google.gwt.user.client.ui.Grid;
@@ -58,9 +61,11 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog<T> extends DataEn
protected final ListEditorComposite<SeriesDTO> seriesEditor;
private final ListBox rankingMetricListBox;
protected final ListBox competitorRegistrationTypeListBox;
protected final Button registrationLinkWithQRCodeOpenButton;
protected final List<EventDTO> existingEvents;
private EventDTO defaultEvent;
private RegistrationLinkWithQRCode registrationLinkWithQRCode;
public AbstractRegattaWithSeriesAndFleetsDialog(RegattaDTO regatta, Iterable<SeriesDTO> series, List<EventDTO> existingEvents, EventDTO correspondingEvent,
String title, String okButton, StringMessages stringMessages, Validator<T> validator, DialogCallback<T> callback) {
@@ -110,6 +115,25 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog<T> extends DataEn
competitorRegistrationTypeListBox = createListBox(false);
EnumSet.allOf(CompetitorRegistrationType.class).forEach(t->competitorRegistrationTypeListBox.addItem(t.getLabel(stringMessages), t.name()));
competitorRegistrationTypeListBox.setSelectedIndex(regatta.competitorRegistrationType.ordinal());
registrationLinkWithQRCode = new RegistrationLinkWithQRCode();
registrationLinkWithQRCode.setSecret(regatta.registrationLinkSecret);
registrationLinkWithQRCodeOpenButton = new Button(stringMessages.registrationLinkConfig(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
new RegistrationLinkWithQRCodeDialog(stringMessages, registrationLinkWithQRCode,
new DialogCallback<RegistrationLinkWithQRCode>() {
@Override
public void ok(RegistrationLinkWithQRCode result) {
registrationLinkWithQRCode = result;
}
@Override
public void cancel() {
}
}).show();
}
});
}
/**
@@ -153,7 +177,7 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog<T> extends DataEn
if (additionalWidget != null) {
panel.add(additionalWidget);
}
Grid formGrid = new Grid(10, 2);
Grid formGrid = new Grid(11, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringMessages.timeZone() + ":"));
@@ -176,6 +200,8 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog<T> extends DataEn
formGrid.setWidget(8, 1, buoyZoneRadiusInHullLengthsDoubleBox);
formGrid.setWidget(9, 0, new Label(stringMessages.competitorRegistrationType() + ":"));
formGrid.setWidget(9, 1, competitorRegistrationTypeListBox);
formGrid.setWidget(10, 0, new Label(stringMessages.registrationLink() + ":"));
formGrid.setWidget(10, 1, registrationLinkWithQRCodeOpenButton);
setupAdditionalWidgetsOnPanel(panel, formGrid);
return panel;
}
@@ -304,6 +330,11 @@ public abstract class AbstractRegattaWithSeriesAndFleetsDialog<T> extends DataEn
setCourseAreaInRegatta(result);
result.series = getSeriesEditor().getValue();
result.competitorRegistrationType = CompetitorRegistrationType.valueOf(competitorRegistrationTypeListBox.getSelectedValue());
if (result.competitorRegistrationType.isOpen() && registrationLinkWithQRCode != null) {
result.registrationLinkSecret = registrationLinkWithQRCode.getSecret();
} else {
result.registrationLinkSecret = null;
}
return result;
}
@@ -102,7 +102,7 @@ public class RegattaDetailsComposite extends Composite {
configuration = createLabelAndValueWidget(grid, currentRow++, stringMessages.racingProcedureConfiguration(), "RacingProcedureLabel");
scoringSystem = createLabelAndValueWidget(grid, currentRow++, stringMessages.scoringSystem(), "ScoringSystemLabel");
rankingMetric = createLabelAndValueWidget(grid, currentRow++, stringMessages.rankingMetric(), "RankingMetricLabel");
openRegattaRegistrationLink = createLabelAndValueWidget(grid, currentRow++, "Registration Link", "OpenRegattaRegistrationLinkLabel") ;
openRegattaRegistrationLink = createLabelAndValueWidget(grid, currentRow++, stringMessages.registrationLink(), "OpenRegattaRegistrationLinkLabel") ;
seriesTable = createRegattaSeriesTable();
seriesTable.ensureDebugId("SeriesCellTable");
@@ -311,9 +311,9 @@ public class RegattaListComposite extends Composite implements RegattasDisplayer
private void commitEditedRegatta(final RegattaDTO editedRegatta) {
final RegattaIdentifier regattaName = new RegattaName(editedRegatta.getName());
sailingService.updateRegatta(regattaName, editedRegatta.startDate, editedRegatta.endDate, editedRegatta.defaultCourseAreaUuid,
editedRegatta.configuration, editedRegatta.buoyZoneRadiusInHullLengths, editedRegatta.useStartTimeInference, editedRegatta.controlTrackingFromStartAndFinishTimes,
editedRegatta.registrationLinkSecret,
new MarkedAsyncCallback<Void>(new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
@@ -0,0 +1,34 @@
package com.sap.sailing.gwt.ui.adminconsole;
/**
* Type to transfer data between {#link {@link RegistrationLinkWithQRCodeDialog) and caller.
*
* @author Thomas Wiese
*
*/
public class RegistrationLinkWithQRCode {
/* Secret for extending registration URL. */
private String secret;
public RegistrationLinkWithQRCode() {
super();
}
/**
* Get entered secrect.
* @return Secret or null, if not set
*/
public String getSecret() {
return secret;
}
/**
* Set secret.
* @param secret
*/
public void setSecret(String secret) {
this.secret = secret;
}
}
@@ -0,0 +1,51 @@
package com.sap.sailing.gwt.ui.adminconsole;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
public class RegistrationLinkWithQRCodeDialog extends DataEntryDialog<RegistrationLinkWithQRCode> {
private StringMessages stringMessages;
private TextBox secretTextBox;
private RegistrationLinkWithQRCode registrationLinkWithQRCode;
public RegistrationLinkWithQRCodeDialog(final StringMessages stringMessages,
RegistrationLinkWithQRCode registrationLinkWithQRCode,
DialogCallback<RegistrationLinkWithQRCode> callback) {
super(stringMessages.registrationLinkDialog(), stringMessages.explainRegistrationLinkDialog(),
stringMessages.ok(), stringMessages.cancel(), null, true, callback);
this.stringMessages = stringMessages;
this.registrationLinkWithQRCode = registrationLinkWithQRCode == null ? new RegistrationLinkWithQRCode()
: registrationLinkWithQRCode;
secretTextBox = createTextBox(registrationLinkWithQRCode.getSecret(), 20);
}
@Override
protected RegistrationLinkWithQRCode getResult() {
registrationLinkWithQRCode.setSecret(secretTextBox.getValue());
return registrationLinkWithQRCode;
}
@Override
protected Widget getAdditionalWidget() {
final VerticalPanel panel = new VerticalPanel();
Widget additionalWidget = super.getAdditionalWidget();
if (additionalWidget != null) {
panel.add(additionalWidget);
}
Grid formGrid = new Grid(1, 2);
panel.add(formGrid);
formGrid.setWidget(0, 0, new Label(stringMessages.registrationLinkSecret() + ":"));
formGrid.setWidget(0, 1, secretTextBox);
return panel;
}
}
@@ -748,7 +748,7 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC
final RegattaIdentifier regattaIdentifier = new RegattaName(regatta.getName());
sailingService.updateRegatta(regattaIdentifier, regatta.startDate, regatta.endDate,
regatta.defaultCourseAreaUuid, configuration, regatta.buoyZoneRadiusInHullLengths, regatta.useStartTimeInference,
regatta.controlTrackingFromStartAndFinishTimes,
regatta.controlTrackingFromStartAndFinishTimes, regatta.registrationLinkSecret,
new MarkedAsyncCallback<Void>(new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
@@ -247,7 +247,8 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
void removeRegattas(Collection<RegattaIdentifier> regattas);
void updateRegatta(RegattaIdentifier regattaIdentifier, Date startDate, Date endDate, UUID defaultCourseAreaUuid,
RegattaConfigurationDTO regattaConfiguration, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes);
RegattaConfigurationDTO regattaConfiguration, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes,
String registrationLinkSecret);
List<RaceColumnInSeriesDTO> addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName,
List<Pair<String, Integer>> columnNames);
@@ -553,7 +553,7 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
void updateRegatta(RegattaIdentifier regattaIdentifier, Date startDate, Date endDate, UUID defaultCourseAreaUuid,
RegattaConfigurationDTO regattaConfiguration, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference,
boolean controlTrackingFromStartAndFinishTimes, AsyncCallback<Void> callback);
boolean controlTrackingFromStartAndFinishTimes, String registrationLinkSecret, AsyncCallback<Void> callback);
/**
* @param detailType
@@ -1195,6 +1195,11 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String canNotRegisterBoats();
String competitorRegistrationType();
String competitorRegistrationTypeShort();
String registrationLink();
String registrationLinkConfig();
String registrationLinkDialog();
String registrationLinkSecret();
String explainRegistrationLinkDialog();
String numberOfQueueMessagesSent();
String totalSize();
String averageMessageSize();
@@ -1185,6 +1185,11 @@ competitorRegistrationTypeShort=Registration
competitorRegistrationTypeClosed=closed
competitorRegistrationTypeOpenModerated=open moderated
competitorRegistrationTypeOpenUnmoderated=open unmoderated
registrationLink=Registration Link
registrationLinkConfig=configure
registrationLinkDialog=Link for open regatta registration
registrationLinkSecret=Secret
explainRegistrationLinkDialog=
numberOfQueueMessagesSent=Number of queue messages sent
totalSize=Total Size
averageMessageSize=Average size per message in bytes
@@ -1172,6 +1172,11 @@ competitorRegistrationTypeShort=Registrierung
competitorRegistrationTypeClosed=geschlossen
competitorRegistrationTypeOpenModerated=Öffentlich moderiert
competitorRegistrationTypeOpenUnmoderated=Öffentlich unmoderiert
registrationLink=Registrierungslink
registrationLinkConfig=konfigurieren
registrationLinkDialog=Registrierungslink für offene Regattas
registrationLinkSecret=Secret
explainRegistrationLinkDialog=
numberOfQueueMessagesSent=Anzahl verschickter Queue Nachrichten
totalSize=Gesamtgröße
averageMessageSize=Durchschnittsgrösse einer Nachricht
@@ -4353,15 +4353,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
@Override
public void updateRegatta(RegattaIdentifier regattaName, Date startDate, Date endDate, UUID defaultCourseAreaUuid,
RegattaConfigurationDTO configurationDTO, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes) {
RegattaConfigurationDTO configurationDTO, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes,
String registrationLinkSecret) {
Regatta regatta = getService().getRegatta(regattaName);
if (regatta != null) {
SecurityUtils.getSubject().checkPermission(Permission.REGATTA.getStringPermissionForObjects(Mode.UPDATE, regatta.getName()));
}
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), buoyZoneRadiusInHullLengths, useStartTimeInference, controlTrackingFromStartAndFinishTimes));
getService().apply(new UpdateSpecificRegatta(regattaName, startTimePoint, endTimePoint, defaultCourseAreaUuid,
convertToRegattaConfiguration(configurationDTO), buoyZoneRadiusInHullLengths, useStartTimeInference,
controlTrackingFromStartAndFinishTimes, registrationLinkSecret));
}
@Override
@@ -118,7 +118,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
// Test for 'null'
master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null,
currentCourseAreaId, null, /*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false));
currentCourseAreaId, null, /*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false,
/* registrationLinkSecret*/ null));
Thread.sleep(1000);
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
@@ -127,7 +128,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
// Test for 'alpha'
currentCourseAreaId = alphaCourseAreaId;
master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null,
currentCourseAreaId, null, /*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false));
currentCourseAreaId, null, /*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false,
/* registrationLinkSecret*/ null));
Thread.sleep(1000);
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
@@ -136,7 +138,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
// Test for 'tv'
currentCourseAreaId = tvCourseAreaId;
master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null,
currentCourseAreaId, null, /*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false));
currentCourseAreaId, null, /*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false,
/* registrationLinkSecret*/ null));
Thread.sleep(1000);
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
@@ -145,7 +148,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
// Test back to 'null'
currentCourseAreaId = null;
master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, currentCourseAreaId, null,
/*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false));
/*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false,
/* registrationLinkSecret*/ null));
Thread.sleep(1000);
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
@@ -173,7 +177,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
// Test for 'null'
master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, currentCourseAreaId, null,
/*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false));
/*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false,
/* registrationLinkSecret*/ null));
Thread.sleep(1000);
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
@@ -183,7 +188,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
RegattaConfigurationImpl config = new RegattaConfigurationImpl();
config.setDefaultCourseDesignerMode(CourseDesignerMode.BY_MARKS);
master.apply(new UpdateSpecificRegatta(masterRegatta.getRegattaIdentifier(), /*startDate*/ null, /*endDate*/ null, currentCourseAreaId, config,
/*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false));
/*buoyZoneRadiusInHullLengths*/2.0, /* useStartTimeInference */ true, /* controlTrackingFromStartAndFinishTimes */ false,
/* registrationLinkSecret*/ null));
Thread.sleep(1000);
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
assertNotNull(replicatedRegatta);
@@ -347,7 +347,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
Regatta updateRegatta(RegattaIdentifier regattaIdentifier, TimePoint startDate, TimePoint endDate,
Serializable newDefaultCourseAreaId, RegattaConfiguration regattaConfiguration,
Iterable<? extends Series> series, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference,
boolean controlTrackingFromStartAndFinishTimes);
boolean controlTrackingFromStartAndFinishTimes, String registrationLinkSecret);
/**
* Adds <code>raceDefinition</code> to the {@link Regatta} such that it will appear in {@link Regatta#getAllRaces()}
@@ -2404,7 +2404,8 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
@Override
public Regatta updateRegatta(RegattaIdentifier regattaIdentifier, TimePoint startDate, TimePoint endDate,
Serializable newDefaultCourseAreaId, RegattaConfiguration newRegattaConfiguration,
Iterable<? extends Series> series, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes) {
Iterable<? extends Series> series, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes,
String registrationLinkSecret) {
if (useStartTimeInference && controlTrackingFromStartAndFinishTimes) {
throw new IllegalArgumentException("Cannot set both of useStartTimeInference and controlTrackingFromStartAndFinishTimes to true");
}
@@ -2418,6 +2419,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
regatta.setEndDate(endDate);
regatta.setBuoyZoneRadiusInHullLengths(buoyZoneRadiusInHullLengths);
regatta.setControlTrackingFromStartAndFinishTimes(controlTrackingFromStartAndFinishTimes);
regatta.setRegistrationLinkSecret(registrationLinkSecret);
if (regatta.useStartTimeInference() != useStartTimeInference) {
regatta.setUseStartTimeInference(useStartTimeInference);
final DynamicTrackedRegatta trackedRegatta = getTrackedRegatta(regatta);
@@ -20,9 +20,12 @@ public class UpdateSpecificRegatta extends AbstractRacingEventServiceOperation<R
private final boolean controlTrackingFromStartAndFinishTimes;
private final TimePoint startDate;
private final TimePoint endDate;
private final String registrationLinkSecret;
public UpdateSpecificRegatta(RegattaIdentifier regattaIdentifier, TimePoint startDate, TimePoint endDate, UUID newDefaultCourseAreaId,
RegattaConfiguration newConfiguration, Double buoyZoneRadiusInHullLengths, boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes) {
public UpdateSpecificRegatta(RegattaIdentifier regattaIdentifier, TimePoint startDate, TimePoint endDate,
UUID newDefaultCourseAreaId, RegattaConfiguration newConfiguration, Double buoyZoneRadiusInHullLengths,
boolean useStartTimeInference, boolean controlTrackingFromStartAndFinishTimes,
String registrationLinkSecret) {
this.regattaIdentifier = regattaIdentifier;
this.startDate = startDate;
this.endDate = endDate;
@@ -31,11 +34,12 @@ public class UpdateSpecificRegatta extends AbstractRacingEventServiceOperation<R
this.useStartTimeInference = useStartTimeInference;
this.controlTrackingFromStartAndFinishTimes = controlTrackingFromStartAndFinishTimes;
this.buoyZoneRadiusInHullLengths = buoyZoneRadiusInHullLengths;
this.registrationLinkSecret = registrationLinkSecret;
}
@Override
public Regatta internalApplyTo(RacingEventService toState) throws Exception {
Regatta regatta = toState.updateRegatta(regattaIdentifier, startDate, endDate, newDefaultCourseAreaId, newConfiguration, null, buoyZoneRadiusInHullLengths, useStartTimeInference, controlTrackingFromStartAndFinishTimes);
Regatta regatta = toState.updateRegatta(regattaIdentifier, startDate, endDate, newDefaultCourseAreaId, newConfiguration, null, buoyZoneRadiusInHullLengths, useStartTimeInference, controlTrackingFromStartAndFinishTimes, registrationLinkSecret);
return regatta;
}