Merge branch 'master' into bug5480

# Conflicts:
#	java/com.sap.sailing.feature.p2build/raceanalysis.product
#	java/com.sap.sailing.server/SailingServer (No Proxy).launch
#	java/com.sap.sse.security.ui/WEB-INF/web.xml
This commit is contained in:
Georg Herdt
2021-01-29 09:34:47 +01:00
337 changed files with 5610 additions and 1977 deletions
@@ -0,0 +1,5 @@
#!/bin/bash
public_keys=$( for user in `curl -H 'Authorization: Bearer vyIlGJTuzTqS25IiS2cLHDFulJ9NgJto3apwV/D9Q0k=' "https://security-service.sapsailing.com/security/api/restsecurity/users_with_permission?permission=LANDSCAPE:MANAGE:AWS" 2>/dev/null | jq -r '.[]'`; do
curl -H 'Authorization: Bearer vyIlGJTuzTqS25IiS2cLHDFulJ9NgJto3apwV/D9Q0k=' "https://security-service.sapsailing.com/landscape/api/landscape/get_ssh_keys_owned_by_user?username[]=${user}" 2>/dev/null | jq -r '.[].publicKey'
done | sort -u )
echo "${public_keys}"
View File
View File
@@ -8,7 +8,8 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Import-Package: com.sap.sailing.server.interfaces,
org.osgi.framework;version="1.7.0"
Export-Package: com.sap.sailing.datamining,
com.sap.sailing.datamining.data
com.sap.sailing.datamining.data,
com.sap.sailing.datamining.impl.data;x-friends:="com.sap.sailing.polars.datamining"
Require-Bundle: com.sap.sailing.domain,
com.sap.sailing.domain.common,
com.sap.sailing.datamining.shared,
@@ -12,8 +12,12 @@ public interface HasLeaderboardContext {
Leaderboard getLeaderboard();
@Dimension(messageKey="Leaderboard", ordinal=1)
String getName();
default String getName() {
return getLeaderboard().getName();
}
@Connector(messageKey="BoatClass", ordinal=2)
BoatClass getBoatClass();
default BoatClass getBoatClass() {
return getLeaderboard().getBoatClass();
}
}
@@ -6,12 +6,10 @@ import com.sap.sailing.domain.polars.PolarDataService;
import com.sap.sse.datamining.annotations.Connector;
public interface HasLeaderboardGroupContext {
@Connector(messageKey="LeaderboardGroup", ordinal=0)
LeaderboardGroup getLeaderboardGroup();
PolarDataService getPolarDataService();
DomainFactory getBaseDomainFactory();
}
@@ -2,7 +2,6 @@ package com.sap.sailing.datamining.impl.data;
import com.sap.sailing.datamining.data.HasLeaderboardContext;
import com.sap.sailing.datamining.data.HasLeaderboardGroupContext;
import com.sap.sailing.domain.base.BoatClass;
import com.sap.sailing.domain.leaderboard.Leaderboard;
public class LeaderboardWithContext implements HasLeaderboardContext {
@@ -22,14 +21,4 @@ public class LeaderboardWithContext implements HasLeaderboardContext {
public Leaderboard getLeaderboard() {
return leaderboard;
}
@Override
public BoatClass getBoatClass() {
return getLeaderboard().getBoatClass();
}
@Override
public String getName() {
return getLeaderboard().getName();
}
}
@@ -8,7 +8,6 @@ import java.io.IOException;
import java.text.ParseException;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import com.sap.sailing.declination.Declination;
@@ -35,14 +34,13 @@ public abstract class DeclinationServiceTest<I extends DeclinationImporter> exte
assertEquals(0.+09./60., result.getAnnualChange().getDegrees(), 0.0000001);
}
@Ignore("Currently NOAA service ends Dec 2019; this test for now is only available for the Colorado importer")
@Test
public void testDeclinationQueryNotMatchedInStore() throws IOException, ClassNotFoundException, ParseException {
Declination result = service.getDeclination(new MillisecondsTimePoint(simpleDateFormat.parse("2020-02-03").getTime()),
new DegreePosition(51, -5), /* timeoutForOnlineFetchInMilliseconds */ 5000);
assertNotNull(result);
assertEquals(-1.80464, result.getBearing().getDegrees(), 0.001);
assertEquals(0.15244, result.getAnnualChange().getDegrees(), 0.001);
assertEquals(-1.531, result.getBearing().getDegrees(), 0.001);
assertEquals(0.20272, result.getAnnualChange().getDegrees(), 0.001);
}
@Test
@@ -1,11 +1,9 @@
package com.sap.sailing.declination.test;
import org.junit.Before;
import org.junit.Ignore;
import com.sap.sailing.declination.impl.NOAAImporterForTesting;
@Ignore("2021-01-20: Due to scheduled system maintenance, ngdc.noaa.gov services will be unavailable from Wednesday 2021-01-20 16:00 MT until Friday 2021-01-22 12:00 MT.")
public class NOAADeclinationImportTest extends DeclinationImportTest<NOAAImporterForTesting> {
@Before
public void setUp() {
@@ -1,11 +1,9 @@
package com.sap.sailing.declination.test;
import org.junit.Before;
import org.junit.Ignore;
import com.sap.sailing.declination.impl.NOAAImporter;
@Ignore("2021-01-20: Due to scheduled system maintenance, ngdc.noaa.gov services will be unavailable from Wednesday 2021-01-20 16:00 MT until Friday 2021-01-22 12:00 MT.")
public class NOAASimpleDeclinationTest extends SimpleDeclinationTest<NOAAImporter> {
@Before
public void setUp() {
@@ -7,7 +7,6 @@ import java.text.ParseException;
import javax.xml.parsers.ParserConfigurationException;
import org.junit.Ignore;
import org.junit.Test;
import org.xml.sax.SAXException;
@@ -19,7 +18,6 @@ import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@Ignore("2021-01-20: Due to scheduled system maintenance, ngdc.noaa.gov services will be unavailable from Wednesday 2021-01-20 16:00 MT until Friday 2021-01-22 12:00 MT.")
public abstract class SimpleDeclinationTest<I extends DeclinationImporter> extends AbstractDeclinationTest<I> {
@Test
public void testSimpleCorrection() throws IOException, ParseException, ParserConfigurationException, SAXException {
@@ -2,7 +2,6 @@ package com.sap.sailing.domain.common.dto;
import com.sap.sailing.domain.common.RankingMetrics;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.security.SecuredDomainType;
import com.sap.sse.security.shared.HasPermissions;
import com.sap.sse.security.shared.QualifiedObjectIdentifier;
@@ -36,22 +35,23 @@ public class RaceDTO extends BasicRaceDTO implements SecuredDTO {
public TrackedRaceStatisticsDTO trackedRaceStatistics;
private String regattaName;
public String boatClass;
private RankingMetrics rankingMetricType;
private RegattaAndRaceIdentifier raceIdentifier;
public RaceDTO() {}
public RaceDTO(RegattaAndRaceIdentifier raceIdentifier, TrackedRaceDTO trackedRace, boolean isCurrentlyTracked, RankingMetrics rankingMetricType) {
super(raceIdentifier, trackedRace);
this.regattaName = raceIdentifier.getRegattaName();
this.raceIdentifier = raceIdentifier;
this.isTracked = isCurrentlyTracked;
this.rankingMetricType = rankingMetricType;
}
public RegattaAndRaceIdentifier getRaceIdentifier() {
return new RegattaNameAndRaceName(regattaName, getName());
return raceIdentifier;
}
public RankingMetrics getRankingMetricType() {
@@ -59,7 +59,7 @@ public class RaceDTO extends BasicRaceDTO implements SecuredDTO {
}
public String getRegattaName() {
return regattaName;
return raceIdentifier.getRegattaName();
}
@Override
@@ -69,7 +69,7 @@ public class RaceDTO extends BasicRaceDTO implements SecuredDTO {
result = prime * result + ((boatClass == null) ? 0 : boatClass.hashCode());
result = prime * result + (isTracked ? 1231 : 1237);
result = prime * result + ((places == null) ? 0 : places.hashCode());
result = prime * result + ((regattaName == null) ? 0 : regattaName.hashCode());
result = prime * result + ((getRegattaName() == null) ? 0 : getRegattaName().hashCode());
result = prime * result + ((status == null) ? 0 : status.hashCode());
return result;
}
@@ -95,10 +95,10 @@ public class RaceDTO extends BasicRaceDTO implements SecuredDTO {
return false;
} else if (!places.equals(other.places))
return false;
if (regattaName == null) {
if (other.regattaName != null)
if (getRegattaName() == null) {
if (other.getRegattaName() != null)
return false;
} else if (!regattaName.equals(other.regattaName))
} else if (!getRegattaName().equals(other.getRegattaName()))
return false;
if (status == null) {
if (other.status != null)
@@ -139,7 +139,7 @@ public class RaceDTO extends BasicRaceDTO implements SecuredDTO {
}
public TypeRelativeObjectIdentifier getTypeRelativeObjectIdentifier() {
return new TypeRelativeObjectIdentifier(regattaName, getName());
return raceIdentifier.getTypeRelativeObjectIdentifier();
}
}
@@ -162,7 +162,7 @@ public class RaceAndCompetitorStatusWithRaceLogReconciler {
this.raceLogResolver = raceLogResolver;
this.tractracRace = tractracRace;
raceLogListeners = Collections.synchronizedMap(new HashMap<>());
raceLogEventAuthor = new LogEventAuthorImpl(getClass().getName(), 1);
raceLogEventAuthor = new LogEventAuthorImpl(getClass().getName(), 1); // equally important as race officer on water
}
public void raceLogAttached(TrackedRace trackedRace, RaceLog raceLog) {
@@ -376,7 +376,7 @@ public class RaceAndCompetitorStatusWithRaceLogReconciler {
resultsForRaceLog.add(resultForRaceLog);
final RaceLog defaultRaceLog = getDefaultRaceLog(trackedRace);
defaultRaceLog.add(new RaceLogFinishPositioningConfirmedEventImpl(officialResultTime, officialResultTime,
new LogEventAuthorImpl("Official TracTrac Result Provider", 1), // equally important as race officer on water
raceLogEventAuthor,
UUID.randomUUID(), defaultRaceLog.getCurrentPassId(), resultsForRaceLog));
logger.info("Added the following result to the race log of " + trackedRace.getRaceIdentifier()
+ " for competitor " + raceCompetitor + ": " + resultForRaceLog);
@@ -77,7 +77,7 @@
<plugin id="com.sap.sse.security.userstore.mongodb" autoStart="true" startLevel="4" />
<plugin id="javax.annotation" autoStart="true" startLevel="0" />
<plugin id="org.apache.aries.spifly.dynamic.bundle" autoStart="true" startLevel="1" />
<plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
<plugin id="com.sap.sse.landscape.aws" autoStart="true" startLevel="4" /> <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />
<plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="2" />
<plugin id="org.eclipse.jetty.osgi.boot" autoStart="true" startLevel="3" />
<plugin id="org.eclipse.osgi" autoStart="true" startLevel="-1" />
+15 -1
View File
@@ -495,7 +495,21 @@ Computes leaderboard information for sailing races and offers RESTful APIs to al
unpack="false"/>
<plugin
id="com.sap.sse.debranding"
id="com.sap.sailing.landscape"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.sap.sailing.landscape.common"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.sap.sailing.landscape.ui"
download-size="0"
install-size="0"
version="0.0.0"
View File
@@ -65,7 +65,10 @@ Require-Bundle: com.sap.sailing.domain,
com.sap.sailing.shared.server,
org.apache.commons.math;bundle-version="2.1.0",
com.chargebee.chargebee-java;bundle-version="2.7.7",
org.apache.commons.lang;bundle-version="2.6.0"
org.apache.commons.lang;bundle-version="2.6.0",
com.sap.sailing.landscape.ui,
com.sap.sailing.landscape.common,
com.sap.sse.landscape.common
Bundle-Activator: com.sap.sailing.gwt.ui.server.Activator
Bundle-ActivationPolicy: lazy
Import-Package: javax.servlet;version="3.1.0",
+36 -29
View File
@@ -147,38 +147,45 @@
<servlet-name>DataMiningService</servlet-name>
<url-pattern>/service/datamining</url-pattern>
</servlet-mapping>
<servlet>
<display-name>User Management Write</display-name>
<servlet-name>UserManagementService</servlet-name>
<servlet-class>com.sap.sse.security.ui.server.UserManagementWriteServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserManagementService</servlet-name>
<url-pattern>/service/usermanagement</url-pattern>
</servlet-mapping>
<servlet>
<display-name>Chargebee Subscription Service</display-name>
<servlet-name>ChargebeeSubscriptionService</servlet-name>
<servlet-class>com.sap.sailing.gwt.ui.server.subscription.chargebee.ChargebeeSubscriptionWriteServiceImpl</servlet-class>
<servlet>
<display-name>User Management Write</display-name>
<servlet-name>UserManagementService</servlet-name>
<servlet-class>com.sap.sse.security.ui.server.UserManagementWriteServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserManagementService</servlet-name>
<url-pattern>/service/usermanagement</url-pattern>
</servlet-mapping>
<servlet>
<display-name>Landscape Management Service</display-name>
<servlet-name>LandscapeManagementService</servlet-name>
<servlet-class>com.sap.sailing.landscape.ui.server.LandscapeManagementWriteServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LandscapeManagementService</servlet-name>
<url-pattern>/service/landscape</url-pattern>
</servlet-mapping>
<servlet>
<display-name>Chargebee Subscription Service</display-name>
<servlet-name>ChargebeeSubscriptionService</servlet-name>
<servlet-class>com.sap.sailing.gwt.ui.server.subscription.chargebee.ChargebeeSubscriptionWriteServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ChargebeeSubscriptionService</servlet-name>
<url-pattern>/service/subscription/chargebee</url-pattern>
</servlet-mapping>
<!-- enabling remote logging -->
<servlet>
<servlet-name>remoteLoggingServlet</servlet-name>
<servlet-class>com.google.gwt.logging.server.RemoteLoggingServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>remoteLoggingServlet</servlet-name>
<url-pattern>/com.sap.sailing.gwt.home.Desktop/remote_logging</url-pattern>
<url-pattern>/com.sap.sailing.gwt.home.Mobile/remote_logging</url-pattern>
<url-pattern>/com.sap.sailing.gwt.ui.AdminConsole/remote_logging</url-pattern>
<url-pattern>/com.sap.sailing.gwt.ui.Leaderboard/remote_logging</url-pattern>
<url-pattern>/com.sap.sailing.gwt.ui.Simulator/remote_logging</url-pattern>
<url-pattern>/com.sap.sailing.gwt.ui.RaceBoard/remote_logging</url-pattern>
</servlet-mapping>
<!-- enabling remote logging -->
<servlet>
<servlet-name>remoteLoggingServlet</servlet-name>
<servlet-class>com.google.gwt.logging.server.RemoteLoggingServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>remoteLoggingServlet</servlet-name>
<url-pattern>/com.sap.sailing.gwt.home.Desktop/remote_logging</url-pattern>
<url-pattern>/com.sap.sailing.gwt.home.Mobile/remote_logging</url-pattern>
<url-pattern>/com.sap.sailing.gwt.ui.AdminConsole/remote_logging</url-pattern>
<url-pattern>/com.sap.sailing.gwt.ui.Leaderboard/remote_logging</url-pattern>
<url-pattern>/com.sap.sailing.gwt.ui.Simulator/remote_logging</url-pattern>
<url-pattern>/com.sap.sailing.gwt.ui.RaceBoard/remote_logging</url-pattern>
</servlet-mapping>
</web-app>
+18
View File
@@ -127,6 +127,24 @@
<version>${project.version}</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>com.sap.sailing</groupId>
<artifactId>com.sap.sse.landscape.common</artifactId>
<version>${project.version}</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>com.sap.sailing</groupId>
<artifactId>com.sap.sailing.landscape.common</artifactId>
<version>${project.version}</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>com.sap.sailing</groupId>
<artifactId>com.sap.sailing.landscape.ui</artifactId>
<version>${project.version}</version>
<classifier>sources</classifier>
</dependency>
</dependencies>
<build>
@@ -1,9 +1,9 @@
package com.sap.sailing.gwt.home.client.place.event.legacy;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.sap.sailing.gwt.common.client.AbstractBasePlace;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.AbstractBasePlace;
import com.sap.sse.gwt.shared.ClientConfiguration;
public class EventPlace extends AbstractBasePlace {
@@ -1,9 +1,9 @@
package com.sap.sailing.gwt.home.client.place.event.legacy;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.sap.sailing.gwt.common.client.AbstractBasePlace;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.AbstractBasePlace;
import com.sap.sse.gwt.shared.ClientConfiguration;
public class RegattaPlace extends AbstractBasePlace {
@@ -1,9 +1,9 @@
package com.sap.sailing.gwt.home.client.place.event.legacy;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.sap.sailing.gwt.common.client.AbstractBasePlace;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.AbstractBasePlace;
import com.sap.sse.gwt.shared.ClientConfiguration;
public class SeriesPlace extends AbstractBasePlace {
@@ -52,18 +52,27 @@ public class GetFavoritesAction implements SailingAction<FavoritesResult> {
TreeSet<SimpleCompetitorWithIdDTO> selected = new TreeSet<>();
boolean notifyAboutResults = false;
if (preferences != null) {
final RacingEventService racingEventService = ctx.getRacingEventService();
final CompetitorAndBoatStore competitorAndBoatStore = racingEventService.getCompetitorAndBoatStore();
for (CompetitorNotificationPreference pref : preferences.getCompetitors()) {
final String competitorId = pref.getCompetitorIdAsString();
final RacingEventService racingEventService = ctx.getRacingEventService();
final CompetitorAndBoatStore competitorAndBoatStore = racingEventService.getCompetitorAndBoatStore();
DynamicCompetitor competitor = competitorAndBoatStore.getExistingCompetitorByIdAsString(competitorId);
selected.add(competitor == null ?
new SimpleCompetitorWithIdDTO(competitorId,"Not found","ID:" + competitorId, null, null)
: new SimpleCompetitorWithIdDTO(competitor));
SimpleCompetitorWithIdDTO competitorDTO;
if (competitor == null) {
final String competitorName = pref.getCompetitorName();
final String conveyedCompetitorName = competitorName == null ? "Not found."
: competitorName;
competitorDTO = new SimpleCompetitorWithIdDTO(competitorId, conveyedCompetitorName, "Unknown", null,
null);
} else {
competitorDTO = new SimpleCompetitorWithIdDTO(competitor);
}
selected.add(competitorDTO);
notifyAboutResults |= pref.isNotifyAboutResults();
}
}
return new FavoriteCompetitorsDTO(selected, notifyAboutResults);
FavoriteCompetitorsDTO favoriteCompetitorsDTO = new FavoriteCompetitorsDTO(selected, notifyAboutResults);
return favoriteCompetitorsDTO;
}
}
@@ -30,12 +30,12 @@ public class SaveFavoriteCompetitorsAction implements SailingAction<VoidResult>,
@Override
@GwtIncompatible
public VoidResult execute(SailingDispatchContext ctx) throws DispatchException {
CompetitorNotificationPreferences prefs = new CompetitorNotificationPreferences(ctx.getRacingEventService());
CompetitorNotificationPreferences prefs = new CompetitorNotificationPreferences();
List<CompetitorNotificationPreference> competitorPreferences = new ArrayList<>();
for (SimpleCompetitorWithIdDTO competitorDTO : favorites.getSelectedCompetitors()) {
String competitorIdAsString = competitorDTO.getIdAsString();
competitorPreferences.add(new CompetitorNotificationPreference(competitorIdAsString, favorites.isNotifyAboutResults()));
String competitorName = competitorDTO.getName();
competitorPreferences.add(new CompetitorNotificationPreference(competitorIdAsString, competitorName, favorites.isNotifyAboutResults()));
}
prefs.setCompetitors(competitorPreferences);
ctx.setPreferenceForCurrentUser(CompetitorNotificationPreferences.PREF_NAME, prefs);
@@ -9,8 +9,8 @@ import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.user.client.Window;
import com.sap.sailing.domain.common.MailInvitationType;
import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants;
import com.sap.sailing.gwt.common.client.AbstractBasePlace;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.gwt.client.AbstractBasePlace;
/**
* A place that can be used to display QR codes that direct users to branch.io using deep links which then point to an
@@ -1,8 +1,8 @@
package com.sap.sailing.gwt.home.desktop.places.whatsnew;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.sap.sailing.gwt.common.client.AbstractBasePlace;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.AbstractBasePlace;
public class WhatsNewPlace extends AbstractBasePlace {
public enum WhatsNewNavigationTabs { SailingAnalytics, RaceManagerApp, InSightApp, BuoyPingerApp, TrainingDiary, SailingSimulator };
@@ -2,8 +2,8 @@ package com.sap.sailing.gwt.home.shared.places.error;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.sap.sailing.gwt.common.client.AbstractBasePlace;
import com.sap.sailing.gwt.home.shared.app.HasMobileVersion;
import com.sap.sse.gwt.client.AbstractBasePlace;
public class ErrorPlace extends AbstractBasePlace implements HasMobileVersion {
@@ -2,11 +2,11 @@ package com.sap.sailing.gwt.home.shared.places.imprint;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.place.shared.Prefix;
import com.sap.sailing.gwt.common.client.AbstractBasePlace;
import com.sap.sailing.gwt.home.shared.app.HasLocationTitle;
import com.sap.sailing.gwt.home.shared.app.HasMobileVersion;
import com.sap.sailing.gwt.home.shared.places.PlaceTokenPrefixes;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.gwt.client.AbstractBasePlace;
public class ImprintPlace extends AbstractBasePlace implements HasLocationTitle, HasMobileVersion {
public ImprintPlace(String token) {
@@ -7,11 +7,11 @@ import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.sap.sailing.gwt.common.client.AbstractBasePlace;
import com.sap.sailing.gwt.home.shared.app.HasLocationTitle;
import com.sap.sailing.gwt.home.shared.app.HasMobileVersion;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.AbstractBasePlace;
public class SolutionsPlace extends AbstractBasePlace implements HasLocationTitle, HasMobileVersion {
@@ -5,9 +5,9 @@ import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.place.shared.Prefix;
import com.google.gwt.regexp.shared.MatchResult;
import com.google.gwt.regexp.shared.RegExp;
import com.sap.sailing.gwt.common.client.AbstractBasePlace;
import com.sap.sailing.gwt.home.shared.app.HasMobileVersion;
import com.sap.sailing.gwt.home.shared.places.PlaceTokenPrefixes;
import com.sap.sse.gwt.client.AbstractBasePlace;
public class ConfirmationPlace extends AbstractBasePlace implements HasMobileVersion {
private final String name;
@@ -5,9 +5,9 @@ import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.place.shared.Prefix;
import com.google.gwt.regexp.shared.MatchResult;
import com.google.gwt.regexp.shared.RegExp;
import com.sap.sailing.gwt.common.client.AbstractBasePlace;
import com.sap.sailing.gwt.home.shared.app.HasMobileVersion;
import com.sap.sailing.gwt.home.shared.places.PlaceTokenPrefixes;
import com.sap.sse.gwt.client.AbstractBasePlace;
public class PasswordResetPlace extends AbstractBasePlace implements HasMobileVersion {
private final String name;
@@ -28,6 +28,7 @@
<inherits name="com.sap.sse.security.ui.LoginPanel" />
<inherits name="com.sap.sse.security.ui.SecurityCommon" />
<inherits name="com.sap.sse.Security" />
<inherits name="com.sap.sailing.landscape.Landscape" />
<super-source path="jre" />
@@ -3,10 +3,10 @@ package com.sap.sailing.gwt.ui.adminconsole;
import com.google.gwt.activity.shared.Activity;
import com.google.gwt.activity.shared.ActivityMapper;
import com.google.gwt.place.shared.Place;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractAdminConsolePlace;
import com.sap.sailing.gwt.ui.adminconsole.places.AdminConsoleActivity;
import com.sap.sailing.gwt.ui.adminconsole.places.DefaultPlace;
import com.sap.sailing.gwt.ui.adminconsole.places.events.EventsPlace;
import com.sap.sse.gwt.adminconsole.AbstractAdminConsolePlace;
public class AdminConsoleActivityMapper implements ActivityMapper {
@@ -33,6 +33,7 @@ import com.sap.sailing.gwt.ui.adminconsole.places.trackedraces.CompetitorsPlace;
import com.sap.sailing.gwt.ui.adminconsole.places.trackedraces.CourseLayoutPlace;
import com.sap.sailing.gwt.ui.adminconsole.places.trackedraces.TrackedRacesPlace;
import com.sap.sailing.gwt.ui.adminconsole.places.trackedraces.WindPlace;
import com.sap.sailing.landscape.ui.client.LandscapeManagementPlace;
@WithTokenizers({EventsPlace.Tokenizer.class, RegattasPlace.Tokenizer.class,
LeaderboardsPlace.Tokenizer.class, LeaderboardGroupsPlace.Tokenizer.class, TrackedRacesPlace.Tokenizer.class, CompetitorsPlace.Tokenizer.class,
@@ -42,7 +43,8 @@ import com.sap.sailing.gwt.ui.adminconsole.places.trackedraces.WindPlace;
ResultImportUrlsPlace.Tokenizer.class, Manage2SailRegattaStructureImportPlace.Tokenizer.class, DeviceConfigurationPlace.Tokenizer.class,
ReplicationPlace.Tokenizer.class, MasterDataImportPlace.Tokenizer.class, RemoteServerInstancesPlace.Tokenizer.class, LocalServerPlace.Tokenizer.class,
UserManagementPlace.Tokenizer.class, RolesPlace.Tokenizer.class, UserGroupManagementPlace.Tokenizer.class, FileStoragePlace.Tokenizer.class,
MarkTemplatesPlace.Tokenizer.class, MarkPropertiesPlace.Tokenizer.class, CourseTemplatesPlace.Tokenizer.class, MarkRolesPlace.Tokenizer.class})
MarkTemplatesPlace.Tokenizer.class, MarkPropertiesPlace.Tokenizer.class, CourseTemplatesPlace.Tokenizer.class, MarkRolesPlace.Tokenizer.class,
LandscapeManagementPlace.Tokenizer.class})
public interface AdminConsolePlaceHistoryMapper extends PlaceHistoryMapper {
}
@@ -302,7 +302,7 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
}
});
filterField = new LabeledAbstractFilterablePanel<CompetitorDTO>(new Label(getStringMessages().filterCompetitors()),
new ArrayList<CompetitorDTO>(), dataProvider, stringMessages) {
Collections.emptySet(), dataProvider, stringMessages) {
@Override
public Iterable<String> getSearchableStrings(CompetitorDTO t) {
List<String> string = new ArrayList<String>();
@@ -326,7 +326,7 @@ public class CompetitorTableWrapper<S extends RefreshableSelectionModel<Competit
registerSelectionModelOnNewDataProvider(filterField.getAllListDataProvider());
// CompetitorTableEditFeatures
final HasPermissions type = SecuredDomainType.COMPETITOR;
AccessControlledActionsColumn<CompetitorDTO, CompetitorConfigImagesBarCell> competitorActionColumn = create(
final AccessControlledActionsColumn<CompetitorDTO, CompetitorConfigImagesBarCell> competitorActionColumn = create(
new CompetitorConfigImagesBarCell(getStringMessages()), userService);
competitorActionColumn.addAction(CompetitorConfigImagesBarCell.ACTION_UPDATE, HasPermissions.DefaultActions.UPDATE, this::editCompetitor);
competitorActionColumn.addAction(CompetitorConfigImagesBarCell.ACTION_REFRESH, this::allowUpdate);
@@ -43,7 +43,6 @@ import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.sap.sailing.domain.common.dto.CourseAreaDTO;
import com.sap.sailing.gwt.ui.adminconsole.LeaderboardGroupDialog.LeaderboardGroupDescriptor;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sailing.gwt.ui.adminconsole.places.AdminConsoleView.Presenter;
import com.sap.sailing.gwt.ui.adminconsole.places.leaderboards.LeaderboardGroupsPlace;
import com.sap.sailing.gwt.ui.client.Displayer;
@@ -59,6 +58,7 @@ import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.util.NaturalComparator;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AdminConsoleTableResources;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
@@ -208,8 +208,6 @@ public class EventListComposite extends Composite {
noEventsLabel.ensureDebugId("NoRegattasLabel");
noEventsLabel.setWordWrap(false);
panel.add(noEventsLabel);
//presenter.getEventsRefresher().reloadAndCallFill(null);
//eventRefresher.loadEvents();
initWidget(panel);
filterTextbox.setUpdatePermissionFilterForCheckbox(event -> userService.hasPermission(event, DefaultActions.UPDATE));
}
@@ -643,7 +641,6 @@ public class EventListComposite extends Composite {
@Override
public void onSuccess(EventDTO result) {
//eventRefresher.loadEvents();
final String[] namesOfCourseAreasToAdd = new String[courseAreasToAdd.size()];
int i = 0;
for (CourseAreaDTO courseAreaToAdd : courseAreasToAdd) {
@@ -158,7 +158,6 @@ public class ExpeditionAllInOneImportPanel extends Composite {
response.getRaceEntries(), response.getGpsDeviceIds(), response.getSensorDeviceIds(),
response.getSensorFixImporterType(), response.getStartTimes(), presenter.getSailingService(),
presenter.getUserService(), presenter.getErrorReporter(), stringMessages);
//presenter.getRegattasRefresher().loadRegattas();
} else {
ExpeditionDataImportResultsDialog.showResults(response);
}
@@ -190,9 +190,6 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel
final Widget createLeaderboardsGUI = createLeaderboardsGUI(tableRes);
this.permissionRestrictedComponent.add(createLeaderboardsGUI);
splitPanel.add(createLeaderboardsGUI);
//Load Data
//leaderboardGroupsRefresher.loadLeaderboardGroups();
}
private Widget createSwitchLeaderboardsGUI() {
@@ -937,7 +934,6 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel
.collect(Collectors.toMap(StrippedLeaderboardDTO::getName, Function.identity()));
selectedGroup.getLeaderboards().stream().map(StrippedLeaderboardDTO::getName).forEach(allExceptOf::remove);
leaderboardsFilterablePanel.updateAll(allExceptOf.values());
// leaderboardsProvider.getList().addAll(allExceptOf);
}
private void moveToLeaderboards() {
@@ -98,7 +98,6 @@ public class LeaderboardGroupSelectorComposite extends Composite implements HasV
selectedEventLeaderboardGroupsTable.setSelectionModel(selectedEventLeaderboardGroupsSelectionModel);
selectedEventLeaderboardGroupsProvider = new ListDataProvider<>();
selectedEventLeaderboardGroupsProvider.addDataDisplay(selectedEventLeaderboardGroupsTable);
TextColumn<LeaderboardGroupDTO> leaderboardGroupNameColumn = new TextColumn<LeaderboardGroupDTO>() {
@Override
public String getValue(LeaderboardGroupDTO event) {
@@ -160,7 +159,6 @@ public class LeaderboardGroupSelectorComposite extends Composite implements HasV
};
availableLeaderboardGroupsSelectionModel = new RefreshableMultiSelectionModel<>(
new EntityIdentityComparator<LeaderboardGroupDTO>() {
@Override
public boolean representSameEntity(LeaderboardGroupDTO dto1, LeaderboardGroupDTO dto2) {
return dto1.getName().equals(dto2.getName());
@@ -182,7 +180,6 @@ public class LeaderboardGroupSelectorComposite extends Composite implements HasV
vp.add(availableLeaderboardGroupsFilterablePanel);
vp.add(availableLeaderboardGroupsTable);
result.add(vp);
TextColumn<LeaderboardGroupDTO> leaderboardGroupNameColumn = new TextColumn<LeaderboardGroupDTO>() {
@Override
public String getValue(LeaderboardGroupDTO event) {
@@ -13,7 +13,6 @@ public class ResultImportUrlAddDialog extends DataEntryDialog<UrlDTO> {
private final SailingServiceAsync sailingService;
private final StringMessages stringMessages;
private final TextBox textBox;
private final String urlProvider;
protected class UrlDTOValidator implements Validator<UrlDTO> {
@@ -56,7 +55,6 @@ public class ResultImportUrlAddDialog extends DataEntryDialog<UrlDTO> {
this.sailingService = sailingService;
this.stringMessages = stringMessages;
this.setValidator(new UrlDTOValidator());
textBox = super.createTextBox(null, 120);
textBox.getElement().setPropertyString("placeholder", stringMessages.eventIdOrUrl());
textBox.setFocus(true);
@@ -64,7 +62,7 @@ public class ResultImportUrlAddDialog extends DataEntryDialog<UrlDTO> {
@Override
protected UrlDTO getResult() {
return new UrlDTO(textBox.getValue().trim());
return new UrlDTO(urlProvider, textBox.getValue().trim());
}
@Override
@@ -99,7 +99,6 @@ public class ResultImportUrlsListComposite extends Composite {
Grid providerGrid = new Grid(1, 2);
providerGrid.setWidget(0, 0, new Label(stringMessages.urlProviders()));
providerGrid.setWidget(0, 1, urlProviderListBox);
panel.add(providerGrid);
panel.add(buttonPanel);
panel.add(urlSample);
@@ -9,7 +9,6 @@ import com.sap.sse.gwt.adminconsole.AdminConsoleTableResources;
import com.sap.sse.security.ui.client.component.RoleDefinitionsPanel;
public class RoleDefinitionsPanelSupplier extends AdminConsolePanelSupplier<RoleDefinitionsPanel> {
private final Presenter presenter;
private final AdminConsoleTableResources tableResources;
@@ -31,7 +30,6 @@ public class RoleDefinitionsPanelSupplier extends AdminConsolePanelSupplier<Role
@Override
public void getAsync(RunAsyncCallback callback) {
GWT.runAsync(new RunAsyncCallback() {
@Override
public void onSuccess() {
widget = init();
@@ -44,5 +42,4 @@ public class RoleDefinitionsPanelSupplier extends AdminConsolePanelSupplier<Role
}
});
}
}
@@ -10,7 +10,6 @@ import com.sap.sse.security.ui.client.component.RoleDefinitionsPanel;
import com.sap.sse.security.ui.client.i18n.StringMessages;
public class RoleDefinitionsPanelWrapper extends RoleDefinitionsPanel implements FilterablePanelProvider<RoleDefinitionDTO> {
public RoleDefinitionsPanelWrapper(StringMessages stringMessages, UserService userService,
CellTableWithCheckboxResources tableResources, ErrorReporter errorReporter) {
super(stringMessages, userService, tableResources, errorReporter);
@@ -20,5 +19,4 @@ public class RoleDefinitionsPanelWrapper extends RoleDefinitionsPanel implements
public AbstractFilterablePanel<RoleDefinitionDTO> getFilterablePanel() {
return filterablePanelRoleDefinitions;
}
}
@@ -1,7 +1,6 @@
package com.sap.sailing.gwt.ui.adminconsole;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.SailingServiceWriteAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -11,10 +10,8 @@ import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
/**
* The {@link #getTable() table} created and wrapped by this object offers already a {@link ListHandler} for sorting.
* Subclasses can obtain the table's default column sort handler created by this class's constructor by calling
* {@link #getColumnSortHandler}. The table is wrapped by a panel that can be obtained using {@link #asWidget()}
* and which contains, if requested, the pager widget underneath the table.
* Simplifies the use of a pager by offering a {@link #DEFAULT_PAGING_SIZE} of 100, and by remembering a
* {@link SailingServiceWriteAsync} instance for use by the subclasses.
*/
public abstract class TableWrapper<T, S extends RefreshableSelectionModel<T>>
extends com.sap.sse.gwt.client.celltable.TableWrapper<T, S, StringMessages, AdminConsoleTableResources> {
@@ -21,6 +21,7 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.ServerConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTOWithSecurity;
import com.sap.sse.gwt.adminconsole.AbstractAdminConsolePlace;
import com.sap.sse.gwt.adminconsole.AdminConsolePlace;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
@@ -45,7 +46,6 @@ public class AdminConsoleActivity extends AbstractActivity implements AdminConso
this.clientFactory = clientFactory;
this.mediaServiceWrite = clientFactory.getMediaServiceWrite();
this.sailingService = clientFactory.getSailingService();
leaderboardsRefresher = new AbstractRefresher<StrippedLeaderboardDTOWithSecurity>(clientFactory.getErrorReporter()) {
@Override
public void reload(AsyncCallback<Iterable<StrippedLeaderboardDTOWithSecurity>> callback) {
@@ -11,9 +11,9 @@ import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTOWithSecurity;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.adminconsole.AbstractAdminConsolePlace;
import com.sap.sse.gwt.adminconsole.AdminConsolePresenter;
import com.sap.sse.gwt.client.ServerInfoDTO;
import com.sap.sse.security.ui.client.UserService;
public interface AdminConsoleView extends IsWidget {
@@ -25,18 +25,10 @@ public interface AdminConsoleView extends IsWidget {
void setRedirectToPlace(AbstractAdminConsolePlace redirectoPlace);
public interface Presenter {
ErrorReporter getErrorReporter();
public interface Presenter extends AdminConsolePresenter {
SailingServiceWriteAsync getSailingService();
UserService getUserService();
MediaServiceWriteAsync getMediaServiceWrite();
PlaceController getPlaceController();
// Refresher
Refresher<StrippedLeaderboardDTOWithSecurity> getLeaderboardsRefresher();
Refresher<LeaderboardGroupDTO> getLeaderboardGroupsRefresher();
@@ -44,5 +36,4 @@ public interface AdminConsoleView extends IsWidget {
Refresher<EventDTO> getEventsRefresher();
Refresher<MediaTrackWithSecurityDTO> getMediaTracksRefresher();
}
}
@@ -101,6 +101,10 @@ import com.sap.sailing.gwt.ui.adminconsole.places.trackedraces.WindPlace;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.masterdataimport.MasterDataImportPanel;
import com.sap.sailing.gwt.ui.shared.SecurityStylesheetResources;
import com.sap.sailing.landscape.ui.client.LandscapeManagementPanel;
import com.sap.sailing.landscape.ui.client.LandscapeManagementPanelSupplier;
import com.sap.sailing.landscape.ui.client.LandscapeManagementPlace;
import com.sap.sse.gwt.adminconsole.AbstractAdminConsolePlace;
import com.sap.sse.gwt.adminconsole.AdminConsolePanel;
import com.sap.sse.gwt.adminconsole.AdminConsoleTableResources;
import com.sap.sse.gwt.adminconsole.DefaultRefreshableAdminConsolePanel;
@@ -109,6 +113,7 @@ import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.ServerInfoDTO;
import com.sap.sse.gwt.client.controls.filestorage.FileStoragePanel;
import com.sap.sse.gwt.client.panels.HorizontalTabLayoutPanel;
import com.sap.sse.landscape.common.SecuredLandscapeTypes;
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
import com.sap.sse.security.shared.impl.SecuredSecurityTypes;
import com.sap.sse.security.shared.impl.SecuredSecurityTypes.ServerActions;
@@ -471,6 +476,12 @@ public class AdminConsoleViewImpl extends Composite implements AdminConsoleView
stringMessages.fileStorage(), new FileStoragePlace(null),
SecuredSecurityTypes.SERVER.getPermissionForObject(
SecuredSecurityTypes.ServerActions.CONFIGURE_FILE_STORAGE, serverInfo));
/* Landscape Management */
final LandscapeManagementPanelSupplier landscapeManagementPanelSupplier = new LandscapeManagementPanelSupplier(presenter, tableResources);
adminConsolePanel.addToTabPanel(advancedTabPanel,
new DefaultRefreshableAdminConsolePanel<LandscapeManagementPanel>(landscapeManagementPanelSupplier),
stringMessages.landscape(), new LandscapeManagementPlace((String) null /* no place token */),
SecuredLandscapeTypes.LANDSCAPE.getPermission(SecuredLandscapeTypes.LandscapeActions.MANAGE));
/* COURSE CREATION */
final HorizontalTabLayoutPanel courseCreationTabPanel = adminConsolePanel
.addVerticalTab(stringMessages.courseCreation(), COURSE_CREATION);
@@ -1,6 +1,6 @@
package com.sap.sailing.gwt.ui.adminconsole.places.advanced;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractAdminConsolePlace;
import com.sap.sse.gwt.adminconsole.AbstractAdminConsolePlace;
public abstract class AbstractAdvancedPlace extends AbstractAdminConsolePlace {
public AbstractAdvancedPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.advanced;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class RemoteServerInstancesPlace extends AbstractFilterablePlace {
public RemoteServerInstancesPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.advanced;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class RolesPlace extends AbstractFilterablePlace {
public RolesPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.advanced;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class UserGroupManagementPlace extends AbstractFilterablePlace {
public UserGroupManagementPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.advanced;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class UserManagementPlace extends AbstractFilterablePlace {
public UserManagementPlace(String token) {
@@ -1,6 +1,6 @@
package com.sap.sailing.gwt.ui.adminconsole.places.connectors;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractAdminConsolePlace;
import com.sap.sse.gwt.adminconsole.AbstractAdminConsolePlace;
public abstract class AbstractConnectorsPlace extends AbstractAdminConsolePlace {
public AbstractConnectorsPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.connectors;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class ExpeditionDeviceConfigurationsPlace extends AbstractFilterablePlace {
public ExpeditionDeviceConfigurationsPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.connectors;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class IgtimiAccountsPlace extends AbstractFilterablePlace {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.connectors;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class SmartphoneTrackingPlace extends AbstractFilterablePlace {
public SmartphoneTrackingPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.connectors;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class SwissTimingArchivedEventsPlace extends AbstractFilterablePlace {
public SwissTimingArchivedEventsPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.connectors;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class SwissTimingEventsPlace extends AbstractFilterablePlace {
public SwissTimingEventsPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.connectors;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class TracTracEventsPlace extends AbstractFilterablePlace {
public TracTracEventsPlace(String token) {
@@ -1,6 +1,6 @@
package com.sap.sailing.gwt.ui.adminconsole.places.coursecreation;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public abstract class AbstractCourseCreationPlace extends AbstractFilterablePlace {
public AbstractCourseCreationPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.events;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class EventsPlace extends AbstractFilterablePlace {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.leaderboards;
import java.util.Map;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public abstract class AbstractLeaderboardsPlace extends AbstractFilterablePlace {
public AbstractLeaderboardsPlace(String token) {
@@ -3,7 +3,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.leaderboards;
import java.util.Map;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class LeaderboardGroupsPlace extends AbstractFilterablePlace {
public LeaderboardGroupsPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.leaderboards;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class LeaderboardsPlace extends AbstractFilterablePlace {
public LeaderboardsPlace(String token) {
@@ -1,7 +1,7 @@
package com.sap.sailing.gwt.ui.adminconsole.places.racemanager;
import com.google.gwt.place.shared.PlaceTokenizer;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractAdminConsolePlace;
import com.sap.sse.gwt.adminconsole.AbstractAdminConsolePlace;
public class DeviceConfigurationPlace extends AbstractAdminConsolePlace {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.regattas;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class RegattasPlace extends AbstractFilterablePlace {
public RegattasPlace(String token) {
@@ -1,6 +1,6 @@
package com.sap.sailing.gwt.ui.adminconsole.places.trackedraces;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractAdminConsolePlace;
import com.sap.sse.gwt.adminconsole.AbstractAdminConsolePlace;
public abstract class AbstractTrackedRacesPlace extends AbstractAdminConsolePlace {
public AbstractTrackedRacesPlace(String placeParamsFromUrlFragment) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.trackedraces;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class AudioAndVideoPlace extends AbstractFilterablePlace {
public AudioAndVideoPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.trackedraces;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class BoatsPlace extends AbstractFilterablePlace {
public BoatsPlace(String token) {
@@ -3,7 +3,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.trackedraces;
import java.util.Map;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class CompetitorsPlace extends AbstractFilterablePlace {
public CompetitorsPlace(Map<String, String> paramKeysAndValues) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.trackedraces;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class CourseLayoutPlace extends AbstractFilterablePlace {
public CourseLayoutPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.trackedraces;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class TrackedRacesPlace extends AbstractFilterablePlace {
public TrackedRacesPlace(String token) {
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.adminconsole.places.trackedraces;
import java.util.function.Function;
import com.sap.sailing.gwt.ui.adminconsole.places.AbstractFilterablePlace;
import com.sap.sse.gwt.adminconsole.AbstractFilterablePlace;
public class WindPlace extends AbstractFilterablePlace {
public WindPlace(String token) {
@@ -1,5 +1,5 @@
package com.sap.sailing.gwt.ui.client;
public interface MediaTracksRefresher {
void loadMediaTracks();
void loadMediaTracks();
}
@@ -25,7 +25,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String listRegattas();
String wind();
String windPanelLabel();
String refresh();
String removeNumber(int count);
String windSource();
String dampeningInterval();
@@ -97,7 +96,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String velocityMadeGoodInKnots();
String windwardDistanceToGoInMeters();
String windwardDistanceToCompetitorFarthestAheadInMeters();
String name();
String shortName();
String leaveEmptyForDefault();
String trackNewEvent();
@@ -131,7 +129,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String liveUri();
String storedUri();
String eventsConnectedTo();
String hostname();
String declinationCheckbox();
String raceStartTrackingColumn();
String pauseAutomaticRefresh();
@@ -207,14 +204,12 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String filterByNameOrBoatClass();
String filterByRegatta();
String filterMediaByName();
String actionEdit();
String actionEditScores();
String actionEditCompetitors();
String actionShowCompetitorToBoatAssignments();
String actionEditCompetitorToBoatAssignments();
String actionContinueToBoatAssignment();
String actionOpenBrowser();
String actionRemove();
String actionEditSeries();
String actionRaceEdit();
String actionRaceUnlink();
@@ -223,10 +218,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String actionOpenDashboard();
String actionBoatUnlink();
String filterLeaderboardsByName();
String actions();
String islinked();
String yes();
String no();
String hoverOverAPoint();
String noSelection();
String raceIsKnownToStartUpwind();
@@ -348,20 +340,13 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String racesInLeaderboard();
String leaderboardsInGroup();
String replication();
String errorFetchingReplicaData(String message);
String averageAbsoluteCrossTrackErrorInMeters();
String averageSignedCrossTrackErrorInMeters();
String enterMaster();
String errorStartingReplication(String hostname, String exchangeName, String message);
String helpLines();
String startLine();
String finishLine();
String advantageLine();
String courseMiddleLine();
String messagingPortNumber();
String servletPortNumber();
String registeredAt(String string);
String replicatingFromMaster(String hostname, int jmsPort, int servletPort, String messagingHostname, String exchangeName, String replicableIdsAsString);
String showWindSpeedSeries();
String showWindDirectionSeries();
String fleet();
@@ -390,8 +375,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String errorLoadingScoreCorrectionProviders(String message);
String selectResultListToImportFrom();
String of();
String errorObtainingScoreCorrections(String scoreCorrectionProviderName, String eventName, String boatClassName,
String string, String message);
String errorObtainingScoreCorrections(String scoreCorrectionProviderName, String eventName, String boatClassName, String string, String message);
String assignRaceNumbersToRaceColumns();
String importOfficialResults();
String selectAll();
@@ -405,7 +389,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String regattaExistForSelectedBoatClass();
String addRegatta();
String importRegattas();
String exchangeName();
String course();
String courseLayout();
String buoy();
@@ -652,10 +635,8 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String regattaRankTooltip();
String overallRank();
String overallRankTooltip();
String displayName();
String histogram();
String angleAndTotalNumberOfDataPointsAndCovAndCm(int angle, int dataCount, double coefficiantOfVariation,
double confidenceMeasure);
String angleAndTotalNumberOfDataPointsAndCovAndCm(int angle, int dataCount, double coefficiantOfVariation, double confidenceMeasure);
String buoyZone();
String radiusInMeters();
String addCourseArea();
@@ -715,7 +696,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String pleaseEnterANumber();
String competitorsFilter();
String flagStatus();
String additionalInformation();
String actionAddFilter();
String actionEditFilter();
String availableFilters();
@@ -737,23 +717,18 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String disableRaceFilter();
String enableRaceFilter();
String raceStatusColumn();
String loading();
String racesWithHiddenState();
String selectedCompetitors();
String mediaDateFormatError(String expectedTimeFormat);
String filterNothing();
String topNCompetitorsByRaceRank(int n);
String topNCompetitorsByTotalRank(int n);
String editRegatta();
String selectSailingEvent();
String selectCourseArea();
/*Start of simulator related messages*/
String simulator();
String optionsBar();
String simulateButton();
String setup();
String strength();
String oscillation();
@@ -761,7 +736,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String amplitude();
String frequency();
String noise();
String sailing();
String optimality();
String maximumTurns();
@@ -778,11 +752,9 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String summary();
String replay();
String display();
String simulatorPolarHeader();
String show();
String hide();
String leftWind();
String rightWind();
String strategyOption1();
@@ -791,11 +763,9 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String legLabel();
String raceLabel();
String competitorLabel();
String freemode();
String whatIfCourse();
/*End of simulator related messages*/
String courseAreaOverview();
String courseDesignOverview();
String regattaOverview();
@@ -814,17 +784,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String regattaOverviewConfiguration();
String firstRaceIsNonDiscardableCarryForward();
String addReplicationMaster();
String connect();
String connectToMaster();
String explainReplicationHostname();
String explainReplicationExchangeName();
String explainReplicationExchangePort();
String explainReplicationServletPort();
String explainReplicasRegistered();
String explainConnectionsToMaster();
String explainNoConnectionsToMaster();
String explainNoConnectionsFromReplicas();
String stopConnectionToMaster();
String asLink();
String raceIsRunning();
String raceIsFinishing();
@@ -834,9 +793,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String generalRecall();
String startPostponed();
String raceAbandoned();
String stopAllReplicas();
String warningServerIsReplica();
String dropReplicaConnection();
String timePanelName();
String competitorFilterExplanation();
String protestTime();
@@ -852,7 +808,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String finishAt();
String protestStartsAt();
String protestEndsAt();
String unknown();
String raceLog();
String regattaLog();
String refreshRaceLog();
@@ -895,7 +850,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String importGetLeaderboardsFailed(String host, String errorMessage);
String importNoDataReturned();
String importServerError();
String importLeaderboardGroups();
String importOverrideSwitchLabel();
String importSelectedLeaderboardGroups();
String importSelectAtLeastOne();
@@ -972,8 +926,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String hideToolbar();
String showSeriesLeaderboards();
String showOverallLeaderboard();
String exchangeHost();
String explainExchangeHostName();
String offset();
String line();
String lineAngleToWindAndAdvantage(String startLineLength, String startLineAngleToCombinedWind, String startLineAdvantageousSide, String startLineAdvantageInMeters);
@@ -991,7 +943,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String successfullyAllowedCompetitorReset(String names);
String successfullyAllowedBoatReset(String names);
String allowReload();
String id();
String compress();
String compressTooltip();
String rerunQueryAfterRefresh();
@@ -1005,14 +956,12 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String maximumRoundsForCourse();
String resultsMailRecipient();
String deviceConfiguration();
String none();
String courseDesignerMode();
String racingProcedure();
String courseNames();
String generate();
String dontoverwrite();
String setRacingProcedureConfiguration();
String racingProcedureConfiguration();
String activateIndividualRecall();
@@ -1035,7 +984,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String configured();
String overwriteRacingProceduresConfiguration();
String overwriteRacingProceduresConfigurationHelpText();
String setStartTime();
String finishTimeString();
String setFinishingAndFinishTime();
@@ -1062,7 +1010,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String successfullyRemoveIgtimiAccount(String eMailOfAccountToRemove);
String eMailMustNotBeEmpty();
String emailAddress();
String password();
String searchTag();
String doYouReallyWantToRemoveLeaderboard(String name);
String metaLeaderboardCannotBeChanged();
@@ -1194,7 +1141,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String simulationLegendTooltip();
String racesScored();
String racesScoredTooltip();
String averageNumberOfOperationsPerMessage();
String showUncorrectedTotalPoints();
String setStartTimeReceived();
String setStartTimeReceivedDescription();
@@ -1222,10 +1168,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String registrationLinkUrlExplain();
String registrationLinkShare();
String explainRegistrationLinkDialog();
String numberOfQueueMessagesSent();
String totalSize();
String averageMessageSize();
String totalNumberOfOperations();
String currentOrAverageSpeedOverGroundInKnotsTooltip();
String currentOrAverageSpeedOverGroundInKnots();
String connectors();
@@ -1315,7 +1257,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String errorTryingToObtainMarkPassing(String message);
String errorTryingToObtainRaceLogMarkPassingData(String message);
String warningMarkPassingChangesNoEffect();
String email();
String pleaseEnterAnEmail();
String inviteCompetitors();
String notAllCompetitorsProvideEmail();
@@ -1323,15 +1264,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String sendingMailsSuccessful();
String selectEventForInvitation();
String imageURL();
@Override
String upload();
String removeResult(JSONValue status, JSONValue message);
@Override
String uploadSuccessful();
@Override
String fileUploadResult(String status, String message);
@Override
String removeUploadedFile();
String showCompetitorBoatColumn();
String showCompetitorShortNameColumn();
String showCompetitorShortNameColumnTooltip(String showCompetitorNationalityColumnTitle);
@@ -1346,7 +1279,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String distanceIncludingGateStartInMeters();
String distanceTraveledIncludingGateStartTooltip();
String raceDistanceTraveledIncludingGateStartTooltip();
String dashboardHeader();
String dashboardNoWindBotAvailableHeader();
String dashboardNoWindBotAvailableMessage();
@@ -1359,7 +1291,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String dashboardAverageWind();
String dashboardAverageWindMinutes(int minutes);
String dashboardWindChartHint();
String dashboardSelectCompetitor();
String dashboardStartAnalysesHeader();
String dashboardNewStartAnalysisAvailable();
@@ -1375,13 +1306,11 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String dashboardTeam();
String dashboardDistanceToLineInM();
String dashboardSpeedInKts();
String dashboardAdvantageInSeconds();
String dashboardSecondsAbreviation();
String dashboardDistanceToRCBoat();
String dashboardPinEnd();
String dashboardRCBoat();
String fixedMarkPassing();
String suppressedMarkPassing();
String warningSettingFixedPassing(String waypoint);
@@ -1392,7 +1321,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String clickToToggleWindUp();
String clickToToggleWindStreamlets();
String startLineToFirstMarkTriangle(String distanceInMeters);
String noDataForEvent();
String countriesCount(@PluralCount(DefaultRule_1_0n.class) int count);
String racesCount(@PluralCount(DefaultRule_1_0n.class) int count);
@@ -1524,8 +1452,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String imageToSmallError(String imageType, int minWidth, int minHeight);
String imageResizeError(String imageType, double minRatio, double maxRatio, double ratio);
String couldNotRetrieveImageSizeYet();
@Override
String pleaseOnlyUploadContentYouHaveAllUsageRightsFor();
String registerCompetitorsOnRace();
String doYouWantToRegisterCompetitorsDirectlyOnTheRace();
String doYouWantToDisableCompetitorsRegistrationsOnTheRace();
@@ -1581,15 +1507,12 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String confirmNewFix();
String selectAFixPositionBy();
String pleaseSelectAMark();
String playstoreRacecommitteeApp();
String playstoreInsightApp();
String playStoreBuoyPingerApp();
String playstoreBadge();
String appstoreSapSailInsight();
String appstoreBadgeSuffix();
String markFixes();
String distanceFromAveragePosition();
String useATouchOptimizedUI();
@@ -1602,15 +1525,12 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String dragToChangePosition();
String moveFix();
String raceViewer();
String mapControls();
String manage2SailEvent();
String noEventsYet();
String selectCompetitorImportProvider();
String selectResultImportProvider();
String buildVersion();
String serverInformation();
String serverConfiguration();
String standaloneServer();
String passId();
@@ -1691,7 +1611,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String chooseALanguage();
String solutions();
String officalEventWebsite();
String moreInfo();
String viewAnalysis();
String overallLeaderboard();
String pleaseTryAgain();
@@ -1789,8 +1708,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String errorLoadingCompetitorImportDescriptors(String message);
String couldNotSaveCompetitorRegistrations(String message);
String searchTagForImportedCompetitorPlaceholder();
String version(String version);
String replicables();
String eventRegattaRacesLegendWind();
String eventRegattaRacesLegendVideo();
String eventRegattaRacesLegendAudio();
@@ -2002,7 +1919,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String errorCreatingPairingList(String message);
String unexpectedErrorDuringFileImport();
String couldNotDownload(String url);
String roles();
String sliceRace();
String slicingARaceWasSuccessful();
String enterNameForSlicedRace();
@@ -2217,9 +2133,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String tagCopiedLinkSuccessfully();
String tagCopiedLinkNotSuccessfully();
String confirm();
String cancel();
String close();
String username();
String boatClasses();
String sailorProfiles();
String unknownSailorProfile(String message);
@@ -2423,6 +2336,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String manageEvents();
String sharingLinkCopied();
String startOfTrackingMustNotBeAfterEndOfTracking();
String landscape();
String identifier();
String selectARole();
String raceOfficerOnVessel();
@@ -12,7 +12,6 @@ listRegattas=List Regattas
wind=Wind
maneuverType=Maneuver
windPanelLabel=This is the Wind Panel which so far is completely empty.
refresh=Refresh
removeNumber=Remove ({0})
windSource=Wind Source
dampeningInterval=Dampening Interval
@@ -132,7 +131,6 @@ storedPort=Port Stored Data
liveUri=Live URI
storedUri=Stored URI
eventsConnectedTo=Events Currently Tracked
hostname=Hostname
declinationCheckbox=Correct Wind Bearing by Declination
raceStartTrackingColumn=Tracking Started
pauseAutomaticRefresh=Pause automatic refresh
@@ -369,24 +367,17 @@ degreesBoatToTheWind=Angle to wind
racesInLeaderboard=Races in leaderboard
leaderboardsInGroup=Leaderboards in group
replication=Replication
errorFetchingReplicaData=Error fetching replica data: {0}
averageAbsoluteCrossTrackErrorInMeters=\u2205 XTE
averageAbsoluteCrossTrackErrorInMetersTooltip=The average cross track error to the great circle segment connecting leg start with leg end; shows the average after the leg, and the current value while in the leg.
averageSignedCrossTrackErrorInMeters=\u2205 XTE +/-
averageSignedCrossTrackErrorInMetersTooltip=The average position on the course as a signed distance from the course middle line; 0 meaning on the course middle line; negative values mean left-hand side, positive values mean right-hand side; shows the average after the leg, and the current value while in the leg.
raceAverageAbsoluteCrossTrackErrorInMetersTooltip=The average absolute cross track error to the great circle segments connecting leg start with leg end for all upwind legs of this race, ignoring to which side of the course middle line the competitor is
raceAverageSignedCrossTrackErrorInMetersTooltip=The signed average cross track error to the great circle segments connecting leg start with leg end for all upwind legs of this race; negative values mean left of the course middle line, positive values mean right.
enterMaster=Hostname of Master Instance
errorStartingReplication=Error starting replication from host {0} / exchange {1}: {2}
helpLines=Help lines
startLine=Start line
finishLine=Finish line
advantageLine=Advantage line
courseMiddleLine=Course middle line
messagingPortNumber=Messaging port number (0 for default)
servletPortNumber=Servlet port number
registeredAt=Registered at {0}
replicatingFromMaster=Replicating from master {0}:{2}, messaging port {3}:{1}, exchange {4}, replicating {5}
showWindSpeedSeries=Show wind speed data
showWindDirectionSeries=Show wind directions data
fleet=Fleet
@@ -428,7 +419,6 @@ boatClassDoesNotMatchSelectedRegatta=The selected races contain boat classes whi
regattaExistForSelectedBoatClass=There is at least one regatta for the selected boat classes. Really create default regatta(s) for those race(s)?
addRegatta=Add Regatta...
importRegattas=Import Regattas...
exchangeName=Exchange Name
course=Course
courseLayout=Course layout
buoy=Buoy
@@ -718,7 +708,6 @@ starboardSide=Starboard
pleaseEnterANumber=Please enter a number.
competitorsFilter=Competitors filter
flagStatus=Flag status
additionalInformation=Info
windFixListingDescription=Wind Fixes (first 3, last 3, true values)
noWindFixesAvailable=No Wind-Fixes available.
distanceToStarboardEndOfStartlineWhenPassingStart=Dist. Stb-Side of Line when Starting
@@ -740,7 +729,6 @@ waypoints=Waypoints
disableRaceFilter=Disable filter
enableRaceFilter=Enable filter
raceStatusColumn=Race Status
loading=Loading (on a slow internet connection this can take some minutes)...
racesWithHiddenState=Races with state HIDDEN
mediaDateFormatError=Invalid date format. Use: {0}
selectedCompetitors=Selected competitors
@@ -807,19 +795,6 @@ importSuccessOverwriteInfo=Had to overwrite the following regattas, you will nee
regattaOverviewConfiguration=Regatta Overview Configuration
firstRaceIsNonDiscardableCarryForward=Starts with non-discardable carry-forward
addReplicationMaster=Connect to replication master server
connect=Connect
connectToMaster=Connect to Master
exchangeHost=Messaging Hostname
explainExchangeHostName=Hostname where the messaging queue is running on.
explainReplicationHostname=Hostname where the replication master is running on.
explainReplicationExchangeName=The name of the exchange queue. It must be the same as configured in master.
explainReplicationExchangePort=The port of the messaging exchange queue. This is used for all data after initial load.
explainReplicationServletPort=Servlet port number that is used to connect to register this replica and receive initial load.
explainReplicasRegistered=Replicas registered (this server is master):
explainConnectionsToMaster=Connections to a master (this server is a replica):
explainNoConnectionsToMaster=No connections to a master server configured. Click the Connect to Master button to configure one.
explainNoConnectionsFromReplicas=No connections from a replica found. You can connect replicas by using their AdminConsole.
stopConnectionToMaster=Stop Replication
asLink=As link
noStarttimeAnnouncedYet=Pending
raceIsRunning=Running
@@ -830,9 +805,6 @@ raceIsInStartphase=Start phase
generalRecall=General recall
startPostponed=Postponed
raceAbandoned=Abandoned
stopAllReplicas=Drop connection to all replicas (Dangerous!)
warningServerIsReplica=ATTENTION: This server is configured to be a replica. Do NOT change anything or this will lead to strange effects!
dropReplicaConnection=Drop connection
timePanelName=Time Control
competitorFilterExplanation=The filter will show all competitors matching the criterias:
protestTime=Protest time
@@ -848,7 +820,6 @@ startAt=Start at
finishAt=Finish at
protestStartsAt=Protest starts at
protestEndsAt=Protest ends at
unknown=Unknown
raceLog=Race log
regattaLog=Regatta log
refreshRaceLog=Refresh race log
@@ -1046,7 +1017,6 @@ errorTryingToRemoveIgtimiAccount=Error trying to remove Igtimi account for user
successfullyRemoveIgtimiAccount=Successfully removed Igtimi account for user {0}
eMailMustNotBeEmpty=e-Mail address must not be empty
emailAddress=e-mail address
password=Password
searchTag=Search tag
doYouReallyWantToRemoveLeaderboard=Do you really want to remove the leaderboard: ''{0}''?
metaLeaderboardCannotBeChanged=This is a meta leaderboard. It can''t be changed here.
@@ -1181,7 +1151,6 @@ showSimulationOverlay=Show simulation overlay
simulationLegendTooltip=Time Comparison:\nRace is the leg duration measured from GPS, Omniscient is the course if one would know everything about the wind, Opportunist are courses if one decides to take a turn measuring the distance to the next mark, 1-Turners are the courses if one knows everything about the wind and just takes one turn
racesScored=Races scored
racesScoredTooltip=Number of races the competitor has completed or gotten a score for in this leaderboard.
averageNumberOfOperationsPerMessage=Average number of operations per message
showUncorrectedTotalPoints=Show uncorrected total points
setStartTimeReceived=Set start time received
setStartTimeReceivedDescription=Sets the startTimeReceived of the selected TrackedRace to the provided value. Leave the value empty to remove the currently set startTimeReceived.
@@ -1212,10 +1181,6 @@ registrationLinkUrlExplain=You can copy the URL and paste it into your invitatio
registrationLinkUrlCopy=Copy to clipboard
registrationLinkShare=Share
explainRegistrationLinkDialog=Competitors for open regattas can register themselves by opening the registration link or scanning the QR-Code below with their smartphone.
numberOfQueueMessagesSent=Number of queue messages sent
totalSize=Total Size
averageMessageSize=Average size per message in bytes
totalNumberOfOperations=Total number of operations
currentOrAverageSpeedOverGroundInKnotsTooltip=Current speed over ground in knots while leg is still running; average speed over ground when leg is completed
currentOrAverageSpeedOverGroundInKnots=SOG (\u2205 at end)
connectors=Connectors
@@ -1315,11 +1280,6 @@ sendingMailsFailed=Sending Mails failed
sendingMailsSuccessful=Successfully sent E-Mails
selectEventForInvitation=Select Event for Invitation
imageURL=Image URL
upload=Upload
removeResult=Remove operation: {0} {1}
uploadSuccessful=Upload successful
fileUploadResult=File upload: {0} {1}.\nIn case of error please check that your File Storage service is properly configured.
removeUploadedFile=Remove uploaded file
showCompetitorBoatColumn=Boat of the competitor
showCompetitorShortNameColumn=Competitor Short Name
showCompetitorShortNameColumnTooltip=Shows the short name plus the nationality flag or competitor image. If available, a competitor image is prioritized over a nationality flag. If "{0}" is set, both icons will be displayed.
@@ -1518,7 +1478,6 @@ imageSizeError=The size of the {0} image does not fit. The width should be betwe
imageToSmallError=The size of the {0} image does not fit. The width should be at least {1} px and the height at least {2} px.
imageResizeError=Resizing of the {0} image does not work. The width/height ratio should be between {1} and {2}, but actually is {3}.
couldNotRetrieveImageSizeYet=The width and height of the image could not be retrieved yet.
pleaseOnlyUploadContentYouHaveAllUsageRightsFor=Please only upload content you have all usage rights for. Remember that content may be cropped. Using YouTube URLs for video content is usually possible.
registerCompetitorsOnRace=Register Competitors on Race (e.g. for split-fleet racing)
doYouWantToRegisterCompetitorsDirectlyOnTheRace=Do you want to register competitors directly on the Race?
doYouWantToDisableCompetitorsRegistrationsOnTheRace=Do you want to disable competitor registrations on the Race?
@@ -1595,10 +1554,8 @@ noEventsYet=There are no events yet.
selectCompetitorImportProvider=Please select a competitor import provider...
selectResultImportProvider=Please select a result import provider...
buildVersion=Build version
serverInformation=Server Information
serverConfiguration=Server Configuration
standaloneServer=Standalone server
send=Send...
passId=PassId
createdAt=Created at
logicalTimepoint=Logical timepoint
@@ -1788,8 +1745,6 @@ errorLoadingCompetitorImportProviders=Error loading competitor import providers:
errorLoadingCompetitorImportDescriptors=Error loading competitor import descriptors: {0}
couldNotSaveCompetitorRegistrations=Could not save competitor registrations: {0}
searchTagForImportedCompetitorPlaceholder=Use, e.g., the race+fleet name
version=Version: {0}
replicables=Replicating objects
set=Set
eventRegattaRacesLegendWind=# Wind sensors
eventRegattaRacesLegendVideo=# Video streams
@@ -2140,7 +2095,6 @@ swissTimingUpdatePassword=Password for sending updates
allowResizing=Allow resizing
resizeSuccessfull=Resizing successfully finished
resizeUnsuccessful=Resizing not possible: {0}
setUpStorageService=Please set up a file storage service first
automaticResizeNeedsStorageService=Automatic Resizing needs a working FileStorageService.
qrCodeBoatInviteTitle=You are invited to track boat {0} for the regatta {1}
qrCodeMarkInviteTitle=You are invited to track mark {0} for the regatta {1}
@@ -2213,9 +2167,7 @@ tagCopyToClipBoard=Copy to clipboard
tagBrowseAndUploadImage=Browse and upload
tagCopiedLinkSuccessfully=Successfully copied link to clipboard!
tagCopiedLinkNotSuccessfully=Your browser does not support copying to clipboard, please copy link manually!
username=User name
confirm=Confirm
cancel=Cancel
close=Close
boatClasses=Boat classes
sailorProfiles=Sailor Profiles
@@ -2258,9 +2210,6 @@ warningSailInsightVersion=The server is configured for use with SAP Sail InSight
invalidState=Invalid state
doYouReallyWantToRemoveDeviceConfiguration=Do you really want to remove device configuration {0}?
errorFetchingSimulationData=An Error occured while fetching simulation data: {0}. Please ensure you are signed in with your user account.
usernameAndPasswordMustBothBeSet=Username and password must both be filled or empty
explainUserName=Username to use for authentification on the master
explainPassword=Password to use for authentification on the master
tracTracConnection=TracTrac Connection
addTracTracConnection=Add TracTrac Connection
filterTracTracConnections=Filter TracTrac Connections
@@ -2422,11 +2371,11 @@ errorCancelSubscription=Error canceling subscription: {0}
errorSaveSubscription=Error saving subscription: {0}
errorInvalidSubscritionProvider=Invalid subscription provider: {0}
unableToLoadCourseAreas=Unable to load course areas: {0}
serverName=Server Name: {0}
insufficientPermissions=The current user has insufficient permissions for this action. Please log in with an authorized user.
manageEvents=Manage Events
sharingLinkCopied=Copied link to clipboard!
startOfTrackingMustNotBeAfterEndOfTracking=Start of tracking must not be after end of tracking
landscape=Landscape
identifier=Identifier
selectARole=Select a role
raceOfficerOnVessel=Officer on vessel
@@ -12,7 +12,6 @@ listRaces=Rennen anzeigen
listRegattas=Regatten anzeigen
wind=Wind
windPanelLabel=This is the Wind Panel which so far is completely empty.
refresh=Aktualisieren
removeNumber=Löschen ({0})
windSource=Windquelle
dampeningInterval=Mittelungsintervall
@@ -134,7 +133,6 @@ storedPort=Port Stored Data
liveUri=Live URI
storedUri=Stored URI
eventsConnectedTo=Momentan verfolgte Events
hostname=Hostname
declinationCheckbox=Windrichtung mit Missweisung korrigieren
raceStartTrackingColumn=Tracking Started
pauseAutomaticRefresh=Keine automatische Aktualisierung
@@ -367,24 +365,17 @@ degreesBoatToTheWind=Winkel zum Wind
racesInLeaderboard=Rennen in der Rangliste
leaderboardsInGroup=Ranglisten in der Gruppe
replication=Replikation
errorFetchingReplicaData=Fehler beim Beschaffen der Replikationsdaten: {0}
averageAbsoluteCrossTrackErrorInMeters=\u2205 XTE
averageAbsoluteCrossTrackErrorInMetersTooltip=Die durchschnittliche Querabweichung zur Kursmittellinie in diesem Schenkel; die Seite, zu der der Teilnehmer abweicht, spielt dabei keine Rolle; aktueller Wert während des Bahnschenkels, danach der Durchschnittswert.
raceAverageAbsoluteCrossTrackErrorInMetersTooltip=Die durchschnittliche Querabweichung zur Kursmittellinie für alle Kreuzen in diesem Rennen; die Seite, zu der der Teilnehmer abweicht, spielt dabei keine Rolle; aktueller Wert während des Bahnschenkels, danach der Durchschnittswert.
averageSignedCrossTrackErrorInMeters=\u2205 XTE +/-
averageSignedCrossTrackErrorInMetersTooltip=Die durchschnittliche Querabweichung zur Kursmittellinie in diesem Schenkel, wobei negative Werte Abweichungen nach links, positive Werte Abweichungen nach rechts bedeuten.
raceAverageSignedCrossTrackErrorInMetersTooltip=Die durchschnittliche Querabweichung zur Kursmittellinie für alle Kreuzen diesem Rennen, wobei negative Werte Abweichungen nach links, positive Werte Abweichungen nach rechts bedeuten.
enterMaster=Hostname der Master-Instanz
errorStartingReplication=Fehler beim Starten der Replikation von Host {0} / Exchange {1}: {2}
helpLines=Hilfslinien
startLine=Startlinie
finishLine=Ziellinie
advantageLine=Führungslinie
courseMiddleLine=Kursmittellinie
messagingPortNumber=Messaging-Portnummer (0 für Default)
servletPortNumber=Servlet Portnummer
registeredAt=Registriert {0}
replicatingFromMaster=Repliziert von master {0}:{2}, Messaging Port {3}:{1}, Exchange {4}, replizierte Objekte {5}
showWindSpeedSeries=Daten für Windgeschwindigkeit zeigen
showWindDirectionSeries=Daten für Windrichtung zeigen
fleet=Flotte
@@ -426,7 +417,6 @@ boatClassDoesNotMatchSelectedRegatta=Die ausgewählten Rennen enthalten eine Boo
regattaExistForSelectedBoatClass=Es gibt mindestens eine Regatta zu den ausgewählten Bootsklassen. Dennoch Default-Regatta für diese(s) Rennen anlegen?
addRegatta=Regatta hinzufügen...
importRegattas=Regatten importieren...
exchangeName=Exchange Name
course=Kurs
courseLayout=Kursdefinition
buoy=Boje
@@ -677,7 +667,6 @@ currentTime=Aktuelle Zeit:
tractracUsername=TracTrac Benutzername
tractracPassword=TracTrac Passwort
operatorEquals=Ist gleich
additionalInformation=Info
operatorNotEqualTo=Ist ungleich
operatorLessThan=Kleiner als
operatorLessThanEquals=Kleiner oder gleich
@@ -730,7 +719,6 @@ waypoints=Wegpunkte
disableRaceFilter=Deaktiviere Filter
enableRaceFilter=Aktiviere Filter
raceStatusColumn=Renn-Status
loading=Lade...
racesWithHiddenState=Rennen mit Status HIDDEN
selectedCompetitors=Ausgewählte Teilnehmer
filterNothing=Nichts filtern
@@ -794,22 +782,6 @@ masterDataImportPanel=Master Data Import
importSuccess=Erfolg\nEs wurden {0} Ranglistengruppe(n) und {1} Rangliste(n) und {2} Veranstaltung(en) und {3} Regatten und {4} Medienbeiträge, sowie {5} getrackte Rennen erstellt.
importSuccessOverwriteInfo=Die folgenden Regatten wurden überschrieben; ihre Rennen müssen neu getrackt werden:
addReplicationMaster=Verbindung mit Master herstellen
connect=Verbinden
connectToMaster=Mit einem Master verbinden
exchangeHost=Queue Server
explainExchangeHostName=Name oder IP des Servers auf dem die Queue läuft.
explainReplicationHostname=Der Name oder die IP des Servers auf dem der Master Java Server läuft.
explainReplicationExchangeName=Name der Messaging Queue.
explainReplicationExchangePort=Port des Messaging Queue Servers.
explainReplicationServletPort=Servlet Port.
explainReplicasRegistered=Registrierte Replicas (dieser Server ist der Master):
explainConnectionsToMaster=Verbindungen zu einem Master (dieser Server ist eine Replica)
explainNoConnectionsToMaster=Es sind keine Verbindungen zu einem Master Server konfiguriert.
explainNoConnectionsFromReplicas=Es sind keine Verbindugen von Replicas registriert.
stopConnectionToMaster=Replikation anhalten
stopAllReplicas=Verbindung zu allen Replicas abbrechen
warningServerIsReplica=ACHTUNG: Dieser Server ist als Replica konfiguriert. Vermeiden Sie alle Operationen!
dropReplicaConnection=Verbindung abbrechen
timePanelName=Zeitregler
competitorFilterExplanation=Der Filter zeigt alle Teilnehmer, welche folgende Bedingungen erfüllen:
protestTime=Protestzeit
@@ -833,7 +805,6 @@ startAt=Start
finishAt=Rennende
protestStartsAt=Protestzeit beginnt
protestEndsAt=Protestzeit endet
unknown=Unbekannt
raceLog=RaceLog
regattaLog=RegattaLog
refreshRaceLog=RaceLog neu laden
@@ -1028,7 +999,6 @@ errorTryingToRemoveIgtimiAccount=Fehler beim Löschen des Zugangs zum Benutzerko
successfullyRemoveIgtimiAccount=Zugang zum Igtimi-Benutzerkonto {0} erfolgreich gelöscht
eMailMustNotBeEmpty=e-Mailadresse darf nicht leer sein
emailAddress=e-Mailadresse
password=Kennwort
searchTag=Suchhilfe
doYouReallyWantToRemoveLeaderboard=Möchten Sie wirklich die Rangliste ''{0}'' löschen?
doYouReallyWantToRemoveTrackedRaces=Möchten Sie die getrackten Rennen wirklich löschen?
@@ -1163,7 +1133,6 @@ simulationLegendTooltip=Time Comparison:\nRace is the leg duration measured from
showNumberOfRacesScored=Anzahl bepunkteter Rennen
racesScored=Bepunktete Rennen
racesScoredTooltip=Anzahl von Rennen, die der Segler vollendet oder für die er Punkte bekommen hat
averageNumberOfOperationsPerMessage=Durchschnittliche Anzahl Operationen pro Nachricht
showUncorrectedTotalPoints=Unkorrigierte Punkte anzeigen
setStartTimeReceived=Setze die erhaltene Startzeit
setStartTimeReceivedDescription=Setzt die startTimeReceived des selektierten TrackedRaces auf den angegebenen Wert. Den Wert leer lassen, um die aktuell gesetzte startTimeReceived zu entfernen.
@@ -1194,10 +1163,6 @@ registrationLinkUrlExplain=URL zur Verwendung in der Einladung.
registrationLinkUrlCopy=In die Zwischenablage kopieren
registrationLinkShare=Teilen
explainRegistrationLinkDialog=Teilnehmer für offene Regatten können sich mit der Registrierungs-URL oder durch Scannen des QR-Code mit dem Smartphone selber an der Regatta registrieren.
numberOfQueueMessagesSent=Anzahl verschickter Queue Nachrichten
totalSize=Gesamtgröße
averageMessageSize=Durchschnittsgrösse einer Nachricht
totalNumberOfOperations=Gesamtanzahl gesendete Operationen
currentOrAverageSpeedOverGroundInKnotsTooltip=Momentane Fahrt über Grund während der Teilnehmer sich im Bahnabschnitt befindet; Durchschnitt, nachdem der Teilnehmer den Abschnitt beendet hat.
currentOrAverageSpeedOverGroundInKnots=FüG (\u2205 nach Abschluss)
connectors=Konnektoren
@@ -1294,11 +1259,6 @@ sendingMailsFailed=Versenden der E-Mails fehlgeschlagen
sendingMailsSuccessful=Versenden der E-Mails war erfolgreich!
selectEventForInvitation=Event für Einladung auswählen
imageURL=Bild-URL
upload=Hochladen
removeResult=Löschergebnis: {0} {1}
uploadSuccessful=Hochladen erfolgreich
fileUploadResult=Ergebnis des Hochladens: {0} {1}\nIm Fehlerfall bitte die Konfiguration für "Datei Speicherung" prüfen.
removeUploadedFile=Hochgeladene Datei löschen
showCompetitorBoatColumn=Boot des Teilnehmers anzeigen
showCompetitorShortNameColumn=Kurzen Teilnehmernamen anzeigen
showCompetitorShortNameColumnTooltip=Zeigt den kurzen Teilnehmernamen sowie eine Nationalitäten-Flagge oder ein Teilnehmerbild an. Ein Teilnehmerbild wird hierbei bevorzugt angzeigt, falls vorhanden. Falls auch "{0}" ausgewählt ist, werden stets beide Bilder angezeigt.
@@ -1496,7 +1456,6 @@ imageSizeError=Die Größe des {0}-Bildes ist unpassend. Die Breite sollte zwisc
imageToSmallError=Die Größe des {0}-Bildes ist unpassend. Die Breite sollte mindestens {1} px und die Höhe mindestens {2} px sein.
imageResizeError=Die Skalierung des {0}-Bildes hat nicht funktionoiert. Das Breite/Höhe Verhältnis sollte zwischen {1} und {2} sein, ist aber {3}.
couldNotRetrieveImageSizeYet=Bildgröße konnte noch nicht ermittelt werden.
pleaseOnlyUploadContentYouHaveAllUsageRightsFor=Bitte nur Inhalte hochladen, für die alle Verwendungsrechte vorliegen. Bitte beachten: Bilder können verändert wiedergegeben werden. YouTube-URLs funktionieren für gewöhnlich für Video-Inhalte.
registerCompetitorsOnRace=Teilnehmer auf dem Rennen registrieren (z.B. für Split-Fleets)
doYouWantToRegisterCompetitorsDirectlyOnTheRace=Wollen Sie Teilnehmer direkt auf dem Rennen registrieren?
warningDirectCompetitorRegistration=Warnung! Diese Einstellung führt dazu, dass Teilnehmer dieses Rennens von nun an auf Rennebene registriert werden müssen. Dies ist nur sinnvoll, wenn sich die Teilnehmer verschiedener Rennen einer Regatta unterscheiden.
@@ -1579,10 +1538,8 @@ noEventsYet=Es sind keine Veranstaltungen vorhanden.
selectResultImportProvider=Bitte wählen Sie einen Ergebnisdienst aus...
selectCompetitorImportProvider=Bitte wählen Sie einen Dienst für den Import von Teilnehmerdaten aus...
buildVersion=Build-Version
serverInformation=Server-Information
serverConfiguration=Server-Konfiguration
standaloneServer=Eigenständiger Server
send=Abschicken...
passId=Druchlauf-Nr.
createdAt=Erstellt am
logicalTimepoint=Logischer Zeitpunkt
@@ -1772,8 +1729,6 @@ errorLoadingCompetitorImportProviders=Fehler beim Laden der Quellen für den Tei
errorLoadingCompetitorImportDescriptors=Fehler beim Laden der zu importierenden Teilnehmerdaten: {0}
couldNotSaveCompetitorRegistrations=Teilnehmerregistrierung konnte nicht gespeichert werden: {0}
searchTagForImportedCompetitorPlaceholder=Z.B. Renn- und Gruppenname
version=Version: {0}
replicables=Replizierte Objekte
set=Setzen
eventRegattaRacesLegendWind=Nr. Windsensoren
eventRegattaRacesLegendVideo=Nr. Videostreams
@@ -2134,7 +2089,6 @@ swissTimingUpdatePassword=Passwort zum Versenden der Updates
allowResizing=Skalierung erlauben
resizeSuccessfull=Skalierung erfolgreich abgeschlossen
resizeUnsuccessful=Skalierung nicht möglich: {0}
setUpStorageService=Bitte setze zuerst einen Datei Speicher auf
automaticResizeNeedsStorageService=Die automatische Skalierung benötigt einen funktionierenden FileStorageService.
qrCodeBoatInviteTitle=Willkommen zur Regatta {1} um das Boot {0} zu tracken
qrCodeMarkInviteTitle=Willkommen zur Regatta {1} um die Tonne {0} zu tracken
@@ -2207,9 +2161,7 @@ tagCopyToClipBoard=Kopiere in die Zwischenablage
tagBrowseAndUploadImage=Bild auswählen und senden
tagCopiedLinkSuccessfully=Link erfolgreich in die Zwischenablage kopiert!
tagCopiedLinkNotSuccessfully=Dein Browser unterstüzt leider kein Kopieren in die Zwischenablage, bitte kopiere den Link manuell!
username=Benutzername
confirm=Fortfahren
cancel=Abbrechen
close=Schließen
boatClasses=Bootsklassen
sailorProfiles=Seglerprofile
@@ -2252,9 +2204,6 @@ warningSailInsightVersion=Der Server ist nur für die Verwendung in Kombination
invalidState=Ungültiger Zustand
doYouReallyWantToRemoveDeviceConfiguration=Möchten Sie die Gerätekonfiguration {0} wirklich entfernen?
errorFetchingSimulationData=Ein Fehler ist beim Abrufen der Simulationsdaten aufgetreten: {0}. Bitte stelle sicher, dass Du an Deinem Benutzerkonto angemeldet bist.
usernameAndPasswordMustBothBeSet=Username und Passwort müssen beide entweder gesetzt oder leer sein.
explainUserName=Der Benutzername der zur Authentifizierung auf dem Master eingesetzt wird
explainPassword=Das Password das zur Authentifizierung auf dem Master eingesetzt wird
addTracTracConnection=TracTrac Verbindung hinzufügen
tracTracConnection=TracTrac Verbindung
filterTracTracConnections=TracTrac Verbindungen filtern
@@ -2437,6 +2386,7 @@ insufficientPermissions=Aktuelle Berechtigungen reichen nicht aus um die gewähl
manageEvents=Events Verwalten
sharingLinkCopied=Copied link to clipboard!
startOfTrackingMustNotBeAfterEndOfTracking=Startzeitpunkt des Trackings darf nicht nach dessen Endzeitpunkt liegen
landscape=Landschaft
identifier=Kennung
selectARole=Rolle auswählen
raceOfficerOnVessel=Wettfahrtleiter auf dem Wasser
@@ -12,7 +12,6 @@ listRegattas=Listar regatas
wind=Viento
maneuverType=Maniobra
windPanelLabel=Este es el panel de vientos, y hasta el momento está totalmente vacío.
refresh=Refrescar
removeNumber=Eliminar ({0})
windSource=Fuente de vientos
dampeningInterval=Intervalo de amortiguación
@@ -132,7 +131,6 @@ storedPort=Datos grabados de puerto
liveUri=URI en directo
storedUri=URI almacenado
eventsConnectedTo=Eventos rastreados actualmente
hostname=Nombre de host
declinationCheckbox=Corregir marcación del viento por declinación
raceStartTrackingColumn=Rastreo iniciado
pauseAutomaticRefresh=Pausar el refresco automático
@@ -363,24 +361,17 @@ degreesBoatToTheWind=Ángulo respecto al viento
racesInLeaderboard=Carreras en la tabla de clasificación
leaderboardsInGroup=Tablas de clasificación en grupo
replication=Replicación
errorFetchingReplicaData=Error al obtener datos replicados: {0}
averageAbsoluteCrossTrackErrorInMeters=∅ XTE
averageAbsoluteCrossTrackErrorInMetersTooltip=El error de recorrido medio hasta el gran segmento de círculo que conecta el inicio del tramo con el final del tramo; muestra la media tras el tramo y el valor actual mientras se encuentra en el tramo.
averageSignedCrossTrackErrorInMeters=∅ XTE +/-
averageSignedCrossTrackErrorInMetersTooltip=La posición media en el rumbo como distancia señalizada desde la línea de crujía del rumbo; 0 significa en la línea de crujía del rumbo; los valores negativos significan la banda de babor y los valores positivos significan la banda de estribor; muestra la media tras el tramo y el valor actual mientras se encuentra en el tramo.
raceAverageAbsoluteCrossTrackErrorInMetersTooltip=El error de recorrido absoluto hasta los grandes segmentos de círculo que conectan el inicio del tramo con el fin del tramo para todos los tramos contra el viento de esta prueba, sin tener en cuenta en que banda de la línea de crujía del rumbo se encuentra el competidor.
raceAverageSignedCrossTrackErrorInMetersTooltip=El error de recorrido medio señalizado hasta los grandes segmentos de círculo que conectan el inicio del tramo con el fin del tramo para todos los tramos contra el viento de esta prueba; los valores negativos significan la banda de babor de la línea de crujía; los valores positivos significan la banda de estribor.
enterMaster=Nombre de host de la instancia maestra
errorStartingReplication=Error al iniciar replicación del host {0} / intercambio {1}: {2}
helpLines=Líneas de ayuda
startLine=Línea de salida
finishLine=Línea de llegada
advantageLine=Línea de ventaja
courseMiddleLine=Línea de crujía del rumbo
messagingPortNumber=Número de puerto de mensajería (0 para predeterminado)
servletPortNumber=Número de puerto Servlet
registeredAt=Registrado a {0}
replicatingFromMaster=Replicando desde el maestro {0}:{2}, puerto de mensajería {3}:{1}, intercambio {4}, replicando {5}
showWindSpeedSeries=Mostrar datos de velocidad del viento
showWindDirectionSeries=Mostrar datos de dirección del viento
fleet=Flota
@@ -422,7 +413,6 @@ boatClassDoesNotMatchSelectedRegatta=Las carreras seleccionadas contienen clases
regattaExistForSelectedBoatClass=Hay al menos una regata para las clases de embarcación seleccionadas. ¿Realmente desea crear regata(s) por defecto para esta(s) carrera(s)?
addRegatta=Añadir regata...
importRegattas=Importar regatas...
exchangeName=Intercambiar nombre
course=Rumbo
courseLayout=Disposición de rumbo
buoy=Boya
@@ -712,7 +702,6 @@ starboardSide=Estribor
pleaseEnterANumber=Indique un número.
competitorsFilter=Filtro de competidores
flagStatus=Status de bandera
additionalInformation=Info
windFixListingDescription=Correcciones de viento (3 primeras, 3 últimas, valores verdaderos)
noWindFixesAvailable=No hay correcciones de viento disponibles
distanceToStarboardEndOfStartlineWhenPassingStart=Dist.banda estribor o línea cuando se ha cruzado línea de salida
@@ -734,7 +723,6 @@ waypoints=Puntos de ruta
disableRaceFilter=Deshabilitar filtro
enableRaceFilter=Habilitar filtro
raceStatusColumn=Status de carrera
loading=Cargando (si la conexión de internet es lenta, puede durar algunos minutos)...
racesWithHiddenState=Carreras con estado OCULTA
mediaDateFormatError=Formato de fecha no válido. Utilice: {0}
selectedCompetitors=Competidores seleccionados
@@ -801,19 +789,6 @@ importSuccessOverwriteInfo=Se han tenido que sobrescribir las regatas siguientes
regattaOverviewConfiguration=Configuración del resumen de regata
firstRaceIsNonDiscardableCarryForward=Empieza con no descartables seguir adelante
addReplicationMaster=Conectar con servidor maestro de replicación
connect=Conectar
connectToMaster=Conectar con maestro
exchangeHost=Nombre de host de mensajería
explainExchangeHostName=Nombre de host donde la cola de mensajería está funcionando
explainReplicationHostname=Nombre de host donde el maestro de replicación está funcionando
explainReplicationExchangeName=El nombre de la cola de intercambio. Debe ser igual que el que se ha configurado en el maestro.
explainReplicationExchangePort=El puerto de la cola de intercambio de mensajería. Se utiliza para todos los datos después de la carga inicial.
explainReplicationServletPort=Número de puerto Servlet utilizado para conectar y registrar esta réplica y recibir la carga inicial.
explainReplicasRegistered=Réplicas registradas (este servidor es maestro)
explainConnectionsToMaster=Conexiones con un maestro (este servidor es una réplica)
explainNoConnectionsToMaster=No se han configurado conexiones con servidor maestro. Haga clic en el pulsador «Conectar con maestro» para configurar una-
explainNoConnectionsFromReplicas=No se han encontrado conexiones desde una réplica. Puede conectar réplicas utilizando su consola de administración.
stopConnectionToMaster=Parar replicación
asLink=Como enlace
noStarttimeAnnouncedYet=Pendiente
raceIsRunning=En ejecución
@@ -824,9 +799,6 @@ raceIsInStartphase=Fase de salida
generalRecall=Recordatorio general
startPostponed=Aplazado
raceAbandoned=Abandonado
stopAllReplicas=Descartar conexión con todas las réplicas (peligroso)
warningServerIsReplica=ATENCIÓN: Este servidor está configurado como réplica. NO modifique nada, ya que se podrían producir efectos no deseados.
dropReplicaConnection=Descartar conexión
timePanelName=Control de tiempo
competitorFilterExplanation=El filtro muestra a todos los competidores que cumplen los criterios:
protestTime=Tiempo para protestar
@@ -842,7 +814,6 @@ startAt=Salida a las
finishAt=Llegada a las
protestStartsAt=La manifestación empieza a las
protestEndsAt=La manifestación termina a las
unknown=Desconocido
raceLog=Registro de carrera
regattaLog=Regsitro de regata
refreshRaceLog=Refrescar registro de carrera
@@ -1040,7 +1011,6 @@ errorTryingToRemoveIgtimiAccount=Error al intentar eliminar la cuenta de Igtimi
successfullyRemoveIgtimiAccount=La cuenta de Igtimi para el usuario se ha eliminado correctamente {0}
eMailMustNotBeEmpty=La dirección de correo electrónico no debe estar vacía
emailAddress=Dirección de correo electrónico
password=Contraseña
searchTag=Etiqueta de búsqueda
doYouReallyWantToRemoveLeaderboard=¿Desea realmente eliminar la tabla de clasificación: "{0}"?
metaLeaderboardCannotBeChanged=Se trata de una metatabla de clasificación. No se puede modificar aquí.
@@ -1174,7 +1144,6 @@ showSimulationOverlay=Mostrar superposición de simulación
simulationLegendTooltip=Comparación de tiempos:\nLa regata es la duración del tramo medido del GPS, Omnisciente es el rumbo si se conociera todo sobre el viento, Oportunista es el rumbo cuando se toma un giro midiendo la distancia hasta la próxima baliza, los giros 1 son los rumbos si se conoce todo sobre el viento y se realiza un giro.
racesScored=Carreras puntuadas
racesScoredTooltip=Número de carreras que ha completado un competidor o en las que ha contenido una clasificación en esta tabla de clasificación.
averageNumberOfOperationsPerMessage=Número promedio de operaciones por mensaje
showUncorrectedTotalPoints=Mostrar puntos totales no corregidos
setStartTimeReceived=Fijar hora de inicio recibida
setStartTimeReceivedDescription=Fija la startTimeReceived de la TrackedRace seleccionada en el valor proporcionado. Deje el valor en blanco para eliminar la startTimeReceived actual.
@@ -1205,10 +1174,6 @@ registrationLinkUrlExplain=Puede copiar el URL y pegarlo en su invitación.
registrationLinkUrlCopy=Copiar en portapapeles
registrationLinkShare=Compartir
explainRegistrationLinkDialog=Los competidores de regatas abiertas pueden registrarlas mediante el enlace de registro y el escaneo de código QR siguiente con su smartphone.
numberOfQueueMessagesSent=Número de mensajes en cola enviados
totalSize=Tamaño total
averageMessageSize=Tamaño total por mensaje en bytes
totalNumberOfOperations=Número total de operaciones
currentOrAverageSpeedOverGroundInKnotsTooltip=Velocidad actual sobre el suelo en nudos en el tramo durante la carrera; velocidad media sobre el suelo una vez concluido el tramo
currentOrAverageSpeedOverGroundInKnots=SOG (∅ en la llegada)
connectors=Conectores
@@ -1308,11 +1273,6 @@ sendingMailsFailed=El envío de correos electrónicos ha fallado
sendingMailsSuccessful=Correos electrónicos enviados correctamente
selectEventForInvitation=Seleccionar evento para invitación
imageURL=URL de imagen
upload=Cargar
removeResult=Eliminar operación: {0} {1}
uploadSuccessful=Carga correcta
fileUploadResult=Carga de archivos: {0} {1}. En caso de error, compruebe que su servicio de alojamiento de archivos está configurado correctamente.
removeUploadedFile=Eliminar archivo
showCompetitorBoatColumn=Embarcación del competidor
showCompetitorShortNameColumn=Denominación breve de competidor
showCompetitorShortNameColumnTooltip=Muestra el nombre breve más la bandera del país o imagen del competidor. Si está disponible, se prioriza la imagen de competidor a la bandera del país. Se mostrarán ambos iconos si se fija "{0}".
@@ -1511,7 +1471,6 @@ imageSizeError=El tamaño de la imagen {0} no encaja. Debería medir entre {1} y
imageToSmallError=El tamaño de la imagen {0} no encaja. Debería estar al menos entre {1} px de anchura y {2} px de altura.
imageResizeError=El ajuste de tamaño de la imagen {0} no funciona. La ratio de ancho/alto debería estar entre {1} y {2}, pero realmente es {3}.
couldNotRetrieveImageSizeYet=La anchura y altura de la imagen todavía no se han podido recuperar.
pleaseOnlyUploadContentYouHaveAllUsageRightsFor=Cargue solamente contenidos de los que disponga de derechos de utilización. Recuerde que el contenido puede aparecer recortado. Normalmente es posible utilizar los URLs de YouTube para el contenido de vídeo.
registerCompetitorsOnRace=Registrar competidores en la carrera (p.ej., para dividir una regata de flota)
doYouWantToRegisterCompetitorsDirectlyOnTheRace=¿Desea registrar competidores directamente en la carrera?
doYouWantToDisableCompetitorsRegistrationsOnTheRace=¿Desea deshabilitar los registros de competidores en la carrera?
@@ -1588,10 +1547,8 @@ noEventsYet=Todavía no hay eventos.
selectCompetitorImportProvider=Seleccione un proveedor de importación de competidores...
selectResultImportProvider=Seleccione un proveedor de importación de resultados...
buildVersion=Crear versión
serverInformation=Información del servidor
serverConfiguration=Configuración del servidor
standaloneServer=Servidor independiente
send=Enviar...
passId=ID pase
createdAt=Creado a las
logicalTimepoint=Punto temporal lógico
@@ -1781,8 +1738,6 @@ errorLoadingCompetitorImportProviders=Error al cargar proveedores de importació
errorLoadingCompetitorImportDescriptors=Error al cargar descriptores de importación de competidores: {0}
couldNotSaveCompetitorRegistrations=No se han podido grabar los registros de competidores: {0}
searchTagForImportedCompetitorPlaceholder=Por ejemplo, utilice un nombre compuesto por carrera+flota
version=Versión: {0}
replicables=Objetos de replicación
set=Fijar
eventRegattaRacesLegendWind=# Sensores de vientos
eventRegattaRacesLegendVideo=# Transmisiones de audio
@@ -2133,7 +2088,6 @@ swissTimingUpdatePassword=Contraseña para enviar actualizaciones
allowResizing=Permitir ajuste de tamaño
resizeSuccessfull=Ajuste de tamaño finalizado correctamente
resizeUnsuccessful=No es posible el ajuste de tamaño: {0}
setUpStorageService=Configure primero un servicio de almacenamiento de ficheros
automaticResizeNeedsStorageService=Ajuste de tamaño automático requiere un FileStorageService que funcione.
qrCodeBoatInviteTitle=Está invitado a realizar un seguimiento de la embarcación {0} en la regata {1}
qrCodeMarkInviteTitle=Está invitado a realizar un seguimiento de la marca {0} en la regata {1}
@@ -2206,9 +2160,7 @@ tagCopyToClipBoard=Copiar en portapapeles
tagBrowseAndUploadImage=Navegar y cargar
tagCopiedLinkSuccessfully=Enlace copiado correctamente en el portapapeles
tagCopiedLinkNotSuccessfully=Su navegador no soporta la copia en el portapapeles; copie el enlace manualmente
username=Nombre de usuario
confirm=Confirmar
cancel=Cancelar
close=Cerrar
boatClasses=Clases de embarcación
sailorProfiles=Perfiles de navegante
@@ -2251,9 +2203,6 @@ warningSailInsightVersion=El servidor se ha configurado para el uso con SAP Sail
invalidState=Estado no válido
doYouReallyWantToRemoveDeviceConfiguration=¿Desea realmente eliminar la configuración del dispositivo {0}?
errorFetchingSimulationData=Se ha producido un error al obtener los datos de simulación: {0}. Asegúrese de haber iniciado sesión con su cuenta de usuario.
usernameAndPasswordMustBothBeSet=El nombre de usuario y contraseña deben estar completados o en blanco
explainUserName=El nombre de usuario a utilizar para la autenticación en el maestro
explainPassword=La contraseña a utilizar para la autenticación en el maestro
tracTracConnection=Conexión TracTrac
addTracTracConnection=Añadir conexión TracTrac
filterTracTracConnections=Filtrar conexiones TracTrac
@@ -2415,7 +2364,6 @@ errorCancelSubscription=Error al cancelar la suscripción: {0}
errorSaveSubscription=Error al grabar la suscripción: {0}
errorInvalidSubscritionProvider=Proveedor de suscripción no válido: {0}
unableToLoadCourseAreas=Imposible cargar zonas de rumbo: {0}
serverName=Nombre del servidor: {0}
insufficientPermissions=El usuario actual tiene permisos insuficientes para esta acción. Inicie sesión con un usuario autorizado.
manageEvents=Gestionar eventos
sharingLinkCopied=Enlace copiado en portapapeles
@@ -12,7 +12,6 @@ listRegattas=Lister régates
wind=Vent
maneuverType=Manœuvre
windPanelLabel=Ceci est le panneau des mesures du vent, vide pour l''instant.
refresh=Actualiser
removeNumber=Supprimer ({0})
windSource=Source du vent
dampeningInterval=Intervalle d''atténuation
@@ -132,7 +131,6 @@ storedPort=Port données stockées
liveUri=URI en direct
storedUri=URI stockée
eventsConnectedTo=Manifestations actuellement suivies
hostname=Nom de l''hôte
declinationCheckbox=Corriger la direction du vent par déclinaison
raceStartTrackingColumn=Suivi lancé
pauseAutomaticRefresh=Arrêter Actualisation automatique
@@ -363,24 +361,17 @@ degreesBoatToTheWind=Angle par rapport au vent
racesInLeaderboard=Courses dans le palmarès
leaderboardsInGroup=Palmarès dans le groupe
replication=Réplication
errorFetchingReplicaData=Erreur lors de l''accès aux données de réplicas : {0}
averageAbsoluteCrossTrackErrorInMeters=∅ XTE
averageAbsoluteCrossTrackErrorInMetersTooltip=Écart de route (XTE) moyen par rapport à l''arc de cercle reliant le début d''une portion de parcours à la fin d''une portion de parcours. Affiche la moyenne après la portion de parcours, et la valeur actuelle lorsque le bateau se trouve encore sur la portion de parcours.
averageSignedCrossTrackErrorInMeters=∅ XTE +/-
averageSignedCrossTrackErrorInMetersTooltip=Position moyenne dans la course sous forme de distance enregistrée par rapport à la layline de la course. 0 signifie que vous vous trouvez sur la layline. Les valeurs négatives indiquent que vous avez dévié de votre route sur la gauche. Les valeurs positives indiquent que vous avez dévié de votre route sur la droite. Affiche la moyenne après la portion de parcours, et la valeur actuelle lorsque le bateau se trouve encore sur la portion de parcours.
raceAverageAbsoluteCrossTrackErrorInMetersTooltip=Écart de route moyen absolu par rapport aux arcs de cercle reliant le début d''une portion de parcours à la fin d''une portion de parcours pour toutes les portions de parcours dans le lit du vent de cette course, en ignorant de quel côté de la layline de la course le concurrent se trouve.
raceAverageSignedCrossTrackErrorInMetersTooltip=Écart de route moyen enregistré par rapport aux arcs de cercle reliant le début d''une portion de parcours à la fin d''une portion de parcours pour toutes les portions de parcours dans le lit du vent de cette course. Les valeurs négatives indiquent que le concurrent se trouve à gauche de la layline, les valeurs positives indiquent qu''il se trouve à droite de la layline.
enterMaster=Nom d''hôte de l''instance maître
errorStartingReplication=Erreur lors du lancement de la réplication à partir de l''hôte {0}/échange {1} : {2}
helpLines=Lignes d''aide
startLine=Ligne de départ
finishLine=Ligne d''arrivée
advantageLine=Ligne d''avantage
courseMiddleLine=Ligne médiane de course
messagingPortNumber=Numéro de port d''échange de messages
servletPortNumber=Numéro de port Servlet
registeredAt=Enregistré à {0}
replicatingFromMaster=Réplication du serveur maître {0}:{2}, port de messagerie {3}:{1}, échange {4}, réplication {5}
showWindSpeedSeries=Afficher données de vitesse du vent
showWindDirectionSeries=Afficher données de direction du vent
fleet=Flotte
@@ -422,7 +413,6 @@ boatClassDoesNotMatchSelectedRegatta=Les courses sélectionnées contiennent des
regattaExistForSelectedBoatClass=Il existe au moins une régate pour les catégories de bateaux sélectionnées. Voulez-vous vraiment créer une (des) régate(s) pour cette (ces) course(s) ?
addRegatta=Ajouter régate...
importRegattas=Importer régates...
exchangeName=Nom d''échange
course=Parcours
courseLayout=Configuration du parcours
buoy=Bouée
@@ -712,7 +702,6 @@ starboardSide=À tribord
pleaseEnterANumber=Saisissez un nombre.
competitorsFilter=Filtre Concurrents
flagStatus=Statut du pavillon
additionalInformation=Infos
windFixListingDescription=Points vent (3 premiers, 3 derniers, valeurs réelles)
noWindFixesAvailable=Aucun point vent disponible
distanceToStarboardEndOfStartlineWhenPassingStart=Distance côté tribord de la ligne au moment du départ
@@ -734,7 +723,6 @@ waypoints=Points de cheminement
disableRaceFilter=Désactiver filtre
enableRaceFilter=Activer filtre
raceStatusColumn=Statut de la course
loading=Chargement (cela peut prendre plusieurs minutes en fonction du débit de la connexion internet)
racesWithHiddenState=Courses au statut MASQUÉ
mediaDateFormatError=Format de date non valide. Utiliser : {0}
selectedCompetitors=Concurrents sélectionnés
@@ -801,19 +789,6 @@ importSuccessOverwriteInfo=Les régates suivantes ont été écrasées, vous dev
regattaOverviewConfiguration=Configuration de la synthèse des régates
firstRaceIsNonDiscardableCarryForward=Départs avec report sans élimination
addReplicationMaster=Connexion au serveur maître de réplication
connect=Connexion
connectToMaster=Connexion à un serveur maître
exchangeHost=Nom d''hôte d''échange de messages
explainExchangeHostName=Nom de l''hôte sur lequel la file d''attente des messages s''exécute.
explainReplicationHostname=Nom de l''hôte sur lequel le serveur maître de réplication s''exécute.
explainReplicationExchangeName=Nom de la file d''attente d''échange. Le nom doit être identique à celui qui est configuré dans le serveur maître.
explainReplicationExchangePort=Port de la file d''attente d''échange de messages. Utilisé pour toutes les données après le chargement initial.
explainReplicationServletPort=Numéro de port Servlet utilisé pour la connexion afin d''enregistrer le réplica et recevoir le chargement initial.
explainReplicasRegistered=Copie enregistrée (ce serveur est un serveur maître) :
explainConnectionsToMaster=Connexions à un serveur maître (ce serveur est un réplica) :
explainNoConnectionsToMaster=Aucune connexion à un serveur maître configurée. Cliquez sur le bouton Connexion à un serveur maître pour en configurer une.
explainNoConnectionsFromReplicas=Aucune connexion à partir d''un réplica trouvée. Vous pouvez connecter des réplicas en utilisant leur console d''administration.
stopConnectionToMaster=Arrêter réplication
asLink=En tant que lien
noStarttimeAnnouncedYet=En attente
raceIsRunning=En cours d''exécution
@@ -824,9 +799,6 @@ raceIsInStartphase=Lancer phase
generalRecall=Rappel général
startPostponed=Différé
raceAbandoned=Abandonné
stopAllReplicas=Supprimer la connexion à tous les réplicas (dangereux !)
warningServerIsReplica=ATTENTION : ce serveur est configuré pour être un réplica. Ne modifiez rien, sinon des erreurs inattendues peuvent se produire.
dropReplicaConnection=Supprimer connexion
timePanelName=Contrôle des temps
competitorFilterExplanation=Ce filtre affichera tous les concurrents qui correspondent aux critères :
protestTime=Heure de réclamation
@@ -842,7 +814,6 @@ startAt=Départ à
finishAt=Arrivée à
protestStartsAt=Début de la réclamation à
protestEndsAt=Fin de la réclamation à
unknown=Inconnu
raceLog=Journal de la course
regattaLog=Journal de la régate
refreshRaceLog=Actualiser journal de la course
@@ -1040,7 +1011,6 @@ errorTryingToRemoveIgtimiAccount=Erreur lors de la tentative de suppression du c
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.
@@ -1174,7 +1144,6 @@ showSimulationOverlay=Afficher superposition de la simulation
simulationLegendTooltip=Comparaison des temps : \nCourse désigne la durée de la portion de parcours mesurée à l''aide d''un GPS, Omniscient désigne la course dans le cas où l''on a toutes les données du vent, Opportuniste désigne la course dans le cas où l''on décide de virer de bord en mesurant la distance jusqu''à la marque suivante, Virement de bord unique désigne les courses dans le cas où l''on a toutes les données du vent et l''on décide de virer de bord une seule fois.
racesScored=Courses avec points
racesScoredTooltip=Nombre de courses que le concurrent a terminées, ou pour lesquelles il a obtenu un score au palmarès.
averageNumberOfOperationsPerMessage=Nombre moyen d''opérations par message
showUncorrectedTotalPoints=Afficher total des points non corrigé
setStartTimeReceived=Afficher heure de départ reçue
setStartTimeReceivedDescription=Définit l''heure de départ reçue de la course suivie sélectionnée sur la valeur indiquée. Ne renseignez pas cette valeur si vous voulez supprimer l''actuelle heure de départ reçue définie.
@@ -1205,10 +1174,6 @@ registrationLinkUrlExplain=Vous pouvez copier l''URL et la coller dans votre inv
registrationLinkUrlCopy=Copier dans le presse-papiers
registrationLinkShare=Partager
explainRegistrationLinkDialog=Les concurrents des régates ouvertes peuvent s''inscrire eux-mêmes en ouvrant le lien d''inscription ou en scannant le code QR ci-dessous avec leur smartphone.
numberOfQueueMessagesSent=Nombre de messages en file d''attente envoyés
totalSize=Taille totale
averageMessageSize=Taille moyenne par message en octets
totalNumberOfOperations=Nombre total d''opérations
currentOrAverageSpeedOverGroundInKnotsTooltip=Vitesse fond actuelle en nœuds sur une portion de parcours en cours ; vitesse fond moyenne lorsque la portion de parcours est terminée.
currentOrAverageSpeedOverGroundInKnots=Vf (∅ à la fin)
connectors=Connecteurs
@@ -1308,11 +1273,6 @@ sendingMailsFailed=Échec de l''envoi des e-mails
sendingMailsSuccessful=Envoi des e-mails réussi
selectEventForInvitation=Sélectionnez une manifestation pour l''invitation.
imageURL=URL d''image
upload=Charger
removeResult=Supprimer opération : {0} {1}
uploadSuccessful=Chargement réussi
fileUploadResult=Chargement du fichier : {0} {1}.\nEn cas d''erreur, vérifiez que votre service de stockage de fichier est correctement configuré.
removeUploadedFile=Supprimer fichier chargé
showCompetitorBoatColumn=Bateau du concurrent
showCompetitorShortNameColumn=Nom court du concurrent
showCompetitorShortNameColumnTooltip=Affiche le nom court ainsi que le drapeau national ou l''image du concurrent. Si les deux sont disponibles, l''image du concurrent aura la priorité sur le drapeau national. Si le code "{0}" est activé, les deux icônes seront affichées.
@@ -1511,7 +1471,6 @@ imageSizeError=La taille de l''image {0} ne correspond pas. La largeur doit êtr
imageToSmallError=La taille de l''image {0} ne correspond pas. La largeur doit être d''au moins {1} pixels, et la hauteur doit être d''au moins {2} pixels.
imageResizeError=Le redimensionnement de l''image {0} ne fonctionne pas. Le ratio largeur/hauteur doit être compris entre {1} et {2}, mais il est actuellement de {3}.
couldNotRetrieveImageSizeYet=Impossible de récupérer la largeur et la hauteur de l''image pour l''instant
pleaseOnlyUploadContentYouHaveAllUsageRightsFor=Chargez uniquement le contenu pour lequel vous avez toutes les autorisations d''utilisation. Notez que le contenu peut être rogné. En règle générale, l''utilisation d''URL YouTube pour les contenus vidéo est possible.
registerCompetitorsOnRace=Inscrire concurrents pour la course (par exemple pour une course avec division de flotte)
doYouWantToRegisterCompetitorsDirectlyOnTheRace=Voulez-vous inscrire les concurrents directement pour la course ?
doYouWantToDisableCompetitorsRegistrationsOnTheRace=Voulez-vous désactiver l''inscription des concurrents pour la course ?
@@ -1588,10 +1547,8 @@ noEventsYet=Aucune manifestation 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
serverInformation=Informations serveur
serverConfiguration=Configuration du serveur
standaloneServer=Serveur autonome
send=envoyer...
passId=ID de passage
createdAt=Créé le
logicalTimepoint=Heure logique
@@ -1781,8 +1738,6 @@ errorLoadingCompetitorImportProviders=Erreur lors du chargement des fournisseurs
errorLoadingCompetitorImportDescriptors=Erreur lors du chargement des descripteurs d''importation de concurrents : {0}
couldNotSaveCompetitorRegistrations=Impossible d''enregistrer les inscriptions des concurrents : {0}
searchTagForImportedCompetitorPlaceholder=Utilisez par exemple le nom de la course et de la flotte.
version=Version : {0}
replicables=Réplication d''objets en cours
set=Définit
eventRegattaRacesLegendWind=Nombre de capteurs de vent
eventRegattaRacesLegendVideo=Nombre de flux vidéo
@@ -2133,7 +2088,6 @@ swissTimingUpdatePassword=Mot de passe pour l''envoi des mises à jour
allowResizing=Autoriser le redimensionnement
resizeSuccessfull=Redimensionnement correctement terminé
resizeUnsuccessful=Redimensionnement impossible : {0}
setUpStorageService=Veuillez d''abord configurer un service de stockage de fichier.
automaticResizeNeedsStorageService=Pour pouvoir utiliser le redimensionnement automatique, un service de stockage de fichier doit être configuré.
qrCodeBoatInviteTitle=Vous êtes invité à suivre le bateau {0} pour la régate {1}.
qrCodeMarkInviteTitle=Vous êtes invité à suivre la marque {0} pour la régate {1}.
@@ -2206,9 +2160,7 @@ tagCopyToClipBoard=Copier dans le presse-papiers
tagBrowseAndUploadImage=Naviguer et charger
tagCopiedLinkSuccessfully=Lien correctement copié dans le presse-papiers
tagCopiedLinkNotSuccessfully=Votre navigateur ne prend pas la copie vers le presse-papiers en charge. Veuillez copier le lien manuellement.
username=Nom d''utilisateur
confirm=Confirmer
cancel=Annuler
close=Fermer
boatClasses=Catégories de bateaux
sailorProfiles=Profils de sportifs
@@ -2251,9 +2203,6 @@ warningSailInsightVersion=Le serveur est configuré pour être utilisé avec SAP
invalidState=Statut non valide
doYouReallyWantToRemoveDeviceConfiguration=Voulez-vous vraiment supprimer la configuration de l''appareil "{0}" ?
errorFetchingSimulationData=Une erreur s''est produite lors de l''accès aux données de simulation : {0}. Assurez-vous que vous êtes bien connecté avec votre compte utilisateur.
usernameAndPasswordMustBothBeSet=Le nom d''utilisateur et le mot de passe doivent tous les deux être renseignés ou vides.
explainUserName=Nom d''utilisateur à utiliser pour l''authentification dans le système principal
explainPassword=Mot de passe à utiliser pour l''authentification dans le système principal
tracTracConnection=Connexion TracTrac
addTracTracConnection=Ajouter connexion TracTrac
filterTracTracConnections=Filtrer connexions TracTrac
@@ -12,7 +12,6 @@ listRegattas=Elenca regate
wind=Vento
maneuverType=Manovra
windPanelLabel=Questo è il riquadro dei venti, che finora è completamente vuoto.
refresh=Aggiorna
removeNumber=Rimuovi ({0})
windSource=Origine del vento
dampeningInterval=Intervallo di smorzamento
@@ -132,7 +131,6 @@ storedPort=Dati porto archiviati
liveUri=URI in tempo reale
storedUri=URI archiviato
eventsConnectedTo=Eventi attualmente tracciati
hostname=Nome host
declinationCheckbox=Correggi rilevamento del vento mediante declinazione
raceStartTrackingColumn=Tracciamento avviato
pauseAutomaticRefresh=Sospendi aggiornamento automatico
@@ -363,24 +361,17 @@ degreesBoatToTheWind=Angolo rispetto al vento
racesInLeaderboard=Gare nella classifica
leaderboardsInGroup=Classifiche nel gruppo
replication=Replicazione
errorFetchingReplicaData=Errore di raccolta dei dati di replica: {0}
averageAbsoluteCrossTrackErrorInMeters=∅ XTE
averageAbsoluteCrossTrackErrorInMetersTooltip=L''errore di fuori rotta medio rispetto all''ampio segmento circolare che collega il punto di partenza della tratta con quello finale; mostra la media dopo la tratta e il valore attuale durante la tratta.
averageSignedCrossTrackErrorInMeters=∅ XTE +/-
averageSignedCrossTrackErrorInMetersTooltip=La posizione media nella rotta come distanza tracciata dalla linea mediana della rotta; 0 indica la linea mediana della rotta; valori negativi indicano il lato sinistro, valori positivi indicano il lato destro; mostra la media dopo la tratta e il valore attuale durante la tratta.
raceAverageAbsoluteCrossTrackErrorInMetersTooltip=L''errore di fuori rotta assoluto medio rispetto agli ampi segmenti circolari che collegano punto di partenza della tratta e punto di destinazione della tratta per tutte le tratte sopravento di questa gara, ignorando il lato della linea mediana della rotta in cui si trova il concorrente
raceAverageSignedCrossTrackErrorInMetersTooltip=L''errore di fuori rotta medio tracciato rispetto agli ampi segmenti circolari che collegano il punto di partenza della tratta e il punto di destinazione della tratta per tutte le tratte sopravento di questa gara; valori negativi indicano la parte sinistra della linea mediana della rotta, valori positivi indicano la parte destra.
enterMaster=Nome host dell''istanza principale
errorStartingReplication=Errore di avvio di replica dall''host {0}/ scambio {1}: {2}
helpLines=Linee di assistenza
startLine=Linea di partenza
finishLine=Linea del traguardo
advantageLine=Linea del vantaggio
courseMiddleLine=Linea mediana della rotta
messagingPortNumber=Porta di invio/ricezione messaggi (0 per impostazione predefinita)
servletPortNumber=Numero porta servlet
registeredAt=Registrato alle {0}
replicatingFromMaster=Replicazione da {0}:{2} master, porta di invio/ricezione messaggi {3}:{1}, scambio {4}, replicazione {5}
showWindSpeedSeries=Mostra dati sulla velocità del vento
showWindDirectionSeries=Mostra dati sulla direzione del vento
fleet=Flotta
@@ -422,7 +413,6 @@ boatClassDoesNotMatchSelectedRegatta=Le gare selezionate contengono classi di ba
regattaExistForSelectedBoatClass=Esiste almeno una regata per le classi di barche selezionate. Creare regate predefinite per quelle gare?
addRegatta=Aggiungi regata...
importRegattas=Importa regate...
exchangeName=Cambia nome
course=Rotta
courseLayout=Progettazione della rotta
buoy=Boa
@@ -712,7 +702,6 @@ starboardSide=Destra
pleaseEnterANumber=Inserire un numero.
competitorsFilter=Filtro concorrenti
flagStatus=Stato bandiera
additionalInformation=Info
windFixListingDescription=Punti nave vento (primi 3, ultimi 3, valori veri)
noWindFixesAvailable=Nessun punto nave vento disponibile.
distanceToStarboardEndOfStartlineWhenPassingStart=Dist. drt. Linea alla part.
@@ -734,7 +723,6 @@ waypoints=Waypoints
disableRaceFilter=Disabilita filtro
enableRaceFilter=Abilita filtro
raceStatusColumn=Stato gara
loading=Caricamento in corso (con connessione lenta a Internet, l''operazione può richiede alcuni minuti)...
racesWithHiddenState=Gare con stato NASCOSTO
mediaDateFormatError=Formato data non valido. Utilizzo: {0}
selectedCompetitors=Concorrenti selezionati
@@ -801,19 +789,6 @@ importSuccessOverwriteInfo=Qualora sia stato necessario sovrascrivere le seguent
regattaOverviewConfiguration=Configurazione panoramica regata
firstRaceIsNonDiscardableCarryForward=Partenze senza possibilità di scarto
addReplicationMaster=Connetti a server principale di replicazione
connect=Connetti
connectToMaster=Connetti a principale
exchangeHost=Nome host di invio/ricezione messaggi
explainExchangeHostName=Nome dell''host in cui è in esecuzione la coda di invio/ricezione messaggi.
explainReplicationHostname=Nome dell''host in cui è in esecuzione il master di replicazione.
explainReplicationExchangeName=Il nome della coda di scambio. Deve corrispondere a quello configurato nel master.
explainReplicationExchangePort=La porta della coda di scambio di invio/ricezione messaggi. Viene utilizzata per tutti i dati dopo il carico iniziale.
explainReplicationServletPort=Il numero della porta servlet utilizzata per la connessione per la registrazione di tale replica e la ricezione del carico iniziale.
explainReplicasRegistered=Repliche registrate (questo server è il master):
explainConnectionsToMaster=Connessioni ad un master (questo server non è una replica):
explainNoConnectionsToMaster=Nessuna connessione ad un server master configurato. Fare clic sul pulsante Connetti a master per configurarne uno.
explainNoConnectionsFromReplicas=Non è stata trovata alcuna connessione da una replica. È possibile collegare le repliche utilizzando la relativa AdminConsole.
stopConnectionToMaster=Arresta replicazione
asLink=Come collegamento
noStarttimeAnnouncedYet=In sospeso
raceIsRunning=In corso
@@ -824,9 +799,6 @@ raceIsInStartphase=Fase iniziale
generalRecall=Richiamo generale
startPostponed=Posticipato
raceAbandoned=Interrotta
stopAllReplicas=Stacca connessione a tutte le repliche (pericoloso!)
warningServerIsReplica=ATTENZIONE: questo server è configurato per essere una replica. NON apportare modifiche oppure ciò produrrà effetti anomali!
dropReplicaConnection=Stacca connessione
timePanelName=Regolazione tempo
competitorFilterExplanation=questo filtro mostrerà tutti i concorrenti che soddisfano i criteri:
protestTime=Tempo per protesta
@@ -842,7 +814,6 @@ startAt=Ora di inizio
finishAt=Ora di fine
protestStartsAt=Ora di inizio protesto
protestEndsAt=Ora di fine protesto
unknown=Sconosciuto
raceLog=Registro di gara
regattaLog=Registro regate
refreshRaceLog=Aggiorna registro regate
@@ -1040,7 +1011,6 @@ errorTryingToRemoveIgtimiAccount=Errore nel tentativo di eliminare laccount I
successfullyRemoveIgtimiAccount=Account Igtimi per utente {0} eliminato correttamente
eMailMustNotBeEmpty=Lindirizzo e-mail non deve essere vuoto
emailAddress=indirizzo e-mail
password=Password
searchTag=Tag di ricerca
doYouReallyWantToRemoveLeaderboard=Confermare leliminazione della classifica: ''{0}''?
metaLeaderboardCannotBeChanged=Questa è una meta classifica e non può essere modificata qui.
@@ -1174,7 +1144,6 @@ showSimulationOverlay=Mostra sovrapposizione simulazione
simulationLegendTooltip=Confronto tempi:\nGara è la durata della tratta misurata da GPS, Onnisciente è la rotta con vento conosciuto, Opportuna è la rotta se si decide di compiere un giro misurando la distanza dal segnale successivo, 1 giro è la rotta di un giro con vento costante, conosciuto
racesScored=Gare portate a termine
racesScoredTooltip=Numero di gare completate dal concorrente o in cui ha ottenuto un punteggio in questa classifica.
averageNumberOfOperationsPerMessage=Numero medio di operazioni per messaggio
showUncorrectedTotalPoints=Mostra totale punti non corretto
setStartTimeReceived=Imposta ora di inizio ricevuta
setStartTimeReceivedDescription=Imposta lora di inizio ricevuta della gara tracciata selezionata sul valore fornito. Lasciare vuoto il valore per eliminare lora di inizio ricevuta attualmente impostata.
@@ -1205,10 +1174,6 @@ registrationLinkUrlExplain=È possibile copiare l''URL e incollarlo nell''invito
registrationLinkUrlCopy=Copia negli appunti
registrationLinkShare=Condividi
explainRegistrationLinkDialog=I concorrenti di regate aperte possono registrarsi aprendo il link per la registrazione oppure scansionando con il proprio smartphone il codice QR sotto riportato.
numberOfQueueMessagesSent=Numero di messaggi in coda inviati
totalSize=Dimensioni totali
averageMessageSize=Dimensioni medie per messaggio in byte
totalNumberOfOperations=Numero totale di operazioni
currentOrAverageSpeedOverGroundInKnotsTooltip=Attuale velocità effettiva al fondo in nodi quando la tratta non è ancora conclusa; velocità effettiva al fondo media quando la tratta è stata completata
currentOrAverageSpeedOverGroundInKnots=SOG (∅ alla fine)
connectors=Connettori
@@ -1308,11 +1273,6 @@ sendingMailsFailed=Invio e-mail non riuscito
sendingMailsSuccessful=E-mail correttamente inviate
selectEventForInvitation=Seleziona evento per invito
imageURL=URL immagine
upload=Carica
removeResult=Rimuovi operazione: {0} {1}
uploadSuccessful=Caricamento eseguito correttamente
fileUploadResult=Upload file: {0} {1}.\nIn caso di errore controllare che il servizio di archiviazione file sia adeguatamente configurato.
removeUploadedFile=Rimuovi file caricato
showCompetitorBoatColumn=Barca del concorrente
showCompetitorShortNameColumn=Nome breve concorrente
showCompetitorShortNameColumnTooltip=Mostra il nome breve e la bandiera della nazionalità o l''immagine del concorrente. Se disponibile, l''immagine del concorrente ha priorità sulla bandiera della nazionalità. Con impostazione "{0}", verranno visualizzate entrambe le icone.
@@ -1511,7 +1471,6 @@ imageSizeError=Le dimensioni dell''immagine {0} non sono adeguate. La larghezza
imageToSmallError=Le dimensioni dell''immagine {0} non sono adeguate. La larghezza deve essere almeno {1} px e l''altezza almeno {2} px.
imageResizeError=Il ridimensionamento dell''immagine {0} non funziona. Il rapporto larghezza/altezza deve essere compreso fra {1} e {2}, mentre attualmente è {3}.
couldNotRetrieveImageSizeYet=Non è ancora stato possibile recuperare larghezza e altezza dell''immagine.
pleaseOnlyUploadContentYouHaveAllUsageRightsFor=Caricare solo contenuti per i quali si possiedono tutti i diritti di utilizzo. Tenere presente che i contenuti possono essere tagliati. Di norma è possibile utilizzare gli URL di YouTube per i contenuti video.
registerCompetitorsOnRace=Registra concorrenti a gara (es. per regata con flotte divise)
doYouWantToRegisterCompetitorsDirectlyOnTheRace=Registrare i concorrenti direttamente nella gara?
doYouWantToDisableCompetitorsRegistrationsOnTheRace=Disabilitare le registrazioni concorrenti direttamente nella gara?
@@ -1588,10 +1547,8 @@ noEventsYet=Non sono ancora presenti eventi.
selectCompetitorImportProvider=Seleziona un provider di importazione concorrenti...
selectResultImportProvider=Seleziona un provider di importazione risultati...
buildVersion=Crea versione
serverInformation=Informazioni sul server
serverConfiguration=Configurazione del server
standaloneServer=Server standalone
send=Invia...
passId=Numero di iscrizione
createdAt=Ora creazione
logicalTimepoint=Momento logico
@@ -1781,8 +1738,6 @@ errorLoadingCompetitorImportProviders=Errore di caricamento dei provider di impo
errorLoadingCompetitorImportDescriptors=Errore di caricamento dei descrittori di importazione concorrenti: {0}
couldNotSaveCompetitorRegistrations=Impossibile salvare le registrazioni concorrenti: {0}
searchTagForImportedCompetitorPlaceholder=Utilizza, ad esempio, gara+nome flotta
version=Versione: {0}
replicables=Oggetti di replicazione
set=Set
eventRegattaRacesLegendWind=# Sensori vento
eventRegattaRacesLegendVideo=# Flussi video
@@ -2133,7 +2088,6 @@ swissTimingUpdatePassword=Password per invio aggiornamenti
allowResizing=Consenti ridimensionamento
resizeSuccessfull=Ridimensionamento terminato correttamente
resizeUnsuccessful=Ridimensionamento non possibile: {0}
setUpStorageService=Configura prima un servizio di archiviazione file
automaticResizeNeedsStorageService=Per il ridimensionamento automatico occorre un servizio di archiviazione file
qrCodeBoatInviteTitle=Sei invitato a tracciare la barca {0} per la regata {1}
qrCodeMarkInviteTitle=Sei invitato a tracciare il segnale {0} per la regata {1}
@@ -2206,9 +2160,7 @@ tagCopyToClipBoard=Copia negli appunti
tagBrowseAndUploadImage=Sfoglia e carica
tagCopiedLinkSuccessfully=Link correttamente copiato negli appunti!
tagCopiedLinkNotSuccessfully=Il browser non supporta la copia negli appunti, copiare il link manualmente!
username=Nome utente
confirm=Conferma
cancel=Annulla
close=Chiudi
boatClasses=Classi di barche
sailorProfiles=Profili velisti
@@ -2251,9 +2203,6 @@ warningSailInsightVersion=Il server è configurato per l''uso con SAP Sail InSig
invalidState=Stato non valido
doYouReallyWantToRemoveDeviceConfiguration=Confermare l''eliminazione della configurazione del dispositivo {0}?
errorFetchingSimulationData=Si è verificato un errore nella raccolta dei dati di simulazione: {0}. Assicurarsi di avere eseguito l''accesso con il proprio account utente.
usernameAndPasswordMustBothBeSet=Nome utente e password devono essere entrambi alimentati o vuoti
explainUserName=Nome utente da utilizzare per l''autenticazione nell''anagrafica
explainPassword=Password da utilizzare per l''autenticazione nell''anagrafica
tracTracConnection=Connessione TracTrac
addTracTracConnection=Aggiungi connessione TracTrac
filterTracTracConnections=Filtra connessioni TracTrac
@@ -12,7 +12,6 @@ listRegattas=レガッタ一覧
wind=
maneuverType=マニューバー
windPanelLabel=これは風パネルであり、今のところ完全に空となっています。
refresh=リフレッシュ
removeNumber=削除 ({0})
windSource=風源
dampeningInterval=制動間隔
@@ -132,7 +131,6 @@ storedPort=ポート格納データ
liveUri=ライブ URI
storedUri=格納 URL
eventsConnectedTo=現在追跡中のイベント
hostname=ホスト名
declinationCheckbox=偏角別の適切な風方位
raceStartTrackingColumn=追跡開始
pauseAutomaticRefresh=自動リフレッシュを中断
@@ -363,24 +361,17 @@ degreesBoatToTheWind=風とのアングル
racesInLeaderboard=リーダーボードにあるレース
leaderboardsInGroup=リーダーボードグループ
replication=複製
errorFetchingReplicaData=複製データ取込でエラー発生: {0}
averageAbsoluteCrossTrackErrorInMeters=∅ XTE
averageAbsoluteCrossTrackErrorInMetersTooltip=レグ始点からレグ終点までの大圏航路 (円曲線) に対する平均クロストラックエラー。当該レグ後は平均値を、レグにある間は現在値を示します。
averageSignedCrossTrackErrorInMeters=∅ XTE +/-
averageSignedCrossTrackErrorInMetersTooltip=コース中央航路からの距離 (+/- 符号付) で表されたコース上の平均位置。0 はコース中央航路を、マイナスの値は左側を、プラスの値は右側をそれぞれ意味します。当該レグ後は平均値を、レグにある間は現在値を示します。
raceAverageAbsoluteCrossTrackErrorInMetersTooltip=このレースのすべてのアップウィンドレグに対するレグ始点からレグ終点までの大圏航路 (円曲線) との間の平均絶対クロストラックエラー (競技者がコース中央航路のどちら側にいるかは無視)
raceAverageSignedCrossTrackErrorInMetersTooltip=このレースのすべてのアップウィンドレグに対するレグ始点からレグ終点までの大圏航路 (円曲線) との間の +/- 符号付の平均クロストラックエラー: マイナスの値はコース中央航路の左側、プラスの値は右側を意味します。
enterMaster=マスタインスタンスのホスト名
errorStartingReplication=ホスト {0} / エクスチェンジ {1} からの複製開始でエラー発生: {2}
helpLines=ヘルプライン
startLine=スタートライン
finishLine=フィニッシュライン
advantageLine=アドバンテージライン
courseMiddleLine=コース中央航路
messagingPortNumber=メッセージングポート番号 (初期値は 0)
servletPortNumber=サーブレットポート番号
registeredAt=登録時刻 {0}
replicatingFromMaster=マスタ {0}:{2}、メッセージングポート {3}:{1}、エクスチェンジ {4} から複製、{5} を複製
showWindSpeedSeries=風速データ表示
showWindDirectionSeries=風向データ表示
fleet=フリート
@@ -422,7 +413,6 @@ boatClassDoesNotMatchSelectedRegatta=選択したレースに、選択したレ
regattaExistForSelectedBoatClass=選択した艇種に対して少なくとも 1 つのレガッタがあります。このレースに対してレガッタを初期登録しますか。
addRegatta=レガッタ追加...
importRegattas=レガッタのインポート...
exchangeName=エクスチェンジ名
course=コース
courseLayout=コースレイアウト
buoy=ブイ
@@ -712,7 +702,6 @@ starboardSide=右舷
pleaseEnterANumber=番号を入力してください。
competitorsFilter=競技者フィルタ
flagStatus=信号旗ステータス
additionalInformation=情報
windFixListingDescription=風フィックス (当初 3、最終 3、真値)
noWindFixesAvailable=風フィックスが利用可能でありません。
distanceToStarboardEndOfStartlineWhenPassingStart=スタート時のラインの右舷側距離
@@ -734,7 +723,6 @@ waypoints=変針点
disableRaceFilter=フィルタ無効化
enableRaceFilter=フィルタ有効化
raceStatusColumn=レースステータス
loading=ロードしています (スピードの遅いインターネット接続では時間がかかる場合があります)...
racesWithHiddenState=非表示ステータスのレース
mediaDateFormatError=日付書式が無効です。使用: {0}
selectedCompetitors=選択された競技者
@@ -801,19 +789,6 @@ importSuccessOverwriteInfo=以下のレガッタを上書きするには、以
regattaOverviewConfiguration=レガッタ概要設定
firstRaceIsNonDiscardableCarryForward=取消不可の持ち越しがあるスタート
addReplicationMaster=複製マスタサーバに接続
connect=接続
connectToMaster=マスタに接続
exchangeHost=メッセージングホスト名
explainExchangeHostName=メッセージキューを実行中のホスト名です。
explainReplicationHostname=複製マスタを実行中のホスト名です。
explainReplicationExchangeName=エクスチェンジキューの名称です。マスタで設定されたものと同じでなければなりません。
explainReplicationExchangePort=メッセージングエクスチェンジキューのポートです。これは初期ロード後の全データに使用されます。
explainReplicationServletPort=この複製登録し、初期ロードを受け取るための接続に使用されるサーブレットポート番号です。
explainReplicasRegistered=登録された複製 (このサーバがマスタ):
explainConnectionsToMaster=マスタへの接続 (このサーバが複製):
explainNoConnectionsToMaster=マスタサーバへの接続が設定されていません。マスタへの接続ボタンをクリックして設定してください。
explainNoConnectionsFromReplicas=複製からの接続が見つかりませんでした。複製の接続はその管理コンソールを使用して行うことができます。
stopConnectionToMaster=複製の停止
asLink=リンクとして
noStarttimeAnnouncedYet=保留
raceIsRunning=実行中
@@ -824,9 +799,6 @@ raceIsInStartphase=スタートフェーズ
generalRecall=リコール生成
startPostponed=延期
raceAbandoned=中止
stopAllReplicas=すべての複製への接続をドロップ (危険です)
warningServerIsReplica=注意: このサーバは複製となるよう設定されています。何も変更しないでください。そうしないと、予想しない動作がもたらされます。
dropReplicaConnection=接続のドロップ
timePanelName=時間管理
competitorFilterExplanation=このフィルタは基準に一致するすべての競技者を表示します:
protestTime=抗議時間
@@ -842,7 +814,6 @@ startAt=スタート時刻
finishAt=フィニッシュ時刻
protestStartsAt=抗議開始時刻
protestEndsAt=抗議最終時刻
unknown=不明
raceLog=レースログ
regattaLog=レガッタログ
refreshRaceLog=レースログのリフレッシュ
@@ -1040,7 +1011,6 @@ errorTryingToRemoveIgtimiAccount=ユーザ {0} の Igtimi アカウントを削
successfullyRemoveIgtimiAccount=ユーザ {0} の Igtimi アカウントが削除されました
eMailMustNotBeEmpty=電子メールアドレスは空であってはなりません
emailAddress=電子メールアドレス
password=パスワード
searchTag=検索タグ
doYouReallyWantToRemoveLeaderboard=リーダーボード ''{0}'' を削除しますか。
metaLeaderboardCannotBeChanged=これはメタリーダーボードです。ここで変更することはできません。
@@ -1174,7 +1144,6 @@ showSimulationOverlay=シミュレーションオーバーレイ表示
simulationLegendTooltip=時間比較:\nレースは GPS から計測されたレグ持続時間、全知は風についてすべてわかっている場合のコース、オポチュニストは次マークまでの距離を計測するためにターンする場合のコース、ワンターナーは風についてすべてわかっていて 1 ターンするだけの場合のコース
racesScored=スコアが記録されたレース
racesScoredTooltip=このリーダーボードにおいて競技者が完了したか、得点を獲得したレースの数
averageNumberOfOperationsPerMessage=メッセージごとの操作の平均数
showUncorrectedTotalPoints=未修正総得点表示
setStartTimeReceived=設定済スタート時刻を受信
setStartTimeReceivedDescription=選択した TrackedRace の startTimeReceived が指定した値に設定されます。値を空白のままにすると、現在設定されている startTimeReceived は削除されます。
@@ -1205,10 +1174,6 @@ registrationLinkUrlExplain=URL をコピーして、それを招待にペース
registrationLinkUrlCopy=クリップボードにコピー
registrationLinkShare=共有
explainRegistrationLinkDialog=オープンレガッタの競技者は、登録リンクを開くか、スマートフォンで下記の QR コードをスキャンして、自分自身で登録を行うことができます。
numberOfQueueMessagesSent=送信済キューメッセージ数
totalSize=合計サイズ
averageMessageSize=メッセージごとの平均サイズ (バイト)
totalNumberOfOperations=操作の合計数
currentOrAverageSpeedOverGroundInKnotsTooltip=レグをまだ競技中の現対地速力 (kt)、レグ完了時の平均対地速力
currentOrAverageSpeedOverGroundInKnots=SOG (終了時 ∅)
connectors=コネクタ
@@ -1308,11 +1273,6 @@ sendingMailsFailed=メール送信に失敗
sendingMailsSuccessful=電子メールを正常に送信済
selectEventForInvitation=招待のイベント選択
imageURL=画像 URL
upload=アップロード
removeResult=操作の削除: {0} {1}
uploadSuccessful=正常にアップロード済
fileUploadResult=ファイルアップロード: {0} {1}\nエラー発生の場合は、ファイルストレージサービスが適切に設定されていることを確認してください。
removeUploadedFile=アップロード済ファイルの削除
showCompetitorBoatColumn=競技者の艇
showCompetitorShortNameColumn=競技者の名前 (短)
showCompetitorShortNameColumnTooltip=名前 (短) に加えて国旗または競技者画像を表示します。競技者画像が利用可能な場合はそれを国旗よりも優先させます。"{0}" が設定されている場合、両方のアイコンが表示されます。
@@ -1511,7 +1471,6 @@ imageSizeError={0} 画像のサイズが適合しません。幅は {1} と {2}
imageToSmallError={0} 画像のサイズが適合しません。幅は少なくとも {1} px、高さは少なくとも {2} px はある必要があります。
imageResizeError={0} 画像のリサイズが機能しません。幅/高さの比率が {1} と {2} の間である必要がありますが、実際には {3} となっています。
couldNotRetrieveImageSizeYet=画像の幅と高さをまだ取得することができません。
pleaseOnlyUploadContentYouHaveAllUsageRightsFor=すべての使用権を持っているコンテンツのみをアップロードしてください。コンテンツは途中から切れてしまう場合があることを忘れないでください。動画コンテンツに YouTube URL を使用することが通常は可能です。
registerCompetitorsOnRace=レースへの競技者の登録 (例: フリート分割レースに対して)
doYouWantToRegisterCompetitorsDirectlyOnTheRace=レースに競技者を直接に登録しますか
doYouWantToDisableCompetitorsRegistrationsOnTheRace=レースへの競技者登録を無効にしますか
@@ -1588,10 +1547,8 @@ noEventsYet=イベントがまだありません。
selectCompetitorImportProvider=競技者インポートプロバイダを選択してください...
selectResultImportProvider=結果インポートプロバイダを選択してください...
buildVersion=ビルドバージョン
serverInformation=サーバ情報
serverConfiguration=サーバ設定
standaloneServer=スタンドアロンサーバ
send=送信...
passId=パス ID
createdAt=登録時刻
logicalTimepoint=論理タイムポイント
@@ -1781,8 +1738,6 @@ errorLoadingCompetitorImportProviders=競技者インポートプロバイダの
errorLoadingCompetitorImportDescriptors=競技者インポート記述子のロードでエラーが発生: {0}
couldNotSaveCompetitorRegistrations=競技者登録を保存できませんでした: {0}
searchTagForImportedCompetitorPlaceholder=たとえば、レース+フリート名を使用
version=バージョン: {0}
replicables=オブジェクトの複製
set=セット
eventRegattaRacesLegendWind=風向風速センサー数
eventRegattaRacesLegendVideo=動画ストリーム数
@@ -2133,7 +2088,6 @@ swissTimingUpdatePassword=更新送信のパスワード
allowResizing=リサイズを許可
resizeSuccessfull=リサイズが正常に終了しました
resizeUnsuccessful=リサイズが可能でありません: {0}
setUpStorageService=最初にファイルストレージサービスを設定してください
automaticResizeNeedsStorageService=自動リサイズには機能している FileStorageService が必要です。
qrCodeBoatInviteTitle=レガッタ {1} の艇 {0} の追跡に案内されました
qrCodeMarkInviteTitle=レガッタ {1} のマーク {0} の追跡に案内されました
@@ -2206,9 +2160,7 @@ tagCopyToClipBoard=クリップボードにコピー
tagBrowseAndUploadImage=ブラウズしてアップロード
tagCopiedLinkSuccessfully=クリップボードにリンクがコピーされました
tagCopiedLinkNotSuccessfully=ブラウザがクリップボードへのコピーをサポートしていません。マニュアルでリンクをコピーしてください
username=ユーザ名
confirm=確認
cancel=取消
close=終了
boatClasses=艇種
sailorProfiles=セーラープロファイル
@@ -2251,9 +2203,6 @@ warningSailInsightVersion=このサーバは SAP Sail InSight 1 で使用する
invalidState=無効なステータス
doYouReallyWantToRemoveDeviceConfiguration=デバイス設定 {0} を削除しますか
errorFetchingSimulationData=シミュレーションデータのフェッチ時にエラーが発生しました: {0}。自分のユーザアカウントでサインインしているか確認してください。
usernameAndPasswordMustBothBeSet=ユーザ名とパスワードは両方とも入力するか、両方とも空である必要があります
explainUserName=マスタ上で認証のために使用するユーザ名
explainPassword=マスタ上で認証のために使用するパスワード
tracTracConnection=TracTrac 接続
addTracTracConnection=TracTrac 接続の追加
filterTracTracConnections=TracTrac 接続のフィルタリング
@@ -12,7 +12,6 @@ listRegattas=Listar regatas
wind=Vento
maneuverType=Manobra
windPanelLabel=Este é o painel eólico que até o momento está completamente vazio.
refresh=Atualizar
removeNumber=Remover ({0})
windSource=Origem do vento
dampeningInterval=Intervalo de atenuação
@@ -132,7 +131,6 @@ storedPort=Dados armazenados de porta
liveUri=URI ao vivo
storedUri=URI armazenado
eventsConnectedTo=Eventos rastreados atualmente
hostname=Nome do host
declinationCheckbox=Corrigir rumo do vento por inclinação
raceStartTrackingColumn=Rastreamento iniciado
pauseAutomaticRefresh=Interromper atualização automática
@@ -363,24 +361,17 @@ degreesBoatToTheWind=Ângulo em relação ao vento
racesInLeaderboard=Corridas no painel de classificação
leaderboardsInGroup=Painéis de classificação no grupo
replication=Replicação
errorFetchingReplicaData=Erro ao chamar dados de replicação: {0}
averageAbsoluteCrossTrackErrorInMeters=∅ XTE
averageAbsoluteCrossTrackErrorInMetersTooltip=O desvio lateral médio do segmento da grande volta que liga o início da perna ao fim da perna; exibe a média após a perna e o valor atual durante a perna.
averageSignedCrossTrackErrorInMeters=∅ XTE +/-
averageSignedCrossTrackErrorInMetersTooltip=A posição média no percurso como uma distância assinalada a partir da linha do meio do percurso; 0 significa a linha do meio do percurso; os valores negativos significam o lado esquerdo, os valores positivos significam o lado direito; exibe a média após a perna e o valor atual durante a perna.
raceAverageAbsoluteCrossTrackErrorInMetersTooltip=O desvio lateral absoluto médio dos segmentos da grande volta que ligam o início da perna ao fim da perna para todas as pernas de contravento desta corrida, ignorando o lado da linha do meio do percurso em que está o competidor
raceAverageSignedCrossTrackErrorInMetersTooltip=O desvio lateral médio assinalado dos segmentos da grande volta que ligam o início da perna ao fim da perna para todas as pernas de contravento desta corrida; os valores negativos significam à esquerda da linha do meio do percurso, os valores positivos significam à direita.
enterMaster=Nome do host de instância mestre
errorStartingReplication=Erro ao iniciar replicação a partir do host {0}/trocar {1}: {2}
helpLines=Linhas de ajuda
startLine=Linha de partida
finishLine=Linha de chegada
advantageLine=Linha de vantagem
courseMiddleLine=Linha do meio do percurso
messagingPortNumber=Número de porta de mensagens (0 para padrão)
servletPortNumber=Número de porta de servlet
registeredAt=Registrado às {0}
replicatingFromMaster=Replicando a partir do mestre {0}:{2}, porta de mensagens {3}:{1}, trocar {4}, replicando {5}
showWindSpeedSeries=Visualizar dados de velocidade do vento
showWindDirectionSeries=Visualizar dados de direções do vento
fleet=Flotilha
@@ -422,7 +413,6 @@ boatClassDoesNotMatchSelectedRegatta=As corridas selecionadas contêm classes de
regattaExistForSelectedBoatClass=Existe pelo menos uma regata para as classes de barcos selecionadas. Criar regatas padrão para essas corridas?
addRegatta=Adicionar regata...
importRegattas=Importar regatas...
exchangeName=Trocar nome
course=Percurso
courseLayout=Layout do percurso
buoy=Boia
@@ -712,7 +702,6 @@ starboardSide=Boreste
pleaseEnterANumber=Insira um número.
competitorsFilter=Filtro de competidores
flagStatus=Status de bandeira
additionalInformation=Info
windFixListingDescription=Pontos fixos do vento (primeiros 3, últimos 3, valores verdadeiros)
noWindFixesAvailable=Nenhum ponto fixo de vento disponível.
distanceToStarboardEndOfStartlineWhenPassingStart=Distância para o lado do boreste da linha na partida
@@ -734,7 +723,6 @@ waypoints=Waypoints
disableRaceFilter=Desativar filtro
enableRaceFilter=Ativar filtro
raceStatusColumn=Status de corrida
loading=Carregando (com uma conexão à Internet lenta, isto pode demorar alguns minutos)...
racesWithHiddenState=Corridas com status OCULTO
mediaDateFormatError=Formato de data inválido. Utilizar: {0}
selectedCompetitors=Competidores selecionados
@@ -801,19 +789,6 @@ importSuccessOverwriteInfo=Foi necessário substituir as seguintes regatas, é n
regattaOverviewConfiguration=Configuração de síntese de regata
firstRaceIsNonDiscardableCarryForward=Começa com transferência não descartável
addReplicationMaster=Conectar ao servidor mestre de replicação
connect=Conectar
connectToMaster=Conectar ao mestre
exchangeHost=Nome do host de mensagens
explainExchangeHostName=Nome do host onde a fila de mensagens está sendo executada.
explainReplicationHostname=Nome do host onde o mestre de replicação está sendo executado.
explainReplicationExchangeName=O nome da fila de troca. Este deve ser o mesmo configurado no mestre.
explainReplicationExchangePort=A porta da fila de troca de mensagens. Esta é utilizada para todos os dados após o carregamento inicial.
explainReplicationServletPort=Número de porta de servlet que é utilizado para conexão para registrar esta réplica e receber o carregamento inicial.
explainReplicasRegistered=Réplicas registradas (este servidor é o mestre):
explainConnectionsToMaster=Conexões a um mestre (este servidor é uma réplica):
explainNoConnectionsToMaster=Nenhuma conexão a um servidor mestre configurado. Clique no botão Conectar a mestre para configurar uma.
explainNoConnectionsFromReplicas=Nenhuma conexão de uma réplica encontrada. Você pode conectar as réplicas utilizando sua console de administração.
stopConnectionToMaster=Parar replicação
asLink=Como link
noStarttimeAnnouncedYet=Pendente
raceIsRunning=Em competição
@@ -824,9 +799,6 @@ raceIsInStartphase=Fase inicial
generalRecall=Chamada geral
startPostponed=Retardado
raceAbandoned=Anulado
stopAllReplicas=Desligar conexão a todas as réplicas (perigoso!)
warningServerIsReplica=ATENÇÃO: este servidor está configurado para ser uma réplica. NÃO modifique nada ou isso terá consequências desconhecidas!
dropReplicaConnection=Desligar conexão
timePanelName=Controle do tempo
competitorFilterExplanation=O filtro exibirá todos os competidores correspondentes aos critérios:
protestTime=Tempo de protesto
@@ -842,7 +814,6 @@ startAt=Partida às
finishAt=Chegada às
protestStartsAt=Protesto começa às
protestEndsAt=Protesto termina às
unknown=Desconhecido
raceLog=Registro da corrida
regattaLog=Registro da corrida
refreshRaceLog=Atualizar registro da corrida
@@ -1040,7 +1011,6 @@ errorTryingToRemoveIgtimiAccount=Erro ao tentar remover conta de Igtimi para usu
successfullyRemoveIgtimiAccount=Conta de Igtimi removida com êxito para usuário {0}
eMailMustNotBeEmpty=O endereço de e-mail não deve estar em branco
emailAddress=endereço de e-mail
password=Senha
searchTag=Etiqueta de pesquisa
doYouReallyWantToRemoveLeaderboard=Você tem a certeza que quer remover o painel de classificação: ''{0}''?
metaLeaderboardCannotBeChanged=Este é um painel de classificação meta. Não é possível modificá-lo aqui.
@@ -1174,7 +1144,6 @@ showSimulationOverlay=Visualizar sobreposição de simulação
simulationLegendTooltip=Comparação de tempos:\na corrida é a duração da perna medida por GPS, onisciente é o percurso caso se soubesse tudo sobre o vento, oportunista são os percursos caso se decida efetuar uma volta medindo a distância até a próxima marca, 1 volta são os percursos caso se soubesse tudo sobre o vento e se efetue somente uma volta
racesScored=Corridas pontuadas
racesScoredTooltip=Número de corridas que o competidor concluiu ou nas quais obteve uma pontuação neste painel de classificação.
averageNumberOfOperationsPerMessage=Número médio de operações por mensagem
showUncorrectedTotalPoints=Visualizar total de pontos não corrigidos
setStartTimeReceived=Definir hora de partida recebida
setStartTimeReceivedDescription=Define a hora de partida recebida da corrida rastreada selecionada para o valor fornecido. Deixe o valor em branco para remover a hora de partida recebida definida atualmente.
@@ -1205,10 +1174,6 @@ registrationLinkUrlExplain=Você pode copiar o URL e colá-lo em seu convite.
registrationLinkUrlCopy=Copiar para o clipboard
registrationLinkShare=Compartilhar
explainRegistrationLinkDialog=Os competidores para regatas abertas podem se registrar a eles próprios abrindo o link de registro ou digitalizando o código QR abaixo com seu smartphone.
numberOfQueueMessagesSent=Número de mensagens em fila enviadas
totalSize=Tamanho total
averageMessageSize=Tamanho médio por mensagem em bytes
totalNumberOfOperations=Número total de operações
currentOrAverageSpeedOverGroundInKnotsTooltip=Velocidade atual no fundo em nós enquanto a perna está em curso; velocidade média no fundo quando a perna está concluída
currentOrAverageSpeedOverGroundInKnots=SOG (∅ no fim)
connectors=Conectores
@@ -1308,11 +1273,6 @@ sendingMailsFailed=Falha no envio de e-mails
sendingMailsSuccessful=E-mails enviados com êxito
selectEventForInvitation=Selecionar evento para convite
imageURL=URL de imagem
upload=Carregar
removeResult=Remover operação: {0} {1}
uploadSuccessful=Carregamento efetuado com êxito
fileUploadResult=Carregamento de arquivo: {0} {1}.\nEm caso de erro, verifique se seu serviço de armazenamento de arquivos está configurado de modo apropriado.
removeUploadedFile=Remover arquivo carregado
showCompetitorBoatColumn=Barco do competidor
showCompetitorShortNameColumn=Nome abreviado do competidor
showCompetitorShortNameColumnTooltip=Exibe o nome abreviado mais a bandeira de nacionalidade ou a imagem do competidor. Se disponível, é priorizada uma imagem do competidor em relação a uma bandeira da nacionalidade. Se "{0}" estiver definido, ambos os ícones serão exibidos.
@@ -1511,7 +1471,6 @@ imageSizeError=O tamanho da imagem {0} não é adequado. A largura deve estar en
imageToSmallError=O tamanho da imagem {0} não é adequado. A largura deveser pelo menos {1} px e a altura {2} px no mínimo.
imageResizeError=O redimensionamento da imagem {0} não funciona. A relação largura/altura deve estar entre {1} e {2}, mas é realmente {3}.
couldNotRetrieveImageSizeYet=Ainda não foi possível recuperar largura e altura da imagem.
pleaseOnlyUploadContentYouHaveAllUsageRightsFor=Carregue somente conteúdo para o qual você tenha todos os direitos de utilização. Lembre-se que o conteúdo pode ser cortado. Normalmente é possível utilizar URLs do YouTube para conteúdo de vídeo.
registerCompetitorsOnRace=Registrar competidores na corrida (por exemplo, para corridas de flotilhas divididas)
doYouWantToRegisterCompetitorsDirectlyOnTheRace=Você quer registrar competidores diretamente na corrida?
doYouWantToDisableCompetitorsRegistrationsOnTheRace=Você quer desativar os registros dos competidores na corrida?
@@ -1588,10 +1547,8 @@ noEventsYet=Ainda não existem eventos.
selectCompetitorImportProvider=Selecione um fornecedor de importação do competidor...
selectResultImportProvider=Selecione um fornecedor de importação de resultados...
buildVersion=Criar versão
serverInformation=Informações do servidor
serverConfiguration=Configuração do servidor
standaloneServer=Servidor independente
send=Enviar...
passId=ID de passagem
createdAt=Criado às
logicalTimepoint=Data/hora lógica
@@ -1781,8 +1738,6 @@ errorLoadingCompetitorImportProviders=Erro ao carregar fornecedores de importaç
errorLoadingCompetitorImportDescriptors=Erro ao carregar descritores de importação de competidor: {0}
couldNotSaveCompetitorRegistrations=Não foi possível gravar registros de competidores: {0}
searchTagForImportedCompetitorPlaceholder=Utilizar, por exemplo, corrida + nome da flotilha
version=Versão: {0}
replicables=Replicando objetos
set=Curso
eventRegattaRacesLegendWind=# sensores de vento
eventRegattaRacesLegendVideo=# fluxos de vídeo
@@ -2133,7 +2088,6 @@ swissTimingUpdatePassword=Senha para enviar atualizações
allowResizing=Permitir redimensionamento
resizeSuccessfull=Redimensionamento concluído com êxito
resizeUnsuccessful=Redimensionamento não possível: {0}
setUpStorageService=Configure primeiro um serviço de armazenamento de arquivo
automaticResizeNeedsStorageService=O redimensionamento automático precisa de um FileStorageService que funcione.
qrCodeBoatInviteTitle=Você está convidado a rastrear o barco {0} para a regata {1}
qrCodeMarkInviteTitle=Você está convidado a rastrear a marca {0} para a regata {1}
@@ -2206,9 +2160,7 @@ tagCopyToClipBoard=Copiar para o clipboard
tagBrowseAndUploadImage=Navegar e carregar
tagCopiedLinkSuccessfully=Link copiado com êxito para o clipboard.
tagCopiedLinkNotSuccessfully=Seu browser não suporta a cópia para o clipboard. Copie o link manualmente.
username=Nome do usuário
confirm=Confirmar
cancel=Cancelar
close=Fechar
boatClasses=Classes de barcos
sailorProfiles=Perfis de velejadores
@@ -2251,9 +2203,6 @@ warningSailInsightVersion=O servidor está configurado para utilização com o S
invalidState=Status inválido
doYouReallyWantToRemoveDeviceConfiguration=Você quer realmente remover a configuração do dispositivo {0}?
errorFetchingSimulationData=Ocorreu um erro ao chamar dados de simulação: {0}. Assegure que está conectado com sua conta de usuário.
usernameAndPasswordMustBothBeSet=Nome de utilizador e senha devem estar ambos preenchidos ou vazios
explainUserName=Nome de usuário para utilizar para autenticação no mestre
explainPassword=Senha para utilizar para autenticação no mestre
tracTracConnection=Conexão TracTrac
addTracTracConnection=Adicionar conexão TracTrac
filterTracTracConnections=Filtrar conexões TracTrac
@@ -12,7 +12,6 @@ listRegattas=Список регат
wind=Ветер
maneuverType=Маневр
windPanelLabel=Это панель ветров, которая пока что совсем пуста.
refresh=Обновить
removeNumber=Удалить ({0})
windSource=Источник ветра
dampeningInterval=Интервал смягчения
@@ -132,7 +131,6 @@ storedPort=Порт хранимых данных
liveUri=URI оперативных данных
storedUri=URI хранимых данных
eventsConnectedTo=Отслеживаемые события
hostname=Имя хоста
declinationCheckbox=Корректировать направление ветра по отклонению
raceStartTrackingColumn=Отслеживание начато
pauseAutomaticRefresh=Приостановить автоматическое обновление
@@ -363,24 +361,17 @@ degreesBoatToTheWind=Угол к ветру
racesInLeaderboard=Гонки в таблице лидеров
leaderboardsInGroup=Таблицы лидеров в группе
replication=Репликация
errorFetchingReplicaData=Ошибка извлечения данных реплики: {0}
averageAbsoluteCrossTrackErrorInMeters=∅ XTE
averageAbsoluteCrossTrackErrorInMetersTooltip=Среднее боковое уклонение к большому круговому сегменту, соединяющему начало отрезка с концом отрезка; показывает среднее значение после прохождения отрезка и текущее значение в отрезке.
averageSignedCrossTrackErrorInMeters=∅ XTE +/-
averageSignedCrossTrackErrorInMetersTooltip=Средняя позиция на курсе как расстояние (со знаком) от средней линии курса; отрицательные значения означают уклонение влево, положительные — вправо; показывает среднее значение после прохождения отрезка и текущее значение в отрезке.
raceAverageAbsoluteCrossTrackErrorInMetersTooltip=Среднее абсолютное боковое уклонение к большим круговым сегментам, соединяющим начало отрезка с концом отрезка, для всех наветренных отрезках данной гонки без учета стороны участника от средней линии курса
raceAverageSignedCrossTrackErrorInMetersTooltip=Боковое уклонение (со знаком) к большим круговым сегментам, соединяющим начало отрезка с концом отрезка, для всех наветренных отрезков данной гонки; отрицательные значения означают уклонение влево от средней линии курса, положительные — вправо.
enterMaster=Имя хоста главного экземпляра
errorStartingReplication=Ошибка запуска репликации с хоста {0} / Exchange {1}: {2}
helpLines=Вспомогательные линии
startLine=Стартовая линия
finishLine=Финишная линия
advantageLine=Лини преимущества
courseMiddleLine=Средняя линия курса
messagingPortNumber=Номер порта обмена сообщениями (0 по умолчанию)
servletPortNumber=Номер порта сервлета
registeredAt=Зарегистрировано в {0}
replicatingFromMaster=Репликация с главного экземпляра {0}:{2}, порт обмена сообщениями {3}:{1}, Exchange {4}, репликация {5}
showWindSpeedSeries=Показать данные о скорости ветра
showWindDirectionSeries=Показать данные о направлениях ветра
fleet=Флот
@@ -422,7 +413,6 @@ boatClassDoesNotMatchSelectedRegatta=Выбранные гонки содерж
regattaExistForSelectedBoatClass=Для выбранных классов лодок имеется минимум одна регата. Создать регаты по умолчанию для соответствующих гонок?
addRegatta=Добавить регату...
importRegattas=Импортировать регаты...
exchangeName=Имя Exchange
course=Курс
courseLayout=Схема курса
buoy=Буй
@@ -712,7 +702,6 @@ starboardSide=Правый
pleaseEnterANumber=Введите число.
competitorsFilter=Фильтр участников
flagStatus=Статус флага
additionalInformation=Инфо
windFixListingDescription=Замеры ветра (первые 3, последние 3, истинные значения)
noWindFixesAvailable=Нет доступных замеров ветра.
distanceToStarboardEndOfStartlineWhenPassingStart=До правой стороны линии при старте
@@ -734,7 +723,6 @@ waypoints=Путевые точки
disableRaceFilter=Отключить фильтр
enableRaceFilter=Включить фильтр
raceStatusColumn=Статус гонки
loading=Загрузка (при медленном подключении к Интернету может занять несколько минут)...
racesWithHiddenState=Гонки с состоянием СКРЫТО
mediaDateFormatError=Недопустимый формат даты. Используйте формат: {0}
selectedCompetitors=Выбранные участники
@@ -801,19 +789,6 @@ importSuccessOverwriteInfo=Следующие регаты перезаписа
regattaOverviewConfiguration=Конфигурация обзора регаты
firstRaceIsNonDiscardableCarryForward=Начинается с неисключаемого переноса
addReplicationMaster=Подключиться к главному серверу репликации
connect=Подключиться
connectToMaster=Подключиться к главному серверу
exchangeHost=Имя хоста обмена сообщениями
explainExchangeHostName=Имя хоста, на котором выполняется очередь сообщений.
explainReplicationHostname=Имя хоста, на котором выполняется главный сервер репликации.
explainReplicationExchangeName=Имя очереди Exchange. Должно совпадать с указанным на главном сервере.
explainReplicationExchangePort=Порт очереди обмена сообщениями Exchange. Используется для всех данных после начальной загрузки.
explainReplicationServletPort=Номер порта сервлета, используемый для подключения для регистрации данной реплики и получения начальной загрузки.
explainReplicasRegistered=Зарегистрированные реплики (это главный сервер):
explainConnectionsToMaster=Подключение к главному серверу (это сервер реплики):
explainNoConnectionsToMaster=Подключения к главному серверу не настроены. Нажмите кнопку "Подключиться к главному серверу", чтобы настроить подключение.
explainNoConnectionsFromReplicas=Подключения от реплик не найдены. Реплики можно подключить с помощью их консоли администрирования.
stopConnectionToMaster=Остановить репликацию
asLink=Как ссылка
noStarttimeAnnouncedYet=Ожидание
raceIsRunning=Выполнение
@@ -824,9 +799,6 @@ raceIsInStartphase=Стартовая фаза
generalRecall=Общий отзыв
startPostponed=Отложено
raceAbandoned=Отменено
stopAllReplicas=Сбросить подключение ко всем репликам (Опасно!)
warningServerIsReplica=ВНИМАНИЕ: этот сервер настроен как реплика. НЕ изменяйте ничего, иначе возможны непредвиденные последствия!
dropReplicaConnection=Сбросить подключение
timePanelName=Управление временем
competitorFilterExplanation=Фильтр покажет всех участников, отвечающих следующим критериям:
protestTime=Время протеста
@@ -842,7 +814,6 @@ startAt=Старт в
finishAt=Финиш в
protestStartsAt=Протест начинается в
protestEndsAt=Протест заканчивается в
unknown=Неизвестно
raceLog=Журнал гонки
regattaLog=Журнал регаты
refreshRaceLog=Обновить журнал гонки
@@ -1040,7 +1011,6 @@ errorTryingToRemoveIgtimiAccount=Ошибка при попытке удалит
successfullyRemoveIgtimiAccount=Успешно удалена учетная запись Igtimi для пользователя {0}
eMailMustNotBeEmpty=Адрес эл. почты не должен быть пустым
emailAddress=адрес эл. почты
password=Пароль
searchTag=Тег поиска
doYouReallyWantToRemoveLeaderboard=Действительно удалить таблицу лидеров ''{0}''?
metaLeaderboardCannotBeChanged=Это метатаблица лидеров. Изменить ее здесь невозможно.
@@ -1174,7 +1144,6 @@ showSimulationOverlay=Показать наложение симуляции
simulationLegendTooltip=Сравнение времени:\nгонка — это продолжительность отрезка, измеренная по данным GPS, "Информированный" — курс при наличии всех сведений о ветре, "Ситуативный" — курсы при принятии решения сделать поворот для измерения дистанции до следующей отметки, "1 поворот" — курсы с одним поворотом при наличии всех сведений о ветре
racesScored=Оцененные гонки
racesScoredTooltip=Число гонок, которые участник завершил или за которые имеет оценки в данной таблице лидеров.
averageNumberOfOperationsPerMessage=Среднее число операций на сообщение
showUncorrectedTotalPoints=Показать неисправленный общий балл
setStartTimeReceived=Установить полученное время старта
setStartTimeReceivedDescription=Устанавливает введенное значение для полученного времени старта выбранной отслеживаемой гонки. Оставьте значение пустым, чтобы удалить текущее установленное полученное время старта.
@@ -1205,10 +1174,6 @@ registrationLinkUrlExplain=Вы можете скопировать этот URL
registrationLinkUrlCopy=Копировать в буфер обмена
registrationLinkShare=Поделиться
explainRegistrationLinkDialog=Участники открытых регат могут зарегистрироваться, открыв ссылку для регистрации или отсканировав QR-код ниже со своего смартфона.
numberOfQueueMessagesSent=Число отправленных сообщений очереди
totalSize=Общий размер
averageMessageSize=Средний размер сообщения в байтах
totalNumberOfOperations=Общее число операций
currentOrAverageSpeedOverGroundInKnotsTooltip=Текущая скорость относительно грунта в узлах во время прохождения отрезка; средняя скорость относительно грунта по завершении отрезка
currentOrAverageSpeedOverGroundInKnots=SOG (∅ в конце)
connectors=Соединители
@@ -1308,11 +1273,6 @@ sendingMailsFailed=Сбой отправки сообщений
sendingMailsSuccessful=Сообщения эл. почты успешно отправлены
selectEventForInvitation=Выберите событие для приглашения
imageURL=URL-адрес изображения
upload=Отправить
removeResult=Удалить операцию: {0} {1}
uploadSuccessful=Отправлено успешно
fileUploadResult=Отправка файла: {0} {1}.\nВ случае ошибки проверьте правильность конфигурации службы хранилища файлов.
removeUploadedFile=Удалить отправленный файл
showCompetitorBoatColumn=Лодка участника
showCompetitorShortNameColumn=Краткое имя участника
showCompetitorShortNameColumnTooltip=Показывает краткое имя плюс государственный флаг или изображение участника. Изображение участника, при наличии, имеет приоритет над государственным флагом. Если установлен параметр "{0}", будут отображены оба значка.
@@ -1511,7 +1471,6 @@ imageSizeError=Размер изображения {0} не подходит. Ш
imageToSmallError=Размер изображения {0} не подходит. Ширина должна быть минимум {1} пикс., а высота минимум {2} пикс.
imageResizeError=Изменение размера изображения {0} не работает. Отношение ширины к высоте должно быть между {1} и {2}, сейчас {3}.
couldNotRetrieveImageSizeYet=Ширину и высоту изображения еще не удалось извлечь.
pleaseOnlyUploadContentYouHaveAllUsageRightsFor=Выкладывайте только контент, на использование которого у вас есть все права. Не забывайте о возможности кадрировать контент. Для видеоконтента можно использовать ссылки YouTube.
registerCompetitorsOnRace=Зарегистрировать участников в гонке (например, для гонок с разделением флота)
doYouWantToRegisterCompetitorsDirectlyOnTheRace=Зарегистрировать участников непосредственно в гонке?
doYouWantToDisableCompetitorsRegistrationsOnTheRace=Отключить регистрации участников в гонке?
@@ -1588,10 +1547,8 @@ noEventsYet=Событий еще нет.
selectCompetitorImportProvider=Выберите поставщика импорта участников...
selectResultImportProvider=Выберите поставщика импорта результатов...
buildVersion=Версия сборки
serverInformation=Информация о сервере
serverConfiguration=Конфигурация сервера
standaloneServer=Изолированный сервер
send=Отправить...
passId=PassId
createdAt=Создано в
logicalTimepoint=Логическая отметка времени
@@ -1781,8 +1738,6 @@ errorLoadingCompetitorImportProviders=Ошибка при загрузке по
errorLoadingCompetitorImportDescriptors=Ошибка при загрузке дескрипторов импорта участников: {0}
couldNotSaveCompetitorRegistrations=Не удалось сохранить регистрации участников: {0}
searchTagForImportedCompetitorPlaceholder=Используйте, например, гонку + название флота
version=Версия: {0}
replicables=Репликация объектов
set=Набор
eventRegattaRacesLegendWind=Датчиков ветра
eventRegattaRacesLegendVideo=Видеопотоков
@@ -2133,7 +2088,6 @@ swissTimingUpdatePassword=Пароль для отправки обновлен
allowResizing=Разрешить изменение размера
resizeSuccessfull=Изменение размера завершено
resizeUnsuccessful=Изменение размера невозможно: {0}
setUpStorageService=Сначала настройте сервис памяти файлов
automaticResizeNeedsStorageService=Для автоматического изменения размера требуется работающий сервис памяти файлов (FileStorageService).
qrCodeBoatInviteTitle=Вас пригласили отслеживать лодку {0} в регате {1}
qrCodeMarkInviteTitle=Вас пригласили отслеживать отметку {0} в регате {1}
@@ -2206,9 +2160,7 @@ tagCopyToClipBoard=Копировать в буфер обмена
tagBrowseAndUploadImage=Найти и загрузить
tagCopiedLinkSuccessfully=Ссылка скопирована в буфер обмена.
tagCopiedLinkNotSuccessfully=Ваш браузер не поддерживает копирование в буфер обмена, скопируйте ссылку вручную.
username=Имя пользователя
confirm=Подтвердить
cancel=Отменить
close=Закрыть
boatClasses=Классы лодок
sailorProfiles=Профили участников гонки
@@ -2251,9 +2203,6 @@ warningSailInsightVersion=Сервер сконфигурирован для и
invalidState=Недействительный статус
doYouReallyWantToRemoveDeviceConfiguration=Действительно удалить конфигурацию устройства {0}?
errorFetchingSimulationData=Произошла ошибка при вызове данных моделирования: {0}. Убедитесь, что вход выполнен с вашей учетной записью.
usernameAndPasswordMustBothBeSet=Имя пользователя и пароль должны быть либо заполненными, либо пустыми
explainUserName=Имя пользователя для аутентификации на главном сервере
explainPassword=Пароль для аутентификации на главном сервере
tracTracConnection=Соединение TracTrac
addTracTracConnection=Добавить соединение TracTrac
filterTracTracConnections=Фильтр соединений TracTrac
@@ -12,7 +12,6 @@ listRegattas=比赛清单
wind=风力
maneuverType=操作
windPanelLabel=这是风力面板,目前完全空白。
refresh=刷新
removeNumber=移除 ({0})
windSource=风源
dampeningInterval=阻尼间隔
@@ -132,7 +131,6 @@ storedPort=端口存储的数据
liveUri=实况 URI
storedUri=存储的 URI
eventsConnectedTo=当前跟踪的活动
hostname=主机名称
declinationCheckbox=通过偏角更正风方位
raceStartTrackingColumn=开始的跟踪
pauseAutomaticRefresh=暂停自动刷新
@@ -363,24 +361,17 @@ degreesBoatToTheWind=风夹角
racesInLeaderboard=积分榜中的比赛轮次
leaderboardsInGroup=分组中的积分榜
replication=复制
errorFetchingReplicaData=获取重复数据出错: {0}
averageAbsoluteCrossTrackErrorInMeters=∅ XTE
averageAbsoluteCrossTrackErrorInMetersTooltip=连接航段起点和终点的大圆弧的平均交叉轨道误差;显示航段后的平均值和航段中的当前值。
averageSignedCrossTrackErrorInMeters=∅ XTE +/-
averageSignedCrossTrackErrorInMetersTooltip=赛场中的平均位置 - 从场地中线开始计算的符号距离;0 代表场地中线;负数代表左侧,正数代表右侧。显示航段后的平均值和航段中的当前值。
raceAverageAbsoluteCrossTrackErrorInMetersTooltip=所有比赛轮次中迎风航段连接航段起点和终点的大圆弧的平均绝对交叉轨道误差,忽略参赛队所在的场地中线
raceAverageSignedCrossTrackErrorInMetersTooltip=所有比赛轮次中迎风航段连接航段起点和终点的大圆弧的符号平均交叉轨道误差;负数代表场地中线的左侧,正数代表右侧。
enterMaster=主实例的主机名称
errorStartingReplication=从主机{0}/交换机{1}开始复制出错: {2}
helpLines=辅助线
startLine=起航线
finishLine=终点线
advantageLine=优势航线
courseMiddleLine=场地中线
messagingPortNumber=消息传送端口编号(默认为 0
servletPortNumber=Servlet 端口编号
registeredAt=注册日期{0}
replicatingFromMaster=正在从主服务器{0}:{2}、消息传送端口{3}:{1}、交换机{4}复制,正在复制{5}
showWindSpeedSeries=显示风速数据
showWindDirectionSeries=显示风向数据
fleet=船队
@@ -422,7 +413,6 @@ boatClassDoesNotMatchSelectedRegatta=所选的比赛轮次包含不同于所选
regattaExistForSelectedBoatClass=所选船只级别至少有一场比赛。是否确定为这些比赛轮次创建默认比赛?
addRegatta=添加比赛...
importRegattas=导入比赛...
exchangeName=交换机名称
course=场地
courseLayout=场地设置
buoy=浮标
@@ -712,7 +702,6 @@ starboardSide=右舷
pleaseEnterANumber=请输入数字。
competitorsFilter=参赛队筛选器
flagStatus=旗标状态
additionalInformation=信息
windFixListingDescription=风力修复(前 3 个,后 3 个,真值)
noWindFixesAvailable=风力修复不可用。
distanceToStarboardEndOfStartlineWhenPassingStart=起航时起航线右舷的距离
@@ -734,7 +723,6 @@ waypoints=航路点
disableRaceFilter=禁用筛选器
enableRaceFilter=启用筛选器
raceStatusColumn=比赛轮次状态
loading=正在加载(如果网速较慢,可能需要几分钟时间)...
racesWithHiddenState=状态为 HIDDEN 的比赛轮次
mediaDateFormatError=日期格式无效。 使用: {0}
selectedCompetitors=选择的参赛队
@@ -801,19 +789,6 @@ importSuccessOverwriteInfo=需要覆盖后续比赛,需要重新跟踪比赛
regattaOverviewConfiguration=比赛总览配置
firstRaceIsNonDiscardableCarryForward=从不可作废的得分开始
addReplicationMaster=连接到副本主服务器
connect=连接
connectToMaster=连接到主服务器
exchangeHost=消息传送主机名称
explainExchangeHostName=运行消息传送队列的主机名称。
explainReplicationHostname=运行副本主服务器的主机名称。
explainReplicationExchangeName=交换机队列的名称。必须与主服务器中配置的相同。
explainReplicationExchangePort=消息传送交换机队列的端口。必须在初始加载后用于所有数据。
explainReplicationServletPort=用于连接注册此副本和接收初始加载的 Servlet 端口编号。
explainReplicasRegistered=副本已注册(此服务器为主服务器):
explainConnectionsToMaster=与主服务器的连接(此服务器为副本):
explainNoConnectionsToMaster=未配置与主服务器的连接。点击“连接到主服务器”按钮配置。
explainNoConnectionsFromReplicas=未找到来自副本的连接。可以使用管理控制台连接副本。
stopConnectionToMaster=停止复制
asLink=链接
noStarttimeAnnouncedYet=待定
raceIsRunning=运行
@@ -824,9 +799,6 @@ raceIsInStartphase=开始阶段
generalRecall=全召
startPostponed=已延迟
raceAbandoned=已放弃
stopAllReplicas=断开与所有副本的连接(危险!)
warningServerIsReplica=注意:此服务器配置为副本。请勿更改任何内容,否则将导致奇怪效果!
dropReplicaConnection=断开连接
timePanelName=时间控制
competitorFilterExplanation=筛选器将显示与条件匹配的所有参赛队:
protestTime=声明时间
@@ -842,7 +814,6 @@ startAt=开始时间
finishAt=结束时间
protestStartsAt=声明开始时间
protestEndsAt=声明结束时间
unknown=未知
raceLog=比赛轮次日志
regattaLog=比赛日志
refreshRaceLog=刷新比赛轮次日志
@@ -1040,7 +1011,6 @@ errorTryingToRemoveIgtimiAccount=尝试移除用户{0}的 Igtimi 账户出错
successfullyRemoveIgtimiAccount=已成功移除用户{0}的 Igtimi 账户
eMailMustNotBeEmpty=电子邮件地址不得为空
emailAddress=电子邮件地址
password=密码
searchTag=搜索标记
doYouReallyWantToRemoveLeaderboard=是否确定移除积分榜:''''{0}''''?
metaLeaderboardCannotBeChanged=此为元积分榜。无法在此处更改。
@@ -1174,7 +1144,6 @@ showSimulationOverlay=显示模拟覆盖
simulationLegendTooltip=时间比较:\n比赛轮次指根据 GPS 计算的航段历时,如果对风力了如指掌,则称为全知级;如果仅靠测量下一标志的距离就决定启航,则称为投机级;如果了解有关风力的所有信息并决定启航,则称为一圈即成级。
racesScored=记分的比赛轮次
racesScoredTooltip=参赛队完成并记录在此积分榜上的比赛轮次数。
averageNumberOfOperationsPerMessage=各消息操作的平均数
showUncorrectedTotalPoints=显示未更正的总分
setStartTimeReceived=设置接收的开始时间
setStartTimeReceivedDescription=将所选 TrackedRace 的 startTimeReceived 设置为提供的值。将此值留空,以移除当前设置的 startTimeReceived。
@@ -1205,10 +1174,6 @@ registrationLinkUrlExplain=您可以复制此 URL,并将其粘贴到您的邀
registrationLinkUrlCopy=复制到剪贴板
registrationLinkShare=共享
explainRegistrationLinkDialog=公开赛的参赛队可以通过打开注册链接或使用智能手机扫描下方的二维码来注册。
numberOfQueueMessagesSent=发送的队列消息的数量
totalSize=总大小
averageMessageSize=各消息的平均大小(字节)
totalNumberOfOperations=操作的总数
currentOrAverageSpeedOverGroundInKnotsTooltip=在航段航行时的当前实际速度(节);航段完成时的平均实际速度
currentOrAverageSpeedOverGroundInKnots=实际速度(∅ 终点)
connectors=连接器
@@ -1308,11 +1273,6 @@ sendingMailsFailed=发送邮件失败
sendingMailsSuccessful=已成功发送电子邮件
selectEventForInvitation=选择邀请活动
imageURL=图像 URL
upload=上传
removeResult=移除操作: {0} {1}
uploadSuccessful=上传成功
fileUploadResult=文件上传: {0} {1}。\n如果出错,请检查文件存储服务配置是否正确。
removeUploadedFile=移除上传的文件
showCompetitorBoatColumn=参赛队的船只
showCompetitorShortNameColumn=参赛队短名称
showCompetitorShortNameColumnTooltip=显示短名称和国籍旗帜或参赛队图像。如果可用,参赛队图像优先于国籍旗帜。如果设置 "{0}",将显示这两种图标。
@@ -1511,7 +1471,6 @@ imageSizeError={0}图像大小不合适。宽度应在{1}和{2} px 之间,高
imageToSmallError={0}图像大小不合适。宽度应至少为{1} px,高度应至少为{2} px。
imageResizeError=重新调整{0}图像大小不起作用。宽/高比应在{1}和{2}之间,但实际为{3}。
couldNotRetrieveImageSizeYet=无法检索图像的宽度和高度。
pleaseOnlyUploadContentYouHaveAllUsageRightsFor=请仅上传您拥有所有使用权的内容。请记住,内容可能会被截断。对于视频内容,通常可以使用 YouTube URL
registerCompetitorsOnRace=在比赛轮次注册参赛队(例如区分船队比赛)
doYouWantToRegisterCompetitorsDirectlyOnTheRace=是否直接在比赛轮次注册参赛队?
doYouWantToDisableCompetitorsRegistrationsOnTheRace=是否要禁用参赛队在比赛轮次注册?
@@ -1588,10 +1547,8 @@ noEventsYet=暂无活动。
selectCompetitorImportProvider=请选择参赛队导入提供方...
selectResultImportProvider=请选择结果导入提供方...
buildVersion=内部版本
serverInformation=服务器信息
serverConfiguration=服务器配置
standaloneServer=独立服务器
send=发送...
passId=场次编号
createdAt=创建时间
logicalTimepoint=逻辑时间点
@@ -1781,8 +1738,6 @@ errorLoadingCompetitorImportProviders=加载参赛队导入提供方时出错:
errorLoadingCompetitorImportDescriptors=加载参赛队导入描述符时出错:{0}
couldNotSaveCompetitorRegistrations=无法保存参赛队注册:{0}
searchTagForImportedCompetitorPlaceholder=例如,使用比赛轮次+船队名称
version=版本:{0}
replicables=正在复制对象
set=设置
eventRegattaRacesLegendWind=# 风力感应器
eventRegattaRacesLegendVideo=# 视频流
@@ -2133,7 +2088,6 @@ swissTimingUpdatePassword=用于发送更新的密码
allowResizing=允许重新调整大小
resizeSuccessfull=重新调整大小已成功完成
resizeUnsuccessful=无法重新调整大小:{0}
setUpStorageService=请先设置文件存储服务
automaticResizeNeedsStorageService=自动重新调整大小需要正常运行的 FileStorageService。
qrCodeBoatInviteTitle=您受邀跟踪比赛{1}的船只{0}
qrCodeMarkInviteTitle=您受邀跟踪比赛{1}的标志{0}
@@ -2206,9 +2160,7 @@ tagCopyToClipBoard=复制到剪贴板
tagBrowseAndUploadImage=浏览并上传
tagCopiedLinkSuccessfully=已将链接成功复制到剪贴板!
tagCopiedLinkNotSuccessfully=您的浏览器不支持复制到剪贴板,请手动复制链接!
username=用户名
confirm=确认
cancel=取消
close=关闭
boatClasses=船只级别
sailorProfiles=水手资料
@@ -2251,9 +2203,6 @@ warningSailInsightVersion=此服务器配置为与 SAP Sail InSight 1 配套使
invalidState=状态无效
doYouReallyWantToRemoveDeviceConfiguration=是否确定移除设备配置{0}
errorFetchingSimulationData=获取模拟数据时发生错误:{0}。请确保您已经登录您的用户账户。
usernameAndPasswordMustBothBeSet=用户名和密码必须填写或为空
explainUserName=用于在主服务器上进行身份验证的用户名
explainPassword=用于在主服务器上进行身份验证的密码
tracTracConnection=TracTrac 连接
addTracTracConnection=添加 TracTrac 连接
filterTracTracConnections=筛选 TracTrac 连接
@@ -95,8 +95,7 @@ public class MediaServiceImpl extends RemoteServiceServlet implements MediaServi
return racingEventService().getSecurityService().mapAndFilterByReadPermissionForCurrentUser(mediaTracksToFilter,
mediaTrack -> {
final MediaTrackWithSecurityDTO securedMediaTrack = new MediaTrackWithSecurityDTO(mediaTrack);
SecurityDTOUtil.addSecurityInformation(racingEventService().getSecurityService(), securedMediaTrack,
mediaTrack.getIdentifier());
SecurityDTOUtil.addSecurityInformation(racingEventService().getSecurityService(), securedMediaTrack);
return securedMediaTrack;
});
}
@@ -32,8 +32,7 @@ public class MediaServiceWriteImpl extends MediaServiceImpl implements MediaServ
throw new UnauthenticatedException("Not authorized to create media track object");
} else {
final MediaTrackWithSecurityDTO mediaTrackWithSecurity = new MediaTrackWithSecurityDTO(mediaTrack);
SecurityDTOUtil.addSecurityInformation(racingEventService().getSecurityService(), mediaTrackWithSecurity,
mediaTrackWithSecurity.getIdentifier());
SecurityDTOUtil.addSecurityInformation(racingEventService().getSecurityService(), mediaTrackWithSecurity);
return mediaTrackWithSecurity;
}
}
@@ -469,7 +469,6 @@ import com.sap.sse.security.SessionUtils;
import com.sap.sse.security.shared.AccessControlListAnnotation;
import com.sap.sse.security.shared.HasPermissions;
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
import com.sap.sse.security.shared.QualifiedObjectIdentifier;
import com.sap.sse.security.shared.RoleDefinition;
import com.sap.sse.security.shared.TypeRelativeObjectIdentifier;
import com.sap.sse.security.shared.dto.StrippedUserGroupDTO;
@@ -958,7 +957,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
regattaDTO.competitorRegistrationType = regatta.getCompetitorRegistrationType();
regattaDTO.configuration = convertToRegattaConfigurationDTO(regatta.getRegattaConfiguration());
regattaDTO.rankingMetricType = regatta.getRankingMetricType();
SecurityDTOUtil.addSecurityInformation(getSecurityService(), regattaDTO, regatta.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), regattaDTO);
regattaDTO.registrationLinkSecret = regatta.getRegistrationLinkSecret();
return regattaDTO;
}
@@ -1131,7 +1130,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
RaceWithCompetitorsAndBoatsDTO raceDTO = new RaceWithCompetitorsAndBoatsDTO(raceIdentifier, competitorAndBoatDTOs,
trackedRaceDTO, getService().isRaceBeingTracked(regatta, r), rankingMetricType);
if (trackedRace != null) {
SecurityDTOUtil.addSecurityInformation(getSecurityService(), raceDTO, trackedRace.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), raceDTO);
getBaseDomainFactory().updateRaceDTOWithTrackedRaceData(trackedRace, raceDTO);
}
raceDTO.boatClass = regatta.getBoatClass() == null ? null : regatta.getBoatClass().getName();
@@ -1155,7 +1154,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
protected CompetitorDTO convertToCompetitorDTO(Competitor competitor) {
CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor);
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorDTO, competitor.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorDTO);
clearNonPublicFieldsIfCurrentUserHasNoReadPermission(competitor, competitorDTO);
return competitorDTO;
}
@@ -1170,10 +1169,10 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
protected CompetitorWithBoatDTO convertToCompetitorWithBoatDTO(CompetitorWithBoat competitor) {
CompetitorWithBoatDTO competitorDTO = baseDomainFactory.convertToCompetitorWithBoatDTO(competitor);
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorDTO, competitor.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorDTO);
clearNonPublicFieldsIfCurrentUserHasNoReadPermission(competitor, competitorDTO);
BoatDTO boatDTO = competitorDTO.getBoat();
SecurityDTOUtil.addSecurityInformation(getSecurityService(), boatDTO, competitor.getBoat().getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), boatDTO);
return competitorDTO;
}
@@ -1185,9 +1184,9 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
List<CompetitorAndBoatDTO> result = new ArrayList<>();
for (final Entry<? extends Competitor, ? extends Boat> c : competitorsAndTheirBoats.entrySet()) {
CompetitorAndBoatDTO competitorAndBoatDTO = baseDomainFactory.convertToCompetitorAndBoatDTO(c.getKey(), c.getValue());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorAndBoatDTO.getCompetitor(), c.getKey().getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorAndBoatDTO.getCompetitor());
clearNonPublicFieldsIfCurrentUserHasNoReadPermission(c.getKey(), competitorAndBoatDTO.getCompetitor());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorAndBoatDTO.getBoat(), c.getValue().getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorAndBoatDTO.getBoat());
result.add(competitorAndBoatDTO);
}
return result;
@@ -1201,9 +1200,9 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
List<CompetitorWithBoatDTO> result = new ArrayList<>();
for (CompetitorWithBoat c : iterable) {
CompetitorWithBoatDTO competitorDTO = baseDomainFactory.convertToCompetitorWithBoatDTO(c);
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorDTO, c.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorDTO);
clearNonPublicFieldsIfCurrentUserHasNoReadPermission(c, competitorDTO);
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorDTO.getBoat(), c.getBoat().getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorDTO.getBoat());
result.add(competitorDTO);
}
return result;
@@ -1217,7 +1216,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
List<BoatDTO> result = new ArrayList<BoatDTO>();
for (Boat b : iterable) {
BoatDTO boatDTO = baseDomainFactory.convertToBoatDTO(b);
SecurityDTOUtil.addSecurityInformation(getSecurityService(), boatDTO, b.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), boatDTO);
result.add(boatDTO);
}
return result;
@@ -1225,7 +1224,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
protected BoatDTO convertToBoatDTO(Boat boat) {
BoatDTO boatDTO = baseDomainFactory.convertToBoatDTO(boat);
SecurityDTOUtil.addSecurityInformation(getSecurityService(), boatDTO, boat.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), boatDTO);
return boatDTO;
}
@@ -1264,7 +1263,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
ttConfig.getStoredDataURI()==null?null:ttConfig.getStoredDataURI().toString(),
ttConfig.getCourseDesignUpdateURI()==null?null:ttConfig.getCourseDesignUpdateURI().toString(),
ttConfig.getTracTracUsername(), ttConfig.getTracTracPassword(), ttConfig.getCreatorName());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), config, config.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), config);
return config;
});
}
@@ -1660,7 +1659,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
getBaseDomainFactory().updateRaceDTOWithTrackedRaceData(trackedRace, raceDTO);
}
raceDTO.boatClass = regatta.getBoatClass() == null ? null : regatta.getBoatClass().getName();
SecurityDTOUtil.addSecurityInformation(getSecurityService(), raceDTO, raceDTO.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), raceDTO);
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
final LeaderboardGroup leaderboardGroup;
leaderboardGroup = getLeaderboardGroupByIdOrName(leaderboardGroupId, leaderboardGroupName);
@@ -2439,7 +2438,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
StrippedLeaderboardDTOWithSecurity leaderboardDTO = new StrippedLeaderboardDTOWithSecurity(
convertToBoatClassDTO(leaderboard.getBoatClass()));
fillLeaderboardData(leaderboard, withGeoLocationData, withStatisticalData, leaderboardDTO);
SecurityDTOUtil.addSecurityInformation(getSecurityService(), leaderboardDTO, leaderboard.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), leaderboardDTO);
return leaderboardDTO;
}
@@ -2539,7 +2538,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
stConfig.getName(), stConfig.getJsonURL(),
stConfig.getHostname(), stConfig.getPort(), stConfig.getUpdateURL(),
stConfig.getUpdateUsername(), stConfig.getUpdatePassword(), stConfig.getCreatorName());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), config, config.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), config);
return config;
});
}
@@ -3485,7 +3484,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
}
groupDTO.setOverallLeaderboardScoringSchemeType(overallLeaderboard.getScoringScheme().getType());
}
SecurityDTOUtil.addSecurityInformation(getSecurityService(), groupDTO, leaderboardGroup.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), groupDTO);
return groupDTO;
}
@@ -3809,7 +3808,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
eventDTO.setAllWindFinderSpotsUsedByEvent(new EventWindFinderUtil().getWindFinderSpotsToConsider(event,
windFinderTrackerFactory, /* useCachedSpotsForTrackedRaces */ false));
}
SecurityDTOUtil.addSecurityInformation(getSecurityService(), eventDTO, event.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), eventDTO);
return eventDTO;
}
@@ -3967,7 +3966,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
protected ServerInfoDTO getServerInfo() {
ServerInfoDTO result = new ServerInfoDTO(ServerInfo.getName(), ServerInfo.getBuildVersion(), ServerInfo.getManageEventsBaseUrl());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), result, result.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), result);
return result;
}
@@ -4045,13 +4044,11 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
@Override
public List<UrlDTO> getResultImportUrls(String resultProviderName) {
final List<UrlDTO> result = new ArrayList<>();
SecurityService securityService = getSecurityService();
SecurityService securityService = getSecurityService();
Iterable<URL> allUrlsReadableBySubject = getService().getResultImportUrls(resultProviderName);
for (URL url : allUrlsReadableBySubject) {
QualifiedObjectIdentifier objId = SecuredDomainType.RESULT_IMPORT_URL.getQualifiedObjectIdentifier(
new TypeRelativeObjectIdentifier(resultProviderName, url.toString()));
UrlDTO urlDTO = new UrlDTO(url.toString());
SecurityDTOUtil.addSecurityInformation(securityService, urlDTO, objId);
UrlDTO urlDTO = new UrlDTO(resultProviderName, url.toString());
SecurityDTOUtil.addSecurityInformation(securityService, urlDTO);
result.add(urlDTO);
}
return result;
@@ -4105,7 +4102,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
stArchiveConfig -> {
SwissTimingArchiveConfigurationWithSecurityDTO config = new SwissTimingArchiveConfigurationWithSecurityDTO(
stArchiveConfig.getJsonURL(), stArchiveConfig.getCreatorName());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), config, config.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), config);
return config;
});
}
@@ -4593,7 +4590,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
if (configuration.getRegattaConfiguration() != null) {
dto.regattaConfiguration = convertToRegattaConfigurationDTO(configuration.getRegattaConfiguration());
}
SecurityDTOUtil.addSecurityInformation(getSecurityService(), dto, configuration.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), dto);
return dto;
}
@@ -4754,7 +4751,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
final String name = user.getFirstName() + " " + user.getSurname();
final AccountWithSecurityDTO securedAccount = new AccountWithSecurityDTO(email, name,
igtimiAccount.getCreatorName());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), securedAccount, igtimiAccount.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), securedAccount);
return securedAccount;
}
@@ -5439,7 +5436,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
if (expeditionConnector != null) {
for (final ExpeditionDeviceConfiguration config : expeditionConnector.getDeviceConfigurations()) {
if (subject.isPermitted(config.getIdentifier().getStringPermission(DefaultActions.READ))) {
SecurityDTOUtil.addSecurityInformation(getSecurityService(), config, config.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), config);
result.add(config);
}
}
@@ -6132,7 +6129,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
: markTemplate.getShortName(),
markTemplate.getColor(), markTemplate.getShape(), markTemplate.getPattern(), markTemplate.getType());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), markTemplateDTO, markTemplate.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), markTemplateDTO);
return markTemplateDTO;
}
@@ -6169,7 +6166,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
return "DEVICE";
}
}));
SecurityDTOUtil.addSecurityInformation(getSecurityService(), markPropertiesDto, markProperties.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), markPropertiesDto);
return markPropertiesDto;
}
@@ -6201,7 +6198,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
convertedDefaultMarkRolesForMarkTemplates, convertedDefaultMarkTemplatesForMarkRoles, optionalImageURL,
courseTemplate.getTags(),
convertToRepeatablePartDTO(courseTemplate.getRepeatablePart()), courseTemplate.getDefaultNumberOfLaps());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), result, courseTemplate.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), result);
return result;
}
@@ -6243,7 +6240,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
protected MarkRoleDTO convertToMarkRoleDTO(final MarkRole markRole) {
final MarkRoleDTO markRoleDTO = new MarkRoleDTO(markRole.getId(), markRole.getName(), markRole.getShortName());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), markRoleDTO, markRole.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), markRoleDTO);
return markRoleDTO;
}
@@ -1615,13 +1615,11 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili
if (competitor.hasBoat()) {
final CompetitorWithBoatDTO competitorWithBoat = addOrUpdateCompetitorWithBoat(
(CompetitorWithBoatDTO) competitor);
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorWithBoat,
competitorWithBoat.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorWithBoat);
result.add(competitorWithBoat);
} else {
final CompetitorDTO competitorWithoutBoat = addOrUpdateCompetitorWithoutBoat(competitor);
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorWithoutBoat,
competitorWithoutBoat.getIdentifier());
SecurityDTOUtil.addSecurityInformation(getSecurityService(), competitorWithoutBoat);
result.add(competitorWithoutBoat);
}
}
@@ -15,6 +15,7 @@ import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
import com.sap.sailing.server.interfaces.RacingEventService;
import com.sap.sse.ServerInfo;
import com.sap.sse.replication.ReplicationService;
import com.sap.sse.replication.ReplicationStatus;
@@ -41,11 +42,14 @@ public class StatusServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO bug4811: add more detailed replication info that allows clients to see which replicable is actually replicated from which replica set
final ServletContext servletContext = req.getServletContext();
final JSONObject result = new JSONObject();
final RacingEventService service = getService(servletContext);
final String waitUntilRacesLoadedString = req.getParameter(WAIT_UNTIL_RACES_LOADED);
boolean waitUntilRacesLoaded = Boolean.valueOf(waitUntilRacesLoadedString);
result.put("servername", ServerInfo.getName());
result.put("buildversion", ServerInfo.getBuildVersion());
final long numberOfTrackedRacesToRestore = service.getNumberOfTrackedRacesToRestore();
result.put("numberofracestorestore", numberOfTrackedRacesToRestore);
final int numberOfTrackedRacesRestored = service.getNumberOfTrackedRacesRestored();
@@ -14,11 +14,13 @@ public class UrlDTO implements SecuredDTO {
private SecurityInformationDTO securityInformation = new SecurityInformationDTO();
private String url; // Can't use type URL since GWT does not support java.net.*
private String resultProviderName;
@SuppressWarnings("unused")
private UrlDTO() { } // For GWT serialization
public UrlDTO(String url) {
public UrlDTO(String resultProviderName, String url) {
this.resultProviderName = resultProviderName;
this.url = url;
}
@@ -37,7 +39,7 @@ public class UrlDTO implements SecuredDTO {
@Override
public QualifiedObjectIdentifier getIdentifier() {
return getPermissionType().getQualifiedObjectIdentifier(new TypeRelativeObjectIdentifier(url));
return getPermissionType().getQualifiedObjectIdentifier(new TypeRelativeObjectIdentifier(resultProviderName, url));
}
@Override
@@ -14,7 +14,7 @@
<inherits name='com.sap.sailing.gwt.common.AuthenticationCommon'/>
<!-- module containing datamining features -->
<inherits name="com.sap.sse.datamining.SSEDataMining"/>
<inherits name="com.sap.sse.datamining.SSEDataMining"/>
<!-- Other module inherits -->
<inherits name="com.sap.sse.gwt.SSESharedGWT" />
@@ -28,10 +28,10 @@
<inherits name="com.sap.sse.security.ui.LoginPanel" />
<inherits name="com.sap.sailing.datamining.DataMiningSailingDomain" />
<inherits name="com.sap.sailing.polars.datamining.DataMiningPolars" />
<inherits name="com.sap.sailing.ExpeditionConnectorCommon" />
<!-- module containing locale configuration -->
<inherits name='com.sap.sailing.gwt.common.SailingLocalesAllPermutations' />
<inherits name="com.sap.sailing.ExpeditionConnectorCommon" />
<!-- module containing locale configuration -->
<inherits name='com.sap.sailing.gwt.common.SailingLocalesAllPermutations' />
<!-- Disable logging -->
<set-property name="gwt.logging.enabled" value="FALSE"/>
@@ -39,7 +39,7 @@
<source path="datamining" />
<source path="polarmining" />
<inherits name='com.sap.sailing.gwt.ui.SourceCommon'/>
<inherits name='com.sap.sailing.gwt.ui.SourceCommon'/>
<inherits name='com.sap.sailing.gwt.ui.SourceClient'/>
<inherits name='com.sap.sailing.gwt.ui.SourceShared'/>
<inherits name="com.sap.sailing.gwt.ui.SourceLeaderboard"/>
@@ -48,6 +48,4 @@
<inherits name='com.sap.sse.gwt.CommonControlCSS_Autoinject'/>
<entry-point class="com.sap.sailing.gwt.ui.datamining.DataMiningEntryPoint" />
</module>
+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
+28
View File
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.sap.sailing.landscape.common</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,8 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8
@@ -0,0 +1,3 @@
eclipse.preferences.version=1
pluginProject.extensions=false
resolve.requirebundle=false
+11
View File
@@ -0,0 +1,11 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Common
Bundle-SymbolicName: com.sap.sailing.landscape.common
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Automatic-Module-Name: com.sap.sailing.landscape.common
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: com.sap.sse.security.common,
com.sap.sse.common
Bundle-ActivationPolicy: lazy
+4
View File
@@ -0,0 +1,4 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
+52
View File
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>root</artifactId>
<groupId>com.sap.sailing</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>com.sap.sailing.landscape.common</artifactId>
<packaging>eclipse-plugin</packaging>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-source-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<id>plugin-source</id>
<phase>generate-sources</phase>
<goals>
<goal>plugin-source</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>with-mobile</id>
<activation>
<property>
<name>ldi.releaseBuild</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>com.simpligility.maven.plugins</groupId>
<artifactId>android-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.7.0//EN" "http://gwtproject.org/doctype/2.7.0/gwt-module.dtd">
<module>
<inherits name="com.sap.sse.landscape.SSELandscapeCommon"/>
<source path='common'/>
</module>
@@ -27,6 +27,7 @@ import com.sap.sailing.landscape.SailingAnalyticsMetrics;
import com.sap.sailing.landscape.SailingAnalyticsProcess;
import com.sap.sailing.landscape.SailingReleaseRepository;
import com.sap.sailing.landscape.impl.BearerTokenReplicationCredentials;
import com.sap.sailing.landscape.impl.SailingAnalyticsProcessImpl;
import com.sap.sailing.landscape.procedures.DeployProcessOnMultiServer;
import com.sap.sailing.landscape.procedures.SailingAnalyticsApplicationConfiguration;
import com.sap.sailing.landscape.procedures.SailingAnalyticsMasterConfiguration;
@@ -38,6 +39,7 @@ import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.landscape.InboundReplicationConfiguration;
import com.sap.sse.landscape.application.ApplicationReplicaSet;
import com.sap.sse.landscape.aws.AmazonMachineImage;
import com.sap.sse.landscape.aws.ApplicationProcessHost;
import com.sap.sse.landscape.aws.AwsInstance;
@@ -46,7 +48,10 @@ import com.sap.sse.landscape.aws.Tags;
import com.sap.sse.landscape.aws.impl.AwsRegion;
import com.sap.sse.landscape.aws.orchestration.CreateDynamicLoadBalancerMapping;
import com.sap.sse.landscape.aws.orchestration.StartMongoDBServer;
import com.sap.sse.landscape.mongodb.MongoEndpoint;
import com.sap.sse.landscape.mongodb.MongoProcess;
import com.sap.sse.landscape.mongodb.MongoReplicaSet;
import com.sap.sse.landscape.ssh.SSHKeyPair;
import com.sap.sse.landscape.ssh.SshCommandChannel;
import software.amazon.awssdk.regions.Region;
@@ -74,8 +79,15 @@ public class TestProcedures {
private String securityServiceReplicationBearerToken;
private String mailSmtpPassword;
/**
* Used for the symmetric encryption / decryption of private SSH keys. See also
* {@link #getDecryptedPrivateKey(SSHKeyPair, byte[])}.
*/
private byte[] privateKeyEncryptionPassphrase;
@Before
public void setUp() {
privateKeyEncryptionPassphrase = ("awptyf87l"+"097384sf;,57").getBytes();
landscape = AwsLandscape.obtain();
region = new AwsRegion(Region.EU_WEST_2);
securityServiceReplicationBearerToken = System.getProperty(SECURITY_SERVICE_REPLICATION_BEARER_TOKEN);
@@ -83,43 +95,82 @@ public class TestProcedures {
}
@Test
public
void testStartupEmptyMultiServerAndDeployAnotherProcess() throws Exception {
public void testGetImageTypes() {
final Iterable<String> imageTypes = landscape.getMachineImageTypes(region);
assertTrue(Util.contains(imageTypes, "sailing-analytics-server"));
assertTrue(Util.contains(imageTypes, "mongodb-server"));
}
@Test
public void testGetMongoEndpoints() {
final Iterable<MongoEndpoint> mongoEndpoints = landscape.getMongoEndpoints(new AwsRegion(Region.EU_WEST_1));
assertTrue(!Util.isEmpty(Util.filter(mongoEndpoints, mongoEndpoint->
(mongoEndpoint instanceof MongoReplicaSet &&
((MongoReplicaSet) mongoEndpoint).getName().equals("live") &&
Util.size(((MongoReplicaSet) mongoEndpoint).getInstances()) == 3))));
assertTrue(!Util.isEmpty(Util.filter(mongoEndpoints, mongoEndpoint->
(mongoEndpoint instanceof MongoReplicaSet &&
((MongoReplicaSet) mongoEndpoint).getName().equals("archive") &&
Util.size(((MongoReplicaSet) mongoEndpoint).getInstances()) == 1)))); // unless archive restart is ongoing...
assertTrue(!Util.isEmpty(Util.filter(mongoEndpoints, mongoEndpoint->
(mongoEndpoint instanceof MongoProcess &&
((MongoProcess) mongoEndpoint).getPort() == 10202))));
}
@Test
public void testStartupEmptyMultiServerAndDeployAnotherProcess() throws Exception {
final String keyName = "MyKey-"+UUID.randomUUID();
landscape.createKeyPair(region, keyName);
landscape.createKeyPair(region, keyName, privateKeyEncryptionPassphrase);
final StartMultiServer.Builder<?, String> builder = StartMultiServer.builder();
final String sailingAnalyticsServerTag = "sailing-analytics-server";
final StartMultiServer<String> startEmptyMultiServer = builder
.setLandscape(landscape)
.setKeyName(keyName)
.setPrivateKeyEncryptionPassphrase(privateKeyEncryptionPassphrase)
.setTags(Tags.with(sailingAnalyticsServerTag, ""))
.setOptionalTimeout(optionalTimeout)
.build();
try {
// this is expected to have connected to the default "live" replica set.
startEmptyMultiServer.run();
final ApplicationProcessHost<String, SailingAnalyticsMetrics, SailingAnalyticsProcess<String>> host = startEmptyMultiServer.getHost();
final SshCommandChannel sshChannel = host.createRootSshChannel(optionalTimeout);
final SshCommandChannel sshChannel = host.createRootSshChannel(optionalTimeout, privateKeyEncryptionPassphrase);
final String result = sshChannel.runCommandAndReturnStdoutAndLogStderr("ls "+ApplicationProcessHost.DEFAULT_SERVERS_PATH, /* stderr prefix */ null, /* stderr log level */ null);
assertTrue(result.isEmpty());
final HttpURLConnection connection = (HttpURLConnection) new URL("http", host.getPublicAddress().getCanonicalHostName(), 80, "").openConnection();
assertTrue(connection.getHeaderField("Server").startsWith("Apache"));
connection.disconnect();
SailingAnalyticsProcess<String> processA = launchMasterOnMultiServer(host, "a");
SailingAnalyticsProcess<String> processB = launchMasterOnMultiServer(host, "b");
final String aServerName = "a";
SailingAnalyticsProcess<String> processA = launchMasterOnMultiServer(host, aServerName);
final String bServerName = "b";
SailingAnalyticsProcess<String> processB = launchMasterOnMultiServer(host, bServerName);
assertTrue(processA.waitUntilReady(optionalTimeout));
assertTrue(processB.waitUntilReady(optionalTimeout));
assertEquals(new HashSet<>(Arrays.asList(SailingAnalyticsApplicationConfiguration.Builder.DEFAULT_PORT, SailingAnalyticsApplicationConfiguration.Builder.DEFAULT_PORT+1)),
new HashSet<>(Arrays.asList(processA.getPort(), processB.getPort())));
assertEquals(new HashSet<>(Arrays.asList(SailingAnalyticsApplicationConfiguration.Builder.DEFAULT_TELNET_PORT, SailingAnalyticsApplicationConfiguration.Builder.DEFAULT_TELNET_PORT+1)),
new HashSet<>(Arrays.asList(processA.getTelnetPortToOSGiConsole(optionalTimeout), processB.getTelnetPortToOSGiConsole(optionalTimeout))));
new HashSet<>(Arrays.asList(processA.getTelnetPortToOSGiConsole(optionalTimeout, privateKeyEncryptionPassphrase), processB.getTelnetPortToOSGiConsole(optionalTimeout, privateKeyEncryptionPassphrase))));
assertEquals(new HashSet<>(Arrays.asList(SailingAnalyticsApplicationConfiguration.Builder.DEFAULT_EXPEDITION_PORT, SailingAnalyticsApplicationConfiguration.Builder.DEFAULT_EXPEDITION_PORT+1)),
new HashSet<>(Arrays.asList(processA.getExpeditionUdpPort(optionalTimeout), processB.getExpeditionUdpPort(optionalTimeout))));
final SshCommandChannel curlChannel = host.createRootSshChannel(optionalTimeout);
new HashSet<>(Arrays.asList(processA.getExpeditionUdpPort(optionalTimeout, privateKeyEncryptionPassphrase), processB.getExpeditionUdpPort(optionalTimeout, privateKeyEncryptionPassphrase))));
final SshCommandChannel curlChannel = host.createRootSshChannel(optionalTimeout, privateKeyEncryptionPassphrase);
final ByteArrayOutputStream stderr = new ByteArrayOutputStream();
curlChannel.sendCommandLineSynchronously(
"curl -k -i -H \"Host: b.sapsailing.com\" \"https://127.0.0.1\"", stderr);
final String curlOutput = curlChannel.getStreamContentsAsString();
assertTrue(curlOutput.matches("(?ms).* 302 Found$.*"));
assertTrue(curlOutput.replaceAll("\r", "").matches("(?ms).*^Location: https://b.sapsailing.com/gwt/Home.html$.*"));
// Now check if the landscape can find this "sailing-analytics-server" in the region and determine which applications it has running:
final Iterable<ApplicationReplicaSet<String, SailingAnalyticsMetrics, SailingAnalyticsProcess<String>>> replicaSets =
landscape.getApplicationReplicaSetsByTag(region, sailingAnalyticsServerTag, (theHost, dir)->{
try {
return new SailingAnalyticsProcessImpl<String>(theHost, dir, optionalTimeout, privateKeyEncryptionPassphrase);
} catch (Exception e) {
throw new RuntimeException(e);
}
}, optionalTimeout, privateKeyEncryptionPassphrase);
// expecting to find at least "a" and "b"
assertTrue(Util.containsAll(Util.map(replicaSets, ApplicationReplicaSet::getName), Arrays.asList(aServerName, bServerName)));
Util.filter(replicaSets, rs->rs.getName().equals(aServerName) || rs.getName().equals(bServerName)).forEach(rs->assertTrue(Util.isEmpty(rs.getReplicas()) && rs.getMaster() != null));
} catch (Exception e) {
logger.log(Level.SEVERE, "Exception while trying to create a MongoDB replica", e);
throw e;
@@ -145,6 +196,7 @@ public class TestProcedures {
SailingAnalyticsApplicationConfiguration<String>, AppConfigBuilderT> builder(multiServerAppConfigBuilder);
multiServerAppDeployerBuilder
.setHostToDeployTo(host)
.setPrivateKeyEncryptionPassphrase(privateKeyEncryptionPassphrase)
.setOptionalTimeout(optionalTimeout);
multiServerAppConfigBuilder
.setServerName(serverName)
@@ -158,11 +210,12 @@ public class TestProcedures {
@Test
public void testAddMongoReplica() throws Exception {
final String keyName = "MyKey-"+UUID.randomUUID();
landscape.createKeyPair(region, keyName);
landscape.createKeyPair(region, keyName, privateKeyEncryptionPassphrase);
final StartMongoDBServer.Builder<?, String, SailingAnalyticsMetrics, SailingAnalyticsProcess<String>> builder = StartMongoDBServer.builder();
final StartMongoDBServer<String, SailingAnalyticsMetrics, SailingAnalyticsProcess<String>> startMongoDBServerProcedure = builder
.setLandscape(landscape)
.setKeyName(keyName)
.setPrivateKeyEncryptionPassphrase(privateKeyEncryptionPassphrase)
.setOptionalTimeout(optionalTimeout)
.build();
try {
@@ -186,7 +239,7 @@ public class TestProcedures {
boolean fine = true;
do {
try {
final SshCommandChannel sshChannel = mongoProcess.getHost().createSshChannel("ec2-user", optionalTimeout);
final SshCommandChannel sshChannel = mongoProcess.getHost().createSshChannel("ec2-user", optionalTimeout, privateKeyEncryptionPassphrase);
final String stdout = sshChannel.runCommandAndReturnStdoutAndLogStderr(
"i=0; while [ $i -lt $(echo \"rs.status().members.length\" | mongo 2>/dev/null | tail -n +5 | head -n +1) ]; do echo \"rs.status().members[$i].stateStr\" | mongo 2>/dev/null | tail -n +5 | head -n +1; i=$((i+1)); done",
"stderr while trying to fetch replica set members", Level.WARNING);
@@ -202,14 +255,15 @@ public class TestProcedures {
public void testImageUpgrade() throws Exception {
final String keyName = "MyKey-"+UUID.randomUUID();
// Comment the following line to get default eu-west-2 test environment; uncomment to upgrade current production images in eu-west-1
final AwsRegion region = new AwsRegion(Region.EU_WEST_1);
landscape.createKeyPair(region, keyName);
// final AwsRegion region = new AwsRegion(Region.EU_WEST_1);
landscape.createKeyPair(region, keyName, privateKeyEncryptionPassphrase);
final com.sap.sailing.landscape.procedures.UpgradeAmi.Builder<?, String, SailingAnalyticsProcess<String>> imageUpgradeProcedureBuilder = UpgradeAmi.builder();
final UpgradeAmi<String> imageUpgradeProcedure =
imageUpgradeProcedureBuilder
.setLandscape(landscape)
.setRegion(region)
.setRegion(region) // only required in case a non-default region is used; see Landscape.getDefaultRegion()
.setKeyName(keyName)
.setPrivateKeyEncryptionPassphrase(privateKeyEncryptionPassphrase)
.setOptionalTimeout(optionalTimeout)
.build();
try {
@@ -234,7 +288,7 @@ public class TestProcedures {
void testConnectivity() throws Exception {
final String serverName = "test"+new Random().nextInt();
final String keyName = "MyKey-"+UUID.randomUUID();
landscape.createKeyPair(region, keyName);
landscape.createKeyPair(region, keyName, privateKeyEncryptionPassphrase);
SailingAnalyticsMasterConfiguration.Builder<AppConfigBuilderT, String> applicationConfigurationBuilder = SailingAnalyticsMasterConfiguration.masterBuilder();
applicationConfigurationBuilder
.setServerName(serverName)
@@ -250,7 +304,8 @@ public class TestProcedures {
.setRegion(region)
.setInstanceType(InstanceType.T3_LARGE)
.setKeyName(keyName)
.setTags(Optional.of(Tags.with("Hello", "World")))
.setPrivateKeyEncryptionPassphrase(privateKeyEncryptionPassphrase)
.setTags(Tags.with("Hello", "World"))
.setOptionalTimeout(optionalTimeout)
.build();
startSailingAnalyticsMaster.run();
@@ -273,10 +328,10 @@ public class TestProcedures {
// check env.sh access
final SailingAnalyticsProcess<String> process = startSailingAnalyticsMaster.getSailingAnalyticsProcess();
assertTrue(process.waitUntilReady(optionalTimeout));
final String envSh = process.getEnvSh(optionalTimeout);
final String envSh = process.getEnvSh(optionalTimeout, privateKeyEncryptionPassphrase);
assertFalse(envSh.isEmpty());
assertTrue("Couldn't find SERVER_NAME=\""+serverName+"\" in env.sh:\n"+envSh, envSh.contains("SERVER_NAME=\""+serverName+"\""));
assertEquals(14888, process.getTelnetPortToOSGiConsole(optionalTimeout));
assertEquals(14888, process.getTelnetPortToOSGiConsole(optionalTimeout, privateKeyEncryptionPassphrase));
// Now create an ALB mapping, assuming to create the dynamic ALB:
final String domain = "wiesen-weg.de";
final String hostname = serverName+"."+domain;

Some files were not shown because too many files have changed in this diff Show More