bug6275: add cloning the course areas option

This commit is contained in:
Masha Kashirina
2026-07-18 00:33:17 +02:00
parent 46f559f424
commit c715a27bb7
6 changed files with 40 additions and 4 deletions
@@ -20,7 +20,7 @@ public class EventCreateDialog extends EventDialog {
public EventCreateDialog(Collection<EventDTO> existingEvents, List<LeaderboardGroupDTO> availableLeaderboardGroups,
SailingServiceWriteAsync sailingServiceWrite, StringMessages stringMessages, DialogCallback<EventDTO> callback) {
super(new EventParameterValidator(stringMessages, existingEvents), sailingServiceWrite, stringMessages,
availableLeaderboardGroups, /* leaderboardGroups */ Collections.<LeaderboardGroupDTO>emptyList(), callback);
availableLeaderboardGroups, /* leaderboardGroups */ Collections.<LeaderboardGroupDTO>emptyList(), existingEvents, callback);
nameEntryField = createTextBox(null);
nameEntryField.setVisibleLength(50);
nameEntryField.ensureDebugId("NameTextBox");
@@ -15,7 +15,9 @@ import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.user.client.ui.TextArea;
@@ -57,6 +59,7 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
protected VideosListComposite videosListComposite;
protected ExternalLinksComposite externalLinksComposite;
private final FileStorageServiceConnectionTestObservable storageServiceAvailable;
private final List<EventDTO> existingEvents;
protected static class EventParameterValidator implements Validator<EventDTO> {
@@ -124,11 +127,12 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
*/
public EventDialog(EventParameterValidator validator, SailingServiceWriteAsync sailingServiceWrite,
StringMessages stringMessages, List<LeaderboardGroupDTO> availableLeaderboardGroups,
Iterable<LeaderboardGroupDTO> leaderboardGroupsOfEvent, DialogCallback<EventDTO> callback) {
Iterable<LeaderboardGroupDTO> leaderboardGroupsOfEvent, Collection<EventDTO> existingEvents, DialogCallback<EventDTO> callback) {
super(stringMessages.event(), null, stringMessages.ok(), stringMessages.cancel(), validator, callback);
this.ensureDebugId("eventDialog");
this.storageServiceAvailable = new FileStorageServiceConnectionTestObservable(sailingServiceWrite);
this.stringMessages = stringMessages;
this.existingEvents = new ArrayList<>(existingEvents);
this.availableLeaderboardGroupsByName = new HashMap<>();
for (final LeaderboardGroupDTO lgDTO : availableLeaderboardGroups) {
availableLeaderboardGroupsByName.put(lgDTO.getName(), lgDTO);
@@ -241,7 +245,36 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
final ScrollPanel leaderboardGroupTab = new ScrollPanel(leaderboardGroupList);
leaderboardGroupTab.ensureDebugId("LeaderboardGroupsTab");
tabPanel.add(leaderboardGroupTab, stringMessages.leaderboardGroups());
final ScrollPanel courseAreasTab = new ScrollPanel(courseAreaNameList);
final VerticalPanel courseAreasPanel = new VerticalPanel();
final ListBox copyFromEventDropDown = createListBox(false);
copyFromEventDropDown.addItem(stringMessages.pleaseSelect());
for (final EventDTO event : existingEvents) {
copyFromEventDropDown.addItem(event.getName(), event.getName());
}
copyFromEventDropDown.addChangeHandler(e -> {
final int selectedIndex = copyFromEventDropDown.getSelectedIndex();
if (selectedIndex > 0) {
final String selectedEventName = copyFromEventDropDown.getValue(selectedIndex);
for (final EventDTO event : existingEvents) {
if (event.getName().equals(selectedEventName)) {
// copy with fresh UUIDs so these become independent course areas of this event
final List<CourseAreaDTO> copies = new ArrayList<>();
for (final CourseAreaDTO area : event.getVenue().getCourseAreas()) {
copies.add(new CourseAreaDTO(UUID.randomUUID(), area.getName(), area.getCenterPosition(), area.getRadius()));
}
courseAreaNameList.setValue(copies);
break;
}
}
}
});
final HorizontalPanel copyFromPanel = new HorizontalPanel();
copyFromPanel.setSpacing(3);
copyFromPanel.add(new Label(stringMessages.copyCourseAreasFromEvent()));
copyFromPanel.add(copyFromEventDropDown);
courseAreasPanel.add(copyFromPanel);
courseAreasPanel.add(courseAreaNameList);
final ScrollPanel courseAreasTab = new ScrollPanel(courseAreasPanel);
courseAreasTab.ensureDebugId("CourseAreasTab");
tabPanel.add(courseAreasTab, stringMessages.courseAreas());
final ScrollPanel imagesTab = new ScrollPanel(imagesListComposite);
@@ -14,7 +14,7 @@ import com.sap.sse.gwt.client.controls.datetime.DateTimeInput.Accuracy;
public class EventEditDialog extends EventDialog {
public EventEditDialog(EventDTO event, Collection<EventDTO> otherExistingEvents, List<LeaderboardGroupDTO> availableLeaderboardGroups,
SailingServiceWriteAsync sailingServiceWrite, StringMessages stringMessages, DialogCallback<EventDTO> callback, MediaServiceAsync mediaService) {
super(new EventParameterValidator(stringMessages, otherExistingEvents), sailingServiceWrite, stringMessages, availableLeaderboardGroups, event.getLeaderboardGroups(), callback);
super(new EventParameterValidator(stringMessages, otherExistingEvents), sailingServiceWrite, stringMessages, availableLeaderboardGroups, event.getLeaderboardGroups(), otherExistingEvents, callback);
nameEntryField = createTextBox(event.getName());
nameEntryField.setVisibleLength(50);
descriptionEntryField = createTextArea(event.getDescription());
@@ -1457,6 +1457,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String createDefaultRegattaLeaderboard();
String doYouWantToCreateADefaultRegattaLeaderboard();
String copyCourse();
String copyCourseAreasFromEvent();
String copyCompetitors();
String smartphoneTracking();
String titelOfChooseNameDialog();
@@ -1484,6 +1484,7 @@ registerCompetitors=Register Competitors
registerBoats=Register Boats
doYouWantToCreateADefaultRegattaLeaderboard=Do you want to create a default Regatta Leaderboard?
copyCourse=Copy Course
copyCourseAreasFromEvent=Copy course areas from event
copyCompetitors=Copy Competitors
smartphoneTracking=Smartphone Tracking
titelOfChooseNameDialog=Choose a name
@@ -1454,6 +1454,7 @@ registerCompetitors=Teilnehmer anmelden
registerBoats=Boote anmelden
doYouWantToCreateADefaultRegattaLeaderboard=Möchten Sie eine Standardrangliste für die Regatta anlegen?
copyCourse=Kurs kopieren
copyCourseAreasFromEvent=Regattabahnen von Veranstaltung kopieren
copyCompetitors=Teilnehmer kopieren
smartphoneTracking=Smartphone Tracking
titelOfChooseNameDialog= Wählen sie einen Namen