Merge remote-tracking branch 'origin/bug3879'

This commit is contained in:
fmittag
2016-10-20 14:25:11 +02:00
11 changed files with 123 additions and 44 deletions
@@ -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
@@ -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;
}
}
@@ -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);
}
}
@@ -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;
}
}
@@ -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();
}
@@ -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
@@ -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
@@ -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=すべてのレースがレースログ追跡に表示されています。
@@ -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=Отслеживание журнала всех гонок отменено.
@@ -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=解决方案
@@ -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=已为比赛轮次日志跟踪描述所有比赛轮次。