mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-16 10:48:47 +00:00
bug6275: ui changes and new class
This commit is contained in:
+17
-24
@@ -3,12 +3,11 @@ package com.sap.sailing.gwt.ui.adminconsole;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.dom.client.Style.FontWeight;
|
||||
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.Grid;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
@@ -23,7 +22,7 @@ public class CourseAreaSelectionDialog extends DataEntryDialog<List<CourseAreaDT
|
||||
|
||||
public CourseAreaSelectionDialog(final List<CourseAreaDTO> courseAreas, final StringMessages stringMessages,
|
||||
final DialogCallback<List<CourseAreaDTO>> callback) {
|
||||
super(stringMessages.selectCourseAreas(), null, stringMessages.ok(), stringMessages.cancel(), null, callback);
|
||||
super(stringMessages.selectCourseAreas(), null, stringMessages.appendCourseAreasConfirm(), stringMessages.cancel(), null, callback);
|
||||
this.courseAreas = courseAreas;
|
||||
this.stringMessages = stringMessages;
|
||||
}
|
||||
@@ -32,7 +31,7 @@ public class CourseAreaSelectionDialog extends DataEntryDialog<List<CourseAreaDT
|
||||
protected List<CourseAreaDTO> getResult() {
|
||||
final List<CourseAreaDTO> selected = new ArrayList<>();
|
||||
for (int i = 0; i < courseAreas.size(); i++) {
|
||||
final CheckBox checkBox = (CheckBox) selectionGrid.getWidget(i, 1);
|
||||
final CheckBox checkBox = (CheckBox) selectionGrid.getWidget(i + 1, 1);
|
||||
if (checkBox.getValue()) {
|
||||
selected.add(courseAreas.get(i));
|
||||
}
|
||||
@@ -44,33 +43,27 @@ public class CourseAreaSelectionDialog extends DataEntryDialog<List<CourseAreaDT
|
||||
protected Widget getAdditionalWidget() {
|
||||
final VerticalPanel mainPanel = new VerticalPanel();
|
||||
mainPanel.setSpacing(5);
|
||||
final HorizontalPanel multiSelectPanel = new HorizontalPanel();
|
||||
multiSelectPanel.setSpacing(3);
|
||||
final Button selectAllButton = new Button(stringMessages.selectAll());
|
||||
selectAllButton.addClickHandler(createMultiSelectionHandler(true));
|
||||
final Button deselectAllButton = new Button(stringMessages.deselectAll());
|
||||
deselectAllButton.addClickHandler(createMultiSelectionHandler(false));
|
||||
multiSelectPanel.add(selectAllButton);
|
||||
multiSelectPanel.add(deselectAllButton);
|
||||
mainPanel.add(multiSelectPanel);
|
||||
selectionGrid = new Grid(courseAreas.size(), 2);
|
||||
selectionGrid = new Grid(courseAreas.size() + 1, 2);
|
||||
selectionGrid.setCellSpacing(5);
|
||||
final Label selectAllLabel = new Label(stringMessages.selectAll());
|
||||
selectAllLabel.getElement().getStyle().setFontWeight(FontWeight.BOLD);
|
||||
final CheckBox selectAllCheckBox = new CheckBox();
|
||||
selectionGrid.setWidget(0, 0, selectAllLabel);
|
||||
selectionGrid.setWidget(0, 1, selectAllCheckBox);
|
||||
for (int i = 0; i < courseAreas.size(); i++) {
|
||||
selectionGrid.setWidget(i, 0, new Label(courseAreas.get(i).getName()));
|
||||
selectionGrid.setWidget(i, 1, new CheckBox());
|
||||
selectionGrid.setWidget(i + 1, 0, new Label(courseAreas.get(i).getName()));
|
||||
selectionGrid.setWidget(i + 1, 1, new CheckBox());
|
||||
}
|
||||
mainPanel.add(selectionGrid);
|
||||
return mainPanel;
|
||||
}
|
||||
|
||||
private ClickHandler createMultiSelectionHandler(final boolean checked) {
|
||||
return new ClickHandler() {
|
||||
selectAllCheckBox.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(final ClickEvent event) {
|
||||
for (int i = 0; i < selectionGrid.getRowCount(); i++) {
|
||||
final boolean checked = selectAllCheckBox.getValue();
|
||||
for (int i = 1; i < selectionGrid.getRowCount(); i++) {
|
||||
((CheckBox) selectionGrid.getWidget(i, 1)).setValue(checked);
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
mainPanel.add(selectionGrid);
|
||||
return mainPanel;
|
||||
}
|
||||
}
|
||||
|
||||
+172
@@ -0,0 +1,172 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.google.gwt.event.logical.shared.ValueChangeHandler;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
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.TextBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.domain.common.dto.CourseAreaDTO;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceWriteAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.landscape.common.SharedLandscapeConstants;
|
||||
import com.sap.sse.gwt.client.IconResources;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public class CourseAreaTabComposite extends Composite {
|
||||
private final CourseAreaListInlineEditorComposite courseAreaList;
|
||||
|
||||
public CourseAreaTabComposite(final Collection<EventDTO> existingEvents,
|
||||
final SailingServiceWriteAsync sailingServiceWrite, final StringMessages stringMessages) {
|
||||
courseAreaList = new CourseAreaListInlineEditorComposite(Collections.<CourseAreaDTO> emptyList(),
|
||||
new CourseAreaListInlineEditorComposite.ExpandedUi(stringMessages, IconResources.INSTANCE.removeIcon(),
|
||||
SuggestedCourseAreaNames.suggestedCourseAreaNames, stringMessages.enterCourseAreaName(), 30));
|
||||
final VerticalPanel courseAreasPanel = new VerticalPanel();
|
||||
courseAreasPanel.setSpacing(5);
|
||||
final Map<String, EventDTO> eventsCache = new HashMap<>();
|
||||
for (final EventDTO event : existingEvents) {
|
||||
eventsCache.put(event.getId().toString(), event);
|
||||
}
|
||||
final ListBox eventDropDown = new ListBox();
|
||||
eventDropDown.addItem(stringMessages.pleaseSelectAnEvent());
|
||||
final List<EventDTO> sortedExistingEvents = new ArrayList<>(existingEvents);
|
||||
sortedExistingEvents.sort(Comparator.comparing(EventDTO::getName));
|
||||
for (final EventDTO event : sortedExistingEvents) {
|
||||
eventDropDown.addItem(event.getName(), event.getId().toString());
|
||||
}
|
||||
final Button appendButton = new Button(stringMessages.appendCourseAreas());
|
||||
appendButton.setEnabled(false);
|
||||
appendButton.addStyleName("btn-secondary");
|
||||
final Button clearAllButton = new Button(stringMessages.clearAllCourseAreas());
|
||||
clearAllButton.setEnabled(false);
|
||||
clearAllButton.addStyleName("btn-secondary");
|
||||
eventDropDown.addChangeHandler(e -> {
|
||||
final boolean hasSelection = eventDropDown.getSelectedIndex() > 0;
|
||||
appendButton.setEnabled(hasSelection);
|
||||
clearAllButton.setEnabled(hasSelection);
|
||||
});
|
||||
appendButton.addClickHandler(e -> {
|
||||
final EventDTO selected = eventsCache.get(eventDropDown.getValue(eventDropDown.getSelectedIndex()));
|
||||
if (selected != null) {
|
||||
new CourseAreaSelectionDialog(selected.getVenue().getCourseAreas(), stringMessages,
|
||||
new DataEntryDialog.DialogCallback<List<CourseAreaDTO>>() {
|
||||
@Override
|
||||
public void ok(final List<CourseAreaDTO> result) {
|
||||
final List<CourseAreaDTO> updated = new ArrayList<>(courseAreaList.getValue());
|
||||
for (final CourseAreaDTO area : result) {
|
||||
updated.add(new CourseAreaDTO(UUID.randomUUID(), area.getName(), area.getCenterPosition(), area.getRadius()));
|
||||
}
|
||||
courseAreaList.setValue(updated);
|
||||
}
|
||||
@Override
|
||||
public void cancel() {}
|
||||
}).show();
|
||||
}
|
||||
});
|
||||
clearAllButton.addClickHandler(e -> courseAreaList.setValue(new ArrayList<>()));
|
||||
final TextBox remoteBaseUrlBox = new TextBox();
|
||||
remoteBaseUrlBox.setValue(SharedLandscapeConstants.DEFAULT_SAILING_SERVER_URL);
|
||||
remoteBaseUrlBox.setWidth("300px");
|
||||
remoteBaseUrlBox.getElement().setPropertyString("placeholder", stringMessages.remoteServerUrlPlaceholder());
|
||||
final TextBox bearerTokenOrNullBox = new TextBox();
|
||||
bearerTokenOrNullBox.setWidth("200px");
|
||||
bearerTokenOrNullBox.getElement().setPropertyString("placeholder", stringMessages.bearerTokenPlaceholder());
|
||||
final BusyIndicator remoteLoadBusyIndicator = new SimpleBusyIndicator();
|
||||
final Button loadRemoteEventsButton = new Button(stringMessages.loadRemoteEvents());
|
||||
loadRemoteEventsButton.addClickHandler(e -> {
|
||||
eventDropDown.clear();
|
||||
eventDropDown.addItem(stringMessages.pleaseSelectAnEvent());
|
||||
eventsCache.clear();
|
||||
final String baseUrl = remoteBaseUrlBox.getValue().trim();
|
||||
if (baseUrl.isEmpty()) {
|
||||
final List<EventDTO> sorted = new ArrayList<>(existingEvents);
|
||||
sorted.sort(Comparator.comparing(EventDTO::getName));
|
||||
for (final EventDTO event : sorted) {
|
||||
eventsCache.put(event.getId().toString(), event);
|
||||
eventDropDown.addItem(event.getName(), event.getId().toString());
|
||||
}
|
||||
eventDropDown.setEnabled(true);
|
||||
} else {
|
||||
remoteLoadBusyIndicator.setBusy(true);
|
||||
eventDropDown.setEnabled(false);
|
||||
final String bearerTokenOrNull = bearerTokenOrNullBox.getValue().trim().isEmpty() ? null : bearerTokenOrNullBox.getValue().trim();
|
||||
sailingServiceWrite.getRemoteEvents(baseUrl, bearerTokenOrNull,
|
||||
new AsyncCallback<List<EventDTO>>() {
|
||||
@Override
|
||||
public void onSuccess(final List<EventDTO> result) {
|
||||
remoteLoadBusyIndicator.setBusy(false);
|
||||
result.sort(Comparator.comparing(EventDTO::getName));
|
||||
for (final EventDTO event : result) {
|
||||
eventsCache.put(event.getId().toString(), event);
|
||||
eventDropDown.addItem(event.getName(), event.getId().toString());
|
||||
}
|
||||
eventDropDown.setEnabled(true);
|
||||
}
|
||||
@Override
|
||||
public void onFailure(final Throwable caught) {
|
||||
remoteLoadBusyIndicator.setBusy(false);
|
||||
eventDropDown.clear();
|
||||
eventDropDown.addItem(caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
final VerticalPanel copyPanel = new VerticalPanel();
|
||||
copyPanel.setWidth("100%");
|
||||
copyPanel.setSpacing(3);
|
||||
final Grid remoteInputGrid = new Grid(2, 3);
|
||||
remoteInputGrid.setWidget(0, 0, new Label(stringMessages.copyCourseAreasFromAnotherUrl()));
|
||||
remoteInputGrid.setWidget(0, 1, remoteBaseUrlBox);
|
||||
final HorizontalPanel loadRow = new HorizontalPanel();
|
||||
loadRow.setSpacing(3);
|
||||
loadRow.add(loadRemoteEventsButton);
|
||||
loadRow.add(remoteLoadBusyIndicator);
|
||||
remoteInputGrid.setWidget(0, 2, loadRow);
|
||||
remoteInputGrid.setWidget(1, 0, new Label(stringMessages.bearerTokenOrNullForRemoteEvents()));
|
||||
remoteInputGrid.setWidget(1, 1, bearerTokenOrNullBox);
|
||||
eventDropDown.setWidth("100%");
|
||||
final HorizontalPanel actionButtons = new HorizontalPanel();
|
||||
actionButtons.setSpacing(3);
|
||||
actionButtons.add(appendButton);
|
||||
actionButtons.add(clearAllButton);
|
||||
final HorizontalPanel eventDropDownRow = new HorizontalPanel();
|
||||
eventDropDownRow.setSpacing(3);
|
||||
eventDropDownRow.setWidth("100%");
|
||||
eventDropDownRow.add(new Label(stringMessages.event() + ":"));
|
||||
eventDropDownRow.add(eventDropDown);
|
||||
eventDropDownRow.add(actionButtons);
|
||||
copyPanel.add(remoteInputGrid);
|
||||
copyPanel.add(eventDropDownRow);
|
||||
courseAreasPanel.add(copyPanel);
|
||||
courseAreasPanel.add(courseAreaList);
|
||||
initWidget(courseAreasPanel);
|
||||
}
|
||||
|
||||
public List<CourseAreaDTO> getValue() {
|
||||
return courseAreaList.getValue();
|
||||
}
|
||||
|
||||
public void setValue(final List<CourseAreaDTO> value) {
|
||||
courseAreaList.setValue(value);
|
||||
}
|
||||
|
||||
public void addValueChangeHandler(final ValueChangeHandler<Iterable<CourseAreaDTO>> handler) {
|
||||
courseAreaList.addValueChangeHandler(handler);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -45,6 +45,6 @@ public class EventCreateDialog extends EventDialog {
|
||||
imagesListComposite.fillImages(Collections.<ImageDTO>emptyList());
|
||||
videosListComposite.fillVideos(Collections.<VideoDTO>emptyList());
|
||||
// add default course area
|
||||
courseAreaNameList.setValue(Collections.singletonList(new CourseAreaDTO(UUID.randomUUID(), "Default")));
|
||||
courseAreaList.setValue(Collections.singletonList(new CourseAreaDTO(UUID.randomUUID(), "Default")));
|
||||
}
|
||||
}
|
||||
|
||||
+5
-166
@@ -3,7 +3,6 @@ package com.sap.sailing.gwt.ui.adminconsole;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -13,14 +12,11 @@ import java.util.UUID;
|
||||
import com.google.gwt.dom.client.Style.Unit;
|
||||
import com.google.gwt.event.logical.shared.ValueChangeEvent;
|
||||
import com.google.gwt.event.logical.shared.ValueChangeHandler;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
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;
|
||||
@@ -30,7 +26,6 @@ import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.dto.CourseAreaDTO;
|
||||
import com.sap.sailing.domain.common.windfinder.AvailableWindFinderSpotCollections;
|
||||
import com.sap.sailing.gwt.ui.client.DataEntryDialogWithDateTimeBox;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceWriteAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
@@ -38,8 +33,6 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.VenueDTO;
|
||||
import com.sap.sse.gwt.client.DateAndTimeFormatterUtil;
|
||||
import com.sap.sse.gwt.client.IconResources;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.datetime.DateAndTimeInput;
|
||||
import com.sap.sse.gwt.client.controls.listedit.GenericStringListEditorComposite;
|
||||
import com.sap.sse.gwt.client.controls.listedit.StringConstantsListEditorComposite;
|
||||
@@ -57,7 +50,7 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
|
||||
protected CheckBox isPublicCheckBox;
|
||||
protected UUID id;
|
||||
protected TextBox baseURLEntryField;
|
||||
protected CourseAreaListInlineEditorComposite courseAreaNameList;
|
||||
protected CourseAreaTabComposite courseAreaList;
|
||||
protected StringConstantsListEditorComposite leaderboardGroupList;
|
||||
protected StringListInlineEditorComposite windFinderSpotCollectionIdsComposite;
|
||||
protected Map<String, LeaderboardGroupDTO> availableLeaderboardGroupsByName;
|
||||
@@ -158,10 +151,8 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
|
||||
validateAndUpdate();
|
||||
}
|
||||
};
|
||||
courseAreaNameList = new CourseAreaListInlineEditorComposite(Collections.<CourseAreaDTO> emptyList(),
|
||||
new CourseAreaListInlineEditorComposite.ExpandedUi(stringMessages, IconResources.INSTANCE.removeIcon(), /* suggestValues */
|
||||
SuggestedCourseAreaNames.suggestedCourseAreaNames, stringMessages.enterCourseAreaName(), 30));
|
||||
courseAreaNameList.addValueChangeHandler(courseAreaValueChangeHandler);
|
||||
courseAreaList = new CourseAreaTabComposite(existingEvents, sailingServiceWrite, stringMessages);
|
||||
courseAreaList.addValueChangeHandler(courseAreaValueChangeHandler);
|
||||
List<String> leaderboardGroupNames = new ArrayList<>();
|
||||
for (LeaderboardGroupDTO leaderboardGroupDTO: availableLeaderboardGroups) {
|
||||
leaderboardGroupNames.add(leaderboardGroupDTO.getName());
|
||||
@@ -202,7 +193,7 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
|
||||
result.endDate = endDateBox.getValue();
|
||||
result.isPublic = isPublicCheckBox.getValue();
|
||||
result.id = id;
|
||||
final List<CourseAreaDTO> courseAreas = courseAreaNameList.getValue();
|
||||
final List<CourseAreaDTO> courseAreas = courseAreaList.getValue();
|
||||
for (ImageDTO image : imagesListComposite.getAllImages()) {
|
||||
result.addImage(image);
|
||||
}
|
||||
@@ -253,159 +244,7 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
|
||||
final ScrollPanel leaderboardGroupTab = new ScrollPanel(leaderboardGroupList);
|
||||
leaderboardGroupTab.ensureDebugId("LeaderboardGroupsTab");
|
||||
tabPanel.add(leaderboardGroupTab, stringMessages.leaderboardGroups());
|
||||
final VerticalPanel courseAreasPanel = new VerticalPanel();
|
||||
courseAreasPanel.setSpacing(5);
|
||||
final Map<String, EventDTO> eventsCache = new HashMap<>();
|
||||
for (final EventDTO event : existingEvents) {
|
||||
eventsCache.put(event.getId().toString(), event);
|
||||
}
|
||||
final ListBox eventDropDown = createListBox(false);
|
||||
eventDropDown.addItem(stringMessages.pleaseSelect());
|
||||
final List<EventDTO> sortedExistingEvents = new ArrayList<>(existingEvents);
|
||||
sortedExistingEvents.sort(Comparator.comparing(EventDTO::getName));
|
||||
for (final EventDTO event : sortedExistingEvents) {
|
||||
eventDropDown.addItem(event.getName(), event.getId().toString());
|
||||
}
|
||||
final Button appendButton = new Button(stringMessages.appendCourseAreas());
|
||||
appendButton.setEnabled(false);
|
||||
appendButton.addStyleName("btn-secondary");
|
||||
final Button replaceAllButton = new Button(stringMessages.replaceAllCourseAreas());
|
||||
replaceAllButton.setEnabled(false);
|
||||
replaceAllButton.addStyleName("btn-secondary");
|
||||
final Button clearAndPickButton = new Button(stringMessages.clearAndPickCourseAreas());
|
||||
clearAndPickButton.setEnabled(false);
|
||||
clearAndPickButton.addStyleName("btn-secondary");
|
||||
final List<CourseAreaDTO> initialCourseAreas = new ArrayList<>(courseAreaNameList.getValue());
|
||||
final Button resetButton = new Button(stringMessages.resetCourseAreas());
|
||||
resetButton.addClickHandler(e -> courseAreaNameList.setValue(new ArrayList<>(initialCourseAreas)));
|
||||
eventDropDown.addChangeHandler(e -> {
|
||||
final boolean hasSelection = eventDropDown.getSelectedIndex() > 0;
|
||||
appendButton.setEnabled(hasSelection);
|
||||
replaceAllButton.setEnabled(hasSelection);
|
||||
clearAndPickButton.setEnabled(hasSelection);
|
||||
});
|
||||
appendButton.addClickHandler(e -> {
|
||||
final EventDTO selected = eventsCache.get(eventDropDown.getValue(eventDropDown.getSelectedIndex()));
|
||||
if (selected != null) {
|
||||
new CourseAreaSelectionDialog(selected.getVenue().getCourseAreas(), stringMessages,
|
||||
new DataEntryDialog.DialogCallback<List<CourseAreaDTO>>() {
|
||||
@Override
|
||||
public void ok(final List<CourseAreaDTO> result) {
|
||||
final List<CourseAreaDTO> updated = new ArrayList<>(courseAreaNameList.getValue());
|
||||
for (final CourseAreaDTO area : result) {
|
||||
updated.add(new CourseAreaDTO(UUID.randomUUID(), area.getName(), area.getCenterPosition(), area.getRadius()));
|
||||
}
|
||||
courseAreaNameList.setValue(updated);
|
||||
}
|
||||
@Override
|
||||
public void cancel() {}
|
||||
}).show();
|
||||
}
|
||||
});
|
||||
replaceAllButton.addClickHandler(e -> {
|
||||
final EventDTO selected = eventsCache.get(eventDropDown.getValue(eventDropDown.getSelectedIndex()));
|
||||
if (selected != null) {
|
||||
final List<CourseAreaDTO> copies = new ArrayList<>();
|
||||
for (final CourseAreaDTO area : selected.getVenue().getCourseAreas()) {
|
||||
copies.add(new CourseAreaDTO(UUID.randomUUID(), area.getName(), area.getCenterPosition(), area.getRadius()));
|
||||
}
|
||||
courseAreaNameList.setValue(copies);
|
||||
}
|
||||
});
|
||||
clearAndPickButton.addClickHandler(e -> {
|
||||
final EventDTO selected = eventsCache.get(eventDropDown.getValue(eventDropDown.getSelectedIndex()));
|
||||
if (selected != null) {
|
||||
new CourseAreaSelectionDialog(selected.getVenue().getCourseAreas(), stringMessages,
|
||||
new DataEntryDialog.DialogCallback<List<CourseAreaDTO>>() {
|
||||
@Override
|
||||
public void ok(final List<CourseAreaDTO> result) {
|
||||
final List<CourseAreaDTO> copies = new ArrayList<>();
|
||||
for (final CourseAreaDTO area : result) {
|
||||
copies.add(new CourseAreaDTO(UUID.randomUUID(), area.getName(), area.getCenterPosition(), area.getRadius()));
|
||||
}
|
||||
courseAreaNameList.setValue(copies);
|
||||
}
|
||||
@Override
|
||||
public void cancel() {}
|
||||
}).show();
|
||||
}
|
||||
});
|
||||
final TextBox remoteBaseUrlBox = new TextBox();
|
||||
remoteBaseUrlBox.setWidth("300px");
|
||||
remoteBaseUrlBox.getElement().setPropertyString("placeholder", stringMessages.remoteServerUrlPlaceholder());
|
||||
final TextBox bearerTokenOrNullBox = new TextBox();
|
||||
bearerTokenOrNullBox.setWidth("200px");
|
||||
bearerTokenOrNullBox.getElement().setPropertyString("placeholder", stringMessages.bearerTokenPlaceholder());
|
||||
final BusyIndicator remoteLoadBusyIndicator = new SimpleBusyIndicator();
|
||||
final Button loadRemoteEventsButton = new Button(stringMessages.loadRemoteEvents());
|
||||
loadRemoteEventsButton.addClickHandler(e -> {
|
||||
eventDropDown.clear();
|
||||
eventDropDown.addItem(stringMessages.pleaseSelect());
|
||||
eventsCache.clear();
|
||||
final String baseUrl = remoteBaseUrlBox.getValue().trim();
|
||||
if (baseUrl.isEmpty()) {
|
||||
final List<EventDTO> sorted = new ArrayList<>(existingEvents);
|
||||
sorted.sort(Comparator.comparing(EventDTO::getName));
|
||||
for (final EventDTO event : sorted) {
|
||||
eventsCache.put(event.getId().toString(), event);
|
||||
eventDropDown.addItem(event.getName(), event.getId().toString());
|
||||
}
|
||||
eventDropDown.setEnabled(true);
|
||||
} else {
|
||||
remoteLoadBusyIndicator.setBusy(true);
|
||||
eventDropDown.setEnabled(false);
|
||||
final String bearerTokenOrNull = bearerTokenOrNullBox.getValue().trim().isEmpty() ? null : bearerTokenOrNullBox.getValue().trim();
|
||||
sailingServiceWrite.getRemoteEvents(baseUrl, bearerTokenOrNull,
|
||||
new AsyncCallback<List<EventDTO>>() {
|
||||
@Override
|
||||
public void onSuccess(final List<EventDTO> result) {
|
||||
remoteLoadBusyIndicator.setBusy(false);
|
||||
result.sort(Comparator.comparing(EventDTO::getName));
|
||||
for (final EventDTO event : result) {
|
||||
eventsCache.put(event.getId().toString(), event);
|
||||
eventDropDown.addItem(event.getName(), event.getId().toString());
|
||||
}
|
||||
eventDropDown.setEnabled(true);
|
||||
}
|
||||
@Override
|
||||
public void onFailure(final Throwable caught) {
|
||||
remoteLoadBusyIndicator.setBusy(false);
|
||||
eventDropDown.clear();
|
||||
eventDropDown.addItem(caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
final VerticalPanel copyPanel = new VerticalPanel();
|
||||
copyPanel.setWidth("100%");
|
||||
copyPanel.setSpacing(3);
|
||||
final Grid remoteInputGrid = new Grid(2, 3);
|
||||
remoteInputGrid.setWidget(0, 0, new Label(stringMessages.copyCourseAreasFromEvent()));
|
||||
remoteInputGrid.setWidget(0, 1, remoteBaseUrlBox);
|
||||
final HorizontalPanel loadRow = new HorizontalPanel();
|
||||
loadRow.setSpacing(3);
|
||||
loadRow.add(loadRemoteEventsButton);
|
||||
loadRow.add(remoteLoadBusyIndicator);
|
||||
remoteInputGrid.setWidget(0, 2, loadRow);
|
||||
remoteInputGrid.setWidget(1, 0, new Label(stringMessages.bearerTokenOrNullForRemoteEvents()));
|
||||
remoteInputGrid.setWidget(1, 1, bearerTokenOrNullBox);
|
||||
eventDropDown.setWidth("100%");
|
||||
final HorizontalPanel actionButtons = new HorizontalPanel();
|
||||
actionButtons.setSpacing(3);
|
||||
actionButtons.add(appendButton);
|
||||
actionButtons.add(replaceAllButton);
|
||||
actionButtons.add(clearAndPickButton);
|
||||
final HorizontalPanel eventDropDownRow = new HorizontalPanel();
|
||||
eventDropDownRow.setSpacing(3);
|
||||
eventDropDownRow.setWidth("100%");
|
||||
eventDropDownRow.add(eventDropDown);
|
||||
eventDropDownRow.add(actionButtons);
|
||||
copyPanel.add(remoteInputGrid);
|
||||
copyPanel.add(eventDropDownRow);
|
||||
courseAreasPanel.add(copyPanel);
|
||||
courseAreasPanel.add(courseAreaNameList);
|
||||
courseAreasPanel.add(resetButton);
|
||||
final ScrollPanel courseAreasTab = new ScrollPanel(courseAreasPanel);
|
||||
final ScrollPanel courseAreasTab = new ScrollPanel(courseAreaList);
|
||||
courseAreasTab.ensureDebugId("CourseAreasTab");
|
||||
tabPanel.add(courseAreasTab, stringMessages.courseAreas());
|
||||
final ScrollPanel imagesTab = new ScrollPanel(imagesListComposite);
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ public class EventEditDialog extends EventDialog {
|
||||
baseURLEntryField = createTextBox(event.getBaseURL());
|
||||
baseURLEntryField.setVisibleLength(50);
|
||||
id = event.id;
|
||||
courseAreaNameList.setValue(new ArrayList<>(event.getVenue().getCourseAreas()));
|
||||
courseAreaList.setValue(new ArrayList<>(event.getVenue().getCourseAreas()));
|
||||
List<String> leaderboardGroupNames = new ArrayList<>();
|
||||
for(LeaderboardGroupDTO leaderboardGroupDTO: event.getLeaderboardGroups()) {
|
||||
leaderboardGroupNames.add(leaderboardGroupDTO.getName());
|
||||
|
||||
+3
-2
@@ -1470,13 +1470,14 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String copyCourse();
|
||||
String copyCourseAreasFromEvent();
|
||||
String copyCourseAreasFromRemoteServer();
|
||||
String copyCourseAreasFromAnotherUrl();
|
||||
String loadRemoteEvents();
|
||||
String bearerTokenOrNullForRemoteEvents();
|
||||
String remoteServerUrlPlaceholder();
|
||||
String bearerTokenPlaceholder();
|
||||
String appendCourseAreas();
|
||||
String replaceAllCourseAreas();
|
||||
String clearAndPickCourseAreas();
|
||||
String appendCourseAreasConfirm();
|
||||
String clearAllCourseAreas();
|
||||
String selectCourseAreas();
|
||||
String resetCourseAreas();
|
||||
String copyCompetitors();
|
||||
|
||||
+5
-4
@@ -1497,13 +1497,14 @@ doYouWantToCreateADefaultRegattaLeaderboard=Do you want to create a default Rega
|
||||
copyCourse=Copy Course
|
||||
copyCourseAreasFromEvent=Copy course areas from event
|
||||
copyCourseAreasFromRemoteServer=Copy course areas from remote server
|
||||
copyCourseAreasFromAnotherUrl=Copy course areas from another URL:
|
||||
loadRemoteEvents=Load
|
||||
bearerTokenOrNullForRemoteEvents=Bearer token for remote server
|
||||
bearerTokenOrNullForRemoteEvents=Bearer token for remote server:
|
||||
remoteServerUrlPlaceholder=Paste server URL (leave empty for local)
|
||||
bearerTokenPlaceholder=Leave empty for current user
|
||||
appendCourseAreas=Append
|
||||
replaceAllCourseAreas=Replace all
|
||||
clearAndPickCourseAreas=Clear and pick
|
||||
appendCourseAreas=Pick...
|
||||
appendCourseAreasConfirm=Append
|
||||
clearAllCourseAreas=Clear all
|
||||
selectCourseAreas=Select course areas
|
||||
resetCourseAreas=Reset
|
||||
copyCompetitors=Copy Competitors
|
||||
|
||||
+6
-4
@@ -1467,14 +1467,16 @@ doYouWantToCreateADefaultRegattaLeaderboard=Möchten Sie eine Standardrangliste
|
||||
copyCourse=Kurs kopieren
|
||||
copyCourseAreasFromEvent=Regattabahnen von Veranstaltung kopieren
|
||||
copyCourseAreasFromRemoteServer=Regattabahnen von externem Server kopieren
|
||||
copyCourseAreasFromAnotherUrl=Regattabahnen von anderer URL kopieren:
|
||||
loadRemoteEvents=Laden
|
||||
bearerTokenOrNullForRemoteEvents=Bearer-Token für externen Server
|
||||
bearerTokenOrNullForRemoteEvents=Bearer-Token für externen Server:
|
||||
remoteServerUrlPlaceholder=Server-URL einfügen (leer für lokal)
|
||||
bearerTokenPlaceholder=Leer lassen für aktuellen Benutzer
|
||||
appendCourseAreas=Anhängen
|
||||
replaceAllCourseAreas=Alle ersetzen
|
||||
clearAndPickCourseAreas=Leeren und auswählen
|
||||
appendCourseAreas=Auswählen...
|
||||
appendCourseAreasConfirm=Anhängen
|
||||
clearAllCourseAreas=Alle leeren
|
||||
selectCourseAreas=Regattabahnen auswählen
|
||||
resetCourseAreas=Zurücksetzen
|
||||
copyCompetitors=Teilnehmer kopieren
|
||||
smartphoneTracking=Smartphone Tracking
|
||||
titelOfChooseNameDialog= Wählen sie einen Namen
|
||||
|
||||
Reference in New Issue
Block a user