mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-24 14:38:45 +00:00
Merge remote-tracking branch 'origin/bug3879'
This commit is contained in:
+2
-5
@@ -37,14 +37,11 @@ public class EventCreateDialog extends EventDialog {
|
||||
endDateBox = createDateTimeBox(now);
|
||||
endDateBox.setFormat("dd/mm/yyyy hh:ii");
|
||||
endDateBox.ensureDebugId("EndDateTimeBox");
|
||||
officialWebsiteURLEntryField = createTextBox(null);
|
||||
officialWebsiteURLEntryField.setVisibleLength(50);
|
||||
baseURLEntryField = createTextBox(null);
|
||||
baseURLEntryField.setVisibleLength(50);
|
||||
sailorsInfoWebsiteURLEntryFields = createTextBoxesForLocalesAndDefault(Collections.<String, String> emptyMap());
|
||||
isPublicCheckBox = createCheckbox("");
|
||||
isPublicCheckBox.setValue(false);
|
||||
isPublicCheckBox.ensureDebugId("IsPublicCheckBox");
|
||||
baseURLEntryField = createTextBox(null);
|
||||
baseURLEntryField.setVisibleLength(50);
|
||||
imagesListComposite.fillImages(Collections.<ImageDTO>emptyList());
|
||||
videosListComposite.fillVideos(Collections.<VideoDTO>emptyList());
|
||||
// add default course area
|
||||
|
||||
+9
-31
@@ -5,7 +5,6 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
@@ -32,7 +31,6 @@ import com.sap.sailing.gwt.ui.shared.CourseAreaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.VenueDTO;
|
||||
import com.sap.sse.gwt.client.GWTLocaleUtil;
|
||||
import com.sap.sse.gwt.client.IconResources;
|
||||
import com.sap.sse.gwt.client.controls.listedit.GenericStringListInlineEditorComposite;
|
||||
import com.sap.sse.gwt.client.controls.listedit.StringConstantsListEditorComposite;
|
||||
@@ -48,14 +46,13 @@ public abstract class EventDialog extends DataEntryDialogWithBootstrap<EventDTO>
|
||||
protected BetterDateTimeBox endDateBox;
|
||||
protected CheckBox isPublicCheckBox;
|
||||
protected UUID id;
|
||||
protected TextBox officialWebsiteURLEntryField;
|
||||
protected TextBox baseURLEntryField;
|
||||
protected Map<String, TextBox> sailorsInfoWebsiteURLEntryFields = new HashMap<>();
|
||||
protected CourseAreaListInlineEditorComposite courseAreaNameList;
|
||||
protected StringConstantsListEditorComposite leaderboardGroupList;
|
||||
protected Map<String, LeaderboardGroupDTO> availableLeaderboardGroupsByName;
|
||||
protected ImagesListComposite imagesListComposite;
|
||||
protected VideosListComposite videosListComposite;
|
||||
protected ExternalLinksComposite externalLinksComposite;
|
||||
|
||||
protected static class EventParameterValidator implements Validator<EventDTO> {
|
||||
|
||||
@@ -162,6 +159,7 @@ public abstract class EventDialog extends DataEntryDialogWithBootstrap<EventDTO>
|
||||
|
||||
imagesListComposite = new ImagesListComposite(sailingService, stringMessages);
|
||||
videosListComposite = new VideosListComposite(stringMessages);
|
||||
externalLinksComposite = new ExternalLinksComposite(stringMessages);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -176,13 +174,9 @@ public abstract class EventDialog extends DataEntryDialogWithBootstrap<EventDTO>
|
||||
}
|
||||
result.setName(nameEntryField.getText());
|
||||
result.setDescription(descriptionEntryField.getText());
|
||||
result.setOfficialWebsiteURL(officialWebsiteURLEntryField.getText().trim().isEmpty() ? null : officialWebsiteURLEntryField.getText().trim());
|
||||
result.setOfficialWebsiteURL(externalLinksComposite.getOfficialWebsiteURLValue());
|
||||
result.setBaseURL(baseURLEntryField.getText().trim().isEmpty() ? null : baseURLEntryField.getText().trim());
|
||||
for (Map.Entry<String, TextBox> sailorsInfoWebsiteUrlEntry : sailorsInfoWebsiteURLEntryFields.entrySet()) {
|
||||
TextBox sailorsInfoWebsiteURLEntryField = sailorsInfoWebsiteUrlEntry.getValue();
|
||||
String sailorsInfoWebsiteURL = sailorsInfoWebsiteURLEntryField.getText().trim();
|
||||
result.setSailorsInfoWebsiteURL(sailorsInfoWebsiteUrlEntry.getKey(), sailorsInfoWebsiteURL.isEmpty() ? null : sailorsInfoWebsiteURLEntryField.getText().trim());
|
||||
}
|
||||
result.setSailorsInfoWebsiteURLs(externalLinksComposite.getSailorsInfoWebsiteURLs());
|
||||
result.startDate = startDateBox.getValue();
|
||||
result.endDate = endDateBox.getValue();
|
||||
result.isPublic = isPublicCheckBox.getValue();
|
||||
@@ -206,7 +200,7 @@ public abstract class EventDialog extends DataEntryDialogWithBootstrap<EventDTO>
|
||||
if (additionalWidget != null) {
|
||||
panel.add(additionalWidget);
|
||||
}
|
||||
Grid formGrid = new Grid(10 + GWTLocaleUtil.getLanguageCountWithDefault(), 2);
|
||||
Grid formGrid = new Grid(8, 2);
|
||||
int rowIndex = 0;
|
||||
formGrid.setWidget(rowIndex, 0, new Label(stringMessages.name() + ":"));
|
||||
formGrid.setWidget(rowIndex++, 1, nameEntryField);
|
||||
@@ -222,24 +216,18 @@ public abstract class EventDialog extends DataEntryDialogWithBootstrap<EventDTO>
|
||||
formGrid.setWidget(rowIndex++, 1, endDateBox);
|
||||
formGrid.setWidget(rowIndex, 0, new Label(stringMessages.isPublic() + ":"));
|
||||
formGrid.setWidget(rowIndex++, 1, isPublicCheckBox);
|
||||
formGrid.setWidget(rowIndex, 0, new Label(stringMessages.eventOfficialWebsiteURL() + ":"));
|
||||
formGrid.setWidget(rowIndex++, 1, officialWebsiteURLEntryField);
|
||||
formGrid.setWidget(rowIndex, 0, new Label(stringMessages.eventBaseURL() + ":"));
|
||||
formGrid.setWidget(rowIndex++, 1, baseURLEntryField);
|
||||
for (Map.Entry<String, TextBox> sailorsInfoWebsiteUrlEntry : sailorsInfoWebsiteURLEntryFields.entrySet()) {
|
||||
String suffix = " ["+ (sailorsInfoWebsiteUrlEntry.getKey() == null ? stringMessages.defaultLocale() + "*" : sailorsInfoWebsiteUrlEntry.getKey()) + "]";
|
||||
formGrid.setWidget(rowIndex, 0, new Label(stringMessages.eventSailorsInfoWebsiteURL() + suffix + ":"));
|
||||
formGrid.setWidget(rowIndex, 1, sailorsInfoWebsiteUrlEntry.getValue());
|
||||
rowIndex++;
|
||||
}
|
||||
formGrid.setText(rowIndex, 1, "[*] " + stringMessages.defaultSailorsInfoLinkInfoText());
|
||||
TabLayoutPanel tabPanel = new TabLayoutPanel(30, Unit.PX);
|
||||
tabPanel.ensureDebugId("EventDialogTabs");
|
||||
tabPanel.setHeight("525px");
|
||||
tabPanel.setHeight("400px");
|
||||
panel.add(tabPanel);
|
||||
final ScrollPanel eventTab = new ScrollPanel(formGrid);
|
||||
eventTab.ensureDebugId("EventTab");
|
||||
tabPanel.add(eventTab, stringMessages.event());
|
||||
final ScrollPanel externalLinksCompositeTab = new ScrollPanel(externalLinksComposite);
|
||||
externalLinksCompositeTab.ensureDebugId("ExternalLinksCompositeTab");
|
||||
tabPanel.add(externalLinksCompositeTab, stringMessages.externalLinks());
|
||||
final ScrollPanel leaderboardGroupTab = new ScrollPanel(leaderboardGroupList);
|
||||
leaderboardGroupTab.ensureDebugId("LeaderboardGroupsTab");
|
||||
tabPanel.add(leaderboardGroupTab, stringMessages.leaderboardGroups());
|
||||
@@ -259,14 +247,4 @@ public abstract class EventDialog extends DataEntryDialogWithBootstrap<EventDTO>
|
||||
protected FocusWidget getInitialFocusWidget() {
|
||||
return nameEntryField;
|
||||
}
|
||||
|
||||
protected Map<String, TextBox> createTextBoxesForLocalesAndDefault(Map<String, String> initialValues) {
|
||||
Map<String, TextBox> result = new LinkedHashMap<>();
|
||||
for(String localeName : GWTLocaleUtil.getAvailableLocalesAndDefault()) {
|
||||
TextBox sailorsInfoWebsiteURLEntryField = createTextBox(initialValues.get(localeName));
|
||||
sailorsInfoWebsiteURLEntryField.setVisibleLength(50);
|
||||
result.put(localeName, sailorsInfoWebsiteURLEntryField);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-4
@@ -27,12 +27,9 @@ public class EventEditDialog extends EventDialog {
|
||||
endDateBox.setFormat("dd/mm/yyyy hh:ii");
|
||||
isPublicCheckBox = createCheckbox("");
|
||||
isPublicCheckBox.setValue(event.isPublic);
|
||||
id = event.id;
|
||||
officialWebsiteURLEntryField = createTextBox(event.getOfficialWebsiteURL());
|
||||
officialWebsiteURLEntryField.setVisibleLength(50);
|
||||
baseURLEntryField = createTextBox(event.getBaseURL());
|
||||
baseURLEntryField.setVisibleLength(50);
|
||||
sailorsInfoWebsiteURLEntryFields = createTextBoxesForLocalesAndDefault(event.getSailorsInfoWebsiteURLs());
|
||||
id = event.id;
|
||||
courseAreaNameList.setValue(new ArrayList<>(event.venue.getCourseAreas()));
|
||||
List<String> leaderboardGroupNames = new ArrayList<>();
|
||||
for(LeaderboardGroupDTO leaderboardGroupDTO: event.getLeaderboardGroups()) {
|
||||
@@ -41,5 +38,6 @@ public class EventEditDialog extends EventDialog {
|
||||
leaderboardGroupList.setValue(leaderboardGroupNames);
|
||||
imagesListComposite.fillImages(event.getImages());
|
||||
videosListComposite.fillVideos(event.getVideos());
|
||||
externalLinksComposite.fillExternalLinks(event);
|
||||
}
|
||||
}
|
||||
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.dom.client.Style.Unit;
|
||||
import com.google.gwt.i18n.client.LocaleInfo;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
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.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sse.gwt.client.GWTLocaleUtil;
|
||||
|
||||
public class ExternalLinksComposite extends Composite {
|
||||
|
||||
private Map<String, TextBox> sailorsInfoWebsiteURLEntryFields = new HashMap<>();
|
||||
private TextBox officialWebsiteURLEntryField;
|
||||
|
||||
public ExternalLinksComposite(StringMessages stringMessages) {
|
||||
VerticalPanel panel = new VerticalPanel();
|
||||
panel.setWidth("100%");
|
||||
|
||||
officialWebsiteURLEntryField = new TextBox();
|
||||
officialWebsiteURLEntryField.setVisibleLength(50);
|
||||
sailorsInfoWebsiteURLEntryFields = createTextBoxesForLocalesAndDefault(Collections.<String, String> emptyMap());
|
||||
|
||||
int rowIndex = 0;
|
||||
Grid formGrid = new Grid(GWTLocaleUtil.getLanguageCountWithDefault() + 3, 2);
|
||||
formGrid.setWidget(rowIndex, 0, new Label(stringMessages.eventOfficialWebsiteURL() + ":"));
|
||||
formGrid.setWidget(rowIndex++, 1, officialWebsiteURLEntryField);
|
||||
formGrid.setWidget(rowIndex++, 0, new Label(stringMessages.eventSailorsInfoWebsiteURL()));
|
||||
for (Map.Entry<String, TextBox> sailorsInfoWebsiteUrlEntry : sailorsInfoWebsiteURLEntryFields.entrySet()) {
|
||||
String locale = sailorsInfoWebsiteUrlEntry.getKey();
|
||||
String suffix = locale == null ? "*" : "[" + locale + "]";
|
||||
String text = locale == null ? stringMessages.urlForAllLanguages()
|
||||
: stringMessages.urlForLanguage(LocaleInfo.getLocaleNativeDisplayName(locale));
|
||||
Label urlLabel = new Label(text + " " + suffix + ":");
|
||||
urlLabel.getElement().getStyle().setMarginLeft(10, Unit.PX);
|
||||
formGrid.setWidget(rowIndex, 0, urlLabel);
|
||||
formGrid.setWidget(rowIndex, 1, sailorsInfoWebsiteUrlEntry.getValue());
|
||||
rowIndex++;
|
||||
}
|
||||
|
||||
panel.add(formGrid);
|
||||
panel.add(new Label("[*] " + stringMessages.defaultSailorsInfoLinkInfoText()));
|
||||
initWidget(panel);
|
||||
}
|
||||
|
||||
public String getOfficialWebsiteURLValue() {
|
||||
String value = officialWebsiteURLEntryField.getText().trim();
|
||||
return value.isEmpty() ? null : value;
|
||||
}
|
||||
|
||||
public Map<String, String> getSailorsInfoWebsiteURLs() {
|
||||
Map<String, String> sailorsInfoWebsiteURLsMap = new HashMap<>();
|
||||
for (Map.Entry<String, TextBox> sailorsInfoWebsiteUrlEntry : sailorsInfoWebsiteURLEntryFields.entrySet()) {
|
||||
TextBox sailorsInfoWebsiteURLEntryField = sailorsInfoWebsiteUrlEntry.getValue();
|
||||
String sailorsInfoWebsiteURL = sailorsInfoWebsiteURLEntryField.getText().trim();
|
||||
sailorsInfoWebsiteURLsMap.put(sailorsInfoWebsiteUrlEntry.getKey(),
|
||||
sailorsInfoWebsiteURL.isEmpty() ? null : sailorsInfoWebsiteURL);
|
||||
}
|
||||
return sailorsInfoWebsiteURLsMap;
|
||||
}
|
||||
|
||||
public void fillExternalLinks(EventDTO event) {
|
||||
Map<String, String> initialValues = event.getSailorsInfoWebsiteURLs();
|
||||
for (String localeName : GWTLocaleUtil.getAvailableLocalesAndDefault()) {
|
||||
sailorsInfoWebsiteURLEntryFields.get(localeName).setValue(initialValues.get(localeName));
|
||||
}
|
||||
officialWebsiteURLEntryField.setValue(event.getOfficialWebsiteURL());
|
||||
}
|
||||
|
||||
private Map<String, TextBox> createTextBoxesForLocalesAndDefault(Map<String, String> initialValues) {
|
||||
Map<String, TextBox> result = new LinkedHashMap<>();
|
||||
for (String localeName : GWTLocaleUtil.getAvailableLocalesAndDefault()) {
|
||||
TextBox sailorsInfoWebsiteURLEntryField = new TextBox();
|
||||
sailorsInfoWebsiteURLEntryField.setValue(initialValues.get(localeName));
|
||||
sailorsInfoWebsiteURLEntryField.setVisibleLength(50);
|
||||
result.put(localeName, sailorsInfoWebsiteURLEntryField);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+3
@@ -1736,6 +1736,9 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String lastFix();
|
||||
String filterDeviceMappings();
|
||||
String raceStartAnalysis();
|
||||
String urlForLanguage(String language);
|
||||
String urlForAllLanguages();
|
||||
String externalLinks();
|
||||
String buoyZoneRadiusInHullLengths();
|
||||
String incorrectValueForRegattaBuoyZoneRadiusInHullLengths();
|
||||
}
|
||||
|
||||
+4
-2
@@ -1614,10 +1614,12 @@ raceAnalysis=Race analysis
|
||||
startAnalysis=Start analysis
|
||||
winningLanes=Winning lanes
|
||||
maximumNumberOfDiscards=Maximum number of discards
|
||||
externalLinks=External links
|
||||
urlForAllLanguages=URL for all languages
|
||||
urlForLanguage=URL for language ''{0}''
|
||||
notificationRegattaConfigurationUpdatedUsingByMarks=Active regatta configuration was set, using the "By Marks" course designer.
|
||||
warningOverrideRegattaConfigurationCourseDesignerToByMarks=Active regatta configuration already exists, but with the wrong course designer setting.\nWould you like to override course designer setting to "By Marks"?
|
||||
allRacesHaveBeenDenoted=All races have been denoted for racelog tracking.
|
||||
|
||||
chartSelectionHint=Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart.
|
||||
chooseALanguage=Choose a language
|
||||
solutions=Solutions
|
||||
@@ -1710,4 +1712,4 @@ lastFix=Last fix
|
||||
filterDeviceMappings=Filter device mappings
|
||||
raceStartAnalysis=Race Start Analysis
|
||||
buoyZoneRadiusInHullLengths=Buoy zone radius in hull lengths (e.g., 2 or 3)
|
||||
incorrectValueForRegattaBuoyZoneRadiusInHullLengths=Incorrect value for the buoy zone radius in hull lengths
|
||||
incorrectValueForRegattaBuoyZoneRadiusInHullLengths=Incorrect value for the buoy zone radius in hull lengths
|
||||
|
||||
+3
-1
@@ -1600,10 +1600,12 @@ raceAnalysis=Renn-Analyse
|
||||
startAnalysis=Start-Analyse
|
||||
winningLanes=Sieger-Kurse
|
||||
maximumNumberOfDiscards=Maximale Anzahl von Streichern
|
||||
externalLinks=Externe Links
|
||||
urlForAllLanguages=URL für alle Sprachen
|
||||
urlForLanguage=URL für die Sprache ''{0}''
|
||||
notificationRegattaConfigurationUpdatedUsingByMarks=Aktive Regattakonfiguration wurde gesetzt, "By Marks" Kursdesigner ist ausgewählt.
|
||||
warningOverrideRegattaConfigurationCourseDesignerToByMarks=Aktive Regattakonfiguration existiert bereits, verwendet aber den falschenKursdesigner.\nKursdesigner auf "By Marks" umstellen?
|
||||
allRacesHaveBeenDenoted=Alle Rennen sind für Smartphone Tracking gekennzeichnet worden.
|
||||
|
||||
chartSelectionHint=Hinweis: Du kannst auch die Ergebnistabelle (im Menü ERGEBNISSE) nutzen, um die im Diagramm angezeigten Teilnehmer auszuwählen.
|
||||
chooseALanguage=Wähle eine Sprache
|
||||
solutions=Lösungen
|
||||
|
||||
+3
@@ -1612,6 +1612,9 @@ raceAnalysis=レース分析
|
||||
startAnalysis=スタート分析
|
||||
winningLanes=勝利レーン
|
||||
maximumNumberOfDiscards=カットレースの最大数
|
||||
externalLinks=External links
|
||||
urlForAllLanguages=URL for all languages
|
||||
urlForLanguage=URL for language ''{0}''
|
||||
notificationRegattaConfigurationUpdatedUsingByMarks="マーク別" コースデザイナーを使用して、有効なレガッタ設定が行われました。
|
||||
warningOverrideRegattaConfigurationCourseDesignerToByMarks=有効なレガッタ設定がすでに登録されていますが、コースデザイナーの設定が適切でありません。\n"マーク別" へのコースデザイナー設定を上書きしますか。
|
||||
allRacesHaveBeenDenoted=すべてのレースがレースログ追跡に表示されています。
|
||||
|
||||
+3
@@ -1612,6 +1612,9 @@ raceAnalysis=Анализ гонки
|
||||
startAnalysis=Начать анализ
|
||||
winningLanes=Выигрышные маршруты
|
||||
maximumNumberOfDiscards=Максимальное число исключений
|
||||
externalLinks=External links
|
||||
urlForAllLanguages=URL for all languages
|
||||
urlForLanguage=URL for language ''{0}''
|
||||
notificationRegattaConfigurationUpdatedUsingByMarks=Активная конфигурация регаты была настроена с использованием дизайнера курса "По отметкам".
|
||||
warningOverrideRegattaConfigurationCourseDesignerToByMarks=Активная конфигурация регаты уже существует, но с неверно выбранным дизайнером курса.\nПереопределить выбор дизайнера курса на "По отметкам"?
|
||||
allRacesHaveBeenDenoted=Отслеживание журнала всех гонок отменено.
|
||||
|
||||
+3
-1
@@ -1610,7 +1610,9 @@ raceAnalysis=比赛轮次分析
|
||||
startAnalysis=起航分析
|
||||
winningLanes=获胜的船道
|
||||
maximumNumberOfDiscards=最大放弃次数
|
||||
|
||||
externalLinks=External links
|
||||
urlForAllLanguages=URL for all languages
|
||||
urlForLanguage=URL for language ''{0}''
|
||||
chartSelectionHint=提示:您还可以使用积分榜(在 LEADERBOARD 选项卡中)选择在记录中显示的参赛队。
|
||||
chooseALanguage=选择一种语言
|
||||
solutions=解决方案
|
||||
|
||||
+3
@@ -1612,6 +1612,9 @@ raceAnalysis=比赛轮次分析
|
||||
startAnalysis=起航分析
|
||||
winningLanes=获胜的船道
|
||||
maximumNumberOfDiscards=最大放弃次数
|
||||
externalLinks=External links
|
||||
urlForAllLanguages=URL for all languages
|
||||
urlForLanguage=URL for language ''{0}''
|
||||
notificationRegattaConfigurationUpdatedUsingByMarks=已使用“按标志”场地设计器设置有效的比赛配置。
|
||||
warningOverrideRegattaConfigurationCourseDesignerToByMarks=有效的比赛配置已存在,但是场地设计器设置错误。\n是否将场地设计器设置覆盖为“按标志”?
|
||||
allRacesHaveBeenDenoted=已为比赛轮次日志跟踪描述所有比赛轮次。
|
||||
|
||||
Reference in New Issue
Block a user