mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-02 18:33:54 +00:00
Merge remote-tracking branch 'origin/master'
Conflicts: java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties
This commit is contained in:
commit
923f633a5e
27 files changed
+2297
-2112
No files matched your search
+1
-3
@@ -21,10 +21,8 @@ public enum DetailType implements Serializable {
|
||||
RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS(2, DESCENDING), RACE_GAP_TO_LEADER_IN_SECONDS(0, ASCENDING),
|
||||
RACE_DISTANCE_TO_LEADER_IN_METERS(0, ASCENDING), RACE_AVERAGE_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING),
|
||||
WINDWARD_DISTANCE_TO_OVERALL_LEADER(0, ASCENDING),
|
||||
HEAD_UP(0, ASCENDING), BEAR_AWAY(0, ASCENDING),
|
||||
TACK(0, ASCENDING), JIBE(0, ASCENDING), PENALTY_CIRCLE(0, ASCENDING), AVERAGE_MANEUVER_LOSS_IN_METERS(1, ASCENDING),
|
||||
AVERAGE_TACK_LOSS_IN_METERS(1, ASCENDING), AVERAGE_JIBE_LOSS_IN_METERS(1, ASCENDING),
|
||||
MARK_PASSING(0, ASCENDING), CURRENT_LEG(0, ASCENDING),
|
||||
AVERAGE_TACK_LOSS_IN_METERS(1, ASCENDING), AVERAGE_JIBE_LOSS_IN_METERS(1, ASCENDING), CURRENT_LEG(0, ASCENDING),
|
||||
DISPLAY_LEGS(0, NONE), TIME_TRAVELED(0, ASCENDING),
|
||||
TOTAL_TIME_SAILED_DOWNWIND_IN_SECONDS(1, ASCENDING),
|
||||
TOTAL_TIME_SAILED_UPWIND_IN_SECONDS(1, ASCENDING),
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.sap.sailing.gwt.ui.test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.SafeHtmlHeaderWithTooltip;
|
||||
|
||||
public class SafeHtmlHeaderWithTooltipTest {
|
||||
|
||||
@Test
|
||||
public void textCreation() {
|
||||
SafeHtmlBuilder titleBuilder = new SafeHtmlBuilder().appendEscaped("Title Text");
|
||||
SafeHtmlHeaderWithTooltip header = new SafeHtmlHeaderWithTooltip(titleBuilder.toSafeHtml(), "Tooltip");
|
||||
assertEquals("<span title=\"Tooltip\">Title Text</ span>", header.getValue().asString());
|
||||
|
||||
titleBuilder = new SafeHtmlBuilder().appendEscapedLines("Title\nText");
|
||||
header = new SafeHtmlHeaderWithTooltip(titleBuilder.toSafeHtml(), "Tooltip");
|
||||
assertEquals("<span title=\"Tooltip\">Title<br>Text</ span>", header.getValue().asString());
|
||||
|
||||
titleBuilder = new SafeHtmlBuilder().appendEscaped("Title Text");
|
||||
header = new SafeHtmlHeaderWithTooltip(titleBuilder.toSafeHtml(), "Tooltip with\nline break.");
|
||||
assertEquals("<span title=\"Tooltip with\nline break.\">Title Text</ span>", header.getValue().asString());
|
||||
}
|
||||
|
||||
}
|
||||
+562
@@ -0,0 +1,562 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.cell.client.AbstractCell;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.event.dom.client.KeyUpEvent;
|
||||
import com.google.gwt.event.dom.client.KeyUpHandler;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
|
||||
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
|
||||
import com.google.gwt.safehtml.shared.SafeHtml;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
|
||||
import com.google.gwt.text.client.DateTimeFormatRenderer;
|
||||
import com.google.gwt.user.cellview.client.CellTable;
|
||||
import com.google.gwt.user.cellview.client.Column;
|
||||
import com.google.gwt.user.cellview.client.ColumnSortEvent;
|
||||
import com.google.gwt.user.cellview.client.ColumnSortList;
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaDisplayer;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.URLFactory;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent;
|
||||
|
||||
public abstract class AbstractTrackedRacesListComposite extends SimplePanel implements Component<TrackedRacesSettings>,
|
||||
RegattaDisplayer, RaceSelectionChangeListener {
|
||||
|
||||
protected final long DEFAULT_LIVE_DELAY_IN_MILLISECONDS = 5000;
|
||||
|
||||
private final boolean multiSelection;
|
||||
|
||||
private boolean dontFireNextSelectionChangeEvent;
|
||||
|
||||
private final SelectionModel<RaceDTO> selectionModel;
|
||||
|
||||
private final CellTable<RaceDTO> raceTable;
|
||||
|
||||
private ListDataProvider<RaceDTO> raceList;
|
||||
|
||||
private Iterable<RaceDTO> allRaces;
|
||||
|
||||
private final VerticalPanel panel;
|
||||
|
||||
private DateTimeFormatRenderer dateFormatter = new DateTimeFormatRenderer(
|
||||
DateTimeFormat.getFormat(PredefinedFormat.DATE_SHORT));
|
||||
private DateTimeFormatRenderer timeFormatter = new DateTimeFormatRenderer(
|
||||
DateTimeFormat.getFormat(PredefinedFormat.TIME_LONG));
|
||||
|
||||
private final Label noTrackedRacesLabel;
|
||||
|
||||
protected final SailingServiceAsync sailingService;
|
||||
protected final ErrorReporter errorReporter;
|
||||
protected final RegattaRefresher regattaRefresher;
|
||||
private final RaceSelectionProvider raceSelectionProvider;
|
||||
protected final StringMessages stringMessages;
|
||||
|
||||
private final Button btnRefresh;
|
||||
|
||||
private final TextBox filterRacesTextbox;
|
||||
|
||||
protected final TrackedRacesSettings settings;
|
||||
|
||||
public static class AnchorCell extends AbstractCell<SafeHtml> {
|
||||
|
||||
@Override
|
||||
public void render(com.google.gwt.cell.client.Cell.Context context, SafeHtml safeHtml, SafeHtmlBuilder sb) {
|
||||
sb.append(safeHtml);
|
||||
}
|
||||
}
|
||||
|
||||
interface AnchorTemplates extends SafeHtmlTemplates {
|
||||
@SafeHtmlTemplates.Template("<a href=\"{0}\">{1}</a>")
|
||||
SafeHtml cell(String url, String displayName);
|
||||
}
|
||||
|
||||
private static AnchorTemplates ANCHORTEMPLATE = GWT.create(AnchorTemplates.class);
|
||||
|
||||
public AbstractTrackedRacesListComposite(final SailingServiceAsync sailingService,
|
||||
final ErrorReporter errorReporter, final RegattaRefresher regattaRefresher,
|
||||
RaceSelectionProvider raceSelectionProvider, final StringMessages stringMessages, boolean hasMultiSelection) {
|
||||
this.sailingService = sailingService;
|
||||
this.errorReporter = errorReporter;
|
||||
this.regattaRefresher = regattaRefresher;
|
||||
this.multiSelection = hasMultiSelection;
|
||||
this.raceSelectionProvider = raceSelectionProvider;
|
||||
this.stringMessages = stringMessages;
|
||||
|
||||
raceList = new ListDataProvider<RaceDTO>();
|
||||
selectionModel = multiSelection ? new MultiSelectionModel<RaceDTO>() : new SingleSelectionModel<RaceDTO>();
|
||||
settings = new TrackedRacesSettings();
|
||||
settings.setDelayToLiveInSeconds(DEFAULT_LIVE_DELAY_IN_MILLISECONDS / 1000l);
|
||||
|
||||
panel = new VerticalPanel();
|
||||
setWidget(panel);
|
||||
|
||||
HorizontalPanel filterPanel = new HorizontalPanel();
|
||||
panel.add(filterPanel);
|
||||
Label lblFilterRaces = new Label(stringMessages.filterRacesByName() + ":");
|
||||
lblFilterRaces.setWordWrap(false);
|
||||
filterPanel.setSpacing(5);
|
||||
filterPanel.add(lblFilterRaces);
|
||||
filterPanel.setCellVerticalAlignment(lblFilterRaces, HasVerticalAlignment.ALIGN_MIDDLE);
|
||||
filterRacesTextbox = new TextBox();
|
||||
filterRacesTextbox.addKeyUpHandler(new KeyUpHandler() {
|
||||
@Override
|
||||
public void onKeyUp(KeyUpEvent event) {
|
||||
fillRaceListFromAvailableRacesApplyingFilter();
|
||||
}
|
||||
});
|
||||
filterPanel.add(filterRacesTextbox);
|
||||
|
||||
noTrackedRacesLabel = new Label(stringMessages.noRacesYet());
|
||||
noTrackedRacesLabel.setWordWrap(false);
|
||||
panel.add(noTrackedRacesLabel);
|
||||
|
||||
AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
|
||||
raceTable = new CellTable<RaceDTO>(/* pageSize */10000, tableRes);
|
||||
raceTable.ensureDebugId("TrackedRaces");
|
||||
ListHandler<RaceDTO> columnSortHandler = setupTableColumns(stringMessages);
|
||||
raceTable.setWidth("300px");
|
||||
raceTable.setSelectionModel(selectionModel);
|
||||
raceTable.setVisible(false);
|
||||
panel.add(raceTable);
|
||||
raceList.addDataDisplay(raceTable);
|
||||
raceTable.addColumnSortHandler(columnSortHandler);
|
||||
raceTable.getSelectionModel().addSelectionChangeHandler(new Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
List<RaceDTO> selectedRaces = getSelectedRaces();
|
||||
makeControlsReactToSelectionChange(selectedRaces);
|
||||
if (dontFireNextSelectionChangeEvent) {
|
||||
dontFireNextSelectionChangeEvent = false;
|
||||
} else {
|
||||
List<RegattaAndRaceIdentifier> selectedRaceIdentifiers = new ArrayList<RegattaAndRaceIdentifier>();
|
||||
for (RaceDTO selectedRace : selectedRaces) {
|
||||
selectedRaceIdentifiers.add(selectedRace.getRaceIdentifier());
|
||||
}
|
||||
AbstractTrackedRacesListComposite.this.raceSelectionProvider.setSelection(selectedRaceIdentifiers,
|
||||
AbstractTrackedRacesListComposite.this);
|
||||
}
|
||||
}
|
||||
});
|
||||
HorizontalPanel trackedRacesButtonPanel = new HorizontalPanel();
|
||||
trackedRacesButtonPanel.setSpacing(10);
|
||||
panel.add(trackedRacesButtonPanel);
|
||||
|
||||
btnRefresh = new Button(stringMessages.refresh());
|
||||
btnRefresh.ensureDebugId("Refresh");
|
||||
btnRefresh.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
regattaRefresher.fillRegattas();
|
||||
}
|
||||
});
|
||||
trackedRacesButtonPanel.add(btnRefresh);
|
||||
|
||||
addControlButtons(trackedRacesButtonPanel);
|
||||
|
||||
}
|
||||
|
||||
abstract protected void makeControlsReactToSelectionChange(List<RaceDTO> selectedRaces);
|
||||
|
||||
abstract protected void addControlButtons(HorizontalPanel trackedRacesButtonPanel);
|
||||
|
||||
private ListHandler<RaceDTO> setupTableColumns(final StringMessages stringMessages) {
|
||||
ListHandler<RaceDTO> columnSortHandler = new ListHandler<RaceDTO>(raceList.getList());
|
||||
TextColumn<RaceDTO> regattaNameColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
return raceDTO.getRegattaName();
|
||||
}
|
||||
};
|
||||
regattaNameColumn.setSortable(true);
|
||||
|
||||
columnSortHandler.setComparator(regattaNameColumn, new Comparator<RaceDTO>() {
|
||||
@Override
|
||||
public int compare(RaceDTO t1, RaceDTO t2) {
|
||||
String regatta1Name = t1.getRegattaName();
|
||||
String regatta2Name = t2.getRegattaName();
|
||||
boolean ascending = isSortedAscending();
|
||||
if (regatta1Name.equals(regatta2Name)) {
|
||||
return 0;
|
||||
}
|
||||
int val = ascending ? regatta1Name.compareTo(regatta2Name) : -(regatta2Name.compareTo(regatta1Name));
|
||||
return val;
|
||||
}
|
||||
|
||||
private boolean isSortedAscending() {
|
||||
ColumnSortList sortList = raceTable.getColumnSortList();
|
||||
return sortList.size() > 0 & sortList.get(0).isAscending();
|
||||
}
|
||||
});
|
||||
|
||||
TextColumn<RaceDTO> boatClassNameColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
return raceDTO.boatClass == null ? "" : raceDTO.boatClass;
|
||||
}
|
||||
};
|
||||
boatClassNameColumn.setSortable(true);
|
||||
|
||||
columnSortHandler.setComparator(boatClassNameColumn, new Comparator<RaceDTO>() {
|
||||
@Override
|
||||
public int compare(RaceDTO t1, RaceDTO t2) {
|
||||
String boatClass1 = t1.boatClass;
|
||||
String boatClass2 = t2.boatClass;
|
||||
boolean ascending = isSortedAscending();
|
||||
if (boatClass1.equals(boatClass2)) {
|
||||
return 0;
|
||||
}
|
||||
int val = ascending ? boatClass1.compareTo(boatClass2) : -(boatClass2.compareTo(boatClass1));
|
||||
return val;
|
||||
}
|
||||
|
||||
private boolean isSortedAscending() {
|
||||
ColumnSortList sortList = raceTable.getColumnSortList();
|
||||
return sortList.size() > 0 & sortList.get(0).isAscending();
|
||||
}
|
||||
});
|
||||
|
||||
AnchorCell anchorCell = new AnchorCell();
|
||||
Column<RaceDTO, SafeHtml> raceNameColumn = new Column<RaceDTO, SafeHtml>(anchorCell) {
|
||||
@Override
|
||||
public SafeHtml getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.isTracked == true) {
|
||||
RegattaNameAndRaceName raceIdentifier = (RegattaNameAndRaceName) raceDTO.getRaceIdentifier();
|
||||
String debugParam = Window.Location.getParameter("gwt.codesvr");
|
||||
String link = URLFactory.INSTANCE.encode("/gwt/RaceBoard.html?raceName="
|
||||
+ raceIdentifier.getRaceName() + "®attaName=" + raceIdentifier.getRegattaName()
|
||||
+ ((debugParam != null && !debugParam.isEmpty()) ? "&gwt.codesvr=" + debugParam : ""));
|
||||
return ANCHORTEMPLATE.cell(link, raceDTO.name);
|
||||
} else {
|
||||
return SafeHtmlUtils.fromString(raceDTO.name);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
raceNameColumn.setSortable(true);
|
||||
|
||||
columnSortHandler.setComparator(raceNameColumn, new Comparator<RaceDTO>() {
|
||||
@Override
|
||||
public int compare(RaceDTO t1, RaceDTO t2) {
|
||||
boolean ascending = isSortedAscending();
|
||||
if (t1.name.equals(t2.name)) {
|
||||
return 0;
|
||||
}
|
||||
int val = -1;
|
||||
val = (t1 != null && t2 != null && ascending) ? (t1.name.compareTo(t2.name)) : -(t2.name
|
||||
.compareTo(t1.name));
|
||||
return val;
|
||||
}
|
||||
|
||||
private boolean isSortedAscending() {
|
||||
ColumnSortList sortList = raceTable.getColumnSortList();
|
||||
return sortList.size() > 0 & sortList.get(0).isAscending();
|
||||
}
|
||||
});
|
||||
|
||||
TextColumn<RaceDTO> raceStartColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.startOfRace != null) {
|
||||
return dateFormatter.render(raceDTO.startOfRace) + " " + timeFormatter.render(raceDTO.startOfRace);
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
};
|
||||
raceStartColumn.setSortable(true);
|
||||
|
||||
columnSortHandler.setComparator(raceStartColumn, new Comparator<RaceDTO>() {
|
||||
@Override
|
||||
public int compare(RaceDTO t1, RaceDTO t2) {
|
||||
if (t1.startOfRace != null && t2.startOfRace != null) {
|
||||
boolean ascending = isSortedAscending();
|
||||
int val = -1;
|
||||
val = (t1.startOfRace.after(t2.startOfRace) && ascending) ? 1 : -1;
|
||||
return val;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private boolean isSortedAscending() {
|
||||
ColumnSortList sortList = raceTable.getColumnSortList();
|
||||
return sortList.size() > 0 & sortList.get(0).isAscending();
|
||||
}
|
||||
});
|
||||
|
||||
TextColumn<RaceDTO> raceTrackedColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.isTracked == true)
|
||||
return stringMessages.tracked();
|
||||
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
TextColumn<RaceDTO> hasWindDataColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.trackedRace != null && raceDTO.trackedRace.hasWindData == true)
|
||||
return stringMessages.yes();
|
||||
else
|
||||
return stringMessages.no();
|
||||
}
|
||||
};
|
||||
|
||||
TextColumn<RaceDTO> hasGPSDataColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.trackedRace != null && raceDTO.trackedRace.hasGPSData == true) {
|
||||
return stringMessages.yes();
|
||||
} else {
|
||||
return stringMessages.no();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
TextColumn<RaceDTO> raceLiveDelayColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.isTracked && raceDTO.trackedRace != null && raceDTO.trackedRace.delayToLiveInMs > 0) {
|
||||
return "" + raceDTO.trackedRace.delayToLiveInMs / 1000;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
raceTable.addColumn(regattaNameColumn, stringMessages.regatta());
|
||||
raceTable.addColumn(boatClassNameColumn, stringMessages.boatClass());
|
||||
raceTable.addColumn(raceNameColumn, stringMessages.race());
|
||||
raceTable.addColumn(raceStartColumn, stringMessages.startTime());
|
||||
raceTable.addColumn(raceTrackedColumn, stringMessages.tracked());
|
||||
raceTable.addColumn(hasWindDataColumn, "Wind data");
|
||||
raceTable.addColumn(hasGPSDataColumn, "GPS data");
|
||||
|
||||
raceTable.addColumn(raceLiveDelayColumn, stringMessages.delayInSeconds());
|
||||
return columnSortHandler;
|
||||
}
|
||||
|
||||
private void fillRaceListFromAvailableRacesApplyingFilter() {
|
||||
String text = filterRacesTextbox.getText();
|
||||
List<String> wordsToFilter = Arrays.asList(text.split(" "));
|
||||
raceList.getList().clear();
|
||||
if (text != null && !text.isEmpty()) {
|
||||
for (RaceDTO raceDTO : getAllRaces()) {
|
||||
boolean failed = false;
|
||||
for (String word : wordsToFilter) {
|
||||
String textAsUppercase = word.toUpperCase().trim();
|
||||
if (!raceDTO.getRegattaName().toUpperCase().contains(textAsUppercase)
|
||||
&& !raceDTO.boatClass.toUpperCase().contains(textAsUppercase)
|
||||
&& !raceDTO.name.toUpperCase().contains(textAsUppercase)) {
|
||||
failed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!failed) {
|
||||
raceList.getList().add(raceDTO);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (RaceDTO raceFromAllRaces : getAllRaces()) {
|
||||
raceList.getList().add(raceFromAllRaces);
|
||||
}
|
||||
}
|
||||
// now sort again according to selected criterion
|
||||
ColumnSortEvent.fire(raceTable, raceTable.getColumnSortList());
|
||||
onRaceSelectionChange(raceSelectionProvider.getSelectedRaces()); // update selection based on underlying domain
|
||||
// race selection model
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
for (RaceDTO raceFromAllRaces : raceList.getList()) {
|
||||
selectionModel.setSelected(raceFromAllRaces, selectedRaces.contains(raceFromAllRaces.getRaceIdentifier()));
|
||||
}
|
||||
}
|
||||
|
||||
private Iterable<RaceDTO> getAllRaces() {
|
||||
return allRaces;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SettingsDialogComponent<TrackedRacesSettings> getSettingsDialogComponent() {
|
||||
return new TrackedRacesSettingsDialogComponent<TrackedRacesSettings>(settings, stringMessages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSettings(TrackedRacesSettings newSettings) {
|
||||
settings.setDelayToLiveInSeconds(newSettings.getDelayToLiveInSeconds());
|
||||
|
||||
// set the new delay to all selected races
|
||||
List<RegattaAndRaceIdentifier> raceIdentifiersToUpdate = new ArrayList<RegattaAndRaceIdentifier>();
|
||||
for (RaceDTO raceDTO : getSelectedRaces()) {
|
||||
raceIdentifiersToUpdate.add(raceDTO.getRaceIdentifier());
|
||||
}
|
||||
|
||||
if (raceIdentifiersToUpdate != null && !raceIdentifiersToUpdate.isEmpty()) {
|
||||
sailingService.updateRacesDelayToLive(raceIdentifiersToUpdate, settings.getDelayToLiveInSeconds() * 1000l,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter
|
||||
.reportError("Exception trying to set the delay to live for the selected tracked races: "
|
||||
+ caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
regattaRefresher.fillRegattas();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLocalizedShortName() {
|
||||
return "Tracked races";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Widget getEntryWidget() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public void addRaceSelectionChangeListener(RaceSelectionChangeListener listener) {
|
||||
this.raceSelectionProvider.addRaceSelectionChangeListener(listener);
|
||||
}
|
||||
|
||||
public RaceDTO getRaceByIdentifier(RaceIdentifier raceIdentifier) {
|
||||
RaceDTO result = null;
|
||||
if (raceList != null) {
|
||||
for (RaceDTO race : raceList.getList()) {
|
||||
if (race.getRaceIdentifier().equals(raceIdentifier)) {
|
||||
result = race;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
List<RaceDTO> getSelectedRaces() {
|
||||
List<RaceDTO> result = new ArrayList<RaceDTO>();
|
||||
if (raceList != null) {
|
||||
for (RaceDTO race : raceList.getList()) {
|
||||
if (selectionModel.isSelected(race)) {
|
||||
result.add(race);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void selectRaceByIdentifier(RegattaAndRaceIdentifier raceIdentifier) {
|
||||
if (raceList != null) {
|
||||
for (RaceDTO race : raceList.getList()) {
|
||||
String regattaName = race.getRegattaName();
|
||||
if (regattaName.equals(raceIdentifier.getRegattaName())
|
||||
&& race.name.equals(raceIdentifier.getRaceName())) {
|
||||
dontFireNextSelectionChangeEvent = true;
|
||||
selectionModel.setSelected(race, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void clearSelection() {
|
||||
List<RegattaAndRaceIdentifier> emptySelection = Collections.emptyList();
|
||||
raceSelectionProvider.setSelection(emptySelection, /* listenersNotToNotify */this);
|
||||
if (raceList != null) {
|
||||
for (RaceDTO race : raceList.getList()) {
|
||||
selectionModel.setSelected(race, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillRegattas(List<RegattaDTO> regattas) {
|
||||
makeControlsReactToFillRegattas(regattas);
|
||||
if (regattas.isEmpty()) {
|
||||
raceTable.setVisible(false);
|
||||
noTrackedRacesLabel.setVisible(true);
|
||||
} else {
|
||||
raceTable.setVisible(true);
|
||||
noTrackedRacesLabel.setVisible(false);
|
||||
}
|
||||
List<RaceDTO> newAllRaces = new ArrayList<RaceDTO>();
|
||||
List<RegattaDTO> newAllRegattas = new ArrayList<RegattaDTO>();
|
||||
List<RegattaAndRaceIdentifier> newAllRaceIdentifiers = new ArrayList<RegattaAndRaceIdentifier>();
|
||||
for (RegattaDTO regatta : regattas) {
|
||||
newAllRegattas.add(regatta);
|
||||
for (RaceDTO race : regatta.races) {
|
||||
if (race != null) {
|
||||
if (raceIsToBeAddedToList(race)) {
|
||||
newAllRaces.add(race);
|
||||
newAllRaceIdentifiers.add(race.getRaceIdentifier());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
allRaces = newAllRaces;
|
||||
fillRaceListFromAvailableRacesApplyingFilter();
|
||||
raceSelectionProvider.setAllRaces(newAllRaceIdentifiers); // have this object be notified; triggers
|
||||
// onRaceSelectionChange
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows applying some sort of filter to the process of adding races.
|
||||
* Defaults to true in standard implementation. Override for custom behavior
|
||||
* @param race
|
||||
* @return
|
||||
*/
|
||||
protected boolean raceIsToBeAddedToList(RaceDTO race) {
|
||||
return true;
|
||||
}
|
||||
|
||||
abstract protected void makeControlsReactToFillRegattas(List<RegattaDTO> regattas);
|
||||
|
||||
}
|
||||
+65
-541
@@ -1,419 +1,44 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.cell.client.AbstractCell;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.event.dom.client.KeyUpEvent;
|
||||
import com.google.gwt.event.dom.client.KeyUpHandler;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat;
|
||||
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
|
||||
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
|
||||
import com.google.gwt.safehtml.shared.SafeHtml;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
|
||||
import com.google.gwt.text.client.DateTimeFormatRenderer;
|
||||
import com.google.gwt.user.cellview.client.CellTable;
|
||||
import com.google.gwt.user.cellview.client.Column;
|
||||
import com.google.gwt.user.cellview.client.ColumnSortEvent;
|
||||
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
|
||||
import com.google.gwt.user.cellview.client.ColumnSortList;
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaDisplayer;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.URLFactory;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.components.Component;
|
||||
import com.sap.sailing.gwt.ui.shared.components.SettingsDialog;
|
||||
import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent;
|
||||
|
||||
/**
|
||||
* Shows the currently tracked events/races in a table. Updated if subscribed as an {@link RegattaDisplayer}, e.g., with
|
||||
* the {@link AdminConsoleEntryPoint}.
|
||||
*/
|
||||
public class TrackedRacesListComposite extends SimplePanel implements Component<TrackedRacesSettings>, RegattaDisplayer, RaceSelectionChangeListener {
|
||||
private final long DEFAULT_LIVE_DELAY_IN_MILLISECONDS = 5000;
|
||||
|
||||
public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite {
|
||||
|
||||
private final Set<TrackedRaceChangedListener> raceIsTrackedRaceChangeListener;
|
||||
|
||||
private final boolean multiSelection;
|
||||
private Button btnUntrack;
|
||||
private Button btnRemoveRace;
|
||||
|
||||
private boolean dontFireNextSelectionChangeEvent;
|
||||
|
||||
private final SelectionModel<RaceDTO> selectionModel;
|
||||
|
||||
private final CellTable<RaceDTO> raceTable;
|
||||
|
||||
private ListDataProvider<RaceDTO> raceList;
|
||||
|
||||
private Iterable<RaceDTO> allRaces;
|
||||
|
||||
private final VerticalPanel panel;
|
||||
|
||||
private DateTimeFormatRenderer dateFormatter = new DateTimeFormatRenderer(
|
||||
DateTimeFormat.getFormat(PredefinedFormat.DATE_SHORT));
|
||||
private DateTimeFormatRenderer timeFormatter = new DateTimeFormatRenderer(
|
||||
DateTimeFormat.getFormat(PredefinedFormat.TIME_LONG));
|
||||
|
||||
private final Label noTrackedRacesLabel;
|
||||
|
||||
private final SailingServiceAsync sailingService;
|
||||
private final ErrorReporter errorReporter;
|
||||
private final RegattaRefresher regattaRefresher;
|
||||
private final RaceSelectionProvider raceSelectionProvider;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
private final Button btnUntrack;
|
||||
private final Button btnRefresh;
|
||||
private final Button btnRemoveRace;
|
||||
private final Button btnSetDelayToLive;
|
||||
|
||||
private final TextBox filterRacesTextbox;
|
||||
|
||||
private final TrackedRacesSettings settings;
|
||||
|
||||
public static class AnchorCell extends AbstractCell<SafeHtml> {
|
||||
|
||||
@Override
|
||||
public void render(com.google.gwt.cell.client.Cell.Context context, SafeHtml safeHtml, SafeHtmlBuilder sb) {
|
||||
sb.append(safeHtml);
|
||||
}
|
||||
}
|
||||
|
||||
interface AnchorTemplates extends SafeHtmlTemplates {
|
||||
@SafeHtmlTemplates.Template("<a href=\"{0}\">{1}</a>")
|
||||
SafeHtml cell(String url, String displayName);
|
||||
}
|
||||
|
||||
private static AnchorTemplates ANCHORTEMPLATE = GWT.create(AnchorTemplates.class);
|
||||
private Button btnSetDelayToLive;
|
||||
|
||||
public TrackedRacesListComposite(final SailingServiceAsync sailingService, final ErrorReporter errorReporter,
|
||||
final RegattaRefresher regattaRefresher, RaceSelectionProvider raceSelectionProvider,
|
||||
final StringMessages stringMessages, boolean hasMultiSelection) {
|
||||
this.sailingService = sailingService;
|
||||
this.errorReporter = errorReporter;
|
||||
this.regattaRefresher = regattaRefresher;
|
||||
this.multiSelection = hasMultiSelection;
|
||||
this.raceSelectionProvider = raceSelectionProvider;
|
||||
this.stringMessages = stringMessages;
|
||||
super(sailingService, errorReporter, regattaRefresher, raceSelectionProvider, stringMessages, hasMultiSelection);
|
||||
this.raceIsTrackedRaceChangeListener = new HashSet<TrackedRaceChangedListener>();
|
||||
|
||||
raceList = new ListDataProvider<RaceDTO>();
|
||||
selectionModel = multiSelection ? new MultiSelectionModel<RaceDTO>() : new SingleSelectionModel<RaceDTO>();
|
||||
settings = new TrackedRacesSettings();
|
||||
settings.setDelayToLiveInSeconds(DEFAULT_LIVE_DELAY_IN_MILLISECONDS / 1000l);
|
||||
|
||||
panel = new VerticalPanel();
|
||||
setWidget(panel);
|
||||
|
||||
HorizontalPanel filterPanel = new HorizontalPanel();
|
||||
panel.add(filterPanel);
|
||||
Label lblFilterRaces = new Label(stringMessages.filterRacesByName() + ":");
|
||||
lblFilterRaces.setWordWrap(false);
|
||||
filterPanel.setSpacing(5);
|
||||
filterPanel.add(lblFilterRaces);
|
||||
filterPanel.setCellVerticalAlignment(lblFilterRaces, HasVerticalAlignment.ALIGN_MIDDLE);
|
||||
filterRacesTextbox = new TextBox();
|
||||
filterRacesTextbox.addKeyUpHandler(new KeyUpHandler() {
|
||||
@Override
|
||||
public void onKeyUp(KeyUpEvent event) {
|
||||
fillRaceListFromAvailableRacesApplyingFilter();
|
||||
}
|
||||
});
|
||||
filterPanel.add(filterRacesTextbox);
|
||||
|
||||
noTrackedRacesLabel = new Label(stringMessages.noRacesYet());
|
||||
noTrackedRacesLabel.setWordWrap(false);
|
||||
panel.add(noTrackedRacesLabel);
|
||||
|
||||
AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
|
||||
raceTable = new CellTable<RaceDTO>(/* pageSize */10000, tableRes);
|
||||
raceTable.ensureDebugId("TrackedRaces");
|
||||
ListHandler<RaceDTO> columnSortHandler = new ListHandler<RaceDTO>(
|
||||
raceList.getList());
|
||||
TextColumn<RaceDTO> regattaNameColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
return raceDTO.getRegattaName();
|
||||
}
|
||||
};
|
||||
regattaNameColumn.setSortable(true);
|
||||
|
||||
columnSortHandler.setComparator(regattaNameColumn, new Comparator<RaceDTO>() {
|
||||
@Override
|
||||
public int compare(RaceDTO t1, RaceDTO t2) {
|
||||
String regatta1Name = t1.getRegattaName();
|
||||
String regatta2Name = t2.getRegattaName();
|
||||
boolean ascending = isSortedAscending();
|
||||
if (regatta1Name.equals(regatta2Name)) {
|
||||
return 0;
|
||||
}
|
||||
int val = ascending ? regatta1Name.compareTo(regatta2Name) : -(regatta2Name.compareTo(regatta1Name));
|
||||
return val;
|
||||
}
|
||||
|
||||
private boolean isSortedAscending() {
|
||||
ColumnSortList sortList = raceTable.getColumnSortList();
|
||||
return sortList.size() > 0 & sortList.get(0).isAscending();
|
||||
}
|
||||
});
|
||||
|
||||
TextColumn<RaceDTO> boatClassNameColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
return raceDTO.boatClass == null ? "" : raceDTO.boatClass;
|
||||
}
|
||||
};
|
||||
boatClassNameColumn.setSortable(true);
|
||||
|
||||
columnSortHandler.setComparator(boatClassNameColumn, new Comparator<RaceDTO>() {
|
||||
@Override
|
||||
public int compare(RaceDTO t1, RaceDTO t2) {
|
||||
String boatClass1 = t1.boatClass;
|
||||
String boatClass2 = t2.boatClass;
|
||||
boolean ascending = isSortedAscending();
|
||||
if (boatClass1.equals(boatClass2)) {
|
||||
return 0;
|
||||
}
|
||||
int val = ascending ? boatClass1.compareTo(boatClass2) : -(boatClass2.compareTo(boatClass1));
|
||||
return val;
|
||||
}
|
||||
|
||||
private boolean isSortedAscending() {
|
||||
ColumnSortList sortList = raceTable.getColumnSortList();
|
||||
return sortList.size() > 0 & sortList.get(0).isAscending();
|
||||
}
|
||||
});
|
||||
|
||||
AnchorCell anchorCell = new AnchorCell();
|
||||
Column<RaceDTO, SafeHtml> raceNameColumn = new Column<RaceDTO, SafeHtml>(anchorCell) {
|
||||
@Override
|
||||
public SafeHtml getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.isTracked == true) {
|
||||
RegattaNameAndRaceName raceIdentifier = (RegattaNameAndRaceName) raceDTO.getRaceIdentifier();
|
||||
String debugParam = Window.Location.getParameter("gwt.codesvr");
|
||||
String link = URLFactory.INSTANCE.encode("/gwt/RaceBoard.html?raceName="
|
||||
+ raceIdentifier.getRaceName() + "®attaName=" + raceIdentifier.getRegattaName()
|
||||
+ ((debugParam != null && !debugParam.isEmpty()) ? "&gwt.codesvr=" + debugParam : ""));
|
||||
return ANCHORTEMPLATE.cell(link, raceDTO.name);
|
||||
} else {
|
||||
return SafeHtmlUtils.fromString(raceDTO.name);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
raceNameColumn.setSortable(true);
|
||||
|
||||
columnSortHandler.setComparator(raceNameColumn, new Comparator<RaceDTO>() {
|
||||
@Override
|
||||
public int compare(RaceDTO t1, RaceDTO t2) {
|
||||
boolean ascending = isSortedAscending();
|
||||
if (t1.name.equals(t2.name)) {
|
||||
return 0;
|
||||
}
|
||||
int val = -1;
|
||||
val = (t1 != null && t2 != null && ascending) ? (t1.name.compareTo(t2.name)) : -(t2.name.compareTo(t1.name));
|
||||
return val;
|
||||
}
|
||||
|
||||
private boolean isSortedAscending() {
|
||||
ColumnSortList sortList = raceTable.getColumnSortList();
|
||||
return sortList.size() > 0 & sortList.get(0).isAscending();
|
||||
}
|
||||
});
|
||||
|
||||
TextColumn<RaceDTO> raceStartColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.startOfRace != null) {
|
||||
return dateFormatter.render(raceDTO.startOfRace) + " "
|
||||
+ timeFormatter.render(raceDTO.startOfRace);
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
};
|
||||
raceStartColumn.setSortable(true);
|
||||
|
||||
columnSortHandler.setComparator(raceStartColumn, new Comparator<RaceDTO>() {
|
||||
@Override
|
||||
public int compare(RaceDTO t1, RaceDTO t2) {
|
||||
if (t1.startOfRace != null && t2.startOfRace != null) {
|
||||
boolean ascending = isSortedAscending();
|
||||
int val = -1;
|
||||
val = (t1.startOfRace.after(t2.startOfRace) && ascending) ? 1 : -1;
|
||||
return val;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private boolean isSortedAscending() {
|
||||
ColumnSortList sortList = raceTable.getColumnSortList();
|
||||
return sortList.size() > 0 & sortList.get(0).isAscending();
|
||||
}
|
||||
});
|
||||
|
||||
TextColumn<RaceDTO> raceTrackedColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.isTracked == true) {
|
||||
return stringMessages.tracked();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
TextColumn<RaceDTO> hasWindDataColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.trackedRace != null && raceDTO.trackedRace.hasWindData == true) {
|
||||
return stringMessages.yes();
|
||||
} else {
|
||||
return stringMessages.no();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
TextColumn<RaceDTO> hasGPSDataColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.trackedRace != null && raceDTO.trackedRace.hasGPSData == true) {
|
||||
return stringMessages.yes();
|
||||
} else {
|
||||
return stringMessages.no();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
TextColumn<RaceDTO> raceLiveDelayColumn = new TextColumn<RaceDTO>() {
|
||||
@Override
|
||||
public String getValue(RaceDTO raceDTO) {
|
||||
if (raceDTO.isTracked && raceDTO.trackedRace != null && raceDTO.trackedRace.delayToLiveInMs > 0) {
|
||||
return "" + raceDTO.trackedRace.delayToLiveInMs / 1000;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
raceTable.addColumn(regattaNameColumn, stringMessages.regatta());
|
||||
raceTable.addColumn(boatClassNameColumn, stringMessages.boatClass());
|
||||
raceTable.addColumn(raceNameColumn, stringMessages.race());
|
||||
raceTable.addColumn(raceStartColumn, stringMessages.startTime());
|
||||
raceTable.addColumn(raceTrackedColumn, stringMessages.tracked());
|
||||
raceTable.addColumn(hasWindDataColumn, "Wind data");
|
||||
raceTable.addColumn(hasGPSDataColumn, "GPS data");
|
||||
|
||||
raceTable.addColumn(raceLiveDelayColumn, stringMessages.delayInSeconds());
|
||||
raceTable.setWidth("300px");
|
||||
raceTable.setSelectionModel(selectionModel);
|
||||
raceTable.setVisible(false);
|
||||
panel.add(raceTable);
|
||||
raceList.addDataDisplay(raceTable);
|
||||
raceTable.addColumnSortHandler(columnSortHandler);
|
||||
raceTable.getSelectionModel().addSelectionChangeHandler(new Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
List<RaceDTO> selectedRaces = getSelectedRaces();
|
||||
if (selectedRaces.isEmpty()) {
|
||||
btnRemoveRace.setEnabled(false);
|
||||
btnUntrack.setEnabled(false);
|
||||
} else {
|
||||
btnRemoveRace.setEnabled(true);
|
||||
btnUntrack.setEnabled(true);
|
||||
}
|
||||
if (dontFireNextSelectionChangeEvent) {
|
||||
dontFireNextSelectionChangeEvent = false;
|
||||
} else {
|
||||
List<RegattaAndRaceIdentifier> selectedRaceIdentifiers = new ArrayList<RegattaAndRaceIdentifier>();
|
||||
for (RaceDTO selectedRace : selectedRaces) {
|
||||
selectedRaceIdentifiers.add(selectedRace.getRaceIdentifier());
|
||||
}
|
||||
TrackedRacesListComposite.this.raceSelectionProvider.setSelection(selectedRaceIdentifiers, TrackedRacesListComposite.this);
|
||||
}
|
||||
}
|
||||
});
|
||||
HorizontalPanel trackedRacesButtonPanel = new HorizontalPanel();
|
||||
trackedRacesButtonPanel.setSpacing(10);
|
||||
panel.add(trackedRacesButtonPanel);
|
||||
btnRemoveRace = new Button(stringMessages.remove());
|
||||
btnRemoveRace.ensureDebugId("RemoveRave");
|
||||
btnRemoveRace.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
for (RaceDTO selectedRace : getSelectedRaces()) {
|
||||
removeAndUntrackRace(selectedRace);
|
||||
}
|
||||
}
|
||||
});
|
||||
btnRemoveRace.setEnabled(false);
|
||||
trackedRacesButtonPanel.add(btnRemoveRace);
|
||||
btnUntrack = new Button(stringMessages.stopTracking());
|
||||
btnUntrack.ensureDebugId("UntrackRace");
|
||||
btnUntrack.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent click) {
|
||||
for (RaceDTO selectedRace : getSelectedRaces()) {
|
||||
if (selectedRace.isTracked) {
|
||||
stopTrackingRace(selectedRace);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
btnUntrack.setEnabled(false);
|
||||
trackedRacesButtonPanel.add(btnUntrack);
|
||||
|
||||
btnRefresh = new Button(stringMessages.refresh());
|
||||
btnRefresh.ensureDebugId("Refresh");
|
||||
btnRefresh.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
regattaRefresher.fillRegattas();
|
||||
}
|
||||
});
|
||||
trackedRacesButtonPanel.add(btnRefresh);
|
||||
|
||||
btnSetDelayToLive = new Button(stringMessages.setDelayToLive() + "...");
|
||||
btnSetDelayToLive.ensureDebugId("SetDelayToLive");
|
||||
btnSetDelayToLive.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
showSetDelayToLiveDialog();
|
||||
}
|
||||
});
|
||||
trackedRacesButtonPanel.add(btnSetDelayToLive);
|
||||
}
|
||||
|
||||
private void showSetDelayToLiveDialog() {
|
||||
@@ -424,91 +49,9 @@ public class TrackedRacesListComposite extends SimplePanel implements Component<
|
||||
settingsDialog.show();
|
||||
}
|
||||
|
||||
public RaceDTO getRaceByIdentifier(RaceIdentifier raceIdentifier) {
|
||||
RaceDTO result = null;
|
||||
if (raceList != null) {
|
||||
for (RaceDTO race : raceList.getList()) {
|
||||
if(race.getRaceIdentifier().equals(raceIdentifier)) {
|
||||
result = race;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<RaceDTO> getSelectedRaces() {
|
||||
List<RaceDTO> result = new ArrayList<RaceDTO>();
|
||||
if (raceList != null) {
|
||||
for (RaceDTO race : raceList.getList()) {
|
||||
if (selectionModel.isSelected(race)) {
|
||||
result.add(race);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void selectRaceByIdentifier(RegattaAndRaceIdentifier raceIdentifier) {
|
||||
if (raceList != null) {
|
||||
for (RaceDTO race : raceList.getList()) {
|
||||
String regattaName = race.getRegattaName();
|
||||
if (regattaName.equals(raceIdentifier.getRegattaName()) && race.name.equals(raceIdentifier.getRaceName())) {
|
||||
dontFireNextSelectionChangeEvent = true;
|
||||
selectionModel.setSelected(race, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void clearSelection() {
|
||||
List<RegattaAndRaceIdentifier> emptySelection = Collections.emptyList();
|
||||
raceSelectionProvider.setSelection(emptySelection, /* listenersNotToNotify */ this);
|
||||
if (raceList != null) {
|
||||
for (RaceDTO race : raceList.getList()) {
|
||||
selectionModel.setSelected(race, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillRegattas(List<RegattaDTO> regattas) {
|
||||
if (regattas.isEmpty()) {
|
||||
raceTable.setVisible(false);
|
||||
btnUntrack.setVisible(false);
|
||||
btnRemoveRace.setVisible(false);
|
||||
btnSetDelayToLive.setVisible(false);
|
||||
noTrackedRacesLabel.setVisible(true);
|
||||
} else {
|
||||
raceTable.setVisible(true);
|
||||
btnUntrack.setVisible(true);
|
||||
btnUntrack.setEnabled(false);
|
||||
btnRemoveRace.setVisible(true);
|
||||
btnRemoveRace.setEnabled(false);
|
||||
noTrackedRacesLabel.setVisible(false);
|
||||
btnSetDelayToLive.setVisible(true);
|
||||
}
|
||||
List<RaceDTO> newAllRaces = new ArrayList<RaceDTO>();
|
||||
List<RegattaDTO> newAllRegattas = new ArrayList<RegattaDTO>();
|
||||
List<RegattaAndRaceIdentifier> newAllRaceIdentifiers = new ArrayList<RegattaAndRaceIdentifier>();
|
||||
for (RegattaDTO regatta : regattas) {
|
||||
newAllRegattas.add(regatta);
|
||||
for (RaceDTO race : regatta.races) {
|
||||
if (race != null) {
|
||||
newAllRaces.add(race);
|
||||
newAllRaceIdentifiers.add(race.getRaceIdentifier());
|
||||
}
|
||||
}
|
||||
}
|
||||
allRaces = newAllRaces;
|
||||
fillRaceListFromAvailableRacesApplyingFilter();
|
||||
raceSelectionProvider.setAllRaces(newAllRaceIdentifiers); // have this object be notified; triggers onRaceSelectionChange
|
||||
}
|
||||
|
||||
public void addRaceSelectionChangeListener(RaceSelectionChangeListener listener) {
|
||||
this.raceSelectionProvider.addRaceSelectionChangeListener(listener);
|
||||
}
|
||||
|
||||
public void addTrackedRaceChangeListener(TrackedRaceChangedListener listener) {
|
||||
this.raceIsTrackedRaceChangeListener.add(listener);
|
||||
@@ -541,6 +84,7 @@ public class TrackedRacesListComposite extends SimplePanel implements Component<
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Exception trying to stop tracking race " + race.name + "in regatta "
|
||||
+ race.getRegattaName() + ": " + caught.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -553,92 +97,72 @@ public class TrackedRacesListComposite extends SimplePanel implements Component<
|
||||
});
|
||||
}
|
||||
|
||||
private void fillRaceListFromAvailableRacesApplyingFilter() {
|
||||
String text = filterRacesTextbox.getText();
|
||||
List<String> wordsToFilter = Arrays.asList(text.split(" "));
|
||||
raceList.getList().clear();
|
||||
if (text != null && !text.isEmpty()) {
|
||||
for (RaceDTO raceDTO : getAllRaces()) {
|
||||
boolean failed = false;
|
||||
for (String word : wordsToFilter) {
|
||||
String textAsUppercase = word.toUpperCase().trim();
|
||||
if (!raceDTO.getRegattaName().toUpperCase().contains(textAsUppercase)
|
||||
&& !raceDTO.boatClass.toUpperCase().contains(textAsUppercase)
|
||||
&& !raceDTO.name.toUpperCase().contains(textAsUppercase)) {
|
||||
failed = true;
|
||||
break;
|
||||
@Override
|
||||
protected void addControlButtons(HorizontalPanel trackedRacesButtonPanel) {
|
||||
btnRemoveRace = new Button(stringMessages.remove());
|
||||
btnRemoveRace.ensureDebugId("RemoveRave");
|
||||
btnRemoveRace.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
for (RaceDTO selectedRace : getSelectedRaces()) {
|
||||
removeAndUntrackRace(selectedRace);
|
||||
}
|
||||
}
|
||||
});
|
||||
btnRemoveRace.setEnabled(false);
|
||||
trackedRacesButtonPanel.add(btnRemoveRace);
|
||||
btnUntrack = new Button(stringMessages.stopTracking());
|
||||
btnUntrack.ensureDebugId("UntrackRace");
|
||||
btnUntrack.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent click) {
|
||||
for (RaceDTO selectedRace : getSelectedRaces()) {
|
||||
if (selectedRace.isTracked) {
|
||||
stopTrackingRace(selectedRace);
|
||||
}
|
||||
}
|
||||
if (!failed) {
|
||||
raceList.getList().add(raceDTO);
|
||||
}
|
||||
}
|
||||
});
|
||||
btnUntrack.setEnabled(false);
|
||||
trackedRacesButtonPanel.add(btnUntrack);
|
||||
|
||||
|
||||
btnSetDelayToLive = new Button(stringMessages.setDelayToLive() + "...");
|
||||
btnSetDelayToLive.ensureDebugId("SetDelayToLive");
|
||||
btnSetDelayToLive.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
showSetDelayToLiveDialog();
|
||||
}
|
||||
});
|
||||
trackedRacesButtonPanel.add(btnSetDelayToLive);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void makeControlsReactToSelectionChange(List<RaceDTO> selectedRaces) {
|
||||
if (selectedRaces.isEmpty()) {
|
||||
btnRemoveRace.setEnabled(false);
|
||||
btnUntrack.setEnabled(false);
|
||||
} else {
|
||||
for (RaceDTO raceFromAllRaces : getAllRaces()) {
|
||||
raceList.getList().add(raceFromAllRaces);
|
||||
}
|
||||
}
|
||||
// now sort again according to selected criterion
|
||||
ColumnSortEvent.fire(raceTable, raceTable.getColumnSortList());
|
||||
onRaceSelectionChange(raceSelectionProvider.getSelectedRaces()); // update selection based on underlying domain race selection model
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
for (RaceDTO raceFromAllRaces : raceList.getList()) {
|
||||
selectionModel.setSelected(raceFromAllRaces, selectedRaces.contains(raceFromAllRaces.getRaceIdentifier()));
|
||||
btnRemoveRace.setEnabled(true);
|
||||
btnUntrack.setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private Iterable<RaceDTO> getAllRaces() {
|
||||
return allRaces;
|
||||
@Override
|
||||
protected void makeControlsReactToFillRegattas(List<RegattaDTO> regattas) {
|
||||
if (regattas.isEmpty()) {
|
||||
btnUntrack.setVisible(false);
|
||||
btnRemoveRace.setVisible(false);
|
||||
btnSetDelayToLive.setVisible(false);
|
||||
} else {
|
||||
btnUntrack.setVisible(true);
|
||||
btnUntrack.setEnabled(false);
|
||||
btnRemoveRace.setVisible(true);
|
||||
btnRemoveRace.setEnabled(false);
|
||||
btnSetDelayToLive.setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SettingsDialogComponent<TrackedRacesSettings> getSettingsDialogComponent() {
|
||||
return new TrackedRacesSettingsDialogComponent<TrackedRacesSettings>(settings, stringMessages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateSettings(TrackedRacesSettings newSettings) {
|
||||
settings.setDelayToLiveInSeconds(newSettings.getDelayToLiveInSeconds());
|
||||
|
||||
// set the new delay to all selected races
|
||||
List<RegattaAndRaceIdentifier> raceIdentifiersToUpdate = new ArrayList<RegattaAndRaceIdentifier>();
|
||||
for (RaceDTO raceDTO : getSelectedRaces()) {
|
||||
raceIdentifiersToUpdate.add(raceDTO.getRaceIdentifier());
|
||||
}
|
||||
|
||||
if (raceIdentifiersToUpdate != null && !raceIdentifiersToUpdate.isEmpty()) {
|
||||
sailingService.updateRacesDelayToLive(raceIdentifiersToUpdate, settings.getDelayToLiveInSeconds() * 1000l,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter
|
||||
.reportError("Exception trying to set the delay to live for the selected tracked races: "
|
||||
+ caught.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
regattaRefresher.fillRegattas();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLocalizedShortName() {
|
||||
return "Tracked races";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Widget getEntryWidget() {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
+108
-67
@@ -5,8 +5,10 @@ import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
|
||||
public class DetailTypeFormatter {
|
||||
|
||||
private DetailTypeFormatter() { }
|
||||
|
||||
private static final StringMessages stringMessages = GWT.create(StringMessages.class);
|
||||
private static final StringMessages stringMessages = GWT.create(StringMessages.class);
|
||||
|
||||
public static String format(DetailType detailType) {
|
||||
switch (detailType) {
|
||||
@@ -46,19 +48,13 @@ public class DetailTypeFormatter {
|
||||
case RACE_AVERAGE_CROSS_TRACK_ERROR_IN_METERS:
|
||||
return stringMessages.averageCrossTrackErrorInMeters();
|
||||
case WINDWARD_DISTANCE_TO_OVERALL_LEADER:
|
||||
return stringMessages.windwardDistanceToLeader();
|
||||
case HEAD_UP:
|
||||
return stringMessages.headUp();
|
||||
case BEAR_AWAY:
|
||||
return stringMessages.bearAway();
|
||||
return stringMessages.windwardDistanceToLeaderInMeters();
|
||||
case TACK:
|
||||
return stringMessages.tack();
|
||||
case JIBE:
|
||||
return stringMessages.jibe();
|
||||
case PENALTY_CIRCLE:
|
||||
return stringMessages.penaltyCircle();
|
||||
case MARK_PASSING:
|
||||
return stringMessages.markPassing();
|
||||
case DISPLAY_LEGS:
|
||||
return stringMessages.legs();
|
||||
case CURRENT_LEG:
|
||||
@@ -90,35 +86,7 @@ public class DetailTypeFormatter {
|
||||
/**
|
||||
* Returns the unit of the given {@link DetailType}, like 'm', 'kts' or an empty string, if the detail type has no
|
||||
* unit.<br>
|
||||
* Throws an UnsupportedOperationException if the given detail type isn't supported.<br>
|
||||
* Currently supported are:<br>
|
||||
* <ul>
|
||||
* <li>CURRENT_SPEED_OVER_GROUND_IN_KNOTS</li>
|
||||
* <li>MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS</li>
|
||||
* <li>DISTANCE_TRAVELED</li>
|
||||
* <li>GAP_TO_LEADER_IN_SECONDS</li>
|
||||
* <li>VELOCITY_MADE_GOOD_IN_KNOTS</li>
|
||||
* <li>WINDWARD_DISTANCE_TO_OVERALL_LEADER</li>
|
||||
* <li>AVERAGE_SPEED_OVER_GROUND_IN_KNOTS</li>
|
||||
* <li>ESTIMATED_TIME_TO_NEXT_WAYPOINT_IN_SECONDS</li>
|
||||
* <li>GAP_CHANGE_SINCE_LEG_START_IN_SECONDS</li>
|
||||
* <li>AVERAGE_CROSS_TRACK_ERROR_IN_METERS</li>
|
||||
* <li>RACE_DISTANCE_TRAVELED</li>
|
||||
* <li>RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS</li>
|
||||
* <li>RACE_GAP_TO_LEADER_IN_SECONDS</li>
|
||||
* <li>RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS</li>
|
||||
* <li>RACE_DISTANCE_TO_LEADER_IN_METERS</li>
|
||||
* <li>RACE_AVERAGE_CROSS_TRACK_ERROR_IN_METERS</li>
|
||||
* <li>AVERAGE_TACK_LOSS_IN_METERS</li>
|
||||
* <li>AVERAGE_JIBE_LOSS_IN_METERS</li>
|
||||
* <li>TOTAL_TIME_SAILED_IN_SECONDS</li>
|
||||
*
|
||||
* <li>RACE_RANK (no unit)</li>
|
||||
* <li>CURRENT_LEG (no unit)</li>
|
||||
* <li>TACK (no unit)</li>
|
||||
* <li>JIBE (no unit)</li>
|
||||
* <li>PENALTY_CIRCLE (no unit)</li>
|
||||
* </ul>
|
||||
* Throws an UnsupportedOperationException if the given detail type isn't supported.
|
||||
*
|
||||
* @param detailType
|
||||
* @return The unit of the detail type as string.
|
||||
@@ -128,55 +96,48 @@ public class DetailTypeFormatter {
|
||||
case CURRENT_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
case RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
case MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
return stringMessages.currentSpeedOverGroundInKnotsUnit();
|
||||
|
||||
case RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
case VELOCITY_MADE_GOOD_IN_KNOTS:
|
||||
case AVERAGE_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
return stringMessages.knotsUnit();
|
||||
|
||||
case WINDWARD_DISTANCE_TO_OVERALL_LEADER:
|
||||
case WINDWARD_DISTANCE_TO_GO_IN_METERS:
|
||||
case DISTANCE_TRAVELED:
|
||||
case RACE_DISTANCE_TO_LEADER_IN_METERS:
|
||||
case RACE_DISTANCE_TRAVELED:
|
||||
case AVERAGE_TACK_LOSS_IN_METERS:
|
||||
case AVERAGE_JIBE_LOSS_IN_METERS:
|
||||
case AVERAGE_MANEUVER_LOSS_IN_METERS:
|
||||
return stringMessages.distanceInMetersUnit();
|
||||
|
||||
case GAP_TO_LEADER_IN_SECONDS:
|
||||
case GAP_CHANGE_SINCE_LEG_START_IN_SECONDS:
|
||||
case RACE_GAP_TO_LEADER_IN_SECONDS:
|
||||
return stringMessages.gapToLeaderInSecondsUnit();
|
||||
|
||||
case VELOCITY_MADE_GOOD_IN_KNOTS:
|
||||
return stringMessages.velocityMadeGoodInKnotsUnit();
|
||||
|
||||
case WINDWARD_DISTANCE_TO_OVERALL_LEADER:
|
||||
case WINDWARD_DISTANCE_TO_GO_IN_METERS:
|
||||
return stringMessages.windwardDistanceToGoInMetersUnit();
|
||||
|
||||
case AVERAGE_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
return stringMessages.averageSpeedInKnotsUnit();
|
||||
|
||||
case ESTIMATED_TIME_TO_NEXT_WAYPOINT_IN_SECONDS:
|
||||
return stringMessages.estimatedTimeToNextWaypointInSecondsUnit();
|
||||
|
||||
case AVERAGE_CROSS_TRACK_ERROR_IN_METERS:
|
||||
case RACE_AVERAGE_CROSS_TRACK_ERROR_IN_METERS:
|
||||
return stringMessages.metersUnit();
|
||||
|
||||
|
||||
case GAP_TO_LEADER_IN_SECONDS:
|
||||
case GAP_CHANGE_SINCE_LEG_START_IN_SECONDS:
|
||||
case RACE_GAP_TO_LEADER_IN_SECONDS:
|
||||
case ESTIMATED_TIME_TO_NEXT_WAYPOINT_IN_SECONDS:
|
||||
case TIME_TRAVELED:
|
||||
return stringMessages.secondsUnit();
|
||||
|
||||
|
||||
case TOTAL_TIME_SAILED_IN_SECONDS:
|
||||
case TOTAL_TIME_SAILED_DOWNWIND_IN_SECONDS:
|
||||
case TOTAL_TIME_SAILED_UPWIND_IN_SECONDS:
|
||||
case TOTAL_TIME_SAILED_REACHING_IN_SECONDS:
|
||||
return stringMessages.hhmmssUnit();
|
||||
|
||||
case RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
return stringMessages.averageSpeedInKnotsUnit();
|
||||
|
||||
// Case for detail types without unit, so that an empty string is returned.
|
||||
|
||||
// Cases for detail types without unit, so that an empty string is returned.
|
||||
case RACE_RANK:
|
||||
case CURRENT_LEG:
|
||||
case TACK:
|
||||
case JIBE:
|
||||
case PENALTY_CIRCLE:
|
||||
case RANK_GAIN:
|
||||
case NUMBER_OF_MANEUVERS:
|
||||
case DISPLAY_LEGS:
|
||||
case SIDE_TO_WHICH_MARK_AT_LEG_START_WAS_ROUNDED:
|
||||
return "";
|
||||
|
||||
|
||||
default:
|
||||
// Throwing an exception to get notificated if an implementation of
|
||||
// an detail type is missing.
|
||||
@@ -184,6 +145,86 @@ public class DetailTypeFormatter {
|
||||
+ "' in this method.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a tooltip text for the given detail type or an empty string, if there's none.
|
||||
* @param detailType
|
||||
* @return A tooltip string for the given detail type.
|
||||
*/
|
||||
public static String getTooltip(DetailType detailType) {
|
||||
switch (detailType) {
|
||||
case AVERAGE_CROSS_TRACK_ERROR_IN_METERS:
|
||||
return stringMessages.averageCrossTrackErrorInMetersTooltip();
|
||||
case GAP_CHANGE_SINCE_LEG_START_IN_SECONDS:
|
||||
return stringMessages.gapChangeSinceLegStartInSecondsTooltip();
|
||||
case RACE_AVERAGE_CROSS_TRACK_ERROR_IN_METERS:
|
||||
return stringMessages.raceAverageCrossTrackErrorInMetersTooltip();
|
||||
case SIDE_TO_WHICH_MARK_AT_LEG_START_WAS_ROUNDED:
|
||||
return stringMessages.sideToWhichMarkAtLegStartWasRoundedTooltip();
|
||||
case VELOCITY_MADE_GOOD_IN_KNOTS:
|
||||
return stringMessages.velocityMadeGoodInKnotsTooltip();
|
||||
case AVERAGE_JIBE_LOSS_IN_METERS:
|
||||
return stringMessages.averageJibeLossInMetersTooltip();
|
||||
case AVERAGE_MANEUVER_LOSS_IN_METERS:
|
||||
return stringMessages.averageManeuverLossInMetersTooltip();
|
||||
case AVERAGE_TACK_LOSS_IN_METERS:
|
||||
return stringMessages.averageTackLossInMetersTooltip();
|
||||
case CURRENT_LEG:
|
||||
return stringMessages.currentLegTooltip();
|
||||
case DISPLAY_LEGS:
|
||||
return "";
|
||||
case DISTANCE_TRAVELED:
|
||||
return stringMessages.distanceTraveledTooltip();
|
||||
case AVERAGE_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
return stringMessages.averageSpeedInKnotsTooltip();
|
||||
case ESTIMATED_TIME_TO_NEXT_WAYPOINT_IN_SECONDS:
|
||||
return stringMessages.estimatedTimeToNextWaypointInSecondsTooltip();
|
||||
case GAP_TO_LEADER_IN_SECONDS:
|
||||
return stringMessages.gapToLeaderInSecondsTooltip();
|
||||
case JIBE:
|
||||
return stringMessages.jibeTooltip();
|
||||
case MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
return stringMessages.maximumSpeedOverGroundInKnotsTooltip();
|
||||
case NUMBER_OF_MANEUVERS:
|
||||
return stringMessages.numberOfManeuversTooltip();
|
||||
case PENALTY_CIRCLE:
|
||||
return stringMessages.penaltyCircleTooltip();
|
||||
case RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
return stringMessages.raceAverageSpeedInKnotsTooltip();
|
||||
case CURRENT_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
return stringMessages.currentSpeedOverGroundInKnotsTooltip();
|
||||
case RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS:
|
||||
return stringMessages.currentSpeedOverGroundInKnotsTooltip();
|
||||
case RACE_DISTANCE_TO_LEADER_IN_METERS:
|
||||
return stringMessages.windwardDistanceToLeaderInMetersTooltip();
|
||||
case WINDWARD_DISTANCE_TO_OVERALL_LEADER:
|
||||
return stringMessages.windwardDistanceToLeaderInMetersTooltip();
|
||||
case RACE_DISTANCE_TRAVELED:
|
||||
return stringMessages.raceDistanceTraveledTooltip();
|
||||
case RACE_GAP_TO_LEADER_IN_SECONDS:
|
||||
return stringMessages.gapToLeaderInSecondsTooltip();
|
||||
case RACE_RANK:
|
||||
return stringMessages.rankTooltip();
|
||||
case RANK_GAIN:
|
||||
return stringMessages.rankGainTooltip();
|
||||
case TACK:
|
||||
return stringMessages.tackTooltip();
|
||||
case TIME_TRAVELED:
|
||||
return stringMessages.timeTooltip();
|
||||
case TOTAL_TIME_SAILED_DOWNWIND_IN_SECONDS:
|
||||
return stringMessages.totalTimeSailedDownwindInSecondsTooltip();
|
||||
case TOTAL_TIME_SAILED_IN_SECONDS:
|
||||
return stringMessages.totalTimeSailedInSecondsTooltip();
|
||||
case TOTAL_TIME_SAILED_REACHING_IN_SECONDS:
|
||||
return stringMessages.totalTimeSailedReachingInSecondsTooltip();
|
||||
case TOTAL_TIME_SAILED_UPWIND_IN_SECONDS:
|
||||
return stringMessages.totalTimeSailedUpwindInSecondsTooltip();
|
||||
case WINDWARD_DISTANCE_TO_GO_IN_METERS:
|
||||
return stringMessages.windwardDistanceToGoInMetersTooltip();
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public static NumberFormat getNumberFormat(DetailType detailType) {
|
||||
String decimalPlaces = "";
|
||||
|
||||
+485
-462
@@ -1,462 +1,485 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import com.google.gwt.i18n.client.Messages;
|
||||
|
||||
public interface StringMessages extends Messages {
|
||||
String helloWorld();
|
||||
String kielWeel2011();
|
||||
String stgAccount();
|
||||
String tracTracEvents();
|
||||
String swissTimingEvents();
|
||||
String trackedBefore();
|
||||
String listRaces();
|
||||
String wind();
|
||||
String windPanelLabel();
|
||||
String refresh();
|
||||
String remove();
|
||||
String windSource();
|
||||
String dampeningInterval();
|
||||
String map();
|
||||
String race();
|
||||
String races();
|
||||
String tracked();
|
||||
String time();
|
||||
String playSpeed();
|
||||
String playSpeedHelp();
|
||||
String playModeLive();
|
||||
String playModeReplay();
|
||||
String timeDelay();
|
||||
String timeDelayHelp();
|
||||
String speedInKnots();
|
||||
String fromDeg();
|
||||
String noRacesYet();
|
||||
String total();
|
||||
String carry();
|
||||
String competitor();
|
||||
String competitors();
|
||||
String defaultLeaderboard();
|
||||
String noSuchLeaderboard();
|
||||
String leaderboardConfiguration();
|
||||
String newDotDotDot();
|
||||
String editScores();
|
||||
String columnNamesInSelectedLeaderboard();
|
||||
String addDotDotDot();
|
||||
String renameDotDotDot();
|
||||
String trackedRaceConnectedToSelectedRaceName();
|
||||
String linkToColumn();
|
||||
String unlink();
|
||||
String leaderboardName();
|
||||
String cancel();
|
||||
String pleaseEnterAName();
|
||||
String discardRacesFromHowManyStartedRacesOn();
|
||||
String leaderboardWithThisNameAlreadyExists();
|
||||
String discardThresholdsMustBeNumeric();
|
||||
String discardThresholdsMustBeAscending();
|
||||
String discarding();
|
||||
String startingFromNumberOfRaces();
|
||||
String renameLeaderboard();
|
||||
String addColumnToLeaderboard();
|
||||
String pleaseEnterNameForNewRaceColumn();
|
||||
String ok();
|
||||
String medalRace();
|
||||
String renameRace();
|
||||
String openSelectedLeaderboard();
|
||||
String rank();
|
||||
String totalRank();
|
||||
String collapse();
|
||||
String expand();
|
||||
String leg();
|
||||
String distanceInMeters();
|
||||
String distanceInMetersUnit();
|
||||
String averageSpeedInKnots();
|
||||
String averageSpeedInKnotsUnit();
|
||||
String rankGain();
|
||||
String sapSailingAnalytics();
|
||||
String leaderboard();
|
||||
String leaderboards();
|
||||
String leaderboardSettings();
|
||||
String settings();
|
||||
String selectAtLeastOneLegDetail();
|
||||
String currentSpeedOverGroundInKnots();
|
||||
String currentSpeedOverGroundInKnotsUnit();
|
||||
String estimatedTimeToNextWaypointInSeconds();
|
||||
String estimatedTimeToNextWaypointInSecondsUnit();
|
||||
String gapToLeaderInSeconds();
|
||||
String gapToLeaderInSecondsUnit();
|
||||
String velocityMadeGoodInKnots();
|
||||
String velocityMadeGoodInKnotsUnit();
|
||||
String windwardDistanceToGoInMeters();
|
||||
String windwardDistanceToLeaderInMeters();
|
||||
String windwardDistanceToGoInMetersUnit();
|
||||
String name();
|
||||
String leaveEmptyForDefault();
|
||||
String trackNewEvent();
|
||||
String trackableRaces();
|
||||
String trackWind();
|
||||
String regattaName();
|
||||
String eventName();
|
||||
String event();
|
||||
String startTime();
|
||||
String regatta();
|
||||
String regattas();
|
||||
String startTracking();
|
||||
String stopTracking();
|
||||
String connections();
|
||||
String historyOfConnections();
|
||||
String defineNewConnection();
|
||||
String trackedRaces();
|
||||
String canSendRequests();
|
||||
String connectAndReadRaces();
|
||||
String trackSettings();
|
||||
String ports();
|
||||
String liveData();
|
||||
String storedData();
|
||||
String uris();
|
||||
String jsonUrl();
|
||||
String livePort();
|
||||
String storedPort();
|
||||
String liveUri();
|
||||
String storedUri();
|
||||
String eventsConnectedTo();
|
||||
String hostname();
|
||||
String declinationCheckbox();
|
||||
String raceStartTrackingColumn();
|
||||
String pauseAutomaticRefresh();
|
||||
String autoRefresh();
|
||||
String delayInSeconds();
|
||||
String delayBetweenAutoAdvances();
|
||||
String delayMustBeNonNegative();
|
||||
String chooseUpdateIntervalOfAtLeastOneSecond();
|
||||
String errorSettingWindForRace();
|
||||
String errorFetchingWindInformationForRace();
|
||||
String errorWhileTryingToSetWindSourceForRace();
|
||||
String inEvent();
|
||||
String to();
|
||||
String showEstimatedWind();
|
||||
String timing();
|
||||
String raceDetailsToShow();
|
||||
String legDetailsToShow();
|
||||
String columnMoveUp();
|
||||
String columnMoveDown();
|
||||
String port();
|
||||
String raceStartTimeColumn();
|
||||
String showOnlySelectedCompetitors();
|
||||
String showSelectedCompetitorsInfo();
|
||||
String lengthInSeconds();
|
||||
String selectedRaces();
|
||||
String stressTest();
|
||||
String numberOfManeuvers();
|
||||
String tacks();
|
||||
String jibes();
|
||||
String penaltyCircles();
|
||||
String medalRaceIsNull();
|
||||
String maneuverTypes();
|
||||
String configuration();
|
||||
String chooseChart();
|
||||
String distanceTraveled();
|
||||
String velocityMadeGoodLong();
|
||||
String speedOverGroundLong();
|
||||
String gapToLeaderLong();
|
||||
String pointsToLoad();
|
||||
String speed();
|
||||
String distance();
|
||||
String in();
|
||||
String secondsUnit();
|
||||
String metersUnit();
|
||||
String failedToLoadRaceData();
|
||||
String close();
|
||||
String compareCompetitors();
|
||||
String description();
|
||||
String sailNumber();
|
||||
String country();
|
||||
String no3LetterCodes();
|
||||
String add();
|
||||
String delete();
|
||||
String showCharts();
|
||||
String raceWithThisNameAlreadyExists();
|
||||
String raceWithThisNameAlreadyExistsInRegatta();
|
||||
String headUp();
|
||||
String bearAway();
|
||||
String tack();
|
||||
String jibe();
|
||||
String penaltyCircle();
|
||||
String markPassing();
|
||||
String mark();
|
||||
String otherManeuver();
|
||||
String douglasPeuckerPoints();
|
||||
String filterRacesByName();
|
||||
String actionEdit();
|
||||
String actionEditScores();
|
||||
String actionOpenBrowser();
|
||||
String actionRemove();
|
||||
String actionEditRaces();
|
||||
String actionRaceEdit();
|
||||
String actionRaceUnlink();
|
||||
String actionRaceRemove();
|
||||
String filterLeaderboardsByName();
|
||||
String windwardDistanceToLeader();
|
||||
String actions();
|
||||
String islinked();
|
||||
String yes();
|
||||
String no();
|
||||
String hoverOverAPoint();
|
||||
String noSelection();
|
||||
String raceIsKnownToStartUpwind();
|
||||
String events();
|
||||
String settingsForComponent(String localizedComponentName);
|
||||
String noEventsFound();
|
||||
String noEventSelected();
|
||||
String noLeaderboardsFound();
|
||||
String searchEvents();
|
||||
String location();
|
||||
String from();
|
||||
String until();
|
||||
String onlyLiveEvents();
|
||||
String locationNotAvailable();
|
||||
String startDateNotAvailable();
|
||||
String startDate();
|
||||
String unknownManeuver();
|
||||
String tailLengthMustBePositive();
|
||||
String failedToLoadRaceInformation(String message);
|
||||
String competitorPassedMarkAtDate(String competitorName, String markName, String dateTime);
|
||||
String valueForCompetitorAt(String competitorName, String dateTime, String valueWithUnit);
|
||||
String reallyRemoveRace(String string);
|
||||
String showDetails();
|
||||
String hideLeaderboard();
|
||||
String hideLeaderboards();
|
||||
String showLeaderboard();
|
||||
String hideRaces();
|
||||
String showMap();
|
||||
String hideMap();
|
||||
String noLeaderboardSelected();
|
||||
String leaderboardGroups();
|
||||
String filterLeaderboardGroupsByName();
|
||||
String createNewLeaderboardGroup();
|
||||
String leaderboardGroupConfiguration();
|
||||
String legs();
|
||||
String currentLeg();
|
||||
String leaderboardGroup();
|
||||
String pleaseEnterNonEmptyDescription();
|
||||
String groupWithThisNameAlreadyExists();
|
||||
String detailsOfLeaderboardGroup();
|
||||
String edit();
|
||||
String save();
|
||||
String abort();
|
||||
String noLeaderboardGroupWithNameFound(String groupName);
|
||||
String overview();
|
||||
String welcomeToSailingAnalytics();
|
||||
String welcomeToSailingAnalyticsBody();
|
||||
String home();
|
||||
String clickAndDragToZoomIn();
|
||||
String windSpeed();
|
||||
String allTimesInUTC();
|
||||
String autoZoomTo();
|
||||
String autoZoomToBoats();
|
||||
String autoZoomToBuoys();
|
||||
String autoZoomOff();
|
||||
String autoZoomToTails();
|
||||
String autoZoomToWindSensors();
|
||||
String autoZoomSelectedCompetitors();
|
||||
String bearing();
|
||||
String zoom();
|
||||
String stepSizeMustBeGreaterThanNull();
|
||||
String stepSizeInSeconds();
|
||||
String refreshInterval();
|
||||
String refreshIntervalMustBeGreaterThanXSeconds(String seconds);
|
||||
String competitorCharts();
|
||||
String selectAtLeastOneCompetitor();
|
||||
String directionChange();
|
||||
String speedChange();
|
||||
String degreesShort();
|
||||
String untracked();
|
||||
String delayForLiveMode();
|
||||
String notAvailable();
|
||||
String details();
|
||||
String noGroupSelected();
|
||||
String combinedWindSourceTypeName();
|
||||
String courseBasedWindSourceTypeName();
|
||||
String trackBasedEstimationWindSourceTypeName();
|
||||
String expeditionWindSourceTypeName();
|
||||
String webWindSourceTypeName();
|
||||
String clickChartToSetTime();
|
||||
String position();
|
||||
String windSourcesUsed();
|
||||
String errorTryingToUpdateWindSourcesToExclude(String raceName, String message);
|
||||
String feedback();
|
||||
String startStopPlaying();
|
||||
String backToLive();
|
||||
String slowPlaySpeedDown();
|
||||
String speedPlaySpeedUp();
|
||||
String showHideComponent(String localizedShortName);
|
||||
String degreesBoatToTheWind();
|
||||
String racesInLeaderboard();
|
||||
String leaderboardsInGroup();
|
||||
String replication();
|
||||
String errorFetchingReplicaData(String message);
|
||||
String averageCrossTrackErrorInMeters();
|
||||
String enterMaster();
|
||||
String errorStartingReplication(String hostname, String exchangeName, String message);
|
||||
String helpLines();
|
||||
String startLine();
|
||||
String finishLine();
|
||||
String advantageLine();
|
||||
String courseMiddleLine();
|
||||
String messagingPortNumber();
|
||||
String servletPortNumber();
|
||||
String registeredAt(String string);
|
||||
String replicatingFromMaster(String hostname, int jmsPort, int servletPort);
|
||||
String showWindSpeedSeries();
|
||||
String showWindDirectionSeries();
|
||||
String fleet();
|
||||
String boatClass();
|
||||
String setDelayToLive();
|
||||
String pleaseEnterNonEmptyVenue();
|
||||
String eventWithThisNameAlreadyExists();
|
||||
String venue();
|
||||
String pleaseSelectABoatClass();
|
||||
String regattaWithThisNameAlreadyExists();
|
||||
String seriesWithThisNameAlreadyExists();
|
||||
String fleetWithThisNameAlreadyExists();
|
||||
String fleets();
|
||||
String series();
|
||||
String splitFleet();
|
||||
String color();
|
||||
String medalSeries();
|
||||
String noColor();
|
||||
String pleaseSelectARegatta();
|
||||
String addFleet();
|
||||
String doYouReallyWantToRemoveRegatta(String name);
|
||||
String errorLoadingScoreCorrectionProviders(String message);
|
||||
String selectResultListToImportFrom();
|
||||
String of();
|
||||
String errorObtainingScoreCorrections(String scoreCorrectionProviderName, String eventName, String boatClassName,
|
||||
String string, String message);
|
||||
String assignRaceNumbersToRaceColumns();
|
||||
String importOfficialResults();
|
||||
String selectAll();
|
||||
String apply();
|
||||
String successfullyUpdatedScores();
|
||||
String errorUpdatingScoresForLeaderboard(String leaderboardName, String message);
|
||||
String maneuverTypesToShowWhenCompetitorIsClicked();
|
||||
String simulateWithStartTimeNow();
|
||||
String boatClassDoesNotMatchSelectedRegatta(String boatClass, String regattaName);
|
||||
String regattaExistForSelectedBoatClass();
|
||||
String reload();
|
||||
String addRegatta();
|
||||
String exchangeName();
|
||||
String course();
|
||||
String courseLayout();
|
||||
String buoy();
|
||||
String gate();
|
||||
String buoys();
|
||||
String waypoint();
|
||||
String showAllCompetitors();
|
||||
String boatTails();
|
||||
String maximalCount();
|
||||
String maxVisibleCompetitorsCountMustBePositive();
|
||||
String fregResultImportUrls();
|
||||
String errorRefreshingFregUrlList(String message);
|
||||
String successfullyUpdatedFregUrls();
|
||||
String errorRemovingFregUrls(String message);
|
||||
String pleaseEnterNonEmptyUrl();
|
||||
String addFragUrl();
|
||||
String errorAddingFragUrl(String message);
|
||||
String errorTryingToObtainLeaderboardContents(String message);
|
||||
String lastScoreUpdate();
|
||||
String warningBrowserUnsupported();
|
||||
String newMark();
|
||||
String controlPoint();
|
||||
String errorUpdatingRaceCourse(String message);
|
||||
String successfullyUpdatedCourse();
|
||||
String selectOneMarkOrTwoMarksForGate();
|
||||
String errorTryingToObtainTheMarksOfTheRace(String message);
|
||||
String errorTryingToObtainRaceCourse(String message);
|
||||
String insertWaypointBeforeSelected();
|
||||
String insertWaypointAfterSelected();
|
||||
String scoringSchemeLowPointSystem();
|
||||
String scoringSchemeHighPointSystem();
|
||||
String scoringSystem();
|
||||
String createFlexibleLeaderboard();
|
||||
String createRegattaLeaderboard();
|
||||
String editFlexibleLeaderboard();
|
||||
String editRegattaLeaderboard();
|
||||
String noRegatta();
|
||||
String useOverallLeaderboard();
|
||||
String overallStandings();
|
||||
String scoringSchemeHighPointEssOverall();
|
||||
String scoringSchemeHighPointLastBreaksTie();
|
||||
String type();
|
||||
String actionAddRaces();
|
||||
String racesWithNamePrefix();
|
||||
String maximumSpeedOverGroundInKnots();
|
||||
String totalTimeSailedDownwindInSeconds();
|
||||
String totalTimeSailedUpwindInSeconds();
|
||||
String totalTimeSailedReachingInSeconds();
|
||||
String totalTimeSailedInSeconds();
|
||||
String overallDetailsToShow();
|
||||
String hhmmssUnit();
|
||||
String actionAddWindData();
|
||||
String valueMustBeBetweenMinMax(String name, String minValue, String maxValue);
|
||||
String optional();
|
||||
String pleaseEnterAValue();
|
||||
String latitude();
|
||||
String longitude();
|
||||
String actionAddEvent();
|
||||
String publicationUrl();
|
||||
String suppress();
|
||||
String isPublic();
|
||||
String unsuppress();
|
||||
String suppressedCompetitors();
|
||||
String pleaseSelectASeries();
|
||||
String pleaseSelectARace();
|
||||
String displayGroupsInReverseOrder();
|
||||
String actionConfigureUrl();
|
||||
String configureLeaderboardUrlDescription();
|
||||
String embedded();
|
||||
String mediaPanel();
|
||||
String url();
|
||||
String mimeType();
|
||||
String title();
|
||||
String reallyRemoveMediaTrack(String mediaTrackTitle);
|
||||
String duration();
|
||||
String addMediaTrack();
|
||||
String addYoutubeTrack();
|
||||
String youtubeId();
|
||||
String additionalUrlSettings();
|
||||
String restrictToSingleSelectedRace();
|
||||
String expandSelectedRace();
|
||||
String showRaceDetails();
|
||||
String numberOfRaces();
|
||||
String numberOfRacesMustBeNonNegativeNumber();
|
||||
String chooseTheWayYouSelectRaces();
|
||||
String selectFromAllRaces();
|
||||
String selectANumberOfRaces();
|
||||
String numberOfLastNRaces();
|
||||
String expandLastRace();
|
||||
String factor();
|
||||
String errorUpdatingIsMedalRace(String message);
|
||||
String maneuverLoss();
|
||||
String averageManeuverLossInMeters();
|
||||
String averageTackLossInMeters();
|
||||
String averageJibeLossInMeters();
|
||||
String shape();
|
||||
String pattern();
|
||||
String legend();
|
||||
String live();
|
||||
String swissTimingArchiveConnector();
|
||||
String errorFetchingRankingChartData(String message);
|
||||
String loadingCompetitorData();
|
||||
String rankNAfterRace(long l, String string);
|
||||
String afterRace();
|
||||
String showRankChart();
|
||||
String overallLeaderboardSelection();
|
||||
String showOverallLeaderboardOnSamePage();
|
||||
String errorTryingToObtainOverallLeaderboards(String message);
|
||||
String finished();
|
||||
String passedTo(String name);
|
||||
String gapChangeSinceLegStartInSeconds();
|
||||
String sideToWhichMarkAtLegStartWasRounded();
|
||||
String raceIsLive(String raceName);
|
||||
String racesAreLive(String raceNames);
|
||||
String scoringSchemeHighPointFirstGetsTen();
|
||||
}
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import com.google.gwt.i18n.client.Messages;
|
||||
|
||||
public interface StringMessages extends Messages {
|
||||
String helloWorld();
|
||||
String kielWeel2011();
|
||||
String stgAccount();
|
||||
String tracTracEvents();
|
||||
String swissTimingEvents();
|
||||
String trackedBefore();
|
||||
String listRaces();
|
||||
String wind();
|
||||
String windPanelLabel();
|
||||
String refresh();
|
||||
String remove();
|
||||
String windSource();
|
||||
String dampeningInterval();
|
||||
String map();
|
||||
String race();
|
||||
String races();
|
||||
String tracked();
|
||||
String time();
|
||||
String playSpeed();
|
||||
String playSpeedHelp();
|
||||
String playModeLive();
|
||||
String playModeReplay();
|
||||
String timeDelay();
|
||||
String timeDelayHelp();
|
||||
String speedInKnots();
|
||||
String fromDeg();
|
||||
String noRacesYet();
|
||||
String total();
|
||||
String carry();
|
||||
String competitor();
|
||||
String competitors();
|
||||
String defaultLeaderboard();
|
||||
String noSuchLeaderboard();
|
||||
String leaderboardConfiguration();
|
||||
String newDotDotDot();
|
||||
String editScores();
|
||||
String columnNamesInSelectedLeaderboard();
|
||||
String addDotDotDot();
|
||||
String renameDotDotDot();
|
||||
String trackedRaceConnectedToSelectedRaceName();
|
||||
String linkToColumn();
|
||||
String unlink();
|
||||
String leaderboardName();
|
||||
String cancel();
|
||||
String pleaseEnterAName();
|
||||
String discardRacesFromHowManyStartedRacesOn();
|
||||
String leaderboardWithThisNameAlreadyExists();
|
||||
String discardThresholdsMustBeNumeric();
|
||||
String discardThresholdsMustBeAscending();
|
||||
String discarding();
|
||||
String startingFromNumberOfRaces();
|
||||
String renameLeaderboard();
|
||||
String addColumnToLeaderboard();
|
||||
String pleaseEnterNameForNewRaceColumn();
|
||||
String ok();
|
||||
String medalRace();
|
||||
String renameRace();
|
||||
String openSelectedLeaderboard();
|
||||
String rank();
|
||||
String totalRank();
|
||||
String collapse();
|
||||
String expand();
|
||||
String leg();
|
||||
String distanceInMeters();
|
||||
String averageSpeedInKnots();
|
||||
String rankGain();
|
||||
String sapSailingAnalytics();
|
||||
String leaderboard();
|
||||
String leaderboards();
|
||||
String leaderboardSettings();
|
||||
String settings();
|
||||
String selectAtLeastOneLegDetail();
|
||||
String currentSpeedOverGroundInKnots();
|
||||
String estimatedTimeToNextWaypointInSeconds();
|
||||
String gapToLeaderInSeconds();
|
||||
String velocityMadeGoodInKnots();
|
||||
String windwardDistanceToGoInMeters();
|
||||
String windwardDistanceToLeaderInMeters();
|
||||
String name();
|
||||
String leaveEmptyForDefault();
|
||||
String trackNewEvent();
|
||||
String trackableRaces();
|
||||
String trackWind();
|
||||
String regattaName();
|
||||
String eventName();
|
||||
String event();
|
||||
String startTime();
|
||||
String regatta();
|
||||
String regattas();
|
||||
String startTracking();
|
||||
String stopTracking();
|
||||
String connections();
|
||||
String historyOfConnections();
|
||||
String defineNewConnection();
|
||||
String trackedRaces();
|
||||
String canSendRequests();
|
||||
String connectAndReadRaces();
|
||||
String trackSettings();
|
||||
String ports();
|
||||
String liveData();
|
||||
String storedData();
|
||||
String uris();
|
||||
String jsonUrl();
|
||||
String livePort();
|
||||
String storedPort();
|
||||
String liveUri();
|
||||
String storedUri();
|
||||
String eventsConnectedTo();
|
||||
String hostname();
|
||||
String declinationCheckbox();
|
||||
String raceStartTrackingColumn();
|
||||
String pauseAutomaticRefresh();
|
||||
String autoRefresh();
|
||||
String delayInSeconds();
|
||||
String delayBetweenAutoAdvances();
|
||||
String delayMustBeNonNegative();
|
||||
String chooseUpdateIntervalOfAtLeastOneSecond();
|
||||
String errorSettingWindForRace();
|
||||
String errorFetchingWindInformationForRace();
|
||||
String errorWhileTryingToSetWindSourceForRace();
|
||||
String inEvent();
|
||||
String to();
|
||||
String showEstimatedWind();
|
||||
String timing();
|
||||
String raceDetailsToShow();
|
||||
String legDetailsToShow();
|
||||
String columnMoveUp();
|
||||
String columnMoveDown();
|
||||
String port();
|
||||
String raceStartTimeColumn();
|
||||
String showOnlySelectedCompetitors();
|
||||
String showSelectedCompetitorsInfo();
|
||||
String lengthInSeconds();
|
||||
String selectedRaces();
|
||||
String stressTest();
|
||||
String numberOfManeuvers();
|
||||
String tacks();
|
||||
String jibes();
|
||||
String penaltyCircles();
|
||||
String medalRaceIsNull();
|
||||
String maneuverTypes();
|
||||
String configuration();
|
||||
String chooseChart();
|
||||
String distanceTraveled();
|
||||
String velocityMadeGoodLong();
|
||||
String speedOverGroundLong();
|
||||
String gapToLeaderLong();
|
||||
String pointsToLoad();
|
||||
String speed();
|
||||
String distance();
|
||||
String in();
|
||||
String secondsUnit();
|
||||
String metersUnit();
|
||||
String failedToLoadRaceData();
|
||||
String close();
|
||||
String compareCompetitors();
|
||||
String description();
|
||||
String sailNumber();
|
||||
String country();
|
||||
String no3LetterCodes();
|
||||
String add();
|
||||
String delete();
|
||||
String showCharts();
|
||||
String raceWithThisNameAlreadyExists();
|
||||
String raceWithThisNameAlreadyExistsInRegatta();
|
||||
String headUp();
|
||||
String bearAway();
|
||||
String tack();
|
||||
String jibe();
|
||||
String penaltyCircle();
|
||||
String markPassing();
|
||||
String mark();
|
||||
String otherManeuver();
|
||||
String douglasPeuckerPoints();
|
||||
String filterRacesByName();
|
||||
String actionEdit();
|
||||
String actionEditScores();
|
||||
String actionOpenBrowser();
|
||||
String actionRemove();
|
||||
String actionEditRaces();
|
||||
String actionRaceEdit();
|
||||
String actionRaceUnlink();
|
||||
String actionRaceRemove();
|
||||
String filterLeaderboardsByName();
|
||||
String actions();
|
||||
String islinked();
|
||||
String yes();
|
||||
String no();
|
||||
String hoverOverAPoint();
|
||||
String noSelection();
|
||||
String raceIsKnownToStartUpwind();
|
||||
String events();
|
||||
String settingsForComponent(String localizedComponentName);
|
||||
String noEventsFound();
|
||||
String noEventSelected();
|
||||
String noLeaderboardsFound();
|
||||
String searchEvents();
|
||||
String location();
|
||||
String from();
|
||||
String until();
|
||||
String onlyLiveEvents();
|
||||
String locationNotAvailable();
|
||||
String startDateNotAvailable();
|
||||
String startDate();
|
||||
String unknownManeuver();
|
||||
String tailLengthMustBePositive();
|
||||
String failedToLoadRaceInformation(String message);
|
||||
String competitorPassedMarkAtDate(String competitorName, String markName, String dateTime);
|
||||
String valueForCompetitorAt(String competitorName, String dateTime, String valueWithUnit);
|
||||
String reallyRemoveRace(String string);
|
||||
String showDetails();
|
||||
String hideLeaderboard();
|
||||
String hideLeaderboards();
|
||||
String showLeaderboard();
|
||||
String hideRaces();
|
||||
String showMap();
|
||||
String hideMap();
|
||||
String noLeaderboardSelected();
|
||||
String leaderboardGroups();
|
||||
String filterLeaderboardGroupsByName();
|
||||
String createNewLeaderboardGroup();
|
||||
String leaderboardGroupConfiguration();
|
||||
String legs();
|
||||
String currentLeg();
|
||||
String leaderboardGroup();
|
||||
String pleaseEnterNonEmptyDescription();
|
||||
String groupWithThisNameAlreadyExists();
|
||||
String detailsOfLeaderboardGroup();
|
||||
String edit();
|
||||
String save();
|
||||
String abort();
|
||||
String noLeaderboardGroupWithNameFound(String groupName);
|
||||
String overview();
|
||||
String welcomeToSailingAnalytics();
|
||||
String welcomeToSailingAnalyticsBody();
|
||||
String home();
|
||||
String clickAndDragToZoomIn();
|
||||
String windSpeed();
|
||||
String allTimesInUTC();
|
||||
String autoZoomTo();
|
||||
String autoZoomToBoats();
|
||||
String autoZoomToBuoys();
|
||||
String autoZoomOff();
|
||||
String autoZoomToTails();
|
||||
String autoZoomToWindSensors();
|
||||
String autoZoomSelectedCompetitors();
|
||||
String bearing();
|
||||
String zoom();
|
||||
String stepSizeMustBeGreaterThanNull();
|
||||
String stepSizeInSeconds();
|
||||
String refreshInterval();
|
||||
String refreshIntervalMustBeGreaterThanXSeconds(String seconds);
|
||||
String competitorCharts();
|
||||
String selectAtLeastOneCompetitor();
|
||||
String directionChange();
|
||||
String speedChange();
|
||||
String degreesShort();
|
||||
String untracked();
|
||||
String delayForLiveMode();
|
||||
String notAvailable();
|
||||
String details();
|
||||
String noGroupSelected();
|
||||
String combinedWindSourceTypeName();
|
||||
String courseBasedWindSourceTypeName();
|
||||
String trackBasedEstimationWindSourceTypeName();
|
||||
String expeditionWindSourceTypeName();
|
||||
String webWindSourceTypeName();
|
||||
String clickChartToSetTime();
|
||||
String position();
|
||||
String windSourcesUsed();
|
||||
String errorTryingToUpdateWindSourcesToExclude(String raceName, String message);
|
||||
String feedback();
|
||||
String startStopPlaying();
|
||||
String backToLive();
|
||||
String slowPlaySpeedDown();
|
||||
String speedPlaySpeedUp();
|
||||
String showHideComponent(String localizedShortName);
|
||||
String degreesBoatToTheWind();
|
||||
String racesInLeaderboard();
|
||||
String leaderboardsInGroup();
|
||||
String replication();
|
||||
String errorFetchingReplicaData(String message);
|
||||
String averageCrossTrackErrorInMeters();
|
||||
String enterMaster();
|
||||
String errorStartingReplication(String hostname, String exchangeName, String message);
|
||||
String helpLines();
|
||||
String startLine();
|
||||
String finishLine();
|
||||
String advantageLine();
|
||||
String courseMiddleLine();
|
||||
String messagingPortNumber();
|
||||
String servletPortNumber();
|
||||
String registeredAt(String string);
|
||||
String replicatingFromMaster(String hostname, int jmsPort, int servletPort);
|
||||
String showWindSpeedSeries();
|
||||
String showWindDirectionSeries();
|
||||
String fleet();
|
||||
String boatClass();
|
||||
String setDelayToLive();
|
||||
String pleaseEnterNonEmptyVenue();
|
||||
String eventWithThisNameAlreadyExists();
|
||||
String venue();
|
||||
String pleaseSelectABoatClass();
|
||||
String regattaWithThisNameAlreadyExists();
|
||||
String seriesWithThisNameAlreadyExists();
|
||||
String fleetWithThisNameAlreadyExists();
|
||||
String fleets();
|
||||
String series();
|
||||
String splitFleet();
|
||||
String color();
|
||||
String medalSeries();
|
||||
String noColor();
|
||||
String pleaseSelectARegatta();
|
||||
String addFleet();
|
||||
String doYouReallyWantToRemoveRegatta(String name);
|
||||
String errorLoadingScoreCorrectionProviders(String message);
|
||||
String selectResultListToImportFrom();
|
||||
String of();
|
||||
String errorObtainingScoreCorrections(String scoreCorrectionProviderName, String eventName, String boatClassName,
|
||||
String string, String message);
|
||||
String assignRaceNumbersToRaceColumns();
|
||||
String importOfficialResults();
|
||||
String selectAll();
|
||||
String apply();
|
||||
String successfullyUpdatedScores();
|
||||
String errorUpdatingScoresForLeaderboard(String leaderboardName, String message);
|
||||
String maneuverTypesToShowWhenCompetitorIsClicked();
|
||||
String simulateWithStartTimeNow();
|
||||
String boatClassDoesNotMatchSelectedRegatta(String boatClass, String regattaName);
|
||||
String regattaExistForSelectedBoatClass();
|
||||
String reload();
|
||||
String addRegatta();
|
||||
String exchangeName();
|
||||
String course();
|
||||
String courseLayout();
|
||||
String buoy();
|
||||
String gate();
|
||||
String buoys();
|
||||
String waypoint();
|
||||
String showAllCompetitors();
|
||||
String boatTails();
|
||||
String maximalCount();
|
||||
String maxVisibleCompetitorsCountMustBePositive();
|
||||
String fregResultImportUrls();
|
||||
String errorRefreshingFregUrlList(String message);
|
||||
String successfullyUpdatedFregUrls();
|
||||
String errorRemovingFregUrls(String message);
|
||||
String pleaseEnterNonEmptyUrl();
|
||||
String addFragUrl();
|
||||
String errorAddingFragUrl(String message);
|
||||
String errorTryingToObtainLeaderboardContents(String message);
|
||||
String lastScoreUpdate();
|
||||
String warningBrowserUnsupported();
|
||||
String newMark();
|
||||
String controlPoint();
|
||||
String errorUpdatingRaceCourse(String message);
|
||||
String successfullyUpdatedCourse();
|
||||
String selectOneMarkOrTwoMarksForGate();
|
||||
String errorTryingToObtainTheMarksOfTheRace(String message);
|
||||
String errorTryingToObtainRaceCourse(String message);
|
||||
String insertWaypointBeforeSelected();
|
||||
String insertWaypointAfterSelected();
|
||||
String scoringSchemeLowPointSystem();
|
||||
String scoringSchemeHighPointSystem();
|
||||
String scoringSystem();
|
||||
String createFlexibleLeaderboard();
|
||||
String createRegattaLeaderboard();
|
||||
String editFlexibleLeaderboard();
|
||||
String editRegattaLeaderboard();
|
||||
String noRegatta();
|
||||
String useOverallLeaderboard();
|
||||
String overallStandings();
|
||||
String scoringSchemeHighPointEssOverall();
|
||||
String scoringSchemeHighPointLastBreaksTie();
|
||||
String type();
|
||||
String actionAddRaces();
|
||||
String racesWithNamePrefix();
|
||||
String maximumSpeedOverGroundInKnots();
|
||||
String totalTimeSailedDownwindInSeconds();
|
||||
String totalTimeSailedUpwindInSeconds();
|
||||
String totalTimeSailedReachingInSeconds();
|
||||
String totalTimeSailedInSeconds();
|
||||
String overallDetailsToShow();
|
||||
String hhmmssUnit();
|
||||
String actionAddWindData();
|
||||
String valueMustBeBetweenMinMax(String name, String minValue, String maxValue);
|
||||
String optional();
|
||||
String pleaseEnterAValue();
|
||||
String latitude();
|
||||
String longitude();
|
||||
String actionAddEvent();
|
||||
String publicationUrl();
|
||||
String suppress();
|
||||
String isPublic();
|
||||
String unsuppress();
|
||||
String suppressedCompetitors();
|
||||
String pleaseSelectASeries();
|
||||
String pleaseSelectARace();
|
||||
String displayGroupsInReverseOrder();
|
||||
String actionConfigureUrl();
|
||||
String configureLeaderboardUrlDescription();
|
||||
String embedded();
|
||||
String mediaPanel();
|
||||
String url();
|
||||
String mimeType();
|
||||
String title();
|
||||
String reallyRemoveMediaTrack(String mediaTrackTitle);
|
||||
String duration();
|
||||
String addMediaTrack();
|
||||
String addYoutubeTrack();
|
||||
String youtubeId();
|
||||
String additionalUrlSettings();
|
||||
String restrictToSingleSelectedRace();
|
||||
String expandSelectedRace();
|
||||
String showRaceDetails();
|
||||
String numberOfRaces();
|
||||
String numberOfRacesMustBeNonNegativeNumber();
|
||||
String chooseTheWayYouSelectRaces();
|
||||
String selectFromAllRaces();
|
||||
String selectANumberOfRaces();
|
||||
String numberOfLastNRaces();
|
||||
String expandLastRace();
|
||||
String factor();
|
||||
String errorUpdatingIsMedalRace(String message);
|
||||
String maneuverLoss();
|
||||
String averageManeuverLossInMeters();
|
||||
String averageTackLossInMeters();
|
||||
String averageJibeLossInMeters();
|
||||
String shape();
|
||||
String pattern();
|
||||
String legend();
|
||||
String live();
|
||||
String swissTimingArchiveConnector();
|
||||
String errorFetchingRankingChartData(String message);
|
||||
String loadingCompetitorData();
|
||||
String rankNAfterRace(long l, String string);
|
||||
String afterRace();
|
||||
String showRankChart();
|
||||
String overallLeaderboardSelection();
|
||||
String showOverallLeaderboardOnSamePage();
|
||||
String errorTryingToObtainOverallLeaderboards(String message);
|
||||
String finished();
|
||||
String passedTo(String name);
|
||||
String gapChangeSinceLegStartInSeconds();
|
||||
String sideToWhichMarkAtLegStartWasRounded();
|
||||
String raceIsLive(String raceName);
|
||||
String racesAreLive(String raceNames);
|
||||
String scoringSchemeHighPointFirstGetsTen();
|
||||
String knotsUnit();
|
||||
String averageJibeLossInMetersTooltip();
|
||||
String averageManeuverLossInMetersTooltip();
|
||||
String averageTackLossInMetersTooltip();
|
||||
String currentLegTooltip();
|
||||
String distanceTraveledTooltip();
|
||||
String estimatedTimeToNextWaypointInSecondsTooltip();
|
||||
String gapToLeaderInSecondsTooltip();
|
||||
String averageSpeedInKnotsTooltip();
|
||||
String jibeTooltip();
|
||||
String maximumSpeedOverGroundInKnotsTooltip();
|
||||
String numberOfManeuversTooltip();
|
||||
String penaltyCircleTooltip();
|
||||
String raceAverageSpeedInKnotsTooltip();
|
||||
String currentSpeedOverGroundInKnotsTooltip();
|
||||
String windwardDistanceToLeaderInMetersTooltip();
|
||||
String raceDistanceTraveledTooltip();
|
||||
String rankTooltip();
|
||||
String rankGainTooltip();
|
||||
String tackTooltip();
|
||||
String timeTooltip();
|
||||
String totalTimeSailedDownwindInSecondsTooltip();
|
||||
String totalTimeSailedInSecondsTooltip();
|
||||
String totalTimeSailedReachingInSecondsTooltip();
|
||||
String totalTimeSailedUpwindInSecondsTooltip();
|
||||
String windwardDistanceToGoInMetersTooltip();
|
||||
String averageCrossTrackErrorInMetersTooltip();
|
||||
String raceAverageCrossTrackErrorInMetersTooltip();
|
||||
String gapChangeSinceLegStartInSecondsTooltip();
|
||||
String velocityMadeGoodInKnotsTooltip();
|
||||
String sideToWhichMarkAtLegStartWasRoundedTooltip();
|
||||
}
|
||||
+485
-461
@@ -1,462 +1,486 @@
|
||||
helloWorld=Hello World
|
||||
kielWeel2011=Kiel Week 2011
|
||||
stgAccount=STG Account
|
||||
tracTracEvents=TracTrac Events
|
||||
swissTimingEvents=SwissTiming Events
|
||||
trackedBefore=History of tracked events
|
||||
listRaces=List Races
|
||||
wind=Wind
|
||||
windPanelLabel=This is the Wind Panel which so far is completely empty.
|
||||
refresh=Refresh
|
||||
remove=Remove
|
||||
windSource=Wind Source
|
||||
dampeningInterval=Dampening Interval
|
||||
map=Map
|
||||
race=Race
|
||||
races=Races
|
||||
tracked=tracked
|
||||
time=Time
|
||||
playSpeed=Play speed
|
||||
playSpeedHelp=Use "1" for regular play-back speed, "2" for double-speed playback and so on
|
||||
playModeLive=Live
|
||||
playModeReplay=Replay Mode
|
||||
timeDelay=Delay
|
||||
timeDelayHelp=Leave empty to replay at arbitrary times; enter seconds (e.g., "60" for one minute or "0" for none) of delay before live data feed
|
||||
speedInKnots=Speed (kn)
|
||||
fromDeg=From (deg)
|
||||
noRacesYet=No Races Yet
|
||||
total=\u03A3
|
||||
carry=Accumulated
|
||||
competitor=Competitor
|
||||
competitors=Competitors
|
||||
defaultLeaderboard=Default Leaderboard
|
||||
noSuchLeaderboard=No such leaderboard
|
||||
leaderboardConfiguration=Leaderboard Configuration
|
||||
newDotDotDot=New...
|
||||
editScores=Edit Scores...
|
||||
columnNamesInSelectedLeaderboard=Race Names in Selected Leaderboard
|
||||
addDotDotDot=Add...
|
||||
renameDotDotDot=Rename...
|
||||
trackedRaceConnectedToSelectedRaceName=Tracked Race Connected to Selected Race Name
|
||||
linkToColumn=Link to Column
|
||||
unlink=Unlink
|
||||
leaderboardName=Leaderboard Name
|
||||
cancel=Cancel
|
||||
pleaseEnterAName=Please enter a name
|
||||
discardRacesFromHowManyStartedRacesOn=Discard one more race starting with how many started races
|
||||
leaderboardWithThisNameAlreadyExists=Leaderboard with this name already exists
|
||||
discardThresholdsMustBeNumeric=Discard thresholds must be numeric
|
||||
discardThresholdsMustBeAscending=Discard thresholds must be ascending
|
||||
discarding=Discarding
|
||||
startingFromNumberOfRaces=Starting from how many races
|
||||
renameLeaderboard=Rename Leaderboard
|
||||
addColumnToLeaderboard=Add Column to Leaderboard
|
||||
pleaseEnterNameForNewRaceColumn=Please enter a name for new race column
|
||||
ok=OK
|
||||
medalRace=Medal Race
|
||||
renameRace=Rename Race
|
||||
openSelectedLeaderboard=Open Selected Leaderboard
|
||||
rank=Rank
|
||||
totalRank=Total rank
|
||||
collapse=-
|
||||
expand=+
|
||||
leg=L
|
||||
distanceInMeters=Distance
|
||||
distanceInMetersUnit=m
|
||||
averageSpeedInKnots=\u2205 Speed
|
||||
averageSpeedInKnotsUnit=kts
|
||||
rankGain=Rank Gain
|
||||
sapSailingAnalytics=Sailing Analytics
|
||||
leaderboard=Leaderboard
|
||||
leaderboards=Leaderboards
|
||||
leaderboardSettings=Leaderboard Settings
|
||||
settings=Settings (e.g., leg detail selection)
|
||||
selectAtLeastOneLegDetail=Select at least one leg detail
|
||||
currentSpeedOverGroundInKnots=SOG
|
||||
currentSpeedOverGroundInKnotsUnit=kts
|
||||
estimatedTimeToNextWaypointInSeconds=ETA
|
||||
estimatedTimeToNextWaypointInSecondsUnit=s
|
||||
gapToLeaderInSeconds=Gap to leader
|
||||
gapToLeaderInSecondsUnit=s
|
||||
velocityMadeGoodInKnots=VMG
|
||||
velocityMadeGoodInKnotsUnit=kts
|
||||
windwardDistanceToGoInMeters=Windward distance to go
|
||||
windwardDistanceToLeaderInMeters=Windward Distance To Leader
|
||||
windwardDistanceToGoInMetersUnit=m
|
||||
name=Name
|
||||
leaveEmptyForDefault=Leave empty for default
|
||||
trackNewEvent=Track New event
|
||||
trackableRaces=Trackable Races
|
||||
trackWind=Track Wind
|
||||
regattaName=Regatta name
|
||||
eventName=Event name
|
||||
event=Event
|
||||
startTime=Start time
|
||||
regatta=Regatta
|
||||
regattas=Regattas
|
||||
startTracking=Start tracking
|
||||
stopTracking=Stop tracking
|
||||
connections=Connections
|
||||
historyOfConnections=History of connections
|
||||
defineNewConnection=Define a new connection
|
||||
trackedRaces=Tracked races
|
||||
canSendRequests=Can send requests
|
||||
connectAndReadRaces=Connect and read races
|
||||
ports=Ports
|
||||
liveData=Live data
|
||||
storedData=Stored data
|
||||
uris=URIs
|
||||
jsonUrl=JSON URL
|
||||
livePort=Port Live Data
|
||||
storedPort=Port Stored Data
|
||||
liveUri=Live URI
|
||||
storedUri=Stored URI
|
||||
eventsConnectedTo=Events Currently Tracked
|
||||
hostname=Hostname
|
||||
declinationCheckbox=Correct Wind Bearing by Declination
|
||||
raceStartTrackingColumn=Tracking Started
|
||||
pauseAutomaticRefresh=Pause automatic refresh
|
||||
autoRefresh=Refresh automatically
|
||||
delayInSeconds=Delay (s)
|
||||
delayBetweenAutoAdvances=Delay between auto-updates in seconds:
|
||||
delayMustBeNonNegative=The delay must be greater than zero
|
||||
chooseUpdateIntervalOfAtLeastOneSecond=Choose update interval of at least one second
|
||||
errorSettingWindForRace=Error setting wind for race
|
||||
errorFetchingWindInformationForRace=Error fetching wind information for race
|
||||
errorWhileTryingToSetWindSourceForRace=Error while trying to set "wind starts upwind" flag
|
||||
inEvent=in event
|
||||
to=to
|
||||
showEstimatedWind=Show estimated wind
|
||||
timing=Timing
|
||||
raceDetailsToShow=Race Details
|
||||
overallDetailsToShow=Overall Details
|
||||
legDetailsToShow=Leg Details
|
||||
columnMoveUp=Up
|
||||
columnMoveDown=Down
|
||||
port=Port
|
||||
raceStartTimeColumn=Race Started
|
||||
showOnlySelectedCompetitors=Show only selected competitors
|
||||
showSelectedCompetitorsInfo=Show info box for selected competitors
|
||||
tailLength=Tail length (s)
|
||||
selectedRaces=Which races would you like to display?
|
||||
lengthInSeconds=Length (s)
|
||||
stressTest=Stress Test
|
||||
numberOfManeuvers=Maneuvers
|
||||
tacks=Tacks
|
||||
jibes=Jibes
|
||||
penaltyCircles=Penalty Circles
|
||||
medalRaceIsNull=Medalrace value not allowed
|
||||
configuration=Configuration
|
||||
maneuverTypes=Maneuvers
|
||||
chooseChart=Choose chart
|
||||
distanceTraveled=Distance Traveled
|
||||
velocityMadeGoodLong=Velocity Made Good
|
||||
speedOverGroundLong=Speed Over Ground
|
||||
gapToLeaderLong=Gap To Leader
|
||||
pointsToLoad=Points to load
|
||||
speed=Speed
|
||||
distance=Distance
|
||||
in=in
|
||||
secondsUnit=s
|
||||
metersUnit=m
|
||||
failedToLoadRaceData=Failed to laod race data.
|
||||
close=Close
|
||||
compareCompetitors=Compare competitors
|
||||
description=Description
|
||||
sailNumber=Sail number
|
||||
country=Country
|
||||
no3LetterCodes=Unable to find the IOC 3-letter-codes.
|
||||
add=Add
|
||||
delete=Delete
|
||||
showCharts=Show charts
|
||||
raceWithThisNameAlreadyExists=A race with that name already exists.
|
||||
raceWithThisNameAlreadyExistsInRegatta=A race with that name already exists in this regatta.
|
||||
headUp=Head up
|
||||
bearAway=Bear away
|
||||
tack=Tack
|
||||
jibe=Jibe
|
||||
penaltyCircle=Penalty circle
|
||||
markPassing=Mark passing
|
||||
mark=Mark
|
||||
otherManeuver=Unknown maneuver
|
||||
douglasPeuckerPoints=Douglas peucker points
|
||||
filterRacesByName=Filter races by name
|
||||
trackSettings=Track settings
|
||||
actionEdit=Edit
|
||||
actionEditScores=Edit scores
|
||||
actionOpenBrowser=Open in Browser
|
||||
actionRemove=Remove
|
||||
actionEditRaces=Edit races
|
||||
actionRaceEdit=Edit or rename race
|
||||
actionRaceUnlink=Unlink race
|
||||
actionRaceRemove=Remove race
|
||||
filterLeaderboardsByName=Filter leaderboards by name
|
||||
windwardDistanceToLeader=Windward distance to leader
|
||||
actions=Actions
|
||||
islinked=Is linked
|
||||
yes=Yes
|
||||
no=No
|
||||
hoverOverAPoint=Hover over a point for details
|
||||
noSelection=No selection
|
||||
raceIsKnownToStartUpwind=Race starts with upwind leg
|
||||
events=Events
|
||||
settingsForComponent=Settings for {0}
|
||||
noEventsFound=No events were found
|
||||
noEventSelected=No event selected
|
||||
noLeaderboardsFound=No leaderboards were found
|
||||
searchEvents=Search for events
|
||||
location=Location
|
||||
from=From
|
||||
until=Until
|
||||
onlyLiveEvents=Only live events
|
||||
locationNotAvailable=Location not available
|
||||
startDateNotAvailable=Start date not available
|
||||
startDate=Start date
|
||||
unknownManeuver=Unknown maneuver
|
||||
tailLengthMustBePositive=the tail length must be a number greater than zero.
|
||||
failedToLoadRaceInformation=Failed to load race information: {0}
|
||||
competitorPassedMarkAtDate={0} passed {1} at {2}
|
||||
valueForCompetitorAt={0} at {1}: {2}
|
||||
reallyRemoveRace=Do you really want to remove the race ''{0}''?
|
||||
showDetails=Show details
|
||||
hideLeaderboard=Hide leaderboard
|
||||
hideLeaderboards=Hide leaderboards
|
||||
showLeaderboard=Show leaderboard
|
||||
hideRaces=Hide races
|
||||
showMap=Show map
|
||||
hideMap=Hide map
|
||||
noLeaderboardSelected=No leaderboard selected
|
||||
leaderboardGroups=Leaderboard groups
|
||||
filterLeaderboardGroupsByName=Filter leaderboard groups by name
|
||||
createNewLeaderboardGroup=Create leaderboard group
|
||||
leaderboardGroupConfiguration=Leaderboard Group Configuration
|
||||
legs=Legs
|
||||
currentLeg=On Leg
|
||||
leaderboardGroup=Leaderboard Group
|
||||
pleaseEnterNonEmptyDescription=Please enter a non-empty description
|
||||
groupWithThisNameAlreadyExists=A leaderboard group with this name already exists.
|
||||
detailsOfLeaderboardGroup=Details of leaderboard group
|
||||
edit=Edit
|
||||
save=Save
|
||||
abort=Abort
|
||||
noLeaderboardGroupWithNameFound=No leaderboard group with the name {0} found
|
||||
overview=Overview
|
||||
welcomeToSailingAnalytics=Welcome to SAP Sailing Analytics
|
||||
welcomeToSailingAnalyticsBody=Understanding what happens out on the race course isn''t always easy. To help solve this challenge and bring the excitement of sailing to the fans, we have developed a leader board based on SAP analytics.\
|
||||
Through analyzing GPS data together with integrated wind measurements from sensors out on the race course, the leader board displays information such as in-race ranking, average speeds, distance travelled, ETA (estimated time of arrival at the next mark rounding), gaps to leader, gains and losses per leg.\
|
||||
\
|
||||
Check out the results for yourself to see who triumphed - and how they did it.
|
||||
home=Home
|
||||
clickAndDragToZoomIn=Click and drag in the plot area to zoom in
|
||||
windSpeed=Wind speed (kts)
|
||||
allTimesInUTC=All times in UTC
|
||||
autoZoomTo=Auto zoom to
|
||||
autoZoomToBoats=Boats
|
||||
autoZoomToBuoys=Buoys
|
||||
autoZoomToWindSensors=Wind sensors
|
||||
autoZoomOff=Off
|
||||
autoZoomToTails=Tails
|
||||
autoZoomSelectedCompetitors=Zoom only to selected competitors
|
||||
bearing=Bearing
|
||||
zoom=Zoom
|
||||
stepSizeMustBeGreaterThanNull=Step size must be greater than 0
|
||||
stepSizeInSeconds=Step size in seconds
|
||||
refreshInterval=Refresh interval (s)
|
||||
refreshIntervalMustBeGreaterThanXSeconds=Refresh interval must be greater than {0} seconds
|
||||
competitorCharts=Competitor charts
|
||||
selectAtLeastOneCompetitor=To show the competitor charts, select at least one competitor
|
||||
directionChange=Direction change
|
||||
speedChange=Speed change
|
||||
degreesShort=deg
|
||||
untracked=Untracked
|
||||
delayForLiveMode=Delay for live mode:
|
||||
notAvailable=Not available
|
||||
details=Details
|
||||
noGroupSelected=No group selected
|
||||
combinedWindSourceTypeName=Combined
|
||||
courseBasedWindSourceTypeName=Course Layout
|
||||
trackBasedEstimationWindSourceTypeName=Estimation
|
||||
expeditionWindSourceTypeName=Measured
|
||||
webWindSourceTypeName=Manual
|
||||
clickChartToSetTime=Click on the chart to set the time
|
||||
position=Position
|
||||
windSourcesUsed=Wind Sources Used
|
||||
errorTryingToUpdateWindSourcesToExclude=Error trying to update wind sources to exclude for race {0}: {1}
|
||||
feedback=Feedback
|
||||
startStopPlaying=Start/Stop playing
|
||||
backToLive=Jump back to live time point
|
||||
slowPlaySpeedDown=Slow play speed down
|
||||
speedPlaySpeedUp=Speed play speed up
|
||||
showHideComponent=Show/Hide {0}
|
||||
degreesBoatToTheWind=Angle to wind
|
||||
racesInLeaderboard=Races in leaderboard
|
||||
leaderboardsInGroup=Leaderboards in group
|
||||
replication=Replication
|
||||
errorFetchingReplicaData=Error fetching replica data: {0}
|
||||
averageCrossTrackErrorInMeters=\u2205 XTE
|
||||
enterMaster=Hostname of Master Instance
|
||||
errorStartingReplication=Error starting replication from host {0} / exchange {1}: {2}
|
||||
helpLines=Help lines
|
||||
startLine=Start line
|
||||
finishLine=Finish line
|
||||
advantageLine=Advantage line
|
||||
courseMiddleLine=Course middle line
|
||||
messagingPortNumber=Messaging port number (0 for default)
|
||||
servletPortNumber=Servlet port number
|
||||
registeredAt=Registered at {0}
|
||||
replicatingFromMaster=Replicating from master {0}, messaging port {1}, servlet port {2}
|
||||
showWindSpeedSeries=Show wind speed data
|
||||
showWindDirectionSeries=Show wind directions data
|
||||
fleet=Fleet
|
||||
boatClass=Boat Class
|
||||
setDelayToLive=Set delay to live
|
||||
pleaseEnterNonEmptyVenue=Please enter a venue.
|
||||
eventWithThisNameAlreadyExists=An event with this name already exists.
|
||||
venue=Venue
|
||||
pleaseSelectABoatClass=Please select a boat class.
|
||||
regattaWithThisNameAlreadyExists=A regatta with this name already exists.
|
||||
seriesWithThisNameAlreadyExists=A series with this name already exists.
|
||||
fleetWithThisNameAlreadyExists=A fleet with this name already exists.
|
||||
fleets=Fleets
|
||||
series=Series
|
||||
splitFleet=Split fleet
|
||||
color=Color
|
||||
medalSeries=Medal Series
|
||||
noColor=No color
|
||||
pleaseSelectARegatta=Please select a regatta.
|
||||
addFleet=Add fleet
|
||||
doYouReallyWantToRemoveRegatta=Do you really want to remove the regatta "{0}"?
|
||||
errorLoadingScoreCorrectionProviders=Error loading score correction providers: {0}
|
||||
selectResultListToImportFrom=Select result list to import from
|
||||
of=of
|
||||
errorObtainingScoreCorrections=Error obtaining score corrections from provider {0} and event {1} for boat class {2} published on {3}: {4}
|
||||
assignRaceNumbersToRaceColumns=Assign race numbers of official results to leaderboard race columns
|
||||
importOfficialResults=Import official results...
|
||||
selectAll=Select all
|
||||
apply=Apply
|
||||
successfullyUpdatedScores=Successfully updated scores
|
||||
errorUpdatingScoresForLeaderboard=Error updating scores for leaderboard {0}: {1}
|
||||
maneuverTypesToShowWhenCompetitorIsClicked=Maneuver types to show when competitor is clicked
|
||||
simulateWithStartTimeNow=Simulate with "now" as start time
|
||||
boatClassDoesNotMatchSelectedRegatta=The selected races contain boat classes which are not the same as the boat class ''{0}'' of the selected regatta.\
|
||||
Do you really want to use the regatta ''{1}''?
|
||||
regattaExistForSelectedBoatClass=There is at least one regatta for the selected boat classes.\
|
||||
Do you really want to use the ''no regatta'' selection?
|
||||
reload=Reload
|
||||
addRegatta=Add Regatta...
|
||||
exchangeName=Exchange Name
|
||||
course=Course
|
||||
courseLayout=Course layout
|
||||
buoy=Buoy
|
||||
gate=Gate
|
||||
buoys=Buoys
|
||||
waypoint=Waypoint
|
||||
showAllCompetitors=Show all competitors
|
||||
boatTails=Boat tails
|
||||
maximalCount=Maximal count
|
||||
maxVisibleCompetitorsCountMustBePositive=The maximal amount of visible competitors must be greater than zero.
|
||||
fregResultImportUrls=FREG URLs
|
||||
errorRefreshingFregUrlList=Error refreshing FREG URL list: {0}
|
||||
successfullyUpdatedFregUrls=Successfully updated FREG URL list
|
||||
errorRemovingFregUrls=Error removing FREG URLs: {0}
|
||||
pleaseEnterNonEmptyUrl=Please enter a non-empty URL
|
||||
addFragUrl=Add FRAG Result URL
|
||||
errorAddingFragUrl=Error adding FRAG URL: {0}
|
||||
errorTryingToObtainLeaderboardContents=Error trying to obtain leaderboard contents: {0}
|
||||
lastScoreUpdate=Last Score Update
|
||||
warningBrowserUnsupported=This website is not optimized for your browser. Please switch to a newer one like Firefox or Chrome.
|
||||
newMark=New Mark
|
||||
controlPoint=Mark/Gate
|
||||
errorUpdatingRaceCourse=Error updating race course: {0}
|
||||
successfullyUpdatedCourse=Successfully updated race course
|
||||
selectOneMarkOrTwoMarksForGate=Select a single mark or two marks to create a gate
|
||||
errorTryingToObtainTheMarksOfTheRace=Error trying to obtain the marks of the race course: {0}
|
||||
errorTryingToObtainRaceCourse=Error trying to obtain the race course: {0}
|
||||
insertWaypointBeforeSelected=Insert waypoint before selected
|
||||
insertWaypointAfterSelected=Insert waypoint after selected
|
||||
scoringSchemeLowPointSystem=Low Point System
|
||||
scoringSchemeHighPointSystem=High Point System
|
||||
scoringSchemeHighPointEssOverall=High Point System ESS Overall
|
||||
scoringSchemeHighPointLastBreaksTie=High Point System, Last Race Breaks Tie
|
||||
scoringSystem=Scoring system
|
||||
createFlexibleLeaderboard=Create flexible leaderboard
|
||||
createRegattaLeaderboard=Create regatta leaderboard
|
||||
editFlexibleLeaderboard=Edit flexible leaderboard
|
||||
editRegattaLeaderboard=Edit regatta leaderboard
|
||||
noRegatta=No regatta
|
||||
useOverallLeaderboard=Use Overall leaderboard
|
||||
overallStandings=Overall Standings
|
||||
type=Type
|
||||
actionAddRaces=Add races
|
||||
racesWithNamePrefix=races with name prefix
|
||||
maximumSpeedOverGroundInKnots=Max SOG
|
||||
totalTimeSailedDownwindInSeconds=Total time downwind
|
||||
totalTimeSailedUpwindInSeconds=Total time upwind
|
||||
totalTimeSailedReachingInSeconds=Total time reaching
|
||||
totalTimeSailedInSeconds=Total time
|
||||
hhmmssUnit=hh:mm:ss
|
||||
actionAddWindData=Add wind data
|
||||
valueMustBeBetweenMinMax=The value of ''{0}'' must be between {1} and {2}.
|
||||
optional=optional
|
||||
pleaseEnterAValue=Please enter a value.
|
||||
latitude=Latitude
|
||||
longitude=Longitude
|
||||
actionAddEvent=Add Event
|
||||
publicationUrl=Publication URL
|
||||
suppress=Suppress
|
||||
isPublic=Is public
|
||||
suppress=Suppress
|
||||
unsuppress=Unsuppress
|
||||
suppressedCompetitors=Suppressed Competitors
|
||||
mediaPanel=Audio & Video
|
||||
url=URL
|
||||
mimeType=MIME Type
|
||||
title=Title
|
||||
duration=Duration (h:mm:ss.ms)
|
||||
addMediaTrack=Add Audio/Video
|
||||
addYoutubeTrack=Add Youtube
|
||||
youtubeId=Youtube Id
|
||||
reallyRemoveMediaTrack=Do you really want to remove media track ''{0}''?
|
||||
pleaseSelectASeries=Please select a series
|
||||
pleaseSelectARace=Please select a race
|
||||
displayGroupsInReverseOrder=Display groups in reverse order
|
||||
actionConfigureUrl=Configure URL
|
||||
configureLeaderboardUrlDescription=Configure a leaderboard and obtain the resulting URL from the link
|
||||
embedded=Embedded
|
||||
additionalUrlSettings=Additional URL Settings
|
||||
restrictToSingleSelectedRace=Restrict to single selected race
|
||||
expandSelectedRace=Expand selected race
|
||||
showRaceDetails=Allow for race details
|
||||
numberOfRaces=Number of races
|
||||
numberOfRacesMustBeNonNegativeNumber=Please enter the number of last races to be displayed
|
||||
chooseTheWayYouSelectRaces=Choose the way you select races
|
||||
selectFromAllRaces=Select from all races
|
||||
selectANumberOfRaces=Select a number of races
|
||||
numberOfLastNRaces=Number of most current races to show
|
||||
expandLastRace=Always expand last race shown
|
||||
factor=Factor
|
||||
errorUpdatingIsMedalRace=Error updating the medal race setting: {0}
|
||||
maneuverLoss=Maneuver loss
|
||||
averageManeuverLossInMeters=\u2205 Maneuver Loss
|
||||
averageTackLossInMeters=\u2205 Tack Loss
|
||||
averageJibeLossInMeters=\u2205 Jibe Loss
|
||||
shape=Shape
|
||||
pattern=Pattern
|
||||
legend=Legend
|
||||
live=live
|
||||
swissTimingArchiveConnector=SwissTiming Archived Events
|
||||
errorFetchingRankingChartData=Error fetching ranking chart data: {0}
|
||||
loadingCompetitorData=Loading competitor data...
|
||||
rankNAfterRace=Rank {0} after race {1}
|
||||
afterRace=after race
|
||||
showRankChart=Show rank chart
|
||||
overallLeaderboardSelection=Overall Leaderboard
|
||||
showOverallLeaderboardOnSamePage=Show overall leaderboard on same page
|
||||
errorTryingToObtainOverallLeaderboards=Error trying to obtain overall leaderboards: {0}
|
||||
finished=finished
|
||||
passedTo=passed to {0}
|
||||
gapChangeSinceLegStartInSeconds=Gap Change
|
||||
sideToWhichMarkAtLegStartWasRounded=Mark rounded to
|
||||
raceIsLive=Race {0} is live
|
||||
helloWorld=Hello World
|
||||
kielWeel2011=Kiel Week 2011
|
||||
stgAccount=STG Account
|
||||
tracTracEvents=TracTrac Events
|
||||
swissTimingEvents=SwissTiming Events
|
||||
trackedBefore=History of tracked events
|
||||
listRaces=List Races
|
||||
wind=Wind
|
||||
windPanelLabel=This is the Wind Panel which so far is completely empty.
|
||||
refresh=Refresh
|
||||
remove=Remove
|
||||
windSource=Wind Source
|
||||
dampeningInterval=Dampening Interval
|
||||
map=Map
|
||||
race=Race
|
||||
races=Races
|
||||
tracked=tracked
|
||||
time=Time
|
||||
timeTooltip=Time the competitor sailed on this leg.
|
||||
playSpeed=Play speed
|
||||
playSpeedHelp=Use "1" for regular play-back speed, "2" for double-speed playback and so on
|
||||
playModeLive=Live
|
||||
playModeReplay=Replay Mode
|
||||
timeDelay=Delay
|
||||
timeDelayHelp=Leave empty to replay at arbitrary times; enter seconds (e.g., "60" for one minute or "0" for none) of delay before live data feed
|
||||
speedInKnots=Speed (kn)
|
||||
fromDeg=From (deg)
|
||||
noRacesYet=No Races Yet
|
||||
total=\u03A3
|
||||
carry=Accumulated
|
||||
competitor=Competitor
|
||||
competitors=Competitors
|
||||
defaultLeaderboard=Default Leaderboard
|
||||
noSuchLeaderboard=No such leaderboard
|
||||
leaderboardConfiguration=Leaderboard Configuration
|
||||
newDotDotDot=New...
|
||||
editScores=Edit Scores...
|
||||
columnNamesInSelectedLeaderboard=Race Names in Selected Leaderboard
|
||||
addDotDotDot=Add...
|
||||
renameDotDotDot=Rename...
|
||||
trackedRaceConnectedToSelectedRaceName=Tracked Race Connected to Selected Race Name
|
||||
linkToColumn=Link to Column
|
||||
unlink=Unlink
|
||||
leaderboardName=Leaderboard Name
|
||||
cancel=Cancel
|
||||
pleaseEnterAName=Please enter a name
|
||||
discardRacesFromHowManyStartedRacesOn=Discard one more race starting with how many started races
|
||||
leaderboardWithThisNameAlreadyExists=Leaderboard with this name already exists
|
||||
discardThresholdsMustBeNumeric=Discard thresholds must be numeric
|
||||
discardThresholdsMustBeAscending=Discard thresholds must be ascending
|
||||
discarding=Discarding
|
||||
startingFromNumberOfRaces=Starting from how many races
|
||||
renameLeaderboard=Rename Leaderboard
|
||||
addColumnToLeaderboard=Add Column to Leaderboard
|
||||
pleaseEnterNameForNewRaceColumn=Please enter a name for new race column
|
||||
ok=OK
|
||||
medalRace=Medal Race
|
||||
renameRace=Rename Race
|
||||
openSelectedLeaderboard=Open Selected Leaderboard
|
||||
rank=Rank
|
||||
rankTooltip=The position of the competitor.
|
||||
totalRank=Total rank
|
||||
collapse=-
|
||||
expand=+
|
||||
leg=L
|
||||
distanceInMeters=Distance
|
||||
averageSpeedInKnots=\u2205 Speed
|
||||
averageSpeedInKnotsTooltip=The average speed over ground during this leg,\ncalculated with the division of the traveled distance and the needed time.
|
||||
raceAverageSpeedInKnotsTooltip=The average speed over ground during this race,\ncalculated with the division of the traveled distance and the needed time.
|
||||
rankGain=Rank Gain
|
||||
rankGainTooltip=The difference of the position from the current and the past leg.
|
||||
sapSailingAnalytics=Sailing Analytics
|
||||
leaderboard=Leaderboard
|
||||
leaderboards=Leaderboards
|
||||
leaderboardSettings=Leaderboard Settings
|
||||
settings=Settings (e.g., leg detail selection)
|
||||
selectAtLeastOneLegDetail=Select at least one leg detail
|
||||
currentSpeedOverGroundInKnots=SOG
|
||||
currentSpeedOverGroundInKnotsTooltip=The current speed over ground.
|
||||
estimatedTimeToNextWaypointInSeconds=ETA
|
||||
estimatedTimeToNextWaypointInSecondsTooltip=The estimated time that the competitor needs to reach the next waypoint.
|
||||
gapToLeaderInSeconds=Gap to leader
|
||||
gapToLeaderInSecondsTooltip=The time a competitor would need to reach the leader.
|
||||
velocityMadeGoodInKnots=VMG
|
||||
velocityMadeGoodInKnotsTooltip=The velocity made good, which is the speed towards the rhumb line.
|
||||
windwardDistanceToGoInMeters=Windward distance to go
|
||||
windwardDistanceToGoInMetersTooltip=Windward distance from the positon of the competitor, to the end of the leg.
|
||||
windwardDistanceToLeaderInMeters=Windward Distance To Leader
|
||||
windwardDistanceToLeaderInMetersTooltip=Windward distance of the competitor to the leader.
|
||||
name=Name
|
||||
leaveEmptyForDefault=Leave empty for default
|
||||
trackNewEvent=Track New event
|
||||
trackableRaces=Trackable Races
|
||||
trackWind=Track Wind
|
||||
regattaName=Regatta name
|
||||
eventName=Event name
|
||||
event=Event
|
||||
startTime=Start time
|
||||
regatta=Regatta
|
||||
regattas=Regattas
|
||||
startTracking=Start tracking
|
||||
stopTracking=Stop tracking
|
||||
connections=Connections
|
||||
historyOfConnections=History of connections
|
||||
defineNewConnection=Define a new connection
|
||||
trackedRaces=Tracked races
|
||||
canSendRequests=Can send requests
|
||||
connectAndReadRaces=Connect and read races
|
||||
ports=Ports
|
||||
liveData=Live data
|
||||
storedData=Stored data
|
||||
uris=URIs
|
||||
jsonUrl=JSON URL
|
||||
livePort=Port Live Data
|
||||
storedPort=Port Stored Data
|
||||
liveUri=Live URI
|
||||
storedUri=Stored URI
|
||||
eventsConnectedTo=Events Currently Tracked
|
||||
hostname=Hostname
|
||||
declinationCheckbox=Correct Wind Bearing by Declination
|
||||
raceStartTrackingColumn=Tracking Started
|
||||
pauseAutomaticRefresh=Pause automatic refresh
|
||||
autoRefresh=Refresh automatically
|
||||
delayInSeconds=Delay (s)
|
||||
delayBetweenAutoAdvances=Delay between auto-updates in seconds:
|
||||
delayMustBeNonNegative=The delay must be greater than zero
|
||||
chooseUpdateIntervalOfAtLeastOneSecond=Choose update interval of at least one second
|
||||
errorSettingWindForRace=Error setting wind for race
|
||||
errorFetchingWindInformationForRace=Error fetching wind information for race
|
||||
errorWhileTryingToSetWindSourceForRace=Error while trying to set "wind starts upwind" flag
|
||||
inEvent=in event
|
||||
to=to
|
||||
showEstimatedWind=Show estimated wind
|
||||
timing=Timing
|
||||
raceDetailsToShow=Race Details
|
||||
overallDetailsToShow=Overall Details
|
||||
legDetailsToShow=Leg Details
|
||||
columnMoveUp=Up
|
||||
columnMoveDown=Down
|
||||
port=Port
|
||||
raceStartTimeColumn=Race Started
|
||||
showOnlySelectedCompetitors=Show only selected competitors
|
||||
showSelectedCompetitorsInfo=Show info box for selected competitors
|
||||
tailLength=Tail length (s)
|
||||
selectedRaces=Which races would you like to display?
|
||||
lengthInSeconds=Length (s)
|
||||
stressTest=Stress Test
|
||||
numberOfManeuvers=Maneuvers
|
||||
numberOfManeuversTooltip=The amount of the sailed maneuvers in this leg.
|
||||
tacks=Tacks
|
||||
jibes=Jibes
|
||||
penaltyCircles=Penalty Circles
|
||||
medalRaceIsNull=Medalrace value not allowed
|
||||
configuration=Configuration
|
||||
maneuverTypes=Maneuvers
|
||||
chooseChart=Choose chart
|
||||
distanceTraveled=Distance Traveled
|
||||
distanceTraveledTooltip=The distance traveled from the leg start to the end\nor to the current time point, if the leg isn''t finished.
|
||||
raceDistanceTraveledTooltip=The distance traveled from the race start to the end\nor to the current time point, if the race isn''t finished.
|
||||
velocityMadeGoodLong=Velocity Made Good
|
||||
speedOverGroundLong=Speed Over Ground
|
||||
gapToLeaderLong=Gap To Leader
|
||||
pointsToLoad=Points to load
|
||||
speed=Speed
|
||||
distance=Distance
|
||||
in=in
|
||||
secondsUnit=s
|
||||
metersUnit=m
|
||||
failedToLoadRaceData=Failed to laod race data.
|
||||
close=Close
|
||||
compareCompetitors=Compare competitors
|
||||
description=Description
|
||||
sailNumber=Sail number
|
||||
country=Country
|
||||
no3LetterCodes=Unable to find the IOC 3-letter-codes.
|
||||
add=Add
|
||||
delete=Delete
|
||||
showCharts=Show charts
|
||||
raceWithThisNameAlreadyExists=A race with that name already exists.
|
||||
raceWithThisNameAlreadyExistsInRegatta=A race with that name already exists in this regatta.
|
||||
headUp=Head up
|
||||
bearAway=Bear away
|
||||
tack=Tack
|
||||
tackTooltip=The amount of the sailed tacks in this race.
|
||||
jibe=Jibe
|
||||
jibeTooltip=The amount of the sailed jibes in this race.
|
||||
penaltyCircle=Penalty circle
|
||||
penaltyCircleTooltip=The amount of the sailed penalty circles in this race.
|
||||
markPassing=Mark passing
|
||||
mark=Mark
|
||||
otherManeuver=Unknown maneuver
|
||||
douglasPeuckerPoints=Douglas peucker points
|
||||
filterRacesByName=Filter races by name
|
||||
trackSettings=Track settings
|
||||
actionEdit=Edit
|
||||
actionEditScores=Edit scores
|
||||
actionOpenBrowser=Open in Browser
|
||||
actionRemove=Remove
|
||||
actionEditRaces=Edit races
|
||||
actionRaceEdit=Edit or rename race
|
||||
actionRaceUnlink=Unlink race
|
||||
actionRaceRemove=Remove race
|
||||
filterLeaderboardsByName=Filter leaderboards by name
|
||||
actions=Actions
|
||||
islinked=Is linked
|
||||
yes=Yes
|
||||
no=No
|
||||
hoverOverAPoint=Hover over a point for details
|
||||
noSelection=No selection
|
||||
raceIsKnownToStartUpwind=Race starts with upwind leg
|
||||
events=Events
|
||||
settingsForComponent=Settings for {0}
|
||||
noEventsFound=No events were found
|
||||
noEventSelected=No event selected
|
||||
noLeaderboardsFound=No leaderboards were found
|
||||
searchEvents=Search for events
|
||||
location=Location
|
||||
from=From
|
||||
until=Until
|
||||
onlyLiveEvents=Only live events
|
||||
locationNotAvailable=Location not available
|
||||
startDateNotAvailable=Start date not available
|
||||
startDate=Start date
|
||||
unknownManeuver=Unknown maneuver
|
||||
tailLengthMustBePositive=the tail length must be a number greater than zero.
|
||||
failedToLoadRaceInformation=Failed to load race information: {0}
|
||||
competitorPassedMarkAtDate={0} passed {1} at {2}
|
||||
valueForCompetitorAt={0} at {1}: {2}
|
||||
reallyRemoveRace=Do you really want to remove the race ''{0}''?
|
||||
showDetails=Show details
|
||||
hideLeaderboard=Hide leaderboard
|
||||
hideLeaderboards=Hide leaderboards
|
||||
showLeaderboard=Show leaderboard
|
||||
hideRaces=Hide races
|
||||
showMap=Show map
|
||||
hideMap=Hide map
|
||||
noLeaderboardSelected=No leaderboard selected
|
||||
leaderboardGroups=Leaderboard groups
|
||||
filterLeaderboardGroupsByName=Filter leaderboard groups by name
|
||||
createNewLeaderboardGroup=Create leaderboard group
|
||||
leaderboardGroupConfiguration=Leaderboard Group Configuration
|
||||
legs=Legs
|
||||
currentLeg=On Leg
|
||||
currentLegTooltip=The leg, on which the competitor currently is.
|
||||
leaderboardGroup=Leaderboard Group
|
||||
pleaseEnterNonEmptyDescription=Please enter a non-empty description
|
||||
groupWithThisNameAlreadyExists=A leaderboard group with this name already exists.
|
||||
detailsOfLeaderboardGroup=Details of leaderboard group
|
||||
edit=Edit
|
||||
save=Save
|
||||
abort=Abort
|
||||
noLeaderboardGroupWithNameFound=No leaderboard group with the name {0} found
|
||||
overview=Overview
|
||||
welcomeToSailingAnalytics=Welcome to SAP Sailing Analytics
|
||||
welcomeToSailingAnalyticsBody=Understanding what happens out on the race course isn''t always easy. To help solve this challenge and bring the excitement of sailing to the fans, we have developed a leader board based on SAP analytics.\
|
||||
Through analyzing GPS data together with integrated wind measurements from sensors out on the race course, the leader board displays information such as in-race ranking, average speeds, distance travelled, ETA (estimated time of arrival at the next mark rounding), gaps to leader, gains and losses per leg.\
|
||||
\
|
||||
Check out the results for yourself to see who triumphed - and how they did it.
|
||||
home=Home
|
||||
clickAndDragToZoomIn=Click and drag in the plot area to zoom in
|
||||
windSpeed=Wind speed (kts)
|
||||
allTimesInUTC=All times in UTC
|
||||
autoZoomTo=Auto zoom to
|
||||
autoZoomToBoats=Boats
|
||||
autoZoomToBuoys=Buoys
|
||||
autoZoomToWindSensors=Wind sensors
|
||||
autoZoomOff=Off
|
||||
autoZoomToTails=Tails
|
||||
autoZoomSelectedCompetitors=Zoom only to selected competitors
|
||||
bearing=Bearing
|
||||
zoom=Zoom
|
||||
stepSizeMustBeGreaterThanNull=Step size must be greater than 0
|
||||
stepSizeInSeconds=Step size in seconds
|
||||
refreshInterval=Refresh interval (s)
|
||||
refreshIntervalMustBeGreaterThanXSeconds=Refresh interval must be greater than {0} seconds
|
||||
competitorCharts=Competitor charts
|
||||
selectAtLeastOneCompetitor=To show the competitor charts, select at least one competitor
|
||||
directionChange=Direction change
|
||||
speedChange=Speed change
|
||||
degreesShort=deg
|
||||
untracked=Untracked
|
||||
delayForLiveMode=Delay for live mode:
|
||||
notAvailable=Not available
|
||||
details=Details
|
||||
noGroupSelected=No group selected
|
||||
combinedWindSourceTypeName=Combined
|
||||
courseBasedWindSourceTypeName=Course Layout
|
||||
trackBasedEstimationWindSourceTypeName=Estimation
|
||||
expeditionWindSourceTypeName=Measured
|
||||
webWindSourceTypeName=Manual
|
||||
clickChartToSetTime=Click on the chart to set the time
|
||||
position=Position
|
||||
windSourcesUsed=Wind Sources Used
|
||||
errorTryingToUpdateWindSourcesToExclude=Error trying to update wind sources to exclude for race {0}: {1}
|
||||
feedback=Feedback
|
||||
startStopPlaying=Start/Stop playing
|
||||
backToLive=Jump back to live time point
|
||||
slowPlaySpeedDown=Slow play speed down
|
||||
speedPlaySpeedUp=Speed play speed up
|
||||
showHideComponent=Show/Hide {0}
|
||||
degreesBoatToTheWind=Angle to wind
|
||||
racesInLeaderboard=Races in leaderboard
|
||||
leaderboardsInGroup=Leaderboards in group
|
||||
replication=Replication
|
||||
errorFetchingReplicaData=Error fetching replica data: {0}
|
||||
averageCrossTrackErrorInMeters=\u2205 XTE
|
||||
averageCrossTrackErrorInMetersTooltip=The average cross track error to the rhumb line during this leg.
|
||||
raceAverageCrossTrackErrorInMetersTooltip=The average cross track error to the rhumb line during this race.
|
||||
enterMaster=Hostname of Master Instance
|
||||
errorStartingReplication=Error starting replication from host {0} / exchange {1}: {2}
|
||||
helpLines=Help lines
|
||||
startLine=Start line
|
||||
finishLine=Finish line
|
||||
advantageLine=Advantage line
|
||||
courseMiddleLine=Course middle line
|
||||
messagingPortNumber=Messaging port number (0 for default)
|
||||
servletPortNumber=Servlet port number
|
||||
registeredAt=Registered at {0}
|
||||
replicatingFromMaster=Replicating from master {0}, messaging port {1}, servlet port {2}
|
||||
showWindSpeedSeries=Show wind speed data
|
||||
showWindDirectionSeries=Show wind directions data
|
||||
fleet=Fleet
|
||||
boatClass=Boat Class
|
||||
setDelayToLive=Set delay to live
|
||||
pleaseEnterNonEmptyVenue=Please enter a venue.
|
||||
eventWithThisNameAlreadyExists=An event with this name already exists.
|
||||
venue=Venue
|
||||
pleaseSelectABoatClass=Please select a boat class.
|
||||
regattaWithThisNameAlreadyExists=A regatta with this name already exists.
|
||||
seriesWithThisNameAlreadyExists=A series with this name already exists.
|
||||
fleetWithThisNameAlreadyExists=A fleet with this name already exists.
|
||||
fleets=Fleets
|
||||
series=Series
|
||||
splitFleet=Split fleet
|
||||
color=Color
|
||||
medalSeries=Medal Series
|
||||
noColor=No color
|
||||
pleaseSelectARegatta=Please select a regatta.
|
||||
addFleet=Add fleet
|
||||
doYouReallyWantToRemoveRegatta=Do you really want to remove the regatta "{0}"?
|
||||
errorLoadingScoreCorrectionProviders=Error loading score correction providers: {0}
|
||||
selectResultListToImportFrom=Select result list to import from
|
||||
of=of
|
||||
errorObtainingScoreCorrections=Error obtaining score corrections from provider {0} and event {1} for boat class {2} published on {3}: {4}
|
||||
assignRaceNumbersToRaceColumns=Assign race numbers of official results to leaderboard race columns
|
||||
importOfficialResults=Import official results...
|
||||
selectAll=Select all
|
||||
apply=Apply
|
||||
successfullyUpdatedScores=Successfully updated scores
|
||||
errorUpdatingScoresForLeaderboard=Error updating scores for leaderboard {0}: {1}
|
||||
maneuverTypesToShowWhenCompetitorIsClicked=Maneuver types to show when competitor is clicked
|
||||
simulateWithStartTimeNow=Simulate with "now" as start time
|
||||
boatClassDoesNotMatchSelectedRegatta=The selected races contain boat classes which are not the same as the boat class ''{0}'' of the selected regatta.\
|
||||
Do you really want to use the regatta ''{1}''?
|
||||
regattaExistForSelectedBoatClass=There is at least one regatta for the selected boat classes.\
|
||||
Do you really want to use the ''no regatta'' selection?
|
||||
reload=Reload
|
||||
addRegatta=Add Regatta...
|
||||
exchangeName=Exchange Name
|
||||
course=Course
|
||||
courseLayout=Course layout
|
||||
buoy=Buoy
|
||||
gate=Gate
|
||||
buoys=Buoys
|
||||
waypoint=Waypoint
|
||||
showAllCompetitors=Show all competitors
|
||||
boatTails=Boat tails
|
||||
maximalCount=Maximal count
|
||||
maxVisibleCompetitorsCountMustBePositive=The maximal amount of visible competitors must be greater than zero.
|
||||
fregResultImportUrls=FREG URLs
|
||||
errorRefreshingFregUrlList=Error refreshing FREG URL list: {0}
|
||||
successfullyUpdatedFregUrls=Successfully updated FREG URL list
|
||||
errorRemovingFregUrls=Error removing FREG URLs: {0}
|
||||
pleaseEnterNonEmptyUrl=Please enter a non-empty URL
|
||||
addFragUrl=Add FRAG Result URL
|
||||
errorAddingFragUrl=Error adding FRAG URL: {0}
|
||||
errorTryingToObtainLeaderboardContents=Error trying to obtain leaderboard contents: {0}
|
||||
lastScoreUpdate=Last Score Update
|
||||
warningBrowserUnsupported=This website is not optimized for your browser. Please switch to a newer one like Firefox or Chrome.
|
||||
newMark=New Mark
|
||||
controlPoint=Mark/Gate
|
||||
errorUpdatingRaceCourse=Error updating race course: {0}
|
||||
successfullyUpdatedCourse=Successfully updated race course
|
||||
selectOneMarkOrTwoMarksForGate=Select a single mark or two marks to create a gate
|
||||
errorTryingToObtainTheMarksOfTheRace=Error trying to obtain the marks of the race course: {0}
|
||||
errorTryingToObtainRaceCourse=Error trying to obtain the race course: {0}
|
||||
insertWaypointBeforeSelected=Insert waypoint before selected
|
||||
insertWaypointAfterSelected=Insert waypoint after selected
|
||||
scoringSchemeLowPointSystem=Low Point System
|
||||
scoringSchemeHighPointSystem=High Point System
|
||||
scoringSchemeHighPointEssOverall=High Point System ESS Overall
|
||||
scoringSchemeHighPointLastBreaksTie=High Point System, Last Race Breaks Tie
|
||||
scoringSystem=Scoring system
|
||||
createFlexibleLeaderboard=Create flexible leaderboard
|
||||
createRegattaLeaderboard=Create regatta leaderboard
|
||||
editFlexibleLeaderboard=Edit flexible leaderboard
|
||||
editRegattaLeaderboard=Edit regatta leaderboard
|
||||
noRegatta=No regatta
|
||||
useOverallLeaderboard=Use Overall leaderboard
|
||||
overallStandings=Overall Standings
|
||||
type=Type
|
||||
actionAddRaces=Add races
|
||||
racesWithNamePrefix=races with name prefix
|
||||
maximumSpeedOverGroundInKnots=Max SOG
|
||||
maximumSpeedOverGroundInKnotsTooltip=The biggest speed over ground measured in the regatta.
|
||||
totalTimeSailedDownwindInSeconds=Total time downwind
|
||||
totalTimeSailedDownwindInSecondsTooltip=The total time, the competitor sailed on downwind in the regatta.
|
||||
totalTimeSailedUpwindInSeconds=Total time upwind
|
||||
totalTimeSailedUpwindInSecondsTooltip=The total time, the competitor sailed on upwind in the regatta.
|
||||
totalTimeSailedReachingInSeconds=Total time reaching
|
||||
totalTimeSailedReachingInSecondsTooltip=The total time, the competitor sailed on reaching in the regatta.
|
||||
totalTimeSailedInSeconds=Total time
|
||||
totalTimeSailedInSecondsTooltip=The total time, the competitor needed for the regatta.
|
||||
hhmmssUnit=hh:mm:ss
|
||||
actionAddWindData=Add wind data
|
||||
valueMustBeBetweenMinMax=The value of ''{0}'' must be between {1} and {2}.
|
||||
optional=optional
|
||||
pleaseEnterAValue=Please enter a value.
|
||||
latitude=Latitude
|
||||
longitude=Longitude
|
||||
actionAddEvent=Add Event
|
||||
publicationUrl=Publication URL
|
||||
suppress=Suppress
|
||||
isPublic=Is public
|
||||
suppress=Suppress
|
||||
unsuppress=Unsuppress
|
||||
suppressedCompetitors=Suppressed Competitors
|
||||
mediaPanel=Audio & Video
|
||||
url=URL
|
||||
mimeType=MIME Type
|
||||
title=Title
|
||||
duration=Duration (h:mm:ss.ms)
|
||||
addMediaTrack=Add Audio/Video
|
||||
addYoutubeTrack=Add Youtube
|
||||
youtubeId=Youtube Id
|
||||
reallyRemoveMediaTrack=Do you really want to remove media track ''{0}''?
|
||||
pleaseSelectASeries=Please select a series
|
||||
pleaseSelectARace=Please select a race
|
||||
displayGroupsInReverseOrder=Display groups in reverse order
|
||||
actionConfigureUrl=Configure URL
|
||||
configureLeaderboardUrlDescription=Configure a leaderboard and obtain the resulting URL from the link
|
||||
embedded=Embedded
|
||||
additionalUrlSettings=Additional URL Settings
|
||||
restrictToSingleSelectedRace=Restrict to single selected race
|
||||
expandSelectedRace=Expand selected race
|
||||
showRaceDetails=Allow for race details
|
||||
numberOfRaces=Number of races
|
||||
numberOfRacesMustBeNonNegativeNumber=Please enter the number of last races to be displayed
|
||||
chooseTheWayYouSelectRaces=Choose the way you select races
|
||||
selectFromAllRaces=Select from all races
|
||||
selectANumberOfRaces=Select a number of races
|
||||
numberOfLastNRaces=Number of most current races to show
|
||||
expandLastRace=Always expand last race shown
|
||||
factor=Factor
|
||||
errorUpdatingIsMedalRace=Error updating the medal race setting: {0}
|
||||
maneuverLoss=Maneuver loss
|
||||
averageManeuverLossInMeters=\u2205 Maneuver Loss
|
||||
averageManeuverLossInMetersTooltip=The average distance loss during any meneuver.
|
||||
averageTackLossInMeters=\u2205 Tack Loss
|
||||
averageTackLossInMetersTooltip=The average distance loss during tacks.
|
||||
averageJibeLossInMeters=\u2205 Jibe Loss
|
||||
averageJibeLossInMetersTooltip=The average distance loss during jibes.
|
||||
shape=Shape
|
||||
pattern=Pattern
|
||||
legend=Legend
|
||||
live=live
|
||||
swissTimingArchiveConnector=SwissTiming Archived Events
|
||||
errorFetchingRankingChartData=Error fetching ranking chart data: {0}
|
||||
loadingCompetitorData=Loading competitor data...
|
||||
rankNAfterRace=Rank {0} after race {1}
|
||||
afterRace=after race
|
||||
showRankChart=Show rank chart
|
||||
overallLeaderboardSelection=Overall Leaderboard
|
||||
showOverallLeaderboardOnSamePage=Show overall leaderboard on same page
|
||||
errorTryingToObtainOverallLeaderboards=Error trying to obtain overall leaderboards: {0}
|
||||
finished=finished
|
||||
passedTo=passed to {0}
|
||||
gapChangeSinceLegStartInSeconds=Gap Change
|
||||
gapChangeSinceLegStartInSecondsTooltip=The change of the gap to the leader since the last leg start.\nA negative number means, that the gap was decreased and \
|
||||
a positive number means, that it was increased.
|
||||
sideToWhichMarkAtLegStartWasRounded=Mark rounded to
|
||||
sideToWhichMarkAtLegStartWasRoundedTooltip=Side to which the mark at leg start was rounded.
|
||||
raceIsLive=Race {0} is live
|
||||
racesAreLive=Races {0} are live
|
||||
scoringSchemeHighPointFirstGetsTen=High Point, winner gets 10 points
|
||||
scoringSchemeHighPointFirstGetsTen=High Point, winner gets 10 points
|
||||
knotsUnit=kts
|
||||
+486
-462
@@ -1,463 +1,487 @@
|
||||
helloWorld=Hello World
|
||||
kielWeel2011=Kiel Week 2011
|
||||
stgAccount=STG Account
|
||||
tracTracEvents=TracTrac Events
|
||||
swissTimingEvents=SwissTiming Events
|
||||
trackedBefore=Historie verfolgter Events
|
||||
listRaces=Rennen anzeigen
|
||||
wind=Wind
|
||||
windPanelLabel=This is the Wind Panel which so far is completely empty.
|
||||
refresh=Aktualisieren
|
||||
remove=Löschen
|
||||
windSource=Windquelle
|
||||
dampeningInterval=Mittelungsintervall
|
||||
map=Karte
|
||||
race=Wettfahrt
|
||||
races=Wettfahrten
|
||||
tracked=verfolgt
|
||||
time=Zeit
|
||||
playSpeed=Abspielgeschwindigkeit
|
||||
playSpeedHelp="1" für normale Abspielgeschwindigkeit, "2" für doppelte Geschwindigkeit usw.
|
||||
playModeLive=Live
|
||||
playModeReplay=Wiederholung
|
||||
timeDelay=Verzögerung
|
||||
timeDelayHelp=Leer für Wiedergabe zu beliebigen Zeitpunkten; Verzögerung des Datenstroms in Sekunden eingeben (z.B. "60" für eine Minute oder "0" für keine)
|
||||
speedInKnots=Geschwindigkeit (sm/h)
|
||||
fromDeg=aus (Grad)
|
||||
noRacesYet=Bisher keine Wettfahrten
|
||||
total=Gesamt
|
||||
carry=übertr.
|
||||
competitor=Wettkampfteilnehmner
|
||||
competitors=Wettkampfteilnehmner
|
||||
defaultLeaderboard=Alle Ergebnisse
|
||||
noSuchLeaderboard=Rangliste nicht gefunden
|
||||
leaderboardConfiguration=Ranglisten-Konfiguration
|
||||
newDotDotDot=Neu...
|
||||
editScores=Punktestand bearbeiten...
|
||||
columnNamesInSelectedLeaderboard=Wettfahrten-Namen in der selektierten Rangliste
|
||||
addDotDotDot=Hinzufügen...
|
||||
renameDotDotDot=Umbenennen...
|
||||
trackedRaceConnectedToSelectedRaceName=Wettfahrt verbunden mit dem selektierten Wettfahrt-Namen
|
||||
linkToColumn=Verbindung mit Spalte
|
||||
unlink=Unlink
|
||||
leaderboardName=Name Rangliste
|
||||
cancel=Abbrechen
|
||||
pleaseEnterAName=Bitte geben Sie einen Namen ein.
|
||||
discardRacesFromHowManyStartedRacesOn=Discard one more race starting with how many started races
|
||||
leaderboardWithThisNameAlreadyExists=Eine Rangliste mit diesem Namen existiert bereits.
|
||||
discardThresholdsMustBeNumeric=Discard thresholds must be numeric
|
||||
discardThresholdsMustBeAscending=Discard thresholds must be ascending
|
||||
discarding=Discarding
|
||||
startingFromNumberOfRaces=Ab wievielen Rennen
|
||||
renameLeaderboard=Rangliste umbenennen
|
||||
addColumnToLeaderboard=Spalte zu Rangliste hinzufügen
|
||||
pleaseEnterNameForNewRaceColumn=Namen für Renn-Spalten eingeben
|
||||
ok=OK
|
||||
medalRace=Medal Race
|
||||
renameRace=Rennen umbenennen
|
||||
openSelectedLeaderboard=Ausgewählte Rangliste öffnen
|
||||
rank=Platz
|
||||
totalRank=Gesamtplatz
|
||||
collapse=-
|
||||
expand=+
|
||||
leg=L
|
||||
distanceInMeters=Distanz
|
||||
distanceInMetersUnit=m
|
||||
averageSpeedInKnots=\u2205 FüG
|
||||
averageSpeedInKnotsUnit=kn
|
||||
rankGain=Platz +/-
|
||||
sapSailingAnalytics=Sailing Analytics
|
||||
leaderboard=Ergebnisse
|
||||
leaderboards=Ranglistenlisten
|
||||
leaderboardSettings=Einstellungen Rangliste
|
||||
settings=Einstellungen (z.B. Abschnittdetails auswählen)
|
||||
selectAtLeastOneLegDetail=Mindestens ein Detail auswählen
|
||||
currentSpeedOverGroundInKnots=FüG
|
||||
currentSpeedOverGroundInKnotsUnit=kn
|
||||
estimatedTimeToNextWaypointInSeconds=ETA
|
||||
estimatedTimeToNextWaypointInSecondsUnit=s
|
||||
gapToLeaderInSeconds=Abstand zum Führenden
|
||||
gapToLeaderInSecondsUnit=s
|
||||
velocityMadeGoodInKnots=VMG
|
||||
velocityMadeGoodInKnotsUnit=kn
|
||||
windwardDistanceToGoInMeters=Abstand in Windrichtung zur nächsten Tonne
|
||||
windwardDistanceToLeaderInMeters=Abstand zum führenden Boot
|
||||
windwardDistanceToGoInMetersUnit=m
|
||||
name=Name
|
||||
leaveEmptyForDefault=Leer für Standardeinstellung
|
||||
trackNewEvent=Track New event
|
||||
trackableRaces=Trackable Races
|
||||
trackWind=Track Wind
|
||||
regattaName=Name der Regatta
|
||||
eventName=Event-Name
|
||||
event=Rennen
|
||||
startTime=Startzeit
|
||||
regatta=Regatta
|
||||
regattas=Regatten
|
||||
startTracking=Tracking starten
|
||||
stopTracking=Tracking stoppen
|
||||
connections=Verbindungen
|
||||
historyOfConnections=History of connections
|
||||
defineNewConnection=Definiere eine neue Verbindung
|
||||
trackedRaces=Tracked races
|
||||
canSendRequests=Kann Anfragen senden
|
||||
connectAndReadRaces=Verbinde und hole Wettfahrten
|
||||
trackSettings=Track Einstellungen
|
||||
ports=Ports
|
||||
liveData=Live data
|
||||
storedData=Stored data
|
||||
uris=URIs
|
||||
jsonUrl=JSON URL
|
||||
livePort=Port Live Data
|
||||
storedPort=Port Stored Data
|
||||
liveUri=Live URI
|
||||
storedUri=Stored URI
|
||||
eventsConnectedTo=Momentan verfolgte Events
|
||||
hostname=Hostname
|
||||
declinationCheckbox=Windrichtung mit Missweisung korrigieren
|
||||
raceStartTrackingColumn=Tracking Started
|
||||
pauseAutomaticRefresh=Keine automatische Aktualisierung
|
||||
autoRefresh=Automatisch aktualisieren
|
||||
delayInSeconds=Verzögerung (s)
|
||||
delayMustBeNonNegative=Die Verzögerung muß größer als 0 sein
|
||||
delayBetweenAutoAdvances=Intervall zwischen Auto-Updates in Sekunden:
|
||||
chooseUpdateIntervalOfAtLeastOneSecond=Update-Intervall mindestens eine Sekunde
|
||||
errorSettingWindForRace=Error setting wind for race
|
||||
errorFetchingWindInformationForRace=Error fetching wind information for race
|
||||
errorWhileTryingToSetWindSourceForRace=Error while trying to set "wind starts upwind" flag
|
||||
inEvent=in event
|
||||
to=to
|
||||
showEstimatedWind=Zeige den geschätzten Wind
|
||||
timing=Timing
|
||||
raceDetailsToShow=Renndetails
|
||||
overallDetailsToShow=Regatta-Details
|
||||
legDetailsToShow=Schenkeldetails
|
||||
columnMoveUp=Hoch
|
||||
columnMoveDown=Runter
|
||||
port=Port
|
||||
raceStartTimeColumn=Rennstart
|
||||
showOnlySelectedCompetitors=Nur ausgewählte Segler anzeigen
|
||||
showSelectedCompetitorsInfo=Infobox für ausgewählte Segler anzeigen
|
||||
tailLength=Schweiflänge (s)
|
||||
selectedRaces=Welche Rennen möchten Sie angezeigt bekommen?
|
||||
lengthInSeconds=Länge (s)
|
||||
stressTest=Stresstest
|
||||
numberOfManeuvers=Manöver
|
||||
tacks=Wenden
|
||||
jibes=Halsen
|
||||
penaltyCircles=Strafkreise
|
||||
medalRaceIsNull=Medaillenrennen nicht erlaubt
|
||||
maneuverTypes=Manöver
|
||||
configuration=Konfiguration
|
||||
chooseChart=Diagramm wählen
|
||||
raceNameEmpty=Rennname leer
|
||||
distanceTraveled=Zurückgelegte Strecke
|
||||
velocityMadeGoodLong=Velocity Made Good
|
||||
speedOverGroundLong=Speed Over Ground
|
||||
gapToLeaderLong=Abstand zum führenden Boot
|
||||
pointsToLoad=Zu ladende Punkte
|
||||
speed=Geschwindigkeit
|
||||
distance=Strecke
|
||||
in=in
|
||||
secondsUnit=s
|
||||
metersUnit=m
|
||||
failedToLoadRaceData=Renndaten konnten nicht geladen werden.
|
||||
close=Schließen
|
||||
compareCompetitors=Segler vergleichen
|
||||
description=Beschreibung
|
||||
sailNumber=Segelnummer
|
||||
country=Land
|
||||
no3LetterCodes=IOC 3-Buchstaben-Codes können nicht gefunden werden.
|
||||
add=Hinzufügen
|
||||
delete=Löschen
|
||||
showCharts=Grafische Ansicht
|
||||
raceWithThisNameAlreadyExists=Ein Rennen mit diesem Namen existiert schon.
|
||||
raceWithThisNameAlreadyExistsInRegatta=Ein Rennen mit diesem Namen existiert schon in der Regatta.
|
||||
headUp=anluven
|
||||
bearAway=abfallen
|
||||
tack=Wende
|
||||
jibe=Halse
|
||||
penaltyCircle=Strafkreis
|
||||
markPassing=Tonnenpassierung
|
||||
mark=Tonne
|
||||
otherManeuver=Manövertyp unbekannt
|
||||
douglasPeuckerPoints=Douglas-Peucker-Punkte
|
||||
filterRacesByName=Rennen nach Name filtern
|
||||
actionEdit=Ändern
|
||||
actionEditScores=Punkte ändern
|
||||
actionOpenBrowser=Im Browser öffnen
|
||||
actionRemove=Entfernen
|
||||
actionEditRaces=Rennen ändern
|
||||
actionRaceEdit=Rennen ändern oder umbenennen
|
||||
actionRaceUnlink=Rennverknüpfung entfernen
|
||||
actionRaceRemove=Rennen entfernen
|
||||
filterLeaderboardsByName=Ranglisten nach Name filtern
|
||||
windwardDistanceToLeader=Windward distance to leader
|
||||
actions=Aktionen
|
||||
islinked=Verknüpft
|
||||
yes=Ja
|
||||
no=Nein
|
||||
hoverOverAPoint=Für Details Maus über dem Graph positionieren
|
||||
noSelection=Keine Selektion
|
||||
raceIsKnownToStartUpwind=Rennen beginnt mit Kreuz
|
||||
events=Rennen
|
||||
settingsForComponent=Einstellungen für {0}
|
||||
noEventsFound=Es wurden keine Rennen gefunden
|
||||
noEventSelected=Kein Rennen ausgewählt
|
||||
noLeaderboardsFound=Es wurden keine Ranglisten gefunden
|
||||
searchEvents=Suche nach Rennen
|
||||
location=Ort
|
||||
from=Von
|
||||
until=Bis
|
||||
onlyLiveEvents=Nur Live-Rennen
|
||||
locationNotAvailable=Ort nicht verfügbar
|
||||
startDateNotAvailable=Startdatum nicht verfügbar
|
||||
startDate=Startdatum
|
||||
unknownManeuver=Unbekanntes Manöver
|
||||
tailLengthMustBePositive=Die Schweiflänge muss größer als Null sein.
|
||||
failedToLoadRaceInformation=Daten zur Wettfahrt konnten nicht geladen werden: {0}
|
||||
competitorPassedMarkAtDate={0} passierte {1} um {2}
|
||||
valueForCompetitorAt={0} um {1}: {2}
|
||||
reallyRemoveRace=Möchten Sie das Rennen ''{0}'' wirklich entfernen?
|
||||
showDetails=Details zeigen
|
||||
hideLeaderboard=Rangliste ausblenden
|
||||
hideLeaderboards=Ranglisten ausblenden
|
||||
showLeaderboard=Rangliste zeigen
|
||||
hideRaces=Rennen ausblenden
|
||||
showMap=Karte zeigen
|
||||
hideMap=Karte ausblenden
|
||||
noLeaderboardSelected=Keine Rangliste ausgewählt
|
||||
leaderboardGroups=Ranglisten-Gruppen
|
||||
filterLeaderboardGroupsByName=Ranglisten-Gruppen nach Name filtern
|
||||
createNewLeaderboardGroup=Neue Ranglisten-Gruppe erstellen
|
||||
leaderboardGroupConfiguration=Ranglistengruppen-Konfiguration
|
||||
legs=Schenkel
|
||||
currentLeg=Aktueller Schenkel
|
||||
leaderboardGroup=Ranglisten-Gruppe
|
||||
pleaseEnterNonEmptyDescription=Bitte eine nicht-leere Beschreibung eingeben
|
||||
groupWithThisNameAlreadyExists=Ranglisten-Gruppe mit diesem Namen existiert bereits
|
||||
detailsOfLeaderboardGroup=Details der Ranglisten-Gruppe
|
||||
edit=Bearbeiten
|
||||
save=Speichern
|
||||
abort=Abbrechen
|
||||
noLeaderboardGroupWithNameFound=Keine Ranglisten-Gruppe mit dem Namen {0} gefunden
|
||||
overview=Übersicht
|
||||
welcomeToSailingAnalytics=Willkommen bei SAP Sailing Analytics
|
||||
welcomeToSailingAnalyticsBody=Understanding what happens out on the race course isn''t always easy. To help solve this challenge and bring the excitement of sailing to the fans, we have developed a leader board based on SAP analytics.\
|
||||
Through analyzing GPS data together with integrated wind measurements from sensors out on the race course, the leader board displays information such as in-race ranking, average speeds, distance travelled, ETA (estimated time of arrival at the next mark rounding), gaps to leader, gains and losses per leg.\
|
||||
\
|
||||
Check out the results for yourself to see who triumphed - and how they did it.
|
||||
home=Startseite
|
||||
clickAndDragToZoomIn=Anklicken und ziehen zum Hineinzoomen
|
||||
windSpeed=Wind speed (sm/h)
|
||||
allTimesInUTC=Alle Zeiten in UTC
|
||||
autoZoomTo=Auto-Zoom nach
|
||||
autoZoomToBoats=Booten
|
||||
autoZoomToBuoys=Tonnen
|
||||
autoZoomToWindSensors=Windsensoren
|
||||
autoZoomOff=Aus
|
||||
autoZoomToTails=Schweife
|
||||
autoZoomSelectedCompetitors=Nur zu ausgewählten Seglern zoomen
|
||||
bearing=Kurs über Grund
|
||||
zoom=Zoom
|
||||
stepSizeMustBeGreaterThanNull=Die Schrittweite muss größer als 0 sein
|
||||
stepSizeInSeconds=Schrittweite in Sekunden
|
||||
refreshInterval=Aktualisierungs-Interval (s)
|
||||
refreshIntervalMustBeGreaterThanXSeconds=Aktualisierungs-Interval muss größer als {0} Sekunden sein
|
||||
competitorCharts=Competitor charts
|
||||
selectAtLeastOneCompetitor=Um die Segler-Diagramme anzeigen zu lassen, wähle mindestens einen Segler aus
|
||||
directionChange=Richtungsänderung
|
||||
speedChange=Geschwindigkeitsänderung
|
||||
degreesShort=deg
|
||||
untracked=Nicht verfolgt
|
||||
delayForLiveMode=Verzögerung im Live-Modus:
|
||||
notAvailable=Nicht verfügbar
|
||||
details=Details
|
||||
noGroupSelected=Keine Gruppe ausgewählt
|
||||
combinedWindSourceTypeName=Kombiniert
|
||||
courseBasedWindSourceTypeName=Kurslayout
|
||||
trackBasedEstimationWindSourceTypeName=Schätzung
|
||||
expeditionWindSourceTypeName=Messung
|
||||
webWindSourceTypeName=Manuell
|
||||
clickChartToSetTime=Klicke auf das Diagramm um die Zeit zu setzen
|
||||
position=Position
|
||||
windSourcesUsed=Benutzte Windquellen
|
||||
errorTryingToUpdateWindSourcesToExclude=Fehler beim Aktualisieren der auszuschließenden Windquellen für Rennen {0}: {1}
|
||||
feedback=Feedback
|
||||
startStopPlaying=Starten/Stoppen des abspielens
|
||||
backToLive=Zum Live-Zeitpunkte springen
|
||||
slowPlaySpeedDown=Abspielgeschwindigkeit verlangsamen
|
||||
speedPlaySpeedUp=Abspielgeschwindigkeit erhöhen
|
||||
showHideComponent={0} anzeigen/verstecken
|
||||
degreesBoatToTheWind=Winkel zum Wind
|
||||
racesInLeaderboard=Rennen im Leaderboard
|
||||
leaderboardsInGroup=Leaderboards in der Gruppe
|
||||
replication=Replikation
|
||||
errorFetchingReplicaData=Fehler beim Beschaffen der Replikationsdaten: {0}
|
||||
averageCrossTrackErrorInMeters=\u2205 XTE
|
||||
enterMaster=Hostname der Master-Instanz
|
||||
errorStartingReplication=Fehler beim Starten der Replikation von Host {0} / Exchange {1}: {2}
|
||||
helpLines=Hilfslinien
|
||||
startLine=Startlinie
|
||||
finishLine=Ziellinie
|
||||
advantageLine=Führungslinie
|
||||
courseMiddleLine=Kursmittellinie
|
||||
messagingPortNumber=Messaging-Portnummer (0 für Default)
|
||||
servletPortNumber=Servlet Portnummer
|
||||
registeredAt=Registriert {0}
|
||||
replicatingFromMaster=Repliziert von master {0}, Messaging Port {1}, Servlet Port {2}
|
||||
showWindSpeedSeries=Daten für Windgeschwindigkeit zeigen
|
||||
showWindDirectionSeries=Daten für Windrichtung zeigen
|
||||
fleet=Flotte
|
||||
boatClass=Bootsklasse
|
||||
setDelayToLive=Verzögerung zu 'Live' setzen
|
||||
pleaseEnterNonEmptyVenue=Bitte geben sie einen Veranstaltungsort ein.
|
||||
eventWithThisNameAlreadyExists=Eine Veranstaltung mit diesem Namen existiert bereits.
|
||||
venue=Veranstaltungsort
|
||||
pleaseSelectABoatClass=Bitte wählen Sie eine Bootsklasse aus.
|
||||
regattaWithThisNameAlreadyExists=Eine Regatta mit diesem Namen existiert bereits.
|
||||
seriesWithThisNameAlreadyExists=Eine Serie mit diesem Namen existiert bereits.
|
||||
series=Serie
|
||||
fleetWithThisNameAlreadyExists=Eine Flotte mit diesem Namen existiert bereits.
|
||||
fleets=Flotten
|
||||
splitFleet=Aufteilung in Gruppen
|
||||
color=Farbe
|
||||
medalSeries=Medal Series
|
||||
noColor=Keine Farbe
|
||||
pleaseSelectARegatta=Bitte wählen Sie eine Regatta aus.
|
||||
addFleet=Gruppe hinzufügen
|
||||
doYouReallyWantToRemoveRegatta=Möchten Sie wirklich Regatta "{0}" löschen?
|
||||
errorLoadingScoreCorrectionProviders=Fehler beim Laden der offiziellen Ergebnis-Dienste: {0}
|
||||
selectResultListToImportFrom=Ergebnisliste auswählen
|
||||
of=von
|
||||
errorObtainingScoreCorrections=Fehler beim Laden der offiziellen Ergebnisse von Dienst {0} zu Veranstaltung {1} und Bootsklasse {2} veröffentlicht {3}: {4}
|
||||
assignRaceNumbersToRaceColumns=Renn-Nummern den Ergebnisspalten zuordnen
|
||||
importOfficialResults=Offizielle Ergebnisse importieren...
|
||||
selectAll=Alle auswählen
|
||||
apply=Übernehmen
|
||||
successfullyUpdatedScores=Ergebnisse erfolgreich aktualisiert
|
||||
errorUpdatingScoresForLeaderboard=Fehler beim Aktualisieren der Ergebnisse für {0}: {1}
|
||||
maneuverTypesToShowWhenCompetitorIsClicked=Anzuzeigende Manövertypen für angeklickte Segler
|
||||
simulateWithStartTimeNow=Simulieren mit "jetzt" als Startzeit
|
||||
boatClassDoesNotMatchSelectedRegatta=Die ausgewählten Rennen enthalten eine Bootsklasse, die nicht der Bootsklasse der ausgewählten Regatta ''{0}'' entspricht.\n\
|
||||
Willst du wirklich diese Regatta benutzen ''{1}''?
|
||||
regattaExistForSelectedBoatClass=Es gibt mindestens eine Regatta zu den ausgewählten Bootsklassen.\
|
||||
Willst du wirklich die Auswahl ''keine Regatta'' benutzen?
|
||||
reload=Neu laden
|
||||
addRegatta=Regatta hinzufügen...
|
||||
exchangeName=Exchange Name
|
||||
course=Kurs
|
||||
courseLayout=Kursdefinition
|
||||
buoy=Boje
|
||||
gate=Tor
|
||||
buoys=Bojen
|
||||
waypoint=Wegpunkt
|
||||
showAllCompetitors=Zeige alle Wettkampfteilnehmer
|
||||
boatTails=Bootsschweif
|
||||
maximalCount=Maximale Anzahl
|
||||
maxVisibleCompetitorsCountMustBePositive=Die maximale Anzahl der sichtbaren Wettkampfteilnehmer muß größer als Null sein.
|
||||
fregResultImportUrls=FREG URLs
|
||||
errorRefreshingFregUrlList=Fehler beim Aktualisieren derFREG URL-Liste: {0}
|
||||
successfullyUpdatedFregUrls=FREG URL-Liste erfolgreich aktualisiert
|
||||
errorRemovingFregUrls=Fehler beim Löschen von FREG URLs: {0}
|
||||
pleaseEnterNonEmptyUrl=Bitte eine nicht-leere URL eingeben
|
||||
addFragUrl=FRAG Ergebnis-URL hinzufügen
|
||||
errorAddingFragUrl=Fehler beim Hinzufügen einer FREG URL: {0}
|
||||
errorTryingToObtainLeaderboardContents=Fehler beim Berechnen der Ergebnisliste: {0}
|
||||
lastScoreUpdate=Letzte Ergebnisänderung
|
||||
warningBrowserUnsupported=Diese Webseite ist für Ihren Browser nicht optimiert. Wir empfehlen den Firefox oder Chrome in der neuesten Version.
|
||||
newMark=Neue Marke
|
||||
controlPoint=Einzelmarke/Gate
|
||||
errorUpdatingRaceCourse=Fehler beim Aktualisieren des neuen Kurses: {0}
|
||||
successfullyUpdatedCourse=Kurs erfolgreich aktualisiert
|
||||
selectOneMarkOrTwoMarksForGate=Eine einzelne Marke auswählen oder zwei Marken, um ein Gate zu erstellen
|
||||
errorTryingToObtainTheMarksOfTheRace=Fehler beim Ermitteln der Marken des Regattakurses: {0}
|
||||
errorTryingToObtainRaceCourse=Fehler beim Ermitteln des Rennkurses: {0}
|
||||
insertWaypointBeforeSelected=Wegpunkt nach dem selektierten einfügen
|
||||
insertWaypointAfterSelected=Wegpunkt vor dem selektierten einfügen
|
||||
scoringSchemeLowPointSystem=Low Point System
|
||||
scoringSchemeHighPointSystem=High Point System
|
||||
scoringSchemeHighPointEssOverall=High Point System ESS Gesamtwertung
|
||||
scoringSchemeHighPointLastBreaksTie=High Point System, letztes Rennen entscheidet bei Gleichstand
|
||||
scoringSystem=Bepunktungssystem
|
||||
createFlexibleLeaderboard=Flexible Rangliste anlegen
|
||||
createRegattaLeaderboard=Rangliste für Regatta anlegen
|
||||
editFlexibleLeaderboard=Flexible Rangliste ändern
|
||||
editRegattaLeaderboard=Rangliste für Regatta ändern
|
||||
noRegatta=Keine Regatta
|
||||
useOverallLeaderboard=Overall-Ergebnisse anzeigen
|
||||
overallStandings=Gesamtstand
|
||||
type=Typ
|
||||
actionAddRaces=Rennen hinzuf�gen
|
||||
racesWithNamePrefix=Rennen mit Namens-Pr�fix
|
||||
maximumSpeedOverGroundInKnots=Max FüG
|
||||
totalTimeSailedDownwindInSeconds=Gesamtzeit Vorwind
|
||||
totalTimeSailedUpwindInSeconds=Gesamtzeit Kreuz
|
||||
totalTimeSailedReachingInSeconds=Gesamtzeit Holeschlag
|
||||
totalTimeSailedInSeconds=Gesamtzeit
|
||||
hhmmssUnit=hh:mm:ss
|
||||
actionAddWindData=Winddaten hinzufügen
|
||||
valueMustBeBetweenMinMax=Der Wert von ''{0}'' muß zwischen {1} und {2} sein.
|
||||
optional=optional
|
||||
pleaseEnterAValue=Bitte geben Sie einen Wert ein.
|
||||
latitude=Breite
|
||||
longitude=Länge
|
||||
actionAddEvent=Veranstaltung hinzufügen
|
||||
publicationUrl=URL für die Veröffentlichung
|
||||
suppress=Entfernen
|
||||
isPublic=Öffentlich zugänglich
|
||||
suppress=Entfernen
|
||||
unsuppress=Wieder hinzufügen
|
||||
suppressedCompetitors=Unterdrückte Wettkampfteilnehmer
|
||||
mediaPanel=Audio & Video
|
||||
url=URL
|
||||
mimeType=MIME Type
|
||||
title=Titel
|
||||
duration=Dauer (h:mm:ss.ms)
|
||||
addMediaTrack=Audio/Video hinzufügen
|
||||
addYoutubeTrack=Youtube hinzufügen
|
||||
youtubeId=Youtube Id
|
||||
reallyRemoveMediaTrack=Möchten Sie ''{0}'' wirklich entfernen?
|
||||
pleaseSelectASeries=Bitte wählen Sie eine Serie aus
|
||||
pleaseSelectARace=Bitte wählen Sie ein Rennen aus
|
||||
displayGroupsInReverseOrder=Zeige die Gruppen in umgekehrter Reihenfolge
|
||||
actionConfigureUrl=URL konfigurieren
|
||||
configureLeaderboardUrlDescription=Ergebnisansicht konfigurieren. Die fertige URL kann dem Link entnommen werden.
|
||||
embedded=Eingebettet
|
||||
additionalUrlSettings=Weitere URL-relevante Einstellungen
|
||||
restrictToSingleSelectedRace=Nur einzelnes ausgewähltes Rennen zeigen
|
||||
expandSelectedRace=Details des ausgewähltes Rennens zeigen
|
||||
showRaceDetails=Details anbieten
|
||||
numberOfRaces=Anzahl Rennen
|
||||
numberOfRacesMustBeNonNegativeNumber=Bitte Anzahl der anzuzeigenden letzten Rennen eingeben
|
||||
chooseTheWayYouSelectRaces=Wie wollen die anzuzeigenden Rennen ausgewählt werden?
|
||||
selectFromAllRaces=Aus allen Rennen auswählen
|
||||
selectANumberOfRaces=Eine Anzahl anzuzeigender Rennen auswählen
|
||||
numberOfLastNRaces=Anzahl der zu zeigenden aktuellsten Rennen
|
||||
expandLastRace=Immer letztes gezeigtes Rennen expandieren
|
||||
factor=Faktor
|
||||
errorUpdatingIsMedalRace=Fehler beim Ändern der Medaillenrennen-Einstellung: {0}
|
||||
maneuverLoss=Manöververlust
|
||||
averageManeuverLossInMeters=\u2205 Manöververlust
|
||||
averageTackLossInMeters=\u2205 Wendeverlust
|
||||
averageJibeLossInMeters=\u2205 Halseverlust
|
||||
shape=Form
|
||||
pattern=Muster
|
||||
legend=Legende
|
||||
live=live
|
||||
swissTimingArchiveConnector=SwissTiming Historische Veranstaltungen
|
||||
errorFetchingRankingChartData=Fehler beim Laden der Daten für das Ranglisten-Chart: {0}
|
||||
loadingCompetitorData=Lade Teilnehmer-Daten
|
||||
rankNAfterRace=Rang {0} nach Rennen {1}
|
||||
afterRace=nach Rennen
|
||||
showRankChart=Rang-Diagramm anzeigen
|
||||
overallLeaderboardSelection=Gesamtergebnisse
|
||||
showOverallLeaderboardOnSamePage=Gesamtergebnisse auf derselben Seite anzeigen
|
||||
errorTryingToObtainOverallLeaderboards=Fehler beim Laden der Gesamtergebnisse: {0}
|
||||
finished=beendet
|
||||
passedTo=an {0} gerundet
|
||||
gapChangeSinceLegStartInSeconds=Gap Änderung
|
||||
sideToWhichMarkAtLegStartWasRounded=Tonne gerundet an
|
||||
raceIsLive=Rennen {0} ist live
|
||||
helloWorld=Hello World
|
||||
kielWeel2011=Kiel Week 2011
|
||||
stgAccount=STG Account
|
||||
tracTracEvents=TracTrac Events
|
||||
swissTimingEvents=SwissTiming Events
|
||||
trackedBefore=Historie verfolgter Events
|
||||
listRaces=Rennen anzeigen
|
||||
wind=Wind
|
||||
windPanelLabel=This is the Wind Panel which so far is completely empty.
|
||||
refresh=Aktualisieren
|
||||
remove=Löschen
|
||||
windSource=Windquelle
|
||||
dampeningInterval=Mittelungsintervall
|
||||
map=Karte
|
||||
race=Wettfahrt
|
||||
races=Wettfahrten
|
||||
tracked=verfolgt
|
||||
time=Zeit
|
||||
timeTooltip=Zeit die der Teilnehmer auf diesem Schenkel gesegelt ist.
|
||||
playSpeed=Abspielgeschwindigkeit
|
||||
playSpeedHelp="1" für normale Abspielgeschwindigkeit, "2" für doppelte Geschwindigkeit usw.
|
||||
playModeLive=Live
|
||||
playModeReplay=Wiederholung
|
||||
timeDelay=Verzögerung
|
||||
timeDelayHelp=Leer für Wiedergabe zu beliebigen Zeitpunkten; Verzögerung des Datenstroms in Sekunden eingeben (z.B. "60" für eine Minute oder "0" für keine)
|
||||
speedInKnots=Geschwindigkeit (sm/h)
|
||||
fromDeg=aus (Grad)
|
||||
noRacesYet=Bisher keine Wettfahrten
|
||||
total=Gesamt
|
||||
carry=übertr.
|
||||
competitor=Wettkampfteilnehmner
|
||||
competitors=Wettkampfteilnehmner
|
||||
defaultLeaderboard=Alle Ergebnisse
|
||||
noSuchLeaderboard=Rangliste nicht gefunden
|
||||
leaderboardConfiguration=Ranglisten-Konfiguration
|
||||
newDotDotDot=Neu...
|
||||
editScores=Punktestand bearbeiten...
|
||||
columnNamesInSelectedLeaderboard=Wettfahrten-Namen in der selektierten Rangliste
|
||||
addDotDotDot=Hinzufügen...
|
||||
renameDotDotDot=Umbenennen...
|
||||
trackedRaceConnectedToSelectedRaceName=Wettfahrt verbunden mit dem selektierten Wettfahrt-Namen
|
||||
linkToColumn=Verbindung mit Spalte
|
||||
unlink=Unlink
|
||||
leaderboardName=Name Rangliste
|
||||
cancel=Abbrechen
|
||||
pleaseEnterAName=Bitte geben Sie einen Namen ein.
|
||||
discardRacesFromHowManyStartedRacesOn=Discard one more race starting with how many started races
|
||||
leaderboardWithThisNameAlreadyExists=Eine Rangliste mit diesem Namen existiert bereits.
|
||||
discardThresholdsMustBeNumeric=Discard thresholds must be numeric
|
||||
discardThresholdsMustBeAscending=Discard thresholds must be ascending
|
||||
discarding=Discarding
|
||||
startingFromNumberOfRaces=Ab wievielen Rennen
|
||||
renameLeaderboard=Rangliste umbenennen
|
||||
addColumnToLeaderboard=Spalte zu Rangliste hinzufügen
|
||||
pleaseEnterNameForNewRaceColumn=Namen für Renn-Spalten eingeben
|
||||
ok=OK
|
||||
medalRace=Medal Race
|
||||
renameRace=Rennen umbenennen
|
||||
openSelectedLeaderboard=Ausgewählte Rangliste öffnen
|
||||
rank=Platz
|
||||
rankTooltip=Platzierung des Teilnehmers.
|
||||
totalRank=Gesamtplatz
|
||||
collapse=-
|
||||
expand=+
|
||||
leg=L
|
||||
distanceInMeters=Distanz
|
||||
averageSpeedInKnots=\u2205 FüG
|
||||
averageSpeedInKnotsTooltip=Die durchschnittliche Fahrt über Grund in diesem Schenkel,\berechnet durch die Division der gefahren Distanz und der benötigten Zeit.
|
||||
raceAverageSpeedInKnotsTooltip=Die durchschnittliche Fahrt über Grund in diesem Rennen,\berechnet durch die Division der gefahren Distanz und der benötigten Zeit.
|
||||
rankGain=Platz +/-
|
||||
rankGainTooltip=Die Differenz zwischen der Platzierung des aktuellen und des letzten Schenkels.
|
||||
sapSailingAnalytics=Sailing Analytics
|
||||
leaderboard=Ergebnisse
|
||||
leaderboards=Ranglistenlisten
|
||||
leaderboardSettings=Einstellungen Rangliste
|
||||
settings=Einstellungen (z.B. Abschnittdetails auswählen)
|
||||
selectAtLeastOneLegDetail=Mindestens ein Detail auswählen
|
||||
currentSpeedOverGroundInKnots=FüG
|
||||
currentSpeedOverGroundInKnotsTooltip=Die aktuelle Fahrt über Grund.
|
||||
estimatedTimeToNextWaypointInSeconds=ETA
|
||||
estimatedTimeToNextWaypointInSecondsTooltip=Die vorraussichtliche Zeit, die der Teilnehmer benötigt,\num den nächsten Wegpunkt zu erreichen.
|
||||
gapToLeaderInSeconds=Abstand zum Führenden
|
||||
gapToLeaderInSecondsTooltip=Die Zeit die ein Teilnehmer bräuchte, um de Führenden zu erreichen.
|
||||
velocityMadeGoodInKnots=VMG
|
||||
velocityMadeGoodInKnotsTooltip=Die effektive Geschwindigkeit zum Ziel.
|
||||
windwardDistanceToGoInMeters=Abstand in Windrichtung zur nächsten Tonne
|
||||
windwardDistanceToGoInMetersTooltip=Windwärtige Distanz des Teilnehmerns zum Ende des Schenkels.
|
||||
windwardDistanceToLeaderInMeters=Abstand zum führenden Boot
|
||||
windwardDistanceToLeaderInMetersTooltip=Windwärtige Distanz des Teilnehmers zum Führenden.
|
||||
name=Name
|
||||
leaveEmptyForDefault=Leer für Standardeinstellung
|
||||
trackNewEvent=Track New event
|
||||
trackableRaces=Trackable Races
|
||||
trackWind=Track Wind
|
||||
regattaName=Name der Regatta
|
||||
eventName=Event-Name
|
||||
event=Rennen
|
||||
startTime=Startzeit
|
||||
regatta=Regatta
|
||||
regattas=Regatten
|
||||
startTracking=Tracking starten
|
||||
stopTracking=Tracking stoppen
|
||||
connections=Verbindungen
|
||||
historyOfConnections=History of connections
|
||||
defineNewConnection=Definiere eine neue Verbindung
|
||||
trackedRaces=Tracked races
|
||||
canSendRequests=Kann Anfragen senden
|
||||
connectAndReadRaces=Verbinde und hole Wettfahrten
|
||||
trackSettings=Track Einstellungen
|
||||
ports=Ports
|
||||
liveData=Live data
|
||||
storedData=Stored data
|
||||
uris=URIs
|
||||
jsonUrl=JSON URL
|
||||
livePort=Port Live Data
|
||||
storedPort=Port Stored Data
|
||||
liveUri=Live URI
|
||||
storedUri=Stored URI
|
||||
eventsConnectedTo=Momentan verfolgte Events
|
||||
hostname=Hostname
|
||||
declinationCheckbox=Windrichtung mit Missweisung korrigieren
|
||||
raceStartTrackingColumn=Tracking Started
|
||||
pauseAutomaticRefresh=Keine automatische Aktualisierung
|
||||
autoRefresh=Automatisch aktualisieren
|
||||
delayInSeconds=Verzögerung (s)
|
||||
delayMustBeNonNegative=Die Verzögerung muß größer als 0 sein
|
||||
delayBetweenAutoAdvances=Intervall zwischen Auto-Updates in Sekunden:
|
||||
chooseUpdateIntervalOfAtLeastOneSecond=Update-Intervall mindestens eine Sekunde
|
||||
errorSettingWindForRace=Error setting wind for race
|
||||
errorFetchingWindInformationForRace=Error fetching wind information for race
|
||||
errorWhileTryingToSetWindSourceForRace=Error while trying to set "wind starts upwind" flag
|
||||
inEvent=in event
|
||||
to=to
|
||||
showEstimatedWind=Zeige den geschätzten Wind
|
||||
timing=Timing
|
||||
raceDetailsToShow=Renndetails
|
||||
overallDetailsToShow=Regatta-Details
|
||||
legDetailsToShow=Schenkeldetails
|
||||
columnMoveUp=Hoch
|
||||
columnMoveDown=Runter
|
||||
port=Port
|
||||
raceStartTimeColumn=Rennstart
|
||||
showOnlySelectedCompetitors=Nur ausgewählte Teilnehmer anzeigen
|
||||
showSelectedCompetitorsInfo=Infobox für ausgewählte Teilnehmer anzeigen
|
||||
tailLength=Schweiflänge (s)
|
||||
selectedRaces=Welche Rennen möchten Sie angezeigt bekommen?
|
||||
lengthInSeconds=Länge (s)
|
||||
stressTest=Stresstest
|
||||
numberOfManeuvers=Manöver
|
||||
numberOfManeuversTooltip=Die Anzahl der gesegelten Manöver in diesem Schenkel.
|
||||
tacks=Wenden
|
||||
jibes=Halsen
|
||||
penaltyCircles=Strafkreise
|
||||
medalRaceIsNull=Medaillenrennen nicht erlaubt
|
||||
maneuverTypes=Manöver
|
||||
configuration=Konfiguration
|
||||
chooseChart=Diagramm wählen
|
||||
raceNameEmpty=Rennname leer
|
||||
distanceTraveled=Zurückgelegte Strecke
|
||||
distanceTraveledTooltip=Die zurückgelegt Strecke vom Start des Schenkel, bis zum Ende\noder bis zum aktuellen Zeitpunkt, falls der Schenkel noch nicht beendet ist.
|
||||
raceDistanceTraveledTooltip=Die zurückgelegt Strecke vom Start des Rennens, bis zum Ende\noder bis zum aktuellen Zeitpunkt, falls das Rennen noch nicht beendet ist.
|
||||
velocityMadeGoodLong=Velocity Made Good
|
||||
speedOverGroundLong=Speed Over Ground
|
||||
gapToLeaderLong=Abstand zum führenden Boot
|
||||
pointsToLoad=Zu ladende Punkte
|
||||
speed=Geschwindigkeit
|
||||
distance=Strecke
|
||||
in=in
|
||||
secondsUnit=s
|
||||
metersUnit=m
|
||||
failedToLoadRaceData=Renndaten konnten nicht geladen werden.
|
||||
close=Schließen
|
||||
compareCompetitors=Teilnehmer vergleichen
|
||||
description=Beschreibung
|
||||
sailNumber=Segelnummer
|
||||
country=Land
|
||||
no3LetterCodes=IOC 3-Buchstaben-Codes können nicht gefunden werden.
|
||||
add=Hinzufügen
|
||||
delete=Löschen
|
||||
showCharts=Grafische Ansicht
|
||||
raceWithThisNameAlreadyExists=Ein Rennen mit diesem Namen existiert schon.
|
||||
raceWithThisNameAlreadyExistsInRegatta=Ein Rennen mit diesem Namen existiert schon in der Regatta.
|
||||
headUp=anluven
|
||||
bearAway=abfallen
|
||||
tack=Wende
|
||||
tackTooltip=Die Anzahl der gesegelten Wenden in diesem Rennen.
|
||||
jibe=Halse
|
||||
jibeTooltip=Die Anzahl der gesegelten Halsen in diesem Rennen.
|
||||
penaltyCircle=Strafkreis
|
||||
penaltyCircleTooltip=Die Anzahl der zu fahrenden Strafkreise in diesem Rennen.
|
||||
markPassing=Tonnenpassierung
|
||||
mark=Tonne
|
||||
otherManeuver=Manövertyp unbekannt
|
||||
douglasPeuckerPoints=Douglas-Peucker-Punkte
|
||||
filterRacesByName=Rennen nach Name filtern
|
||||
actionEdit=Ändern
|
||||
actionEditScores=Punkte ändern
|
||||
actionOpenBrowser=Im Browser öffnen
|
||||
actionRemove=Entfernen
|
||||
actionEditRaces=Rennen ändern
|
||||
actionRaceEdit=Rennen ändern oder umbenennen
|
||||
actionRaceUnlink=Rennverknüpfung entfernen
|
||||
actionRaceRemove=Rennen entfernen
|
||||
filterLeaderboardsByName=Ranglisten nach Name filtern
|
||||
actions=Aktionen
|
||||
islinked=Verknüpft
|
||||
yes=Ja
|
||||
no=Nein
|
||||
hoverOverAPoint=Für Details Maus über dem Graph positionieren
|
||||
noSelection=Keine Selektion
|
||||
raceIsKnownToStartUpwind=Rennen beginnt mit Kreuz
|
||||
events=Rennen
|
||||
settingsForComponent=Einstellungen für {0}
|
||||
noEventsFound=Es wurden keine Rennen gefunden
|
||||
noEventSelected=Kein Rennen ausgewählt
|
||||
noLeaderboardsFound=Es wurden keine Ranglisten gefunden
|
||||
searchEvents=Suche nach Rennen
|
||||
location=Ort
|
||||
from=Von
|
||||
until=Bis
|
||||
onlyLiveEvents=Nur Live-Rennen
|
||||
locationNotAvailable=Ort nicht verfügbar
|
||||
startDateNotAvailable=Startdatum nicht verfügbar
|
||||
startDate=Startdatum
|
||||
unknownManeuver=Unbekanntes Manöver
|
||||
tailLengthMustBePositive=Die Schweiflänge muss größer als Null sein.
|
||||
failedToLoadRaceInformation=Daten zur Wettfahrt konnten nicht geladen werden: {0}
|
||||
competitorPassedMarkAtDate={0} passierte {1} um {2}
|
||||
valueForCompetitorAt={0} um {1}: {2}
|
||||
reallyRemoveRace=Möchten Sie das Rennen ''{0}'' wirklich entfernen?
|
||||
showDetails=Details zeigen
|
||||
hideLeaderboard=Rangliste ausblenden
|
||||
hideLeaderboards=Ranglisten ausblenden
|
||||
showLeaderboard=Rangliste zeigen
|
||||
hideRaces=Rennen ausblenden
|
||||
showMap=Karte zeigen
|
||||
hideMap=Karte ausblenden
|
||||
noLeaderboardSelected=Keine Rangliste ausgewählt
|
||||
leaderboardGroups=Ranglisten-Gruppen
|
||||
filterLeaderboardGroupsByName=Ranglisten-Gruppen nach Name filtern
|
||||
createNewLeaderboardGroup=Neue Ranglisten-Gruppe erstellen
|
||||
leaderboardGroupConfiguration=Ranglistengruppen-Konfiguration
|
||||
legs=Schenkel
|
||||
currentLeg=Aktueller Schenkel
|
||||
currentLegTooltip=Schenkel auf dem sich der Teilnehmer aktuell befindet.
|
||||
leaderboardGroup=Ranglisten-Gruppe
|
||||
pleaseEnterNonEmptyDescription=Bitte eine nicht-leere Beschreibung eingeben
|
||||
groupWithThisNameAlreadyExists=Ranglisten-Gruppe mit diesem Namen existiert bereits
|
||||
detailsOfLeaderboardGroup=Details der Ranglisten-Gruppe
|
||||
edit=Bearbeiten
|
||||
save=Speichern
|
||||
abort=Abbrechen
|
||||
noLeaderboardGroupWithNameFound=Keine Ranglisten-Gruppe mit dem Namen {0} gefunden
|
||||
overview=Übersicht
|
||||
welcomeToSailingAnalytics=Willkommen bei SAP Sailing Analytics
|
||||
welcomeToSailingAnalyticsBody=Understanding what happens out on the race course isn''t always easy. To help solve this challenge and bring the excitement of sailing to the fans, we have developed a leader board based on SAP analytics.\
|
||||
Through analyzing GPS data together with integrated wind measurements from sensors out on the race course, the leader board displays information such as in-race ranking, average speeds, distance travelled, ETA (estimated time of arrival at the next mark rounding), gaps to leader, gains and losses per leg.\
|
||||
\
|
||||
Check out the results for yourself to see who triumphed - and how they did it.
|
||||
home=Startseite
|
||||
clickAndDragToZoomIn=Anklicken und ziehen zum Hineinzoomen
|
||||
windSpeed=Wind speed (sm/h)
|
||||
allTimesInUTC=Alle Zeiten in UTC
|
||||
autoZoomTo=Auto-Zoom nach
|
||||
autoZoomToBoats=Booten
|
||||
autoZoomToBuoys=Tonnen
|
||||
autoZoomToWindSensors=Windsensoren
|
||||
autoZoomOff=Aus
|
||||
autoZoomToTails=Schweife
|
||||
autoZoomSelectedCompetitors=Nur zu ausgewählten Teilnehmern zoomen
|
||||
bearing=Kurs über Grund
|
||||
zoom=Zoom
|
||||
stepSizeMustBeGreaterThanNull=Die Schrittweite muss größer als 0 sein
|
||||
stepSizeInSeconds=Schrittweite in Sekunden
|
||||
refreshInterval=Aktualisierungs-Interval (s)
|
||||
refreshIntervalMustBeGreaterThanXSeconds=Aktualisierungs-Interval muss größer als {0} Sekunden sein
|
||||
competitorCharts=Competitor charts
|
||||
selectAtLeastOneCompetitor=Um die Teilnehmer-Diagramme anzeigen zu lassen, wähle mindestens einen Teilnehmer aus
|
||||
directionChange=Richtungsänderung
|
||||
speedChange=Geschwindigkeitsänderung
|
||||
degreesShort=deg
|
||||
untracked=Nicht verfolgt
|
||||
delayForLiveMode=Verzögerung im Live-Modus:
|
||||
notAvailable=Nicht verfügbar
|
||||
details=Details
|
||||
noGroupSelected=Keine Gruppe ausgewählt
|
||||
combinedWindSourceTypeName=Kombiniert
|
||||
courseBasedWindSourceTypeName=Kurslayout
|
||||
trackBasedEstimationWindSourceTypeName=Schätzung
|
||||
expeditionWindSourceTypeName=Messung
|
||||
webWindSourceTypeName=Manuell
|
||||
clickChartToSetTime=Klicke auf das Diagramm um die Zeit zu setzen
|
||||
position=Position
|
||||
windSourcesUsed=Benutzte Windquellen
|
||||
errorTryingToUpdateWindSourcesToExclude=Fehler beim Aktualisieren der auszuschließenden Windquellen für Rennen {0}: {1}
|
||||
feedback=Feedback
|
||||
startStopPlaying=Starten/Stoppen des abspielens
|
||||
backToLive=Zum Live-Zeitpunkte springen
|
||||
slowPlaySpeedDown=Abspielgeschwindigkeit verlangsamen
|
||||
speedPlaySpeedUp=Abspielgeschwindigkeit erhöhen
|
||||
showHideComponent={0} anzeigen/verstecken
|
||||
degreesBoatToTheWind=Winkel zum Wind
|
||||
racesInLeaderboard=Rennen im Leaderboard
|
||||
leaderboardsInGroup=Leaderboards in der Gruppe
|
||||
replication=Replikation
|
||||
errorFetchingReplicaData=Fehler beim Beschaffen der Replikationsdaten: {0}
|
||||
averageCrossTrackErrorInMeters=\u2205 XTE
|
||||
averageCrossTrackErrorInMetersTooltip=Die durchschnittliche Querabweichung zur Kursmittellinie in diesem Schenkel.
|
||||
raceAverageCrossTrackErrorInMetersTooltip=Die durchschnittliche Querabweichung zur Kursmittellinie in diesem Rennen.
|
||||
enterMaster=Hostname der Master-Instanz
|
||||
errorStartingReplication=Fehler beim Starten der Replikation von Host {0} / Exchange {1}: {2}
|
||||
helpLines=Hilfslinien
|
||||
startLine=Startlinie
|
||||
finishLine=Ziellinie
|
||||
advantageLine=Führungslinie
|
||||
courseMiddleLine=Kursmittellinie
|
||||
messagingPortNumber=Messaging-Portnummer (0 für Default)
|
||||
servletPortNumber=Servlet Portnummer
|
||||
registeredAt=Registriert {0}
|
||||
replicatingFromMaster=Repliziert von master {0}, Messaging Port {1}, Servlet Port {2}
|
||||
showWindSpeedSeries=Daten für Windgeschwindigkeit zeigen
|
||||
showWindDirectionSeries=Daten für Windrichtung zeigen
|
||||
fleet=Flotte
|
||||
boatClass=Bootsklasse
|
||||
setDelayToLive=Verzögerung zu 'Live' setzen
|
||||
pleaseEnterNonEmptyVenue=Bitte geben sie einen Veranstaltungsort ein.
|
||||
eventWithThisNameAlreadyExists=Eine Veranstaltung mit diesem Namen existiert bereits.
|
||||
venue=Veranstaltungsort
|
||||
pleaseSelectABoatClass=Bitte wählen Sie eine Bootsklasse aus.
|
||||
regattaWithThisNameAlreadyExists=Eine Regatta mit diesem Namen existiert bereits.
|
||||
seriesWithThisNameAlreadyExists=Eine Serie mit diesem Namen existiert bereits.
|
||||
series=Serie
|
||||
fleetWithThisNameAlreadyExists=Eine Flotte mit diesem Namen existiert bereits.
|
||||
fleets=Flotten
|
||||
splitFleet=Aufteilung in Gruppen
|
||||
color=Farbe
|
||||
medalSeries=Medal Series
|
||||
noColor=Keine Farbe
|
||||
pleaseSelectARegatta=Bitte wählen Sie eine Regatta aus.
|
||||
addFleet=Gruppe hinzufügen
|
||||
doYouReallyWantToRemoveRegatta=Möchten Sie wirklich Regatta "{0}" löschen?
|
||||
errorLoadingScoreCorrectionProviders=Fehler beim Laden der offiziellen Ergebnis-Dienste: {0}
|
||||
selectResultListToImportFrom=Ergebnisliste auswählen
|
||||
of=von
|
||||
errorObtainingScoreCorrections=Fehler beim Laden der offiziellen Ergebnisse von Dienst {0} zu Veranstaltung {1} und Bootsklasse {2} veröffentlicht {3}: {4}
|
||||
assignRaceNumbersToRaceColumns=Renn-Nummern den Ergebnisspalten zuordnen
|
||||
importOfficialResults=Offizielle Ergebnisse importieren...
|
||||
selectAll=Alle auswählen
|
||||
apply=Übernehmen
|
||||
successfullyUpdatedScores=Ergebnisse erfolgreich aktualisiert
|
||||
errorUpdatingScoresForLeaderboard=Fehler beim Aktualisieren der Ergebnisse für {0}: {1}
|
||||
maneuverTypesToShowWhenCompetitorIsClicked=Anzuzeigende Manövertypen für angeklickte Teilnehmer
|
||||
simulateWithStartTimeNow=Simulieren mit "jetzt" als Startzeit
|
||||
boatClassDoesNotMatchSelectedRegatta=Die ausgewählten Rennen enthalten eine Bootsklasse, die nicht der Bootsklasse der ausgewählten Regatta ''{0}'' entspricht.\n\
|
||||
Willst du wirklich diese Regatta benutzen ''{1}''?
|
||||
regattaExistForSelectedBoatClass=Es gibt mindestens eine Regatta zu den ausgewählten Bootsklassen.\
|
||||
Willst du wirklich die Auswahl ''keine Regatta'' benutzen?
|
||||
reload=Neu laden
|
||||
addRegatta=Regatta hinzufügen...
|
||||
exchangeName=Exchange Name
|
||||
course=Kurs
|
||||
courseLayout=Kursdefinition
|
||||
buoy=Boje
|
||||
gate=Tor
|
||||
buoys=Bojen
|
||||
waypoint=Wegpunkt
|
||||
showAllCompetitors=Zeige alle Wettkampfteilnehmer
|
||||
boatTails=Bootsschweif
|
||||
maximalCount=Maximale Anzahl
|
||||
maxVisibleCompetitorsCountMustBePositive=Die maximale Anzahl der sichtbaren Wettkampfteilnehmer muß größer als Null sein.
|
||||
fregResultImportUrls=FREG URLs
|
||||
errorRefreshingFregUrlList=Fehler beim Aktualisieren derFREG URL-Liste: {0}
|
||||
successfullyUpdatedFregUrls=FREG URL-Liste erfolgreich aktualisiert
|
||||
errorRemovingFregUrls=Fehler beim Löschen von FREG URLs: {0}
|
||||
pleaseEnterNonEmptyUrl=Bitte eine nicht-leere URL eingeben
|
||||
addFragUrl=FRAG Ergebnis-URL hinzufügen
|
||||
errorAddingFragUrl=Fehler beim Hinzufügen einer FREG URL: {0}
|
||||
errorTryingToObtainLeaderboardContents=Fehler beim Berechnen der Ergebnisliste: {0}
|
||||
lastScoreUpdate=Letzte Ergebnisänderung
|
||||
warningBrowserUnsupported=Diese Webseite ist für Ihren Browser nicht optimiert. Wir empfehlen den Firefox oder Chrome in der neuesten Version.
|
||||
newMark=Neue Marke
|
||||
controlPoint=Einzelmarke/Gate
|
||||
errorUpdatingRaceCourse=Fehler beim Aktualisieren des neuen Kurses: {0}
|
||||
successfullyUpdatedCourse=Kurs erfolgreich aktualisiert
|
||||
selectOneMarkOrTwoMarksForGate=Eine einzelne Marke auswählen oder zwei Marken, um ein Gate zu erstellen
|
||||
errorTryingToObtainTheMarksOfTheRace=Fehler beim Ermitteln der Marken des Regattakurses: {0}
|
||||
errorTryingToObtainRaceCourse=Fehler beim Ermitteln des Rennkurses: {0}
|
||||
insertWaypointBeforeSelected=Wegpunkt nach dem selektierten einfügen
|
||||
insertWaypointAfterSelected=Wegpunkt vor dem selektierten einfügen
|
||||
scoringSchemeLowPointSystem=Low Point System
|
||||
scoringSchemeHighPointSystem=High Point System
|
||||
scoringSchemeHighPointEssOverall=High Point System ESS Gesamtwertung
|
||||
scoringSchemeHighPointLastBreaksTie=High Point System, letztes Rennen entscheidet bei Gleichstand
|
||||
scoringSystem=Bepunktungssystem
|
||||
createFlexibleLeaderboard=Flexible Rangliste anlegen
|
||||
createRegattaLeaderboard=Rangliste für Regatta anlegen
|
||||
editFlexibleLeaderboard=Flexible Rangliste ändern
|
||||
editRegattaLeaderboard=Rangliste für Regatta ändern
|
||||
noRegatta=Keine Regatta
|
||||
useOverallLeaderboard=Overall-Ergebnisse anzeigen
|
||||
overallStandings=Gesamtstand
|
||||
type=Typ
|
||||
actionAddRaces=Rennen hinzuf�gen
|
||||
racesWithNamePrefix=Rennen mit Namens-Pr�fix
|
||||
maximumSpeedOverGroundInKnots=Max FüG
|
||||
maximumSpeedOverGroundInKnotsTooltip=Die größte Fahrt über Grund, die in der Regatta gemessen wurde.
|
||||
totalTimeSailedDownwindInSeconds=Gesamtzeit Vorwind
|
||||
totalTimeSailedDownwindInSecondsTooltip=Gesamtzeit, die der Teilnehmer in der Regatta auf Vorwind gesegelt ist.
|
||||
totalTimeSailedUpwindInSeconds=Gesamtzeit Kreuz
|
||||
totalTimeSailedUpwindInSecondsTooltip=Gesamtzeit, die der Teilnehmer in der Regatta auf Kreuz gesegelt ist.
|
||||
totalTimeSailedReachingInSeconds=Gesamtzeit Holeschlag
|
||||
totalTimeSailedReachingInSecondsTooltip=Gesamtzeit, die der Teilnehmer in der Regatta auf Hohlschlägen gesegelt ist.
|
||||
totalTimeSailedInSeconds=Gesamtzeit
|
||||
totalTimeSailedInSecondsTooltip=Gesamtzeit, die der Teilnehmer für die Regatta gebraucht hat.
|
||||
hhmmssUnit=hh:mm:ss
|
||||
actionAddWindData=Winddaten hinzufügen
|
||||
valueMustBeBetweenMinMax=Der Wert von ''{0}'' muß zwischen {1} und {2} sein.
|
||||
optional=optional
|
||||
pleaseEnterAValue=Bitte geben Sie einen Wert ein.
|
||||
latitude=Breite
|
||||
longitude=Länge
|
||||
actionAddEvent=Veranstaltung hinzufügen
|
||||
publicationUrl=URL für die Veröffentlichung
|
||||
suppress=Entfernen
|
||||
isPublic=Öffentlich zugänglich
|
||||
suppress=Entfernen
|
||||
unsuppress=Wieder hinzufügen
|
||||
suppressedCompetitors=Unterdrückte Wettkampfteilnehmer
|
||||
mediaPanel=Audio & Video
|
||||
url=URL
|
||||
mimeType=MIME Type
|
||||
title=Titel
|
||||
duration=Dauer (h:mm:ss.ms)
|
||||
addMediaTrack=Audio/Video hinzufügen
|
||||
addYoutubeTrack=Youtube hinzufügen
|
||||
youtubeId=Youtube Id
|
||||
reallyRemoveMediaTrack=Möchten Sie ''{0}'' wirklich entfernen?
|
||||
pleaseSelectASeries=Bitte wählen Sie eine Serie aus
|
||||
pleaseSelectARace=Bitte wählen Sie ein Rennen aus
|
||||
displayGroupsInReverseOrder=Zeige die Gruppen in umgekehrter Reihenfolge
|
||||
actionConfigureUrl=URL konfigurieren
|
||||
configureLeaderboardUrlDescription=Ergebnisansicht konfigurieren. Die fertige URL kann dem Link entnommen werden.
|
||||
embedded=Eingebettet
|
||||
additionalUrlSettings=Weitere URL-relevante Einstellungen
|
||||
restrictToSingleSelectedRace=Nur einzelnes ausgewähltes Rennen zeigen
|
||||
expandSelectedRace=Details des ausgewähltes Rennens zeigen
|
||||
showRaceDetails=Details anbieten
|
||||
numberOfRaces=Anzahl Rennen
|
||||
numberOfRacesMustBeNonNegativeNumber=Bitte Anzahl der anzuzeigenden letzten Rennen eingeben
|
||||
chooseTheWayYouSelectRaces=Wie wollen die anzuzeigenden Rennen ausgewählt werden?
|
||||
selectFromAllRaces=Aus allen Rennen auswählen
|
||||
selectANumberOfRaces=Eine Anzahl anzuzeigender Rennen auswählen
|
||||
numberOfLastNRaces=Anzahl der zu zeigenden aktuellsten Rennen
|
||||
expandLastRace=Immer letztes gezeigtes Rennen expandieren
|
||||
factor=Faktor
|
||||
errorUpdatingIsMedalRace=Fehler beim Ändern der Medaillenrennen-Einstellung: {0}
|
||||
maneuverLoss=Manöververlust
|
||||
averageManeuverLossInMeters=\u2205 Manöververlust
|
||||
averageManeuverLossInMetersTooltip=Der durchschnittliche Distanzverlust durch Manöver.
|
||||
averageTackLossInMeters=\u2205 Wendeverlust
|
||||
averageTackLossInMetersTooltip=Der durchschnittliche Distanzverlust durch Wenden.
|
||||
averageJibeLossInMeters=\u2205 Halseverlust
|
||||
averageJibeLossInMetersTooltip=Der durchschnittliche Distanzverlust durch Halsen.
|
||||
shape=Form
|
||||
pattern=Muster
|
||||
legend=Legende
|
||||
live=live
|
||||
swissTimingArchiveConnector=SwissTiming Historische Veranstaltungen
|
||||
errorFetchingRankingChartData=Fehler beim Laden der Daten für das Ranglisten-Chart: {0}
|
||||
loadingCompetitorData=Lade Teilnehmer-Daten
|
||||
rankNAfterRace=Rang {0} nach Rennen {1}
|
||||
afterRace=nach Rennen
|
||||
showRankChart=Rang-Diagramm anzeigen
|
||||
overallLeaderboardSelection=Gesamtergebnisse
|
||||
showOverallLeaderboardOnSamePage=Gesamtergebnisse auf derselben Seite anzeigen
|
||||
errorTryingToObtainOverallLeaderboards=Fehler beim Laden der Gesamtergebnisse: {0}
|
||||
finished=beendet
|
||||
passedTo=an {0} gerundet
|
||||
gapChangeSinceLegStartInSeconds=Gap Änderung
|
||||
gapChangeSinceLegStartInSecondsTooltip=Die Änderung des Abstands zum Führenden seit dem letzten Schenkelstart.\nEine negative Zahl bedeutet, \
|
||||
dass sich der Abstand verringert hat und eine positive Zahl bedeutet, dass er sich vergrößert hat.
|
||||
sideToWhichMarkAtLegStartWasRounded=Tonne gerundet an
|
||||
sideToWhichMarkAtLegStartWasRoundedTooltip=Seite zu der die Tonne am Schenkelsart gerundet wurde.
|
||||
raceIsLive=Rennen {0} ist live
|
||||
racesAreLive=Rennen {0} sind live
|
||||
scoringSchemeHighPointFirstGetsTen=High Point System, Gewinner erhält 10 Punkte
|
||||
scoringSchemeHighPointFirstGetsTen=High Point System, Gewinner erhält 10 Punkte
|
||||
knotsUnit=kn
|
||||
+4
-6
@@ -1,16 +1,14 @@
|
||||
package com.sap.sailing.gwt.ui.leaderboard;
|
||||
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.sap.sailing.domain.common.SortingOrder;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.gwt.ui.client.NumberFormatterFactory;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardRowDTO;
|
||||
|
||||
public class AbstractTimeInHoursMinutesSecondsColumn extends FormattedDoubleLegDetailColumn {
|
||||
public abstract class AbstractTimeInHoursMinutesSecondsColumn extends FormattedDoubleLegDetailColumn {
|
||||
|
||||
public AbstractTimeInHoursMinutesSecondsColumn(String title, String unit,
|
||||
com.sap.sailing.gwt.ui.leaderboard.LegDetailColumn.LegDetailField<Double> field, int decimals, SortingOrder preferredSortingOrder,
|
||||
String headerStyle, String columnStyle) {
|
||||
super(title, unit, field, decimals, preferredSortingOrder, headerStyle, columnStyle);
|
||||
protected AbstractTimeInHoursMinutesSecondsColumn(DetailType detailType, LegDetailField<Double> field, String headerStyle, String columnStyle) {
|
||||
super(detailType, field, headerStyle, columnStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-10
@@ -5,7 +5,6 @@ import com.google.gwt.cell.client.TextCell;
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.SortingOrder;
|
||||
import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
|
||||
import com.sap.sailing.gwt.ui.client.NumberFormatterFactory;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
|
||||
@@ -25,15 +24,8 @@ public class FormattedDoubleLegDetailColumn extends LegDetailColumn<Double, Stri
|
||||
* @param columnStyle
|
||||
*/
|
||||
public FormattedDoubleLegDetailColumn(DetailType detailType, LegDetailField<Double> field, String headerStyle, String columnStyle) {
|
||||
this(DetailTypeFormatter.format(detailType), DetailTypeFormatter.getUnit(detailType).isEmpty() ? "" : "[" + DetailTypeFormatter.getUnit(detailType) + "]",
|
||||
field, detailType.getPrecision(), detailType.getDefaultSortingOrder(), headerStyle, columnStyle);
|
||||
}
|
||||
|
||||
public FormattedDoubleLegDetailColumn(String title, String unit,
|
||||
com.sap.sailing.gwt.ui.leaderboard.LegDetailColumn.LegDetailField<Double> field, int decimals, SortingOrder preferredSortingOrder,
|
||||
String headerStyle, String columnStyle) {
|
||||
super(title, unit, field, new TextCell(), preferredSortingOrder, headerStyle, columnStyle);
|
||||
formatter = NumberFormatterFactory.getDecimalFormat(decimals);
|
||||
super(detailType, field, new TextCell(), headerStyle, columnStyle);
|
||||
formatter = NumberFormatterFactory.getDecimalFormat(detailType.getPrecision());
|
||||
this.minMaxRenderer = new MinMaxRenderer(this, getComparator());
|
||||
}
|
||||
|
||||
|
||||
+1
-5
@@ -20,11 +20,7 @@ public class KingOfTheDownwindColumn extends AbstractTimeInHoursMinutesSecondsCo
|
||||
}
|
||||
|
||||
public KingOfTheDownwindColumn(StringMessages stringMessages, String headerStyle, String columnStyle) {
|
||||
super(stringMessages.totalTimeSailedDownwindInSeconds(), "[" + stringMessages.hhmmssUnit() + "]",
|
||||
new KingOfTheDownwindField(),
|
||||
DetailType.TOTAL_TIME_SAILED_DOWNWIND_IN_SECONDS.getPrecision(),
|
||||
DetailType.TOTAL_TIME_SAILED_DOWNWIND_IN_SECONDS.getDefaultSortingOrder(),
|
||||
headerStyle, columnStyle);
|
||||
super(DetailType.TOTAL_TIME_SAILED_DOWNWIND_IN_SECONDS, new KingOfTheDownwindField(), headerStyle, columnStyle);
|
||||
}
|
||||
|
||||
}
|
||||
+1
-5
@@ -20,10 +20,6 @@ public class KingOfTheReachingColumn extends AbstractTimeInHoursMinutesSecondsCo
|
||||
}
|
||||
|
||||
public KingOfTheReachingColumn(StringMessages stringMessages, String headerStyle, String columnStyle) {
|
||||
super(stringMessages.totalTimeSailedReachingInSeconds(), "[" + stringMessages.hhmmssUnit() + "]",
|
||||
new KingOfTheReachingField(),
|
||||
DetailType.TOTAL_TIME_SAILED_REACHING_IN_SECONDS.getPrecision(),
|
||||
DetailType.TOTAL_TIME_SAILED_REACHING_IN_SECONDS.getDefaultSortingOrder(),
|
||||
headerStyle, columnStyle);
|
||||
super(DetailType.TOTAL_TIME_SAILED_REACHING_IN_SECONDS, new KingOfTheReachingField(), headerStyle, columnStyle);
|
||||
}
|
||||
}
|
||||
+1
-5
@@ -20,11 +20,7 @@ public class KingOfTheUpwindColumn extends AbstractTimeInHoursMinutesSecondsColu
|
||||
}
|
||||
|
||||
public KingOfTheUpwindColumn(StringMessages stringMessages, String headerStyle, String columnStyle) {
|
||||
super(stringMessages.totalTimeSailedUpwindInSeconds(), "[" + stringMessages.hhmmssUnit() + "]",
|
||||
new KingOfTheUpwindField(),
|
||||
DetailType.TOTAL_TIME_SAILED_UPWIND_IN_SECONDS.getPrecision(),
|
||||
DetailType.TOTAL_TIME_SAILED_UPWIND_IN_SECONDS.getDefaultSortingOrder(),
|
||||
headerStyle, columnStyle);
|
||||
super(DetailType.TOTAL_TIME_SAILED_UPWIND_IN_SECONDS, new KingOfTheUpwindField(), headerStyle, columnStyle);
|
||||
}
|
||||
|
||||
}
|
||||
+3
-4
@@ -138,9 +138,8 @@ public class LegColumn extends ExpandableSortableColumn<String> {
|
||||
}
|
||||
|
||||
private class ManeuverCountLegDetailsColumn extends FormattedDoubleLegDetailColumn {
|
||||
public ManeuverCountLegDetailsColumn(String title, String headerStyle, String columnStyle) {
|
||||
super(title, /*unit*/null, /* field */ null, /* decimals */ 0, DetailType.NUMBER_OF_MANEUVERS.getDefaultSortingOrder(),
|
||||
headerStyle, columnStyle);
|
||||
public ManeuverCountLegDetailsColumn(String headerStyle, String columnStyle) {
|
||||
super(DetailType.NUMBER_OF_MANEUVERS, null, headerStyle, columnStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -272,7 +271,7 @@ public class LegColumn extends ExpandableSortableColumn<String> {
|
||||
|
||||
result.put(DetailType.RANK_GAIN, new RankGainColumn(stringMessages.rankGain(), new RankGain(), detailHeaderStyle, detailColumnStyle));
|
||||
|
||||
result.put(DetailType.NUMBER_OF_MANEUVERS, new ManeuverCountLegDetailsColumn(stringMessages.numberOfManeuvers(), detailHeaderStyle, detailColumnStyle));
|
||||
result.put(DetailType.NUMBER_OF_MANEUVERS, new ManeuverCountLegDetailsColumn(detailHeaderStyle, detailColumnStyle));
|
||||
|
||||
result.put(DetailType.TIME_TRAVELED,
|
||||
new FormattedDoubleLegDetailColumn(DetailType.TIME_TRAVELED, new TimeTraveledInSeconds(), detailHeaderStyle, detailColumnStyle));
|
||||
|
||||
+18
-18
@@ -4,18 +4,23 @@ import com.google.gwt.cell.client.Cell;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.google.gwt.user.cellview.client.Header;
|
||||
import com.google.gwt.user.cellview.client.SafeHtmlHeader;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.InvertibleComparator;
|
||||
import com.sap.sailing.domain.common.SortingOrder;
|
||||
import com.sap.sailing.domain.common.impl.InvertibleComparatorAdapter;
|
||||
import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardRowDTO;
|
||||
|
||||
public abstract class LegDetailColumn<FieldType extends Comparable<?>, RenderingType> extends
|
||||
SortableColumn<LeaderboardRowDTO, RenderingType> {
|
||||
|
||||
private static final String HtmlConstantToInlineHeadersWithAndWithoutUnit = " ";
|
||||
|
||||
private final String title;
|
||||
private final LegDetailField<FieldType> field;
|
||||
private final String headerStyle;
|
||||
private final String columnStyle;
|
||||
private final String unit;
|
||||
private final String tooltip;
|
||||
|
||||
private SafeHtmlHeader header;
|
||||
|
||||
@@ -23,12 +28,12 @@ public abstract class LegDetailColumn<FieldType extends Comparable<?>, Rendering
|
||||
T get(LeaderboardRowDTO row);
|
||||
}
|
||||
|
||||
protected LegDetailColumn(String title, String unit, LegDetailField<FieldType> field, Cell<RenderingType> cell,
|
||||
SortingOrder preferredSortingOrder, String headerStyle, String columnStyle) {
|
||||
super(cell, preferredSortingOrder);
|
||||
protected LegDetailColumn(DetailType detailType, LegDetailField<FieldType> field, Cell<RenderingType> cell, String headerStyle, String columnStyle) {
|
||||
super(cell, detailType.getDefaultSortingOrder());
|
||||
setHorizontalAlignment(ALIGN_CENTER);
|
||||
this.title = title;
|
||||
this.unit = unit;
|
||||
this.title = DetailTypeFormatter.format(detailType);
|
||||
this.unit = DetailTypeFormatter.getUnit(detailType).isEmpty() ? "" : "[" + DetailTypeFormatter.getUnit(detailType) + "]";
|
||||
tooltip = DetailTypeFormatter.getTooltip(detailType);
|
||||
this.field = field;
|
||||
this.headerStyle = headerStyle;
|
||||
this.columnStyle = columnStyle;
|
||||
@@ -36,21 +41,16 @@ public abstract class LegDetailColumn<FieldType extends Comparable<?>, Rendering
|
||||
}
|
||||
|
||||
private void InitializeHeader() {
|
||||
//Code to add a tooltip to the title. Do NOT delete. This is saved to use it, after some refactorings are done.
|
||||
// SafeHtmlBuilder builder = new SafeHtmlBuilder().appendHtmlConstant("<div title=\"Tooltip text.\">");
|
||||
// builder.appendEscaped(title).appendHtmlConstant("<br>");
|
||||
|
||||
SafeHtmlBuilder builder = new SafeHtmlBuilder().appendEscaped(title).appendHtmlConstant("<br>");
|
||||
if (unit == null) {
|
||||
builder.appendHtmlConstant(" ");
|
||||
SafeHtmlBuilder titleBuilder = new SafeHtmlBuilder().appendEscaped(title).appendHtmlConstant("<br>");
|
||||
if (unit == null || unit.isEmpty()) {
|
||||
titleBuilder.appendHtmlConstant(HtmlConstantToInlineHeadersWithAndWithoutUnit);
|
||||
} else {
|
||||
builder.appendEscaped(unit);
|
||||
titleBuilder.appendEscaped(unit);
|
||||
}
|
||||
|
||||
header = new SafeHtmlHeader(builder.toSafeHtml());
|
||||
}
|
||||
header = new SafeHtmlHeaderWithTooltip(titleBuilder.toSafeHtml(), tooltip);
|
||||
}
|
||||
|
||||
protected String getTitle() {
|
||||
protected String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ public class RankGainColumn extends LegDetailColumn<Integer, Integer> {
|
||||
private static final LeaderboardResources leaderboardResources = GWT.create(LeaderboardResources.class);
|
||||
|
||||
public RankGainColumn(String title, LegDetailField<Integer> field, String headerStyle, String columnStyle) {
|
||||
super(title, null, field, new RankGainCell(), DetailType.RANK_GAIN.getDefaultSortingOrder(), headerStyle, columnStyle);
|
||||
super(DetailType.RANK_GAIN, field, new RankGainCell(), headerStyle, columnStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.sap.sailing.gwt.ui.leaderboard;
|
||||
|
||||
import com.google.gwt.safehtml.shared.SafeHtml;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.google.gwt.user.cellview.client.SafeHtmlHeader;
|
||||
|
||||
public class SafeHtmlHeaderWithTooltip extends SafeHtmlHeader {
|
||||
|
||||
private static SafeHtml buildHeader(SafeHtml title, String tooltip) {
|
||||
//Escaping the tooltip to be able, to add it in the div safely with standard string concatenation.
|
||||
//If you try to append it with the SafeHtmlBuilder methods, an exception will be thrown (because of the unclosed div).
|
||||
String safeTooltip = new SafeHtmlBuilder().appendEscaped(tooltip).toSafeHtml().asString();
|
||||
return new SafeHtmlBuilder().appendHtmlConstant("<span title=\"" + safeTooltip + "\">")
|
||||
.append(title).appendHtmlConstant("</ span>").toSafeHtml();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new html header with the given title and tooltip.<br>
|
||||
* Use '\n', if you want a line break in the tooltip.
|
||||
* @param title
|
||||
* @param tooltip
|
||||
*/
|
||||
public SafeHtmlHeaderWithTooltip(SafeHtml title, String tooltip) {
|
||||
super(buildHeader(title, tooltip));
|
||||
}
|
||||
|
||||
}
|
||||
+1
-2
@@ -7,8 +7,7 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardRowDTO;
|
||||
|
||||
public class SideToWhichMarkAtLegStartWasRoundedColumn extends LegDetailColumn<Tack, String> {
|
||||
public SideToWhichMarkAtLegStartWasRoundedColumn(String title, LegDetailField<Tack> field, String headerStyle, String columnStyle) {
|
||||
super(title, null, field, new TextCell(), DetailType.SIDE_TO_WHICH_MARK_AT_LEG_START_WAS_ROUNDED.getDefaultSortingOrder(),
|
||||
headerStyle, columnStyle);
|
||||
super(DetailType.SIDE_TO_WHICH_MARK_AT_LEG_START_WAS_ROUNDED, field, new TextCell(), headerStyle, columnStyle);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-3
@@ -52,9 +52,9 @@ public class ManeuverDTO implements IsSerializable {
|
||||
+ ((int) this.directionChangeInDegrees) + " "+stringMessages.degreesShort()+" ("
|
||||
+ ((int) before.bearingInDegrees) + " deg -> " + ((int) after.bearingInDegrees) + " "+stringMessages.degreesShort()+")";
|
||||
String speedChange = stringMessages.speedChange() + ": "
|
||||
+ NumberFormat.getDecimalFormat().format(after.speedInKnots - before.speedInKnots) + " "+stringMessages.averageSpeedInKnotsUnit()+" ("
|
||||
+ NumberFormat.getDecimalFormat().format(before.speedInKnots) + " "+stringMessages.averageSpeedInKnotsUnit()+" -> "
|
||||
+ NumberFormat.getDecimalFormat().format(after.speedInKnots) + " "+stringMessages.averageSpeedInKnotsUnit()+")";
|
||||
+ NumberFormat.getDecimalFormat().format(after.speedInKnots - before.speedInKnots) + " "+stringMessages.knotsUnit()+" ("
|
||||
+ NumberFormat.getDecimalFormat().format(before.speedInKnots) + " "+stringMessages.knotsUnit()+" -> "
|
||||
+ NumberFormat.getDecimalFormat().format(after.speedInKnots) + " "+stringMessages.knotsUnit()+")";
|
||||
String maneuverLoss = this.maneuverLossInMeters == null ? "" : ("; "+stringMessages.maneuverLoss()+": "+
|
||||
NumberFormat.getDecimalFormat().format(this.maneuverLossInMeters)+"m");
|
||||
String maneuverTitle = timeAndManeuver + "; " + directionChange + "; " + speedChange + maneuverLoss;
|
||||
|
||||
+3
-3
@@ -134,7 +134,7 @@ public class WindChart extends RaceChart implements Component<WindChartSettings>
|
||||
return "<b>" + seriesName + (toolTipData.getPointName() != null ? " "+toolTipData.getPointName() : "")
|
||||
+ "</b><br/>" +
|
||||
dateFormat.format(new Date(toolTipData.getXAsLong())) + ": " +
|
||||
numberFormat.format(toolTipData.getYAsDouble()) + stringMessages.averageSpeedInKnotsUnit();
|
||||
numberFormat.format(toolTipData.getYAsDouble()) + stringMessages.knotsUnit();
|
||||
}
|
||||
}
|
||||
}));
|
||||
@@ -172,7 +172,7 @@ public class WindChart extends RaceChart implements Component<WindChartSettings>
|
||||
}
|
||||
}));
|
||||
|
||||
chart.getYAxis(1).setOpposite(true).setAxisTitleText(stringMessages.speed()+" ("+stringMessages.averageSpeedInKnotsUnit()+")")
|
||||
chart.getYAxis(1).setOpposite(true).setAxisTitleText(stringMessages.speed()+" ("+stringMessages.knotsUnit()+")")
|
||||
.setStartOnTick(false).setShowFirstLabel(false).setGridLineWidth(0).setMinorGridLineWidth(0);
|
||||
|
||||
if (compactChart) {
|
||||
@@ -341,7 +341,7 @@ public class WindChart extends RaceChart implements Component<WindChartSettings>
|
||||
timeOfLatestRequestInMillis == null || wind.requestTimepoint > timeOfLatestRequestInMillis) {
|
||||
Point newDirectionPoint = new Point(wind.requestTimepoint, wind.dampenedTrueWindFromDeg);
|
||||
if (wind.dampenedTrueWindSpeedInKnots != null) {
|
||||
String name = numberFormat.format(wind.dampenedTrueWindSpeedInKnots)+ stringMessages.averageSpeedInKnotsUnit();
|
||||
String name = numberFormat.format(wind.dampenedTrueWindSpeedInKnots)+ stringMessages.knotsUnit();
|
||||
// name += " Confidence:" + wind.confidence;
|
||||
newDirectionPoint.setName(name);
|
||||
}
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ public class CombinedWindPanel extends FlowPanel {
|
||||
String title = stringMessages.wind() + ": " + Math.round(windFromDeg) + " "
|
||||
+ stringMessages.degreesShort() + " (" + WindSourceTypeFormatter.format(windSource, stringMessages) + ")";
|
||||
canvas.setTitle(title);
|
||||
textLabel.setText(numberFormat.format(speedInKnots) + " " + stringMessages.averageSpeedInKnotsUnit());
|
||||
textLabel.setText(numberFormat.format(speedInKnots) + " " + stringMessages.knotsUnit());
|
||||
if (!isVisible()) {
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1096,7 +1096,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
||||
vPanel.add(createInfoWindowLabelAndValue(stringMessages.rank(), String.valueOf(rank)));
|
||||
}
|
||||
vPanel.add(createInfoWindowLabelAndValue(stringMessages.speed(),
|
||||
NumberFormatterFactory.getDecimalFormat(1).format(lastFix.speedWithBearing.speedInKnots) + " "+stringMessages.averageSpeedInKnotsUnit()));
|
||||
NumberFormatterFactory.getDecimalFormat(1).format(lastFix.speedWithBearing.speedInKnots) + " "+stringMessages.knotsUnit()));
|
||||
vPanel.add(createInfoWindowLabelAndValue(stringMessages.bearing(), (int) lastFix.speedWithBearing.bearingInDegrees + " "+stringMessages.degreesShort()));
|
||||
if (lastFix.wind != null) {
|
||||
vPanel.add(createInfoWindowLabelAndValue(stringMessages.degreesBoatToTheWind(), (int) Math.abs(
|
||||
|
||||
+1
-1
@@ -73,7 +73,7 @@ public class WindSensorOverlay extends CanvasOverlay {
|
||||
getPane().setWidgetPosition(getCanvas(), sensorPositionInPx.getX() - canvasWidth / 2, sensorPositionInPx.getY() - canvasHeight / 2);
|
||||
String title = stringMessages.wind() + " ("+ WindSourceTypeFormatter.format(windSource, stringMessages) + "): ";
|
||||
title += Math.round(windDTO.dampenedTrueWindFromDeg) + " " + stringMessages.degreesShort()+ ", ";
|
||||
title += numberFormat.format(windDTO.dampenedTrueWindSpeedInKnots) + " " + stringMessages.averageSpeedInKnotsUnit();
|
||||
title += numberFormat.format(windDTO.dampenedTrueWindSpeedInKnots) + " " + stringMessages.knotsUnit();
|
||||
|
||||
getCanvas().setTitle(title);
|
||||
hasValidWind = true;
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@ import org.openqa.selenium.WebDriver;
|
||||
* @author
|
||||
* D049941
|
||||
*/
|
||||
public class AbstractEntryPoint extends PageObject {
|
||||
public class HostPage extends PageObject {
|
||||
/**
|
||||
* <p>Creates a new page object with the given web driver. In GWT an entry point is connected to a HTML page in
|
||||
* which the code for the application is executed, whereby the page is represented by the web driver.</p>
|
||||
@@ -17,7 +17,7 @@ public class AbstractEntryPoint extends PageObject {
|
||||
* @param driver
|
||||
* The web driver to use.
|
||||
*/
|
||||
public AbstractEntryPoint(WebDriver driver) {
|
||||
public HostPage(WebDriver driver) {
|
||||
super(driver);
|
||||
}
|
||||
|
||||
+6
-6
@@ -59,22 +59,22 @@ public class PageObject {
|
||||
|
||||
/**
|
||||
* <p>Creates a new page object with the given web driver. This constructor is equivalent to the two argument
|
||||
* constructor whereby the web driver is also used as the search context for the page object.</p>
|
||||
* constructor whereby the web driver is also used as the context for the page object.</p>
|
||||
*
|
||||
* @param driver
|
||||
* The web driver which also acts as the search context to use.
|
||||
* The web driver which also acts as the context to use.
|
||||
*/
|
||||
public PageObject(WebDriver driver) {
|
||||
this(driver, driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Creates a new page object with the given web driver and search context.</p>
|
||||
* <p>Creates a new page object with the given web driver and context.</p>
|
||||
*
|
||||
* @param driver
|
||||
* The web driver to use.
|
||||
* @param context
|
||||
* The search context to use.
|
||||
* The context to use.
|
||||
*/
|
||||
public PageObject(WebDriver driver, SearchContext context) {
|
||||
this.driver = driver;
|
||||
@@ -86,14 +86,14 @@ public class PageObject {
|
||||
|
||||
/**
|
||||
* <p>Verifies the page object. This method can be overwritten to check that the browser is on the correct page or
|
||||
* that the provided search context represents the right element. The default implementation does nothing.</p>
|
||||
* that the provided context represents the right element. The default implementation does nothing.</p>
|
||||
*/
|
||||
protected void verify() {
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Initialize the page object. The default implementation use a factory to lazily initialize the elements
|
||||
* (annotated fields) of the page object using the timeout duration returned by {@link #initElements}. To get a
|
||||
* (annotated fields) of the page object using the timeout duration returned by {@link #getTimeOut()}. To get a
|
||||
* field lazily initialized you have to annotate the field either with {@link FindBy} or with {@link FindBys}.
|
||||
* If the element never changes (that is, that the same instance in the DOM can always be used) it is also
|
||||
* possible to use a cache for the lookup by using the annotation {@code CacheLookup} in addition.</p>
|
||||
|
||||
-41
@@ -1,41 +0,0 @@
|
||||
(function() {
|
||||
function createNamespace(namespace) {
|
||||
parts = namespace.split('.');
|
||||
var base = window;
|
||||
|
||||
for(var i = 0; i < namespace.length; i++) {
|
||||
base[parts[i]] = base[parts[i]] || {};
|
||||
base = base[parts[i]];
|
||||
}
|
||||
|
||||
return base; //return resulting namespace object
|
||||
}
|
||||
|
||||
var namespace = createNamespace("org.openqa.selenium");
|
||||
|
||||
if(namespace.pendingCalls)
|
||||
return;
|
||||
|
||||
namespace.pendingCalls = 0;
|
||||
|
||||
XMLHttpRequest.prototype.oldSend = XMLHttpRequest.prototype.send;
|
||||
|
||||
var newSend = function(data) {
|
||||
var xhr = this;
|
||||
|
||||
namespace.pendingCalls++;
|
||||
|
||||
var callFinished = function() {
|
||||
namespace.pendingCalls--;
|
||||
};
|
||||
|
||||
xhr.addEventListener("abort", callFinished, false);
|
||||
xhr.addEventListener("load", callFinished, false);
|
||||
xhr.addEventListener("error", callFinished, false);
|
||||
xhr.addEventListener("timeout", callFinished, false);
|
||||
|
||||
xhr.oldSend(data);
|
||||
}
|
||||
|
||||
XMLHttpRequest.prototype.send = newSend;
|
||||
}());
|
||||
+2
-2
@@ -14,7 +14,7 @@ import com.sap.sailing.selenium.core.BySeleniumId;
|
||||
import com.sap.sailing.selenium.core.ElementSearchConditions;
|
||||
import com.sap.sailing.selenium.core.FindBy;
|
||||
|
||||
import com.sap.sailing.selenium.test.AbstractEntryPoint;
|
||||
import com.sap.sailing.selenium.test.HostPage;
|
||||
|
||||
/**
|
||||
* <p>The page object representing the administration console. The console consists of multiple tabs with its content
|
||||
@@ -23,7 +23,7 @@ import com.sap.sailing.selenium.test.AbstractEntryPoint;
|
||||
* @author
|
||||
* D049941
|
||||
*/
|
||||
public class AdminConsolePage extends AbstractEntryPoint {
|
||||
public class AdminConsolePage extends HostPage {
|
||||
private static final String PAGE_TITLE = "SAP Sailing Analytics Administration Console"; //$NON-NLS-1$
|
||||
|
||||
private static final MessageFormat TAB_EXPRESSION = new MessageFormat(
|
||||
|
||||
Reference in new issue
Block a user