Merge branch 'racecommittee_wind'

This commit is contained in:
Axel Uhl committed 2013-07-08 11:25:38 +02:00
commit cf31cfff62
43 files changed
+736 -100

No files matched your search

@@ -1,6 +1,7 @@
package com.sap.sailing.gwt.ui.client;
import com.google.gwt.i18n.client.Messages;
import com.google.gwt.safehtml.shared.SafeHtml;
public interface StringMessages extends Messages {
String helloWorld();
@@ -270,6 +271,7 @@ public interface StringMessages extends Messages {
String trackBasedEstimationWindSourceTypeName();
String expeditionWindSourceTypeName();
String webWindSourceTypeName();
String raceCommitteeWindSourceTypeName();
String clickChartToSetTime();
String position();
String windSourcesUsed();
@@ -700,6 +702,33 @@ public interface StringMessages extends Messages {
String raceLogReloaded();
String reloadAllRaceLogs();
String sideline();
String classAndGolfUp();
String classDisplayed();
String papaDisplayed();
String blackDisplayed();
String zuluIndiaDisplayed();
String papaRemoved();
String blackRemoved();
String zuluIndiaRemoved();
String classFlagRemoved();
String xray();
String firstSubstitute();
String blueFlagDisplayed();
String blueFlagRemoved();
String golfRemoved();
String answeringPennantOverAlphaDisplayed();
String answeringPennantOverHotelDisplayed();
String answeringPennantDisplayed();
String answeringPennantRemoved();
String novemberOverAlphaDisplayed();
String novemberOverHotelDisplayed();
String novemberDisplayed();
String bravoDisplayed();
String bravoRemoved();
String essThreeDisplayed();
String essTwoDisplayed();
String essOneDisplayed();
String essOneRemoved();
String export();
String dataBeforeAfter();
String rawFixes();
@@ -713,4 +742,5 @@ public interface StringMessages extends Messages {
String importOverrideSwitchLabel();
String importSelectedLeaderboardGroups();
String importSelectAtLeastOne();
String deselectAll();
}
@@ -293,6 +293,7 @@ courseBasedWindSourceTypeName=Course Layout
trackBasedEstimationWindSourceTypeName=Estimation
expeditionWindSourceTypeName=Measured
webWindSourceTypeName=Manual
raceCommitteeWindSourceTypeName=Race Committee
clickChartToSetTime=Click on the chart to set the time
position=Position
windSourcesUsed=Wind Sources Used
@@ -695,6 +696,33 @@ raceLogReloaded=RaceLog successfully reloaded from database
reloadAllRaceLogs=Reload all race logs
export=Export
sideline=Sideline
classAndGolfUp=Flag displayed - eight minutes till start - the startprocedure is a gate start
classDisplayed=Flag displayed - five minutes till start
papaDisplayed=Start mode flag - four minutes till start
blackDisplayed=Start mode flag - disqualification for early starters - four minutes till start
zuluIndiaDisplayed=Start mode flag - penalties for early starters - four minutes till start
papaRemoved=Start mode flag - one minute till start
blackRemoved=Start mode flag - disqualification for early starters - one minute till start
zuluIndiaRemoved=Start mode flag - start with penalties for early starters - one minute till start
classFlagRemoved=Flag removed - race starting signal
xray=Individual recall - had early starters
firstSubstitute=General recall - had too many early starters - start procedure will be repeated
blueFlagDisplayed=Flag displayed - first competitor passed the finishing line
blueFlagRemoved=Flag removed - last competitor passed the finishing line or the finish time limit is passed
golfRemoved=Flag removed - gate is closed
answeringPennantOverAlphaDisplayed=Flag displayed - start postponed - no more racing today
answeringPennantOverHotelDisplayed=Flag displayed - start postponed - further signals ashore
answeringPennantDisplayed=Flag displayed - start postponed
answeringPennantRemoved=Flag removed - start procedure starts in one minute
novemberOverAlphaDisplayed=Flag displayed - race abandoned - no more racing today
novemberOverHotelDisplayed=Flag displayed - race abandoned - further signals ashore
novemberDisplayed=Flag displayed - race abandoned
bravoDisplayed=Protest time started
bravoRemoved=Protest time ended
essThreeDisplayed=Three minutes till start
essTwoDisplayed=Two minutes till start
essOneDisplayed=One minute till start
essOneRemoved=Race starting signal
dataBeforeAfter=Data from before/after race
rawFixes=All fixes (including outliers)
importRemoteHost=Remote host:
@@ -706,4 +734,5 @@ importServerError=GET leaderboardgroups request failed with Server error. Please
importLeaderboardGroups=Leaderboard Groups:
importOverrideSwitchLabel=Override existing data if names and ids match
importSelectedLeaderboardGroups=Import selected leaderboard groups
importSelectAtLeastOne=You have to select at least one leaderboard group to import
importSelectAtLeastOne=You have to select at least one leaderboard group to import
deselectAll=Deselect all
@@ -294,6 +294,7 @@ courseBasedWindSourceTypeName=Kurslayout
trackBasedEstimationWindSourceTypeName=Schätzung
expeditionWindSourceTypeName=Messung
webWindSourceTypeName=Manuell
raceCommitteeWindSourceTypeName=Wettfahrtleitung
clickChartToSetTime=Klicke auf das Diagramm um die Zeit zu setzen
position=Position
windSourcesUsed=Benutzte Windquellen
@@ -691,6 +692,33 @@ raceLogReloaded=RaceLog wurde neu geladen
reloadAllRaceLogs=Alle RaceLogs neu laden
export=Exportieren
sideline=Seitenlinie
classAndGolfUp=Flagge angezeigt - acht Minuten bis zum Start - die Startprozedur ist der Gate Start
classDisplayed=Flagge angezeigt - fünf Minuten bis zum Start
papaDisplayed=Startmodusflagge - vier Minuten bis zum Start
blackDisplayed=Startmodusflagge - Disqualifizierung für Frühstarter - vier Minuten bis zum Start
zuluIndiaDisplayed=Startmodusflagge - Strafen für Frühstarter - vier Minuten bis zum Start
papaRemoved=Startmodusflagge - eine Minute bis zum Start
blackRemoved=Startmodusflagge - Disqualifizierung für Frühstarter - eine Minute bis zum Start
zuluIndiaRemoved=Startmodusflagge - Strafen für Frühstarter - eine Minute bis zum Start
classFlagRemoved=Flagge heruntergenommen - Rennstartsignal
xray=Individueller Rückruf eines Frühstarters
firstSubstitute=Gesamtrückruf - es gab zu viele Frühstarter - die Startprozedur wird wiederholt
blueFlagDisplayed=Flagge angezeigt - erster Teilnehmer im Ziel
blueFlagRemoved=Flagge heruntergenommen - letzter Teilnehmer hat das Ziel erreicht oder das Zielzeitlimit ist erreicht
golfRemoved=Flagge heruntergenommen - das Startgate ist geschlossen
answeringPennantOverAlphaDisplayed=Flagge angezeigt - Startverschiebung - heute keine Rennen mehr
answeringPennantOverHotelDisplayed=Flagge angezeigt - Startverschiebung - weitere Signale an Land
answeringPennantDisplayed=Flagge angezeigt - Startverschiebung
answeringPennantRemoved=Flagge heruntergenommen - Startprozedur startet in einer Minute
novemberOverAlphaDisplayed=Flagge angezeigt - Rennabbruch - heute keine Rennen mehr
novemberOverHotelDisplayed=Flagge angezeigt - Rennabbruch - weitere Signale an Land
novemberDisplayed=Flagge angezeigt - Rennabbruch
bravoDisplayed=Protestzeit hat begonnen
bravoRemoved=Protestzeit beendet
essThreeDisplayed=Drei Minuten bis zum Start
essTwoDisplayed=Zwei Minuten bis zum Start
essOneDisplayed=Eine Minute bis zum Start
essOneRemoved=Rennstartsignal
dataBeforeAfter=Daten von vor/nach dem Rennen
rawFixes=Alle Fixes (inklusive Ausreißer)
importRemoteHost=Entfernter Host:
@@ -702,4 +730,5 @@ importServerError=Der GET leaderboardgroups Request scheiterte an einem Server E
importLeaderboardGroups=Leaderboard Groups:
importOverrideSwitchLabel=Bei übereinstimmenden IDs und Namen die Daten überschreiben
importSelectedLeaderboardGroups=Ausgewählte Leaderboard Groups selektieren
importSelectAtLeastOne=Es muss mindestens eine Leaderboard Group ausgewählt werden
importSelectAtLeastOne=Es muss mindestens eine Leaderboard Group ausgewählt werden
deselectAll=Alle deselektieren
@@ -16,6 +16,8 @@ public class WindSourceTypeFormatter {
return stringMessages.expeditionWindSourceTypeName();
case WEB:
return stringMessages.webWindSourceTypeName();
case RACECOMMITTEE:
return stringMessages.raceCommitteeWindSourceTypeName();
}
return null;
}
@@ -0,0 +1,67 @@
package com.sap.sailing.gwt.ui.regattaoverview;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.gwt.ui.client.StringMessages;
public class FlagsMeaningExplanator {
public static String getFlagsMeaning(StringMessages stringMessages, Flags upperFlag, Flags lowerFlag, boolean displayed) {
if (upperFlag.equals(Flags.CLASS) && lowerFlag.equals(Flags.GOLF) && displayed) {
return stringMessages.classAndGolfUp();
} else if (upperFlag.equals(Flags.CLASS) && displayed) {
return stringMessages.classDisplayed();
} else if (upperFlag.equals(Flags.PAPA) && displayed) {
return stringMessages.papaDisplayed();
} else if (upperFlag.equals(Flags.BLACK) && displayed) {
return stringMessages.blackDisplayed();
} else if ((upperFlag.equals(Flags.ZULU) || upperFlag.equals(Flags.INDIA)) && displayed) {
return stringMessages.zuluIndiaDisplayed();
} else if (upperFlag.equals(Flags.PAPA) && !displayed) {
return stringMessages.papaRemoved();
} else if (upperFlag.equals(Flags.BLACK) && !displayed) {
return stringMessages.blackRemoved();
} else if ((upperFlag.equals(Flags.ZULU) || upperFlag.equals(Flags.INDIA)) && !displayed) {
return stringMessages.zuluIndiaRemoved();
} else if (upperFlag.equals(Flags.CLASS) && !displayed) {
return stringMessages.classFlagRemoved();
} else if (upperFlag.equals(Flags.XRAY)) {
return stringMessages.xray();
} else if (upperFlag.equals(Flags.FIRSTSUBSTITUTE)) {
return stringMessages.firstSubstitute();
} else if (upperFlag.equals(Flags.BLUE) && displayed) {
return stringMessages.blueFlagDisplayed();
} else if (upperFlag.equals(Flags.BLUE) && !displayed) {
return stringMessages.blueFlagRemoved();
} else if (upperFlag.equals(Flags.GOLF) && !displayed) {
return stringMessages.golfRemoved();
} else if (upperFlag.equals(Flags.AP) && lowerFlag.equals(Flags.ALPHA) && displayed) {
return stringMessages.answeringPennantOverAlphaDisplayed();
} else if (upperFlag.equals(Flags.AP) && lowerFlag.equals(Flags.HOTEL) && displayed) {
return stringMessages.answeringPennantOverHotelDisplayed();
} else if (upperFlag.equals(Flags.AP) && displayed) {
return stringMessages.answeringPennantDisplayed();
} else if (upperFlag.equals(Flags.AP) && !displayed) {
return stringMessages.answeringPennantRemoved();
} else if (upperFlag.equals(Flags.NOVEMBER) && lowerFlag.equals(Flags.ALPHA) && displayed) {
return stringMessages.novemberOverAlphaDisplayed();
} else if (upperFlag.equals(Flags.NOVEMBER) && lowerFlag.equals(Flags.HOTEL) && displayed) {
return stringMessages.novemberOverHotelDisplayed();
} else if (upperFlag.equals(Flags.NOVEMBER) && displayed) {
return stringMessages.novemberDisplayed();
} else if (upperFlag.equals(Flags.BRAVO) && displayed) {
return stringMessages.bravoDisplayed();
} else if (upperFlag.equals(Flags.BRAVO) && !displayed) {
return stringMessages.bravoRemoved();
} else if (upperFlag.equals(Flags.ESSTHREE) && displayed) {
return stringMessages.essThreeDisplayed();
} else if (upperFlag.equals(Flags.ESSTWO) && displayed) {
return stringMessages.essTwoDisplayed();
} else if (upperFlag.equals(Flags.ESSONE) && displayed) {
return stringMessages.essOneDisplayed();
} else if (upperFlag.equals(Flags.ESSONE) && !displayed) {
return stringMessages.essOneRemoved();
}
return "";
}
}
@@ -40,7 +40,7 @@ public class RaceDetailPanel extends SimplePanel {
private final DateTimeFormat dateFormatter = DateTimeFormat.getFormat("dd.MM.yyyy");
private final DurationFormat durationFormatter = new DurationFormat();
private final NumberFormat decimalFormat = NumberFormat.getFormat("#.##");
private final FlagAlphabetInterpreter flagInterpreter;
private final RaceStateFlagsInterpreter flagInterpreter;
private final StringMessages stringMessages;
private final Button closeButton;
@@ -61,7 +61,7 @@ public class RaceDetailPanel extends SimplePanel {
public RaceDetailPanel(final StringMessages stringMessages, final ClickHandler closeButtonHandler) {
this.stringMessages = stringMessages;
this.flagInterpreter = new FlagAlphabetInterpreter(stringMessages);
this.flagInterpreter = new RaceStateFlagsInterpreter(stringMessages);
closeButton = new Button(stringMessages.close());
closeButton.addClickHandler(new ClickHandler() {
@Override
@@ -1,13 +1,13 @@
package com.sap.sailing.gwt.ui.regattaoverview;
import com.sap.sailing.domain.common.racelog.utils.FlagAlphabetInterpretationTemplate;
import com.sap.sailing.domain.common.racelog.utils.RaceStateFlagsInterpretationTemplate;
import com.sap.sailing.gwt.ui.client.StringMessages;
public class FlagAlphabetInterpreter extends FlagAlphabetInterpretationTemplate {
public class RaceStateFlagsInterpreter extends RaceStateFlagsInterpretationTemplate {
private StringMessages stringMessages;
public FlagAlphabetInterpreter(StringMessages stringMessages) {
public RaceStateFlagsInterpreter(StringMessages stringMessages) {
this.stringMessages = stringMessages;
}
@@ -92,7 +92,7 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component
private TextColumn<RegattaOverviewEntryDTO> fleetNameColumn;
private final RegattaRaceStatesSettings settings;
private final FlagAlphabetInterpreter flagInterpreter;
private final RaceStateFlagsInterpreter flagInterpreter;
private final String localStorageRegattaOverviewEventKey;
@@ -133,7 +133,7 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component
this.localStorageRegattaOverviewEventKey = LOCAL_STORAGE_REGATTA_OVERVIEW_KEY + eventIdAsString;
this.flagInterpreter = new FlagAlphabetInterpreter(stringMessages);
this.flagInterpreter = new RaceStateFlagsInterpreter(stringMessages);
this.settings = new RegattaRaceStatesSettings();
loadAndSetSettings(settings);
@@ -411,11 +411,15 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component
@Override
public SafeHtml getValue(RegattaOverviewEntryDTO entryDTO) {
String tooltip = "";
if (entryDTO.raceInfo.lastUpperFlag != null) {
if (entryDTO.raceInfo.lastUpperFlag != null && entryDTO.raceInfo.lastLowerFlag != null) {
tooltip = entryDTO.raceInfo.lastUpperFlag.name();
if (entryDTO.raceInfo.lastLowerFlag != null && !entryDTO.raceInfo.lastLowerFlag.equals(Flags.NONE)) {
if (!entryDTO.raceInfo.lastLowerFlag.equals(Flags.NONE)) {
tooltip += " over " + entryDTO.raceInfo.lastLowerFlag.name();
}
tooltip += " " + FlagsMeaningExplanator.getFlagsMeaning(stringMessages,
entryDTO.raceInfo.lastUpperFlag,
entryDTO.raceInfo.lastLowerFlag,
entryDTO.raceInfo.isLastFlagDisplayed);
}
return SailingFlagsBuilder.render(
entryDTO.raceInfo.lastUpperFlag,
@@ -6,7 +6,10 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FocusWidget;
@@ -34,6 +37,8 @@ public class RegattaRaceStatesSettingsDialogComponent implements SettingsDialogC
private final Map<String, CheckBox> courseAreaCheckBoxMap;
private final Map<String, CheckBox> regattaCheckBoxMap;
private final Anchor resultingLink;
private Button courseAreaDeselectButton;
private Button regattaDeselectButton;
private final static String SETTINGS_DIALOG_COMPONENT = "SettingsDialogComponent";
@@ -68,9 +73,12 @@ public class RegattaRaceStatesSettingsDialogComponent implements SettingsDialogC
Grid courseAreaGrid = new Grid(numberOfRequiredRows, maxCourseAreasPerRow);
courseAreaPanel.add(courseAreaGrid);
boolean allCheckboxesSelected = true;
for (CourseAreaDTO courseAreaDTO : courseAreas) {
CheckBox checkBox = dialog.createCheckbox(courseAreaDTO.getName());
checkBox.setValue(Util.contains(initialSettings.getVisibleCourseAreas(), courseAreaDTO.id));
boolean isCourseAreaVisible = Util.contains(initialSettings.getVisibleCourseAreas(), courseAreaDTO.id);
allCheckboxesSelected &= isCourseAreaVisible;
checkBox.setValue(isCourseAreaVisible);
courseAreaCheckBoxMap.put(courseAreaDTO.id, checkBox);
courseAreaGrid.setWidget(rowIndex, columnIndex++, checkBox);
@@ -79,6 +87,29 @@ public class RegattaRaceStatesSettingsDialogComponent implements SettingsDialogC
columnIndex = 0;
}
}
courseAreaDeselectButton = new Button();
setTextOfDeselectButton(courseAreaDeselectButton, allCheckboxesSelected);
courseAreaDeselectButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (courseAreaDeselectButton.getText().equals(stringMessages.deselectAll())) {
for (CheckBox checkBox : courseAreaCheckBoxMap.values()) {
checkBox.setValue(false);
}
courseAreaDeselectButton.setText(stringMessages.selectAll());
} else {
for (CheckBox checkBox : courseAreaCheckBoxMap.values()) {
checkBox.setValue(true);
}
courseAreaDeselectButton.setText(stringMessages.deselectAll());
}
}
});
flowPanel.add(courseAreaDeselectButton);
return flowPanel;
}
@@ -101,9 +132,12 @@ public class RegattaRaceStatesSettingsDialogComponent implements SettingsDialogC
Grid regattaGrid = new Grid(numberOfRequiredRows, maxRegattasPerRow);
regattaNamesPanel.add(regattaGrid);
boolean allCheckboxesSelected = true;
for (RaceGroupDTO raceGroup : raceGroups) {
CheckBox checkBox = dialog.createCheckbox(raceGroup.displayName);
checkBox.setValue(Util.contains(initialSettings.getVisibleRegattas(), raceGroup.getName()));
boolean isRaceGroupVisible = Util.contains(initialSettings.getVisibleRegattas(), raceGroup.getName());
allCheckboxesSelected &= isRaceGroupVisible;
checkBox.setValue(isRaceGroupVisible);
regattaCheckBoxMap.put(raceGroup.getName(), checkBox);
regattaGrid.setWidget(rowIndex, columnIndex++, checkBox);
@@ -112,9 +146,40 @@ public class RegattaRaceStatesSettingsDialogComponent implements SettingsDialogC
columnIndex = 0;
}
}
regattaDeselectButton = new Button();
setTextOfDeselectButton(regattaDeselectButton, allCheckboxesSelected);
regattaDeselectButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (regattaDeselectButton.getText().equals(stringMessages.deselectAll())) {
for (CheckBox checkBox : regattaCheckBoxMap.values()) {
checkBox.setValue(false);
}
regattaDeselectButton.setText(stringMessages.selectAll());
} else {
for (CheckBox checkBox : regattaCheckBoxMap.values()) {
checkBox.setValue(true);
}
regattaDeselectButton.setText(stringMessages.deselectAll());
}
}
});
flowPanel.add(regattaDeselectButton);
return flowPanel;
}
private void setTextOfDeselectButton(Button deselectButton, boolean allCheckboxesSelected) {
if (allCheckboxesSelected) {
deselectButton.setText(stringMessages.deselectAll());
} else {
deselectButton.setText(stringMessages.selectAll());
}
}
private CheckBox getShowOnlyRacesOfSameDayWidget(DataEntryDialog<?> dialog) {
showOnlyRacesOfSameDayCheckBox = dialog.createCheckbox(stringMessages.showOnlyRacesOfSameDay());
showOnlyRacesOfSameDayCheckBox.setValue(initialSettings.isShowOnlyRacesOfSameDay());
@@ -160,6 +225,8 @@ public class RegattaRaceStatesSettingsDialogComponent implements SettingsDialogC
selectedCourseAreas.add(entry.getKey());
}
}
boolean allCourseAreasSelected = selectedCourseAreas.size() == courseAreas.size();
setTextOfDeselectButton(courseAreaDeselectButton, allCourseAreasSelected);
List<String> selectedRegattas = new ArrayList<String>();
for (Entry<String, CheckBox> entry : regattaCheckBoxMap.entrySet()) {
@@ -167,6 +234,8 @@ public class RegattaRaceStatesSettingsDialogComponent implements SettingsDialogC
selectedRegattas.add(entry.getKey());
}
}
boolean allRegattasSelected = selectedRegattas.size() == raceGroups.size();
setTextOfDeselectButton(regattaDeselectButton, allRegattasSelected);
boolean isShowOnlyRacesOfSameDay = showOnlyRacesOfSameDayCheckBox.getValue();
boolean isShowOnlyCurrentlyRunningRaces = showOnlyCurrentlyRunningRacesCheckBox.getValue();