Merge branch 'master' into bug4166
No files matched your search
@@ -30,6 +30,8 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.DefaultQuickRanksDTOProvider;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceCompetitorSet;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapHelpLinesSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapHelpLinesSettings.HelpLineTypes;
|
||||
@@ -173,8 +175,8 @@ public class StartAnalysisCard extends Composite implements HasWidgets, StartAna
|
||||
raceMap = new RaceMap(null, null, new RaceMapLifecycle(StringMessages.INSTANCE), raceMapSettings,
|
||||
sailingServiceAsync,
|
||||
asyncActionsExecutor, null, timer, competitorSelectionModel,
|
||||
StringMessages.INSTANCE, startAnalysisDTO.regattaAndRaceIdentifier,
|
||||
raceMapResources, /* showHeaderPanel */ true);
|
||||
new RaceCompetitorSet(competitorSelectionModel), StringMessages.INSTANCE,
|
||||
startAnalysisDTO.regattaAndRaceIdentifier, raceMapResources, /* showHeaderPanel */ true, new DefaultQuickRanksDTOProvider());
|
||||
raceTimesInfoProvider.addRaceTimesInfoProviderListener(raceMap);
|
||||
raceMap.setSize("100%", "100%");
|
||||
card_map_container.getElement().getStyle().setHeight(getHeightForRaceMapInPixels(), Unit.PX);
|
||||
|
||||
@@ -60,7 +60,7 @@ public enum BoatClassMasterdata {
|
||||
J105 ("J/105", true, 10.52, 3.35, BoatHullType.MONOHULL, true, "J105", "J-105"),
|
||||
J111 ("J/111", true, 11.1, 3.29, BoatHullType.MONOHULL, true, "J111", "J-111"),
|
||||
KIELZUGVOGEL ("Kielzugvogel", true, 5.80, 1.88, BoatHullType.MONOHULL, false, "KZV"),
|
||||
KITE ("Kite", true, 3.35, 1.52, BoatHullType.MONOHULL, false),
|
||||
FORMULA_KITE ("Kite", true, 3.35, 1.52, BoatHullType.MONOHULL, false, "Formula Kite"),
|
||||
LASER_2 ("Laser 2", true, 4.39, 1.42, BoatHullType.MONOHULL, false, "Laser II", "Laser2", "Laser-2", "Laser-II"),
|
||||
LASER_4_7 ("Laser 4.7", true, 4.20, 1.39, BoatHullType.MONOHULL, false, "L4.7"),
|
||||
LASER_RADIAL ("Laser Radial", true, 4.19, 1.41, BoatHullType.MONOHULL, false, "LAR", "Laser RAD", "RAD", "Radial"),
|
||||
|
||||
@@ -175,6 +175,20 @@ public class LeaderboardEntryDTO implements Serializable {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public int getOneBasedCurrentLegNumber() {
|
||||
int result = 0;
|
||||
if (legDetails != null && !legDetails.isEmpty()) {
|
||||
for (LegEntryDTO legDetail : legDetails) {
|
||||
if (legDetail != null && legDetail.started) {
|
||||
result++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
|
||||
@@ -6,6 +6,7 @@ import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import org.json.simple.parser.ParseException;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.common.Placemark;
|
||||
@@ -13,14 +14,20 @@ import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||
import com.sap.sailing.domain.common.impl.PlacemarkImpl;
|
||||
import com.sap.sailing.geocoding.ReverseGeocoder;
|
||||
import com.sap.sailing.geocoding.impl.ReverseGeocoderImpl;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
public class ReverseGeocoderTest {
|
||||
private ReverseGeocoder geocoder = ReverseGeocoder.INSTANCE;
|
||||
private ReverseGeocoder geocoder;
|
||||
private static final Placemark KIEL = new PlacemarkImpl("Kiel", "DE", new DegreePosition(54.32132926107913, 10.1348876953125), 232758);
|
||||
private static final Position KIEL_POSITION = new DegreePosition(54.3231063453431, 10.12265682220459);
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
geocoder = new ReverseGeocoderImpl(); // ensure we don't see any caching effects across test case executions
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getPlacemarkSimpleTest() {
|
||||
//Simple Test in Kiel center to check the connection and the parsing from JSONObject to Placemark
|
||||
@@ -52,8 +59,8 @@ public class ReverseGeocoderTest {
|
||||
|
||||
@Test
|
||||
public void getPlacemarkBestTest() {
|
||||
Position abroad = new DegreePosition(54.43334, 10.299999);
|
||||
Placemark firstByDistance = new PlacemarkImpl("Wendtorf", "DE", new DegreePosition(54.4166667, 10.3), 1139);
|
||||
Position abroad = new DegreePosition(54.429758, 10.289335);
|
||||
Placemark firstByDistance = new PlacemarkImpl("Wendtorf", "DE", new DegreePosition(54.41212, 10.28952), 1139);
|
||||
try {
|
||||
Placemark p = geocoder.getPlacemarkLast(abroad, 20, new Placemark.ByPopulation());
|
||||
Assert.assertEquals(KIEL.getName(), p.getName());
|
||||
@@ -64,14 +71,14 @@ public class ReverseGeocoderTest {
|
||||
p = geocoder.getPlacemarkFirst(abroad, 20, new Placemark.ByDistance(abroad));
|
||||
Assert.assertEquals(firstByDistance.getName(), p.getName());
|
||||
Assert.assertEquals(firstByDistance.getCountryCode(), p.getCountryCode());
|
||||
Assert.assertEquals(firstByDistance.getPosition().getLatDeg(), p.getPosition().getLatDeg(), 0.0001);
|
||||
Assert.assertEquals(firstByDistance.getPosition().getLngDeg(), p.getPosition().getLngDeg(), 0.0001);
|
||||
Assert.assertEquals(firstByDistance.getPosition().getLatDeg(), p.getPosition().getLatDeg(), 0.005);
|
||||
Assert.assertEquals(firstByDistance.getPosition().getLngDeg(), p.getPosition().getLngDeg(), 0.012);
|
||||
|
||||
p = geocoder.getPlacemarkLast(abroad, 20, new Placemark.ByPopulationDistanceRatio(abroad));
|
||||
Assert.assertEquals(KIEL.getName(), p.getName());
|
||||
Assert.assertEquals(KIEL.getCountryCode(), p.getCountryCode());
|
||||
Assert.assertEquals(KIEL.getPosition().getLatDeg(), p.getPosition().getLatDeg(), 0.0001);
|
||||
Assert.assertEquals(KIEL.getPosition().getLngDeg(), p.getPosition().getLngDeg(), 0.0001);
|
||||
Assert.assertEquals(KIEL.getPosition().getLatDeg(), p.getPosition().getLatDeg(), 0.005);
|
||||
Assert.assertEquals(KIEL.getPosition().getLngDeg(), p.getPosition().getLngDeg(), 0.005);
|
||||
} catch (IOException e) {
|
||||
Assert.fail(e.getMessage());
|
||||
} catch (ParseException e) {
|
||||
|
||||
@@ -258,6 +258,7 @@ public class ReverseGeocoderImpl implements ReverseGeocoder {
|
||||
|
||||
URL request = new URL(url.toString());
|
||||
URLConnection connection = request.openConnection();
|
||||
connection.setRequestProperty("User-Agent", "");
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("UTF-8")));
|
||||
JSONParser parser = new JSONParser();
|
||||
JSONObject obj = (JSONObject) parser.parse(in);
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-incremental -workDir "${project_loc:com.sap.sailing.gwt.ui}/.tmp/gwt-work" -war "${project_loc:com.sap.sailing.gwt.ui}" -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9876 -startupUrl /gwt/Home.html com.sap.sailing.gwt.home.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/EmbeddedMapAndWindChart com.sap.sailing.gwt.ui.EmbeddedMapAndWindChart -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.regattaoverview.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup -startupUrl /gwt/YoutubePopup.html com.sap.sailing.gwt.ui.YoutubePopup -startupUrl /gwt/AutoPlay.html com.sap.sailing.gwt.AutoPlay"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-style PRETTY -incremental -workDir "${project_loc:com.sap.sailing.gwt.ui}/.tmp/gwt-work" -war "${project_loc:com.sap.sailing.gwt.ui}" -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9876 -startupUrl /gwt/Home.html com.sap.sailing.gwt.home.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/EmbeddedMapAndWindChart com.sap.sailing.gwt.ui.EmbeddedMapAndWindChart -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.regattaoverview.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup -startupUrl /gwt/YoutubePopup.html com.sap.sailing.gwt.ui.YoutubePopup -startupUrl /gwt/AutoPlay.html com.sap.sailing.gwt.AutoPlay"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms1024m -Xmx3072m -Dgwt.watchFileChanges=false"/>
|
||||
</launchConfiguration>
|
||||
@@ -73,6 +73,7 @@ public class BoatClassImageResolver {
|
||||
boatClassIconsMap.put(BoatClassMasterdata.J105.getDisplayName(), imageResources.J105Icon());
|
||||
boatClassIconsMap.put(BoatClassMasterdata.J111.getDisplayName(), imageResources.J111Icon());
|
||||
boatClassIconsMap.put(BoatClassMasterdata.KIELZUGVOGEL.getDisplayName(), imageResources.KielzugvogelIcon());
|
||||
boatClassIconsMap.put(BoatClassMasterdata.FORMULA_KITE.getDisplayName(), imageResources.FormulaKiteIcon());
|
||||
boatClassIconsMap.put(BoatClassMasterdata.LASER_2.getDisplayName(), imageResources.Laser2Icon());
|
||||
boatClassIconsMap.put(BoatClassMasterdata.LASER_SB3.getDisplayName(), imageResources.LaserSB3Icon());
|
||||
boatClassIconsMap.put(BoatClassMasterdata.LASER_INT.getDisplayName(), imageResources.LaserIcon());
|
||||
|
||||
@@ -253,6 +253,9 @@ public interface BoatClassImageResources extends ClientBundle {
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/boatclass/KIELZUGVOGEL.png")
|
||||
ImageResource KielzugvogelIcon();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/boatclass/FORMULA_KITE.png")
|
||||
ImageResource FormulaKiteIcon();
|
||||
|
||||
@Source("com/sap/sailing/gwt/ui/client/images/boatclass/TRIAS.png")
|
||||
ImageResource TriasIcon();
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
background-size: contain;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
left: 1em;
|
||||
}
|
||||
.regattaheader_logo img {
|
||||
display: inline-block;
|
||||
|
||||
@@ -4,6 +4,14 @@
|
||||
<div id="mainContent">
|
||||
<h4 class="articleHeadline">What's New - SAP Sailing Race Manager</h4>
|
||||
<div class="innerContent">
|
||||
<h5 class="articleSubheadline">June 2017</h5>
|
||||
<ul class="bulletList">
|
||||
<li>It is now possible to capture results during any phase of a race,
|
||||
particularly also during the start phase, making it possible to
|
||||
enter penalties such as OCS, BFD or UFD when they occur.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h5 class="articleSubheadline">April 2017</h5>
|
||||
<ul class="bulletList">
|
||||
<li>The "By Marks" course editor can now handle any valid CSS color for
|
||||
|
||||
@@ -17,7 +17,6 @@ public interface LeaderboardUpdateListener {
|
||||
|
||||
/**
|
||||
* Called whenever the leaderboard has been updated.
|
||||
* @param leaderboard
|
||||
*/
|
||||
void updatedLeaderboard(LeaderboardDTO leaderboard);
|
||||
|
||||
|
||||
@@ -599,7 +599,7 @@ applyMinimumWindConfidenceTooltip=If checked the value in the box above will be
|
||||
windRangeDistribution=Distribution in the wind range.
|
||||
pleaseSeeToolTips=Please hover over the options to view tooltips where available.
|
||||
competitorColumnTooltip=Names of the sailors of this competitor.
|
||||
competitorNationalityColumnTooltip=Nationality of this competitor.
|
||||
competitorNationalityColumnTooltip=Nationality of this competitor.
|
||||
sailIdColumnTooltip=Shows the flag of the country and the sail number of the competitor.
|
||||
rankColumnTooltip=The overall rank of this competitor in the regatta.
|
||||
carryColumnTooltip=Points carried over from previous races.
|
||||
|
||||
@@ -455,6 +455,7 @@ scoringSchemeHighPointFirstGetsTwelveOrEight2017Description=Calificación en pun
|
||||
scoringSystem=Sistema de puntuación
|
||||
createFlexibleLeaderboard=Crear tabla de clasificación flexible
|
||||
createRegattaLeaderboard=Crear tabla de clasificación de regata
|
||||
createRegattaLeaderboardWithEliminations=Crear tabla de clasificación de regata con eliminaciones
|
||||
createDefaultRegattaLeaderboard=Crear tabla de clasificación de regata predeterminada
|
||||
editFlexibleLeaderboard=Editar tabla de clasificación flexible
|
||||
editRegattaLeaderboard=Editar tabla de clasificación de regata
|
||||
@@ -595,7 +596,8 @@ applyMinimumWindConfidence=Aplicar confianza mínima de viento
|
||||
applyMinimumWindConfidenceTooltip=Si se marca el valor del cuadro anterior, se utilizará como confianza de viento mínima válida durante la generación.
|
||||
windRangeDistribution=Distribución en el rango de viento
|
||||
pleaseSeeToolTips=Pase el cursor por encima de las opciones para obtener información sobre herramientas si está disponible.
|
||||
competitorColumnTooltip=Nombres de los miembros de este competidor.
|
||||
competitorColumnTooltip=Nombres de los navegantes de este competidor
|
||||
competitorNationalityColumnTooltip=Nacionalidad de este competidor
|
||||
sailIdColumnTooltip=Muestra la bandera del país y el número de vela del competidor.
|
||||
rankColumnTooltip=Posición general de este competidor en la regata.
|
||||
carryColumnTooltip=Puntos acumulados de carreras anteriores.
|
||||
@@ -1251,6 +1253,7 @@ fileUploadResult=Carga de archivos: {0} {1}. En caso de error, compruebe que su
|
||||
removeUploadedFile=Eliminar archivo
|
||||
showCompetitorSailIdColumn=ID de vela
|
||||
showCompetitorFullNameColumn=Nombre completo del competidor
|
||||
showCompetitorNationalityColumn=Nacionalidad del competidor
|
||||
loadingDimensionValues=Cargando valores de dimensión
|
||||
runningQuery=Ejecutando consulta
|
||||
inviteBuoyTenders=Invitar a balizadores
|
||||
@@ -1778,4 +1781,7 @@ makeDefault=Establecer como predeterminado
|
||||
makeDefaultInProgress=En curso...
|
||||
settingsSavedMessage=Sus opciones actuales se han definido correctamente como estándar
|
||||
settingsSaveErrorMessage=Se ha producido un error durante la definición de sus opciones como estándar
|
||||
showLiveNow=Mostrar "En directo ahora"
|
||||
useOnlyOneOfStartTimeInferenceAndControlTrackingFromStartAndFinishTimes=Utilice solo una "Inferencia de hora de inicio" y "Control de rastreo de horas de inicio y de fin"
|
||||
unknownLeaderboardType=Tipo de tabla de clasificación {0} desconocido
|
||||
selectCompetitorsToEliminate=Seleccionar competidores a eliminar
|
||||
@@ -3,9 +3,9 @@ raceCommitteeApp=Application pour administrateurs de courses
|
||||
raceViewer=Visualiseur de course
|
||||
mapControls=Contrôles de carte
|
||||
page=Page
|
||||
tracTracEvents=Manifestations TracTrac
|
||||
swissTimingEvents=Manifestations SwissTiming
|
||||
trackedBefore=Historique des manifestations suivies
|
||||
tracTracEvents=Evénements TracTrac
|
||||
swissTimingEvents=Evénements SwissTiming
|
||||
trackedBefore=Historique des evénements suivies
|
||||
general=Généralités
|
||||
listRaces=Lister courses
|
||||
listRegattas=Lister régates
|
||||
@@ -37,33 +37,33 @@ carry=Cumulé
|
||||
competitor=Concurrent
|
||||
competitors=Concurrents
|
||||
competitorsSelected={0}/{1} concurrent(s) sélectionné(s)
|
||||
noSuchLeaderboard=Aucun palmarès de ce type
|
||||
leaderboardConfiguration=Configuration du palmarès
|
||||
noSuchLeaderboard=Aucun classement de ce type
|
||||
leaderboardConfiguration=Configuration du classement
|
||||
newDotDotDot=Nouveau...
|
||||
editScores=Modifier points...
|
||||
columnNamesInSelectedLeaderboard=Noms des courses dans le palmarès sélectionné
|
||||
columnNamesInSelectedLeaderboard=Noms des courses dans le classement sélectionné
|
||||
addDotDotDot=Ajouter...
|
||||
renameDotDotDot=Renommer...
|
||||
trackedRaceConnectedToSelectedRaceName=Course suivie liée au nom de course sélectionné
|
||||
linkToColumn=Lier à la colonne
|
||||
unlink=Annuler Lier
|
||||
leaderboardName=Nom du palmarès
|
||||
leaderboardName=Nom du classement
|
||||
cancel=Annuler
|
||||
pleaseEnterAName=Saisissez un nom.
|
||||
pleaseEnterABoatClass=Saisissez une catégorie de bateau.
|
||||
discardRacesFromHowManyStartedRacesOn=Éliminez une course de plus en commençant au nombre de courses déjà lancées.
|
||||
leaderboardWithThisNameAlreadyExists=Un palmarès de ce nom existe déjà.
|
||||
leaderboardWithThisNameAlreadyExists=Un classement de ce nom existe déjà.
|
||||
discardThresholdsMustBeNumeric=Les seuils d''élimination doivent être numériques.
|
||||
discardThresholdsMustBeAscending=Les seuils d''élimination doivent être ascendants.
|
||||
discarding=Élimination en cours
|
||||
startingFromNumberOfRaces=Début au nombre de courses
|
||||
renameLeaderboard=Renommer palmarès
|
||||
addColumnToLeaderboard=Ajouter colonne à palmarès
|
||||
renameLeaderboard=Renommer classement
|
||||
addColumnToLeaderboard=Ajouter colonne à classement
|
||||
pleaseEnterNameForNewRaceColumn=Saisissez un nom pour la nouvelle colonne de course.
|
||||
ok=OK
|
||||
medalRace=Course médaillée
|
||||
renameRace=Renommer course
|
||||
openSelectedLeaderboard=Ouvrir le palmarès sélectionné
|
||||
openSelectedLeaderboard=Ouvrir le classement sélectionné
|
||||
rank=Place
|
||||
rankTooltip=Place du concurrent dans la course
|
||||
regattaRank=Place dans la régate
|
||||
@@ -81,9 +81,9 @@ raceAverageSpeedInKnotsTooltip=La vitesse fond moyenne pour cette course,\ncalcu
|
||||
rankGain=Gain de place(s)
|
||||
rankGainTooltip=La différence de la position entre la portion de parcours actuelle et la précédente.
|
||||
sapSailingAnalytics=Sailing Analytics
|
||||
leaderboard=Palmarès
|
||||
leaderboards=Palmarès
|
||||
leaderboardSettings=Options du palmarès
|
||||
leaderboard=Classement
|
||||
leaderboards=Classements
|
||||
leaderboardSettings=Options du classement
|
||||
settings=Options
|
||||
selectAtLeastOneLegDetail=Sélectionnez au moins un détail de portion de parcours.
|
||||
currentSpeedOverGroundInKnots=Vf
|
||||
@@ -100,12 +100,12 @@ windwardDistanceToCompetitorFarthestAheadInMeters=Écart
|
||||
windwardDistanceToCompetitorFarthestAheadInMetersTooltip=Distance au vent/sous le vent entre le concurrent et celui en tête de la course pour les portions de parcours dans le lit du vent/à vent arrière, respectivement, ou la distance de parcours pour atteindre une portion de parcours.\nNotez que le concurrent en tête n''est pas forcément premier de la course si un classement prenant en compte les difficultés est en vigueur.
|
||||
name=Nom
|
||||
leaveEmptyForDefault=Laissez vide pour que la valeur par défaut s''applique.
|
||||
trackNewEvent=Suivre une nouvelle manifestation
|
||||
trackNewEvent=Suivre une nouvelle evénement
|
||||
trackableRaces=Courses disponibles pour suivi
|
||||
trackWind=Suivre le vent
|
||||
regattaName=Nom de la régate
|
||||
eventName=Nom de la manifestation
|
||||
event=Manifestation
|
||||
eventName=Nom de la evénement
|
||||
event=Evénement
|
||||
startTime=Heure du départ
|
||||
startOfTracking=Début du suivi
|
||||
endOfTracking=Fin du suivi
|
||||
@@ -128,7 +128,7 @@ livePort=Port données en direct
|
||||
storedPort=Port données stockées
|
||||
liveUri=URI en direct
|
||||
storedUri=URI stockée
|
||||
eventsConnectedTo=Manifestations actuellement suivies
|
||||
eventsConnectedTo=Evénements actuellement suivies
|
||||
hostname=Nom de l''hôte
|
||||
declinationCheckbox=Corriger la direction du vent par déclinaison
|
||||
raceStartTrackingColumn=Suivi lancé
|
||||
@@ -141,7 +141,7 @@ chooseUpdateIntervalOfAtLeastOneSecond=Sélectionnez un intervalle de mise à jo
|
||||
errorSettingWindForRace=Erreur lors de la définition du vent pour la course
|
||||
errorFetchingWindInformationForRace=Erreur lors de l''accès aux données de vent pour la course
|
||||
errorWhileTryingToSetWindSourceForRace=Erreur lors de la tentative d''activation de l''indicateur "Vent de début : au vent"
|
||||
inEvent=dans la manifestation
|
||||
inEvent=dans la evénement
|
||||
to=à
|
||||
toSide=à
|
||||
showEstimatedWind=Afficher estimation du vent
|
||||
@@ -222,7 +222,7 @@ actionRaceUnlink=Annuler Lier course
|
||||
actionRaceRemove=Supprimer course
|
||||
actionExportXML=Exporter au format XML
|
||||
actionOpenDashboard=Ouvrir le tableau de bord des coachs
|
||||
filterLeaderboardsByName=Filtrer palmarès par nom
|
||||
filterLeaderboardsByName=Filtrer classement par nom
|
||||
actions=Actions
|
||||
islinked=Est lié(e)
|
||||
yes=Oui
|
||||
@@ -230,16 +230,16 @@ no=Non
|
||||
hoverOverAPoint=Placez le curseur sur un point pour obtenir des détails.
|
||||
noSelection=Aucune sélection
|
||||
raceIsKnownToStartUpwind=La course a commencé avec une portion de parcours au vent.
|
||||
events=Manifestations
|
||||
events=Evénements
|
||||
settingsForComponent=Options pour {0}
|
||||
noEventsFound=Aucune manifestation trouvée
|
||||
noEventSelected=Aucune manifestation sélectionnée
|
||||
noLeaderboardsFound=Aucun palmarès trouvé
|
||||
searchEvents=Recherche de manifestations
|
||||
noEventsFound=Aucune evénements trouvée
|
||||
noEventSelected=Aucune evénement sélectionnée
|
||||
noLeaderboardsFound=Aucun classement trouvé
|
||||
searchEvents=Recherche de evénements
|
||||
location=Lieu
|
||||
from=De
|
||||
until=À
|
||||
onlyLiveEvents=Uniquement les manifestations en direct
|
||||
onlyLiveEvents=Uniquement les evénements en direct
|
||||
locationNotAvailable=Lieu non disponible
|
||||
startDateNotAvailable=Date du départ non disponible
|
||||
startDate=Date du départ
|
||||
@@ -251,28 +251,28 @@ competitorPassedMarkAtDate={0} a passé {1} à {2}
|
||||
valueForCompetitorAt={0} à {1} : {2}
|
||||
reallyRemoveRace=Voulez-vous vraiment supprimer la course "{0}" ? Note : tous les journaux de la course seront également supprimés de manière permanente pour cette course.
|
||||
showDetails=Afficher détails
|
||||
hideLeaderboard=Masquer palmarès
|
||||
hideLeaderboards=Masquer palmarès
|
||||
showLeaderboard=Afficher palmarès
|
||||
hideLeaderboard=Masquer classement
|
||||
hideLeaderboards=Masquer classement
|
||||
showLeaderboard=Afficher classement
|
||||
hideRaces=Masquer courses
|
||||
showMap=Afficher carte
|
||||
hideMap=Masquer carte
|
||||
noLeaderboardSelected=Aucun palmarès sélectionné
|
||||
leaderboardGroups=Groupes de palmarès
|
||||
filterLeaderboardGroupsByName=Filtrer groupes de palmarès par nom
|
||||
createNewLeaderboardGroup=Créer groupe de palmarès
|
||||
leaderboardGroupConfiguration=Configuration du groupe de palmarès
|
||||
noLeaderboardSelected=Aucun classement sélectionné
|
||||
leaderboardGroups=Groupes de classement
|
||||
filterLeaderboardGroupsByName=Filtrer groupes de classement par nom
|
||||
createNewLeaderboardGroup=Créer groupe de classement
|
||||
leaderboardGroupConfiguration=Configuration du groupe de classement
|
||||
legs=Portions de parcours
|
||||
currentLeg=Portion de parcours actuelle
|
||||
currentLegTooltip=Le numéro de la portion de parcours sur laquelle le concurrent se trouve actuellement, en commençant par 1.
|
||||
leaderboardGroup=Groupe de palmarès
|
||||
leaderboardGroup=Groupe de classement
|
||||
pleaseEnterNonEmptyDescription=Saisissez une description (ne pas laisser vide).
|
||||
groupWithThisNameAlreadyExists=Un groupe de palmarès de ce nom existe déjà.
|
||||
detailsOfLeaderboardGroup=Détails du groupe de palmarès
|
||||
groupWithThisNameAlreadyExists=Un groupe de classement de ce nom existe déjà.
|
||||
detailsOfLeaderboardGroup=Détails du groupe de classement
|
||||
edit=Modifier
|
||||
save=Enregistrer
|
||||
abort=Abandonner
|
||||
noLeaderboardGroupWithNameFound=Aucun groupe de palmarès ayant pour nom {0} n''a été trouvé.
|
||||
noLeaderboardGroupWithNameFound=Aucun groupe de classement ayant pour nom {0} n''a été trouvé.
|
||||
overview=Synthèse
|
||||
welcomeToSailingAnalytics=Bienvenue dans SAP Sailing Analytics
|
||||
welcomeToSailingAnalyticsBody=Grâce aux solutions SAP, l''action sur l''eau est à portée de main pour les amateurs de la voile, comme jamais auparavant.\ Le palmarès actualisé en direct ajoute un vrai plus, avec des classements, vitesses de bateaux et marges de victoire en temps réel. Avec SAP, suivez chaque course et ne ratez aucune manœuvre de passage.\ Regarder les compétitions de voile en direct où que vous soyez devient un jeu d''enfant.
|
||||
@@ -325,8 +325,8 @@ slowPlaySpeedDown=Ralentir vitesse de lecture ou revenir en arrière
|
||||
speedPlaySpeedUp=Accélérer vitesse de lecture ou avancer
|
||||
showHideComponent=Afficher/Masquer {0}
|
||||
degreesBoatToTheWind=Angle par rapport au vent
|
||||
racesInLeaderboard=Courses dans le palmarès
|
||||
leaderboardsInGroup=Palmarès dans le groupe
|
||||
racesInLeaderboard=Courses dans le classement
|
||||
leaderboardsInGroup=Classement dans le groupe
|
||||
replication=Réplication
|
||||
errorFetchingReplicaData=Erreur lors de l''accès aux données de réplicas : {0}
|
||||
averageAbsoluteCrossTrackErrorInMeters=∅ XTE
|
||||
@@ -351,11 +351,11 @@ showWindDirectionSeries=Afficher données de direction du vent
|
||||
fleet=Flotte
|
||||
boatClass=Catégorie de bateau
|
||||
setDelayToLive=Définir décalage par rapport au direct
|
||||
pleaseEnterNonEmptyVenue=Saisissez un lieu de manifestation.
|
||||
pleaseEnterNonEmptyVenue=Saisissez un lieu de evénement.
|
||||
pleaseEnterStartAndEndDate=Saisissez une date de départ et une date de fin.
|
||||
startDateMustBeforeEndDate=La date de départ doit être antérieure à la date de fin.
|
||||
eventWithThisNameAlreadyExists=Une manifestation de ce nom existe déjà.
|
||||
venue=Lieu de la manifestation
|
||||
eventWithThisNameAlreadyExists=Un evénement de ce nom existe déjà.
|
||||
venue=Lieu de la evénement
|
||||
pleaseSelectABoatClass=Sélectionnez une catégorie de bateau.
|
||||
regattaWithThisNameAlreadyExists=Une régate de ce nom existe déjà.
|
||||
seriesWithThisNameAlreadyExists=Une série de ce nom existe déjà.
|
||||
@@ -379,7 +379,7 @@ importOfficialResults=Importer résultats officiels...
|
||||
selectAll=Sélectionner tout
|
||||
apply=Appliquer
|
||||
successfullyUpdatedScores=Mise à jour des scores réussie
|
||||
errorUpdatingScoresForLeaderboard=Erreur lors de la mise à jour des scores pour le palmarès {0} : {1}
|
||||
errorUpdatingScoresForLeaderboard=Erreur lors de la mise à jour des scores pour le classement {0} : {1}
|
||||
maneuverTypesToShowWhenCompetitorIsClicked=Types de manœuvre à afficher lorsque l''on clique sur le concurrent
|
||||
simulateAsLiveRace=Simulation de course en direct
|
||||
simulateWithOffset=Décalage avant le départ (en minutes) :
|
||||
@@ -412,7 +412,7 @@ successfullyUpdatedSailingServers=Instances SailingServer correctement mises à
|
||||
errorRemovingSailingServers=Erreur lors de la suppression des instances SailingServer : {0}
|
||||
addSailingServer=Ajouter instance SailingServer
|
||||
errorAddingSailingServer=Erreur lors de l''ajout de l''instance SailingServer : {0}
|
||||
errorTryingToObtainLeaderboardContents=Erreur lors de la tentative d''obtention du contenu du palmarès : {0}
|
||||
errorTryingToObtainLeaderboardContents=Erreur lors de la tentative d''obtention du contenu du classement : {0}
|
||||
lastScoreUpdate=Dernière mise à jour des scores
|
||||
warningBrowserUnsupported=Ce site Web n''est pas optimisé pour votre navigateur. Utilisez un navigateur plus récent, tel que Firefox ou Chrome.
|
||||
newMark=Nouvelle marque
|
||||
@@ -453,13 +453,14 @@ scoringSchemeHighPointFirstGetsTwelveOrEightDescription=Score en points. Le vain
|
||||
scoringSchemeHighPointFirstGetsTwelveOrEight2017=Système de points avec bonus - ESS 2017, le vainqueur obtient 12 points (ou 8)
|
||||
scoringSchemeHighPointFirstGetsTwelveOrEight2017Description=Score en points. Le vainqueur totalise 12 points, le deuxième 11, etc. En cas d''égalité, la victoire est accordée au concurrent qui a totalisé le plus de points. Si l''égalité persiste, la victoire est accordée en fonction du classement dans la dernière course.
|
||||
scoringSystem=Système d''attribution des points
|
||||
createFlexibleLeaderboard=Créer palmarès flexible
|
||||
createRegattaLeaderboard=Créer palmarès régate
|
||||
createDefaultRegattaLeaderboard=Créer palmarès régate par défaut
|
||||
editFlexibleLeaderboard=Modifier palmarès flexible
|
||||
editRegattaLeaderboard=Modifier palmarès régate
|
||||
createFlexibleLeaderboard=Créer classement flexible
|
||||
createRegattaLeaderboard=Créer classement régate
|
||||
createRegattaLeaderboardWithEliminations=Créer classement régate avec éliminations
|
||||
createDefaultRegattaLeaderboard=Créer classement régate par défaut
|
||||
editFlexibleLeaderboard=Modifier classement flexible
|
||||
editRegattaLeaderboard=Modifier classement régate
|
||||
defaultRegatta=Régate par défaut
|
||||
useOverallLeaderboard=Utiliser palmarès général
|
||||
useOverallLeaderboard=Utiliser classement général
|
||||
overallStandings=Classement général
|
||||
type=Type
|
||||
actionAddRaces=Ajouter des courses
|
||||
@@ -486,7 +487,7 @@ optional=facultatif
|
||||
pleaseEnterAValue=Saisissez une valeur.
|
||||
latitude=Latitude
|
||||
longitude=Longitude
|
||||
actionAddEvent=Ajouter manifestation
|
||||
actionAddEvent=Ajouter evénement
|
||||
publicationUrl=URL de publication
|
||||
suppress=Supprimer
|
||||
isPublic=Publique
|
||||
@@ -511,7 +512,7 @@ pleaseSelectASeries=Sélectionnez une série.
|
||||
pleaseSelectARace=Sélectionnez une course.
|
||||
displayGroupsInReverseOrder=Afficher groupes en sens inverse
|
||||
actionConfigureUrl=Configurer URL
|
||||
configureLeaderboardUrlDescription=Configurer le palmarès et obtenir l''URL correspondante à partir du lien
|
||||
configureLeaderboardUrlDescription=Configurer le classement et obtenir l''URL correspondante à partir du lien
|
||||
embedded=Intégré
|
||||
additionalUrlSettings=Options d''URL supplémentaires
|
||||
restrictToSingleSelectedRace=Limiter à la seule course sélectionnée
|
||||
@@ -537,7 +538,7 @@ shape=Forme
|
||||
pattern=Modèle
|
||||
legend=Légende
|
||||
live=en direct
|
||||
swissTimingArchiveConnector=Manifestations archivées SwissTiming
|
||||
swissTimingArchiveConnector=Evénements archivées SwissTiming
|
||||
errorFetchingChartData=Erreur lors de l''accès aux données du graphique : {0}
|
||||
loadingCompetitorData=Chargement des données du concurrent...
|
||||
competitorRegattaDataAfterRaceN={0} après la course {1}
|
||||
@@ -546,8 +547,8 @@ netPoints=Points nets
|
||||
raceNetPointsTooltip=Points nets du concurrent dans la course
|
||||
regattaNetPointsTooltip=Points nets du concurrent dans la régate
|
||||
showRankChart=Afficher graphique du classement
|
||||
overallLeaderboardSelection=Palmarès général
|
||||
errorTryingToObtainOverallLeaderboards=Erreur lors de la tentative d''obtention du palmarès général : {0}
|
||||
overallLeaderboardSelection=Classement général
|
||||
errorTryingToObtainOverallLeaderboards=Erreur lors de la tentative d''obtention du classement général : {0}
|
||||
finished=terminé
|
||||
upcoming=à venir
|
||||
next=suivante
|
||||
@@ -595,7 +596,8 @@ applyMinimumWindConfidence=Appliquer fiabilité minimale du vent
|
||||
applyMinimumWindConfidenceTooltip=Si cette case est cochée, la valeur de la case ci-dessus sera utilisée comme valeur de fiabilité valide minimale du vent au cours de la génération.
|
||||
windRangeDistribution=Distribution dans la plage du vent
|
||||
pleaseSeeToolTips=Passez votre curseur au-dessus des options pour afficher les info-bulles, le cas échéant.
|
||||
competitorColumnTooltip=Noms des membres de ce concurrent
|
||||
competitorColumnTooltip=Noms des sportifs de la voile de ce concurrent
|
||||
competitorNationalityColumnTooltip=Nationalité de ce concurrent
|
||||
sailIdColumnTooltip=Indique le pavillon du pays et le numéro de voile du concurrent.
|
||||
rankColumnTooltip=La place au classement général de ce concurrent dans la régate.
|
||||
carryColumnTooltip=Points accumulés lors des autres courses
|
||||
@@ -619,7 +621,7 @@ pleaseEnterNonEmptyCourseArea=Saisissez une zone de course.
|
||||
pleaseSelectACourseArea=Sélectionnez une zone de course.
|
||||
lastUpperFlag=Pavillon supérieur
|
||||
lastLowerFlag=Pavillon inférieur
|
||||
cannotAddRacesToRegattaLeaderboardButOnlyToRegatta=Il s''agit d''un palmarès de régate. Vous pouvez uniquement ajouter des courses à ce palmarès dans la définition de la régate.
|
||||
cannotAddRacesToRegattaLeaderboardButOnlyToRegatta=Il s''agit d''un classement de régate. Vous pouvez uniquement ajouter des courses à ce palmarès dans la définition de la régate.
|
||||
correctScore=Corriger score
|
||||
correctScoreFor=Corriger score pour le concurrent {0} dans la course {1}
|
||||
penaltyOrRedress=Pénalité/Réparation
|
||||
@@ -735,7 +737,7 @@ competitorLabel=Concurrent
|
||||
freemode=Garder direction
|
||||
whatIfCourse=Parcours What-If
|
||||
editRegatta=Modifier régate...
|
||||
selectSailingEvent=Sélectionnez une manifestation de voile...
|
||||
selectSailingEvent=Sélectionnez un evénement de voile...
|
||||
selectCourseArea=Sélectionnez une zone de course...
|
||||
courseAreaOverview=Synthèse de la zone
|
||||
courseDesignOverview=Synthèse de la configuration du parcours
|
||||
@@ -750,7 +752,7 @@ addSeries=Ajouter série
|
||||
regattaDefinesResultDiscardingRules=La régate définit les règles d''élimination du résultat.
|
||||
startsWithZeroScore=La série commence avec un score à zéro.
|
||||
masterDataImportPanel=Importation des données de base
|
||||
importSuccess=Réussite\n{0} groupe(s) de palmarès, {1} palmarès, {2} manifestation(s), {3} régate(s) et {4} pistes de média créés
|
||||
importSuccess=Réussite\n{0} groupe(s) de classement, {1} classements, {2} evénement(s), {3} régate(s) et {4} pistes de média créés
|
||||
importSuccessOverwriteInfo=Les régates suivantes ont été écrasées, vous devez suivre à nouveau les courses :
|
||||
regattaOverviewConfiguration=Configuration de la synthèse des régates
|
||||
firstRaceIsNonDiscardableCarryForward=Départs avec report sans élimination
|
||||
@@ -834,14 +836,14 @@ essOneRemoved=Signal de départ de la course
|
||||
dataBeforeAfter=Données obtenues avant/après la course
|
||||
rawFixes=Toutes les positions (y compris les valeurs aberrantes)
|
||||
importRemoteHost=Hôte distant :
|
||||
importFetchRemoteLgs=Accéder à la liste des groupes de palmarès
|
||||
importUrlInvalid=URL non valide pour l''accès aux groupes de palmarès : {0}
|
||||
importGetLeaderboardsFailed=Échec de la requête GET pour l''obtention des groupes de palmarès pour l''hôte {0}, erreur {1}
|
||||
importFetchRemoteLgs=Accéder à la liste des groupes de classement
|
||||
importUrlInvalid=URL non valide pour l''accès aux groupes de classement : {0}
|
||||
importGetLeaderboardsFailed=Échec de la requête GET pour l''obtention des groupes de classement pour l''hôte {0}, erreur {1}
|
||||
importNoDataReturned=Aucune donnée retournée par le serveur
|
||||
importServerError=Échec de la requête GET pour l''obtention des groupes de palmarès avec erreur de serveur. Pour plus d''informations, consultez les journaux du serveur.
|
||||
importServerError=Échec de la requête GET pour l''obtention des groupes de classement avec erreur de serveur. Pour plus d''informations, consultez les journaux du serveur.
|
||||
importOverrideSwitchLabel=Remplacer données existantes si les noms et ID correspondent
|
||||
importSelectedLeaderboardGroups=Importer groupes de palmarès sélectionnés
|
||||
importSelectAtLeastOne=Vous devez sélectionner au moins un groupe de palmarès à importer.
|
||||
importSelectedLeaderboardGroups=Importer groupes de classement sélectionnés
|
||||
importSelectAtLeastOne=Vous devez sélectionner au moins un groupe de classement à importer.
|
||||
deselectAll=Désélectionner tout
|
||||
polarDiagramButton=Diagramme polaire
|
||||
ratioBetweenTimeSinceLastPositionFixAndAverageSamplingInterval=Écart GPS
|
||||
@@ -849,8 +851,8 @@ ratioBetweenTimeSinceLastPositionFixAndAverageSamplingIntervalTooltip=Ratio entr
|
||||
trackingQuality=Qualité du suivi
|
||||
legType=Type de portion de parcours
|
||||
sailID=Numéro de voile
|
||||
seriesLeaderboard=Palmarès de la série
|
||||
regattaLeaderboards=Palmarès de la régate
|
||||
seriesLeaderboard=Classement de la série
|
||||
regattaLeaderboards=Classement de la régate
|
||||
clearSelection=Effacer la sélection
|
||||
running=En cours d''exécution
|
||||
runAsSubstantive=Exécuter
|
||||
@@ -922,11 +924,11 @@ queryNotValidBecause=Aucune requête possible dû à
|
||||
dataMining=Exploration de données
|
||||
errorRunningDataMiningQuery=Une erreur s''est produite lors de l''exécution de la requête.
|
||||
hideToolbar=Masquer barre d''outils
|
||||
showSeriesLeaderboards=Afficher palmarès de la série
|
||||
showOverallLeaderboard=Afficher palmarès général
|
||||
showSeriesLeaderboards=Afficher classement de la série
|
||||
showOverallLeaderboard=Afficher classement général
|
||||
lineAngleToWindAndAdvantage=longueur : {0} m\nangle au vent : {1}°\ncôté {2} a {3} m d''avantage
|
||||
doYouReallyWantToRemoveEvents=Voulez-vous vraiment supprimer les manifestations ?
|
||||
doYouReallyWantToRemoveEvent=Voulez-vous vraiment supprimer la manifestation {0} ?
|
||||
doYouReallyWantToRemoveEvents=Voulez-vous vraiment supprimer les evénements ?
|
||||
doYouReallyWantToRemoveEvent=Voulez-vous vraiment supprimer la evénement {0} ?
|
||||
line=Ligne
|
||||
offset=Décalage
|
||||
doYouReallyWantToRemoveCompetitors=Voulez-vous vraiment supprimer les concurrents sélectionnés ?
|
||||
@@ -994,15 +996,15 @@ successfullyAuthorizedAccessToIgtimiUser=Autorisation d''accès réussie pour l'
|
||||
couldNotAuthorizedAccessToIgtimiUser=Autorisation pour l''utilisateur {0} échouée : mot de passe ou nom d''utilisateur non valide.
|
||||
errorGettingIgtimiAuthorizationUrl=Erreur lors de l''accès à l''URL d''autorisation Igtimi : {0}
|
||||
addIgtimiUser=Ajouter utilisateur Igtimi
|
||||
doYouReallyWantToRemoveLeaderboards=Voulez-vous vraiment supprimer les palmarès ?
|
||||
doYouReallyWantToRemoveLeaderboards=Voulez-vous vraiment supprimer les classements ?
|
||||
errorTryingToRemoveIgtimiAccount=Erreur lors de la tentative de suppression du compte Igtimi pour l''utilisateur {0}.
|
||||
successfullyRemoveIgtimiAccount=Suppression du compte Igtimi pour l''utilisateur {0} réussie.
|
||||
eMailMustNotBeEmpty=L''adresse e-mail ne doit pas être vide.
|
||||
emailAddress=Adresse e-mail
|
||||
password=Mot de passe
|
||||
searchTag=Balise de recherche
|
||||
doYouReallyWantToRemoveLeaderboard=Voulez-vous vraiment supprimer le palmarès ''''{0}'''' ?
|
||||
metaLeaderboardCannotBeChanged=Ce palmarès est de type méta. Vous ne pouvez pas le modifier ici.
|
||||
doYouReallyWantToRemoveLeaderboard=Voulez-vous vraiment supprimer le classement ''''{0}'''' ?
|
||||
metaLeaderboardCannotBeChanged=Ce classement est de type méta. Vous ne pouvez pas le modifier ici.
|
||||
failedToSetNewStartTime=Définition de la nouvelle heure de départ échouée. Cela peut arriver lorsque la même heure de départ existe déjà dans le journal de course ou lorsque quelqu''un d''autre a ajouté une heure de départ plus récente (sous forme d''ID de passage et d''heure logique) que celle que vous venez d''ajouter.
|
||||
doYouReallyWantToRemoveIgtimiAccount=Souhaitez-vous réellement supprimer le compte Igtimi qui permet à l''utilisateur {0} d''accéder aux données ?
|
||||
igtimiWindImport=Importer le vent depuis Igtimi
|
||||
@@ -1029,8 +1031,8 @@ addRaceLogTracker=Ajouter tracker de journal de course
|
||||
addRaceLogTrackers=Ajouter trackers de journal de course
|
||||
denoteForRaceLogTracking=Marquer pour suivi par journal de course
|
||||
startRaceLogTracking=Lancer le suivi par journal de course
|
||||
filterByLeaderboard=Filtrer par palmarès
|
||||
removeLeaderboardFilter=Supprimer filtre de palmarès
|
||||
filterByLeaderboard=Filtrer par classement
|
||||
removeLeaderboardFilter=Supprimer filtre de classement
|
||||
competitorRegistrations=Inscriptions de concurrents
|
||||
trackerStatus=Statut de tracker
|
||||
courseStatus=Statut de course
|
||||
@@ -1060,7 +1062,7 @@ closeTimeRange=Fermer extrémité ouverte de l''intervalle de temps
|
||||
setClosingTimePoint=Définir une heure de fin pour l''intervalle de temps ouvert
|
||||
startOfTimeRangeMustLieBeforeEnd=Le début de l''intervalle de temps doit se situer avant sa fin.
|
||||
overallProgress=Progression générale
|
||||
eventOverview=Synthèse de la manifestation
|
||||
eventOverview=Synthèse de la evénement
|
||||
start=Départ
|
||||
showAddedScores=Afficher scores ajoutés pour chaque entrée du palmarès
|
||||
ratio=ratio
|
||||
@@ -1081,10 +1083,10 @@ selectRaces=Sélectionner les courses
|
||||
importFixes=Importer positions
|
||||
noSailingServerInstancesYet=Aucune instance de serveur distant enregistrée pour le moment
|
||||
registeredSailingServerInstances=Instances de serveur distant enregistrées
|
||||
filterEventsByName=Filtrer manifestations par nom :
|
||||
leaderboardsExceptFromSelectedGroup=Palmarès (sauf ceux du groupe sélectionné)
|
||||
availableLeaderboardGroups=Groupes de palmarès disponibles
|
||||
leaderboardGroupsOfSelectedEvent=Groupe de palmarès affectés à la manifestation
|
||||
filterEventsByName=Filtrer evénements par nom :
|
||||
leaderboardsExceptFromSelectedGroup=Classement (sauf ceux du groupe sélectionné)
|
||||
availableLeaderboardGroups=Groupes de classement disponibles
|
||||
leaderboardGroupsOfSelectedEvent=Groupe de classement affectés à la evénement
|
||||
addRaces=Ajouter des courses
|
||||
withNamePrefix=avec préfixe de nom
|
||||
pleaseSelectASeriesFirst=Sélectionnez d''abord une série.
|
||||
@@ -1119,9 +1121,9 @@ advancePassId=ID de passage avancé
|
||||
pleaseSelectAScoringResult=Sélectionnez un résultat...
|
||||
timeZone=Fuseau horaire
|
||||
eventOfficialWebsiteURL=URL du site Web officiel
|
||||
eventBaseURL=URL de base de la manifestation (http://something.sapsailing.com)
|
||||
eventBaseURL=URL de base de la evénement (http://something.sapsailing.com)
|
||||
eventSailorsInfoWebsiteURL=URL du site Web avec infos pour les concurrents
|
||||
eventOverviewURL=URL de synthèse de la manifestation
|
||||
eventOverviewURL=URL de synthèse de la evénement
|
||||
eventLogoImageURL=URL de l''image du logo
|
||||
showPingMarkMappings=Afficher mappages pour marques avec pings effectués
|
||||
regattaNameMustNotContainSlashes=Le nom de la régate ne doit pas contenir de barres obliques.
|
||||
@@ -1152,11 +1154,11 @@ connectors=Connecteurs
|
||||
videoComponentShortName=Vidéo
|
||||
competitorSearchFilter=Filtre de recherche de concurrent
|
||||
searchCompetitorsBySailNumberOrName=Rechercher
|
||||
goToEventOverview=Accéder à la synthèse de la manifestation
|
||||
goToOverviewAndSeeLeaderboard=Accédez à la synthèse et affichez toutes les courses sur un seul palmarès.
|
||||
noSuchEvent=Aucune manifestation correspondante
|
||||
leaderboardNotContainedInLeaderboardGroup=Le palmarès {0} ne fait pas partie du groupe de palmarès {1}.
|
||||
leaderboardGroupNotContainedInEvent=Le groupe de palmarès {0} ne fait pas partie de la manifestation {1}.
|
||||
goToEventOverview=Accéder à la synthèse de la evénement
|
||||
goToOverviewAndSeeLeaderboard=Accédez à la synthèse et affichez toutes les courses sur un seul classement.
|
||||
noSuchEvent=Aucune evénement correspondante
|
||||
leaderboardNotContainedInLeaderboardGroup=Le classement {0} ne fait pas partie du groupe de classement {1}.
|
||||
leaderboardGroupNotContainedInEvent=Le groupe de classement {0} ne fait pas partie de la evénement {1}.
|
||||
raceIsInLiveTimePanelMode=La course est en direct.
|
||||
backToLiveTimePanelMode=Retour au direct
|
||||
windChart=Graphique du vent
|
||||
@@ -1194,23 +1196,23 @@ regattaStructureImport=Importation de la structure de la régate
|
||||
filteredBy=filtré par
|
||||
editSeries=Modifier série
|
||||
pleaseSelectAtLeastOneRegatta=Sélectionnez au moins une régate.
|
||||
pleaseSelectAnEvent=Sélectionnez une manifestation.
|
||||
selectALeaderboard=Sélectionnez un palmarès.
|
||||
pleaseSelectAnEvent=Sélectionnez une evénement.
|
||||
selectALeaderboard=Sélectionnez un classement.
|
||||
autoplayConfiguration=Configuration de lecture automatique
|
||||
startAutoplay=Lancer lecture automatique
|
||||
autoplaySettings=Options de lecture automatique
|
||||
startBrowserFullscreen=Lancer navigateur en mode plein écran
|
||||
switchToLiveRaceAutomatically=Passer automatiquement à la course en direct
|
||||
timeBeforeRaceStart=durée avant le départ de la course (en secondes)
|
||||
errorTryingToGetEvents=Erreur lors de la tentative d''accès aux manifestations : {0}
|
||||
errorTryingToGetEvents=Erreur lors de la tentative d''accès aux evénements : {0}
|
||||
showXYDiagram=Afficher diagramme x-y
|
||||
xyDiagram=Diagramme x-y
|
||||
boatSpeed=Vitesse du bateau
|
||||
confidence=Fiabilité
|
||||
createDefaultSettingsForAllRegattas=Créer des options par défaut pour toutes les régates...
|
||||
noOverallEventSelected=Aucune manifestation globale sélectionnée...
|
||||
errorTryingToCreateNewEvent=Erreur lors de la tentative de création de la nouvelle manifestation {0} : {1}
|
||||
createNewEvent=Créer manifestation
|
||||
noOverallEventSelected=Aucune evénement globale sélectionnée...
|
||||
errorTryingToCreateNewEvent=Erreur lors de la tentative de création de la nouvelle evénement {0} : {1}
|
||||
createNewEvent=Créer evénement
|
||||
noFleetsDefined=Aucune flotte définie
|
||||
successfullyCreatedRegattas=Création des régates réussie
|
||||
errorTryingToRegisterRacesForTracking=Erreur lors de la tentative d''enregistrement des courses {0} pour le suivi : {1}. Vérifiez la syntaxe de l''URL stockée/du direct.
|
||||
@@ -1242,7 +1244,7 @@ inviteSelectedCompetitors=Inviter concurrents sélectionnés
|
||||
notAllCompetitorsProvideEmail=Les concurrents n''ont pas tous fourni un e-mail.
|
||||
sendingMailsFailed=Échec de l''envoi des e-mails
|
||||
sendingMailsSuccessful=Envoi des e-mails réussi
|
||||
selectEventForInvitation=Sélectionnez une manifestation pour l''invitation.
|
||||
selectEventForInvitation=Sélectionnez une evénement pour l''invitation.
|
||||
imageURL=URL d''image
|
||||
upload=Charger
|
||||
removeResult=Supprimer opération : {0} {1}
|
||||
@@ -1251,6 +1253,7 @@ fileUploadResult=Chargement du fichier : {0} {1}.\nEn cas d''erreur, vérifiez
|
||||
removeUploadedFile=Supprimer fichier chargé
|
||||
showCompetitorSailIdColumn=ID de voile
|
||||
showCompetitorFullNameColumn=Nom complet du concurrent
|
||||
showCompetitorNationalityColumn=Nationalité du concurrent
|
||||
loadingDimensionValues=Chargement des valeurs de dimension
|
||||
runningQuery=Requête en cours
|
||||
inviteBuoyTenders=Inviter navire baliseur
|
||||
@@ -1310,15 +1313,15 @@ clickToToggleWindStreamlets=Touchez/cliquez pour afficher ou masquer les couloir
|
||||
startLineToFirstMarkTriangle=Distance entre le départ et la première marque ({0} m)
|
||||
dataMiningComponentsHaveBeenUpdated=Les composants d''exploration de données ont été mis à jour.
|
||||
dataMiningComponentsNeedReloadDialogMessage=Cliquez sur Recharger pour recharger les composants maintenant. Les données actuellement affichées seront ignorées et une requête par défaut sera exécutée.n\Cliquez sur Fermer pour ne rien faire. L''exploration de données ne fonctionnera pas correctement tant que les composants n''auront pas été rechargés.
|
||||
noDataForEvent=Il n''y a pas encore de données pour cette manifestation.
|
||||
noDataForEvent=Il n''y a pas encore de données pour cette evénement.
|
||||
countriesCount={0,number} pays
|
||||
countriesCount[one]={0,number} pays
|
||||
racesCount={0,number} courses
|
||||
racesCount[one]={0,number} course
|
||||
trackedRacesCount={0,number} courses suivies
|
||||
trackedRacesCount[one]={0,number} course suivie
|
||||
eventsCount={0,number} manifestations
|
||||
eventsCount[one]={0,number} manifestation
|
||||
eventsCount={0,number} evénements
|
||||
eventsCount[one]={0,number} evénement
|
||||
competitorsCount={0,number} concurrents
|
||||
courseAreaName=Zone de course : {0}
|
||||
competitorsCount[one]={0,number} concurrents
|
||||
@@ -1364,7 +1367,7 @@ raceCalculatedTimeAtEstimatedArrivalAtCompetitorFarthestAheadInSeconds=Temps cal
|
||||
raceCalculatedTimeAtEstimatedArrivalAtCompetitorFarthestAheadInSecondsTooltip=Temps calculé selon l''arrivée estimée du concurrent qui est actuellement en tête de la course ; \nestimation basée sur la VMG dans la portion de parcours actuelle, équivaut à la performance (calculée) du bateau le plus rapide dans toutes les portions de parcours suivantes.
|
||||
sailorInfo=Informations concurrents
|
||||
sailorInfoLongText=Résultats officiels, réclamations, météo marine
|
||||
eventQuickfinder=Quickfinder manifestation
|
||||
eventQuickfinder=Quickfinder evénement
|
||||
regattaQuickfinder=Quickfinder régate
|
||||
resultsQuickfinder=Quickfinder résultats
|
||||
racesQuickfinder=Quickfinder courses
|
||||
@@ -1386,7 +1389,7 @@ billionValue={0,number,#0.0} bil
|
||||
noResults=Aucun résultat disponible pour l''instant.
|
||||
noNews=Aucune actualité disponible.
|
||||
pointsValue={0,number,#0.00}
|
||||
openLeaderboard=Ouvrir palmarès
|
||||
openLeaderboard=Ouvrir classement
|
||||
now=Maintenant
|
||||
minutesAgo=Il y a {0} min.
|
||||
hoursAgo=Il y a {0} h.
|
||||
@@ -1419,8 +1422,8 @@ videosCount={0,number} vidéos
|
||||
videosCount[one]={0,number} vidéo
|
||||
photosCount={0,number} photos
|
||||
photosCount[one]={0,number} photo
|
||||
eventsHaveTakenPlace={0} manifestations ont eu lieu.
|
||||
eventsHaveTakenPlace[one]=Une manifestation a eu lieu.
|
||||
eventsHaveTakenPlace={0} evénements ont eu lieu.
|
||||
eventsHaveTakenPlace[one]=Une evénement a eu lieu.
|
||||
raceOffice=Bureau de course
|
||||
analyze=Analyser
|
||||
dataMiningSettings=Options de l''exploration de données
|
||||
@@ -1434,7 +1437,7 @@ actionWatch=Regarder
|
||||
actionAnalyze=Analyser
|
||||
denoteAllRacesForRaceLogTrackingShorctut=Raccourci pour marquer toutes les courses pour le suivi par journaux de course
|
||||
registerCompetitors=Inscrire les concurrents
|
||||
doYouWantToCreateADefaultRegattaLeaderboard=Voulez-vous créer un palmarès de régate par défaut ?
|
||||
doYouWantToCreateADefaultRegattaLeaderboard=Voulez-vous créer un classement de régate par défaut ?
|
||||
copyCourse=Copier course
|
||||
copyCompetitors=Copier concurrents
|
||||
smartphoneTracking=Suivi smartphone
|
||||
@@ -1462,7 +1465,7 @@ errorLoadingDataWithTryAgain=Erreur lors du chargement des données. Nouvel essa
|
||||
addGalleryPhoto=Ajouter photo de la galerie
|
||||
addStageImage=Ajouter image d''étape
|
||||
addTeaserImage=Ajouter image d''accroche
|
||||
addEventLogo=Ajouter logo de la manifestation
|
||||
addEventLogo=Ajouter logo de la evénement
|
||||
noImagesDefinedYet=Aucune image définie pour le moment
|
||||
imageSizeError=La taille de l''image {0} ne correspond pas. La largeur doit être comprise entre {1} et {2} pixels et la hauteur entre {3} et {4} pixels.
|
||||
couldNotRetrieveImageSizeYet=Impossible de récupérer la largeur et la hauteur de l''image pour l''instant
|
||||
@@ -1476,7 +1479,7 @@ competitorRegistrationsOnRaceDisabled=Les inscriptions des concurrents sont dés
|
||||
warningForDisabledCompetitors=Les concurrents suivants ne peuvent pas être inscrits à cette course : {0}
|
||||
competitorToolTipMessage={0} a déjà été affecté à la flotte {2} dans la course {3} et ne peut donc pas être affecté à la flotte {1} dans la même course.
|
||||
addMarkToRegatta=Ajouter marque à la régate
|
||||
selectALeaderboardGroup=Sélectionner groupe de palmarès…
|
||||
selectALeaderboardGroup=Sélectionner groupe de classement…
|
||||
pleaseSelect=Sélectionnez
|
||||
requiresValidRegatta=Pour identifier la course à afficher, cette page nécessite une régate valide, une colonne de course et un nom de flotte.
|
||||
couldNotObtainRace=Impossible de trouver une course ayant le nom {1} pour la flotte {2} pour une régate ayant le nom {0} : {3}
|
||||
@@ -1488,7 +1491,7 @@ profile=Profil
|
||||
showOnlyCompetitorsOfLog=Afficher uniquement concurrents inscrits dans le journal
|
||||
confirmLosingCompetitorEditsWhenTogglingLogBasedView=Cette action réinitialisera les modifications non enregistrées apportées aux concurrents.\nVoulez-vous vraiment continuer ?
|
||||
removalOfMarkDisabledMayBeUsedInRaces=Suppression désactivée, marques utilisées dans les courses {0}
|
||||
createDefaultLeaderboardGroup=Voulez-vous créer un groupe de palmarès par défaut pour votre manifestation ?
|
||||
createDefaultLeaderboardGroup=Voulez-vous créer un groupe de classement par défaut pour votre evénement ?
|
||||
pleaseCreateAtLeastOneMappingBy=Créez au moins un mappage en sélectionnant d''abord une piste sur la gauche, puis une marque ou un concurrent sur la droite.
|
||||
matcherType=Type de comparateur
|
||||
matchingDevices=Appareils correspondants
|
||||
@@ -1499,10 +1502,10 @@ create=Créer
|
||||
thereIsAlreadyAConfigurationForThisDevice=Une configuration existe déjà pour cet appareil.
|
||||
enterDeviceIdentifierName=Saisissez un nom d''identifiant.
|
||||
administration=Administration
|
||||
pleaseSelectALeaderboardGroup=Sélectionnez un groupe de palmarès.
|
||||
linkLeaderboardToLeaderboardGroupOfEvent=Liez le palmarès au groupe de palmarès de la manifestation.
|
||||
doYouWantToLinkLeaderboardToLeaderboardGroupOfEvent=Liez le palmarès {0} à un groupe de palmarès de la manifestation {1}.
|
||||
failedToLinkLeaderboardToLeaderboardGroup=La liaison du palmarès {0} au groupe de palmarès {1} a échoué.
|
||||
pleaseSelectALeaderboardGroup=Sélectionnez un groupe de classement.
|
||||
linkLeaderboardToLeaderboardGroupOfEvent=Liez le classement au groupe de classement de la evénement.
|
||||
doYouWantToLinkLeaderboardToLeaderboardGroupOfEvent=Liez le classement {0} à un groupe de classement de la evénement {1}.
|
||||
failedToLinkLeaderboardToLeaderboardGroup=La liaison du classement {0} au groupe de classement {1} a échoué.
|
||||
createDefaultRegatta=Créer régate par défaut
|
||||
doYouWantToCreateADefaultRegatta=Voulez-vous créer une régate par défaut ?
|
||||
defaultLocale=Par défaut
|
||||
@@ -1538,8 +1541,8 @@ fixPositionSuccessfullyEdited=Modification de la position du point réussie.
|
||||
fixSuccessfullyRemoved=Suppression du point réussie.
|
||||
dragToChangePosition=Glissez pour modifier la position.\nClic droit pour ouvrir le menu permettant la suppression.
|
||||
moveFix=Déplacer point
|
||||
manage2SailEvent=Manifestation Manage2Sail
|
||||
noEventsYet=Aucune manifestation pour l''instant.
|
||||
manage2SailEvent=Evénement Manage2Sail
|
||||
noEventsYet=Aucune evénement pour l''instant.
|
||||
selectCompetitorImportProvider=Sélectionnez un fournisseur d''importation de concurrents...
|
||||
selectResultImportProvider=Sélectionnez un fournisseur d''importation de résultats...
|
||||
buildVersion=Version de build
|
||||
@@ -1562,10 +1565,10 @@ transferStarted=Lecture des données
|
||||
transferCompleted=Transfert des données terminé. Initialisation de l''opération d''importation.
|
||||
importInit=Initialisation de l''importation
|
||||
importWait=En attente de la fin d''autres opérations d''importation
|
||||
importLeaderboardGroups=Importation de groupes de palmarès en cours...
|
||||
importLeaderboardGroups=Importation de groupes de classement en cours...
|
||||
importWindTracks=Importation de pistes de vent en cours...
|
||||
importSensorFixes=Importation de points capteurs en cours...
|
||||
updateEventLeaderboardGroupLinks=Mise à jour des liens du groupe de palmarès de la manifestation
|
||||
updateEventLeaderboardGroupLinks=Mise à jour des liens du groupe de classement de la evénement
|
||||
strategySimulatorTitle=Simulateur de stratégies
|
||||
controlSettings=Options de contrôle
|
||||
windDisplay=Affichage du vent
|
||||
@@ -1641,10 +1644,10 @@ chartSelectionHint=Astuce : Vous pouvez également utiliser le palmarès (sur l
|
||||
chooseALanguage=Sélectionner une langue
|
||||
solutions=Solutions
|
||||
blog=Blog
|
||||
officalEventWebsite=Site Web officiel de la manifestation
|
||||
officalEventWebsite=Site Web officiel de la evénement
|
||||
moreInfo=Plus d''infos
|
||||
viewAnalysis=Afficher analyses
|
||||
overallLeaderboard=Palmarès général
|
||||
overallLeaderboard=Classement général
|
||||
pleaseTryAgain=Veuillez réessayer...
|
||||
reloadPage=Recharger la page
|
||||
errorMessageLoadingData=Une erreur s''est produite pendant le chargement des données pour cette page.
|
||||
@@ -1675,11 +1678,11 @@ footerPrivacy=Confidentialité des données
|
||||
footerFeedback=Commentaires
|
||||
headerLogo=Sailing Analytics
|
||||
headerSearchPlaceholder=Rechercher
|
||||
mainEventShowAll=Afficher toutes les manifestations
|
||||
mainEventTitle=Manifestations les plus récentes du monde de la voile
|
||||
mainMediaSubtitle=Oubliez le quotidien grâce à des images époustouflantes de l''édition la plus récente de votre manifestation de voile préférée.
|
||||
mainEventShowAll=Afficher toutes les evénements
|
||||
mainEventTitle=Evénements les plus récentes du monde de la voile
|
||||
mainMediaSubtitle=Oubliez le quotidien grâce à des images époustouflantes de l''édition la plus récente de votre evénement de voile préférée.
|
||||
mainMediaTitle=Les photographes adorent la voile.
|
||||
mainMediaVideosSubtitle=Plongez dans le monde de la voile et accédez à encore plus de vidéos de nos manifestations les plus récentes.
|
||||
mainMediaVideosSubtitle=Plongez dans le monde de la voile et accédez à encore plus de vidéos de nos evénements les plus récentes.
|
||||
mainMediaVideosTitle=Vidéos récentes
|
||||
searchResultHeaderButton=Rechercher
|
||||
searchResultHeaderLabel=Votre recherche
|
||||
@@ -1773,9 +1776,12 @@ floatNumber=Flottant
|
||||
integer=Entier
|
||||
sampleColor=Échantillon de couleur
|
||||
sharedSettingsLink=Lier aux options
|
||||
leaderboardPage=Page du palmarès
|
||||
leaderboardPage=Page du classement
|
||||
makeDefault=Définir par défaut
|
||||
makeDefaultInProgress=En cours...
|
||||
settingsSavedMessage=Vos options actuelles ont correctement été définies comme options par défaut.
|
||||
settingsSaveErrorMessage=Une erreur s''est produite lors de la définition de vos options comme options par défaut.
|
||||
showLiveNow=Afficher "En direct"
|
||||
useOnlyOneOfStartTimeInferenceAndControlTrackingFromStartAndFinishTimes=Utilisez "Interférence temporelle de départ" ou bien "Contrôler suivi à partir des heures de départ et d''arrivée", mais pas les deux.
|
||||
unknownLeaderboardType=Type de palmarès {0} inconnu
|
||||
selectCompetitorsToEliminate=Sélectionner des concurrents à éliminer
|
||||
@@ -455,6 +455,7 @@ scoringSchemeHighPointFirstGetsTwelveOrEight2017Description=得点数による
|
||||
scoringSystem=得点方式
|
||||
createFlexibleLeaderboard=フレキシブルリーダーボード登録
|
||||
createRegattaLeaderboard=レガッタリーダーボード登録
|
||||
createRegattaLeaderboardWithEliminations=レガッタリーダーボード登録 (予選あり)
|
||||
createDefaultRegattaLeaderboard=レガッタリーダーボード初期登録
|
||||
editFlexibleLeaderboard=フレキシブルリーダーボード編集
|
||||
editRegattaLeaderboard=レガッタリーダーボード編集
|
||||
@@ -595,8 +596,8 @@ applyMinimumWindConfidence=最小風信頼度の適用
|
||||
applyMinimumWindConfidenceTooltip=選択すると、上にあるボックスの値が、生成時に最小有効風信頼度として使用されます。
|
||||
windRangeDistribution=風範囲の分布
|
||||
pleaseSeeToolTips=ツールチップが利用できる場所でそれを表示するには、オプションの上をホバーしてください。
|
||||
competitorColumnTooltip=この競技者の乗員の名前です。
|
||||
competitorNationalityColumnTooltip=Nationality of this competitor.
|
||||
competitorColumnTooltip=この競技者のセーラーの名前です。
|
||||
competitorNationalityColumnTooltip=この競技者の国籍です。
|
||||
sailIdColumnTooltip=競技者の国の国旗と競技者のセールナンバーを表示します。
|
||||
rankColumnTooltip=レガッタにおけるこの競技者の全体ランクです。
|
||||
carryColumnTooltip=以前のレースから持ち越された得点です。
|
||||
@@ -1252,7 +1253,7 @@ fileUploadResult=ファイルアップロード: {0} {1}\nエラー発生の場
|
||||
removeUploadedFile=アップロード済ファイルの削除
|
||||
showCompetitorSailIdColumn=帆走 ID
|
||||
showCompetitorFullNameColumn=競技者氏名
|
||||
showCompetitorNationalityColumn=Competitor Nationality
|
||||
showCompetitorNationalityColumn=競技者国籍
|
||||
loadingDimensionValues=次元値ロード中
|
||||
runningQuery=クエリ実行中
|
||||
inviteBuoyTenders=ブイ入札の招待
|
||||
@@ -1780,4 +1781,7 @@ makeDefault=デフォルトを設定
|
||||
makeDefaultInProgress=実行中です...
|
||||
settingsSavedMessage=現在の設定がデフォルトとして設定されました
|
||||
settingsSaveErrorMessage=使用している設定をデフォルトとして設定する際にエラーが発生しました
|
||||
showLiveNow="実況中" を表示
|
||||
useOnlyOneOfStartTimeInferenceAndControlTrackingFromStartAndFinishTimes="推定スタート時刻" および "スタート/フィニッシュ時刻からのコントロール追跡" は 1 つだけ使用してください
|
||||
unknownLeaderboardType=未知のリーダーボードタイプ {0}
|
||||
selectCompetitorsToEliminate=予選敗退の競技者を選択
|
||||
@@ -455,6 +455,7 @@ scoringSchemeHighPointFirstGetsTwelveOrEight2017Description=Pontuação em ponto
|
||||
scoringSystem=Sistema de pontuação
|
||||
createFlexibleLeaderboard=Criar painel de classificação flexível
|
||||
createRegattaLeaderboard=Criar painel de classificação de regata
|
||||
createRegattaLeaderboardWithEliminations=Criar painel de classificação de regata com eliminatórias
|
||||
createDefaultRegattaLeaderboard=Criar painel de classificação de regata padrão
|
||||
editFlexibleLeaderboard=Processar painel de classificação flexível
|
||||
editRegattaLeaderboard=Processar painel de classificação de regata
|
||||
@@ -595,7 +596,8 @@ applyMinimumWindConfidence=Aplicar confiança de vento mínima
|
||||
applyMinimumWindConfidenceTooltip=Se marcado, o valor na caixa acima será utilizado como a confiança de vento válida mínima durante a geração.
|
||||
windRangeDistribution=Distribuição na amplitude do vento.
|
||||
pleaseSeeToolTips=Passe com o mouse sobre as opções para ver os tooltips sempre que disponíveis.
|
||||
competitorColumnTooltip=Nomes dos membros deste competidor.
|
||||
competitorColumnTooltip=Nomes dos velejadores deste competidor.
|
||||
competitorNationalityColumnTooltip=Nacionalidade deste competidor.
|
||||
sailIdColumnTooltip=Exibe a bandeira do país e o número da vela do competidor.
|
||||
rankColumnTooltip=A posição geral deste competidor na regata.
|
||||
carryColumnTooltip=Pontos transferidos de corridas anteriores.
|
||||
@@ -1251,6 +1253,7 @@ fileUploadResult=Carregamento de arquivo: {0} {1}.\nEm caso de erro, verifique s
|
||||
removeUploadedFile=Remover arquivo carregado
|
||||
showCompetitorSailIdColumn=ID da vela
|
||||
showCompetitorFullNameColumn=Nome completo do competidor
|
||||
showCompetitorNationalityColumn=Nacionalidade do competidor
|
||||
loadingDimensionValues=Carregando valores de dimensão
|
||||
runningQuery=Executando consulta
|
||||
inviteBuoyTenders=Convidar navios-balizadores
|
||||
@@ -1778,4 +1781,7 @@ makeDefault=Definir como padrão
|
||||
makeDefaultInProgress=Em andamento...
|
||||
settingsSavedMessage=Suas configurações atuais foram definidas com êxito como padrão
|
||||
settingsSaveErrorMessage=Ocorreu um erro ao definir suas configurações como padrão
|
||||
showLiveNow=Exibir "Ao vivo agora"
|
||||
useOnlyOneOfStartTimeInferenceAndControlTrackingFromStartAndFinishTimes=Utilizar só um de "Inferência da hora de partida" e "Rastreamento de controle das horas de partida e chegada"
|
||||
unknownLeaderboardType=Tipo de painel de classificação desconhecido {0}
|
||||
selectCompetitorsToEliminate=Selecionar competidores a eliminar
|
||||
@@ -455,6 +455,7 @@ scoringSchemeHighPointFirstGetsTwelveOrEight2017Description=Оценка в ба
|
||||
scoringSystem=Система оценок
|
||||
createFlexibleLeaderboard=Создать гибкую таблицу лидеров
|
||||
createRegattaLeaderboard=Создать таблицу лидеров регаты
|
||||
createRegattaLeaderboardWithEliminations=Создать таблицу лидеров регаты с турами на выбывание
|
||||
createDefaultRegattaLeaderboard=Создать таблицу лидеров регаты по умолчанию
|
||||
editFlexibleLeaderboard=Изменить гибкую таблицу лидеров
|
||||
editRegattaLeaderboard=Изменить таблицу лидеров регаты
|
||||
@@ -595,8 +596,8 @@ applyMinimumWindConfidence=Применить минимальную досто
|
||||
applyMinimumWindConfidenceTooltip=Если установлено, указанное выше значение будет использоваться как минимально допустимая достоверность ветра при генерировании.
|
||||
windRangeDistribution=Распределение в диапазоне ветра.
|
||||
pleaseSeeToolTips=Наведите указатель на параметр, чтобы просмотреть всплывающую подсказку (если доступна).
|
||||
competitorColumnTooltip=Имена членов данного участника.
|
||||
competitorNationalityColumnTooltip=Nationality of this competitor.
|
||||
competitorColumnTooltip=Имена членов экипажа данного участника.
|
||||
competitorNationalityColumnTooltip=Государственная принадлежность участника.
|
||||
sailIdColumnTooltip=Показывает флаг страны и хвостовой номер участника.
|
||||
rankColumnTooltip=Общий ранг данного участника в регате.
|
||||
carryColumnTooltip=Баллы, перенесенные из других гонок.
|
||||
@@ -1252,7 +1253,7 @@ fileUploadResult=Отправка файла: {0} {1}.\nВ случае ошиб
|
||||
removeUploadedFile=Удалить отправленный файл
|
||||
showCompetitorSailIdColumn=Ид. паруса
|
||||
showCompetitorFullNameColumn=Полное имя участника
|
||||
showCompetitorNationalityColumn=Competitor Nationality
|
||||
showCompetitorNationalityColumn=Государственная принадлежность участника
|
||||
loadingDimensionValues=Загрузка значений измерения
|
||||
runningQuery=Выполнение запроса
|
||||
inviteBuoyTenders=Пригласить лоцманов
|
||||
@@ -1780,4 +1781,7 @@ makeDefault=Использовать по умолчанию
|
||||
makeDefaultInProgress=Выполняется...
|
||||
settingsSavedMessage=Текущие настройки успешно заданы для использования по умолчанию
|
||||
settingsSaveErrorMessage=При задании настроек для использования по умолчанию возникла ошибка
|
||||
showLiveNow=Показать "Оперативные данные"
|
||||
useOnlyOneOfStartTimeInferenceAndControlTrackingFromStartAndFinishTimes=Использовать только один из параметров "Вывод о времени старта" и "Контролировать отслеживание от времени старта и финиша"
|
||||
unknownLeaderboardType=Неизвестный тип таблицы лидеров {0}
|
||||
selectCompetitorsToEliminate=Выберите участников для исключения
|
||||
@@ -455,6 +455,7 @@ scoringSchemeHighPointFirstGetsTwelveOrEight2017Description=得分。获胜者
|
||||
scoringSystem=记分系统
|
||||
createFlexibleLeaderboard=创建灵活的积分榜
|
||||
createRegattaLeaderboard=创建比赛积分榜
|
||||
createRegattaLeaderboardWithEliminations=通过淘汰创建比赛积分榜
|
||||
createDefaultRegattaLeaderboard=创建默认的比赛积分榜
|
||||
editFlexibleLeaderboard=编辑灵活的积分榜
|
||||
editRegattaLeaderboard=编辑比赛积分榜
|
||||
@@ -595,8 +596,8 @@ applyMinimumWindConfidence=应用最小风力置信度
|
||||
applyMinimumWindConfidenceTooltip=如果选中,以上方框中的值将在生成期间用作最小有效的风力置信度。
|
||||
windRangeDistribution=风力范围分布。
|
||||
pleaseSeeToolTips=请将鼠标移到选项,查看可用的工具提示。
|
||||
competitorColumnTooltip=此参赛队的成员姓名。
|
||||
competitorNationalityColumnTooltip=Nationality of this competitor.
|
||||
competitorColumnTooltip=此参赛队的水手姓名。
|
||||
competitorNationalityColumnTooltip=此参赛队的国籍。
|
||||
sailIdColumnTooltip=显示参赛队所代表的国家国旗和帆号。
|
||||
rankColumnTooltip=参赛队在比赛中的总名次。
|
||||
carryColumnTooltip=前几个轮次的比赛中的得分。
|
||||
@@ -1252,7 +1253,7 @@ fileUploadResult=文件上传: {0} {1}。\n如果出错,请检查文件存
|
||||
removeUploadedFile=移除上传的文件
|
||||
showCompetitorSailIdColumn=帆号
|
||||
showCompetitorFullNameColumn=参赛队全名
|
||||
showCompetitorNationalityColumn=Competitor Nationality
|
||||
showCompetitorNationalityColumn=参赛队国籍
|
||||
loadingDimensionValues=正在加载尺寸值
|
||||
runningQuery=运行查询
|
||||
inviteBuoyTenders=邀请浮标供应船
|
||||
@@ -1780,4 +1781,7 @@ makeDefault=设为默认值
|
||||
makeDefaultInProgress=正在进行...
|
||||
settingsSavedMessage=当前设置已成功设为默认设置
|
||||
settingsSaveErrorMessage=将设置设为默认设置时发生错误
|
||||
showLiveNow=显示“现在直播”
|
||||
useOnlyOneOfStartTimeInferenceAndControlTrackingFromStartAndFinishTimes=仅使用“开始时间推断”和“从开始和结束时间控制跟踪”中的其中一个
|
||||
unknownLeaderboardType=积分榜类型{0}未知
|
||||
selectCompetitorsToEliminate=选择要淘汰的参赛队
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.sap.sailing.gwt.ui.client.shared.racemap;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
|
||||
public class DefaultQuickRanksDTOProvider implements QuickRanksDTOProvider {
|
||||
private LinkedHashMap<String, QuickRankDTO> quickRanksFromServer;
|
||||
|
||||
@Override
|
||||
public void quickRanksReceivedFromServer(LinkedHashMap<String, QuickRankDTO> quickRanksFromServer) {
|
||||
this.quickRanksFromServer = quickRanksFromServer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LinkedHashMap<String, QuickRankDTO> getQuickRanks() {
|
||||
return quickRanksFromServer;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.sap.sailing.gwt.ui.client.shared.racemap;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
|
||||
import com.sap.sailing.gwt.ui.raceboard.RaceBoardPanel;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceMapDataDTO;
|
||||
|
||||
/**
|
||||
* The {@link QuickRankDTO} objects stored in the {@link RaceMap}'s {@code quickRanks} field may be obtained in
|
||||
* different ways. This interface abstracts the different strategies for how this may happen. If a {@link RaceMap} is
|
||||
* used in the context of a {@link RaceBoardPanel} which is a {@link LeaderboardUpdateListener}, {@link LeaderboardDTO}
|
||||
* objects can provide the up-to-date information for all aspects of the {@link QuickRankDTO} objects required.
|
||||
* Otherwise, the {@link QuickRankDTO} objects as received in the {@link RaceMapDataDTO} objects can be used. This may
|
||||
* not always be consistent and in sync with the leaderboard being shown for a particular time point because their
|
||||
* calculation in the back-end happens in a lower-priority thread, hence may be a bit delayed in a server under high
|
||||
* load. See also bug 4175.
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public interface QuickRanksDTOProvider {
|
||||
/**
|
||||
* The strategy may or may not use this quick ranks information provided directly from the server. This information
|
||||
* may have been provided with some delay and may be slightly inconsistent with a {@link LeaderboardDTO leaderboard}
|
||||
* that was delivered through a different channel. Therefore, a strategy that has access to a current
|
||||
* {@link LeaderboardDTO leaderboard} should ignore this call if it already has quick ranks information available
|
||||
* from a leaderboard.
|
||||
*
|
||||
* @param quickRanksFromServer keys are the competitor IDs as strings
|
||||
*/
|
||||
void quickRanksReceivedFromServer(LinkedHashMap<String, QuickRankDTO> quickRanksFromServer);
|
||||
|
||||
/**
|
||||
* @return keys are the {@link CompetitorDTO#getIdAsString() competitor IDs are string}, values are the quick ranks
|
||||
* pertaining to the competitors whose IDs are provided as keys
|
||||
*/
|
||||
LinkedHashMap<String, QuickRankDTO> getQuickRanks();
|
||||
}
|
||||
@@ -8,7 +8,6 @@ import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
@@ -76,11 +75,11 @@ import com.sap.sailing.domain.common.Bounds;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.ManeuverType;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.WindSourceType;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.impl.DegreeBearingImpl;
|
||||
import com.sap.sailing.domain.common.impl.DegreePosition;
|
||||
import com.sap.sailing.domain.common.impl.MeterDistance;
|
||||
@@ -349,18 +348,12 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
|
||||
private int lastLegNumber;
|
||||
|
||||
/**
|
||||
* The last quick ranks received from a call to {@link SailingServiceAsync#getQuickRanks(RaceIdentifier, Date, AsyncCallback)} upon
|
||||
* the last {@link #timeChanged(Date, Date)} event. Therefore, the ranks listed here correspond to the {@link #timer}'s time.
|
||||
* The strategy for maintaining and delivering the "quick ranks" information. The provider will be informed about
|
||||
* quick ranks received from a {@link RaceMapDataDTO#quickRanks} field but may choose to ignore this information, e.g.,
|
||||
* if it can assume that more current information about ranks and leg numbers is available from a {@link LeaderboardDTO}.
|
||||
*/
|
||||
private LinkedHashMap<CompetitorDTO, QuickRankDTO> quickRanks;
|
||||
private final QuickRanksDTOProvider quickRanksDTOProvider;
|
||||
|
||||
/**
|
||||
* Taken from {@link RaceMapDataDTO#competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber}; tells the
|
||||
* windward distances traveled and the leg numbers in which the respective competitor is.
|
||||
*/
|
||||
private LinkedHashMap<CompetitorDTO, Integer> competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber;
|
||||
|
||||
|
||||
private final CombinedWindPanel combinedWindPanel;
|
||||
private final TrueNorthIndicatorPanel trueNorthIndicatorPanel;
|
||||
private final FlowPanel topLeftControlsWrapperPanel;
|
||||
@@ -418,10 +411,11 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
|
||||
public RaceMap(Component<?> parent, ComponentContext<?> context, RaceMapLifecycle raceMapLifecycle,
|
||||
RaceMapSettings raceMapSettings,
|
||||
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
|
||||
ErrorReporter errorReporter, Timer timer, CompetitorSelectionProvider competitorSelection, StringMessages stringMessages,
|
||||
RegattaAndRaceIdentifier raceIdentifier, RaceMapResources raceMapResources,
|
||||
boolean showHeaderPanel) {
|
||||
ErrorReporter errorReporter, Timer timer, CompetitorSelectionProvider competitorSelection, RaceCompetitorSet raceCompetitorSet,
|
||||
StringMessages stringMessages, RegattaAndRaceIdentifier raceIdentifier,
|
||||
RaceMapResources raceMapResources, boolean showHeaderPanel, QuickRanksDTOProvider quickRanksDTOProvider) {
|
||||
super(parent, context);
|
||||
this.quickRanksDTOProvider = quickRanksDTOProvider;
|
||||
this.raceMapLifecycle = raceMapLifecycle;
|
||||
this.stringMessages = stringMessages;
|
||||
this.sailingService = sailingService;
|
||||
@@ -442,7 +436,7 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
|
||||
courseMarkOverlays = new HashMap<String, CourseMarkOverlay>();
|
||||
courseMarkClickHandlers = new HashMap<String, HandlerRegistration>();
|
||||
this.competitorSelection = competitorSelection;
|
||||
this.raceCompetitorSet = new RaceCompetitorSet(competitorSelection);
|
||||
this.raceCompetitorSet = raceCompetitorSet;
|
||||
competitorSelection.addCompetitorSelectionChangeListener(this);
|
||||
settings = raceMapSettings;
|
||||
coordinateSystem = new DelegateCoordinateSystem(new IdentityCoordinateSystem());
|
||||
@@ -972,9 +966,7 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
|
||||
" in regatta "+raceIdentifier.getRegattaName(), e);
|
||||
}
|
||||
}
|
||||
quickRanks = raceMapDataDTO.quickRanks;
|
||||
competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber =
|
||||
raceMapDataDTO.competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber;
|
||||
quickRanksDTOProvider.quickRanksReceivedFromServer(raceMapDataDTO.quickRanks);
|
||||
if (isSimulationEnabled && settings.isShowSimulationOverlay()) {
|
||||
lastLegNumber = raceMapDataDTO.coursePositions.currentLegNumber;
|
||||
simulationOverlay.updateLeg(Math.max(lastLegNumber, 1), /* clearCanvas */ false, raceMapDataDTO.simulationResultVersion);
|
||||
@@ -1361,17 +1353,16 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
|
||||
/**
|
||||
* Returns a pair whose first component is the leg number (one-based) of the competitor returned as the second component.
|
||||
*/
|
||||
private com.sap.sse.common.Util.Pair<Integer, CompetitorDTO> getFarthestAheadVisibleCompetitorWithOneBasedLegNumber(
|
||||
private com.sap.sse.common.Util.Pair<Integer, CompetitorDTO> getBestVisibleCompetitorWithOneBasedLegNumber(
|
||||
Iterable<CompetitorDTO> competitorsToShow) {
|
||||
CompetitorDTO leadingCompetitorDTO = null;
|
||||
int legOfLeaderCompetitor = -1;
|
||||
// this only works because the quickRanks are sorted
|
||||
for (Entry<CompetitorDTO, Integer> competitorsByWindwardDistanceTraveledAndOneBasedLegNumber :
|
||||
competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber.entrySet()) {
|
||||
if (Util.contains(competitorsToShow, competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getKey()) &&
|
||||
competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getValue() != null) {
|
||||
leadingCompetitorDTO = competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getKey();
|
||||
legOfLeaderCompetitor = competitorsByWindwardDistanceTraveledAndOneBasedLegNumber.getValue();
|
||||
for (QuickRankDTO competitorFromBestToWorstAndOneBasedLegNumber : quickRanksDTOProvider.getQuickRanks().values()) {
|
||||
if (Util.contains(competitorsToShow, competitorFromBestToWorstAndOneBasedLegNumber.competitor) &&
|
||||
competitorFromBestToWorstAndOneBasedLegNumber.legNumberOneBased != 0) {
|
||||
leadingCompetitorDTO = competitorFromBestToWorstAndOneBasedLegNumber.competitor;
|
||||
legOfLeaderCompetitor = competitorFromBestToWorstAndOneBasedLegNumber.legNumberOneBased;
|
||||
return new com.sap.sse.common.Util.Pair<Integer, CompetitorDTO>(legOfLeaderCompetitor, leadingCompetitorDTO);
|
||||
}
|
||||
}
|
||||
@@ -1380,11 +1371,11 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
|
||||
|
||||
final static Distance advantageLineLength = new MeterDistance(1000); // TODO this should probably rather scale with the visible area of the map; bug 616
|
||||
private void showAdvantageLine(Iterable<CompetitorDTO> competitorsToShow, Date date, long timeForPositionTransitionMillis) {
|
||||
if (map != null && lastRaceTimesInfo != null && quickRanks != null && lastCombinedWindTrackInfoDTO != null) {
|
||||
if (map != null && lastRaceTimesInfo != null && quickRanksDTOProvider.getQuickRanks() != null && lastCombinedWindTrackInfoDTO != null) {
|
||||
boolean drawAdvantageLine = false;
|
||||
if (settings.getHelpLinesSettings().isVisible(HelpLineTypes.ADVANTAGELINE)) {
|
||||
// find competitor with highest rank
|
||||
com.sap.sse.common.Util.Pair<Integer, CompetitorDTO> visibleLeaderInfo = getFarthestAheadVisibleCompetitorWithOneBasedLegNumber(competitorsToShow);
|
||||
com.sap.sse.common.Util.Pair<Integer, CompetitorDTO> visibleLeaderInfo = getBestVisibleCompetitorWithOneBasedLegNumber(competitorsToShow);
|
||||
// the boat fix may be null; may mean that no positions were loaded yet for the leading visible boat;
|
||||
// don't show anything
|
||||
GPSFixDTOWithSpeedWindTackAndLegType lastBoatFix = null;
|
||||
@@ -1979,9 +1970,9 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
|
||||
infoText.append(competitorDTO.getSailID()).append("\n");
|
||||
infoText.append(NumberFormatterFactory.getDecimalFormat(1).format(gpsFixDTO.speedWithBearing.speedInKnots))
|
||||
.append(" ").append(stringMessages.knotsUnit()).append("\n");
|
||||
QuickRankDTO quickRankDTO = quickRanks.get(competitorDTO);
|
||||
if (quickRankDTO != null) {
|
||||
infoText.append(stringMessages.rank()).append(" : ").append(quickRanks.get(competitorDTO).rank);
|
||||
final Integer rank = getRank(competitorDTO);
|
||||
if (rank != null) {
|
||||
infoText.append(stringMessages.rank()).append(" : ").append(rank);
|
||||
}
|
||||
return infoText.toString();
|
||||
}
|
||||
@@ -2148,13 +2139,7 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
|
||||
final VerticalPanel vPanel = new VerticalPanel();
|
||||
vPanel.add(createInfoWindowLabelAndValue(stringMessages.competitor(), competitorDTO.getName()));
|
||||
vPanel.add(createInfoWindowLabelAndValue(stringMessages.sailNumber(), competitorDTO.getSailID()));
|
||||
Integer rank = null;
|
||||
if (quickRanks != null) {
|
||||
QuickRankDTO quickRank = quickRanks.get(competitorDTO);
|
||||
if (quickRank != null) {
|
||||
rank = quickRank.rank;
|
||||
}
|
||||
}
|
||||
final Integer rank = getRank(competitorDTO);
|
||||
if (rank != null) {
|
||||
vPanel.add(createInfoWindowLabelAndValue(stringMessages.rank(), String.valueOf(rank)));
|
||||
}
|
||||
@@ -2788,8 +2773,9 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
|
||||
|
||||
@Override
|
||||
public Integer getRank(CompetitorDTO competitor) {
|
||||
// TODO bug4175: obtain from raceBoardPanel.leaderboardPanel.leaderboard instead of QuickRanks
|
||||
final Integer result;
|
||||
QuickRankDTO quickRank = quickRanks.get(competitor);
|
||||
QuickRankDTO quickRank = quickRanksDTOProvider.getQuickRanks().get(competitor.getIdAsString());
|
||||
if (quickRank != null) {
|
||||
result = quickRank.rank;
|
||||
} else {
|
||||
|
||||
@@ -1648,22 +1648,9 @@ public class LeaderboardPanel extends AbstractCompositeComponent<LeaderboardSett
|
||||
public Double get(LeaderboardRowDTO row) {
|
||||
Double result = null;
|
||||
LeaderboardEntryDTO fieldsForRace = row.fieldsByRaceColumnName.get(getRaceColumnName());
|
||||
if (fieldsForRace != null && fieldsForRace.legDetails != null && !fieldsForRace.legDetails.isEmpty()) {
|
||||
for (LegEntryDTO legDetail : fieldsForRace.legDetails) {
|
||||
if (legDetail != null) {
|
||||
if (legDetail.started) {
|
||||
if (result == null) {
|
||||
result = 0.0;
|
||||
}
|
||||
result++;
|
||||
} else {
|
||||
if (result != null) {
|
||||
result++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fieldsForRace != null) {
|
||||
int currentLeg = fieldsForRace.getOneBasedCurrentLegNumber();
|
||||
result = currentLeg == 0 ? null : (double) currentLeg;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -37,6 +37,8 @@ import com.sap.sailing.gwt.ui.client.TimePanelSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.WindChart;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.WindChartLifecycle;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.WindChartSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.DefaultQuickRanksDTOProvider;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceCompetitorSet;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapHelpLinesSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapHelpLinesSettings.HelpLineTypes;
|
||||
@@ -200,8 +202,8 @@ public class EmbeddedMapAndWindChartEntryPoint extends AbstractSailingEntryPoint
|
||||
}
|
||||
final RaceMap raceMap = new RaceMap(null, null, new RaceMapLifecycle(getStringMessages()), raceMapSettings,
|
||||
sailingService, asyncActionsExecutor, /* errorReporter */ EmbeddedMapAndWindChartEntryPoint.this, timer,
|
||||
competitorSelection, getStringMessages(), selectedRaceIdentifier, raceMapResources,
|
||||
/* showHeaderPanel */ false) {
|
||||
competitorSelection, new RaceCompetitorSet(competitorSelection), getStringMessages(), selectedRaceIdentifier,
|
||||
raceMapResources, /* showHeaderPanel */ false, new DefaultQuickRanksDTOProvider()) {
|
||||
@Override
|
||||
protected void showAdditionalControls(MapWidget map) {
|
||||
backToLivePlayButton.removeFromParent();
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
package com.sap.sailing.gwt.ui.raceboard;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardEntryDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.QuickRanksDTOProvider;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceCompetitorSet;
|
||||
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
/**
|
||||
* Computes a map of {@link QuickRankDTO}s from a {@link LeaderboardDTO} and a {@link RaceCompetitorSet}, restricting
|
||||
* the calculation to those competitors actually taking part in a race. If the {@link LeaderboardDTO} does not contain
|
||||
* detail information about the race, only the order "from best to worst" is used, and ranks are determined based on it,
|
||||
* whereas the {@link QuickRankDTO#legNumberOneBased leg numbers} will continue to be accepted from the quick ranks
|
||||
* coming from the server.
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public class QuickRanksDTOFromLeaderboardDTOProvider implements QuickRanksDTOProvider {
|
||||
private LinkedHashMap<String, QuickRankDTO> quickRanks;
|
||||
private final RaceCompetitorSet raceCompetitorSet;
|
||||
private final RaceIdentifier selectedRace;
|
||||
private boolean lastLeaderboardProvidedLegNumbers;
|
||||
private String raceColumnName;
|
||||
|
||||
public QuickRanksDTOFromLeaderboardDTOProvider(RaceCompetitorSet raceCompetitorSet, RaceIdentifier selectedRace) {
|
||||
this.raceCompetitorSet = raceCompetitorSet;
|
||||
this.selectedRace = selectedRace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void quickRanksReceivedFromServer(LinkedHashMap<String, QuickRankDTO> quickRanksFromServer) {
|
||||
if (quickRanks == null) {
|
||||
quickRanks = new LinkedHashMap<>();
|
||||
for (final Entry<String, QuickRankDTO> e : quickRanksFromServer.entrySet()) {
|
||||
quickRanks.put(e.getKey(), e.getValue());
|
||||
}
|
||||
} else if (!lastLeaderboardProvidedLegNumbers) {
|
||||
// extract at least the leg numbers and update existing quick ranks accordingly in place
|
||||
for (final Entry<String, QuickRankDTO> e : quickRanks.entrySet()) {
|
||||
final QuickRankDTO quickRankFromServer = quickRanksFromServer.get(e.getKey());
|
||||
if (quickRankFromServer != null) {
|
||||
e.getValue().legNumberOneBased = quickRankFromServer.legNumberOneBased;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void updateQuickRanks(final LeaderboardDTO leaderboard) {
|
||||
if (quickRanks == null) {
|
||||
quickRanks = new LinkedHashMap<>();
|
||||
}
|
||||
RaceColumnDTO raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
if (raceColumn == null || !raceColumn.containsRace(selectedRace)) {
|
||||
raceColumnName = getRaceColumnName(leaderboard, selectedRace);
|
||||
}
|
||||
if (raceColumnName != null) {
|
||||
final List<CompetitorDTO> competitorsFromBestToWorst = leaderboard.getCompetitorsFromBestToWorst(raceColumnName);
|
||||
int rank = 1;
|
||||
for (final CompetitorDTO c : competitorsFromBestToWorst) {
|
||||
if (Util.contains(raceCompetitorSet.getIdsOfCompetitorsParticipatingInRaceAsStrings(), c.getIdAsString())) {
|
||||
final LeaderboardRowDTO row = leaderboard.rows.get(c);
|
||||
final int oneBasedLegNumber;
|
||||
if (row != null) {
|
||||
final LeaderboardEntryDTO raceEntryForCompetitor = row.fieldsByRaceColumnName.get(raceColumnName);
|
||||
if (raceEntryForCompetitor != null && raceEntryForCompetitor.legDetails != null) {
|
||||
oneBasedLegNumber = raceEntryForCompetitor.getOneBasedCurrentLegNumber();
|
||||
lastLeaderboardProvidedLegNumbers = true;
|
||||
} else {
|
||||
oneBasedLegNumber = 0;
|
||||
lastLeaderboardProvidedLegNumbers = false;
|
||||
}
|
||||
} else {
|
||||
oneBasedLegNumber = 0;
|
||||
}
|
||||
QuickRankDTO quickRankToUpdate = quickRanks.get(c.getIdAsString());
|
||||
if (quickRankToUpdate == null) {
|
||||
quickRanks.put(c.getIdAsString(), new QuickRankDTO(c, rank, oneBasedLegNumber));
|
||||
} else {
|
||||
quickRankToUpdate.rank = rank;
|
||||
if (lastLeaderboardProvidedLegNumbers) {
|
||||
quickRankToUpdate.legNumberOneBased = oneBasedLegNumber;
|
||||
}
|
||||
}
|
||||
rank++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getRaceColumnName(LeaderboardDTO leaderboard, RaceIdentifier selectedRace) {
|
||||
for (final RaceColumnDTO raceColumn : leaderboard.getRaceList()) {
|
||||
if (raceColumn.containsRace(selectedRace)) {
|
||||
return raceColumn.getName();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LinkedHashMap<String, QuickRankDTO> getQuickRanks() {
|
||||
return quickRanks;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -70,6 +70,7 @@ import com.sap.sailing.gwt.ui.client.shared.charts.WindChartLifecycle;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.WindChartSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.filter.FilterWithUI;
|
||||
import com.sap.sailing.gwt.ui.client.shared.filter.LeaderboardFetcher;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceCompetitorSet;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapLifecycle;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapResources;
|
||||
@@ -158,6 +159,7 @@ public class RaceBoardPanel
|
||||
|
||||
private final RaceBoardResources raceBoardResources = RaceBoardResources.INSTANCE;
|
||||
private final RaceBoardMainCss mainCss = raceBoardResources.mainCss();
|
||||
private final QuickRanksDTOFromLeaderboardDTOProvider quickRanksDTOProvider;
|
||||
|
||||
private static final RaceMapResources raceMapResources = GWT.create(RaceMapResources.class);
|
||||
|
||||
@@ -218,10 +220,12 @@ public class RaceBoardPanel
|
||||
RaceTimePanelLifecycle raceTimePanelLifecycle = lifecycle.getRaceTimePanelLifecycle();
|
||||
RaceTimePanelSettings raceTimePanelSettings = settings
|
||||
.findSettingsByComponentId(raceTimePanelLifecycle.getComponentId());
|
||||
final RaceCompetitorSet raceCompetitorSet = new RaceCompetitorSet(competitorSelectionProvider);
|
||||
quickRanksDTOProvider = new QuickRanksDTOFromLeaderboardDTOProvider(raceCompetitorSet, selectedRaceIdentifier);
|
||||
raceMap = new RaceMap(this, componentContext, raceMapLifecycle, defaultRaceMapSettings, sailingService, asyncActionsExecutor,
|
||||
errorReporter, timer,
|
||||
competitorSelectionProvider, stringMessages, selectedRaceIdentifier, raceMapResources,
|
||||
/* showHeaderPanel */ true) {
|
||||
competitorSelectionProvider, raceCompetitorSet, stringMessages, selectedRaceIdentifier,
|
||||
raceMapResources, /* showHeaderPanel */ true, quickRanksDTOProvider) {
|
||||
private static final String INDENT_SMALL_CONTROL_STYLE = "indentsmall";
|
||||
private static final String INDENT_BIG_CONTROL_STYLE = "indentbig";
|
||||
@Override
|
||||
@@ -568,6 +572,7 @@ public class RaceBoardPanel
|
||||
if (editMarkPositionPanel != null) {
|
||||
editMarkPositionPanel.setLeaderboard(leaderboard);
|
||||
}
|
||||
quickRanksDTOProvider.updateQuickRanks(leaderboard);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1076,6 +1076,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the {@link Competitor} objects passed as {@code iterable} to {@link CompetitorDTO} objects.
|
||||
* The iteration order in the result matches that of the {@code iterable} passed.
|
||||
*/
|
||||
private List<CompetitorDTO> convertToCompetitorDTOs(Iterable<? extends Competitor> iterable) {
|
||||
List<CompetitorDTO> result = new ArrayList<CompetitorDTO>();
|
||||
for (Competitor c : iterable) {
|
||||
@@ -2211,7 +2215,6 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
public QuickRanksDTO computeQuickRanks(RegattaAndRaceIdentifier raceIdentifier, TimePoint timePoint)
|
||||
throws NoWindException {
|
||||
final List<QuickRankDTO> result = new ArrayList<>();
|
||||
final List<CompetitorDTO> competitorDTOsInOrderOfWindwardDistanceTraveledFarthestFirst;
|
||||
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
|
||||
if (trackedRace != null) {
|
||||
final TimePoint actualTimePoint;
|
||||
@@ -2233,11 +2236,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
rank++;
|
||||
}
|
||||
competitorDTOsInOrderOfWindwardDistanceTraveledFarthestFirst = convertToCompetitorDTOs(competitorsFromBestToWorst);
|
||||
} else {
|
||||
competitorDTOsInOrderOfWindwardDistanceTraveledFarthestFirst = Collections.emptyList();
|
||||
}
|
||||
return new QuickRanksDTO(result, competitorDTOsInOrderOfWindwardDistanceTraveledFarthestFirst);
|
||||
return new QuickRanksDTO(result);
|
||||
}
|
||||
|
||||
private QuickRanksDTO getQuickRanks(RegattaAndRaceIdentifier raceIdentifier, Date date) throws NoWindException {
|
||||
@@ -2245,7 +2245,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
if (date == null) {
|
||||
result = quickRanksLiveCache.get(raceIdentifier);
|
||||
} else {
|
||||
result = computeQuickRanks(raceIdentifier, date == null ? null : new MillisecondsTimePoint(date));
|
||||
result = computeQuickRanks(raceIdentifier, new MillisecondsTimePoint(date));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.gwt.user.client.rpc.IsSerializable;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
@@ -30,7 +29,6 @@ public class CompactRaceMapDataDTO implements IsSerializable {
|
||||
private CoursePositionsDTO coursePositions;
|
||||
private List<SidelineDTO> courseSidelines;
|
||||
private List<CompactQuickRankDTO> quickRanks;
|
||||
private LinkedHashMap<String, Integer> competitorsInOrderOfWindwardDistanceTraveledFarthestFirstIdAsStringAndOneBasedLegNumber;
|
||||
private long simulationResultVersion;
|
||||
|
||||
/**
|
||||
@@ -46,7 +44,6 @@ public class CompactRaceMapDataDTO implements IsSerializable {
|
||||
this.boatPositionsByCompetitorIdAsString = new CompactBoatPositionsDTO(boatPositions);
|
||||
this.raceCompetitorIdsAsStrings = raceCompetitorIdsAsStrings;
|
||||
this.quickRanks = new ArrayList<CompactQuickRankDTO>(quickRanks == null ? 0 : Util.size(quickRanks.getQuickRanks()));
|
||||
this.competitorsInOrderOfWindwardDistanceTraveledFarthestFirstIdAsStringAndOneBasedLegNumber = new LinkedHashMap<>();
|
||||
Map<String, Integer> competitorIdAsStringToOneBasedLegNumber = new HashMap<>();
|
||||
if (quickRanks != null) {
|
||||
for (QuickRankDTO quickRank : quickRanks.getQuickRanks()) {
|
||||
@@ -54,11 +51,6 @@ public class CompactRaceMapDataDTO implements IsSerializable {
|
||||
quickRank.legNumberOneBased));
|
||||
competitorIdAsStringToOneBasedLegNumber.put(quickRank.competitor.getIdAsString(), quickRank.legNumberOneBased);
|
||||
}
|
||||
for (CompetitorDTO competitorInOrderOfWindwardDistanceTraveled : quickRanks.getCompetitorsInOrderOfWindwardDistanceTraveledFarthestFirst()) {
|
||||
this.competitorsInOrderOfWindwardDistanceTraveledFarthestFirstIdAsStringAndOneBasedLegNumber.put(
|
||||
competitorInOrderOfWindwardDistanceTraveled.getIdAsString(),
|
||||
competitorIdAsStringToOneBasedLegNumber.get(competitorInOrderOfWindwardDistanceTraveled.getIdAsString()));
|
||||
}
|
||||
}
|
||||
this.courseSidelines = courseSidelines;
|
||||
this.coursePositions = coursePositions;
|
||||
@@ -67,23 +59,16 @@ public class CompactRaceMapDataDTO implements IsSerializable {
|
||||
|
||||
public RaceMapDataDTO getRaceMapDataDTO(Map<String, CompetitorDTO> competitorsByIdAsString) {
|
||||
RaceMapDataDTO result = new RaceMapDataDTO();
|
||||
result.quickRanks = new LinkedHashMap<CompetitorDTO, QuickRankDTO>(this.quickRanks.size());
|
||||
result.quickRanks = new LinkedHashMap<String, QuickRankDTO>(this.quickRanks.size());
|
||||
for (CompactQuickRankDTO compactQuickRank : this.quickRanks) {
|
||||
final CompetitorDTO competitorDTO = competitorsByIdAsString.get(compactQuickRank.getCompetitorIdAsString());
|
||||
if (competitorDTO != null) {
|
||||
result.quickRanks.put(competitorDTO, new QuickRankDTO(competitorDTO, compactQuickRank.getRank(), compactQuickRank.getLegNumber()));
|
||||
result.quickRanks.put(compactQuickRank.getCompetitorIdAsString(), new QuickRankDTO(competitorDTO, compactQuickRank.getRank(), compactQuickRank.getLegNumber()));
|
||||
}
|
||||
}
|
||||
result.courseSidelines = courseSidelines;
|
||||
result.coursePositions = coursePositions;
|
||||
result.boatPositions = boatPositionsByCompetitorIdAsString.getBoatPositionsForCompetitors(competitorsByIdAsString);
|
||||
result.competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber = new LinkedHashMap<>();
|
||||
for (Entry<String, Integer> i : competitorsInOrderOfWindwardDistanceTraveledFarthestFirstIdAsStringAndOneBasedLegNumber.entrySet()) {
|
||||
CompetitorDTO c = competitorsByIdAsString.get(i.getKey());
|
||||
if (c != null) {
|
||||
result.competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber.put(c, i.getValue());
|
||||
}
|
||||
}
|
||||
result.simulationResultVersion = simulationResultVersion;
|
||||
result.raceCompetitorIdsAsStrings = this.raceCompetitorIdsAsStrings;
|
||||
return result;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package com.sap.sailing.gwt.ui.shared;
|
||||
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
|
||||
/**
|
||||
* Combines a list of {@link QuickRankDTO} objects telling about the (calculated, according to any handicap ranking metric
|
||||
* in place)) ranks of the competitors with an information about the boat farthest ahead in the race. The latter is useful,
|
||||
@@ -17,23 +15,12 @@ public class QuickRanksDTO {
|
||||
*/
|
||||
private final Iterable<QuickRankDTO> quickRanksAfterCalculatedTime;
|
||||
|
||||
/**
|
||||
* Lists the competitors according to their windward distance traveled. The first boat (rank 1) is the
|
||||
* competitor farthest ahead.
|
||||
*/
|
||||
private final Iterable<CompetitorDTO> competitorsInOrderOfWindwardDistanceTraveledFarthestFirst;
|
||||
|
||||
public QuickRanksDTO(Iterable<QuickRankDTO> quickRanks, Iterable<CompetitorDTO> competitorsInOrderOfWindwardDistanceTraveledFarthestFirst) {
|
||||
public QuickRanksDTO(Iterable<QuickRankDTO> quickRanks) {
|
||||
super();
|
||||
this.quickRanksAfterCalculatedTime = quickRanks;
|
||||
this.competitorsInOrderOfWindwardDistanceTraveledFarthestFirst = competitorsInOrderOfWindwardDistanceTraveledFarthestFirst;
|
||||
}
|
||||
|
||||
public Iterable<QuickRankDTO> getQuickRanks() {
|
||||
return quickRanksAfterCalculatedTime;
|
||||
}
|
||||
|
||||
public Iterable<CompetitorDTO> getCompetitorsInOrderOfWindwardDistanceTraveledFarthestFirst() {
|
||||
return competitorsInOrderOfWindwardDistanceTraveledFarthestFirst;
|
||||
}
|
||||
}
|
||||
@@ -12,8 +12,7 @@ public class RaceMapDataDTO implements IsSerializable {
|
||||
public Map<CompetitorDTO, List<GPSFixDTOWithSpeedWindTackAndLegType>> boatPositions;
|
||||
public CoursePositionsDTO coursePositions;
|
||||
public List<SidelineDTO> courseSidelines;
|
||||
public LinkedHashMap<CompetitorDTO, QuickRankDTO> quickRanks;
|
||||
public LinkedHashMap<CompetitorDTO, Integer> competitorsInOrderOfWindwardDistanceTraveledWithOneBasedLegNumber;
|
||||
public LinkedHashMap<String, QuickRankDTO> quickRanks;
|
||||
public long simulationResultVersion;
|
||||
|
||||
/**
|
||||
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
@@ -17,6 +17,7 @@ import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.RaceColumnListener;
|
||||
import com.sap.sailing.domain.common.LeaderboardNameConstants;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.ResultDiscardingRule;
|
||||
@@ -36,7 +37,8 @@ public class RaceLogScoringReplicator implements RaceColumnListener {
|
||||
private static final long serialVersionUID = -5958519195756937338L;
|
||||
|
||||
private final RacingEventService service;
|
||||
private final static String COMMENT_TEXT_ON_SCORE_CORRECTION = "Update triggered by Race Committee.";
|
||||
private final static String COMMENT_TEXT_ON_SCORE_CORRECTION_SINGLE_FLEET = "Results of race %s have been updated.";
|
||||
private final static String COMMENT_TEXT_ON_SCORE_CORRECTION_MULTI_FLEET = "Results of race %s, s% have been updated.";
|
||||
|
||||
public RaceLogScoringReplicator(RacingEventService service) {
|
||||
this.service = service;
|
||||
@@ -192,7 +194,10 @@ public class RaceLogScoringReplicator implements RaceColumnListener {
|
||||
}
|
||||
// Since the metadata update is used by the Sailing suite to determine the final state of a race, it has to
|
||||
// be triggered, even though no score correction may have been performed
|
||||
applyMetadataUpdate(leaderboard, timePoint, COMMENT_TEXT_ON_SCORE_CORRECTION);
|
||||
String comment = LeaderboardNameConstants.DEFAULT_FLEET_NAME.equals(fleet.getName())
|
||||
? String.format(COMMENT_TEXT_ON_SCORE_CORRECTION_SINGLE_FLEET, raceColumn.getName())
|
||||
: String.format(COMMENT_TEXT_ON_SCORE_CORRECTION_MULTI_FLEET, raceColumn.getName(), fleet.getName());
|
||||
applyMetadataUpdate(leaderboard, timePoint, comment);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,18 +31,20 @@ public abstract class AbstractListFilter<T> {
|
||||
public abstract Iterable<String> getStrings(T t);
|
||||
|
||||
/**
|
||||
* Constructs a list based on the contents of {@link #all} and the current search phrase {@link #text}.
|
||||
* Constructs a list based on the contents of {@code all} using the {@link #matcher} which matches
|
||||
* the {@code keywords} against what {@link #getStrings(Object)} returns for the respective
|
||||
* object from {@code all}.
|
||||
*/
|
||||
public Iterable<T> applyFilter(Iterable<String> keywords, Iterable<T> all) {
|
||||
List<T> sortedList = new ArrayList<T>();
|
||||
List<T> result = new ArrayList<T>();
|
||||
if (all != null) {
|
||||
for (T t : all) {
|
||||
if (matcher.matches(keywords, t)) {
|
||||
sortedList.add(t);
|
||||
result.add(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
return sortedList;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -351,18 +351,19 @@ public class TrackingService extends Service implements LocationListener {
|
||||
*/
|
||||
@Override
|
||||
public void onLocationChanged(Location location) {
|
||||
reportGPSQualityBearingAndSpeed(location.getAccuracy(), location.getBearing(), location.getSpeed(),
|
||||
location.getLatitude(), location.getLongitude(), location.getAltitude());
|
||||
reportGPSQualityBearingAndSpeed(location.getAccuracy(), location.getBearing(), location.getSpeed(), location.getLatitude(), location.getLongitude(), location.getAltitude());
|
||||
final String postUrlStr = event.server + prefs.getServerGpsFixesPostPath();
|
||||
enqueueForSending(postUrlStr, location);
|
||||
|
||||
// clear message queue
|
||||
locationWatchDog.removeMessages(NO_LOCATION);
|
||||
if (locationWatchDog != null) {
|
||||
// clear message queue
|
||||
locationWatchDog.removeMessages(NO_LOCATION);
|
||||
|
||||
// add new message with last location
|
||||
Message msg = locationWatchDog.obtainMessage(NO_LOCATION);
|
||||
msg.obj = location;
|
||||
locationWatchDog.sendMessageDelayed(msg, NO_LOCATION_CHECK);
|
||||
// add new message with last location
|
||||
Message msg = locationWatchDog.obtainMessage(NO_LOCATION);
|
||||
msg.obj = location;
|
||||
locationWatchDog.sendMessageDelayed(msg, NO_LOCATION_CHECK);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -67,7 +67,9 @@
|
||||
android:scheme="https" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name=".ui.activities.RacingActivity" />
|
||||
<activity
|
||||
android:name=".ui.activities.RacingActivity"
|
||||
android:windowSoftInputMode="adjustNothing" />
|
||||
<activity android:name=".ui.activities.PasswordActivity" />
|
||||
<activity
|
||||
android:name=".ui.activities.PreferenceActivity"
|
||||
@@ -80,7 +82,8 @@
|
||||
</activity>
|
||||
<activity android:name=".ui.activities.SystemInformationActivity" />
|
||||
|
||||
<service android:name=".services.polling.RaceLogPollingService"
|
||||
<service
|
||||
android:name=".services.polling.RaceLogPollingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.sap.sailing.racecommittee.app.action.stopPoller" />
|
||||
|
||||
|
After Width: | Height: | Size: 285 B |
|
After Width: | Height: | Size: 285 B |
|
After Width: | Height: | Size: 138 B |
|
After Width: | Height: | Size: 141 B |
|
After Width: | Height: | Size: 138 B |
|
After Width: | Height: | Size: 141 B |
|
After Width: | Height: | Size: 175 B |
|
After Width: | Height: | Size: 175 B |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 141 B |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 251 B |
|
After Width: | Height: | Size: 251 B |
|
After Width: | Height: | Size: 126 B |
|
After Width: | Height: | Size: 217 B |
|
After Width: | Height: | Size: 126 B |
|
After Width: | Height: | Size: 217 B |
|
After Width: | Height: | Size: 132 B |
|
After Width: | Height: | Size: 132 B |
|
After Width: | Height: | Size: 129 B |
|
After Width: | Height: | Size: 122 B |
|
After Width: | Height: | Size: 158 B |
|
After Width: | Height: | Size: 129 B |
|
After Width: | Height: | Size: 122 B |
|
After Width: | Height: | Size: 122 B |
|
After Width: | Height: | Size: 188 B |
|
After Width: | Height: | Size: 188 B |
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<bitmap
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:src="@drawable/ic_dns_black_48dp"/>
|
||||
android:src="@drawable/ic_list_single_black_48dp"/>
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<bitmap
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:src="@drawable/ic_dns_white_48dp">
|
||||
android:src="@drawable/ic_list_single_white_48dp">
|
||||
|
||||
</bitmap>
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="@color/constant_light_gray_ripple">
|
||||
android:color="@color/popup_pressed">
|
||||
|
||||
<item android:drawable="@color/constant_light_gray"/>
|
||||
<item android:drawable="@color/popup_background"/>
|
||||
|
||||
</ripple>
|
||||
|
After Width: | Height: | Size: 291 B |
|
After Width: | Height: | Size: 291 B |
|
After Width: | Height: | Size: 141 B |
|
After Width: | Height: | Size: 239 B |
|
After Width: | Height: | Size: 141 B |
|
After Width: | Height: | Size: 239 B |
|
After Width: | Height: | Size: 124 B |
|
After Width: | Height: | Size: 124 B |
|
After Width: | Height: | Size: 122 B |
|
After Width: | Height: | Size: 141 B |
|
After Width: | Height: | Size: 185 B |
|
After Width: | Height: | Size: 122 B |
|
After Width: | Height: | Size: 141 B |
|
After Width: | Height: | Size: 141 B |
|
After Width: | Height: | Size: 188 B |
|
After Width: | Height: | Size: 188 B |
|
After Width: | Height: | Size: 520 B |
|
After Width: | Height: | Size: 520 B |
|
After Width: | Height: | Size: 169 B |
|
After Width: | Height: | Size: 200 B |
|
After Width: | Height: | Size: 169 B |
|
After Width: | Height: | Size: 200 B |
|
After Width: | Height: | Size: 159 B |
|
After Width: | Height: | Size: 159 B |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 174 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 174 B |
|
After Width: | Height: | Size: 174 B |
|
After Width: | Height: | Size: 271 B |