Merge remote-tracking branch 'origin/master' into bug3590

This commit is contained in:
fmittag
2016-04-25 12:07:22 +02:00
235 changed files with 23916 additions and 5590 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,140 +1,140 @@
package com.sap.sailing.datamining;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.osgi.framework.BundleContext;
import com.sap.sailing.datamining.data.HasGPSFixContext;
import com.sap.sailing.datamining.data.HasLeaderboardContext;
import com.sap.sailing.datamining.data.HasLeaderboardGroupContext;
import com.sap.sailing.datamining.data.HasMarkPassingContext;
import com.sap.sailing.datamining.data.HasRaceOfCompetitorContext;
import com.sap.sailing.datamining.data.HasRaceResultOfCompetitorContext;
import com.sap.sailing.datamining.data.HasTrackedLegContext;
import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelBoolSumAggregationProcessor;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceAverageAggregationProcessor;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceMaxAggregationProcessor;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceMedianAggregationProcessor;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceMinAggregationProcessor;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceSumAggregationProcessor;
import com.sap.sailing.domain.common.Speed;
import com.sap.sse.datamining.DataSourceProvider;
import com.sap.sse.datamining.components.AggregationProcessorDefinition;
import com.sap.sse.datamining.components.DataRetrieverChainDefinition;
import com.sap.sse.datamining.data.ClusterGroup;
import com.sap.sse.datamining.impl.AbstractDataMiningActivatorWithPredefinedQueries;
import com.sap.sse.datamining.shared.dto.StatisticQueryDefinitionDTO;
import com.sap.sse.datamining.shared.impl.PredefinedQueryIdentifier;
import com.sap.sse.i18n.ResourceBundleStringMessages;
import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl;
public class Activator extends AbstractDataMiningActivatorWithPredefinedQueries {
private static final String STRING_MESSAGES_BASE_NAME = "stringmessages/Sailing_StringMessages";
private static final SailingClusterGroups clusterGroups = new SailingClusterGroups();
private static Activator INSTANCE;
private BundleContext context = null;
private final ResourceBundleStringMessages sailingServerStringMessages;
private final SailingDataRetrievalChainDefinitions dataRetrieverChainDefinitions;
private final SailingPredefinedQueries predefinedQueries;
private Collection<DataSourceProvider<?>> dataSourceProviders;
private boolean dataSourceProvidersHaveBeenInitialized;
public Activator() {
sailingServerStringMessages = new ResourceBundleStringMessagesImpl(STRING_MESSAGES_BASE_NAME, getClassLoader());
dataRetrieverChainDefinitions = new SailingDataRetrievalChainDefinitions();
predefinedQueries = new SailingPredefinedQueries();
}
@Override
public void start(BundleContext context) throws Exception {
INSTANCE = this;
this.context = context;
dataSourceProvidersHaveBeenInitialized = false;
super.start(context);
}
@Override
public void stop(BundleContext context) throws Exception {
this.context = null;
INSTANCE = null;
super.stop(context);
}
@Override
public ResourceBundleStringMessages getStringMessages() {
return sailingServerStringMessages;
}
@Override
public Iterable<Class<?>> getClassesWithMarkedMethods() {
Set<Class<?>> internalClasses = new HashSet<>();
internalClasses.add(HasTrackedRaceContext.class);
internalClasses.add(HasRaceResultOfCompetitorContext.class);
internalClasses.add(HasTrackedLegContext.class);
internalClasses.add(HasTrackedLegOfCompetitorContext.class);
internalClasses.add(HasGPSFixContext.class);
internalClasses.add(HasMarkPassingContext.class);
internalClasses.add(HasRaceOfCompetitorContext.class);
internalClasses.add(HasLeaderboardGroupContext.class);
internalClasses.add(HasLeaderboardContext.class);
return internalClasses;
}
@Override
public Iterable<DataRetrieverChainDefinition<?, ?>> getDataRetrieverChainDefinitions() {
return dataRetrieverChainDefinitions.get();
}
@Override
public Iterable<DataSourceProvider<?>> getDataSourceProviders() {
if (!dataSourceProvidersHaveBeenInitialized) {
initializeDataSourceProviders();
dataSourceProvidersHaveBeenInitialized = true;
}
return dataSourceProviders;
}
@Override
public Iterable<AggregationProcessorDefinition<?, ?>> getAggregationProcessorDefinitions() {
HashSet<AggregationProcessorDefinition<?, ?>> aggregators = new HashSet<>();
aggregators.add(ParallelBoolSumAggregationProcessor.getDefinition());
aggregators.add(ParallelDistanceSumAggregationProcessor.getDefinition());
aggregators.add(ParallelDistanceAverageAggregationProcessor.getDefinition());
aggregators.add(ParallelDistanceMaxAggregationProcessor.getDefinition());
aggregators.add(ParallelDistanceMinAggregationProcessor.getDefinition());
aggregators.add(ParallelDistanceMedianAggregationProcessor.getDefinition());
return aggregators;
}
@Override
public Map<PredefinedQueryIdentifier, StatisticQueryDefinitionDTO> getPredefinedQueries() {
return predefinedQueries.get();
}
private void initializeDataSourceProviders() {
dataSourceProviders = new HashSet<>();
dataSourceProviders.add(new RacingEventServiceProvider(context));
}
public static ClusterGroup<Speed> getWindStrengthInBeaufortClusterGroup() {
return clusterGroups.getWindStrengthInBeaufortCluster();
}
public static Activator getDefault() {
if (INSTANCE == null) {
INSTANCE = new Activator(); // probably non-OSGi case, as in test execution
}
return INSTANCE;
}
}
package com.sap.sailing.datamining;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.osgi.framework.BundleContext;
import com.sap.sailing.datamining.data.HasGPSFixContext;
import com.sap.sailing.datamining.data.HasLeaderboardContext;
import com.sap.sailing.datamining.data.HasLeaderboardGroupContext;
import com.sap.sailing.datamining.data.HasMarkPassingContext;
import com.sap.sailing.datamining.data.HasRaceOfCompetitorContext;
import com.sap.sailing.datamining.data.HasRaceResultOfCompetitorContext;
import com.sap.sailing.datamining.data.HasTrackedLegContext;
import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelBoolSumAggregationProcessor;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceAverageAggregationProcessor;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceMaxAggregationProcessor;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceMedianAggregationProcessor;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceMinAggregationProcessor;
import com.sap.sailing.datamining.impl.components.aggregators.ParallelDistanceSumAggregationProcessor;
import com.sap.sailing.domain.common.Speed;
import com.sap.sse.datamining.DataSourceProvider;
import com.sap.sse.datamining.components.AggregationProcessorDefinition;
import com.sap.sse.datamining.components.DataRetrieverChainDefinition;
import com.sap.sse.datamining.data.ClusterGroup;
import com.sap.sse.datamining.impl.AbstractDataMiningActivatorWithPredefinedQueries;
import com.sap.sse.datamining.shared.dto.StatisticQueryDefinitionDTO;
import com.sap.sse.datamining.shared.impl.PredefinedQueryIdentifier;
import com.sap.sse.i18n.ResourceBundleStringMessages;
import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl;
public class Activator extends AbstractDataMiningActivatorWithPredefinedQueries {
private static final String STRING_MESSAGES_BASE_NAME = "stringmessages/Sailing_StringMessages";
private static final SailingClusterGroups clusterGroups = new SailingClusterGroups();
private static Activator INSTANCE;
private BundleContext context = null;
private final ResourceBundleStringMessages sailingServerStringMessages;
private final SailingDataRetrievalChainDefinitions dataRetrieverChainDefinitions;
private final SailingPredefinedQueries predefinedQueries;
private Collection<DataSourceProvider<?>> dataSourceProviders;
private boolean dataSourceProvidersHaveBeenInitialized;
public Activator() {
sailingServerStringMessages = new ResourceBundleStringMessagesImpl(STRING_MESSAGES_BASE_NAME, getClassLoader());
dataRetrieverChainDefinitions = new SailingDataRetrievalChainDefinitions();
predefinedQueries = new SailingPredefinedQueries();
}
@Override
public void start(BundleContext context) throws Exception {
INSTANCE = this;
this.context = context;
dataSourceProvidersHaveBeenInitialized = false;
super.start(context);
}
@Override
public void stop(BundleContext context) throws Exception {
this.context = null;
INSTANCE = null;
super.stop(context);
}
@Override
public ResourceBundleStringMessages getStringMessages() {
return sailingServerStringMessages;
}
@Override
public Iterable<Class<?>> getClassesWithMarkedMethods() {
Set<Class<?>> internalClasses = new HashSet<>();
internalClasses.add(HasTrackedRaceContext.class);
internalClasses.add(HasRaceResultOfCompetitorContext.class);
internalClasses.add(HasTrackedLegContext.class);
internalClasses.add(HasTrackedLegOfCompetitorContext.class);
internalClasses.add(HasGPSFixContext.class);
internalClasses.add(HasMarkPassingContext.class);
internalClasses.add(HasRaceOfCompetitorContext.class);
internalClasses.add(HasLeaderboardGroupContext.class);
internalClasses.add(HasLeaderboardContext.class);
return internalClasses;
}
@Override
public Iterable<DataRetrieverChainDefinition<?, ?>> getDataRetrieverChainDefinitions() {
return dataRetrieverChainDefinitions.get();
}
@Override
public Iterable<DataSourceProvider<?>> getDataSourceProviders() {
if (!dataSourceProvidersHaveBeenInitialized) {
initializeDataSourceProviders();
dataSourceProvidersHaveBeenInitialized = true;
}
return dataSourceProviders;
}
@Override
public Iterable<AggregationProcessorDefinition<?, ?>> getAggregationProcessorDefinitions() {
HashSet<AggregationProcessorDefinition<?, ?>> aggregators = new HashSet<>();
aggregators.add(ParallelBoolSumAggregationProcessor.getDefinition());
aggregators.add(ParallelDistanceSumAggregationProcessor.getDefinition());
aggregators.add(ParallelDistanceAverageAggregationProcessor.getDefinition());
aggregators.add(ParallelDistanceMaxAggregationProcessor.getDefinition());
aggregators.add(ParallelDistanceMinAggregationProcessor.getDefinition());
aggregators.add(ParallelDistanceMedianAggregationProcessor.getDefinition());
return aggregators;
}
@Override
public Map<PredefinedQueryIdentifier, StatisticQueryDefinitionDTO> getPredefinedQueries() {
return predefinedQueries.getQueries();
}
private void initializeDataSourceProviders() {
dataSourceProviders = new HashSet<>();
dataSourceProviders.add(new RacingEventServiceProvider(context));
}
public static ClusterGroup<Speed> getWindStrengthInBeaufortClusterGroup() {
return clusterGroups.getWindStrengthInBeaufortCluster();
}
public static Activator getDefault() {
if (INSTANCE == null) {
INSTANCE = new Activator(); // probably non-OSGi case, as in test execution
}
return INSTANCE;
}
}
@@ -1,143 +1,194 @@
package com.sap.sailing.datamining;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.sap.sailing.datamining.data.HasGPSFixContext;
import com.sap.sailing.datamining.data.HasLeaderboardContext;
import com.sap.sailing.datamining.data.HasRaceOfCompetitorContext;
import com.sap.sailing.datamining.data.HasTrackedLegContext;
import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.datamining.impl.components.GPSFixRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.LeaderboardGroupRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.LeaderboardRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.RaceOfCompetitorRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.TrackedLegOfCompetitorRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.TrackedLegRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.TrackedRaceRetrievalProcessor;
import com.sap.sailing.datamining.impl.data.LeaderboardGroupWithContext;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.LegType;
import com.sap.sailing.server.RacingEventService;
import com.sap.sse.datamining.shared.dto.StatisticQueryDefinitionDTO;
import com.sap.sse.datamining.shared.impl.PredefinedQueryIdentifier;
import com.sap.sse.datamining.shared.impl.dto.AggregationProcessorDefinitionDTO;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverChainDefinitionDTO;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
import com.sap.sse.datamining.shared.impl.dto.LocalizedTypeDTO;
import com.sap.sse.datamining.shared.impl.dto.ModifiableStatisticQueryDefinitionDTO;
public class SailingPredefinedQueries {
private final Map<PredefinedQueryIdentifier, StatisticQueryDefinitionDTO> predefinedQueries;
public SailingPredefinedQueries() {
predefinedQueries = new HashMap<>();
predefinedQueries.put(new PredefinedQueryIdentifier("AvgSpeed_Per_Regatta-Race", "Average Speed grouped by Regatta Name and Race Name"),
create_AvgSpeed_Per_Regatta_Race());
predefinedQueries.put(new PredefinedQueryIdentifier("AvgSpeed_Per_Competitor-LegType", "Average Speed grouped by Competitor Team Name and Leg Type"),
create_AvgSpeed_Per_Competitor_LegType());
predefinedQueries.put(new PredefinedQueryIdentifier("SumDistance_Per_Competitor-LegType", "Sum of the traveled Distance grouped by Competitor Team Name and Leg Type"),
create_SumDistance_Per_Competitor_LegType());
predefinedQueries.put(new PredefinedQueryIdentifier("SumManeuvers_Per_Competitor", "Sum of the performed Maneuvers grouped by Competitor Team Name"),
create_SumManeuvers_Per_Competitor());
}
private StatisticQueryDefinitionDTO create_AvgSpeed_Per_Regatta_Race() {
FunctionDTO statistic = new FunctionDTO(false, "getGPSFix().getSpeed().getKnots()", HasGPSFixContext.class.getName(), double.class.getName(), new ArrayList<String>(), "", 0);
AggregationProcessorDefinitionDTO aggregator = new AggregationProcessorDefinitionDTO("Average", Number.class.getName(), Number.class.getName(), "");
ArrayList<DataRetrieverLevelDTO> retrieverLevels = new ArrayList<>();
retrieverLevels.add(new DataRetrieverLevelDTO(0, LeaderboardGroupRetrievalProcessor.class.getName(), new LocalizedTypeDTO(LeaderboardGroupWithContext.class.getName(), "Leaderboard Group"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(1, LeaderboardRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasLeaderboardContext.class.getName(), "Leaderboard"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(2, TrackedRaceRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedRaceContext.class.getName(), "Race"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(3, TrackedLegRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegContext.class.getName(), "Leg"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(4, TrackedLegOfCompetitorRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegOfCompetitorContext.class.getName(), "Leg of competitor"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(5, GPSFixRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasGPSFixContext.class.getName(), "GPS-Fix"), null));
DataRetrieverChainDefinitionDTO retrieverChain = new DataRetrieverChainDefinitionDTO("", RacingEventService.class.getName(), retrieverLevels);
ModifiableStatisticQueryDefinitionDTO queryDefinition = new ModifiableStatisticQueryDefinitionDTO("default", statistic, aggregator, retrieverChain);
FunctionDTO dimensionToGroupBy0 = new FunctionDTO(true, "getTrackedLegOfCompetitorContext().getTrackedLegContext().getTrackedRaceContext().getRegatta().getName()", HasGPSFixContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy0);
FunctionDTO dimensionToGroupBy1 = new FunctionDTO(true, "getTrackedLegOfCompetitorContext().getTrackedLegContext().getTrackedRaceContext().getRace().getName()", HasGPSFixContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy1);
return queryDefinition;
}
private StatisticQueryDefinitionDTO create_AvgSpeed_Per_Competitor_LegType() {
FunctionDTO statistic = new FunctionDTO(false, "getGPSFix().getSpeed().getKnots()", HasGPSFixContext.class.getName(), double.class.getName(), new ArrayList<String>(), "", 0);
AggregationProcessorDefinitionDTO aggregator = new AggregationProcessorDefinitionDTO("Average", Number.class.getName(), Number.class.getName(), "");
ArrayList<DataRetrieverLevelDTO> retrieverLevels = new ArrayList<>();
retrieverLevels.add(new DataRetrieverLevelDTO(0, LeaderboardGroupRetrievalProcessor.class.getName(), new LocalizedTypeDTO(LeaderboardGroupWithContext.class.getName(), "Leaderboard Group"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(1, LeaderboardRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasLeaderboardContext.class.getName(), "Leaderboard"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(2, TrackedRaceRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedRaceContext.class.getName(), "Race"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(3, TrackedLegRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegContext.class.getName(), "Leg"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(4, TrackedLegOfCompetitorRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegOfCompetitorContext.class.getName(), "Leg of competitor"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(5, GPSFixRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasGPSFixContext.class.getName(), "GPS-Fix"), null));
DataRetrieverChainDefinitionDTO retrieverChain = new DataRetrieverChainDefinitionDTO("", RacingEventService.class.getName(), retrieverLevels);
ModifiableStatisticQueryDefinitionDTO queryDefinition = new ModifiableStatisticQueryDefinitionDTO("default", statistic, aggregator, retrieverChain);
FunctionDTO dimensionToGroupBy0 = new FunctionDTO(true, "getTrackedLegOfCompetitorContext().getCompetitor().getTeam().getName()", HasGPSFixContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy0);
FunctionDTO dimensionToGroupBy1 = new FunctionDTO(true, "getTrackedLegOfCompetitorContext().getTrackedLegContext().getLegType()", HasGPSFixContext.class.getName(), LegType.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy1);
return queryDefinition;
}
private StatisticQueryDefinitionDTO create_SumDistance_Per_Competitor_LegType() {
FunctionDTO statistic = new FunctionDTO(false, "getDistanceTraveled()", HasTrackedLegOfCompetitorContext.class.getName(), Distance.class.getName(), new ArrayList<String>(), "", 0);
AggregationProcessorDefinitionDTO aggregator = new AggregationProcessorDefinitionDTO("Sum", Distance.class.getName(), Distance.class.getName(), "");
ArrayList<DataRetrieverLevelDTO> retrieverLevels = new ArrayList<>();
retrieverLevels.add(new DataRetrieverLevelDTO(0, LeaderboardGroupRetrievalProcessor.class.getName(), new LocalizedTypeDTO(LeaderboardGroupWithContext.class.getName(), "Leaderboard Group"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(1, LeaderboardRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasLeaderboardContext.class.getName(), "Leaderboard"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(2, TrackedRaceRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedRaceContext.class.getName(), "Race"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(3, TrackedLegRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegContext.class.getName(), "Leg"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(4, TrackedLegOfCompetitorRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegOfCompetitorContext.class.getName(), "Leg of competitor"), null));
DataRetrieverChainDefinitionDTO retrieverChain = new DataRetrieverChainDefinitionDTO("", RacingEventService.class.getName(), retrieverLevels);
ModifiableStatisticQueryDefinitionDTO queryDefinition = new ModifiableStatisticQueryDefinitionDTO("default", statistic, aggregator, retrieverChain);
FunctionDTO dimensionToGroupBy0 = new FunctionDTO(true, "getCompetitor().getTeam().getName()", HasTrackedLegOfCompetitorContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy0);
FunctionDTO dimensionToGroupBy1 = new FunctionDTO(true, "getTrackedLegContext().getLegType()", HasTrackedLegOfCompetitorContext.class.getName(), LegType.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy1);
return queryDefinition;
}
private StatisticQueryDefinitionDTO create_SumManeuvers_Per_Competitor() {
FunctionDTO statistic = new FunctionDTO(false, "getNumberOfManeuvers()", HasRaceOfCompetitorContext.class.getName(), int.class.getName(), new ArrayList<String>(), "", 0);
AggregationProcessorDefinitionDTO aggregator = new AggregationProcessorDefinitionDTO("Sum", Number.class.getName(), Number.class.getName(), "");
ArrayList<DataRetrieverLevelDTO> retrieverLevels = new ArrayList<>();
retrieverLevels.add(new DataRetrieverLevelDTO(0, LeaderboardGroupRetrievalProcessor.class.getName(), new LocalizedTypeDTO(LeaderboardGroupWithContext.class.getName(), "Leaderboard Group"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(1, LeaderboardRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasLeaderboardContext.class.getName(), "Leaderboard"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(2, TrackedRaceRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedRaceContext.class.getName(), "Race"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(3, RaceOfCompetitorRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasRaceOfCompetitorContext.class.getName(), "Competitor"), null));
DataRetrieverChainDefinitionDTO retrieverChain = new DataRetrieverChainDefinitionDTO("", RacingEventService.class.getName(), retrieverLevels);
ModifiableStatisticQueryDefinitionDTO queryDefinition = new ModifiableStatisticQueryDefinitionDTO("default", statistic, aggregator, retrieverChain);
FunctionDTO dimensionToGroupBy0 = new FunctionDTO(true, "getCompetitor().getTeam().getName()", HasRaceOfCompetitorContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy0);
return queryDefinition;
}
public Map<PredefinedQueryIdentifier, StatisticQueryDefinitionDTO> get() {
return predefinedQueries;
}
}
package com.sap.sailing.datamining;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.sap.sailing.datamining.data.HasGPSFixContext;
import com.sap.sailing.datamining.data.HasLeaderboardContext;
import com.sap.sailing.datamining.data.HasRaceOfCompetitorContext;
import com.sap.sailing.datamining.data.HasTrackedLegContext;
import com.sap.sailing.datamining.data.HasTrackedLegOfCompetitorContext;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.datamining.impl.components.GPSFixRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.LeaderboardGroupRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.LeaderboardRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.RaceOfCompetitorRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.TrackedLegOfCompetitorRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.TrackedLegRetrievalProcessor;
import com.sap.sailing.datamining.impl.components.TrackedRaceRetrievalProcessor;
import com.sap.sailing.datamining.impl.data.LeaderboardGroupWithContext;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.LegType;
import com.sap.sailing.server.RacingEventService;
import com.sap.sse.datamining.shared.dto.StatisticQueryDefinitionDTO;
import com.sap.sse.datamining.shared.impl.PredefinedQueryIdentifier;
import com.sap.sse.datamining.shared.impl.dto.AggregationProcessorDefinitionDTO;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverChainDefinitionDTO;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
import com.sap.sse.datamining.shared.impl.dto.LocalizedTypeDTO;
import com.sap.sse.datamining.shared.impl.dto.ModifiableStatisticQueryDefinitionDTO;
public class SailingPredefinedQueries {
private final Map<PredefinedQueryIdentifier, StatisticQueryDefinitionDTO> predefinedQueries;
public final static String QUERY_AVERAGE_SPEED_PER_REGATTA_RACE = "AvgSpeed_Per_Regatta-Race";
public final static String QUERY_AVERAGE_SPEED_PER_COMPETITOR_LEGTYPE = "AvgSpeed_Per_Competitor-LegType";
public final static String QUERY_AVERAGE_SPEED_PER_COMPETITOR = "AvgSpeed_Per_Competitor";
public final static String QUERY_DISTANCE_TRAVELED_PER_COMPETITOR_LEGTYPE = "DistanceTraveled_Per_Competitor-LegType";
public final static String QUERY_DISTANCE_TRAVELED_PER_COMPETITOR = "DistanceTraveled_Per_Competitor";
public final static String QUERY_MANEUVERS_PER_COMPETITOR = "Maneuvers_Per_Competitor";
public SailingPredefinedQueries() {
predefinedQueries = new HashMap<>();
predefinedQueries.put(new PredefinedQueryIdentifier(QUERY_AVERAGE_SPEED_PER_REGATTA_RACE, "Average Speed grouped by regatta name and race name"),
create_AvgSpeed_Per_Regatta_Race());
predefinedQueries.put(new PredefinedQueryIdentifier(QUERY_AVERAGE_SPEED_PER_COMPETITOR_LEGTYPE, "Average speed grouped by competitor/team name and leg type"),
create_AvgSpeed_Per_Competitor_LegType());
predefinedQueries.put(new PredefinedQueryIdentifier(QUERY_AVERAGE_SPEED_PER_COMPETITOR, "Average speed grouped by competitor/team name"),
create_AvgSpeed_Per_Competitor());
predefinedQueries.put(new PredefinedQueryIdentifier(QUERY_DISTANCE_TRAVELED_PER_COMPETITOR_LEGTYPE, "Distance traveled grouped by competitor/team name and leg type"),
create_SumTraveledDistance_Per_Competitor_LegType());
predefinedQueries.put(new PredefinedQueryIdentifier(QUERY_DISTANCE_TRAVELED_PER_COMPETITOR, "Distance traveled grouped by competitor/team name and leg type"),
create_SumTraveledDistance_Per_Competitor());
predefinedQueries.put(new PredefinedQueryIdentifier(QUERY_MANEUVERS_PER_COMPETITOR, "Maneuvers grouped by competitor/team name"),
create_SumManeuvers_Per_Competitor());
}
private StatisticQueryDefinitionDTO create_AvgSpeed_Per_Regatta_Race() {
FunctionDTO statistic = new FunctionDTO(false, "getGPSFix().getSpeed().getKnots()", HasGPSFixContext.class.getName(), double.class.getName(), new ArrayList<String>(), "", 0);
AggregationProcessorDefinitionDTO aggregator = new AggregationProcessorDefinitionDTO("Average", Number.class.getName(), Number.class.getName(), "");
ArrayList<DataRetrieverLevelDTO> retrieverLevels = new ArrayList<>();
retrieverLevels.add(new DataRetrieverLevelDTO(0, LeaderboardGroupRetrievalProcessor.class.getName(), new LocalizedTypeDTO(LeaderboardGroupWithContext.class.getName(), "Leaderboard Group"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(1, LeaderboardRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasLeaderboardContext.class.getName(), "Leaderboard"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(2, TrackedRaceRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedRaceContext.class.getName(), "Race"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(3, TrackedLegRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegContext.class.getName(), "Leg"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(4, TrackedLegOfCompetitorRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegOfCompetitorContext.class.getName(), "Leg of competitor"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(5, GPSFixRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasGPSFixContext.class.getName(), "GPS-Fix"), null));
DataRetrieverChainDefinitionDTO retrieverChain = new DataRetrieverChainDefinitionDTO("", RacingEventService.class.getName(), retrieverLevels);
ModifiableStatisticQueryDefinitionDTO queryDefinition = new ModifiableStatisticQueryDefinitionDTO("default", statistic, aggregator, retrieverChain);
FunctionDTO dimensionToGroupBy0 = new FunctionDTO(true, "getTrackedLegOfCompetitorContext().getTrackedLegContext().getTrackedRaceContext().getRegatta().getName()", HasGPSFixContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy0);
FunctionDTO dimensionToGroupBy1 = new FunctionDTO(true, "getTrackedLegOfCompetitorContext().getTrackedLegContext().getTrackedRaceContext().getRace().getName()", HasGPSFixContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy1);
return queryDefinition;
}
private StatisticQueryDefinitionDTO create_AvgSpeed_Per_Competitor_LegType() {
FunctionDTO statistic = new FunctionDTO(false, "getGPSFix().getSpeed().getKnots()", HasGPSFixContext.class.getName(), double.class.getName(), new ArrayList<String>(), "", 0);
AggregationProcessorDefinitionDTO aggregator = new AggregationProcessorDefinitionDTO("Average", Number.class.getName(), Number.class.getName(), "");
ArrayList<DataRetrieverLevelDTO> retrieverLevels = new ArrayList<>();
retrieverLevels.add(new DataRetrieverLevelDTO(0, LeaderboardGroupRetrievalProcessor.class.getName(), new LocalizedTypeDTO(LeaderboardGroupWithContext.class.getName(), "Leaderboard Group"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(1, LeaderboardRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasLeaderboardContext.class.getName(), "Leaderboard"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(2, TrackedRaceRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedRaceContext.class.getName(), "Race"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(3, TrackedLegRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegContext.class.getName(), "Leg"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(4, TrackedLegOfCompetitorRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegOfCompetitorContext.class.getName(), "Leg of competitor"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(5, GPSFixRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasGPSFixContext.class.getName(), "GPS-Fix"), null));
DataRetrieverChainDefinitionDTO retrieverChain = new DataRetrieverChainDefinitionDTO("", RacingEventService.class.getName(), retrieverLevels);
ModifiableStatisticQueryDefinitionDTO queryDefinition = new ModifiableStatisticQueryDefinitionDTO("default", statistic, aggregator, retrieverChain);
FunctionDTO dimensionToGroupBy0 = new FunctionDTO(true, "getTrackedLegOfCompetitorContext().getCompetitor().getTeam().getName()", HasGPSFixContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy0);
FunctionDTO dimensionToGroupBy1 = new FunctionDTO(true, "getTrackedLegOfCompetitorContext().getTrackedLegContext().getLegType()", HasGPSFixContext.class.getName(), LegType.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy1);
return queryDefinition;
}
private StatisticQueryDefinitionDTO create_SumTraveledDistance_Per_Competitor_LegType() {
FunctionDTO statistic = new FunctionDTO(false, "getDistanceTraveled()", HasTrackedLegOfCompetitorContext.class.getName(), Distance.class.getName(), new ArrayList<String>(), "", 0);
AggregationProcessorDefinitionDTO aggregator = new AggregationProcessorDefinitionDTO("Sum", Distance.class.getName(), Distance.class.getName(), "");
ArrayList<DataRetrieverLevelDTO> retrieverLevels = new ArrayList<>();
retrieverLevels.add(new DataRetrieverLevelDTO(0, LeaderboardGroupRetrievalProcessor.class.getName(), new LocalizedTypeDTO(LeaderboardGroupWithContext.class.getName(), "Leaderboard Group"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(1, LeaderboardRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasLeaderboardContext.class.getName(), "Leaderboard"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(2, TrackedRaceRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedRaceContext.class.getName(), "Race"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(3, TrackedLegRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegContext.class.getName(), "Leg"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(4, TrackedLegOfCompetitorRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegOfCompetitorContext.class.getName(), "Leg of competitor"), null));
DataRetrieverChainDefinitionDTO retrieverChain = new DataRetrieverChainDefinitionDTO("", RacingEventService.class.getName(), retrieverLevels);
ModifiableStatisticQueryDefinitionDTO queryDefinition = new ModifiableStatisticQueryDefinitionDTO("default", statistic, aggregator, retrieverChain);
FunctionDTO dimensionToGroupBy0 = new FunctionDTO(true, "getCompetitor().getTeam().getName()", HasTrackedLegOfCompetitorContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy0);
FunctionDTO dimensionToGroupBy1 = new FunctionDTO(true, "getTrackedLegContext().getLegType()", HasTrackedLegOfCompetitorContext.class.getName(), LegType.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy1);
return queryDefinition;
}
private StatisticQueryDefinitionDTO create_AvgSpeed_Per_Competitor() {
FunctionDTO statistic = new FunctionDTO(false, "getGPSFix().getSpeed().getKnots()", HasGPSFixContext.class.getName(), double.class.getName(), new ArrayList<String>(), "", 0);
AggregationProcessorDefinitionDTO aggregator = new AggregationProcessorDefinitionDTO("Average", Number.class.getName(), Number.class.getName(), "");
ArrayList<DataRetrieverLevelDTO> retrieverLevels = new ArrayList<>();
retrieverLevels.add(new DataRetrieverLevelDTO(0, LeaderboardGroupRetrievalProcessor.class.getName(), new LocalizedTypeDTO(LeaderboardGroupWithContext.class.getName(), "Leaderboard Group"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(1, LeaderboardRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasLeaderboardContext.class.getName(), "Leaderboard"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(2, TrackedRaceRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedRaceContext.class.getName(), "Race"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(3, TrackedLegRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegContext.class.getName(), "Leg"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(4, TrackedLegOfCompetitorRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegOfCompetitorContext.class.getName(), "Leg of competitor"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(5, GPSFixRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasGPSFixContext.class.getName(), "GPS-Fix"), null));
DataRetrieverChainDefinitionDTO retrieverChain = new DataRetrieverChainDefinitionDTO("", RacingEventService.class.getName(), retrieverLevels);
ModifiableStatisticQueryDefinitionDTO queryDefinition = new ModifiableStatisticQueryDefinitionDTO("default", statistic, aggregator, retrieverChain);
FunctionDTO dimensionToGroupBy0 = new FunctionDTO(true, "getTrackedLegOfCompetitorContext().getCompetitor().getTeam().getName()", HasGPSFixContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy0);
return queryDefinition;
}
private StatisticQueryDefinitionDTO create_SumTraveledDistance_Per_Competitor() {
FunctionDTO statistic = new FunctionDTO(false, "getDistanceTraveled()", HasTrackedLegOfCompetitorContext.class.getName(), Distance.class.getName(), new ArrayList<String>(), "", 0);
AggregationProcessorDefinitionDTO aggregator = new AggregationProcessorDefinitionDTO("Sum", Distance.class.getName(), Distance.class.getName(), "");
ArrayList<DataRetrieverLevelDTO> retrieverLevels = new ArrayList<>();
retrieverLevels.add(new DataRetrieverLevelDTO(0, LeaderboardGroupRetrievalProcessor.class.getName(), new LocalizedTypeDTO(LeaderboardGroupWithContext.class.getName(), "Leaderboard Group"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(1, LeaderboardRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasLeaderboardContext.class.getName(), "Leaderboard"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(2, TrackedRaceRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedRaceContext.class.getName(), "Race"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(3, TrackedLegRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegContext.class.getName(), "Leg"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(4, TrackedLegOfCompetitorRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedLegOfCompetitorContext.class.getName(), "Leg of competitor"), null));
DataRetrieverChainDefinitionDTO retrieverChain = new DataRetrieverChainDefinitionDTO("", RacingEventService.class.getName(), retrieverLevels);
ModifiableStatisticQueryDefinitionDTO queryDefinition = new ModifiableStatisticQueryDefinitionDTO("default", statistic, aggregator, retrieverChain);
FunctionDTO dimensionToGroupBy0 = new FunctionDTO(true, "getCompetitor().getTeam().getName()", HasTrackedLegOfCompetitorContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy0);
return queryDefinition;
}
private StatisticQueryDefinitionDTO create_SumManeuvers_Per_Competitor() {
FunctionDTO statistic = new FunctionDTO(false, "getNumberOfManeuvers()", HasRaceOfCompetitorContext.class.getName(), int.class.getName(), new ArrayList<String>(), "", 0);
AggregationProcessorDefinitionDTO aggregator = new AggregationProcessorDefinitionDTO("Sum", Number.class.getName(), Number.class.getName(), "");
ArrayList<DataRetrieverLevelDTO> retrieverLevels = new ArrayList<>();
retrieverLevels.add(new DataRetrieverLevelDTO(0, LeaderboardGroupRetrievalProcessor.class.getName(), new LocalizedTypeDTO(LeaderboardGroupWithContext.class.getName(), "Leaderboard Group"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(1, LeaderboardRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasLeaderboardContext.class.getName(), "Leaderboard"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(2, TrackedRaceRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasTrackedRaceContext.class.getName(), "Race"), null));
retrieverLevels.add(new DataRetrieverLevelDTO(3, RaceOfCompetitorRetrievalProcessor.class.getName(), new LocalizedTypeDTO(HasRaceOfCompetitorContext.class.getName(), "Competitor"), null));
DataRetrieverChainDefinitionDTO retrieverChain = new DataRetrieverChainDefinitionDTO("", RacingEventService.class.getName(), retrieverLevels);
ModifiableStatisticQueryDefinitionDTO queryDefinition = new ModifiableStatisticQueryDefinitionDTO("default", statistic, aggregator, retrieverChain);
FunctionDTO dimensionToGroupBy0 = new FunctionDTO(true, "getCompetitor().getTeam().getName()", HasRaceOfCompetitorContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
queryDefinition.appendDimensionToGroupBy(dimensionToGroupBy0);
return queryDefinition;
}
public Map<PredefinedQueryIdentifier, StatisticQueryDefinitionDTO> getQueries() {
return predefinedQueries;
}
}
@@ -9,15 +9,23 @@ import java.util.List;
* When modifying these values also check res/preferences.xml of racecommittee.app!
*/
public enum CourseDesignerMode {
UNKNOWN("Unknown"),
BY_NAME("By-Name Course Designer"), // O2, O3, I2,...
BY_MAP("By-Map Course Designer"), // Map-based Course Designer
BY_MARKS("By-Marks Course Designer"); // ESS
UNKNOWN("Unknown", /* waypointSequenceValid */ false),
BY_NAME("By-Name Course Designer", /* waypointSequenceValid */ false), // O2, O3, I2,...
BY_MAP("By-Map Course Designer", /* waypointSequenceValid */ true), // Map-based Course Designer
BY_MARKS("By-Marks Course Designer", /* waypointSequenceValid */ true), // ESS
ADMIN_CONSOLE("Administration Console", /* waypointSequenceValid */ true);
private String displayName;
private final String displayName;
/**
* Some course designers may only be able to tell, say, a name for the new course but not
* necessarily a valid waypoint sequence. This flag tells.
*/
private final boolean waypointSequenceValid;
private CourseDesignerMode(String displayName) {
private CourseDesignerMode(String displayName, boolean waypointSequenceValid) {
this.displayName = displayName;
this.waypointSequenceValid = waypointSequenceValid;
}
@Override
@@ -25,6 +33,10 @@ public enum CourseDesignerMode {
return displayName;
}
public boolean isWaypointSequenceValid() {
return waypointSequenceValid;
}
public static CourseDesignerMode[] validValues() {
List<CourseDesignerMode> validValues = new ArrayList<CourseDesignerMode>();
for (CourseDesignerMode type : values()) {
@@ -0,0 +1,12 @@
package com.sap.sailing.domain.common.impl;
public class RaceColumnConstants {
public static final String LEADERBOARD_NAME = "leaderboard_name";
public static final String LEADERBOARD_DISPLAY_NAME = "leaderboard_display_name";
public static final String RACE_COLUMNS = "race_columns";
public static final String RACE_COLUMN_NAME = "race_column_name";
public static final String EXPLICIT_FACTOR = "explicit_factor";
public static final String FACTOR = "factor";
}
@@ -8,7 +8,6 @@ import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -501,14 +500,7 @@ public class IgtimiConnectionFactoryImpl implements IgtimiConnectionFactory {
result.add(uri);
}
// sort those to the front that don't do port 443 nor wss://
Collections.sort(result, new Comparator<URI>() {
@Override
public int compare(URI o1, URI o2) {
int o1Score = (o1.toString().contains("443") ? 1 : 0) + (o1.toString().contains("wss") ? 1 : 0);
int o2Score = (o2.toString().contains("443") ? 1 : 0) + (o2.toString().contains("wss") ? 1 : 0);
return o1Score - o2Score;
}
});
Collections.shuffle(result); // shuffle as a failover strategy
logger.info("Trying Igtimi WebSocket servers in the following order: "+result);
return result;
}
@@ -143,6 +143,7 @@ import com.sap.sailing.domain.base.impl.SailingServerConfigurationImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.base.impl.VenueImpl;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.MarkType;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.PassingInstruction;
@@ -1498,7 +1499,9 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
private RaceLogCourseDesignChangedEvent loadRaceLogCourseDesignChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List<Competitor> competitors, DBObject dbObject) {
String courseName = (String) dbObject.get(FieldNames.RACE_LOG_COURSE_DESIGN_NAME.name());
CourseBase courseData = loadCourseData((BasicDBList) dbObject.get(FieldNames.RACE_LOG_COURSE_DESIGN.name()), courseName);
return new RaceLogCourseDesignChangedEventImpl(createdAt, logicalTimePoint, author, id, passId, courseData);
final String courseDesignerModeName = (String) dbObject.get(FieldNames.RACE_LOG_COURSE_DESIGNER_MODE.name());
final CourseDesignerMode courseDesignerMode = courseDesignerModeName == null ? null : CourseDesignerMode.valueOf(courseDesignerModeName);
return new RaceLogCourseDesignChangedEventImpl(createdAt, logicalTimePoint, author, id, passId, courseData, courseDesignerMode);
}
private RaceLogCourseAreaChangedEvent loadRaceLogCourseAreaChangedEvent(TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, Integer passId, List<Competitor> competitors, DBObject dbObject) {
@@ -88,7 +88,7 @@ public enum FieldNames {
// race log
RACE_LOG_IDENTIFIER, RACE_LOG_EVENT, RACE_LOG_EVENT_PASS_ID, RACE_LOG_EVENT_ID, RACE_LOG_EVENT_CREATED_AT, RACE_LOG_EVENT_AUTHOR_NAME,
RACE_LOG_EVENT_AUTHOR_PRIORITY, RACE_LOG_EVENT_INVOLVED_BOATS, RACE_LOG_EVENT_FLAG_UPPER, RACE_LOG_EVENT_FLAG_LOWER, RACE_LOG_EVENT_FLAG_DISPLAYED,
RACE_LOG_EVENT_START_TIME, RACE_LOG_EVENT_CLASS, RACE_LOG_EVENT_NEXT_STATUS, RACE_LOG_COURSE_DESIGN, WAYPOINT_ID, WAYPOINT_NAME,
RACE_LOG_EVENT_START_TIME, RACE_LOG_EVENT_CLASS, RACE_LOG_EVENT_NEXT_STATUS, RACE_LOG_COURSE_DESIGN, RACE_LOG_COURSE_DESIGNER_MODE, WAYPOINT_ID, WAYPOINT_NAME,
WAYPOINT_PASSINGINSTRUCTIONS, CONTROLPOINT, CONTROLPOINT_CLASS, MARK_ID, MARK_COLOR, MARK_NAME, MARK_PATTERN, MARK_SHAPE, MARK_TYPE,
CONTROLPOINT_VALUE, CONTROLPOINTWITHTWOMARKS_ID, CONTROLPOINTWITHTWOMARKS_NAME, CONTROLPOINTWITHTWOMARKS_LEFT, CONTROLPOINTWITHTWOMARKS_RIGHT,
RACE_LOG_POSITIONED_COMPETITORS, RACE_LOG_PATHFINDER_ID, RACE_LOG_GATE_LINE_OPENING_TIME, RACE_LOG_GOLF_DOWN_TIME, RACE_LOG_START_PROCEDURE_TYPE,
@@ -1116,6 +1116,8 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
storeRaceLogEventProperties(courseDesignChangedEvent, result);
result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogCourseDesignChangedEvent.class.getSimpleName());
result.put(FieldNames.RACE_LOG_COURSE_DESIGN_NAME.name(), courseDesignChangedEvent.getCourseDesign().getName());
result.put(FieldNames.RACE_LOG_COURSE_DESIGNER_MODE.name(),
courseDesignChangedEvent.getCourseDesignerMode() == null ? null : courseDesignChangedEvent.getCourseDesignerMode().name());
result.put(FieldNames.RACE_LOG_COURSE_DESIGN.name(), storeCourseBase(courseDesignChangedEvent.getCourseDesign()));
return result;
}
@@ -436,7 +436,7 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener {
private void onCourseDesignChangedEvent(RaceLogCourseDesignChangedEvent event) {
if (trackedRace != null) {
CourseBase base = new LastPublishedCourseDesignFinder(params.getRaceLog()).analyze();
CourseBase base = new LastPublishedCourseDesignFinder(params.getRaceLog(), /* onlyCoursesWithValidWaypointList */ true).analyze();
List<Util.Pair<ControlPoint, PassingInstruction>> update = new ArrayList<>();
for (Waypoint waypoint : base.getWaypoints()) {
update.add(new Util.Pair<>(waypoint.getControlPoint(), waypoint.getPassingInstructions()));
@@ -462,7 +462,7 @@ public class RaceLogRaceTracker implements RaceTracker, GPSFixReceivedListener {
}
BoatClass boatClass = denoteEvent.getBoatClass();
String raceName = denoteEvent.getRaceName();
CourseBase courseBase = new LastPublishedCourseDesignFinder(raceLog).analyze();
CourseBase courseBase = new LastPublishedCourseDesignFinder(raceLog, /* onlyCoursesWithValidWaypointList */ true).analyze();
if (courseBase == null) {
courseBase = new CourseDataImpl("Default course for " + raceName);
logger.log(Level.FINE, "Using empty course in creation of race " + raceName);
@@ -47,6 +47,7 @@ import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.SharedDomainFactory;
import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.CourseDataImpl;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.RegattaIdentifier;
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
import com.sap.sailing.domain.common.racelog.tracking.CompetitorRegistrationOnRaceLogDisabledException;
@@ -194,7 +195,7 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
@Override
public void copyCourse(RaceLog fromRaceLog, Set<RaceLog> toRaceLogs, SharedDomainFactory baseDomainFactory,
RacingEventService service) {
CourseBase course = new LastPublishedCourseDesignFinder(fromRaceLog).analyze();
CourseBase course = new LastPublishedCourseDesignFinder(fromRaceLog, /* onlyCoursesWithValidWaypointList */ true).analyze();
final Set<Mark> marks = new HashSet<>();
if (course != null) {
course.getWaypoints().forEach(wp -> Util.addAll(wp.getMarks(), marks));
@@ -212,7 +213,7 @@ public class RaceLogTrackingAdapterImpl implements RaceLogTrackingAdapter {
int passId = toRaceLog.getCurrentPassId();
RaceLogEvent newCourseEvent = new RaceLogCourseDesignChangedEventImpl(now,
service.getServerAuthor(), passId, newCourse);
service.getServerAuthor(), passId, newCourse, CourseDesignerMode.ADMIN_CONSOLE);
toRaceLog.add(newCourseEvent);
}
@@ -37,6 +37,7 @@ import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.base.configuration.impl.EmptyRegattaConfiguration;
import com.sap.sailing.domain.base.configuration.impl.RegattaConfigurationImpl;
import com.sap.sailing.domain.base.configuration.procedures.ESSConfiguration;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
@@ -177,7 +178,7 @@ public class RaceStateTest {
state.forceNewStartTime(nowMock, new MillisecondsTimePoint(1));
Thread.sleep(100);
state.setFinishedTime(new MillisecondsTimePoint(10));
state.setCourseDesign(nowMock, mock(CourseBase.class));
state.setCourseDesign(nowMock, mock(CourseBase.class), CourseDesignerMode.ADMIN_CONSOLE);
state.setAdvancePass(mock(TimePoint.class));
@@ -1,9 +1,12 @@
package com.sap.sailing.domain.abstractlog.race;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.common.CourseDesignerMode;
public interface RaceLogCourseDesignChangedEvent extends RaceLogEvent {
CourseBase getCourseDesign();
CourseDesignerMode getCourseDesignerMode();
}
@@ -4,11 +4,33 @@ import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.common.CourseDesignerMode;
/**
* A course design can be defined in the {@link RaceLog} using a {@link RaceLogCourseDesignChangedEvent}. These
* events may carry information about the course designer that was used to create the course. Not all of them
* support defining the waypoint sequence that sets the course. See {@link RaceLogCourseDesignChangedEvent#getCourseDesignerMode()}
* and {@link CourseDesignerMode#isWaypointSequenceValid()}. Callers can tell whether they want to obtain {@link CourseBase}
* objects regardless of whether their waypoint sequence is valid or not.
*
* @author Axel Uhl (d043530)
*
*/
public class LastPublishedCourseDesignFinder extends RaceLogAnalyzer<CourseBase> {
public LastPublishedCourseDesignFinder(RaceLog raceLog) {
private final boolean onlyCoursesWithValidWaypointList;
/**
* @param onlyCoursesWithValidWaypointList
* if {@code true}, only {@link RaceLogCourseDesignChangedEvent} objects will be considered whose
* {@link RaceLogCourseDesignChangedEvent#getCourseDesignerMode() course designer mode}
* {@link CourseDesignerMode#isWaypointSequenceValid() guarantees} that the waypoint list is valid and
* shall be applied to a race; otherwise, all other {@link RaceLogCourseDesignChangedEvent} as considered
* as well.
*/
public LastPublishedCourseDesignFinder(RaceLog raceLog, boolean onlyCoursesWithValidWaypointList) {
super(raceLog);
this.onlyCoursesWithValidWaypointList = onlyCoursesWithValidWaypointList;
}
@Override
@@ -16,7 +38,10 @@ public class LastPublishedCourseDesignFinder extends RaceLogAnalyzer<CourseBase>
for (RaceLogEvent event : getAllEventsDescending()) {
if (event instanceof RaceLogCourseDesignChangedEvent) {
RaceLogCourseDesignChangedEvent courseDesignEvent = (RaceLogCourseDesignChangedEvent) event;
return courseDesignEvent.getCourseDesign();
if (!onlyCoursesWithValidWaypointList || (courseDesignEvent.getCourseDesignerMode() == null ||
courseDesignEvent.getCourseDesignerMode().isWaypointSequenceValid())) {
return courseDesignEvent.getCourseDesign();
}
}
}
return null;
@@ -6,23 +6,27 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.race.RaceLogCourseDesignChangedEvent;
import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sse.common.TimePoint;
public class RaceLogCourseDesignChangedEventImpl extends RaceLogEventImpl implements RaceLogCourseDesignChangedEvent {
private static final long serialVersionUID = 1565936170747420547L;
private final CourseBase courseDesign;
private final CourseDesignerMode courseDesignerMode;
public RaceLogCourseDesignChangedEventImpl(TimePoint createdAt, TimePoint pTimePoint,
AbstractLogEventAuthor author, Serializable pId, int pPassId,
CourseBase courseDesign) {
CourseBase courseDesign, CourseDesignerMode courseDesignerMode) {
super(createdAt, pTimePoint, author, pId, pPassId);
this.courseDesign = courseDesign;
this.courseDesignerMode = courseDesignerMode;
}
public RaceLogCourseDesignChangedEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, int pPassId,
CourseBase courseDesign) {
this(now(), logicalTimePoint, author, randId(), pPassId, courseDesign);
CourseBase courseDesign, CourseDesignerMode courseDesignerMode) {
this(now(), logicalTimePoint, author, randId(), pPassId, courseDesign, courseDesignerMode);
}
@Override
@@ -35,8 +39,14 @@ public class RaceLogCourseDesignChangedEventImpl extends RaceLogEventImpl implem
return courseDesign;
}
@Override
public CourseDesignerMode getCourseDesignerMode() {
return courseDesignerMode;
}
@Override
public String getShortInfo() {
return "courseDesign=" + courseDesign != null ? courseDesign.getName() : "null";
}
}
}
@@ -27,7 +27,7 @@ public class WeakRaceLogChangedVisitor extends AbstractRaceLogChangedVisitor {
private static ReferenceQueue<? super RaceLogChangedListener> queue = new ReferenceQueue<RaceLogChangedListener>();
private static Map<Reference<?>, WeakRaceLogChangedVisitor> referenceToVisitor = new ConcurrentHashMap<Reference<?>, WeakRaceLogChangedVisitor>();
static {
new Thread(WeakRaceLogChangedVisitor.class.getSimpleName() + " weak reference cleaner") {
Thread t = new Thread(WeakRaceLogChangedVisitor.class.getSimpleName() + " weak reference cleaner") {
@Override
public void run() {
while (true) {
@@ -42,7 +42,9 @@ public class WeakRaceLogChangedVisitor extends AbstractRaceLogChangedVisitor {
}
}
}
}.start();
};
t.setDaemon(true);
t.start();
}
private final WeakReference<RaceLogChangedListener> listenerRef;
@@ -13,6 +13,7 @@ import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProce
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedurePrerequisite.Resolver;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.impl.RacingProcedurePrerequisiteAutoResolver;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
@@ -172,8 +173,14 @@ public interface RaceState extends ReadonlyRaceState {
/**
* Sets a new active course design.
*
* @param courseDesignerMode
* the type of course designer through which the course was created; this decides about whether the
* waypoint specification will be considered at all. For example, the "By Marks" course designer does not
* produce a valid waypoints list which therefore must be ignored instead of using it to update a
* TrackedRace's course.
*/
void setCourseDesign(TimePoint now, CourseBase courseDesign);
void setCourseDesign(TimePoint now, CourseBase courseDesign, CourseDesignerMode courseDesignerMode);
/**
* Enters a new wind fix for this race.
@@ -37,6 +37,7 @@ import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.configuration.ConfigurationLoader;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.base.configuration.impl.EmptyRegattaConfiguration;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.abstractlog.NotRevokableException;
import com.sap.sailing.domain.common.racelog.Flags;
@@ -201,8 +202,8 @@ public class RaceStateImpl extends ReadonlyRaceStateImpl implements RaceState {
}
@Override
public void setCourseDesign(TimePoint timePoint, CourseBase courseDesign) {
raceLog.add(new RaceLogCourseDesignChangedEventImpl(timePoint, author, raceLog.getCurrentPassId(), courseDesign));
public void setCourseDesign(TimePoint timePoint, CourseBase courseDesign, CourseDesignerMode courseDesignerMode) {
raceLog.add(new RaceLogCourseDesignChangedEventImpl(timePoint, author, raceLog.getCurrentPassId(), courseDesign, courseDesignerMode));
}
@Override
@@ -186,7 +186,7 @@ public class ReadonlyRaceStateImpl implements ReadonlyRaceState, RaceLogChangedL
this.protestTimeAnalyzer = new ProtestStartTimeFinder(raceLog);
this.finishPositioningListAnalyzer = new FinishPositioningListFinder(raceLog);
this.confirmedFinishPositioningListAnalyzer = new ConfirmedFinishPositioningListFinder(raceLog);
this.courseDesignerAnalyzer = new LastPublishedCourseDesignFinder(raceLog);
this.courseDesignerAnalyzer = new LastPublishedCourseDesignFinder(raceLog, /* onlyCoursesWithValidWaypointList */ false);
this.lastWindFixAnalyzer = new LastWindFixFinder(raceLog);
this.raceStateToObserveListener = new BaseRaceStateChangedListener() {
@@ -17,4 +17,21 @@ public interface SeriesBase extends Renamable {
* on the scoring scheme (usually, medal races scores are doubled and cannot be discarded).
*/
boolean isMedal();
/**
* For a multi-{@link #getFleets() fleet} series, the races of different fleets may or may not run in parallel. If
* they can not run in parallel, the fleet's ordering as returned by {@link #getFleets()} is assumed to be the order
* in which the fleets' races are to be run.
* <p>
*
* For example, if a league event defines a series with three fleets, Yellow, Blue and Red, and does not allow for
* parallel fleet races and the series has race columns F1, F2, ..., then the execution order of those races is
* assumed to be F1-Yellow, F1-Blue, F1-Red, F2-Yellow, F2-Blue, F2-Red, ...
* <p>
*
* If the fleets are allowed to run their races in parallel, no assumption about the race execution order can be
* made except that within a fleet the races are usually run in the order as defined by the {@link #getRaceColumns()
* race columns}.
*/
boolean isFleetsRunInParallel();
}
@@ -17,7 +17,6 @@ public class CourseDataImpl extends NamedImpl implements CourseBase {
public CourseDataImpl(String name) {
super(name);
this.waypoints = new ArrayList<Waypoint>();
}
@@ -0,0 +1,57 @@
package com.sap.sailing.domain.base.impl;
import java.util.HashMap;
public class RaceColumnFactorImpl {
private final String leaderboard_name;
private final String leaderboard_display_name;
private final HashMap<String, RaceColumn> race_columns;
public RaceColumnFactorImpl(String leaderboard_name, String leaderboard_display_name) {
this.leaderboard_name = leaderboard_name;
this.leaderboard_display_name = leaderboard_display_name;
race_columns = new HashMap<>();
}
public String getLeaderboardName() {
return leaderboard_name;
}
public String getLeaderboardDisplayName() {
return leaderboard_display_name;
}
public HashMap<String, RaceColumn> getRaceColumns() {
return race_columns;
}
public void addRaceColumn(String race_column_name, Double explicit_factor, Double factor) {
race_columns.put(race_column_name, new RaceColumn(race_column_name, explicit_factor, factor));
}
public class RaceColumn {
private final String race_column_name;
private final Double explicit_factor;
private final Double factor;
public RaceColumn(String race_column_name, Double explicit_factor, Double factor) {
this.race_column_name = race_column_name;
this.explicit_factor = explicit_factor;
this.factor = factor;
}
public String getRaceColumnName() {
return race_column_name;
}
public Double getExplicitFactor() {
return explicit_factor;
}
public Double getFactor() {
return factor;
}
}
}
@@ -12,4 +12,8 @@ import com.sap.sse.common.Named;
*/
public interface RaceCell extends Named {
RaceLog getRaceLog();
double getFactor();
Double getExplicitFactor();
}
@@ -7,11 +7,23 @@ import com.sap.sse.common.impl.NamedImpl;
public class RaceCellImpl extends NamedImpl implements RaceCell {
private static final long serialVersionUID = 971598420407273594L;
private RaceLog raceLog;
private final RaceLog raceLog;
/**
* See {@code RaceColumn.getFactor()}
*/
private final double factor;
/**
* See {@code RaceColumn.getExplicitFactor()}
*/
private final Double explicitFactor;
public RaceCellImpl(String name, RaceLog raceLog) {
public RaceCellImpl(String name, RaceLog raceLog, double factor, Double explicitFactor) {
super(name);
this.raceLog = raceLog;
this.factor = factor;
this.explicitFactor = explicitFactor;
}
@Override
@@ -19,4 +31,21 @@ public class RaceCellImpl extends NamedImpl implements RaceCell {
return raceLog;
}
/**
* Represents the effective factor / multiplier for the scores in this column. This factor may have been determined
* by a default rule or by a factor set explicitly. See {@link #getExplicitFactor()}.
*/
@Override
public double getFactor() {
return factor;
}
/**
* Represents the explicit factor / multiplier set for the scores in this column. If {@code null},
* the score multiplying {@link #getFactor() factor} is determined by default rules.
*/
@Override
public Double getExplicitFactor() {
return explicitFactor;
}
}
@@ -45,4 +45,9 @@ public class SeriesWithRowsImpl implements SeriesWithRows {
this.name = newName;
}
@Override
public boolean isFleetsRunInParallel() {
// TODO This is a default implementation so far, allowing for parallel fleet races to not restrict generality. This shall become a configurable series property. See bug 3532
return true;
}
}
@@ -339,7 +339,7 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
}
} else {
// if no tracked race is found, use marks from race course if present in racelog
LastPublishedCourseDesignFinder courseDesginFinder = new LastPublishedCourseDesignFinder(getRaceLog(fleet));
LastPublishedCourseDesignFinder courseDesginFinder = new LastPublishedCourseDesignFinder(getRaceLog(fleet), /* onlyCoursesWithValidWaypointList */ true);
final CourseBase courseBase = courseDesginFinder.analyze();
if (courseBase != null) {
courseBase.getWaypoints().forEach((waypoint) -> Util.addAll(waypoint.getMarks(), result));
@@ -434,4 +434,10 @@ public class SeriesImpl extends RenamableImpl implements Series, RaceColumnListe
public boolean hasSplitFleetContiguousScoring() {
return hasSplitFleetContiguousScoring;
}
@Override
public boolean isFleetsRunInParallel() {
// TODO This is a default implementation so far, allowing for parallel fleet races to not restrict generality. This shall become a configurable series property. See bug 3532
return true;
}
}
@@ -221,6 +221,7 @@ public class LiveLeaderboardUpdater implements Runnable {
private synchronized void start() {
running = true;
thread = new Thread(this, "LiveLeaderboardUpdater for leaderboard "+getLeaderboard().getName());
thread.setDaemon(true);
thread.start();
}
@@ -75,7 +75,7 @@ public class DynamicTrackedRaceLogListener extends BaseRaceLogEventVisitor {
}
private LastPublishedCourseDesignFinder createCourseDesignFinder(RaceLog raceLog) {
return new LastPublishedCourseDesignFinder(raceLog);
return new LastPublishedCourseDesignFinder(raceLog, /* onlyCoursesWithValidWaypointList */ false); // we also want by-name courses to forward, e.g., to TracTrac
}
private AbortingFlagFinder createAbortingFlagFinder(RaceLog raceLog) {
@@ -8,8 +8,10 @@ import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.sap.sailing.gwt.ui.raceboard.RaceBoardEntryPoint;
import com.sap.sailing.gwt.ui.raceboard.RaceBoardViewConfiguration;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sse.common.Duration;
import com.sap.sse.gwt.client.mvp.ErrorView;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
import com.sap.sse.gwt.shared.GwtHttpRequestUtils;
@@ -77,9 +79,11 @@ public class PlayerActivity extends AbstractActivity {
RaceBoardViewConfiguration.PARAM_VIEW_SHOW_COMPETITORSCHART, false /* default */);
String activeCompetitorsFilterSetName = GwtHttpRequestUtils.getStringParameter(RaceBoardViewConfiguration.PARAM_VIEW_COMPETITOR_FILTER, null /* default*/);
final String defaultMedia = GwtHttpRequestUtils.getStringParameter(RaceBoardViewConfiguration.PARAM_DEFAULT_MEDIA, null /* default */);
final Duration initialDurationAfterRaceStartInReplay = RaceBoardEntryPoint.parseDuration(GwtHttpRequestUtils.getStringParameter(
RaceBoardViewConfiguration.PARAM_TIME_AFTER_RACE_START_AS_HOURS_COLON_MILLIS_COLON_SECONDS, null /* default */));
return new RaceBoardViewConfiguration(activeCompetitorsFilterSetName, showLeaderboard,
showWindChart, showCompetitorsChart, showViewStreamlets, showViewStreamletColors, showViewSimulation, autoSelectMedia, defaultMedia);
showWindChart, showCompetitorsChart, showViewStreamlets, showViewStreamletColors, showViewSimulation, autoSelectMedia, defaultMedia, initialDurationAfterRaceStartInReplay);
}
private void createErrorView(String errorMessage, Throwable errorReason, AcceptsOneWidget panel) {
@@ -1,222 +1,225 @@
chartSelectionHint=Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart.
chooseALanguage=Choose a language
events=Events
home=Home
aboutUs=About us
contact=Contact
sponsoring=Sponsoring
chartSelectionHint=Совет: таблицу лидеров (на вкладке ТАБЛИЦА ЛИДЕРОВ) также можно использовать для выбора участников, отображаемых в диаграмме.
chooseALanguage=Выбор языка
events=События
home=Главная
aboutUs=О нас
contact=Контакт
sponsoring=Финансовая поддержка
solutions=Решения
blog=Блог
german=Deutsch
english=English
fullEventSchedule=Full event schedule
officalEventWebsite=Official event website
leg=Leg
races=Races
moreInfo=More info
viewAnalysis=View analysis
overallLeaderboard=Overall leaderboard
pleaseEnterASearchTerm=Please enter a search term.
pleaseTryAgain=Please try again...
reloadPage=Reload page
errorMessageLoadingData=An error occured while loading the data for this page.
errorMessageNoSuchLeaderboard=Could not find a leaderboard with this name.
raceNotScheduled=Not scheduled.
regattaDetails=Regatta details
regatta=Regatta
competitorsAnalytics=Competitors Analytics
chooseChart=Choose chart type
series=Series
regattaLeaderboards=Regatta leaderboards
features=Features
releaseNotes=Release notes
whatsNew=What''s new
overview=Overview
fullEventSchedule=Полное расписание события
officalEventWebsite=Официальный веб-сайт события
leg=Отрезок
races=Гонки
moreInfo=Больше сведений
viewAnalysis=Просмотреть анализ
overallLeaderboard=Общая таблица лидеров
pleaseEnterASearchTerm=Введите запрос поиска.
pleaseTryAgain=Повторите попытку...
reloadPage=Перезагрузить страницу
errorMessageLoadingData=При загрузке данных для этой страницы возникла ошибка.
errorMessageNoSuchLeaderboard=Не удалось найти таблицу лидеров с этим названием.
raceNotScheduled=Не запланировано.
regattaDetails=Подробности регаты
regatta=Регата
competitorsAnalytics=Анализ участников
chooseChart=Выберите тип диаграммы
series=Серия
regattaLeaderboards=Таблицы лидеров регаты
features=Характеристики
releaseNotes=Примечания к выпуску
whatsNew=Новые возможности
overview=Обзор
sapSailing=SAP Sailing
search=Search
startSimulator=Start Simulator
countdownStartingInDays=Days
countdownDays=Days
countdownHours=Hrs
countdownMinutes=Min
countdownSeconds=Sec
countdownDay=Day
countdownHour=Hour
countdownMinute=Min
countdownSecond=Sec
live=Live
finished=Finished
watchNow=Watch now
lastUpdate=Last Update
leaderboard=Leaderboard
boxNewsUpdateMoreLink=Report news
boxNewsUpdateTitle=News Update
boxUpcomingRacesCountdownStarted1=Started
boxUpcomingRacesCountdownStarted2=hrs and
boxUpcomingRacesCountdownStarted3=minutes ago
boxUpcomingRacesCountdownStarting1=Starting in
boxUpcomingRacesCountdownStarting2=hrs and
boxUpcomingRacesCountdownStarting3=minutes
boxUpcomingRacesMoreLink=Event Schedule
boxUpcomingRacesTitle=Upcoming Races Today
boxWeather=Weather
boxWeatherUnit=KTS
search=Поиск
startSimulator=Запустить симулятор
countdownStartingInDays=дн.
countdownDays=дн.
countdownHours=ч.
countdownMinutes=мин.
countdownSeconds=сек.
countdownDay=дн.
countdownHour=ч.
countdownMinute=мин.
countdownSecond=сек.
live=Активно
finished=Завершено
watchNow=Смотреть сейчас
lastUpdate=Последнее обновление
leaderboard=Таблица лидеров
boxNewsUpdateMoreLink=Сообщить новости
boxNewsUpdateTitle=Обновление новостей
boxUpcomingRacesCountdownStarted1=Начато
boxUpcomingRacesCountdownStarted2=ч. и
boxUpcomingRacesCountdownStarted3=мин. назад
boxUpcomingRacesCountdownStarting1=Начало через
boxUpcomingRacesCountdownStarting2=ч.
boxUpcomingRacesCountdownStarting3=мин.
boxUpcomingRacesMoreLink=Расписание событий
boxUpcomingRacesTitle=Предстоящие сегодня гонки
boxWeather=Погода
boxWeatherUnit=уз
defaultTitle=SAP Sailing Analytics
eventHeaderMedia=Media
eventHeaderOverview=Overview
eventHeaderRaces=Schedule
eventHeaderRegattas=Regattas
seriesHeaderOverview=About the Series
seriesHeaderUpcoming=Upcoming
seriesHeaderRecent=Recent Events
seriesHeaderLeaderboard=Leaderboard
seriesOverviewHeaderRecent=Latest Series Events
seriesOverviewReadMore=More
eventsOverviewRecentEvents=Events
eventsOverviewRecentCountries=Countries
eventsOverviewRecentSailors=Sailors
eventsOverviewRecentTrackedRaces=Tracked Races
eventResultsHeadline=Winners and Results
eventResultsBoatClassesDropDown=All Boat Classes
eventOverviewMoreEvents=More Events
eventOverviewRecentEvents=Recent Events
eventOverviewUpcomingDate=Date
eventOverviewUpcomingEvent=Event
eventOverviewUpcomingLocation=Location
eventOverviewUpcomingSchedule=Upcoming Schedule
eventOverviewUpcomingSeries=Series
eventOverviewUpcomingTeaser=More Events To Be Announced Soon!
eventQuickfinderTitle=Event Quick-Finder
eventRegattaHeaderLeaderboard=Leaderboard
eventRegattaHeaderRaceRaces=Races
eventRegattaListAllBoatClasses=All boat classes
eventRegattaLeaderboardCompetitor=Competitor
eventRegattaLeaderboardExtendLeaderboard=Extend Leaderboard
eventRegattaLeaderboardFinishedMessage=No more races
eventRegattaLeaderboardLastScoreUpdate=Last Score Update
eventRegattaLeaderboardName=Name
eventRegattaLeaderboardRegattaRank=Regatta Rank
eventRegattaLeaderboardTotalPoints=Total Points
eventRegattaRaceWatch=Watch live
eventRegattaRaceAnalyse=Analyze Race
eventRegattaRaceNotTracked=Not Tracked
eventRegattaRaceFinished=Finished at:
eventRegattaRaceStarted=Started at:
eventRegattaRaceScheduled=Scheduled for:
eventRegattaRaceRace=Race
eventRegattaRaceWind=Wind Strength:
eventRegattaRaceWinner=Winner
eventRegattaRaceLeader=Leader
eventRegattaRacesLegendGps=Tracking
eventRegattaRacesLegendWind=Wind Data
eventRegattaRacesLegendVideo=Video
eventRegattaRacesLegendAudio=Audio
eventSponsorsTitle=Event Sponsorships
footerJobs=Jobs
footerCopyright=\u00A9 2011-2016 SAP Sailing Analytics
footerLanguage=SAP Sailing in
footerLegal=Legal Disclosure
footerPrivacy=Privacy
footerFeedback=Feedback
headerEvents=Events
headerHome=Home
eventHeaderMedia=Мультимедиа
eventHeaderOverview=Обзор
eventHeaderRaces=Расписание
eventHeaderRegattas=Регаты
seriesHeaderOverview=О данной серии
seriesHeaderUpcoming=Предстоит
seriesHeaderRecent=Недавние события
seriesHeaderLeaderboard=Таблица лидеров
seriesOverviewHeaderRecent=События последней серии
seriesOverviewReadMore=Больше
eventsOverviewRecentEvents=События
eventsOverviewRecentCountries=Страны
eventsOverviewRecentSailors=Мореходы
eventsOverviewRecentTrackedRaces=Отслеживаемые гонки
eventResultsHeadline=Победители и результаты
eventResultsBoatClassesDropDown=Все классы лодок
eventOverviewMoreEvents=Больше событий
eventOverviewRecentEvents=Недавние события
eventOverviewUpcomingDate=Дата
eventOverviewUpcomingEvent=Событие
eventOverviewUpcomingLocation=Место
eventOverviewUpcomingSchedule=Расписание предстоящих
eventOverviewUpcomingSeries=Серия
eventOverviewUpcomingTeaser=Скоро будет анонсировано больше событий!
eventQuickfinderTitle=Быстрый поиск событий
eventRegattaHeaderLeaderboard=Таблица лидеров
eventRegattaHeaderRaceRaces=Гонки
eventRegattaListAllBoatClasses=Все классы лодок
eventRegattaLeaderboardCompetitor=Участник
eventRegattaLeaderboardExtendLeaderboard=Расширить таблицу лидеров
eventRegattaLeaderboardFinishedMessage=Больше нет гонок
eventRegattaLeaderboardLastScoreUpdate=Последнее обновление оценок
eventRegattaLeaderboardName=Название
eventRegattaLeaderboardRegattaRank=Ранг в регате
eventRegattaLeaderboardTotalPoints=Всего баллов
eventRegattaRaceWatch=Смотреть в реальном времени
eventRegattaRaceAnalyse=Анализировать гонку
eventRegattaRaceNotTracked=Не отслеживается
eventRegattaRaceFinished=Завершено в:
eventRegattaRaceStarted=Начато в:
eventRegattaRaceScheduled=Запланировано на:
eventRegattaRaceRace=Гонка
eventRegattaRaceWind=Сила ветра:
eventRegattaRaceWinner=Победитель
eventRegattaRaceLeader=Лидер
eventRegattaRacesLegendGps=Отслеживание
eventRegattaRacesLegendWind=Данные о ветре
eventRegattaRacesLegendVideo=Видео
eventRegattaRacesLegendAudio=Аудио
eventSponsorsTitle=Спонсорская поддержка событий
footerJobs=Работа
footerCopyright=\u00A9 SAP Sailing Analytics, 2011–2016.
footerLanguage=SAP Sailing в
footerLegal=Раскрытие юридической информации
footerPrivacy=Конфиденциальность
footerFeedback=Обратная связь
headerEvents=События
headerHome=Главная
headerLogo=Sailing Analytics
headerSearch=Search
headerSearchPlaceholder=Search
headerSolutions=Solutions
headerSponsoring=Sponsoring
latestRaceResultsHeadline=Latest Official Race Results
latestRaceResultsIsNew=New
latestRaceResultsIsUpdated=Updated
latestRaceResultsRaceCountUnit=races
latestRaceResultsRefresh=refresh
leaderboardQuickAccessLabel=Leaderboard Quick Access
mainEventShowAll=Show All Events
mainEventTitle=Latest Events from the Sailing World
mainMediaSubtitle=Get lost in the latest and most beautiful impressions from your favorite sailing event.
mainMediaTitle=Sailing loves Photography
mainMediaVideosSubtitle=Immerse yourself in the world of sailing and check out our latest events for more videos.
mainMediaVideosTitle=Recent Video Entries
mainSponsorsReadMore=Read More
mediaTeaserPhotosTitle=Photos
mediaTeaserVideosTitle=Videos
regattaCompetitors=Competitors
regattaRaces=Races
regattaTracked=Tracked
regattaRegattaStarts=Regatta will start
regattaPts=Pts.
regattaCourse=Course
regattaArea=Area
regattaFinishedAt=Finished at
regattaScheduledAt=Scheduled at
regattaStartedAt=Started at
regattasResultsTitle=Winner and Results
searchResultHeaderButton=Search
searchResultHeaderLabel=Your Search
searchResultsFound=result(s) found for
searchResultHeaderPlaceholder=Type in your searchkey
searchResultMore=More
searchResultSearch=Search
searchResultSearchAgain=Search again
searchResultSortLabel=Sort by
searchResultSortNewest=Recent
searchResultSortOldest=Oldest
searchResultSortRelevance=Relevance
searchResultCount=About 2,450 results where found for 'Schnitzel'
sharingEmail=Send an email
sharingFacebook=Share on Facebook
sharingTwitter=Tweet about it
socialFooterShare=Share this on
socialFooterTitle=Recommend SAP Sailing Analytics
headerSearch=Поиск
headerSearchPlaceholder=Поиск
headerSolutions=Решения
headerSponsoring=Финансовая поддержка
latestRaceResultsHeadline=Последние официальные результаты гонок
latestRaceResultsIsNew=Новое
latestRaceResultsIsUpdated=Обновлено
latestRaceResultsRaceCountUnit=гонки
latestRaceResultsRefresh=обновить
leaderboardQuickAccessLabel=Быстрый доступ к таблице лидеров
mainEventShowAll=Показать все события
mainEventTitle=Последние события в мире парусного спорта
mainMediaSubtitle=Погрузитесь в новейшие и прекраснейшие впечатления от избранного события в мире парусного спорта.
mainMediaTitle=Фотографы любят паруса
mainMediaVideosSubtitle=Погрузитесь в мир парусного спорта и просмотрите другие видео наших последних событий.
mainMediaVideosTitle=Последние видеозаписи
mainSponsorsReadMore=См. также
mediaTeaserPhotosTitle=Фото
mediaTeaserVideosTitle=Видео
regattaCompetitors=Участники
regattaRaces=Гонки
regattaTracked=Отслеживаемые
regattaRegattaStarts=Регата начнется
regattaPts=баллов
regattaCourse=Курс
regattaArea=Область
regattaFinishedAt=Завершено в
regattaScheduledAt=Запланировано в
regattaStartedAt=Начато в
regattasResultsTitle=Победитель и результат
searchResultHeaderButton=Поиск
searchResultHeaderLabel=Ваш поиск
searchResultsFound=результ. по запросу
searchResultHeaderPlaceholder=Введите ключ поиска
searchResultMore=Больше
searchResultSearch=Поиск
searchResultSearchAgain=Повторный поиск
searchResultSortLabel=Сортировать по
searchResultSortNewest=Недавние
searchResultSortOldest=Самые старые
searchResultSortRelevance=Релевантность
searchResultCount=Около 2450 результатов по запросу ''Шницель''
sharingEmail=Отправить эл. почту
sharingFacebook=Поделиться в Facebook
sharingTwitter=Твитнуть об этом
socialFooterShare=Поделиться в
socialFooterTitle=Рекомендовать SAP Sailing Analytics
# SOLUTIONS
solutionsSISHeadline=Компания SAP и парусный спорт
solutionsSAPHeadline=Инструмент аналитики парусного спорта от компании SAP
solutionsRaceHeadline=Менеджер регат SAP
solutionsPostHeadline=Пост-регатная аналитика
solutionsSISHeadline=SAP в парусном спорте
solutionsSAPHeadline=SAP Sailing Analytics
solutionsRaceHeadline=SAP Sailing Race Manager
solutionsPostHeadline=Аналитика после гонки
solutionsTrainingHeadline=Дневник тренировок
solutionsSimulatorHeadline=Тренажер стратегий
solutionsSimulatorHeadline=Симулятор стратегии
sapInSailing=Компания SAP и парусный спорт
contentSapInSailing1=Парусный спорт предоставляет отличную платформу для компании SAP, демонстрируя возможные решения и помогая этому виду спорта развиваться как никогда. Участие SAP в этом виде спорта изменило впечатления от занятий парусным спортом, предлагая средства, которые:
contentSapInSailing2=Помогают яхтсменам анализировать достижения и оптимизировать стратегию
contentSapInSailing3=Позволяют болельщикам быть ближе к действию
contentSapInSailing4=Обеспечивают СМИ информацией и аналитическими оценками для подачи более информативных комментариев
contentSapInSailing5=Компания SAP имеет давние связи с парусным спортом и ее серьезный портфолио включает сотрудничество с различными командами и регатами, например:
contentSapInSailing6=Официальный технологический партнер Travemьnder Woche
contentSapInSailing7=Технический партнер Европейских лиг парусного спорта
contentSapInSailing8=Генеральный спонсор экстремальной команды по парусному спорту
contentSapInSailing9=Официальный технический партнер экстремальной серии парусного спорта
contentSapInSailing10=Премиум-партнер национальной команды Германии по парусному спорту, Германская команда Audi по парусному спорту
contentSapInSailing11=Премиум-партнер крупнейшей регаты мира, Kieler Woche (Kiel Week)
contentSapInSailing12=Генеральный спонсор чемпионатов мира SAP 5O5
sapInSailing=SAP в парусном спорте
contentSapInSailing1=Парусный спорт предоставляет отличную платформу для демонстрации решений SAP и беспрецедентной помощи развитию спорта. Вовлеченность SAP преобразила парусный спорт, предоставив инструменты, которые:
contentSapInSailing2=Помогают мореходам анализировать эффективность и оптимизировать стратегию.
contentSapInSailing3=Делают болельщиков ближе к действию.
contentSapInSailing4=Предоставляют информацию и аналитику для более информированного комментирования.
contentSapInSailing5=За немалое время причастности к парусному спорту компанией SAP накоплено солидное портфолио сотрудничества с разными командами регатами, включая:
contentSapInSailing6=Официальный технологический партнер Travemünder Woche
contentSapInSailing7=Технический партнер Европейской лиги парусного спорта
contentSapInSailing8=Титульный спонсор команды SAP Extreme Sailing Team
contentSapInSailing9=Официальный технический партнер серии Extreme Sailing Series
contentSapInSailing10=Премиальный партнер национальной команды Германии по парусному спорту, Audi Sailing Team Germany
contentSapInSailing11=Премиальный партнер крупнейшей в мире регаты Kieler Woche (Кильская неделя)
contentSapInSailing12=Титульный спонсор чемпионатов мира SAP 5O5
solutionsSAPText1=Предоставляя аналитические данные о рейтинге, скоростях, маневрах, координатах и т.п. регат в реальном времени, компания SAP помогает освещать сложный парусный спорт в более простой и доступной форме.
solutionsSAPText2=Инструмент аналитики парусного спорта от компании SAP предоставляет аналитическую информацию и транспарентность миру парусного спорта, используя Технологию облака и памяти, обрабатывая данные GPS и измерения ветра в реальном времени и визуализируя содержимое в различных внешних интерфейсах, доступных из любой точки мира.
solutionsRaceText=Приложение «Комитет регат» SAP предоставляет возможность организаторам регат действовать эффективнее и лучше управлять ситуацией путем автоматизаци и упрощения задач, которые они делают вручную, а также их общения во время проведения яхтенных регат. Приложение «Комитет регат» помогает улучшить проведение регат и управление ими, чтобы помочь комитетам регат работать с более полной отдачей.
solutionsPostText=Доступ к данным, собираемым во время мероприятий, связанных с парусным спортом, дает яхтсменам возможность оценить и проанализировать свои показатели, что поможет им разработать стратегии и улучшить свои показатели в парусном спорте.<br> Решения бизнес-аналитики от компании SAP предоставляют яхтсменам, тренерам, болельщикам и средствам массовой информации инструменты для просмотра и анализа архивных данных по многим регатам и гонкам. Платформа SAP HANA позволяет им узнать о типовых действиях, тенденциях и профилях яхтсменов просто, быстро и эффективно с целью оптимизации своих собственных достижений и разработки успешных стратегий для будущих регат.
solutionsTrainingText=Дневник тренировок STG поддерживает работу с ежедневной документацией и анализ физического состояния и тренировочных усилий спортсменов в таких областях как тренировки на воде, физические тренировки, практика хождения под парусом, психическая подготовка, теория, а также другие виды деятельности, такие как образование или путешествия.
solutionsSimulatorText=Выбор правильной стратегии может дать большое конкурентное преимущество во время гонки. Тренажер стратегий SAP упрощает определение лучшей стратегии хождения под парусом для различных ветровых режимов и водных течений. Поскольку ветер и течение в тренажере можно быстро изменять, надежность стратегии можно легко оценить даже в условиях изменчивой погоды.
solutionsSAPText1=Предоставляя аналитику по данным о рангах в гонке, скоростях, маневрах, ветрах и т. д. в режиме реального времени, SAP помогает упростить и демистифицировать сложный парусный спорт.
solutionsSAPText2=SAP Sailing Analytics делает мир парусного спорта понятным и прозрачным, используя облако и технологию In-Memory, обработку данных GPS и параметров ветра в реальном времени, а также визуализацию контекста в разных пользовательских интерфейсах, доступных где угодно.
solutionsRaceText=Приложение SAP Race Committee повышает уровень эффективности и контроля для организаторов гонки за счет автоматизации и упрощения выполняемых вручную задач и общения во время проведения парусных регат. Приложение Race Committee помогает упростить проведение событий и управление ими, освобождая для оргкомитета время на лучшую проработку деталей.
solutionsPostText=Доступ к данным, собранным на парусных событиях, дает мореходам возможность оценить и проанализировать свои показатели, помогая разрабатывать стратегии и повышать мастерство.<br> Решения SAP Business Analytics предоставляют мореходам, тренерам, болельщикам и СМИ инструменты для просмотра и анализа исторических данных по множеству регат и гонок. SAP HANA позволяет изучать эффективные приемы, тенденции и профили мореходов простым, быстрым и эффективным образом для оптимизации своих показателей и разработки успешных стратегий на будущие регаты.
solutionsTrainingText=Дневник тренировок STG поддерживает ежедневное документирования и анализ физического состояния атлета и его усилий в тренировках на воде, физической подготовке, работе с лодкой, моральной, теоретической подготовке, а также других видах деятельности, таких как образование и путешествия.
solutionsSimulatorText=Выбор правильной стратегии может обеспечить большое конкурентное преимущество во время гонки. Симулятор стратегии упрощает определение лучшей стратегии хождения под парусом для разных атмосферных условий и водных течений. Возможность мгновенного изменения ветра и течения в симуляции позволяет легко оценить надежность стратегии даже для неопределенных погодных условий.
sapSailingAnalytics=Инструмент аналитики парусного спорта от компании SAP
contentSapSailingAnalytics1=Предоставляя аналитические данные о рейтинге, скоростях, маневрах, координатах и т.п. регат в реальном времени, компания SAP помогает освещать сложный парусный спорт в более простой и доступной форме.
contentSapSailingAnalytics2=Инструмент аналитики парусного спорта от компании SAP предоставляет аналитическую информацию и транспарентность миру парусного спорта, используя Технологию облака и памяти, обрабатывая данные GPS и измерения ветра в реальном времени и визуализируя содержимое в различных внешних интерфейсах, доступных из любой точки мира.
sapSailingAnalyticsReadMore=Читать далее
sapSailingAnalytics=SAP Sailing Analytics
contentSapSailingAnalytics1=Предоставляя аналитику по данным о рангах в гонке, скоростях, маневрах, ветрах и т. д. в режиме реального времени, SAP помогает упростить и демистифицировать сложный парусный спорт.
contentSapSailingAnalytics2=SAP Sailing Analytics делает мир парусного спорта понятным и прозрачным, используя облако и технологию In-Memory, обработку данных GPS и параметров ветра в реальном времени, а также визуализацию контекста в разных пользовательских интерфейсах, доступных где угодно.
sapSailingAnalyticsReadMore=См. также
sapSailingRaceManager=Менеджер регат SAP
contentSapSailingRaceManager=Менеджер регат SAP предоставляет возможность организаторам регат действовать эффективнее и лучше управлять ситуацией путем автоматизаци и упрощения задач, которые они делают вручную, а также их общения во время проведения яхтенных регат. Приложение «Комитет регат» помогает улучшить проведение регат и управление ими, чтобы помочь комитетам регат работать с более полной отдачей.
sapSailingRaceManagerReadMore=Читать далее
sapSailingRaceManager=SAP Sailing Race Manager
contentSapSailingRaceManager=Приложение SAP Sailing Race Manager повышает уровень эффективности и контроля для организаторов гонки за счет автоматизации и упрощения выполняемых вручную задач и общения во время проведения парусных регат. Приложение Race Committee помогает упростить проведение событий и управление ими, освобождая для оргкомитета время на лучшую проработку деталей.
sapSailingRaceManagerReadMore=Узнать больше
postRaceAnalytics=Пост-регатная аналитика
contentPostRaceAnalytics1=Доступ к данным собираемым во время мероприятий, связанных с парусным спортом, дает яхтсменам возможность оценить и проанализировать свои показатели, что поможет им разработать стратегии и улучшить свои показатели в парусном спорте.
contentPostRaceAnalytics2=Решения бизнес-аналитики от компании SAP предоставляют яхтсменам, тренерам, болельщикам и средствам массовой информации инструменты для просмотра и анализа архивных данных по многим регатам и гонкам. Платформа SAP HANA позволяет им узнать о типовых действиях, тенденциях и профилях яхтсменов просто, быстро и эффективно с целью оптимизации своих собственных достижений и разработки успешных стратегий для будущих регат.
postRaceAnalytics=Аналитика после гонки
contentPostRaceAnalytics1=Доступ к данным, собранным на парусных событиях, дает мореходам возможность оценить и проанализировать свои показатели, помогая разрабатывать стратегии и повышать мастерство.
contentPostRaceAnalytics2=Решения SAP Business Analytics предоставляют мореходам, тренерам, болельщикам и СМИ инструменты для просмотра и анализа исторических данных по множеству регат и гонок. SAP HANA позволяет изучать паттерны эффективности, тенденции и профили мореходов простым, быстрым и эффективным образом для оптимизации своих показателей и разработки успешных стратегий на будущие регаты.
i18nDeSolutionsTrainingHeadline=Инструмент от SAP "Улучши свои показатели в парусном спорте"– Дневник тренировок STG
i18nDeSolutionsTrainingText=Дневник тренировок STG поддерживает работу с ежедневной документацией и анализ физического состояния и тренировочных усилий спортсменов в таких областях как тренировки на воде, физические тренировки, практика хождения под парусом, психическая подготовка, теория, а также другие виды деятельности, такие как образование или путешествия.
i18nDeSolutionsTrainingHeadline=SAP Sail Better – Дневник тренировок STG
i18nDeSolutionsTrainingText=Дневник тренировок STG поддерживает ежедневное документирования и анализ физического состояния атлета и его усилий в тренировках на воде, физической подготовке, работе с лодкой, моральной, теоретической подготовке, а также других видах деятельности, таких как образование и путешествия.
strategySimulator=Тренажер стратегий
contentStrategySimulator=Выбор правильной стратегии может дать большое конкурентное преимущество во время гонки. Тренажер стратегий SAP упрощает определение лучшей стратегии хождения под парусом для различных ветровых режимов и водных течений. Поскольку ветер и течение в тренажере можно быстро изменять, надежность стратегии можно легко оценить даже в условиях изменчивой погоды.
strategySimulator=Симулятор стратегии
contentStrategySimulator=Выбор правильной стратегии может обеспечить большое конкурентное преимущество во время гонки. Симулятор стратегии упрощает определение лучшей стратегии хождения под парусом для разных атмосферных условий и водных течений. Возможность мгновенного изменения ветра и течения в симуляции позволяет легко оценить надежность стратегии даже для неопределенных погодных условий.
strategySimulatorReadMore=Узнать больше
impressum=Печать
strategySimulatorReadMore=Читать далее
@@ -112,8 +112,8 @@ eventRegattaRacesLegendWind=风力数据
eventRegattaRacesLegendVideo=视频
eventRegattaRacesLegendAudio=音频
eventSponsorsTitle=活动赞助
footerJobs=作业
footerCopyright=版权所有 © 2011-2016 SAP Sailing Analytics
footerJobs=招贤纳士
footerCopyright=版权所有 \u00A9 2011-2016 SAP Sailing Analytics
footerLanguage=SAP Sailing 语言
footerLegal=法律声明
footerPrivacy=隐私
@@ -128,7 +128,6 @@ headerSponsoring=赞助
latestRaceResultsHeadline=最新官方比赛轮次结果
latestRaceResultsIsNew=新建
latestRaceResultsIsUpdated=已更新
latestRaceResultsRaceCountLabel=结果 -
latestRaceResultsRaceCountUnit=比赛轮次
latestRaceResultsRefresh=刷新
leaderboardQuickAccessLabel=积分榜快速访问
@@ -112,7 +112,7 @@ eventRegattaRacesLegendWind=风力数据
eventRegattaRacesLegendVideo=视频
eventRegattaRacesLegendAudio=音频
eventSponsorsTitle=活动赞助
footerJobs=作业
footerJobs=招贤纳士
footerCopyright=版权所有 © 2011-2016 SAP Sailing Analytics
footerLanguage=SAP Sailing 语言
footerLegal=法律声明
@@ -128,7 +128,6 @@ headerSponsoring=赞助
latestRaceResultsHeadline=最新官方比赛轮次结果
latestRaceResultsIsNew=新建
latestRaceResultsIsUpdated=已更新
latestRaceResultsRaceCountLabel=结果 -
latestRaceResultsRaceCountUnit=比赛轮次
latestRaceResultsRefresh=刷新
leaderboardQuickAccessLabel=积分榜快速访问
@@ -224,10 +223,3 @@ strategySimulatorReadMore=了解更多
impressum=版本说明
playstoreCampaign=utm_source=sapsailing&utm_medium=solutions&utm_content=2016.02&utm_campaign=solutions&pcampaignid=2016.sapsailing.solutions
playstoreRacecommitteeApp=https://play.google.com/store/apps/details?id=com.sap.sailing.racecommittee.app
playstoreRacecommitteeBadge=https://play.google.com/intl/en/badges/images/generic/en-play-badge.png
appstoreStgTrainingstagebuch=https://itunes.apple.com/de/app/stg-trainingstagebuch/id779563635?l=en&amp;mt=8
appstoreBadgeSuffix=_zh
File diff suppressed because one or more lines are too long
@@ -0,0 +1,861 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-04-18T13:55:52Z" original="/usr/sap/ljs/app/Converter_620566382034089997/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages.properties" source-language="en" target-language="en">
<header>
<skl>
<internal-file crc="1a395915e09df129e5e910632f33160a" form="base64">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</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-04-14T07:31:26Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.0.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="chartSelectionHint" resname="chartSelectionHint">
<source>Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart. </source>
<target>Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart. </target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="chooseALanguage" resname="chooseALanguage">
<source>Choose a language</source>
<target>Choose a language</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="events" resname="events">
<source>Events</source>
<target>Events</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="home" resname="home">
<source>Home</source>
<target>Home</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="aboutUs" resname="aboutUs">
<source>About us</source>
<target>About us</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contact" resname="contact">
<source>Contact</source>
<target>Contact</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sponsoring" resname="sponsoring">
<source>Sponsoring</source>
<target>Sponsoring</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutions" resname="solutions">
<source>Solutions</source>
<target>Solutions</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="blog" resname="blog">
<source>Blog</source>
<target>Blog</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="german" resname="german">
<source>Deutsch</source>
<target>Deutsch</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="english" resname="english">
<source>English</source>
<target>English</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="fullEventSchedule" resname="fullEventSchedule">
<source>Full event schedule</source>
<target>Full event schedule</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="officalEventWebsite" resname="officalEventWebsite">
<source>Official event website</source>
<target>Official event website</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="leg" resname="leg">
<source>Leg</source>
<target>Leg</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="races" resname="races">
<source>Races</source>
<target>Races</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="moreInfo" resname="moreInfo">
<source>More info</source>
<target>More info</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="viewAnalysis" resname="viewAnalysis">
<source>View analysis </source>
<target>View analysis </target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="overallLeaderboard" resname="overallLeaderboard">
<source>Overall leaderboard</source>
<target>Overall leaderboard</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="pleaseEnterASearchTerm" resname="pleaseEnterASearchTerm">
<source>Please enter a search term.</source>
<target>Please enter a search term.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="pleaseTryAgain" resname="pleaseTryAgain">
<source>Please try again...</source>
<target>Please try again...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="reloadPage" resname="reloadPage">
<source>Reload page</source>
<target>Reload page</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorMessageLoadingData" resname="errorMessageLoadingData">
<source>An error occured while loading the data for this page.</source>
<target>An error occured while loading the data for this page.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorMessageNoSuchLeaderboard" resname="errorMessageNoSuchLeaderboard">
<source>Could not find a leaderboard with this name.</source>
<target>Could not find a leaderboard with this name.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="raceNotScheduled" resname="raceNotScheduled">
<source>Not scheduled.</source>
<target>Not scheduled.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaDetails" resname="regattaDetails">
<source>Regatta details</source>
<target>Regatta details</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regatta" resname="regatta">
<source>Regatta</source>
<target>Regatta</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="competitorsAnalytics" resname="competitorsAnalytics">
<source>Competitors Analytics</source>
<target>Competitors Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="chooseChart" resname="chooseChart">
<source>Choose chart type</source>
<target>Choose chart type</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="series" resname="series">
<source>Series</source>
<target>Series</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaLeaderboards" resname="regattaLeaderboards">
<source>Regatta leaderboards</source>
<target>Regatta leaderboards</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="features" resname="features">
<source>Features</source>
<target>Features</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="releaseNotes" resname="releaseNotes">
<source>Release notes</source>
<target>Release notes</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="whatsNew" resname="whatsNew">
<source>What''s new</source>
<target>What''s new</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="overview" resname="overview">
<source>Overview</source>
<target>Overview</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapSailing" resname="sapSailing">
<source>SAP Sailing</source>
<target>SAP Sailing</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="search" resname="search">
<source>Search</source>
<target>Search</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="startSimulator" resname="startSimulator">
<source>Start Simulator</source>
<target>Start Simulator</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownStartingInDays" resname="countdownStartingInDays">
<source>Days</source>
<target>Days</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownDays" resname="countdownDays">
<source>Days</source>
<target>Days</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownHours" resname="countdownHours">
<source>Hrs</source>
<target>Hrs</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownMinutes" resname="countdownMinutes">
<source>Min</source>
<target>Min</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownSeconds" resname="countdownSeconds">
<source>Sec</source>
<target>Sec</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownDay" resname="countdownDay">
<source>Day</source>
<target>Day</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownHour" resname="countdownHour">
<source>Hour</source>
<target>Hour</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownMinute" resname="countdownMinute">
<source>Min</source>
<target>Min</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownSecond" resname="countdownSecond">
<source>Sec</source>
<target>Sec</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="live" resname="live">
<source>Live</source>
<target>Live</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="finished" resname="finished">
<source>Finished</source>
<target>Finished</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="watchNow" resname="watchNow">
<source>Watch now</source>
<target>Watch now</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="lastUpdate" resname="lastUpdate">
<source>Last Update</source>
<target>Last Update</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="leaderboard" resname="leaderboard">
<source>Leaderboard</source>
<target>Leaderboard</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxNewsUpdateMoreLink" resname="boxNewsUpdateMoreLink">
<source>Report news</source>
<target>Report news</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxNewsUpdateTitle" resname="boxNewsUpdateTitle">
<source>News Update</source>
<target>News Update</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarted1" resname="boxUpcomingRacesCountdownStarted1">
<source>Started</source>
<target>Started</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarted2" resname="boxUpcomingRacesCountdownStarted2">
<source>hrs and</source>
<target>hrs and</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarted3" resname="boxUpcomingRacesCountdownStarted3">
<source>minutes ago</source>
<target>minutes ago</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarting1" resname="boxUpcomingRacesCountdownStarting1">
<source>Starting in</source>
<target>Starting in</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarting2" resname="boxUpcomingRacesCountdownStarting2">
<source>hrs and</source>
<target>hrs and</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarting3" resname="boxUpcomingRacesCountdownStarting3">
<source>minutes</source>
<target>minutes</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesMoreLink" resname="boxUpcomingRacesMoreLink">
<source>Event Schedule</source>
<target>Event Schedule</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesTitle" resname="boxUpcomingRacesTitle">
<source>Upcoming Races Today</source>
<target>Upcoming Races Today</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxWeather" resname="boxWeather">
<source>Weather</source>
<target>Weather</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxWeatherUnit" resname="boxWeatherUnit">
<source>KTS</source>
<target>KTS</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="defaultTitle" resname="defaultTitle">
<source>SAP Sailing Analytics</source>
<target>SAP Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventHeaderMedia" resname="eventHeaderMedia">
<source>Media</source>
<target>Media</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventHeaderOverview" resname="eventHeaderOverview">
<source>Overview</source>
<target>Overview</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventHeaderRaces" resname="eventHeaderRaces">
<source>Schedule</source>
<target>Schedule</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventHeaderRegattas" resname="eventHeaderRegattas">
<source>Regattas</source>
<target>Regattas</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesHeaderOverview" resname="seriesHeaderOverview">
<source>About the Series</source>
<target>About the Series</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesHeaderUpcoming" resname="seriesHeaderUpcoming">
<source>Upcoming</source>
<target>Upcoming</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesHeaderRecent" resname="seriesHeaderRecent">
<source>Recent Events</source>
<target>Recent Events</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesHeaderLeaderboard" resname="seriesHeaderLeaderboard">
<source>Leaderboard</source>
<target>Leaderboard</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesOverviewHeaderRecent" resname="seriesOverviewHeaderRecent">
<source>Latest Series Events</source>
<target>Latest Series Events</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesOverviewReadMore" resname="seriesOverviewReadMore">
<source>More</source>
<target>More</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventsOverviewRecentEvents" resname="eventsOverviewRecentEvents">
<source>Events</source>
<target>Events</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventsOverviewRecentCountries" resname="eventsOverviewRecentCountries">
<source>Countries</source>
<target>Countries</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventsOverviewRecentSailors" resname="eventsOverviewRecentSailors">
<source>Sailors</source>
<target>Sailors</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventsOverviewRecentTrackedRaces" resname="eventsOverviewRecentTrackedRaces">
<source>Tracked Races</source>
<target>Tracked Races</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventResultsHeadline" resname="eventResultsHeadline">
<source>Winners and Results</source>
<target>Winners and Results</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventResultsBoatClassesDropDown" resname="eventResultsBoatClassesDropDown">
<source>All Boat Classes</source>
<target>All Boat Classes</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewMoreEvents" resname="eventOverviewMoreEvents">
<source>More Events</source>
<target>More Events</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewRecentEvents" resname="eventOverviewRecentEvents">
<source>Recent Events</source>
<target>Recent Events</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingDate" resname="eventOverviewUpcomingDate">
<source>Date</source>
<target>Date</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingEvent" resname="eventOverviewUpcomingEvent">
<source>Event</source>
<target>Event</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingLocation" resname="eventOverviewUpcomingLocation">
<source>Location</source>
<target>Location</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingSchedule" resname="eventOverviewUpcomingSchedule">
<source>Upcoming Schedule</source>
<target>Upcoming Schedule</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingSeries" resname="eventOverviewUpcomingSeries">
<source>Series</source>
<target>Series</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingTeaser" resname="eventOverviewUpcomingTeaser">
<source>More Events To Be Announced Soon!</source>
<target>More Events To Be Announced Soon!</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventQuickfinderTitle" resname="eventQuickfinderTitle">
<source>Event Quick-Finder</source>
<target>Event Quick-Finder</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaHeaderLeaderboard" resname="eventRegattaHeaderLeaderboard">
<source>Leaderboard</source>
<target>Leaderboard</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaHeaderRaceRaces" resname="eventRegattaHeaderRaceRaces">
<source>Races</source>
<target>Races</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaListAllBoatClasses" resname="eventRegattaListAllBoatClasses">
<source>All boat classes</source>
<target>All boat classes</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardCompetitor" resname="eventRegattaLeaderboardCompetitor">
<source>Competitor</source>
<target>Competitor</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardExtendLeaderboard" resname="eventRegattaLeaderboardExtendLeaderboard">
<source>Extend Leaderboard</source>
<target>Extend Leaderboard</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardFinishedMessage" resname="eventRegattaLeaderboardFinishedMessage">
<source>No more races</source>
<target>No more races</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardLastScoreUpdate" resname="eventRegattaLeaderboardLastScoreUpdate">
<source>Last Score Update</source>
<target>Last Score Update</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardName" resname="eventRegattaLeaderboardName">
<source>Name</source>
<target>Name</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardRegattaRank" resname="eventRegattaLeaderboardRegattaRank">
<source>Regatta Rank</source>
<target>Regatta Rank</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardTotalPoints" resname="eventRegattaLeaderboardTotalPoints">
<source>Total Points</source>
<target>Total Points</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceWatch" resname="eventRegattaRaceWatch">
<source>Watch live</source>
<target>Watch live</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceAnalyse" resname="eventRegattaRaceAnalyse">
<source>Analyze Race</source>
<target>Analyze Race</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceNotTracked" resname="eventRegattaRaceNotTracked">
<source>Not Tracked</source>
<target>Not Tracked</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceFinished" resname="eventRegattaRaceFinished">
<source>Finished at:</source>
<target>Finished at:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceStarted" resname="eventRegattaRaceStarted">
<source>Started at:</source>
<target>Started at:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceScheduled" resname="eventRegattaRaceScheduled">
<source>Scheduled for:</source>
<target>Scheduled for:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceRace" resname="eventRegattaRaceRace">
<source>Race</source>
<target>Race</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceWind" resname="eventRegattaRaceWind">
<source>Wind Strength:</source>
<target>Wind Strength:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceWinner" resname="eventRegattaRaceWinner">
<source>Winner</source>
<target>Winner</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceLeader" resname="eventRegattaRaceLeader">
<source>Leader</source>
<target>Leader</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRacesLegendGps" resname="eventRegattaRacesLegendGps">
<source>Tracking</source>
<target>Tracking</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRacesLegendWind" resname="eventRegattaRacesLegendWind">
<source>Wind Data</source>
<target>Wind Data</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRacesLegendVideo" resname="eventRegattaRacesLegendVideo">
<source>Video</source>
<target>Video</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRacesLegendAudio" resname="eventRegattaRacesLegendAudio">
<source>Audio</source>
<target>Audio</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventSponsorsTitle" resname="eventSponsorsTitle">
<source>Event Sponsorships</source>
<target>Event Sponsorships</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerJobs" resname="footerJobs">
<source>Jobs</source>
<target>Jobs</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerCopyright" resname="footerCopyright">
<source>© 2011-2016 SAP Sailing Analytics</source>
<target>© 2011-2016 SAP Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerLanguage" resname="footerLanguage">
<source>SAP Sailing in</source>
<target>SAP Sailing in</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerLegal" resname="footerLegal">
<source>Legal Disclosure</source>
<target>Legal Disclosure</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerPrivacy" resname="footerPrivacy">
<source>Privacy</source>
<target>Privacy</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerFeedback" resname="footerFeedback">
<source>Feedback</source>
<target>Feedback</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerEvents" resname="headerEvents">
<source>Events</source>
<target>Events</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerHome" resname="headerHome">
<source>Home</source>
<target>Home</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerLogo" resname="headerLogo">
<source>Sailing Analytics</source>
<target>Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerSearch" resname="headerSearch">
<source>Search</source>
<target>Search</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerSearchPlaceholder" resname="headerSearchPlaceholder">
<source>Search </source>
<target>Search </target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerSolutions" resname="headerSolutions">
<source>Solutions</source>
<target>Solutions</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerSponsoring" resname="headerSponsoring">
<source>Sponsoring</source>
<target>Sponsoring</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="latestRaceResultsHeadline" resname="latestRaceResultsHeadline">
<source>Latest Official Race Results</source>
<target>Latest Official Race Results</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="latestRaceResultsIsNew" resname="latestRaceResultsIsNew">
<source>New</source>
<target>New</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="latestRaceResultsIsUpdated" resname="latestRaceResultsIsUpdated">
<source>Updated</source>
<target>Updated</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="latestRaceResultsRaceCountUnit" resname="latestRaceResultsRaceCountUnit">
<source>races</source>
<target>races</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="latestRaceResultsRefresh" resname="latestRaceResultsRefresh">
<source>refresh</source>
<target>refresh</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="leaderboardQuickAccessLabel" resname="leaderboardQuickAccessLabel">
<source>Leaderboard Quick Access</source>
<target>Leaderboard Quick Access</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainEventShowAll" resname="mainEventShowAll">
<source>Show All Events</source>
<target>Show All Events</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainEventTitle" resname="mainEventTitle">
<source>Latest Events from the Sailing World</source>
<target>Latest Events from the Sailing World</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainMediaSubtitle" resname="mainMediaSubtitle">
<source>Get lost in the latest and most beautiful impressions from your favorite sailing event.</source>
<target>Get lost in the latest and most beautiful impressions from your favorite sailing event.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainMediaTitle" resname="mainMediaTitle">
<source>Photographers love Sailing</source>
<target>Photographers love Sailing</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainMediaVideosSubtitle" resname="mainMediaVideosSubtitle">
<source>Immerse yourself in the world of sailing and check out our latest events for more videos.</source>
<target>Immerse yourself in the world of sailing and check out our latest events for more videos.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainMediaVideosTitle" resname="mainMediaVideosTitle">
<source>Recent Video Entries</source>
<target>Recent Video Entries</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainSponsorsReadMore" resname="mainSponsorsReadMore">
<source>Read More</source>
<target>Read More</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mediaTeaserPhotosTitle" resname="mediaTeaserPhotosTitle">
<source>Photos</source>
<target>Photos</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mediaTeaserVideosTitle" resname="mediaTeaserVideosTitle">
<source>Videos</source>
<target>Videos</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaCompetitors" resname="regattaCompetitors">
<source>Competitors</source>
<target>Competitors</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaRaces" resname="regattaRaces">
<source>Races</source>
<target>Races</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaTracked" resname="regattaTracked">
<source>Tracked</source>
<target>Tracked</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaRegattaStarts" resname="regattaRegattaStarts">
<source>Regatta will start</source>
<target>Regatta will start</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaPts" resname="regattaPts">
<source>Pts.</source>
<target>Pts.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaCourse" resname="regattaCourse">
<source>Course</source>
<target>Course</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaArea" resname="regattaArea">
<source>Area</source>
<target>Area</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaFinishedAt" resname="regattaFinishedAt">
<source>Finished at</source>
<target>Finished at</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaScheduledAt" resname="regattaScheduledAt">
<source>Scheduled at</source>
<target>Scheduled at</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaStartedAt" resname="regattaStartedAt">
<source>Started at</source>
<target>Started at</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattasResultsTitle" resname="regattasResultsTitle">
<source>Winner and Results</source>
<target>Winner and Results</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultHeaderButton" resname="searchResultHeaderButton">
<source>Search</source>
<target>Search</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultHeaderLabel" resname="searchResultHeaderLabel">
<source>Your Search</source>
<target>Your Search</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultsFound" resname="searchResultsFound">
<source>result(s) found for</source>
<target>result(s) found for</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultHeaderPlaceholder" resname="searchResultHeaderPlaceholder">
<source>Type in your searchkey</source>
<target>Type in your searchkey</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultMore" resname="searchResultMore">
<source>More</source>
<target>More</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSearch" resname="searchResultSearch">
<source>Search</source>
<target>Search</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSearchAgain" resname="searchResultSearchAgain">
<source>Search again</source>
<target>Search again</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSortLabel" resname="searchResultSortLabel">
<source>Sort by</source>
<target>Sort by</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSortNewest" resname="searchResultSortNewest">
<source>Recent</source>
<target>Recent</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSortOldest" resname="searchResultSortOldest">
<source>Oldest</source>
<target>Oldest</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSortRelevance" resname="searchResultSortRelevance">
<source>Relevance</source>
<target>Relevance</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultCount" resname="searchResultCount">
<source>About 2,450 results where found for ''Schnitzel''</source>
<target>About 2,450 results where found for ''Schnitzel''</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sharingEmail" resname="sharingEmail">
<source>Send an email</source>
<target>Send an email</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sharingFacebook" resname="sharingFacebook">
<source>Share on Facebook</source>
<target>Share on Facebook</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sharingTwitter" resname="sharingTwitter">
<source>Tweet about it</source>
<target>Tweet about it</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="socialFooterShare" resname="socialFooterShare">
<source>Share this on </source>
<target>Share this on </target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="socialFooterTitle" resname="socialFooterTitle">
<source>Recommend SAP Sailing Analytics</source>
<target>Recommend SAP Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSISHeadline" resname="solutionsSISHeadline">
<source>SAP in Sailing</source>
<target>SAP in Sailing</target>
<note annotates="source" from="Developer">SOLUTIONS</note>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSAPHeadline" resname="solutionsSAPHeadline">
<source>SAP Sailing Analytics</source>
<target>SAP Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsRaceHeadline" resname="solutionsRaceHeadline">
<source>SAP Sailing Race Manager</source>
<target>SAP Sailing Race Manager</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsPostHeadline" resname="solutionsPostHeadline">
<source>Post-Race Analytics</source>
<target>Post-Race Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsTrainingHeadline" resname="solutionsTrainingHeadline">
<source>Training Diary</source>
<target>Training Diary</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSimulatorHeadline" resname="solutionsSimulatorHeadline">
<source>Strategy Simulator</source>
<target>Strategy Simulator</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapInSailing" resname="sapInSailing">
<source>SAP in Sailing</source>
<target>SAP in Sailing</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing1" resname="contentSapInSailing1">
<source>Sailing provides the perfect platform for SAP to showcase solutions and help the sport run like never before. SAP’s involvement in the sport has transformed the sailing experience by providing tools, which:</source>
<target>Sailing provides the perfect platform for SAP to showcase solutions and help the sport run like never before. SAP’s involvement in the sport has transformed the sailing experience by providing tools, which:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing2" resname="contentSapInSailing2">
<source>Help sailors analyze performance and optimize strategy</source>
<target>Help sailors analyze performance and optimize strategy</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing3" resname="contentSapInSailing3">
<source>Bring fans closer to the action</source>
<target>Bring fans closer to the action</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing4" resname="contentSapInSailing4">
<source>Provide the media with information and insights to deliver a greater informed commentary</source>
<target>Provide the media with information and insights to deliver a greater informed commentary</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing5" resname="contentSapInSailing5">
<source>SAP has a longstanding involvement with sailing and has established a portfolio spanning across teams and regattas, including:</source>
<target>SAP has a longstanding involvement with sailing and has established a portfolio spanning across teams and regattas, including:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing6" resname="contentSapInSailing6">
<source>Official Technology Partner of Travemünder Woche</source>
<target>Official Technology Partner of Travemünder Woche</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing7" resname="contentSapInSailing7">
<source>Technical Partner of the European Sailing Leagues</source>
<target>Technical Partner of the European Sailing Leagues</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing8" resname="contentSapInSailing8">
<source>Title sponsor of the SAP Extreme Sailing Team</source>
<target>Title sponsor of the SAP Extreme Sailing Team</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing9" resname="contentSapInSailing9">
<source>Official Technical Partner of the Extreme Sailing Series</source>
<target>Official Technical Partner of the Extreme Sailing Series</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing10" resname="contentSapInSailing10">
<source>Premium Partner of Germany’s national sailing team, Audi Sailing Team Germany</source>
<target>Premium Partner of Germany’s national sailing team, Audi Sailing Team Germany</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing11" resname="contentSapInSailing11">
<source>Premium Partner of the world’s largest regatta, Kieler Woche (Kiel Week)</source>
<target>Premium Partner of the world’s largest regatta, Kieler Woche (Kiel Week)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing12" resname="contentSapInSailing12">
<source>Title sponsor of the SAP 5O5 World Championships</source>
<target>Title sponsor of the SAP 5O5 World Championships</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSAPText1" resname="solutionsSAPText1">
<source>By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing.</source>
<target>By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSAPText2" resname="solutionsSAPText2">
<source>SAP Sailing Analytics provide insights and transparency to the world of sailing by utilizing Cloud and In-Memory Technology, processing GPS and wind measurement data in real time and visualizing contents in various frontends accessible from anywhere.</source>
<target>SAP Sailing Analytics provide insights and transparency to the world of sailing by utilizing Cloud and In-Memory Technology, processing GPS and wind measurement data in real time and visualizing contents in various frontends accessible from anywhere.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsRaceText" resname="solutionsRaceText">
<source>The SAP Race Committee App delivers greater efficiency and control to race organizers by automating and simplifying their manual tasks and communication during running sailing regattas. The Race Committee App helps simplify the operation of running and managing race events to help race committees operate smarter.</source>
<target>The SAP Race Committee App delivers greater efficiency and control to race organizers by automating and simplifying their manual tasks and communication during running sailing regattas. The Race Committee App helps simplify the operation of running and managing race events to help race committees operate smarter.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsPostText" resname="solutionsPostText">
<source>Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.<ph id="1">&lt;br&gt;</ph> SAP Business Analytics solutions provide sailors, coaches, fans and media with tools to browse and analyse historical data across many regattas and races. SAP HANA allows them to learn about performance patterns, tendencies and sailor profiles in a simple, fast and efficient way in order to optimize their own performance and develop successful strategies for future regattas.</source>
<target>Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.<ph id="1">&lt;br&gt;</ph> SAP Business Analytics solutions provide sailors, coaches, fans and media with tools to browse and analyse historical data across many regattas and races. SAP HANA allows them to learn about performance patterns, tendencies and sailor profiles in a simple, fast and efficient way in order to optimize their own performance and develop successful strategies for future regattas.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsTrainingText" resname="solutionsTrainingText">
<source>The STG Training Diary supports the daily documentation and analysis of an athlete''s physical condition and training efforts in the areas of water training, physical training, boat work, mental, theory as well as other activities like education or travel.</source>
<target>The STG Training Diary supports the daily documentation and analysis of an athlete''s physical condition and training efforts in the areas of water training, physical training, boat work, mental, theory as well as other activities like education or travel.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSimulatorText" resname="solutionsSimulatorText">
<source>Choosing the right strategy can provide great competitive advantage during a race. The Strategy Simulator simplifies determining the best sailing strategy for various wind conditions and water currents. Since wind and current can be changed in the simulation right away, the robustness of a strategy can be easily evaluated even for uncertain weather conditions.</source>
<target>Choosing the right strategy can provide great competitive advantage during a race. The Strategy Simulator simplifies determining the best sailing strategy for various wind conditions and water currents. Since wind and current can be changed in the simulation right away, the robustness of a strategy can be easily evaluated even for uncertain weather conditions.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapSailingAnalytics" resname="sapSailingAnalytics">
<source>SAP Sailing Analytics</source>
<target>SAP Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapSailingAnalytics1" resname="contentSapSailingAnalytics1">
<source>By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing.</source>
<target>By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapSailingAnalytics2" resname="contentSapSailingAnalytics2">
<source>SAP Sailing Analytics provide insights and transparency to the world of sailing by utilizing Cloud and In-Memory Technology, processing GPS and wind measurement data in real time and visualizing contents in various frontends accessible from anywhere.</source>
<target>SAP Sailing Analytics provide insights and transparency to the world of sailing by utilizing Cloud and In-Memory Technology, processing GPS and wind measurement data in real time and visualizing contents in various frontends accessible from anywhere.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapSailingAnalyticsReadMore" resname="sapSailingAnalyticsReadMore">
<source>Read More</source>
<target>Read More</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapSailingRaceManager" resname="sapSailingRaceManager">
<source>SAP Sailing Race Manager</source>
<target>SAP Sailing Race Manager</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapSailingRaceManager" resname="contentSapSailingRaceManager">
<source>The SAP Sailing Race Manager delivers greater efficiency and control to race organizers by automating and simplifying their manual tasks and communication during running sailing regattas. The Race Committee App helps simplify the operation of running and managing race events to help race committees operate smarter.</source>
<target>The SAP Sailing Race Manager delivers greater efficiency and control to race organizers by automating and simplifying their manual tasks and communication during running sailing regattas. The Race Committee App helps simplify the operation of running and managing race events to help race committees operate smarter.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapSailingRaceManagerReadMore" resname="sapSailingRaceManagerReadMore">
<source>Learn More</source>
<target>Learn More</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="postRaceAnalytics" resname="postRaceAnalytics">
<source>Post-Race Analytics</source>
<target>Post-Race Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentPostRaceAnalytics1" resname="contentPostRaceAnalytics1">
<source>Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.</source>
<target>Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentPostRaceAnalytics2" resname="contentPostRaceAnalytics2">
<source>SAP Business Analytics solutions provide sailors, coaches, fans and media with tools to browse and analyse historical data across many regattas and races. SAP HANA allows them to learn about performance patterns, tendencies and sailor profiles in a simple, fast and efficient way in order to optimize their own performance and develop successful strategies for future regattas.</source>
<target>SAP Business Analytics solutions provide sailors, coaches, fans and media with tools to browse and analyse historical data across many regattas and races. SAP HANA allows them to learn about performance patterns, tendencies and sailor profiles in a simple, fast and efficient way in order to optimize their own performance and develop successful strategies for future regattas.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="i18nDeSolutionsTrainingHeadline" resname="i18nDeSolutionsTrainingHeadline">
<source>SAP Sail Better – STG Training Diary</source>
<target>SAP Sail Better – STG Training Diary</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="i18nDeSolutionsTrainingText" resname="i18nDeSolutionsTrainingText">
<source>The STG Training Diary supports the daily documentation and analysis of an athlete’s physical condition and training efforts in the areas of water training, physical training, boat work, mental, theory as well as other activities like education or travel.</source>
<target>The STG Training Diary supports the daily documentation and analysis of an athlete’s physical condition and training efforts in the areas of water training, physical training, boat work, mental, theory as well as other activities like education or travel.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="strategySimulator" resname="strategySimulator">
<source>Strategy Simulator</source>
<target>Strategy Simulator</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentStrategySimulator" resname="contentStrategySimulator">
<source>Choosing the right strategy can provide great competitive advantage during a race. The Strategy Simulator simplifies determining the best sailing strategy for various wind conditions and water currents. Since wind and current can be changed in the simulation right away, the robustness of a strategy can be easily evaluated even for uncertain weather conditions.</source>
<target>Choosing the right strategy can provide great competitive advantage during a race. The Strategy Simulator simplifies determining the best sailing strategy for various wind conditions and water currents. Since wind and current can be changed in the simulation right away, the robustness of a strategy can be easily evaluated even for uncertain weather conditions.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="strategySimulatorReadMore" resname="strategySimulatorReadMore">
<source>Learn More</source>
<target>Learn More</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="impressum" resname="impressum">
<source>Imprint</source>
<target>Imprint</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,861 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-04-18T13:55:53Z" original="/usr/sap/ljs/app/Converter_620566382034089997/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages.properties" source-language="en" target-language="ru">
<header>
<skl>
<internal-file crc="1a395915e09df129e5e910632f33160a" form="base64">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</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-04-14T07:31:26Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.0.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="chartSelectionHint" resname="chartSelectionHint">
<source>Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart. </source>
<target state="signed-off">Совет: таблицу лидеров (на вкладке ТАБЛИЦА ЛИДЕРОВ) также можно использовать для выбора участников, отображаемых в диаграмме.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="chooseALanguage" resname="chooseALanguage">
<source>Choose a language</source>
<target state="signed-off">Выбор языка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="events" resname="events">
<source>Events</source>
<target state="signed-off">События</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="home" resname="home">
<source>Home</source>
<target state="signed-off">Главная</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="aboutUs" resname="aboutUs">
<source>About us</source>
<target state="signed-off">О нас</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contact" resname="contact">
<source>Contact</source>
<target state="signed-off">Контакт</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sponsoring" resname="sponsoring">
<source>Sponsoring</source>
<target state="signed-off">Финансовая поддержка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutions" resname="solutions">
<source>Solutions</source>
<target state="signed-off">Решения</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="blog" resname="blog">
<source>Blog</source>
<target state="signed-off">Блог</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="german" resname="german">
<source>Deutsch</source>
<target state="signed-off">Deutsch</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="english" resname="english">
<source>English</source>
<target state="signed-off">English</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="fullEventSchedule" resname="fullEventSchedule">
<source>Full event schedule</source>
<target state="signed-off">Полное расписание события</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="officalEventWebsite" resname="officalEventWebsite">
<source>Official event website</source>
<target state="signed-off">Официальный веб-сайт события</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="leg" resname="leg">
<source>Leg</source>
<target state="signed-off">Отрезок</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="races" resname="races">
<source>Races</source>
<target state="signed-off">Гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="moreInfo" resname="moreInfo">
<source>More info</source>
<target state="signed-off">Больше сведений</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="viewAnalysis" resname="viewAnalysis">
<source>View analysis </source>
<target state="signed-off">Просмотреть анализ </target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="overallLeaderboard" resname="overallLeaderboard">
<source>Overall leaderboard</source>
<target state="signed-off">Общая таблица лидеров</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="pleaseEnterASearchTerm" resname="pleaseEnterASearchTerm">
<source>Please enter a search term.</source>
<target state="signed-off">Введите запрос поиска.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="pleaseTryAgain" resname="pleaseTryAgain">
<source>Please try again...</source>
<target state="signed-off">Повторите попытку...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="reloadPage" resname="reloadPage">
<source>Reload page</source>
<target state="signed-off">Перезагрузить страницу</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorMessageLoadingData" resname="errorMessageLoadingData">
<source>An error occured while loading the data for this page.</source>
<target state="signed-off">При загрузке данных для этой страницы возникла ошибка.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorMessageNoSuchLeaderboard" resname="errorMessageNoSuchLeaderboard">
<source>Could not find a leaderboard with this name.</source>
<target state="signed-off">Не удалось найти таблицу лидеров с этим названием.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="raceNotScheduled" resname="raceNotScheduled">
<source>Not scheduled.</source>
<target state="signed-off">Не запланировано.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaDetails" resname="regattaDetails">
<source>Regatta details</source>
<target state="signed-off">Подробности регаты</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regatta" resname="regatta">
<source>Regatta</source>
<target state="signed-off">Регата</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="competitorsAnalytics" resname="competitorsAnalytics">
<source>Competitors Analytics</source>
<target state="signed-off">Анализ участников</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="chooseChart" resname="chooseChart">
<source>Choose chart type</source>
<target state="signed-off">Выберите тип диаграммы</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="series" resname="series">
<source>Series</source>
<target state="signed-off">Серия</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaLeaderboards" resname="regattaLeaderboards">
<source>Regatta leaderboards</source>
<target state="signed-off">Таблицы лидеров регаты</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="features" resname="features">
<source>Features</source>
<target state="signed-off">Характеристики</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="releaseNotes" resname="releaseNotes">
<source>Release notes</source>
<target state="signed-off">Примечания к выпуску</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="whatsNew" resname="whatsNew">
<source>What''s new</source>
<target state="signed-off">Новые возможности</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="overview" resname="overview">
<source>Overview</source>
<target state="signed-off">Обзор</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapSailing" resname="sapSailing">
<source>SAP Sailing</source>
<target state="signed-off">SAP Sailing</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="search" resname="search">
<source>Search</source>
<target state="signed-off">Поиск</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="startSimulator" resname="startSimulator">
<source>Start Simulator</source>
<target state="signed-off">Запустить симулятор</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownStartingInDays" resname="countdownStartingInDays">
<source>Days</source>
<target state="signed-off">дн.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownDays" resname="countdownDays">
<source>Days</source>
<target state="signed-off">дн.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownHours" resname="countdownHours">
<source>Hrs</source>
<target state="signed-off">ч.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownMinutes" resname="countdownMinutes">
<source>Min</source>
<target state="signed-off">мин.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownSeconds" resname="countdownSeconds">
<source>Sec</source>
<target state="signed-off">сек.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownDay" resname="countdownDay">
<source>Day</source>
<target state="signed-off">дн.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownHour" resname="countdownHour">
<source>Hour</source>
<target state="signed-off">ч.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownMinute" resname="countdownMinute">
<source>Min</source>
<target state="signed-off">мин.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="countdownSecond" resname="countdownSecond">
<source>Sec</source>
<target state="signed-off">сек.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="live" resname="live">
<source>Live</source>
<target state="signed-off">Активно</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="finished" resname="finished">
<source>Finished</source>
<target state="signed-off">Завершено</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="watchNow" resname="watchNow">
<source>Watch now</source>
<target state="signed-off">Смотреть сейчас</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="lastUpdate" resname="lastUpdate">
<source>Last Update</source>
<target state="signed-off">Последнее обновление</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="leaderboard" resname="leaderboard">
<source>Leaderboard</source>
<target state="signed-off">Таблица лидеров</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxNewsUpdateMoreLink" resname="boxNewsUpdateMoreLink">
<source>Report news</source>
<target state="signed-off">Сообщить новости</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxNewsUpdateTitle" resname="boxNewsUpdateTitle">
<source>News Update</source>
<target state="signed-off">Обновление новостей</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarted1" resname="boxUpcomingRacesCountdownStarted1">
<source>Started</source>
<target state="signed-off">Начато</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarted2" resname="boxUpcomingRacesCountdownStarted2">
<source>hrs and</source>
<target state="signed-off">ч. и</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarted3" resname="boxUpcomingRacesCountdownStarted3">
<source>minutes ago</source>
<target state="signed-off">мин. назад</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarting1" resname="boxUpcomingRacesCountdownStarting1">
<source>Starting in</source>
<target state="signed-off">Начало через</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarting2" resname="boxUpcomingRacesCountdownStarting2">
<source>hrs and</source>
<target state="signed-off">ч.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesCountdownStarting3" resname="boxUpcomingRacesCountdownStarting3">
<source>minutes</source>
<target state="signed-off">мин.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesMoreLink" resname="boxUpcomingRacesMoreLink">
<source>Event Schedule</source>
<target state="signed-off">Расписание событий</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxUpcomingRacesTitle" resname="boxUpcomingRacesTitle">
<source>Upcoming Races Today</source>
<target state="signed-off">Предстоящие сегодня гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxWeather" resname="boxWeather">
<source>Weather</source>
<target state="signed-off">Погода</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="boxWeatherUnit" resname="boxWeatherUnit">
<source>KTS</source>
<target state="signed-off">уз</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="defaultTitle" resname="defaultTitle">
<source>SAP Sailing Analytics</source>
<target state="signed-off">SAP Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventHeaderMedia" resname="eventHeaderMedia">
<source>Media</source>
<target state="signed-off">Мультимедиа</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventHeaderOverview" resname="eventHeaderOverview">
<source>Overview</source>
<target state="signed-off">Обзор</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventHeaderRaces" resname="eventHeaderRaces">
<source>Schedule</source>
<target state="signed-off">Расписание</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventHeaderRegattas" resname="eventHeaderRegattas">
<source>Regattas</source>
<target state="signed-off">Регаты</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesHeaderOverview" resname="seriesHeaderOverview">
<source>About the Series</source>
<target state="signed-off">О данной серии</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesHeaderUpcoming" resname="seriesHeaderUpcoming">
<source>Upcoming</source>
<target state="signed-off">Предстоит</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesHeaderRecent" resname="seriesHeaderRecent">
<source>Recent Events</source>
<target state="signed-off">Недавние события</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesHeaderLeaderboard" resname="seriesHeaderLeaderboard">
<source>Leaderboard</source>
<target state="signed-off">Таблица лидеров</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesOverviewHeaderRecent" resname="seriesOverviewHeaderRecent">
<source>Latest Series Events</source>
<target state="signed-off">События последней серии</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="seriesOverviewReadMore" resname="seriesOverviewReadMore">
<source>More</source>
<target state="signed-off">Больше</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventsOverviewRecentEvents" resname="eventsOverviewRecentEvents">
<source>Events</source>
<target state="signed-off">События</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventsOverviewRecentCountries" resname="eventsOverviewRecentCountries">
<source>Countries</source>
<target state="signed-off">Страны</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventsOverviewRecentSailors" resname="eventsOverviewRecentSailors">
<source>Sailors</source>
<target state="signed-off">Мореходы</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventsOverviewRecentTrackedRaces" resname="eventsOverviewRecentTrackedRaces">
<source>Tracked Races</source>
<target state="signed-off">Отслеживаемые гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventResultsHeadline" resname="eventResultsHeadline">
<source>Winners and Results</source>
<target state="signed-off">Победители и результаты</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventResultsBoatClassesDropDown" resname="eventResultsBoatClassesDropDown">
<source>All Boat Classes</source>
<target state="signed-off">Все классы лодок</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewMoreEvents" resname="eventOverviewMoreEvents">
<source>More Events</source>
<target state="signed-off">Больше событий</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewRecentEvents" resname="eventOverviewRecentEvents">
<source>Recent Events</source>
<target state="signed-off">Недавние события</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingDate" resname="eventOverviewUpcomingDate">
<source>Date</source>
<target state="signed-off">Дата</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingEvent" resname="eventOverviewUpcomingEvent">
<source>Event</source>
<target state="signed-off">Событие</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingLocation" resname="eventOverviewUpcomingLocation">
<source>Location</source>
<target state="signed-off">Место</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingSchedule" resname="eventOverviewUpcomingSchedule">
<source>Upcoming Schedule</source>
<target state="signed-off">Расписание предстоящих</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingSeries" resname="eventOverviewUpcomingSeries">
<source>Series</source>
<target state="signed-off">Серия</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventOverviewUpcomingTeaser" resname="eventOverviewUpcomingTeaser">
<source>More Events To Be Announced Soon!</source>
<target state="signed-off">Скоро будет анонсировано больше событий!</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventQuickfinderTitle" resname="eventQuickfinderTitle">
<source>Event Quick-Finder</source>
<target state="signed-off">Быстрый поиск событий</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaHeaderLeaderboard" resname="eventRegattaHeaderLeaderboard">
<source>Leaderboard</source>
<target state="signed-off">Таблица лидеров</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaHeaderRaceRaces" resname="eventRegattaHeaderRaceRaces">
<source>Races</source>
<target state="signed-off">Гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaListAllBoatClasses" resname="eventRegattaListAllBoatClasses">
<source>All boat classes</source>
<target state="signed-off">Все классы лодок</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardCompetitor" resname="eventRegattaLeaderboardCompetitor">
<source>Competitor</source>
<target state="signed-off">Участник</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardExtendLeaderboard" resname="eventRegattaLeaderboardExtendLeaderboard">
<source>Extend Leaderboard</source>
<target state="signed-off">Расширить таблицу лидеров</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardFinishedMessage" resname="eventRegattaLeaderboardFinishedMessage">
<source>No more races</source>
<target state="signed-off">Больше нет гонок</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardLastScoreUpdate" resname="eventRegattaLeaderboardLastScoreUpdate">
<source>Last Score Update</source>
<target state="signed-off">Последнее обновление оценок</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardName" resname="eventRegattaLeaderboardName">
<source>Name</source>
<target state="signed-off">Название</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardRegattaRank" resname="eventRegattaLeaderboardRegattaRank">
<source>Regatta Rank</source>
<target state="signed-off">Ранг в регате</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaLeaderboardTotalPoints" resname="eventRegattaLeaderboardTotalPoints">
<source>Total Points</source>
<target state="signed-off">Всего баллов</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceWatch" resname="eventRegattaRaceWatch">
<source>Watch live</source>
<target state="signed-off">Смотреть в реальном времени</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceAnalyse" resname="eventRegattaRaceAnalyse">
<source>Analyze Race</source>
<target state="signed-off">Анализировать гонку</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceNotTracked" resname="eventRegattaRaceNotTracked">
<source>Not Tracked</source>
<target state="signed-off">Не отслеживается</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceFinished" resname="eventRegattaRaceFinished">
<source>Finished at:</source>
<target state="signed-off">Завершено в:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceStarted" resname="eventRegattaRaceStarted">
<source>Started at:</source>
<target state="signed-off">Начато в:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceScheduled" resname="eventRegattaRaceScheduled">
<source>Scheduled for:</source>
<target state="signed-off">Запланировано на:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceRace" resname="eventRegattaRaceRace">
<source>Race</source>
<target state="signed-off">Гонка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceWind" resname="eventRegattaRaceWind">
<source>Wind Strength:</source>
<target state="signed-off">Сила ветра:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceWinner" resname="eventRegattaRaceWinner">
<source>Winner</source>
<target state="signed-off">Победитель</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRaceLeader" resname="eventRegattaRaceLeader">
<source>Leader</source>
<target state="signed-off">Лидер</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRacesLegendGps" resname="eventRegattaRacesLegendGps">
<source>Tracking</source>
<target state="signed-off">Отслеживание</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRacesLegendWind" resname="eventRegattaRacesLegendWind">
<source>Wind Data</source>
<target state="signed-off">Данные о ветре</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRacesLegendVideo" resname="eventRegattaRacesLegendVideo">
<source>Video</source>
<target state="signed-off">Видео</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventRegattaRacesLegendAudio" resname="eventRegattaRacesLegendAudio">
<source>Audio</source>
<target state="signed-off">Аудио</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="eventSponsorsTitle" resname="eventSponsorsTitle">
<source>Event Sponsorships</source>
<target state="signed-off">Спонсорская поддержка событий</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerJobs" resname="footerJobs">
<source>Jobs</source>
<target state="signed-off">Работа</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerCopyright" resname="footerCopyright">
<source>© 2011-2016 SAP Sailing Analytics</source>
<target state="signed-off">© SAP Sailing Analytics, 2011–2016.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerLanguage" resname="footerLanguage">
<source>SAP Sailing in</source>
<target state="signed-off">SAP Sailing в</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerLegal" resname="footerLegal">
<source>Legal Disclosure</source>
<target state="signed-off">Раскрытие юридической информации</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerPrivacy" resname="footerPrivacy">
<source>Privacy</source>
<target state="signed-off">Конфиденциальность</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="footerFeedback" resname="footerFeedback">
<source>Feedback</source>
<target state="signed-off">Обратная связь</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerEvents" resname="headerEvents">
<source>Events</source>
<target state="signed-off">События</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerHome" resname="headerHome">
<source>Home</source>
<target state="signed-off">Главная</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerLogo" resname="headerLogo">
<source>Sailing Analytics</source>
<target state="signed-off">Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerSearch" resname="headerSearch">
<source>Search</source>
<target state="signed-off">Поиск</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerSearchPlaceholder" resname="headerSearchPlaceholder">
<source>Search </source>
<target state="signed-off">Поиск </target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerSolutions" resname="headerSolutions">
<source>Solutions</source>
<target state="signed-off">Решения</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="headerSponsoring" resname="headerSponsoring">
<source>Sponsoring</source>
<target state="signed-off">Финансовая поддержка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="latestRaceResultsHeadline" resname="latestRaceResultsHeadline">
<source>Latest Official Race Results</source>
<target state="signed-off">Последние официальные результаты гонок</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="latestRaceResultsIsNew" resname="latestRaceResultsIsNew">
<source>New</source>
<target state="signed-off">Новое</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="latestRaceResultsIsUpdated" resname="latestRaceResultsIsUpdated">
<source>Updated</source>
<target state="signed-off">Обновлено</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="latestRaceResultsRaceCountUnit" resname="latestRaceResultsRaceCountUnit">
<source>races</source>
<target state="signed-off">гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="latestRaceResultsRefresh" resname="latestRaceResultsRefresh">
<source>refresh</source>
<target state="signed-off">обновить</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="leaderboardQuickAccessLabel" resname="leaderboardQuickAccessLabel">
<source>Leaderboard Quick Access</source>
<target state="signed-off">Быстрый доступ к таблице лидеров</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainEventShowAll" resname="mainEventShowAll">
<source>Show All Events</source>
<target state="signed-off">Показать все события</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainEventTitle" resname="mainEventTitle">
<source>Latest Events from the Sailing World</source>
<target state="signed-off">Последние события в мире парусного спорта</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainMediaSubtitle" resname="mainMediaSubtitle">
<source>Get lost in the latest and most beautiful impressions from your favorite sailing event.</source>
<target state="signed-off">Погрузитесь в новейшие и прекраснейшие впечатления от избранного события в мире парусного спорта.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainMediaTitle" resname="mainMediaTitle">
<source>Photographers love Sailing</source>
<target state="signed-off">Фотографы любят паруса</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainMediaVideosSubtitle" resname="mainMediaVideosSubtitle">
<source>Immerse yourself in the world of sailing and check out our latest events for more videos.</source>
<target state="signed-off">Погрузитесь в мир парусного спорта и просмотрите другие видео наших последних событий.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainMediaVideosTitle" resname="mainMediaVideosTitle">
<source>Recent Video Entries</source>
<target state="signed-off">Последние видеозаписи</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mainSponsorsReadMore" resname="mainSponsorsReadMore">
<source>Read More</source>
<target state="signed-off">См. также</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mediaTeaserPhotosTitle" resname="mediaTeaserPhotosTitle">
<source>Photos</source>
<target state="signed-off">Фото</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="mediaTeaserVideosTitle" resname="mediaTeaserVideosTitle">
<source>Videos</source>
<target state="signed-off">Видео</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaCompetitors" resname="regattaCompetitors">
<source>Competitors</source>
<target state="signed-off">Участники</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaRaces" resname="regattaRaces">
<source>Races</source>
<target state="signed-off">Гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaTracked" resname="regattaTracked">
<source>Tracked</source>
<target state="signed-off">Отслеживаемые</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaRegattaStarts" resname="regattaRegattaStarts">
<source>Regatta will start</source>
<target state="signed-off">Регата начнется</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaPts" resname="regattaPts">
<source>Pts.</source>
<target state="signed-off">баллов</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaCourse" resname="regattaCourse">
<source>Course</source>
<target state="signed-off">Курс</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaArea" resname="regattaArea">
<source>Area</source>
<target state="signed-off">Область</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaFinishedAt" resname="regattaFinishedAt">
<source>Finished at</source>
<target state="signed-off">Завершено в</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaScheduledAt" resname="regattaScheduledAt">
<source>Scheduled at</source>
<target state="signed-off">Запланировано в</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattaStartedAt" resname="regattaStartedAt">
<source>Started at</source>
<target state="signed-off">Начато в</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="regattasResultsTitle" resname="regattasResultsTitle">
<source>Winner and Results</source>
<target state="signed-off">Победитель и результат</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultHeaderButton" resname="searchResultHeaderButton">
<source>Search</source>
<target state="signed-off">Поиск</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultHeaderLabel" resname="searchResultHeaderLabel">
<source>Your Search</source>
<target state="signed-off">Ваш поиск</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultsFound" resname="searchResultsFound">
<source>result(s) found for</source>
<target state="signed-off">результ. по запросу</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultHeaderPlaceholder" resname="searchResultHeaderPlaceholder">
<source>Type in your searchkey</source>
<target state="signed-off">Введите ключ поиска</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultMore" resname="searchResultMore">
<source>More</source>
<target state="signed-off">Больше</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSearch" resname="searchResultSearch">
<source>Search</source>
<target state="signed-off">Поиск</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSearchAgain" resname="searchResultSearchAgain">
<source>Search again</source>
<target state="signed-off">Повторный поиск</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSortLabel" resname="searchResultSortLabel">
<source>Sort by</source>
<target state="signed-off">Сортировать по</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSortNewest" resname="searchResultSortNewest">
<source>Recent</source>
<target state="signed-off">Недавние</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSortOldest" resname="searchResultSortOldest">
<source>Oldest</source>
<target state="signed-off">Самые старые</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultSortRelevance" resname="searchResultSortRelevance">
<source>Relevance</source>
<target state="signed-off">Релевантность</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="searchResultCount" resname="searchResultCount">
<source>About 2,450 results where found for ''Schnitzel''</source>
<target state="signed-off">Около 2450 результатов по запросу ''Шницель''</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sharingEmail" resname="sharingEmail">
<source>Send an email</source>
<target state="signed-off">Отправить эл. почту</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sharingFacebook" resname="sharingFacebook">
<source>Share on Facebook</source>
<target state="signed-off">Поделиться в Facebook</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sharingTwitter" resname="sharingTwitter">
<source>Tweet about it</source>
<target state="signed-off">Твитнуть об этом</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="socialFooterShare" resname="socialFooterShare">
<source>Share this on </source>
<target state="signed-off">Поделиться в </target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="socialFooterTitle" resname="socialFooterTitle">
<source>Recommend SAP Sailing Analytics</source>
<target state="signed-off">Рекомендовать SAP Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSISHeadline" resname="solutionsSISHeadline">
<source>SAP in Sailing</source>
<target state="signed-off">SAP в парусном спорте</target>
<note annotates="source" from="Developer">SOLUTIONS</note>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSAPHeadline" resname="solutionsSAPHeadline">
<source>SAP Sailing Analytics</source>
<target state="signed-off">SAP Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsRaceHeadline" resname="solutionsRaceHeadline">
<source>SAP Sailing Race Manager</source>
<target state="signed-off">SAP Sailing Race Manager</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsPostHeadline" resname="solutionsPostHeadline">
<source>Post-Race Analytics</source>
<target state="signed-off">Аналитика после гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsTrainingHeadline" resname="solutionsTrainingHeadline">
<source>Training Diary</source>
<target state="signed-off">Дневник тренировок</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSimulatorHeadline" resname="solutionsSimulatorHeadline">
<source>Strategy Simulator</source>
<target state="signed-off">Симулятор стратегии</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapInSailing" resname="sapInSailing">
<source>SAP in Sailing</source>
<target state="signed-off">SAP в парусном спорте</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing1" resname="contentSapInSailing1">
<source>Sailing provides the perfect platform for SAP to showcase solutions and help the sport run like never before. SAP’s involvement in the sport has transformed the sailing experience by providing tools, which:</source>
<target state="signed-off">Парусный спорт предоставляет отличную платформу для демонстрации решений SAP и беспрецедентной помощи развитию спорта. Вовлеченность SAP преобразила парусный спорт, предоставив инструменты, которые:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing2" resname="contentSapInSailing2">
<source>Help sailors analyze performance and optimize strategy</source>
<target state="signed-off">Помогают мореходам анализировать эффективность и оптимизировать стратегию.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing3" resname="contentSapInSailing3">
<source>Bring fans closer to the action</source>
<target state="signed-off">Делают болельщиков ближе к действию.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing4" resname="contentSapInSailing4">
<source>Provide the media with information and insights to deliver a greater informed commentary</source>
<target state="signed-off">Предоставляют информацию и аналитику для более информированного комментирования.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing5" resname="contentSapInSailing5">
<source>SAP has a longstanding involvement with sailing and has established a portfolio spanning across teams and regattas, including:</source>
<target state="signed-off">За немалое время причастности к парусному спорту компанией SAP накоплено солидное портфолио сотрудничества с разными командами регатами, включая:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing6" resname="contentSapInSailing6">
<source>Official Technology Partner of Travemünder Woche</source>
<target state="signed-off">Официальный технологический партнер Travemünder Woche</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing7" resname="contentSapInSailing7">
<source>Technical Partner of the European Sailing Leagues</source>
<target state="signed-off">Технический партнер Европейской лиги парусного спорта</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing8" resname="contentSapInSailing8">
<source>Title sponsor of the SAP Extreme Sailing Team</source>
<target state="signed-off">Титульный спонсор команды SAP Extreme Sailing Team</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing9" resname="contentSapInSailing9">
<source>Official Technical Partner of the Extreme Sailing Series</source>
<target state="signed-off">Официальный технический партнер серии Extreme Sailing Series</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing10" resname="contentSapInSailing10">
<source>Premium Partner of Germany’s national sailing team, Audi Sailing Team Germany</source>
<target state="signed-off">Премиальный партнер национальной команды Германии по парусному спорту, Audi Sailing Team Germany</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing11" resname="contentSapInSailing11">
<source>Premium Partner of the world’s largest regatta, Kieler Woche (Kiel Week)</source>
<target state="signed-off">Премиальный партнер крупнейшей в мире регаты Kieler Woche (Кильская неделя)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapInSailing12" resname="contentSapInSailing12">
<source>Title sponsor of the SAP 5O5 World Championships</source>
<target state="signed-off">Титульный спонсор чемпионатов мира SAP 5O5</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSAPText1" resname="solutionsSAPText1">
<source>By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing.</source>
<target state="signed-off">Предоставляя аналитику по данным о рангах в гонке, скоростях, маневрах, ветрах и т. д. в режиме реального времени, SAP помогает упростить и демистифицировать сложный парусный спорт.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSAPText2" resname="solutionsSAPText2">
<source>SAP Sailing Analytics provide insights and transparency to the world of sailing by utilizing Cloud and In-Memory Technology, processing GPS and wind measurement data in real time and visualizing contents in various frontends accessible from anywhere.</source>
<target state="signed-off">SAP Sailing Analytics делает мир парусного спорта понятным и прозрачным, используя облако и технологию In-Memory, обработку данных GPS и параметров ветра в реальном времени, а также визуализацию контекста в разных пользовательских интерфейсах, доступных где угодно.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsRaceText" resname="solutionsRaceText">
<source>The SAP Race Committee App delivers greater efficiency and control to race organizers by automating and simplifying their manual tasks and communication during running sailing regattas. The Race Committee App helps simplify the operation of running and managing race events to help race committees operate smarter.</source>
<target state="signed-off">Приложение SAP Race Committee повышает уровень эффективности и контроля для организаторов гонки за счет автоматизации и упрощения выполняемых вручную задач и общения во время проведения парусных регат. Приложение Race Committee помогает упростить проведение событий и управление ими, освобождая для оргкомитета время на лучшую проработку деталей.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsPostText" resname="solutionsPostText">
<source>Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.<ph id="1">&lt;br&gt;</ph> SAP Business Analytics solutions provide sailors, coaches, fans and media with tools to browse and analyse historical data across many regattas and races. SAP HANA allows them to learn about performance patterns, tendencies and sailor profiles in a simple, fast and efficient way in order to optimize their own performance and develop successful strategies for future regattas.</source>
<target state="signed-off">Доступ к данным, собранным на парусных событиях, дает мореходам возможность оценить и проанализировать свои показатели, помогая разрабатывать стратегии и повышать мастерство.<ph id="1">&lt;br&gt;</ph> Решения SAP Business Analytics предоставляют мореходам, тренерам, болельщикам и СМИ инструменты для просмотра и анализа исторических данных по множеству регат и гонок. SAP HANA позволяет изучать эффективные приемы, тенденции и профили мореходов простым, быстрым и эффективным образом для оптимизации своих показателей и разработки успешных стратегий на будущие регаты.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsTrainingText" resname="solutionsTrainingText">
<source>The STG Training Diary supports the daily documentation and analysis of an athlete''s physical condition and training efforts in the areas of water training, physical training, boat work, mental, theory as well as other activities like education or travel.</source>
<target state="signed-off">Дневник тренировок STG поддерживает ежедневное документирования и анализ физического состояния атлета и его усилий в тренировках на воде, физической подготовке, работе с лодкой, моральной, теоретической подготовке, а также других видах деятельности, таких как образование и путешествия.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="solutionsSimulatorText" resname="solutionsSimulatorText">
<source>Choosing the right strategy can provide great competitive advantage during a race. The Strategy Simulator simplifies determining the best sailing strategy for various wind conditions and water currents. Since wind and current can be changed in the simulation right away, the robustness of a strategy can be easily evaluated even for uncertain weather conditions.</source>
<target state="signed-off">Выбор правильной стратегии может обеспечить большое конкурентное преимущество во время гонки. Симулятор стратегии упрощает определение лучшей стратегии хождения под парусом для разных атмосферных условий и водных течений. Возможность мгновенного изменения ветра и течения в симуляции позволяет легко оценить надежность стратегии даже для неопределенных погодных условий.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapSailingAnalytics" resname="sapSailingAnalytics">
<source>SAP Sailing Analytics</source>
<target state="signed-off">SAP Sailing Analytics</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapSailingAnalytics1" resname="contentSapSailingAnalytics1">
<source>By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing.</source>
<target state="signed-off">Предоставляя аналитику по данным о рангах в гонке, скоростях, маневрах, ветрах и т. д. в режиме реального времени, SAP помогает упростить и демистифицировать сложный парусный спорт.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapSailingAnalytics2" resname="contentSapSailingAnalytics2">
<source>SAP Sailing Analytics provide insights and transparency to the world of sailing by utilizing Cloud and In-Memory Technology, processing GPS and wind measurement data in real time and visualizing contents in various frontends accessible from anywhere.</source>
<target state="signed-off">SAP Sailing Analytics делает мир парусного спорта понятным и прозрачным, используя облако и технологию In-Memory, обработку данных GPS и параметров ветра в реальном времени, а также визуализацию контекста в разных пользовательских интерфейсах, доступных где угодно.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapSailingAnalyticsReadMore" resname="sapSailingAnalyticsReadMore">
<source>Read More</source>
<target state="signed-off">См. также</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapSailingRaceManager" resname="sapSailingRaceManager">
<source>SAP Sailing Race Manager</source>
<target state="signed-off">SAP Sailing Race Manager</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentSapSailingRaceManager" resname="contentSapSailingRaceManager">
<source>The SAP Sailing Race Manager delivers greater efficiency and control to race organizers by automating and simplifying their manual tasks and communication during running sailing regattas. The Race Committee App helps simplify the operation of running and managing race events to help race committees operate smarter.</source>
<target state="signed-off">Приложение SAP Sailing Race Manager повышает уровень эффективности и контроля для организаторов гонки за счет автоматизации и упрощения выполняемых вручную задач и общения во время проведения парусных регат. Приложение Race Committee помогает упростить проведение событий и управление ими, освобождая для оргкомитета время на лучшую проработку деталей.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sapSailingRaceManagerReadMore" resname="sapSailingRaceManagerReadMore">
<source>Learn More</source>
<target state="signed-off">Узнать больше</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="postRaceAnalytics" resname="postRaceAnalytics">
<source>Post-Race Analytics</source>
<target state="signed-off">Аналитика после гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentPostRaceAnalytics1" resname="contentPostRaceAnalytics1">
<source>Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.</source>
<target state="signed-off">Доступ к данным, собранным на парусных событиях, дает мореходам возможность оценить и проанализировать свои показатели, помогая разрабатывать стратегии и повышать мастерство.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentPostRaceAnalytics2" resname="contentPostRaceAnalytics2">
<source>SAP Business Analytics solutions provide sailors, coaches, fans and media with tools to browse and analyse historical data across many regattas and races. SAP HANA allows them to learn about performance patterns, tendencies and sailor profiles in a simple, fast and efficient way in order to optimize their own performance and develop successful strategies for future regattas.</source>
<target state="signed-off">Решения SAP Business Analytics предоставляют мореходам, тренерам, болельщикам и СМИ инструменты для просмотра и анализа исторических данных по множеству регат и гонок. SAP HANA позволяет изучать паттерны эффективности, тенденции и профили мореходов простым, быстрым и эффективным образом для оптимизации своих показателей и разработки успешных стратегий на будущие регаты.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="i18nDeSolutionsTrainingHeadline" resname="i18nDeSolutionsTrainingHeadline">
<source>SAP Sail Better – STG Training Diary</source>
<target state="signed-off">SAP Sail Better – Дневник тренировок STG</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="i18nDeSolutionsTrainingText" resname="i18nDeSolutionsTrainingText">
<source>The STG Training Diary supports the daily documentation and analysis of an athlete’s physical condition and training efforts in the areas of water training, physical training, boat work, mental, theory as well as other activities like education or travel.</source>
<target state="signed-off">Дневник тренировок STG поддерживает ежедневное документирования и анализ физического состояния атлета и его усилий в тренировках на воде, физической подготовке, работе с лодкой, моральной, теоретической подготовке, а также других видах деятельности, таких как образование и путешествия.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="strategySimulator" resname="strategySimulator">
<source>Strategy Simulator</source>
<target state="signed-off">Симулятор стратегии</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="contentStrategySimulator" resname="contentStrategySimulator">
<source>Choosing the right strategy can provide great competitive advantage during a race. The Strategy Simulator simplifies determining the best sailing strategy for various wind conditions and water currents. Since wind and current can be changed in the simulation right away, the robustness of a strategy can be easily evaluated even for uncertain weather conditions.</source>
<target state="signed-off">Выбор правильной стратегии может обеспечить большое конкурентное преимущество во время гонки. Симулятор стратегии упрощает определение лучшей стратегии хождения под парусом для разных атмосферных условий и водных течений. Возможность мгновенного изменения ветра и течения в симуляции позволяет легко оценить надежность стратегии даже для неопределенных погодных условий.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="strategySimulatorReadMore" resname="strategySimulatorReadMore">
<source>Learn More</source>
<target state="signed-off">Узнать больше</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="impressum" resname="impressum">
<source>Imprint</source>
<target state="signed-off">Печать</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -123,7 +123,11 @@ public class MediaPanel extends FlowPanel {
public List<String> getSearchableStrings(MediaTrack t) {
List<String> strings = new ArrayList<String>();
strings.add(t.title);
strings.add(t.startTime.toString());
if (t.startTime == null) {
GWT.log("startTime of media track "+t.title+" undefined");
} else {
strings.add(t.startTime.toString());
}
return strings;
}
};
@@ -10,6 +10,7 @@ import com.sap.sailing.domain.common.security.SailingPermissionsForRoleProvider;
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
import com.sap.sailing.gwt.ui.shared.MarkPassingTimesDTO;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
import com.sap.sse.common.Duration;
import com.sap.sse.common.Util;
import com.sap.sse.gwt.client.player.TimeRangeWithZoomProvider;
import com.sap.sse.gwt.client.player.Timer;
@@ -43,16 +44,18 @@ public class RaceTimePanel extends TimePanel<RaceTimePanelSettings> implements R
*/
private boolean redrawAllMarkersPendingForMinMaxBeingInitialized;
private final Duration initialTimeAfterRaceStartInReplayMode;
public RaceTimePanel(UserService userService, Timer timer, TimeRangeWithZoomProvider timeRangeProvider, StringMessages stringMessages,
RaceTimesInfoProvider raceTimesInfoProvider, boolean canReplayWhileLiveIsPossible, boolean isScreenLargeEnoughToOfferChartSupport,
RegattaAndRaceIdentifier selectedRaceIdentifier) {
RegattaAndRaceIdentifier selectedRaceIdentifier, Duration initialTimeAfterRaceStartInReplayMode) {
super(timer, timeRangeProvider, stringMessages, canReplayWhileLiveIsPossible, isScreenLargeEnoughToOfferChartSupport);
this.userService = userService;
this.raceTimesInfoProvider = raceTimesInfoProvider;
selectedRace = null;
autoAdjustPlayMode = true;
selectedRace = selectedRaceIdentifier;
this.initialTimeAfterRaceStartInReplayMode = initialTimeAfterRaceStartInReplayMode;
if (!raceTimesInfoProvider.containsRaceIdentifier(selectedRace)) {
raceTimesInfoProvider.addRaceIdentifier(selectedRace, true);
}
@@ -282,7 +285,8 @@ public class RaceTimePanel extends TimePanel<RaceTimePanelSettings> implements R
case Replay:
// set time to start of race
if (newRaceTimesInfo.startOfRace != null) {
timer.setTime(newRaceTimesInfo.startOfRace.getTime());
timer.setTime(newRaceTimesInfo.startOfRace.getTime() +
(initialTimeAfterRaceStartInReplayMode == null ? 0l : initialTimeAfterRaceStartInReplayMode.asMillis()));
}
break;
}
@@ -29,7 +29,7 @@ timeDelayHelp=要在任意时间重播,则留空;输入导入实况数据前
speedInKnots=速度 (kn)
fromDeg=自(度)
noRacesYet=暂无比赛轮次。
total=Σ
total=\u03A3
carry=累积
competitor=参赛队
competitors=参赛队
@@ -72,7 +72,7 @@ collapse=-
expand=+
leg=L
distanceInMeters=距离
averageSpeedInKnots=∅ 速度
averageSpeedInKnots=\u2205 速度
averageSpeedInKnotsTooltip=此航段的平均实际速度,\n通过航行的距离除以所需的时间计算得出。
raceAverageSpeedInKnotsTooltip=此比赛轮次的平均实际速度,\n通过航行的距离除以所需的时间计算得出。
rankGain=名次进阶
@@ -320,15 +320,15 @@ racesInLeaderboard=积分榜中的比赛轮次
leaderboardsInGroup=分组中的积分榜
replication=复制
errorFetchingReplicaData=获取重复数据出错: {0}
averageAbsoluteCrossTrackErrorInMeters=∅ XTE
averageAbsoluteCrossTrackErrorInMeters=\u2205 XTE
averageAbsoluteCrossTrackErrorInMetersTooltip=连接航段起点和终点的大圆弧的平均交叉轨道误差
averageSignedCrossTrackErrorInMeters=∅ XTE +/-
averageSignedCrossTrackErrorInMeters=\u2205 XTE +/-
averageSignedCrossTrackErrorInMetersTooltip=赛场中的平均位置 - 从场地中线开始计算的符号距离;0 代表场地中线;负数代表左侧,正数代表右侧。
raceAverageAbsoluteCrossTrackErrorInMetersTooltip=所有比赛轮次中迎风航段连接航段起点和终点的大圆弧的平均绝对交叉轨道误差,忽略参赛队所在的场地中线
raceAverageSignedCrossTrackErrorInMetersTooltip=所有比赛轮次中迎风航段连接航段起点和终点的大圆弧的符号平均交叉轨道误差;负数代表场地中线的左侧,正数代表右侧。
enterMaster=主实例的主机名称
errorStartingReplication=从主机{0}/交换机{1}开始复制出错: {2}
helpLines=帮助线
helpLines=辅助线
startLine=起航线
finishLine=终点线
advantageLine=优势航线
@@ -460,7 +460,7 @@ totalTimeSailedInSeconds=总时间
totalTimeSailedInSecondsTooltip=从比赛轮次开始时间算起,参赛队在比赛中航行的总时间。
totalDistanceTraveled=总距离
totalDistanceTraveledTooltip=比赛中航行的总距离。
totalAverageSpeedOverGround=∅ 实际速度
totalAverageSpeedOverGround=\u2205 实际速度
totalAverageSpeedOverGroundTooltip=比赛中的平均实际速度。
hhmmssUnit=hh:mm:ss
actionAddWindData=添加风力数据
@@ -505,11 +505,11 @@ expandLastRace=始终展开显示的最后比赛轮次
factor=系数
errorUpdatingIsMedalRace=更新奖牌轮设置出错: {0}
maneuverLoss=操作损失
averageManeuverLossInMeters=∅ 操作损失
averageManeuverLossInMeters=\u2205 操作损失
averageManeuverLossInMetersTooltip=任何操作中的平均距离损失。
averageTackLossInMeters=∅ 迎风转向损失
averageTackLossInMeters=\u2205 迎风转向损失
averageTackLossInMetersTooltip=迎风转向中的平均距离损失。
averageJibeLossInMeters=∅ 顺风转向损失
averageJibeLossInMeters=\u2205 顺风转向损失
averageJibeLossInMetersTooltip=顺风转向中的平均距离损失。
shape=形状
pattern=模式
@@ -837,8 +837,8 @@ lastFinished=最后完成
run=运行
times=次数
dataAmount=数据量
averageCleanedServerTime=∅ 清理服务器时间
averageCleanedOverallTime=∅ 清理总时间
averageCleanedServerTime=\u2205 清理服务器时间
averageCleanedOverallTime=\u2205 清理总时间
dataMiningBenchmarkResults=数据挖掘基准结果
serverTime=服务器时间
confidenceShouldBeBetween=置信度需要介于 0 和 1。
@@ -907,7 +907,7 @@ line=线
offset=分支
doYouReallyWantToRemoveCompetitors=是否确定移除所选的参赛队?
doYouReallyWantToRemoveCompetitor=是否确定移除参赛队 {0}?
filterCompetitors=按名称、船只级别或帆号筛选参赛队
filterCompetitors=按名称、船只级别或帆号或编号筛选参赛队
editCompetitor=编辑参赛队
pleaseEnterASailNumber=请输入帆号
successfullyAllowedCompetitorReset=已成功允许重新加载参赛队{0}。
@@ -915,7 +915,7 @@ id=编号
allowReload=允许重新加载
compress=压缩
compressTooltip=仅在导出服务器实例至少通过\n任务 0fbf6071dea125bec4a56dee55d61c99def4a62e 运行时使用。
queryRunner=Query Runner
queryRunner=查询执行器
rerunQueryAfterRefresh=在刷新后重新运行查询
refreshIntervalMustntBeEmpty=刷新间隔不得为空
selectionTables=选择表
@@ -1118,7 +1118,7 @@ totalSize=总大小
averageMessageSize=各消息的平均大小(字节)
totalNumberOfOperations=操作的总数
currentOrAverageSpeedOverGroundInKnotsTooltip=在航段航行时的当前实际速度(节);航段完成时的平均数实际速度
currentOrAverageSpeedOverGroundInKnots=实际速度(∅ 终点)
currentOrAverageSpeedOverGroundInKnots=实际速度(\u2205 终点)
connectors=连接器
videoComponentShortName=视频
competitorSearchFilter=参赛队搜索筛选器
@@ -1186,6 +1186,7 @@ timeBetweenRaceStartAndCompetitorStartInSeconds=起航延迟
timeBetweenRaceStartAndCompetitorStartInSecondsTooltip=比赛轮次开始与参赛队越过起航航路点之间的时间。负值表示“抢航”。
useInternalAlgorithm=使用内部绕标算法
editMarkPassings=编辑绕标
editMarkPositions=编辑标位
removeFixedPassings=移除固定的绕标
setFixedPassing=设置绕标时间
setSuppressedPassing=从当前开始禁止绕标
@@ -1289,7 +1290,7 @@ any=任何
urlProviders=基于 URL 的结果提供方
pleaseSelectAURLProvider=请选择基于 URL 的结果提供方...
sampleURL=示例 URL: {0}
sapSportsOn=SAP Sports on
sapSportsOn=SAP Sports -
followSapSports=关注 SAP Sports
liveNow=现在直播
analyseRace=分析比赛轮次
@@ -1407,7 +1408,7 @@ resultsFoundForSearch=找到 "{1}" 的 {0,number} 个结果
resultsFoundForSearch[one]=找到 "{1}" 的 {0,number} 个结果
runPredefinedQuery=运行预定义的查询
selectPredefinedQuery=选择预定义的查询
predefinedQueryRunner=预定义的 Query Runner
predefinedQueryRunner=预定义的查询执行器
developerOptions=开发人员选项
copyToClipboard=复制到剪贴板
code=代码
@@ -1437,7 +1438,7 @@ requiresValidRegatta=此页面需要有效的比赛、比赛轮次列和船队
couldNotObtainRace=无法为名称为{0}的比赛获取船队{2}名称为{1}的比赛轮次: {3}
errorTryingToCreateEmbeddedMap=尝试创建嵌入式地图出错: {0}
topN=前{0}
transparentBufferLineOnHover=鼠标移到帮助线显示透明的缓冲线
transparentBufferLineOnHover=鼠标移到辅助线显示透明的缓冲线
bufferLineStrokeWeight=缓冲线线条粗细
profile=概要
showOnlyCompetitorsOfLog=仅显示在日志中注册的参赛队
@@ -1467,4 +1468,24 @@ thereIsNoIdentifierSet=未设置标识符。
couldNotObtainAccessTokenForUser=无法获取用户{0}的访问令牌
raceManagerDeviceName=设备名称
playstoreBadge=https://play.google.com/intl/zh-cn/badges/images/generic/zh-cn-play-badge.png
appstoreBadgeSuffix=_zh
appstoreBadgeSuffix=_zh
serverURLInvalid=请输入有效的服务器 URL
serverURLEmpty=服务器 URL 为空
marks=标志
addNewFix=新增修复
pleaseSelectOtherTimepoint=请选择其他时间点。时间滑块中的此时间点已有修复。
confirmMove=确认移动
confirmNewFix=确认新修复
selectAFixPositionBy=通过拖动地图选择修复位置。然后利用下方的按钮确认或取消。
pleaseSelectAMark=请从左侧的清单中选择一个标志。
markFixes=标志修复
distanceFromAveragePosition=与平均位置的距离
useATouchOptimizedUI=使用触摸优化的 UI 移动修复
deleteFix=删除修复
theDeletionOfThisFix=目前无法删除此修复。
loadingMarkFixes=正在加载标志修复...
fixSuccessfullyAdded=已成功添加修复。
fixPositionSuccessfullyEdited=已成功编辑修复位置。
fixSuccessfullyRemoved=已成功移除修复。
dragToChangePosition=拖动更改位置\n右键点击获取菜单以删除
moveFix=移动修复
@@ -328,7 +328,7 @@ raceAverageAbsoluteCrossTrackErrorInMetersTooltip=所有比赛轮次中迎风航
raceAverageSignedCrossTrackErrorInMetersTooltip=所有比赛轮次中迎风航段连接航段起点和终点的大圆弧的符号平均交叉轨道误差;负数代表场地中线的左侧,正数代表右侧。
enterMaster=主实例的主机名称
errorStartingReplication=从主机{0}/交换机{1}开始复制出错: {2}
helpLines=帮助线
helpLines=辅助线
startLine=起航线
finishLine=终点线
advantageLine=优势航线
@@ -610,7 +610,7 @@ passingInstructions=绕标说明
refreshNow=现在刷新
stopUpdating=停止更新
startUpdating=开始更新
currentTime=当前时间:
currentTime=当前时间:
tractracUsername=TracTrac 用户名
tractracPassword=TracTrac 密码
operatorEquals=等于
@@ -907,7 +907,7 @@ line=线
offset=分支
doYouReallyWantToRemoveCompetitors=是否确定移除所选的参赛队?
doYouReallyWantToRemoveCompetitor=是否确定移除参赛队 {0}?
filterCompetitors=按名称、船只级别或帆号筛选参赛队
filterCompetitors=按名称、船只级别或帆号或编号筛选参赛队
editCompetitor=编辑参赛队
pleaseEnterASailNumber=请输入帆号
successfullyAllowedCompetitorReset=已成功允许重新加载参赛队{0}。
@@ -915,7 +915,7 @@ id=编号
allowReload=允许重新加载
compress=压缩
compressTooltip=仅在导出服务器实例至少通过\n任务 0fbf6071dea125bec4a56dee55d61c99def4a62e 运行时使用。
queryRunner=Query Runner
queryRunner=查询执行器
rerunQueryAfterRefresh=在刷新后重新运行查询
refreshIntervalMustntBeEmpty=刷新间隔不得为空
selectionTables=选择表
@@ -936,11 +936,13 @@ dontoverwrite=不要覆盖
setRacingProcedureConfiguration=设置比赛配置
racingProcedureConfiguration=比赛配置
activateIndividualRecall=激活个别召回
activateResultEntry=激活结果条目
rrs26Start=RRS26 开始
setConfiguration=激活配置
classFlag=级别旗标
classFlagHelpText=设置用于{0}的级别旗标。 选择“不要覆盖”,激活程序的默认旗标。
individualRecallHelpText=激活后,裁判长能够执行个别召回。
resultEntryHelpText=激活后,裁判长能够在结束阶段期间和之后输入结果。
startmodeFlags=起航模式旗标
startmodeFlagsHelpText=设置可用的起航模式旗标。选择无,启用程序的默认旗标。
gateStart=起航门标
@@ -1186,6 +1188,7 @@ timeBetweenRaceStartAndCompetitorStartInSeconds=起航延迟
timeBetweenRaceStartAndCompetitorStartInSecondsTooltip=比赛轮次开始与参赛队越过起航航路点之间的时间。负值表示“抢航”。
useInternalAlgorithm=使用内部绕标算法
editMarkPassings=编辑绕标
editMarkPositions=编辑标位
removeFixedPassings=移除固定的绕标
setFixedPassing=设置绕标时间
setSuppressedPassing=从当前开始禁止绕标
@@ -1289,7 +1292,7 @@ any=任何
urlProviders=基于 URL 的结果提供方
pleaseSelectAURLProvider=请选择基于 URL 的结果提供方...
sampleURL=示例 URL: {0}
sapSportsOn=SAP Sports on
sapSportsOn=SAP Sports -
followSapSports=关注 SAP Sports
liveNow=现在直播
analyseRace=分析比赛轮次
@@ -1408,7 +1411,7 @@ resultsFoundForSearch=找到 "{1}" 的 {0,number} 个结果
resultsFoundForSearch[one]=找到 "{1}" 的 {0,number} 个结果
runPredefinedQuery=运行预定义的查询
selectPredefinedQuery=选择预定义的查询
predefinedQueryRunner=预定义的 Query Runner
predefinedQueryRunner=预定义的查询执行器
developerOptions=开发人员选项
copyToClipboard=复制到剪贴板
code=代码
@@ -1438,7 +1441,7 @@ requiresValidRegatta=此页面需要有效的比赛、比赛轮次列和船队
couldNotObtainRace=无法为名称为{0}的比赛获取船队{2}名称为{1}的比赛轮次: {3}
errorTryingToCreateEmbeddedMap=尝试创建嵌入式地图出错: {0}
topN=前{0}
transparentBufferLineOnHover=鼠标移到帮助线显示透明的缓冲线
transparentBufferLineOnHover=鼠标移到辅助线显示透明的缓冲线
bufferLineStrokeWeight=缓冲线线条粗细
profile=概要
showOnlyCompetitorsOfLog=仅显示在日志中注册的参赛队
@@ -1467,3 +1470,31 @@ qrSync=QR-Sync
thereIsNoIdentifierSet=未设置标识符。
couldNotObtainAccessTokenForUser=无法获取用户{0}的访问令牌
raceManagerDeviceName=设备名称
serverURLInvalid=请输入有效的服务器 URL
serverURLEmpty=服务器 URL 为空
marks=标志
addNewFix=新增修复
pleaseSelectOtherTimepoint=请选择其他时间点。时间滑块中的此时间点已有修复。
confirmMove=确认移动
confirmNewFix=确认新修复
selectAFixPositionBy=通过拖动地图选择修复位置。然后利用下方的按钮确认或取消。
pleaseSelectAMark=请从左侧的清单中选择一个标志。
markFixes=标志修复
playstoreCampaign=utm_source=sapsailing&utm_medium=solutions&utm_content=2016.02&utm_campaign=solutions&pcampaignid=2016.sapsailing.solutions
playstoreTrackingApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.tracking.app
playstoreRacecommitteeApp=https://play.google.com/store/apps/details?id=com.sap.sailing.racecommittee.app
playStoreBuoypositioningApp=https://play.google.com/store/apps/details?id=com.sap.sailing.android.buoy.positioning.app
playstoreBadge=https://play.google.com/intl/en/badges/images/generic/en-play-badge.png
appstoreSapSailingInsight=http://appstore.com/sapsailinsight
appstoreStgTrainingstagebuch=http://appstore.com/stgtrainingstagebuch
appstoreBadgeSuffix=_en
distanceFromAveragePosition=与平均位置的距离
useATouchOptimizedUI=使用触摸优化的 UI 移动修复
deleteFix=删除修复
theDeletionOfThisFix=目前无法删除此修复。
loadingMarkFixes=正在加载标志修复...
fixSuccessfullyAdded=已成功添加修复。
fixPositionSuccessfullyEdited=已成功编辑修复位置。
fixSuccessfullyRemoved=已成功移除修复。
dragToChangePosition=拖动更改位置\n右键点击获取菜单以删除
moveFix=移动修复
@@ -138,24 +138,28 @@ public class MediaManagementControl extends AbstractMediaSelectionControl implem
Collection<MediaTrack> reachableAudioTracks) {
for (MediaTrack mediaTrack : mediaPlayerManager.getAssignedMediaTracks()) {
if (isPotentiallyPlayable(mediaTrack)) {
switch (mediaTrack.mimeType.mediaType) {
case video:
reachableVideoTracks.add(mediaTrack);
case audio: // intentional fall through
if (mediaPlayerManager.getUserAgent().getType().equals(AgentTypes.FIREFOX)) {
if (mediaTrack.isYoutube()) {
// only youtube audio tracks work with firefox
if (mediaTrack.mimeType == null) {
reachableVideoTracks.add(mediaTrack); // allow user to remove this strange artifact
} else {
switch (mediaTrack.mimeType.mediaType) {
case video:
reachableVideoTracks.add(mediaTrack);
case audio: // intentional fall through
if (mediaPlayerManager.getUserAgent().getType().equals(AgentTypes.FIREFOX)) {
if (mediaTrack.isYoutube()) {
// only youtube audio tracks work with firefox
reachableAudioTracks.add(mediaTrack);
}
} else {
reachableAudioTracks.add(mediaTrack);
}
} else {
reachableAudioTracks.add(mediaTrack);
case image: // images don't play as video tracks
break;
case unknown: // unknown formats won't be played either
break;
default:
break;
}
case image: // images don't play as video tracks
break;
case unknown: // unknown formats won't be played either
break;
default:
break;
}
}
}
@@ -25,6 +25,8 @@ import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
import com.sap.sailing.gwt.ui.shared.RaceWithCompetitorsDTO;
import com.sap.sailing.gwt.ui.shared.RaceboardDataDTO;
import com.sap.sse.common.Duration;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.player.Timer;
@@ -88,8 +90,10 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint {
final boolean autoSelectMedia = GwtHttpRequestUtils.getBooleanParameter(RaceBoardViewConfiguration.PARAM_AUTOSELECT_MEDIA, true);
final String defaultMedia = GwtHttpRequestUtils.getStringParameter(RaceBoardViewConfiguration.PARAM_DEFAULT_MEDIA, null /* default*/);
final boolean showMapControls = GwtHttpRequestUtils.getBooleanParameter(RaceBoardViewConfiguration.PARAM_VIEW_SHOW_MAPCONTROLS, true /* default*/);
final Duration initialDurationAfterRaceStartInReplay = parseDuration(GwtHttpRequestUtils.getStringParameter(RaceBoardViewConfiguration.PARAM_TIME_AFTER_RACE_START_AS_HOURS_COLON_MILLIS_COLON_SECONDS, null /* default*/));
raceboardViewConfig = new RaceBoardViewConfiguration(activeCompetitorsFilterSetName, showLeaderboard,
showWindChart, showCompetitorsChart, showViewStreamlets, showViewStreamletColors, showViewSimulation, autoSelectMedia, defaultMedia);
showWindChart, showCompetitorsChart, showViewStreamlets, showViewStreamletColors, showViewSimulation, autoSelectMedia, defaultMedia,
initialDurationAfterRaceStartInReplay);
sailingService.getRaceboardData(regattaName, raceName, leaderboardName, leaderboardGroupName, eventId, new AsyncCallback<RaceboardDataDTO>() {
@Override
public void onSuccess(RaceboardDataDTO result) {
@@ -107,6 +111,24 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint {
});
}
/**
* Understands [hh:[mm:]]ss and parses into a {@link Duration}. If {@code durationAsString} is {@code null} then
* so is the result.
*/
public static Duration parseDuration(String durationAsString) {
final Duration result;
if (durationAsString == null) {
result = null;
} else {
long seconds = 0;
for (final String hhmmss : durationAsString.split(":")) {
seconds = 60*seconds + Long.valueOf(hhmmss);
}
result = new MillisecondsDurationImpl(1000l * seconds);
}
return result;
}
private void createErrorPage(String message) {
final DockLayoutPanel vp = new DockLayoutPanel(Unit.PX);
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(getStringMessages(), this, getUserService());
@@ -234,7 +234,7 @@ public class RaceBoardPanel extends SimplePanel implements LeaderboardUpdateList
}
}
timePanel = new RaceTimePanel(userService, timer, timeRangeWithZoomModel, stringMessages, raceTimesInfoProvider,
false, isScreenLargeEnoughToOfferChartSupport, selectedRaceIdentifier);
false, isScreenLargeEnoughToOfferChartSupport, selectedRaceIdentifier, getConfiguration().getInitialDurationAfterRaceStartInReplay());
timeRangeWithZoomModel.addTimeZoomChangeListener(timePanel);
raceTimesInfoProvider.addRaceTimesInfoProviderListener(timePanel);
}
@@ -1,5 +1,7 @@
package com.sap.sailing.gwt.ui.raceboard;
import com.sap.sse.common.Duration;
/**
* Represents the parameters for configuring the raceboard view
* @author Frank
@@ -15,6 +17,7 @@ public class RaceBoardViewConfiguration {
private final boolean showViewStreamlets;
private final boolean showViewStreamletColors;
private final boolean showViewSimulation;
private final Duration initialDurationAfterRaceStartInReplay;
public static final String PARAM_VIEW_MODE = "viewMode";
public static final String PARAM_VIEW_SHOW_LEADERBOARD = "viewShowLeaderboard";
@@ -29,16 +32,17 @@ public class RaceBoardViewConfiguration {
public static final String PARAM_CAN_REPLAY_DURING_LIVE_RACES = "canReplayDuringLiveRaces";
public static final String PARAM_AUTOSELECT_MEDIA = "autoSelectMedia";
public static final String PARAM_DEFAULT_MEDIA = "defaultMedia";
public static final String PARAM_TIME_AFTER_RACE_START_AS_HOURS_COLON_MILLIS_COLON_SECONDS = "t";
public RaceBoardViewConfiguration() {
this(/* activeCompetitorsFilterSetName */ null, /* showLeaderboard */ true,
/* showWindChart */ false, /* showCompetitorsChart */ false, /* showViewStreamlets */ false, /* showViewStreamletColors */ false, /* showViewSimulation */ false,
/* autoSelectMedia */false, null);
/* autoSelectMedia */false, null, /* initialDurationAfterRaceStartInReplay */ null);
}
public RaceBoardViewConfiguration(String activeCompetitorsFilterSetName, boolean showLeaderboard,
boolean showWindChart, boolean showCompetitorsChart, boolean showViewStreamlets, boolean showViewStreamletColors, boolean showViewSimulation,
boolean autoSelectMedia, String defaultMedia) {
boolean autoSelectMedia, String defaultMedia, Duration initialDurationAfterRaceStartInReplay) {
this.activeCompetitorsFilterSetName = activeCompetitorsFilterSetName;
this.showLeaderboard = showLeaderboard;
this.showWindChart = showWindChart;
@@ -48,6 +52,7 @@ public class RaceBoardViewConfiguration {
this.showViewSimulation = showViewSimulation;
this.autoSelectMedia = autoSelectMedia;
this.defaultMedia = defaultMedia;
this.initialDurationAfterRaceStartInReplay = initialDurationAfterRaceStartInReplay;
}
public boolean isShowLeaderboard() {
@@ -86,4 +91,7 @@ public class RaceBoardViewConfiguration {
return defaultMedia;
}
public Duration getInitialDurationAfterRaceStartInReplay() {
return initialDurationAfterRaceStartInReplay;
}
}
@@ -144,6 +144,7 @@ import com.sap.sailing.domain.base.impl.SailingServerConfigurationImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.base.impl.TeamImpl;
import com.sap.sailing.domain.common.Bearing;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.DataImportProgress;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.domain.common.Distance;
@@ -4642,7 +4643,9 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
} finally {
// close the connection, set all objects to null
getService().setDataImportDeleteProgressFromMapTimerWithReplication(importOperationId);
connection.disconnect();
if (connection != null) {
connection.disconnect();
}
connection = null;
long timeToImport = System.currentTimeMillis() - startTime;
logger.info(String.format("Took %s ms overall to import master data.", timeToImport));
@@ -5227,10 +5230,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
List<com.sap.sse.common.Util.Pair<ControlPointDTO, PassingInstruction>> courseDTO) throws NotFoundException {
RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
String courseName = "Course of " + raceColumnName;
if(!LeaderboardNameConstants.DEFAULT_FLEET_NAME.equals(fleetName)) {
courseName += "- " + fleetName;
if (!LeaderboardNameConstants.DEFAULT_FLEET_NAME.equals(fleetName)) {
courseName += " - " + fleetName;
}
CourseBase lastPublishedCourse = new LastPublishedCourseDesignFinder(raceLog).analyze();
CourseBase lastPublishedCourse = new LastPublishedCourseDesignFinder(raceLog, /* onlyCoursesWithValidWaypointList */ false).analyze();
if (lastPublishedCourse == null) {
lastPublishedCourse = new CourseDataImpl(courseName);
}
@@ -5248,7 +5251,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
}
RaceLogEvent event = new RaceLogCourseDesignChangedEventImpl(MillisecondsTimePoint.now(),
getService().getServerAuthor(), raceLog.getCurrentPassId(), course);
getService().getServerAuthor(), raceLog.getCurrentPassId(), course, CourseDesignerMode.ADMIN_CONSOLE);
raceLog.add(event);
}
@@ -5297,7 +5300,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
@Override
public RaceCourseDTO getLastCourseDefinitionInRaceLog(final String leaderboardName, String raceColumnName, String fleetName) throws NotFoundException {
final RaceLog raceLog = getRaceLog(leaderboardName, raceColumnName, fleetName);
CourseBase lastPublishedCourse = new LastPublishedCourseDesignFinder(raceLog).analyze();
// only look for course definitions that really define waypoints; ignore by-name course updates
CourseBase lastPublishedCourse = new LastPublishedCourseDesignFinder(raceLog, /* onlyCoursesWithValidWaypointList */ true).analyze();
if (lastPublishedCourse == null) {
lastPublishedCourse = new CourseDataImpl("");
}
@@ -6054,7 +6058,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
for (Fleet fleet : raceColumn.getFleets()) {
RaceLog raceLog = raceColumn.getRaceLog(fleet);
if (raceLog != raceLogToIgnore) {
LastPublishedCourseDesignFinder finder = new LastPublishedCourseDesignFinder(raceLog);
LastPublishedCourseDesignFinder finder = new LastPublishedCourseDesignFinder(raceLog, /* onlyCoursesWithValidWaypointList */ true);
CourseBase course = finder.analyze();
if (course != null) {
for (Waypoint waypoint : course.getWaypoints()) {
@@ -22,6 +22,16 @@
</li>
</ul>
<h5 class="articleSubheadline">April 2016</h2>
<ul class="bulletList">
<li>The <tt>/gwt/RaceBoard.html</tt> entry point now accepts an optional parameter "t" in the form
<tt>[[hh:]mm:]ss</tt>, for example <tt>t=12:34</tt> to place the timer so much after the race start
if the viewer comes up in Replay mode. You may also use just seconds, as in <tt>t=1234</tt> which
makes specifying a time <em>before</em> the start somewhat easier (<tt>t=-123</tt> instead of
<tt>t=-02:-03</tt>).
</li>
</ul>
<h5 class="articleSubheadline">January 2016</h2>
<ul class="bulletList">
<li>Show maneuver markers on the race board by default
@@ -19,6 +19,8 @@ sessionManager = com.sap.sse.security.SecurityWebSessionManager
securityManager.sessionManager = $sessionManager
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
securityManager.sessionManager.sessionDAO = $sessionDAO
# 24h timeout
securityManager.sessionManager.globalSessionTimeout = 86400000
cacheManager = com.sap.sse.security.SessionCacheManager
securityManager.cacheManager = $cacheManager
@@ -62,6 +62,7 @@ import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.racelog.Flags;
@@ -514,7 +515,7 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD
@Test
public void testStoreAndRetrieveSimpleLeaderboardWithRaceLogCourseDesignChangedEvent() {
CourseBase course = createCourseBase();
RaceLogCourseDesignChangedEvent event = new RaceLogCourseDesignChangedEventImpl(now, author, 0, course);
RaceLogCourseDesignChangedEvent event = new RaceLogCourseDesignChangedEventImpl(now, author, 0, course, CourseDesignerMode.ADMIN_CONSOLE);
addAndStoreRaceLogEvent(leaderboard, raceColumnName, event);
@@ -53,6 +53,7 @@ import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Regatta;
import com.sap.sailing.domain.base.Series;
import com.sap.sailing.domain.base.impl.FleetImpl;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.racelog.Flags;
@@ -387,7 +388,7 @@ public class TestStoringAndRetrievingRaceLogInRegatta extends AbstractTestStorin
@Test
public void testStoreAndRetrieveRegattaWithRaceLogCourseDesignChangedEvent() {
CourseBase course = createCourseBase();
RaceLogCourseDesignChangedEvent event = new RaceLogCourseDesignChangedEventImpl(now, author, 0, course);
RaceLogCourseDesignChangedEvent event = new RaceLogCourseDesignChangedEventImpl(now, author, 0, course, CourseDesignerMode.ADMIN_CONSOLE);
addAndStoreRaceLogEvent(regatta, raceColumnName, event);
@@ -0,0 +1,29 @@
package com.sap.sailing.server.gateway.deserialization.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.impl.RaceColumnFactorImpl;
import com.sap.sailing.domain.common.impl.RaceColumnConstants;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
public class RaceColumnFactorJsonDeserializer implements JsonDeserializer<RaceColumnFactorImpl> {
@Override
public RaceColumnFactorImpl deserialize(JSONObject object) throws JsonDeserializationException {
String leaderboard_name = (String) object.get(RaceColumnConstants.LEADERBOARD_NAME);
String leaderboard_display_name = (String) object.get(RaceColumnConstants.LEADERBOARD_DISPLAY_NAME);
RaceColumnFactorImpl raceColumnFactor = new RaceColumnFactorImpl(leaderboard_name, leaderboard_display_name);
JSONArray race_columns = (JSONArray) object.get(RaceColumnConstants.RACE_COLUMNS);
int size = race_columns.size();
for (int i = 0; i < size; i++) {
JSONObject data = (JSONObject) race_columns.get(i);
String race_column_name = (String) data.get(RaceColumnConstants.RACE_COLUMN_NAME);
Double explicit_factor = (Double) data.get(RaceColumnConstants.EXPLICIT_FACTOR);
Double factor = (Double) data.get(RaceColumnConstants.FACTOR);
raceColumnFactor.addRaceColumn(race_column_name, explicit_factor, factor);
}
return raceColumnFactor;
}
}
@@ -20,13 +20,13 @@ public class RaceCellDeserializer implements JsonDeserializer<RaceCell> {
public RaceCell deserialize(JSONObject object)
throws JsonDeserializationException {
String name = object.get(RaceCellJsonSerializer.FIELD_NAME).toString();
final String name = object.get(RaceCellJsonSerializer.FIELD_NAME).toString();
final Object factorJson = object.get(RaceCellJsonSerializer.FIELD_FACTOR);
final double factor = factorJson == null ? 1 : ((Number) factorJson).doubleValue();
final Double explicitFactor = (Double) object.get(RaceCellJsonSerializer.FIELD_EXPLICIT_FACTOR);
JSONObject logJson = Helpers.getNestedObjectSafe(object, RaceCellJsonSerializer.FIELD_RACE_LOG);
RaceLog log = logDeserializer.deserialize(logJson);
return new RaceCellImpl(name, log);
return new RaceCellImpl(name, log, factor, explicitFactor);
}
}
@@ -10,6 +10,7 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogEvent;
import com.sap.sailing.domain.abstractlog.race.impl.RaceLogCourseDesignChangedEventImpl;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.CourseBaseDeserializer;
@@ -31,8 +32,9 @@ public class RaceLogCourseDesignChangedEventDeserializer extends BaseRaceLogEven
JSONObject jsonCourseDesign = (JSONObject) object.get(RaceLogCourseDesignChangedEventSerializer.FIELD_COURSE_DESIGN);
CourseBase courseData = courseDataDeserializer.deserialize(jsonCourseDesign);
return new RaceLogCourseDesignChangedEventImpl(createdAt, timePoint, author, id, passId, courseData);
final String courseDesignerModeName = (String) object.get(RaceLogCourseDesignChangedEventSerializer.FIELD_COURSE_DESIGNER_MODE);
return new RaceLogCourseDesignChangedEventImpl(createdAt, timePoint, author, id, passId, courseData,
courseDesignerModeName == null ? null : CourseDesignerMode.valueOf(courseDesignerModeName));
}
}
@@ -10,7 +10,9 @@ public class RaceCellJsonSerializer implements JsonSerializer<RaceCell> {
public static final String FIELD_NAME = "name";
public static final String FIELD_RACE_LOG = "raceLog";
public static final String FIELD_COMPETITORS = "competitors";
public static final Object FIELD_FACTOR = "factor";
public static final Object FIELD_EXPLICIT_FACTOR = "explicitfactor";
private JsonSerializer<RaceLog> logSerializer;
public RaceCellJsonSerializer(JsonSerializer<RaceLog> logSerializer) {
@@ -20,10 +22,10 @@ public class RaceCellJsonSerializer implements JsonSerializer<RaceCell> {
@Override
public JSONObject serialize(RaceCell object) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, object.getName());
result.put(FIELD_FACTOR, object.getFactor());
result.put(FIELD_EXPLICIT_FACTOR, object.getExplicitFactor());
result.put(FIELD_RACE_LOG, logSerializer.serialize(object.getRaceLog()));
return result;
}
@@ -12,6 +12,7 @@ public class RaceLogCourseDesignChangedEventSerializer extends BaseRaceLogEventS
public static final String VALUE_CLASS = RaceLogCourseDesignChangedEvent.class.getSimpleName();
public static final String FIELD_COURSE_DESIGN = "courseDesign";
public static final String FIELD_COURSE_DESIGNER_MODE = "courseDesignerMode";
private final JsonSerializer<CourseBase> courseBaseSerializer;
@@ -30,10 +31,9 @@ public class RaceLogCourseDesignChangedEventSerializer extends BaseRaceLogEventS
@Override
public JSONObject serialize(RaceLogEvent object) {
RaceLogCourseDesignChangedEvent courseChangedEvent = (RaceLogCourseDesignChangedEvent) object;
JSONObject result = super.serialize(courseChangedEvent);
result.put(FIELD_COURSE_DESIGN, courseBaseSerializer.serialize(courseChangedEvent.getCourseDesign()));
result.put(FIELD_COURSE_DESIGNER_MODE, courseChangedEvent.getCourseDesignerMode() == null ? null : courseChangedEvent.getCourseDesignerMode().name());
return result;
}
@@ -23,6 +23,7 @@ import com.sap.sailing.domain.base.impl.ControlPointWithTwoMarksImpl;
import com.sap.sailing.domain.base.impl.CourseDataImpl;
import com.sap.sailing.domain.base.impl.MarkImpl;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.MarkType;
import com.sap.sailing.domain.common.PassingInstruction;
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
@@ -63,7 +64,7 @@ public class RaceLogCourseDesignChangedEventSerializerTest {
factory), new GateDeserializer(factory, new MarkDeserializer(factory))))));
now = MillisecondsTimePoint.now();
event = new RaceLogCourseDesignChangedEventImpl(now, author, 0, createCourseData());
event = new RaceLogCourseDesignChangedEventImpl(now, author, 0, createCourseData(), CourseDesignerMode.BY_MARKS);
}
@Test
@@ -75,6 +76,7 @@ public class RaceLogCourseDesignChangedEventSerializerTest {
assertEquals(event.getId(), deserializedEvent.getId());
assertEquals(event.getPassId(), deserializedEvent.getPassId());
assertEquals(event.getLogicalTimePoint(), deserializedEvent.getLogicalTimePoint());
assertEquals(event.getCourseDesignerMode(), deserializedEvent.getCourseDesignerMode());
assertEquals(0, Util.size(event.getInvolvedBoats()));
assertEquals(0, Util.size(deserializedEvent.getInvolvedBoats()));
@@ -29,6 +29,7 @@ import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogDenoteForTra
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorEventImpl;
import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogStartTrackingEventImpl;
import com.sap.sailing.domain.base.DomainFactory;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
@@ -149,7 +150,7 @@ public class RaceLogEventSerializerTest {
@Test
public void testChoosesCourseDesignChangedSerializer() {
// we use the real event type here because we do not want to re-implement the dispatching.
RaceLogEvent event = new RaceLogCourseDesignChangedEventImpl(null, author, 0, null);
RaceLogEvent event = new RaceLogCourseDesignChangedEventImpl(null, author, 0, null, CourseDesignerMode.ADMIN_CONSOLE);
serializer.serialize(event);
verify(courseDesignChangedEventSerializer).serialize(event);
}
@@ -21,6 +21,8 @@ sessionManager = com.sap.sse.security.SecurityWebSessionManager
securityManager.sessionManager = $sessionManager
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
securityManager.sessionManager.sessionDAO = $sessionDAO
# 24h timeout
securityManager.sessionManager.globalSessionTimeout = 86400000
cacheManager = com.sap.sse.security.SessionCacheManager
securityManager.cacheManager = $cacheManager
@@ -103,7 +103,7 @@ public class RaceGroupFactory {
skippedFirst = true;
} else {
Fleet fleet = raceColumn.getFleetByName(fleetName);
cells.add(new RaceCellImpl(raceColumn.getName(), raceColumn.getRaceLog(fleet)));
cells.add(new RaceCellImpl(raceColumn.getName(), raceColumn.getRaceLog(fleet), raceColumn.getFactor(), raceColumn.getExplicitFactor()));
}
}
}
@@ -80,7 +80,7 @@ public class CompetitorsResource extends AbstractSailingServerResource {
.type(MediaType.TEXT_PLAIN).build();
} else {
String jsonString = getCompetitorJSON(competitor).toJSONString();
response = Response.ok(jsonString, MediaType.APPLICATION_JSON).build();
response = Response.ok(jsonString).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
return response;
}
@@ -110,7 +110,7 @@ public class CompetitorsResource extends AbstractSailingServerResource {
JSONObject teamJson = teamJsonSerializer.serialize(team);
String json = teamJson.toJSONString();
return Response.ok(json, MediaType.APPLICATION_JSON).build();
return Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
/**
@@ -1,325 +1,356 @@
package com.sap.sailing.server.gateway.jaxrs.api;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.apache.commons.lang.StringEscapeUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.osgi.util.tracker.ServiceTracker;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
import com.sap.sailing.server.gateway.jaxrs.RestServletContainer;
import com.sap.sailing.server.gateway.serialization.NotJsonSerializableException;
import com.sap.sse.datamining.DataMiningServer;
import com.sap.sse.datamining.Query;
import com.sap.sse.datamining.StatisticQueryDefinition;
import com.sap.sse.datamining.data.QueryResult;
import com.sap.sse.datamining.shared.DataMiningSession;
import com.sap.sse.datamining.shared.GroupKey;
import com.sap.sse.datamining.shared.impl.CompoundGroupKey;
import com.sap.sse.datamining.shared.impl.GenericGroupKey;
import com.sap.sse.datamining.shared.impl.PredefinedQueryIdentifier;
import com.sap.sse.datamining.shared.impl.UUIDDataMiningSession;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
import com.sap.sse.datamining.shared.impl.dto.ModifiableStatisticQueryDefinitionDTO;
/**
* REST-API to run predefined queries and get the result as JSON.
* @author Lennart Hensler (D054527)
*/
@Path("/v1/datamining")
public class DataMiningResource extends AbstractSailingServerResource {
private static final String AVG_SPEED_PER_COMPETITOR_LEG_TYPE = "AvgSpeed_Per_Competitor-LegType";
private static final String SUM_DISTANCE_PER_COMPETITOR_LEG_TYPE = "SumDistance_Per_Competitor-LegType";
private static final String SUM_MANEUVERS_PER_COMPETITOR = "SumManeuvers_Per_Competitor";
private static final Function<Distance, Number> distanceMetersExtractor = (distance) -> distance.getMeters();
public DataMiningServer getDataMiningServer() {
@SuppressWarnings("unchecked")
ServiceTracker<DataMiningServer, DataMiningServer> dataMiningServerTracker = (ServiceTracker<DataMiningServer, DataMiningServer>) getServletContext().getAttribute(RestServletContainer.DATA_MINING_SERVER_TRACKER_NAME);
return dataMiningServerTracker.getService();
}
private Response getBadIdentifierErrorResponse(String identifier) {
return Response.status(Status.NOT_FOUND).entity("Couldn't find a predefined query with the identifier '" + identifier + "'.")
.type(MediaType.TEXT_PLAIN).build();
}
private Response getBadQueryDefinitionErrorResponse(ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO) {
return Response.status(Status.BAD_REQUEST).entity("Couldn't create a query for definition '" + StringEscapeUtils.escapeHtml(queryDefinitionDTO.toString()) + "'.")
.type(MediaType.TEXT_PLAIN).build();
}
private Response getNoDataFoundErrorResponse() {
return Response.status(Status.NOT_FOUND).entity("No data found.").type(MediaType.TEXT_PLAIN).build();
}
private Response getNotSerializableErrorResponse(Class<?> type) {
return Response.status(Status.INTERNAL_SERVER_ERROR).entity("Can't serialize values of type '" + type.getName() + "'.").
type(MediaType.TEXT_PLAIN).build();
}
// @GET
// @Produces("application/json;charset=UTF-8")
// public Response getPredefinedQueries() {
// return predefinedQueryIdentifiersToJSON(getDataMiningServer().getPredefinedQueryIdentifiers());
// }
public Response predefinedQueryIdentifiersToJSON(Iterable<PredefinedQueryIdentifier> identifiers) {
JSONArray predefinedQueryNames = new JSONArray();
for (PredefinedQueryIdentifier identifier : identifiers) {
JSONObject jsonId = new JSONObject();
jsonId.put("Identifier", identifier.getIdentifier());
jsonId.put("Description", identifier.getDescription());
predefinedQueryNames.add(jsonId);
}
String json = predefinedQueryNames.toJSONString();
return Response.ok(json, MediaType.APPLICATION_JSON).build();
}
// @GET
// @Produces("application/json;charset=UTF-8")
// @Path("{identifier}")
// public Response runPredefinedQuery(@PathParam("identifier") String identifier) {
// Response response;
// ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO = getPredefinedQuery(identifier);
// if (queryDefinitionDTO == null) {
// response = getBadIdentifierErrorResponse(identifier);
// } else {
// response = runQuery(queryDefinitionDTO);
// }
// return response;
// }
public Response avgSpeedPerCompetitorAndLegType(String regattaName) {
Response response;
ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO = getPredefinedQuery(AVG_SPEED_PER_COMPETITOR_LEG_TYPE);
if (queryDefinitionDTO == null) {
response = getBadIdentifierErrorResponse(AVG_SPEED_PER_COMPETITOR_LEG_TYPE);
} else {
FunctionDTO getRegattaName = new FunctionDTO(true, "getRegatta().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRegattaName_FilterSelection = new HashSet<>();
getRegattaName_FilterSelection.add(regattaName);
HashMap<FunctionDTO, HashSet<? extends Serializable>> race_FilterSelection = new HashMap<>();
race_FilterSelection.put(getRegattaName, getRegattaName_FilterSelection);
queryDefinitionDTO.setFilterSelectionFor(queryDefinitionDTO.getDataRetrieverChainDefinition().getRetrieverLevel(2), race_FilterSelection);
response = runQuery(queryDefinitionDTO, regattaName, null, null, "kn", 2);
}
return response;
}
public Response avgSpeedPerCompetitorAndLegType(String regattaName, String raceName) {
Response response;
ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO = getPredefinedQuery(AVG_SPEED_PER_COMPETITOR_LEG_TYPE);
if (queryDefinitionDTO == null) {
response = getBadIdentifierErrorResponse(AVG_SPEED_PER_COMPETITOR_LEG_TYPE);
} else {
FunctionDTO getRegattaName = new FunctionDTO(true, "getRegatta().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRegattaName_FilterSelection = new HashSet<>();
getRegattaName_FilterSelection.add(regattaName);
FunctionDTO getRaceName = new FunctionDTO(true, "getRace().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRaceName_FilterSelection = new HashSet<>();
getRaceName_FilterSelection.add(raceName);
HashMap<FunctionDTO, HashSet<? extends Serializable>> race_FilterSelection = new HashMap<>();
race_FilterSelection.put(getRegattaName, getRegattaName_FilterSelection);
race_FilterSelection.put(getRaceName, getRaceName_FilterSelection);
queryDefinitionDTO.setFilterSelectionFor(queryDefinitionDTO.getDataRetrieverChainDefinition().getRetrieverLevel(2), race_FilterSelection);
response = runQuery(queryDefinitionDTO, regattaName, raceName, null, "kn", 2);
}
return response;
}
public Response sumDistancePerCompetitorAndLegType(String regattaName) {
Response response;
ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO = getPredefinedQuery(SUM_DISTANCE_PER_COMPETITOR_LEG_TYPE);
if (queryDefinitionDTO == null) {
response = getBadIdentifierErrorResponse(SUM_DISTANCE_PER_COMPETITOR_LEG_TYPE);
} else {
FunctionDTO getRegattaName = new FunctionDTO(true, "getRegatta().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRegattaName_FilterSelection = new HashSet<>();
getRegattaName_FilterSelection.add(regattaName);
HashMap<FunctionDTO, HashSet<? extends Serializable>> race_FilterSelection = new HashMap<>();
race_FilterSelection.put(getRegattaName, getRegattaName_FilterSelection);
queryDefinitionDTO.setFilterSelectionFor(queryDefinitionDTO.getDataRetrieverChainDefinition().getRetrieverLevel(2), race_FilterSelection);
response = runQuery(queryDefinitionDTO, regattaName, null, distanceMetersExtractor, "m", 2);
}
return response;
}
public Response sumDistancePerCompetitorAndLegType(String regattaName, String raceName) {
Response response;
ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO = getPredefinedQuery(SUM_DISTANCE_PER_COMPETITOR_LEG_TYPE);
if (queryDefinitionDTO == null) {
response = getBadIdentifierErrorResponse(SUM_DISTANCE_PER_COMPETITOR_LEG_TYPE);
} else {
FunctionDTO getRegattaName = new FunctionDTO(true, "getRegatta().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRegattaName_FilterSelection = new HashSet<>();
getRegattaName_FilterSelection.add(regattaName);
FunctionDTO getRaceName = new FunctionDTO(true, "getRace().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRaceName_FilterSelection = new HashSet<>();
getRaceName_FilterSelection.add(raceName);
HashMap<FunctionDTO, HashSet<? extends Serializable>> race_FilterSelection = new HashMap<>();
race_FilterSelection.put(getRegattaName, getRegattaName_FilterSelection);
race_FilterSelection.put(getRaceName, getRaceName_FilterSelection);
queryDefinitionDTO.setFilterSelectionFor(queryDefinitionDTO.getDataRetrieverChainDefinition().getRetrieverLevel(2), race_FilterSelection);
response = runQuery(queryDefinitionDTO, regattaName, raceName, distanceMetersExtractor, "m", 2);
}
return response;
}
public Response sumManeuversPerCompetitor(String regattaName) {
Response response;
ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO = getPredefinedQuery(SUM_MANEUVERS_PER_COMPETITOR);
if (queryDefinitionDTO == null) {
response = getBadIdentifierErrorResponse(SUM_MANEUVERS_PER_COMPETITOR);
} else {
FunctionDTO getRegattaName = new FunctionDTO(true, "getRegatta().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRegattaName_FilterSelection = new HashSet<>();
getRegattaName_FilterSelection.add(regattaName);
HashMap<FunctionDTO, HashSet<? extends Serializable>> race_FilterSelection = new HashMap<>();
race_FilterSelection.put(getRegattaName, getRegattaName_FilterSelection);
queryDefinitionDTO.setFilterSelectionFor(queryDefinitionDTO.getDataRetrieverChainDefinition().getRetrieverLevel(2), race_FilterSelection);
response = runQuery(queryDefinitionDTO, regattaName, null, null, null, 0);
}
return response;
}
public Response sumManeuversPerCompetitor(String regattaName, String raceName) {
Response response;
ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO = getPredefinedQuery(SUM_MANEUVERS_PER_COMPETITOR);
if (queryDefinitionDTO == null) {
response = getBadIdentifierErrorResponse(SUM_MANEUVERS_PER_COMPETITOR);
} else {
FunctionDTO getRegattaName = new FunctionDTO(true, "getRegatta().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRegattaName_FilterSelection = new HashSet<>();
getRegattaName_FilterSelection.add(regattaName);
FunctionDTO getRaceName = new FunctionDTO(true, "getRace().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRaceName_FilterSelection = new HashSet<>();
getRaceName_FilterSelection.add(raceName);
HashMap<FunctionDTO, HashSet<? extends Serializable>> race_FilterSelection = new HashMap<>();
race_FilterSelection.put(getRegattaName, getRegattaName_FilterSelection);
race_FilterSelection.put(getRaceName, getRaceName_FilterSelection);
queryDefinitionDTO.setFilterSelectionFor(queryDefinitionDTO.getDataRetrieverChainDefinition().getRetrieverLevel(2), race_FilterSelection);
response = runQuery(queryDefinitionDTO, regattaName, raceName, null, null, 0);
}
return response;
}
private ModifiableStatisticQueryDefinitionDTO getPredefinedQuery(String identifier) {
DataMiningServer dataMiningServer = getDataMiningServer();
PredefinedQueryIdentifier queryIdentifier = new PredefinedQueryIdentifier(identifier, "");
return dataMiningServer.getPredefinedQueryDefinitionDTO(queryIdentifier);
}
private <ResultType> Response runQuery(ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO, String regattaName, String raceName,
Function<ResultType, Number> numberExtractor, String resultUnit, int resultPlaces) {
Response response;
DataMiningServer dataMiningServer = getDataMiningServer();
StatisticQueryDefinition<?, ?, ?, ?> queryDefinition = dataMiningServer.getQueryDefinitionForDTO(queryDefinitionDTO);
Query<?> query = queryDefinition == null ? null : dataMiningServer.createQuery(queryDefinition);
if (query == null) {
response = getBadQueryDefinitionErrorResponse(queryDefinitionDTO);
} else {
DataMiningSession session = new UUIDDataMiningSession(UUID.randomUUID());
long requestTimepoint = System.currentTimeMillis();
@SuppressWarnings("unchecked")
QueryResult<ResultType> result = (QueryResult<ResultType>) dataMiningServer.runNewQueryAndAbortPreviousQueries(session, query);
if (result == null || result.isEmpty()) {
response = getNoDataFoundErrorResponse();
} else {
try {
JSONObject jsonResult = new JSONObject();
jsonResult.put("state", result.getState());
jsonResult.put("requestTimepoint", requestTimepoint);
jsonResult.put("calculationDuration-s", roundDouble(result.getCalculationTimeInSeconds(), 2));
jsonResult.put("description", result.getResultSignifier());
if (regattaName != null && !regattaName.isEmpty()) {
jsonResult.put("regatta", regattaName);
}
if (raceName != null && !raceName.isEmpty()) {
jsonResult.put("race", raceName);
}
jsonResult.put("resultUnit", resultUnit != null && !resultUnit.isEmpty() ? resultUnit : "None");
jsonResult.put("results", resultValuesToJSON(result, numberExtractor, resultPlaces));
response = Response.ok(jsonResult.toJSONString(), MediaType.APPLICATION_JSON).build();
} catch (NotJsonSerializableException e) {
response = getNotSerializableErrorResponse(e.getNotSerializableClass());
}
}
}
return response;
}
private <ResultType> JSONArray resultValuesToJSON(QueryResult<ResultType> result, Function<ResultType, Number> numberExtractor,
int places) throws NotJsonSerializableException {
if (!Number.class.isAssignableFrom(result.getResultType()) && numberExtractor == null) {
throw new NotJsonSerializableException(result.getResultType());
}
// TODO see Bug 3334
Map<GroupKey, ResultType> values = result.getResults();
JSONArray jsonResultValues = new JSONArray();
for (GroupKey groupKey : values.keySet()) {
JSONObject jsonResultEntry = new JSONObject();
jsonResultEntry.put("groupKey", groupKeyToJSON(groupKey));
Number value = numberExtractor != null ? numberExtractor.apply(values.get(groupKey)) : (Number) values.get(groupKey);
jsonResultEntry.put("value", roundDouble(value.doubleValue(), places));
jsonResultValues.add(jsonResultEntry);
}
return jsonResultValues;
}
private JSONArray groupKeyToJSON(GroupKey groupKey) throws NotJsonSerializableException {
// TODO Convert the concrete key values and not just the string represantation
JSONArray jsonResultEntryGroupKeys = new JSONArray();
if (groupKey instanceof GenericGroupKey<?>) {
jsonResultEntryGroupKeys.add(simpleGroupKeyToJSON(groupKey));
} else if (groupKey instanceof CompoundGroupKey) {
for (GroupKey key : groupKey.getKeys()) {
jsonResultEntryGroupKeys.add(groupKeyToJSON(key));
}
} else {
throw new NotJsonSerializableException(groupKey.getClass());
}
return jsonResultEntryGroupKeys;
}
private Object simpleGroupKeyToJSON(GroupKey groupKey) {
return groupKey.asString();
}
}
package com.sap.sailing.server.gateway.jaxrs.api;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.apache.commons.lang.StringEscapeUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.osgi.util.tracker.ServiceTracker;
import com.sap.sailing.datamining.SailingPredefinedQueries;
import com.sap.sailing.datamining.data.HasTrackedRaceContext;
import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
import com.sap.sailing.server.gateway.jaxrs.RestServletContainer;
import com.sap.sailing.server.gateway.serialization.NotJsonSerializableException;
import com.sap.sse.datamining.DataMiningServer;
import com.sap.sse.datamining.Query;
import com.sap.sse.datamining.StatisticQueryDefinition;
import com.sap.sse.datamining.data.QueryResult;
import com.sap.sse.datamining.shared.DataMiningSession;
import com.sap.sse.datamining.shared.GroupKey;
import com.sap.sse.datamining.shared.impl.CompoundGroupKey;
import com.sap.sse.datamining.shared.impl.GenericGroupKey;
import com.sap.sse.datamining.shared.impl.PredefinedQueryIdentifier;
import com.sap.sse.datamining.shared.impl.UUIDDataMiningSession;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
import com.sap.sse.datamining.shared.impl.dto.ModifiableStatisticQueryDefinitionDTO;
/**
* REST-API to run predefined queries and get the result as JSON.
* @author Lennart Hensler (D054527)
*/
@Path("/v1/datamining")
public class DataMiningResource extends AbstractSailingServerResource {
private SailingPredefinedQueries predefinedDataMiningQueries;
private static final Function<Distance, Number> distanceMetersExtractor = (distance) -> distance.getMeters();
public final static String QUERY_AVERAGE_SPEED_PER_REGATTA_RACE = "AvgSpeed_Per_Regatta-Race";
public final static String QUERY_AVERAGE_SPEED_PER_COMPETITOR_LEGTYPE = "AvgSpeed_Per_Competitor-LegType";
public final static String QUERY_AVERAGE_SPEED_PER_COMPETITOR = "AvgSpeed_Per_Competitor";
public final static String QUERY_DISTANCE_TRAVELED_PER_COMPETITOR_LEGTYPE = "DistanceTraveled_Per_Competitor-LegType";
public final static String QUERY_DISTANCE_TRAVELED_PER_COMPETITOR = "DistanceTraveled_Per_Competitor";
public final static String QUERY_MANEUVERS_PER_COMPETITOR = "Maneuvers_Per_Competitor";
public List<PredefinedQueryIdentifier> getPredefinedRegattaDataMiningQueries() {
return getPredefinedQueriesByNames(
QUERY_AVERAGE_SPEED_PER_COMPETITOR_LEGTYPE,
QUERY_AVERAGE_SPEED_PER_COMPETITOR,
QUERY_DISTANCE_TRAVELED_PER_COMPETITOR_LEGTYPE,
QUERY_DISTANCE_TRAVELED_PER_COMPETITOR,
QUERY_MANEUVERS_PER_COMPETITOR);
}
public List<PredefinedQueryIdentifier> getPredefinedRaceDataMiningQueries() {
return getPredefinedQueriesByNames(
QUERY_AVERAGE_SPEED_PER_REGATTA_RACE,
QUERY_AVERAGE_SPEED_PER_COMPETITOR_LEGTYPE,
QUERY_AVERAGE_SPEED_PER_COMPETITOR,
QUERY_DISTANCE_TRAVELED_PER_COMPETITOR_LEGTYPE,
QUERY_DISTANCE_TRAVELED_PER_COMPETITOR,
QUERY_MANEUVERS_PER_COMPETITOR);
}
public List<PredefinedQueryIdentifier> getPredefinedQueriesByNames(String... names) {
List<PredefinedQueryIdentifier> result = new ArrayList<>();
SailingPredefinedQueries predefinedMiningQueries = getPredefinedMiningQueries();
for(PredefinedQueryIdentifier id: predefinedMiningQueries.getQueries().keySet()) {
for(String name: names) {
if(id.getIdentifier().equals(name)) {
result.add(id);
}
}
}
return result;
}
public DataMiningServer getDataMiningServer() {
@SuppressWarnings("unchecked")
ServiceTracker<DataMiningServer, DataMiningServer> dataMiningServerTracker = (ServiceTracker<DataMiningServer, DataMiningServer>) getServletContext().getAttribute(RestServletContainer.DATA_MINING_SERVER_TRACKER_NAME);
return dataMiningServerTracker.getService();
}
private Response getBadIdentifierErrorResponse(String identifier) {
return Response.status(Status.NOT_FOUND).entity("Couldn't find a predefined query with the identifier '" + identifier + "'.")
.type(MediaType.TEXT_PLAIN).build();
}
private Response getBadQueryDefinitionErrorResponse(ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO) {
return Response.status(Status.BAD_REQUEST).entity("Couldn't create a query for definition '" + StringEscapeUtils.escapeHtml(queryDefinitionDTO.toString()) + "'.")
.type(MediaType.TEXT_PLAIN).build();
}
private Response getNoDataFoundErrorResponse() {
return Response.status(Status.NOT_FOUND).entity("No data found.").type(MediaType.TEXT_PLAIN).build();
}
private Response getNotSerializableErrorResponse(Class<?> type) {
return Response.status(Status.INTERNAL_SERVER_ERROR).entity("Can't serialize values of type '" + type.getName() + "'.").
type(MediaType.TEXT_PLAIN).build();
}
private SailingPredefinedQueries getPredefinedMiningQueries() {
if (predefinedDataMiningQueries == null) {
predefinedDataMiningQueries = new SailingPredefinedQueries();
}
return predefinedDataMiningQueries;
}
public Response predefinedQueryIdentifiersToJSON(Iterable<PredefinedQueryIdentifier> identifiers) {
JSONArray predefinedQueryNames = new JSONArray();
for (PredefinedQueryIdentifier identifier : identifiers) {
JSONObject jsonId = new JSONObject();
jsonId.put("Identifier", identifier.getIdentifier());
jsonId.put("Description", identifier.getDescription());
predefinedQueryNames.add(jsonId);
}
String json = predefinedQueryNames.toJSONString();
return Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
public Response avgSpeedPerCompetitorAndLegType(String regattaName) {
return avgSpeedPerCompetitorQuery(SailingPredefinedQueries.QUERY_AVERAGE_SPEED_PER_COMPETITOR_LEGTYPE, regattaName);
}
public Response avgSpeedPerCompetitor(String regattaName) {
return avgSpeedPerCompetitorQuery(SailingPredefinedQueries.QUERY_AVERAGE_SPEED_PER_COMPETITOR, regattaName);
}
public Response avgSpeedPerCompetitorAndLegType(String regattaName, String raceName) {
return avgSpeedPerCompetitorQuery(SailingPredefinedQueries.QUERY_AVERAGE_SPEED_PER_COMPETITOR_LEGTYPE, regattaName, raceName);
}
public Response avgSpeedPerCompetitor(String regattaName, String raceName) {
return avgSpeedPerCompetitorQuery(SailingPredefinedQueries.QUERY_AVERAGE_SPEED_PER_COMPETITOR, regattaName, raceName);
}
private Response avgSpeedPerCompetitorQuery(String predefinedQueriesName, String regattaName) {
return avgSpeedPerCompetitorQuery(predefinedQueriesName, regattaName, null);
}
private Response avgSpeedPerCompetitorQuery(String predefinedQueriesName, String regattaName, String raceName) {
Response response;
ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO = getPredefinedQuery(predefinedQueriesName);
if (queryDefinitionDTO == null) {
response = getBadIdentifierErrorResponse(predefinedQueriesName);
} else {
HashMap<FunctionDTO, HashSet<? extends Serializable>> race_FilterSelection = new HashMap<>();
FunctionDTO getRegattaName = new FunctionDTO(true, "getRegatta().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRegattaName_FilterSelection = new HashSet<>();
getRegattaName_FilterSelection.add(regattaName);
race_FilterSelection.put(getRegattaName, getRegattaName_FilterSelection);
if(raceName != null) {
FunctionDTO getRaceName = new FunctionDTO(true, "getRace().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRaceName_FilterSelection = new HashSet<>();
getRaceName_FilterSelection.add(raceName);
race_FilterSelection.put(getRaceName, getRaceName_FilterSelection);
}
queryDefinitionDTO.setFilterSelectionFor(queryDefinitionDTO.getDataRetrieverChainDefinition().getRetrieverLevel(2), race_FilterSelection);
response = runQuery(queryDefinitionDTO, regattaName, raceName, null, "kn", 2);
}
return response;
}
public Response sumDistanceTraveledPerCompetitor(String regattaName) {
return sumDistanceTraveledPerCompetitorQuery(SailingPredefinedQueries.QUERY_DISTANCE_TRAVELED_PER_COMPETITOR, regattaName);
}
public Response sumDistanceTraveledPerCompetitorAndLegType(String regattaName) {
return sumDistanceTraveledPerCompetitorQuery(SailingPredefinedQueries.QUERY_DISTANCE_TRAVELED_PER_COMPETITOR_LEGTYPE, regattaName);
}
public Response sumDistanceTraveledPerCompetitor(String regattaName, String raceName) {
return sumDistanceTraveledPerCompetitorQuery(SailingPredefinedQueries.QUERY_DISTANCE_TRAVELED_PER_COMPETITOR, regattaName, raceName);
}
public Response sumDistanceTraveledPerCompetitorAndLegType(String regattaName, String raceName) {
return sumDistanceTraveledPerCompetitorQuery(SailingPredefinedQueries.QUERY_DISTANCE_TRAVELED_PER_COMPETITOR_LEGTYPE, regattaName, raceName);
}
private Response sumDistanceTraveledPerCompetitorQuery(String predefinedQueriesName, String regattaName) {
return sumDistanceTraveledPerCompetitorQuery(predefinedQueriesName, regattaName, null);
}
private Response sumDistanceTraveledPerCompetitorQuery(String predefinedQueriesName, String regattaName, String raceName) {
Response response;
ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO = getPredefinedQuery(predefinedQueriesName);
if (queryDefinitionDTO == null) {
response = getBadIdentifierErrorResponse(predefinedQueriesName);
} else {
HashMap<FunctionDTO, HashSet<? extends Serializable>> race_FilterSelection = new HashMap<>();
FunctionDTO getRegattaName = new FunctionDTO(true, "getRegatta().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRegattaName_FilterSelection = new HashSet<>();
getRegattaName_FilterSelection.add(regattaName);
race_FilterSelection.put(getRegattaName, getRegattaName_FilterSelection);
if(raceName != null) {
FunctionDTO getRaceName = new FunctionDTO(true, "getRace().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRaceName_FilterSelection = new HashSet<>();
getRaceName_FilterSelection.add(raceName);
race_FilterSelection.put(getRaceName, getRaceName_FilterSelection);
}
queryDefinitionDTO.setFilterSelectionFor(queryDefinitionDTO.getDataRetrieverChainDefinition().getRetrieverLevel(2), race_FilterSelection);
response = runQuery(queryDefinitionDTO, regattaName, raceName, distanceMetersExtractor, "m", 2);
}
return response;
}
public Response sumManeuversPerCompetitor(String regattaName) {
return sumManeuversPerCompetitorQuery(SailingPredefinedQueries.QUERY_MANEUVERS_PER_COMPETITOR, regattaName);
}
public Response sumManeuversPerCompetitor(String regattaName, String raceName) {
return sumManeuversPerCompetitorQuery(SailingPredefinedQueries.QUERY_MANEUVERS_PER_COMPETITOR, regattaName, raceName);
}
private Response sumManeuversPerCompetitorQuery(String predefinedQueriesName, String regattaName) {
return sumManeuversPerCompetitorQuery(predefinedQueriesName, regattaName, null);
}
private Response sumManeuversPerCompetitorQuery(String predefinedQueriesName, String regattaName, String raceName) {
Response response;
ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO = getPredefinedQuery(predefinedQueriesName);
if (queryDefinitionDTO == null) {
response = getBadIdentifierErrorResponse(predefinedQueriesName);
} else {
HashMap<FunctionDTO, HashSet<? extends Serializable>> race_FilterSelection = new HashMap<>();
FunctionDTO getRegattaName = new FunctionDTO(true, "getRegatta().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRegattaName_FilterSelection = new HashSet<>();
getRegattaName_FilterSelection.add(regattaName);
race_FilterSelection.put(getRegattaName, getRegattaName_FilterSelection);
if (raceName != null) {
FunctionDTO getRaceName = new FunctionDTO(true, "getRace().getName()", HasTrackedRaceContext.class.getName(), String.class.getName(), new ArrayList<String>(), "", 0);
HashSet<Serializable> getRaceName_FilterSelection = new HashSet<>();
getRaceName_FilterSelection.add(raceName);
race_FilterSelection.put(getRaceName, getRaceName_FilterSelection);
}
queryDefinitionDTO.setFilterSelectionFor(queryDefinitionDTO.getDataRetrieverChainDefinition().getRetrieverLevel(2), race_FilterSelection);
response = runQuery(queryDefinitionDTO, regattaName, raceName, null, null, 0);
}
return response;
}
private ModifiableStatisticQueryDefinitionDTO getPredefinedQuery(String identifier) {
DataMiningServer dataMiningServer = getDataMiningServer();
PredefinedQueryIdentifier queryIdentifier = new PredefinedQueryIdentifier(identifier, "");
return dataMiningServer.getPredefinedQueryDefinitionDTO(queryIdentifier);
}
private <ResultType> Response runQuery(ModifiableStatisticQueryDefinitionDTO queryDefinitionDTO, String regattaName, String raceName,
Function<ResultType, Number> numberExtractor, String resultUnit, int resultPlaces) {
Response response;
DataMiningServer dataMiningServer = getDataMiningServer();
StatisticQueryDefinition<?, ?, ?, ?> queryDefinition = dataMiningServer.getQueryDefinitionForDTO(queryDefinitionDTO);
Query<?> query = queryDefinition == null ? null : dataMiningServer.createQuery(queryDefinition);
if (query == null) {
response = getBadQueryDefinitionErrorResponse(queryDefinitionDTO);
} else {
DataMiningSession session = new UUIDDataMiningSession(UUID.randomUUID());
long requestTimepoint = System.currentTimeMillis();
@SuppressWarnings("unchecked")
QueryResult<ResultType> result = (QueryResult<ResultType>) dataMiningServer.runNewQueryAndAbortPreviousQueries(session, query);
if (result == null || result.isEmpty()) {
response = getNoDataFoundErrorResponse();
} else {
try {
JSONObject jsonResult = new JSONObject();
jsonResult.put("state", result.getState());
jsonResult.put("requestTimepoint", requestTimepoint);
jsonResult.put("calculationDuration-s", roundDouble(result.getCalculationTimeInSeconds(), 2));
jsonResult.put("description", result.getResultSignifier());
if (regattaName != null && !regattaName.isEmpty()) {
jsonResult.put("regatta", regattaName);
}
if (raceName != null && !raceName.isEmpty()) {
jsonResult.put("race", raceName);
}
jsonResult.put("resultUnit", resultUnit != null && !resultUnit.isEmpty() ? resultUnit : "None");
jsonResult.put("results", resultValuesToJSON(result, numberExtractor, resultPlaces));
response = Response.ok(jsonResult.toJSONString()).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
} catch (NotJsonSerializableException e) {
response = getNotSerializableErrorResponse(e.getNotSerializableClass());
}
}
}
return response;
}
private <ResultType> JSONArray resultValuesToJSON(QueryResult<ResultType> result, Function<ResultType, Number> numberExtractor,
int places) throws NotJsonSerializableException {
if (!Number.class.isAssignableFrom(result.getResultType()) && numberExtractor == null) {
throw new NotJsonSerializableException(result.getResultType());
}
// TODO see Bug 3334
Map<GroupKey, ResultType> values = result.getResults();
JSONArray jsonResultValues = new JSONArray();
for (GroupKey groupKey : values.keySet()) {
JSONObject jsonResultEntry = new JSONObject();
jsonResultEntry.put("groupKey", groupKeyToJSON(groupKey));
Number value = numberExtractor != null ? numberExtractor.apply(values.get(groupKey)) : (Number) values.get(groupKey);
jsonResultEntry.put("value", roundDouble(value.doubleValue(), places));
jsonResultValues.add(jsonResultEntry);
}
return jsonResultValues;
}
private JSONArray groupKeyToJSON(GroupKey groupKey) throws NotJsonSerializableException {
// TODO Convert the concrete key values and not just the string representation
JSONArray jsonResultEntryGroupKeys = new JSONArray();
if (groupKey instanceof GenericGroupKey<?>) {
jsonResultEntryGroupKeys.add(simpleGroupKeyToJSON(groupKey));
} else if (groupKey instanceof CompoundGroupKey) {
for (GroupKey key : groupKey.getKeys()) {
jsonResultEntryGroupKeys.add(groupKeyToJSON(key));
}
} else {
throw new NotJsonSerializableException(groupKey.getClass());
}
return jsonResultEntryGroupKeys;
}
private Object simpleGroupKeyToJSON(GroupKey groupKey) {
return groupKey.asString();
}
}
@@ -46,7 +46,7 @@ public class EventsResource extends AbstractSailingServerResource {
}
}
String json = result.toJSONString();
return Response.ok(json, MediaType.APPLICATION_JSON).build();
return Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
@GET
@@ -71,7 +71,7 @@ public class EventsResource extends AbstractSailingServerResource {
JSONObject eventJson = eventSerializer.serialize(event);
String json = eventJson.toJSONString();
response = Response.ok(json, MediaType.APPLICATION_JSON).build();
response = Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
return response;
}
@@ -98,7 +98,7 @@ public class EventsResource extends AbstractSailingServerResource {
filterByLeaderboard, filterByDayOffset, getService());
JSONObject raceStatesJson = eventRaceStatesSerializer.serialize(new Pair<Event, Iterable<Leaderboard>>(event, getService().getLeaderboards().values()));
String json = raceStatesJson.toJSONString();
response = Response.ok(json, MediaType.APPLICATION_JSON).build();
response = Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
return response;
}
@@ -13,6 +13,7 @@ import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
@@ -65,7 +66,7 @@ public class FileStorageResource extends AbstractSailingServerResource {
getService().getFileStorageManagementService().getActiveFileStorageService()
.removeFile(new URI(uri));
result.put("status", Status.OK.name());
response = Response.ok().entity(result.toJSONString()).build();
response = Response.ok().entity(result.toJSONString()).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
} catch (NoCorrespondingServiceRegisteredException | OperationFailedException | InvalidPropertiesException
| URISyntaxException | IOException e) {
final String errorMessage = "Could not delete file with URI "+uri+": "+e.getMessage();
@@ -52,7 +52,7 @@ public class LeaderboardGroupsResource extends AbstractSailingServerResource {
// header option is set to allow communication between two sapsailing servers, especially for
// the master data import functionality
return Response.ok(json, MediaType.APPLICATION_JSON).header("Access-Control-Allow-Origin", "*").build();
return Response.ok(json).header("Access-Control-Allow-Origin", "*").header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
@GET
@@ -154,7 +154,7 @@ public class LeaderboardGroupsResource extends AbstractSailingServerResource {
}
}
String json = jsonLeaderboardGroup.toJSONString();
response = Response.ok(json, MediaType.APPLICATION_JSON).build();
response = Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
return response;
}
@@ -57,6 +57,7 @@ import com.sap.sailing.domain.common.dto.LeaderboardDTO;
import com.sap.sailing.domain.common.dto.LeaderboardEntryDTO;
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
import com.sap.sailing.domain.common.impl.RaceColumnConstants;
import com.sap.sailing.domain.common.racelog.RaceLogServletConstants;
import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants;
import com.sap.sailing.domain.common.security.Permission;
@@ -103,7 +104,7 @@ public class LeaderboardsResource extends AbstractSailingServerResource {
jsonLeaderboards.add(leaderboardName);
}
String json = jsonLeaderboards.toJSONString();
return Response.ok(json, MediaType.APPLICATION_JSON).build();
return Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
@GET
@@ -137,7 +138,7 @@ public class LeaderboardsResource extends AbstractSailingServerResource {
jsonLeaderboard.writeJSONString(sw);
String json = sw.getBuffer().toString();
response = Response.ok(json, MediaType.APPLICATION_JSON).build();
response = Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
} catch (NoWindException | InterruptedException | ExecutionException | IOException e) {
response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage())
.type(MediaType.TEXT_PLAIN).build();
@@ -508,7 +509,7 @@ public class LeaderboardsResource extends AbstractSailingServerResource {
} else {
JSONObject json = CompetitorsResource.getCompetitorJSON(competitor);
json.put("displayName", leaderboard.getDisplayName(competitor));
response = Response.ok(json.toJSONString(), MediaType.APPLICATION_JSON).build();
response = Response.ok(json.toJSONString()).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
return response;
}
@@ -579,7 +580,7 @@ public class LeaderboardsResource extends AbstractSailingServerResource {
}
JSONObject result = new JSONObject();
result.put("marks", array);
return Response.ok(result.toJSONString(), MediaType.APPLICATION_JSON).build();
return Response.ok(result.toJSONString()).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
private final MarkJsonSerializer markSerializer = new MarkJsonSerializer();
@@ -670,7 +671,7 @@ public class LeaderboardsResource extends AbstractSailingServerResource {
.type(MediaType.TEXT_PLAIN).build();
} else {
final JSONObject json = getJsonForColumnFactors(leaderboard, raceColumns);
response = Response.ok(json.toJSONString(), MediaType.APPLICATION_JSON).build();
response = Response.ok(json.toJSONString()).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
}
return response;
@@ -678,16 +679,16 @@ public class LeaderboardsResource extends AbstractSailingServerResource {
private JSONObject getJsonForColumnFactors(final Leaderboard leaderboard, final Iterable<RaceColumn> raceColumns) {
final JSONObject json = new JSONObject();
json.put("leaderboard_name", leaderboard.getName());
json.put("leaderboard_display_name", leaderboard.getDisplayName());
json.put(RaceColumnConstants.LEADERBOARD_NAME, leaderboard.getName());
json.put(RaceColumnConstants.LEADERBOARD_DISPLAY_NAME, leaderboard.getDisplayName());
final JSONArray raceColumnsAsJson = new JSONArray();
json.put("race_columns", raceColumnsAsJson);
json.put(RaceColumnConstants.RACE_COLUMNS, raceColumnsAsJson);
for (final RaceColumn rc : raceColumns) {
final JSONObject raceColumnAsJson = new JSONObject();
raceColumnsAsJson.add(raceColumnAsJson);
raceColumnAsJson.put("race_column_name", rc.getName());
raceColumnAsJson.put("explicit_factor", rc.getExplicitFactor());
raceColumnAsJson.put("factor", rc.getFactor());
raceColumnAsJson.put(RaceColumnConstants.RACE_COLUMN_NAME, rc.getName());
raceColumnAsJson.put(RaceColumnConstants.EXPLICIT_FACTOR, rc.getExplicitFactor());
raceColumnAsJson.put(RaceColumnConstants.FACTOR, rc.getFactor());
}
return json;
}
@@ -724,7 +725,7 @@ public class LeaderboardsResource extends AbstractSailingServerResource {
} else {
raceColumn.setFactor(explicitFactor);
final JSONObject json = getJsonForColumnFactors(leaderboard, Collections.singleton(raceColumn));
response = Response.ok(json.toJSONString(), MediaType.APPLICATION_JSON).build();
response = Response.ok(json.toJSONString()).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
}
return response;
@@ -3,6 +3,7 @@ package com.sap.sailing.server.gateway.jaxrs.api;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
@@ -12,6 +13,6 @@ public class PingResource extends AbstractSailingServerResource {
@GET
@Produces("application/json;charset=UTF-8")
public Response ping() {
return Response.ok().build();
return Response.ok().header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
}
@@ -170,7 +170,7 @@ public class PolarResource extends AbstractSailingServerResource {
} finally {
maneuverBasedWindEstimationTrackImpl.unlockAfterRead();
}
response = Response.ok(resultAsJson.toJSONString(), MediaType.APPLICATION_JSON).build();
response = Response.ok(resultAsJson.toJSONString()).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
}
return response;
@@ -43,6 +43,6 @@ public class SearchResource extends AbstractSailingServerResource {
for (LeaderboardSearchResult searchResult : searchResults) {
jsonSearchResults.add(serializer.serialize(searchResult));
}
return Response.ok(jsonSearchResults.toJSONString(), MediaType.APPLICATION_JSON).build();
return Response.ok(jsonSearchResults.toJSONString()).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
}
@@ -33,6 +33,7 @@ import com.sap.sailing.domain.base.impl.CourseDataImpl;
import com.sap.sailing.domain.base.impl.MarkImpl;
import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.base.impl.WaypointImpl;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.MarkType;
import com.sap.sailing.domain.common.PassingInstruction;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
@@ -133,11 +134,11 @@ public class RaceLogReplicationTest extends AbstractLogReplicationTest<RaceLog,
final String raceColumnName = "R1";
Regatta masterRegatta = setupRegatta(RegattaImpl.getDefaultName(regattaName, BOAT_CLASS_NAME_49er), seriesName, fleetName, BOAT_CLASS_NAME_49er);
RaceLog masterLog = setupRaceColumn(masterRegatta, seriesName, raceColumnName, fleetName);
raceLogEvent = new RaceLogCourseDesignChangedEventImpl(MillisecondsTimePoint.now(), author, 43, createCourseData());
raceLogEvent = new RaceLogCourseDesignChangedEventImpl(MillisecondsTimePoint.now(), author, 43, createCourseData(), CourseDesignerMode.ADMIN_CONSOLE);
masterLog.add(raceLogEvent);
replicaReplicator.startToReplicateFrom(masterDescriptor);
RaceLog replicaLog = getReplicaLog(seriesName, fleetName, raceColumnName, masterRegatta);
anotherRaceLogEvent = new RaceLogCourseDesignChangedEventImpl(MillisecondsTimePoint.now(), author, 43, createCourseData());
anotherRaceLogEvent = new RaceLogCourseDesignChangedEventImpl(MillisecondsTimePoint.now(), author, 43, createCourseData(), CourseDesignerMode.ADMIN_CONSOLE);
addAndValidateEventIds(masterLog, replicaLog, anotherRaceLogEvent);
compareReplicatedCourseDesignEvent(replicaLog, (RaceLogCourseDesignChangedEvent) anotherRaceLogEvent);
}
@@ -162,11 +163,11 @@ public class RaceLogReplicationTest extends AbstractLogReplicationTest<RaceLog,
final String raceColumnName = "R1";
FlexibleLeaderboard masterLeaderboard = setupFlexibleLeaderboard(leaderboardName);
RaceLog masterLog = setupRaceColumn(leaderboardName, fleetName, raceColumnName);
raceLogEvent = new RaceLogCourseDesignChangedEventImpl(MillisecondsTimePoint.now(), author, 43, createCourseData());
raceLogEvent = new RaceLogCourseDesignChangedEventImpl(MillisecondsTimePoint.now(), author, 43, createCourseData(), CourseDesignerMode.ADMIN_CONSOLE);
masterLog.add(raceLogEvent);
replicaReplicator.startToReplicateFrom(masterDescriptor);
RaceLog replicaLog = getReplicaLog(fleetName, raceColumnName, masterLeaderboard);
anotherRaceLogEvent = new RaceLogCourseDesignChangedEventImpl(MillisecondsTimePoint.now(), author, 43, createCourseData());
anotherRaceLogEvent = new RaceLogCourseDesignChangedEventImpl(MillisecondsTimePoint.now(), author, 43, createCourseData(), CourseDesignerMode.ADMIN_CONSOLE);
addAndValidateEventIds(masterLog, replicaLog, anotherRaceLogEvent);
compareReplicatedCourseDesignEvent(replicaLog, (RaceLogCourseDesignChangedEvent) anotherRaceLogEvent);
}
@@ -1,27 +1,27 @@
save=Сохранить
remove=Удалить
ok=OK
ok=ОК
cancel=Отмена
add=Добавить
edit=Изменить
serverError=An error occurred while attempting to contact the server. Please check your network connection and try again.
serverError=При попытке обратиться к серверу возникла ошибка. Проверьте сетевое подключение и повторите попытку.
close=Закрыть
remoteProcedureCall=Remote Procedure Call
serverReplies=Server replies
errorCommunicatingWithServer=Error communicating with server
active=Active
setAsActive=Set as active
couldNotTestProperties=Could not test properties
couldNotSetProperties=Could not set properties
couldNotSetActiveService=Could not set active service
couldNotLoadActiveService=Could not load active service
couldNotLoadAvailableServices=Could not load available services
remoteProcedureCall=Удалить вызов процедуры
serverReplies=Ответы сервера
errorCommunicatingWithServer=Ошибка связи с сервером
active=Активно
setAsActive=Установить как активное
couldNotTestProperties=Не удалось проверить свойства
couldNotSetProperties=Не удалось установить свойства
couldNotSetActiveService=Не удалось установить активную службу
couldNotLoadActiveService=Не удалось загрузить активную службу
couldNotLoadAvailableServices=Не удалось загрузить доступные службы
refresh=Обновить
name=Имя
value=Значение
description=Описание
error=Error
error=Ошибка
configuration=Конфигурация
settingsForComponent=Параметры {0}
settings=Параметры
pleaseSelect=Please select
settingsForComponent=Параметры для {0}
pleaseSelect=Выберите
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" original="/usr/sap/ljs/app/Converter_123998372962663836/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en">
<file datatype="javapropertyresourcebundle" original="/usr/sap/ljs/app/Converter_1765894632275589659/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en">
<header>
<skl>
<internal-file crc="85e48bcf9e250e66161b1b03d11cf699" form="base64">H4sIAAAAAAAAAH1SzU4jMQy+5yn8BIgXyKEa2MuuAFEEZ5O4naiZZOR4WiG0746TtLNod+Hi/2/8eb4UPJLdqjFMU9b4sTmTD/b+p3GYHEU7NGfQe7vx3pAPYm/VmEJ8JL5lzmw3CagGkJ1bmMnDaQyRAEVomiWkPUgGl5OgE5CRoKOv4CESFgI3kjvAW14YEskp86FOJ3IScgJMHoTfAPcY0pVxMReyQ7WNudADZ0d+YRowxnaGEKxFqNUz30eaY6Bity0D7qlp7Ic8TUsKDivhlyBjH7LtRuXzqQsnbZ+PMHpT0L+3aU73yKb0WLcIYIE+YFxeor/L8kRFlNxMLJXKUMuQsv4YbcC8dlaAfua/87rqi/G+v/IPjv5CdDaNvDZX1K+M/itY1N63uCOGiK/xAi3/YC8DF3hR5XZMZVS1mjcJJ7J3aswR40L2uVrjqTgOc30G9uZP3AXryiiTtAv7hbFNDZ+zqkbVqwreg7Xyowk+50RJ1i7sVOn3699mbu9yS1GfoD0/0tIy8wFPN7vhNwMAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-03-16T17:55:33Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
<phase company-name="SAP AG" date="2016-04-14T07:19:06Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.0.0"/>
</header>
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-04-18T13:56:50Z" original="/usr/sap/ljs/app/Converter_1765894632275589659/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="en">
<header>
<skl>
<internal-file crc="85e48bcf9e250e66161b1b03d11cf699" form="base64">H4sIAAAAAAAAAH1SzU4jMQy+5yn8BIgXyKEa2MuuAFEEZ5O4naiZZOR4WiG0746TtLNod+Hi/2/8eb4UPJLdqjFMU9b4sTmTD/b+p3GYHEU7NGfQe7vx3pAPYm/VmEJ8JL5lzmw3CagGkJ1bmMnDaQyRAEVomiWkPUgGl5OgE5CRoKOv4CESFgI3kjvAW14YEskp86FOJ3IScgJMHoTfAPcY0pVxMReyQ7WNudADZ0d+YRowxnaGEKxFqNUz30eaY6Bity0D7qlp7Ic8TUsKDivhlyBjH7LtRuXzqQsnbZ+PMHpT0L+3aU73yKb0WLcIYIE+YFxeor/L8kRFlNxMLJXKUMuQsv4YbcC8dlaAfua/87rqi/G+v/IPjv5CdDaNvDZX1K+M/itY1N63uCOGiK/xAi3/YC8DF3hR5XZMZVS1mjcJJ7J3aswR40L2uVrjqTgOc30G9uZP3AXryiiTtAv7hbFNDZ+zqkbVqwreg7Xyowk+50RJ1i7sVOn3699mbu9yS1GfoD0/0tIy8wFPN7vhNwMAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-04-14T07:19:06Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.0.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="save" resname="save">
<source>Save</source>
<target>Save</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="remove" resname="remove">
<source>Remove</source>
<target>Remove</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="ok" resname="ok">
<source>OK</source>
<target>OK</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="cancel" resname="cancel">
<source>Cancel</source>
<target>Cancel</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="add" resname="add">
<source>Add</source>
<target>Add</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="edit" resname="edit">
<source>Edit</source>
<target>Edit</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="serverError" resname="serverError">
<source>An error occurred while attempting to contact the server. Please check your network connection and try again.</source>
<target>An error occurred while attempting to contact the server. Please check your network connection and try again.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="close" resname="close">
<source>Close</source>
<target>Close</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="remoteProcedureCall" resname="remoteProcedureCall">
<source>Remote Procedure Call</source>
<target>Remote Procedure Call</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="serverReplies" resname="serverReplies">
<source>Server replies</source>
<target>Server replies</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorCommunicatingWithServer" resname="errorCommunicatingWithServer">
<source>Error communicating with server</source>
<target>Error communicating with server</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="active" resname="active">
<source>Active</source>
<target>Active</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="setAsActive" resname="setAsActive">
<source>Set as active</source>
<target>Set as active</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotTestProperties" resname="couldNotTestProperties">
<source>Could not test properties</source>
<target>Could not test properties</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotSetProperties" resname="couldNotSetProperties">
<source>Could not set properties</source>
<target>Could not set properties</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotSetActiveService" resname="couldNotSetActiveService">
<source>Could not set active service</source>
<target>Could not set active service</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotLoadActiveService" resname="couldNotLoadActiveService">
<source>Could not load active service</source>
<target>Could not load active service</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotLoadAvailableServices" resname="couldNotLoadAvailableServices">
<source>Could not load available services</source>
<target>Could not load available services</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="refresh" resname="refresh">
<source>Refresh</source>
<target>Refresh</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="name" resname="name">
<source>Name</source>
<target>Name</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="value" resname="value">
<source>Value</source>
<target>Value</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="description" resname="description">
<source>Description</source>
<target>Description</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="error" resname="error">
<source>Error</source>
<target>Error</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="configuration" resname="configuration">
<source>Configuration</source>
<target>Configuration</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="settings" resname="settings">
<source>Settings</source>
<target>Settings</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="settingsForComponent" resname="settingsForComponent">
<source>Settings for <ph id="1">{0}</ph></source>
<target>Settings for <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="pleaseSelect" resname="pleaseSelect">
<source>Please select</source>
<target>Please select</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-04-18T13:56:50Z" original="/usr/sap/ljs/app/Converter_1765894632275589659/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="ru">
<header>
<skl>
<internal-file crc="85e48bcf9e250e66161b1b03d11cf699" form="base64">H4sIAAAAAAAAAH1SzU4jMQy+5yn8BIgXyKEa2MuuAFEEZ5O4naiZZOR4WiG0746TtLNod+Hi/2/8eb4UPJLdqjFMU9b4sTmTD/b+p3GYHEU7NGfQe7vx3pAPYm/VmEJ8JL5lzmw3CagGkJ1bmMnDaQyRAEVomiWkPUgGl5OgE5CRoKOv4CESFgI3kjvAW14YEskp86FOJ3IScgJMHoTfAPcY0pVxMReyQ7WNudADZ0d+YRowxnaGEKxFqNUz30eaY6Bity0D7qlp7Ic8TUsKDivhlyBjH7LtRuXzqQsnbZ+PMHpT0L+3aU73yKb0WLcIYIE+YFxeor/L8kRFlNxMLJXKUMuQsv4YbcC8dlaAfua/87rqi/G+v/IPjv5CdDaNvDZX1K+M/itY1N63uCOGiK/xAi3/YC8DF3hR5XZMZVS1mjcJJ7J3aswR40L2uVrjqTgOc30G9uZP3AXryiiTtAv7hbFNDZ+zqkbVqwreg7Xyowk+50RJ1i7sVOn3699mbu9yS1GfoD0/0tIy8wFPN7vhNwMAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-04-14T07:19:06Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.0.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="save" resname="save">
<source>Save</source>
<target state="signed-off">Сохранить</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="remove" resname="remove">
<source>Remove</source>
<target state="signed-off">Удалить</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="ok" resname="ok">
<source>OK</source>
<target state="signed-off">ОК</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="cancel" resname="cancel">
<source>Cancel</source>
<target state="signed-off">Отмена</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="add" resname="add">
<source>Add</source>
<target state="signed-off">Добавить</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="edit" resname="edit">
<source>Edit</source>
<target state="signed-off">Изменить</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="serverError" resname="serverError">
<source>An error occurred while attempting to contact the server. Please check your network connection and try again.</source>
<target state="signed-off">При попытке обратиться к серверу возникла ошибка. Проверьте сетевое подключение и повторите попытку.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="close" resname="close">
<source>Close</source>
<target state="signed-off">Закрыть</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="remoteProcedureCall" resname="remoteProcedureCall">
<source>Remote Procedure Call</source>
<target state="signed-off">Удалить вызов процедуры</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="serverReplies" resname="serverReplies">
<source>Server replies</source>
<target state="signed-off">Ответы сервера</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorCommunicatingWithServer" resname="errorCommunicatingWithServer">
<source>Error communicating with server</source>
<target state="signed-off">Ошибка связи с сервером</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="active" resname="active">
<source>Active</source>
<target state="signed-off">Активно</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="setAsActive" resname="setAsActive">
<source>Set as active</source>
<target state="signed-off">Установить как активное</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotTestProperties" resname="couldNotTestProperties">
<source>Could not test properties</source>
<target state="signed-off">Не удалось проверить свойства</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotSetProperties" resname="couldNotSetProperties">
<source>Could not set properties</source>
<target state="signed-off">Не удалось установить свойства</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotSetActiveService" resname="couldNotSetActiveService">
<source>Could not set active service</source>
<target state="signed-off">Не удалось установить активную службу</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotLoadActiveService" resname="couldNotLoadActiveService">
<source>Could not load active service</source>
<target state="signed-off">Не удалось загрузить активную службу</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotLoadAvailableServices" resname="couldNotLoadAvailableServices">
<source>Could not load available services</source>
<target state="signed-off">Не удалось загрузить доступные службы</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="refresh" resname="refresh">
<source>Refresh</source>
<target state="signed-off">Обновить</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="name" resname="name">
<source>Name</source>
<target state="signed-off">Имя</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="value" resname="value">
<source>Value</source>
<target state="signed-off">Значение</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="description" resname="description">
<source>Description</source>
<target state="signed-off">Описание</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="error" resname="error">
<source>Error</source>
<target state="signed-off">Ошибка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="configuration" resname="configuration">
<source>Configuration</source>
<target state="signed-off">Конфигурация</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="settings" resname="settings">
<source>Settings</source>
<target state="signed-off">Параметры</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="settingsForComponent" resname="settingsForComponent">
<source>Settings for <ph id="1">{0}</ph></source>
<target state="signed-off">Параметры для <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="pleaseSelect" resname="pleaseSelect">
<source>Please select</source>
<target state="signed-off">Выберите</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-03-23T08:44:46Z" original="/usr/sap/ljs/app/Converter_123998372962663836/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="zh-CN">
<file datatype="javapropertyresourcebundle" date="2016-04-18T13:56:50Z" original="/usr/sap/ljs/app/Converter_1765894632275589659/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="zh-CN">
<header>
<skl>
<internal-file crc="85e48bcf9e250e66161b1b03d11cf699" form="base64">H4sIAAAAAAAAAH1SzU4jMQy+5yn8BIgXyKEa2MuuAFEEZ5O4naiZZOR4WiG0746TtLNod+Hi/2/8eb4UPJLdqjFMU9b4sTmTD/b+p3GYHEU7NGfQe7vx3pAPYm/VmEJ8JL5lzmw3CagGkJ1bmMnDaQyRAEVomiWkPUgGl5OgE5CRoKOv4CESFgI3kjvAW14YEskp86FOJ3IScgJMHoTfAPcY0pVxMReyQ7WNudADZ0d+YRowxnaGEKxFqNUz30eaY6Bity0D7qlp7Ic8TUsKDivhlyBjH7LtRuXzqQsnbZ+PMHpT0L+3aU73yKb0WLcIYIE+YFxeor/L8kRFlNxMLJXKUMuQsv4YbcC8dlaAfua/87rqi/G+v/IPjv5CdDaNvDZX1K+M/itY1N63uCOGiK/xAi3/YC8DF3hR5XZMZVS1mjcJJ7J3aswR40L2uVrjqTgOc30G9uZP3AXryiiTtAv7hbFNDZ+zqkbVqwreg7Xyowk+50RJ1i7sVOn3699mbu9yS1GfoD0/0tIy8wFPN7vhNwMAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-03-16T17:55:33Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
<phase company-name="SAP AG" date="2016-04-14T07:19:06Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.0.0"/>
</header>
@@ -0,0 +1,96 @@
name=Имя
company=Компания
password=Пароль
passwordRepeat=Повторите пароль
loggedIn=Выполнен вход пользователя {0}!
signIn=Войти
signUp=Зарегистрироваться
signOut=Выйти
invalidUsername=Недопустимое имя пользователя
couldNotSignOut=Не удалось выйти: {0}
createUser=Создать пользователя
settings=Параметры
filterUsers=Фильтр пользователей...
welcome=Добро пожаловать, {0}!
tryingToVerifyUser=Попытка проверить пользователя...
fetchingUserInformation=Извлечение сведений пользователя...
signedInAs=Выполнен вход пользователя {0}
signedInAsTitle=В системе как:
close=Закрыть
loading=Загрузка...
user=Пользователь
users=Пользователи
addURLFilter=Добавить фильтр URL-адреса
ok=ОК
cancel=Отмена
username=Имя пользователя
email=эл. почта
usernameMustHaveAtLeastNCharacters=Введите имя пользователя длиной не менее {0} символов
passwordMustHaveAtLeastNCharacters=Используйте пароль длиной не менее {0} символов
passwordsDontMatch=Пароли должны совпадать
couldNotCreateUser=Не удалось создать пользователя: {0}
changePassword=Изменить пароль
userDetails=Сведения пользователя
deleteUser=Удалить пользователя
deleteUserQuestion=Удалить пользователя?
doYouReallyWantToDeleteUser=Действительно удалить пользователя {0}?
errorDeletingUser=При удалении пользователя возникла ошибка
account={0}-учетная запись
save=Сохранить
remove=Удалить
add=Добавить
edit=Изменить
errorUpdatingRoles=Ошибка при обновлении ролей для пользователя {0}: {1}
errorUpdatingPermissions=Ошибка при обновлении разрешений для пользователя {0}: {1}
enterRoleName=Введите название роли...
enterPermissionName=Введите название разрешения...
errorCreatingUser=Ошибка при входе с именем пользователя {0}: {1}
signedUpSuccessfully=Успешно выполнен вход пользователя {0}. Проверьте почту для подтверждения учетной записи электронной почты.
unknownErrorCreatingUser=Неизвестная ошибка при попытке входа пользователя с именем {0}. Возможно, уже существует другой пользователь с таким именем.
userAlreadyExists=Пользователь с именем {0} уже существует
currentPassword=Текущий пароль
passwordSuccessfullyChanged=Пароль успешно изменен
passwordDoesNotMeetRequirements=Пароль не отвечает требованиям
errorChangingPassword=Ошибка при изменении пароля: {0}
invalidCredentials=Недействительные учетные данные
editEmail=Изменить адрес эл. почты
errorUpdatingEmail=Ошибка при обновлении адреса эл. почты: {0}
successfullyUpdatedEmail=Успешно обновлен адрес эл. почты для пользователя {0}.\nСсылка для подтверждения отправлена по адресу {1}.
errorUpdatingUserProperties=Ошибка при обновлении свойств пользователя: {0}
successfullyUpdatedUserProperties=Успешно обновлены свойства для пользователя {0}.
forgotPassword=Не помню пароль
errorDuringPasswordReset=Ошибка при сбросе пароля: {0}
cannotResetPasswordWithoutValidatedEmail=Сброс пароля невозможен, так как у пользователя {0} нет подтвержденного адреса эл. почты
passwordResetLinkSent=Ссылка для сброса пароля отправлена на подтвержденный адрес эл. почты пользователя {0}
errorValidatingEmail=Ошибка при подтверждении адреса эл. почты пользователя {0}: {1}
emailValidatedSuccessfully=адрес эл. почты пользователя {0} подтвержден успешно
errorResettingPassword=Ошибка при сброе пароля для пользователя {0}: {1}
successfullyResetPassword=Успешно сброшен пароль для пользователя {0}. Отправлено сообщение эл. почты.
failedToSignIn=Не удалось выполнить вход. Проверьте учетные данные.
emailValidationUnsuccessful=Не удалось подтвердить адрес эл. почты для пользователя {0}. Вы действительно используете последний код подтверждения?
roles=Роли
permissions=Разрешения
signInWith=Выполнить вход как...
generalWelcome=Добро пожаловать!
newUser=Вы здесь впервые?
pleaseSignIn=Входите, пожалуйста.
enterUsernameOrEmail=Введите имя пользователя или адрес эл. почты
serverError=При попытке обратиться к серверу возникла ошибка. Проверьте сетевое подключение и повторите попытку.
remoteProcedureCall=Удалить вызов процедуры
serverReplies=Ответы сервера
errorCommunicatingWithServer=Ошибка связи с сервером
editProfile=Изменить профиль пользователя
allPermissions=Все разрешения (включая предоставляемые ролями)
configuration=Конфигурация
settingsForComponent=Параметры для {0}
pleaseSelect=Выберите
oldPassword=Старый пароль
newPasswordPlaceholder=Введите новый пароль
oldPasswordPlaceholder=Введите старый пароль
passwordRepeatPlaceholder=Повторите новый пароль
resetPassword=Сбросить пароль
youAreNotSignedIn=Вход в систему не выполнен.
youDontHaveRequiredPermission=У вас нет необходимого разрешения.
accountConfirmation=Подтверждение учетной записи
error=Неизвестная ошибка
refresh=Обновить
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" original="/usr/sap/ljs/app/Converter_123998372962663836/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/i18n/StringMessages.properties" source-language="en">
<file datatype="javapropertyresourcebundle" original="/usr/sap/ljs/app/Converter_1765894632275589659/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/i18n/StringMessages.properties" source-language="en">
<header>
<skl>
<internal-file crc="ad098eb3d0a7bbfaf753d0f6d0a7c151" form="base64">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</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-03-16T17:55:32Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
<phase company-name="SAP AG" date="2016-04-14T07:19:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.0.0"/>
</header>
@@ -0,0 +1,400 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-04-18T13:56:32Z" original="/usr/sap/ljs/app/Converter_1765894632275589659/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/i18n/StringMessages.properties" source-language="en" target-language="en">
<header>
<skl>
<internal-file crc="ad098eb3d0a7bbfaf753d0f6d0a7c151" form="base64">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</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-04-14T07:19:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.0.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="name" resname="name">
<source>Name</source>
<target>Name</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="company" resname="company">
<source>Company</source>
<target>Company</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="password" resname="password">
<source>Password</source>
<target>Password</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordRepeat" resname="passwordRepeat">
<source>Repeat password</source>
<target>Repeat password</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="loggedIn" resname="loggedIn">
<source>Logged in as user <ph id="1">{0}</ph>!</source>
<target>Logged in as user <ph id="1">{0}</ph>!</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signIn" resname="signIn">
<source>Sign in</source>
<target>Sign in</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signUp" resname="signUp">
<source>Sign up</source>
<target>Sign up</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signOut" resname="signOut">
<source>Sign out</source>
<target>Sign out</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="invalidUsername" resname="invalidUsername">
<source>Invalid username</source>
<target>Invalid username</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotSignOut" resname="couldNotSignOut">
<source>Could not sign out: <ph id="1">{0}</ph></source>
<target>Could not sign out: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="createUser" resname="createUser">
<source>Create user</source>
<target>Create user</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="settings" resname="settings">
<source>Settings</source>
<target>Settings</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="filterUsers" resname="filterUsers">
<source>Filter users...</source>
<target>Filter users...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="welcome" resname="welcome">
<source>Welcome, <ph id="1">{0}</ph>!</source>
<target>Welcome, <ph id="1">{0}</ph>!</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="tryingToVerifyUser" resname="tryingToVerifyUser">
<source>Trying to verify user...</source>
<target>Trying to verify user...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="fetchingUserInformation" resname="fetchingUserInformation">
<source>Fetching user information...</source>
<target>Fetching user information...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signedInAs" resname="signedInAs">
<source>Signed in as <ph id="1">{0}</ph></source>
<target>Signed in as <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signedInAsTitle" resname="signedInAsTitle">
<source>Signed in as:</source>
<target>Signed in as:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="close" resname="close">
<source>Close</source>
<target>Close</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="loading" resname="loading">
<source>Loading...</source>
<target>Loading...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="user" resname="user">
<source>User</source>
<target>User</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="users" resname="users">
<source>Users</source>
<target>Users</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="addURLFilter" resname="addURLFilter">
<source>Add URL filter</source>
<target>Add URL filter</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="ok" resname="ok">
<source>OK</source>
<target>OK</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="cancel" resname="cancel">
<source>Cancel</source>
<target>Cancel</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="username" resname="username">
<source>Username</source>
<target>Username</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="email" resname="email">
<source>e-mail</source>
<target>e-mail</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="usernameMustHaveAtLeastNCharacters" resname="usernameMustHaveAtLeastNCharacters">
<source>Please enter a username with at least <ph id="1">{0}</ph> characters</source>
<target>Please enter a username with at least <ph id="1">{0}</ph> characters</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordMustHaveAtLeastNCharacters" resname="passwordMustHaveAtLeastNCharacters">
<source>Please use a password that has at least <ph id="1">{0}</ph> characters</source>
<target>Please use a password that has at least <ph id="1">{0}</ph> characters</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordsDontMatch" resname="passwordsDontMatch">
<source>Passwords must match</source>
<target>Passwords must match</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotCreateUser" resname="couldNotCreateUser">
<source>Could not create user: <ph id="1">{0}</ph></source>
<target>Could not create user: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="changePassword" resname="changePassword">
<source>Change password</source>
<target>Change password</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="userDetails" resname="userDetails">
<source>User details</source>
<target>User details</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="deleteUser" resname="deleteUser">
<source>Delete user</source>
<target>Delete user</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="deleteUserQuestion" resname="deleteUserQuestion">
<source>Delete user?</source>
<target>Delete user?</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="doYouReallyWantToDeleteUser" resname="doYouReallyWantToDeleteUser">
<source>Do you really want to delete user <ph id="1">{0}</ph>?</source>
<target>Do you really want to delete user <ph id="1">{0}</ph>?</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorDeletingUser" resname="errorDeletingUser">
<source>An error happened while deleting the user</source>
<target>An error happened while deleting the user</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="account" resname="account">
<source><ph id="1">{0}</ph>-Account</source>
<target><ph id="1">{0}</ph>-Account</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="save" resname="save">
<source>Save</source>
<target>Save</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="remove" resname="remove">
<source>Remove</source>
<target>Remove</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="add" resname="add">
<source>Add</source>
<target>Add</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="edit" resname="edit">
<source>Edit</source>
<target>Edit</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorUpdatingRoles" resname="errorUpdatingRoles">
<source>Error updating roles for user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></source>
<target>Error updating roles for user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorUpdatingPermissions" resname="errorUpdatingPermissions">
<source>Error updating permissions for user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></source>
<target>Error updating permissions for user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="enterRoleName" resname="enterRoleName">
<source>Enter role name...</source>
<target>Enter role name...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="enterPermissionName" resname="enterPermissionName">
<source>Enter permission name...</source>
<target>Enter permission name...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorCreatingUser" resname="errorCreatingUser">
<source>Error signing up with username <ph id="1">{0}</ph>: <ph id="2">{1}</ph></source>
<target>Error signing up with username <ph id="1">{0}</ph>: <ph id="2">{1}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signedUpSuccessfully" resname="signedUpSuccessfully">
<source>Successfully signed up user <ph id="1">{0}</ph>. Please check you e-mails to validate your e-mail account.</source>
<target>Successfully signed up user <ph id="1">{0}</ph>. Please check you e-mails to validate your e-mail account.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="unknownErrorCreatingUser" resname="unknownErrorCreatingUser">
<source>Unknown error trying to sign up user with name <ph id="1">{0}</ph>. Perhaps another user with that name already exists.</source>
<target>Unknown error trying to sign up user with name <ph id="1">{0}</ph>. Perhaps another user with that name already exists.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="userAlreadyExists" resname="userAlreadyExists">
<source>A user with name <ph id="1">{0}</ph> already exists</source>
<target>A user with name <ph id="1">{0}</ph> already exists</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="currentPassword" resname="currentPassword">
<source>Current password</source>
<target>Current password</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordSuccessfullyChanged" resname="passwordSuccessfullyChanged">
<source>Password successfully changed</source>
<target>Password successfully changed</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordDoesNotMeetRequirements" resname="passwordDoesNotMeetRequirements">
<source>Password does not meet requirements</source>
<target>Password does not meet requirements</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorChangingPassword" resname="errorChangingPassword">
<source>Error changing password: <ph id="1">{0}</ph></source>
<target>Error changing password: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="invalidCredentials" resname="invalidCredentials">
<source>Invalid credentials</source>
<target>Invalid credentials</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="editEmail" resname="editEmail">
<source>Edit e-mail address</source>
<target>Edit e-mail address</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorUpdatingEmail" resname="errorUpdatingEmail">
<source>Error updating e-mail address: <ph id="1">{0}</ph></source>
<target>Error updating e-mail address: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="successfullyUpdatedEmail" resname="successfullyUpdatedEmail">
<source>Successfully updated e-mail address for user <ph id="1">{0}</ph>.\nValidation check sent to <ph id="2">{1}</ph>.</source>
<target>Successfully updated e-mail address for user <ph id="1">{0}</ph>.\nValidation check sent to <ph id="2">{1}</ph>.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorUpdatingUserProperties" resname="errorUpdatingUserProperties">
<source>Error updating user properties: <ph id="1">{0}</ph></source>
<target>Error updating user properties: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="successfullyUpdatedUserProperties" resname="successfullyUpdatedUserProperties">
<source>Successfully updated properties for user <ph id="1">{0}</ph>.</source>
<target>Successfully updated properties for user <ph id="1">{0}</ph>.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="forgotPassword" resname="forgotPassword">
<source>Forgot password</source>
<target>Forgot password</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorDuringPasswordReset" resname="errorDuringPasswordReset">
<source>Error during password reset: <ph id="1">{0}</ph></source>
<target>Error during password reset: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="cannotResetPasswordWithoutValidatedEmail" resname="cannotResetPasswordWithoutValidatedEmail">
<source>Cannot reset password because user <ph id="1">{0}</ph> does not have a validated e-mail address</source>
<target>Cannot reset password because user <ph id="1">{0}</ph> does not have a validated e-mail address</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordResetLinkSent" resname="passwordResetLinkSent">
<source>A link for resetting the password has been sent to <ph id="1">{0}</ph>''s validated e-mail address</source>
<target>A link for resetting the password has been sent to <ph id="1">{0}</ph>''s validated e-mail address</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorValidatingEmail" resname="errorValidatingEmail">
<source>Error validating e-mail address of user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></source>
<target>Error validating e-mail address of user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="emailValidatedSuccessfully" resname="emailValidatedSuccessfully">
<source>e-mail address of user <ph id="1">{0}</ph> validated successfully</source>
<target>e-mail address of user <ph id="1">{0}</ph> validated successfully</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorResettingPassword" resname="errorResettingPassword">
<source>Error resetting password for user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></source>
<target>Error resetting password for user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="successfullyResetPassword" resname="successfullyResetPassword">
<source>Successfully reset password for user <ph id="1">{0}</ph>. e-Mail has been sent.</source>
<target>Successfully reset password for user <ph id="1">{0}</ph>. e-Mail has been sent.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="failedToSignIn" resname="failedToSignIn">
<source>Failed to sign in. Check your credentials.</source>
<target>Failed to sign in. Check your credentials.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="emailValidationUnsuccessful" resname="emailValidationUnsuccessful">
<source>Validation of e-mail address for user <ph id="1">{0}</ph> failed. Did you really use the latest validation code?</source>
<target>Validation of e-mail address for user <ph id="1">{0}</ph> failed. Did you really use the latest validation code?</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="roles" resname="roles">
<source>Roles</source>
<target>Roles</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="permissions" resname="permissions">
<source>Permissions</source>
<target>Permissions</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signInWith" resname="signInWith">
<source>Sign in with...</source>
<target>Sign in with...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="generalWelcome" resname="generalWelcome">
<source>Welcome!</source>
<target>Welcome!</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="newUser" resname="newUser">
<source>New here?</source>
<target>New here?</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="pleaseSignIn" resname="pleaseSignIn">
<source>Please sign in.</source>
<target>Please sign in.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="enterUsernameOrEmail" resname="enterUsernameOrEmail">
<source>Enter user name or e-mail address</source>
<target>Enter user name or e-mail address</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="serverError" resname="serverError">
<source>An error occurred while attempting to contact the server. Please check your network connection and try again.</source>
<target>An error occurred while attempting to contact the server. Please check your network connection and try again.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="remoteProcedureCall" resname="remoteProcedureCall">
<source>Remote Procedure Call</source>
<target>Remote Procedure Call</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="serverReplies" resname="serverReplies">
<source>Server replies</source>
<target>Server replies</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorCommunicatingWithServer" resname="errorCommunicatingWithServer">
<source>Error communicating with server</source>
<target>Error communicating with server</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="editProfile" resname="editProfile">
<source>Edit user profile</source>
<target>Edit user profile</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="allPermissions" resname="allPermissions">
<source>All permissions (including inferred from roles)</source>
<target>All permissions (including inferred from roles)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="configuration" resname="configuration">
<source>Configuration</source>
<target>Configuration</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="settingsForComponent" resname="settingsForComponent">
<source>Settings for <ph id="1">{0}</ph></source>
<target>Settings for <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="pleaseSelect" resname="pleaseSelect">
<source>Please select</source>
<target>Please select</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="oldPassword" resname="oldPassword">
<source>Old password</source>
<target>Old password</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="newPasswordPlaceholder" resname="newPasswordPlaceholder">
<source>Type in a new password</source>
<target>Type in a new password</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="oldPasswordPlaceholder" resname="oldPasswordPlaceholder">
<source>Type in the old password</source>
<target>Type in the old password</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordRepeatPlaceholder" resname="passwordRepeatPlaceholder">
<source>Repeat the new password</source>
<target>Repeat the new password</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="resetPassword" resname="resetPassword">
<source>Reset password</source>
<target>Reset password</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="youAreNotSignedIn" resname="youAreNotSignedIn">
<source>You are currently not signed in.</source>
<target>You are currently not signed in.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="youDontHaveRequiredPermission" resname="youDontHaveRequiredPermission">
<source>You don''t have the required permission.</source>
<target>You don''t have the required permission.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="accountConfirmation" resname="accountConfirmation">
<source>Account confirmation</source>
<target>Account confirmation</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="error" resname="error">
<source>Unknown error</source>
<target>Unknown error</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="refresh" resname="refresh">
<source>Refresh</source>
<target>Refresh</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,400 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-04-18T13:56:33Z" original="/usr/sap/ljs/app/Converter_1765894632275589659/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/i18n/StringMessages.properties" source-language="en" target-language="ru">
<header>
<skl>
<internal-file crc="ad098eb3d0a7bbfaf753d0f6d0a7c151" form="base64">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</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-04-14T07:19:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.0.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="name" resname="name">
<source>Name</source>
<target state="signed-off">Имя</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="company" resname="company">
<source>Company</source>
<target state="signed-off">Компания</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="password" resname="password">
<source>Password</source>
<target state="signed-off">Пароль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordRepeat" resname="passwordRepeat">
<source>Repeat password</source>
<target state="signed-off">Повторите пароль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="loggedIn" resname="loggedIn">
<source>Logged in as user <ph id="1">{0}</ph>!</source>
<target state="signed-off">Выполнен вход пользователя <ph id="1">{0}</ph>!</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signIn" resname="signIn">
<source>Sign in</source>
<target state="signed-off">Войти</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signUp" resname="signUp">
<source>Sign up</source>
<target state="signed-off">Зарегистрироваться</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signOut" resname="signOut">
<source>Sign out</source>
<target state="signed-off">Выйти</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="invalidUsername" resname="invalidUsername">
<source>Invalid username</source>
<target state="signed-off">Недопустимое имя пользователя</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotSignOut" resname="couldNotSignOut">
<source>Could not sign out: <ph id="1">{0}</ph></source>
<target state="signed-off">Не удалось выйти: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="createUser" resname="createUser">
<source>Create user</source>
<target state="signed-off">Создать пользователя</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="settings" resname="settings">
<source>Settings</source>
<target state="signed-off">Параметры</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="filterUsers" resname="filterUsers">
<source>Filter users...</source>
<target state="signed-off">Фильтр пользователей...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="welcome" resname="welcome">
<source>Welcome, <ph id="1">{0}</ph>!</source>
<target state="signed-off">Добро пожаловать, <ph id="1">{0}</ph>!</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="tryingToVerifyUser" resname="tryingToVerifyUser">
<source>Trying to verify user...</source>
<target state="signed-off">Попытка проверить пользователя...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="fetchingUserInformation" resname="fetchingUserInformation">
<source>Fetching user information...</source>
<target state="signed-off">Извлечение сведений пользователя...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signedInAs" resname="signedInAs">
<source>Signed in as <ph id="1">{0}</ph></source>
<target state="signed-off">Выполнен вход пользователя <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signedInAsTitle" resname="signedInAsTitle">
<source>Signed in as:</source>
<target state="signed-off">В системе как:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="close" resname="close">
<source>Close</source>
<target state="signed-off">Закрыть</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="loading" resname="loading">
<source>Loading...</source>
<target state="signed-off">Загрузка...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="user" resname="user">
<source>User</source>
<target state="signed-off">Пользователь</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="users" resname="users">
<source>Users</source>
<target state="signed-off">Пользователи</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="addURLFilter" resname="addURLFilter">
<source>Add URL filter</source>
<target state="translated">Добавить фильтр URL-адреса</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="ok" resname="ok">
<source>OK</source>
<target state="signed-off">ОК</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="cancel" resname="cancel">
<source>Cancel</source>
<target state="signed-off">Отмена</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="username" resname="username">
<source>Username</source>
<target state="signed-off">Имя пользователя</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="email" resname="email">
<source>e-mail</source>
<target state="signed-off">эл. почта</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="usernameMustHaveAtLeastNCharacters" resname="usernameMustHaveAtLeastNCharacters">
<source>Please enter a username with at least <ph id="1">{0}</ph> characters</source>
<target state="signed-off">Введите имя пользователя длиной не менее <ph id="1">{0}</ph> символов</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordMustHaveAtLeastNCharacters" resname="passwordMustHaveAtLeastNCharacters">
<source>Please use a password that has at least <ph id="1">{0}</ph> characters</source>
<target state="signed-off">Используйте пароль длиной не менее <ph id="1">{0}</ph> символов</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordsDontMatch" resname="passwordsDontMatch">
<source>Passwords must match</source>
<target state="signed-off">Пароли должны совпадать</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="couldNotCreateUser" resname="couldNotCreateUser">
<source>Could not create user: <ph id="1">{0}</ph></source>
<target state="signed-off">Не удалось создать пользователя: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="changePassword" resname="changePassword">
<source>Change password</source>
<target state="signed-off">Изменить пароль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="userDetails" resname="userDetails">
<source>User details</source>
<target state="signed-off">Сведения пользователя</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="deleteUser" resname="deleteUser">
<source>Delete user</source>
<target state="signed-off">Удалить пользователя</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="deleteUserQuestion" resname="deleteUserQuestion">
<source>Delete user?</source>
<target state="signed-off">Удалить пользователя?</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="doYouReallyWantToDeleteUser" resname="doYouReallyWantToDeleteUser">
<source>Do you really want to delete user <ph id="1">{0}</ph>?</source>
<target state="signed-off">Действительно удалить пользователя <ph id="1">{0}</ph>?</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorDeletingUser" resname="errorDeletingUser">
<source>An error happened while deleting the user</source>
<target state="signed-off">При удалении пользователя возникла ошибка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="account" resname="account">
<source><ph id="1">{0}</ph>-Account</source>
<target state="signed-off"><ph id="1">{0}</ph>-учетная запись</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="save" resname="save">
<source>Save</source>
<target state="signed-off">Сохранить</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="remove" resname="remove">
<source>Remove</source>
<target state="signed-off">Удалить</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="add" resname="add">
<source>Add</source>
<target state="signed-off">Добавить</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="edit" resname="edit">
<source>Edit</source>
<target state="signed-off">Изменить</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorUpdatingRoles" resname="errorUpdatingRoles">
<source>Error updating roles for user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></source>
<target state="signed-off">Ошибка при обновлении ролей для пользователя <ph id="1">{0}</ph>: <ph id="2">{1}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorUpdatingPermissions" resname="errorUpdatingPermissions">
<source>Error updating permissions for user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></source>
<target state="signed-off">Ошибка при обновлении разрешений для пользователя <ph id="1">{0}</ph>: <ph id="2">{1}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="enterRoleName" resname="enterRoleName">
<source>Enter role name...</source>
<target state="signed-off">Введите название роли...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="enterPermissionName" resname="enterPermissionName">
<source>Enter permission name...</source>
<target state="signed-off">Введите название разрешения...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorCreatingUser" resname="errorCreatingUser">
<source>Error signing up with username <ph id="1">{0}</ph>: <ph id="2">{1}</ph></source>
<target state="signed-off">Ошибка при входе с именем пользователя <ph id="1">{0}</ph>: <ph id="2">{1}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signedUpSuccessfully" resname="signedUpSuccessfully">
<source>Successfully signed up user <ph id="1">{0}</ph>. Please check you e-mails to validate your e-mail account.</source>
<target state="signed-off">Успешно выполнен вход пользователя <ph id="1">{0}</ph>. Проверьте почту для подтверждения учетной записи электронной почты.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="unknownErrorCreatingUser" resname="unknownErrorCreatingUser">
<source>Unknown error trying to sign up user with name <ph id="1">{0}</ph>. Perhaps another user with that name already exists.</source>
<target state="signed-off">Неизвестная ошибка при попытке входа пользователя с именем <ph id="1">{0}</ph>. Возможно, уже существует другой пользователь с таким именем.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="userAlreadyExists" resname="userAlreadyExists">
<source>A user with name <ph id="1">{0}</ph> already exists</source>
<target state="signed-off">Пользователь с именем <ph id="1">{0}</ph> уже существует</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="currentPassword" resname="currentPassword">
<source>Current password</source>
<target state="signed-off">Текущий пароль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordSuccessfullyChanged" resname="passwordSuccessfullyChanged">
<source>Password successfully changed</source>
<target state="signed-off">Пароль успешно изменен</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordDoesNotMeetRequirements" resname="passwordDoesNotMeetRequirements">
<source>Password does not meet requirements</source>
<target state="signed-off">Пароль не отвечает требованиям</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorChangingPassword" resname="errorChangingPassword">
<source>Error changing password: <ph id="1">{0}</ph></source>
<target state="signed-off">Ошибка при изменении пароля: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="invalidCredentials" resname="invalidCredentials">
<source>Invalid credentials</source>
<target state="signed-off">Недействительные учетные данные</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="editEmail" resname="editEmail">
<source>Edit e-mail address</source>
<target state="signed-off">Изменить адрес эл. почты</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorUpdatingEmail" resname="errorUpdatingEmail">
<source>Error updating e-mail address: <ph id="1">{0}</ph></source>
<target state="signed-off">Ошибка при обновлении адреса эл. почты: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="successfullyUpdatedEmail" resname="successfullyUpdatedEmail">
<source>Successfully updated e-mail address for user <ph id="1">{0}</ph>.\nValidation check sent to <ph id="2">{1}</ph>.</source>
<target state="signed-off">Успешно обновлен адрес эл. почты для пользователя <ph id="1">{0}</ph>.\nСсылка для подтверждения отправлена по адресу <ph id="2">{1}</ph>.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorUpdatingUserProperties" resname="errorUpdatingUserProperties">
<source>Error updating user properties: <ph id="1">{0}</ph></source>
<target state="signed-off">Ошибка при обновлении свойств пользователя: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="successfullyUpdatedUserProperties" resname="successfullyUpdatedUserProperties">
<source>Successfully updated properties for user <ph id="1">{0}</ph>.</source>
<target state="signed-off">Успешно обновлены свойства для пользователя <ph id="1">{0}</ph>.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="forgotPassword" resname="forgotPassword">
<source>Forgot password</source>
<target state="signed-off">Не помню пароль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorDuringPasswordReset" resname="errorDuringPasswordReset">
<source>Error during password reset: <ph id="1">{0}</ph></source>
<target state="signed-off">Ошибка при сбросе пароля: <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="cannotResetPasswordWithoutValidatedEmail" resname="cannotResetPasswordWithoutValidatedEmail">
<source>Cannot reset password because user <ph id="1">{0}</ph> does not have a validated e-mail address</source>
<target state="signed-off">Сброс пароля невозможен, так как у пользователя <ph id="1">{0}</ph> нет подтвержденного адреса эл. почты</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordResetLinkSent" resname="passwordResetLinkSent">
<source>A link for resetting the password has been sent to <ph id="1">{0}</ph>''s validated e-mail address</source>
<target state="signed-off">Ссылка для сброса пароля отправлена на подтвержденный адрес эл. почты пользователя <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorValidatingEmail" resname="errorValidatingEmail">
<source>Error validating e-mail address of user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></source>
<target state="signed-off">Ошибка при подтверждении адреса эл. почты пользователя <ph id="1">{0}</ph>: <ph id="2">{1}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="emailValidatedSuccessfully" resname="emailValidatedSuccessfully">
<source>e-mail address of user <ph id="1">{0}</ph> validated successfully</source>
<target state="signed-off">адрес эл. почты пользователя <ph id="1">{0}</ph> подтвержден успешно</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorResettingPassword" resname="errorResettingPassword">
<source>Error resetting password for user <ph id="1">{0}</ph>: <ph id="2">{1}</ph></source>
<target state="signed-off">Ошибка при сброе пароля для пользователя <ph id="1">{0}</ph>: <ph id="2">{1}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="successfullyResetPassword" resname="successfullyResetPassword">
<source>Successfully reset password for user <ph id="1">{0}</ph>. e-Mail has been sent.</source>
<target state="signed-off">Успешно сброшен пароль для пользователя <ph id="1">{0}</ph>. Отправлено сообщение эл. почты.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="failedToSignIn" resname="failedToSignIn">
<source>Failed to sign in. Check your credentials.</source>
<target state="signed-off">Не удалось выполнить вход. Проверьте учетные данные.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="emailValidationUnsuccessful" resname="emailValidationUnsuccessful">
<source>Validation of e-mail address for user <ph id="1">{0}</ph> failed. Did you really use the latest validation code?</source>
<target state="signed-off">Не удалось подтвердить адрес эл. почты для пользователя <ph id="1">{0}</ph>. Вы действительно используете последний код подтверждения?</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="roles" resname="roles">
<source>Roles</source>
<target state="signed-off">Роли</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="permissions" resname="permissions">
<source>Permissions</source>
<target state="signed-off">Разрешения</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="signInWith" resname="signInWith">
<source>Sign in with...</source>
<target state="signed-off">Выполнить вход как...</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="generalWelcome" resname="generalWelcome">
<source>Welcome!</source>
<target state="signed-off">Добро пожаловать!</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="newUser" resname="newUser">
<source>New here?</source>
<target state="signed-off">Вы здесь впервые?</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="pleaseSignIn" resname="pleaseSignIn">
<source>Please sign in.</source>
<target state="signed-off">Входите, пожалуйста.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="enterUsernameOrEmail" resname="enterUsernameOrEmail">
<source>Enter user name or e-mail address</source>
<target state="signed-off">Введите имя пользователя или адрес эл. почты</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="serverError" resname="serverError">
<source>An error occurred while attempting to contact the server. Please check your network connection and try again.</source>
<target state="signed-off">При попытке обратиться к серверу возникла ошибка. Проверьте сетевое подключение и повторите попытку.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="remoteProcedureCall" resname="remoteProcedureCall">
<source>Remote Procedure Call</source>
<target state="signed-off">Удалить вызов процедуры</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="serverReplies" resname="serverReplies">
<source>Server replies</source>
<target state="signed-off">Ответы сервера</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="errorCommunicatingWithServer" resname="errorCommunicatingWithServer">
<source>Error communicating with server</source>
<target state="signed-off">Ошибка связи с сервером</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="editProfile" resname="editProfile">
<source>Edit user profile</source>
<target state="signed-off">Изменить профиль пользователя</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="allPermissions" resname="allPermissions">
<source>All permissions (including inferred from roles)</source>
<target state="signed-off">Все разрешения (включая предоставляемые ролями)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="configuration" resname="configuration">
<source>Configuration</source>
<target state="signed-off">Конфигурация</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="settingsForComponent" resname="settingsForComponent">
<source>Settings for <ph id="1">{0}</ph></source>
<target state="signed-off">Параметры для <ph id="1">{0}</ph></target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="pleaseSelect" resname="pleaseSelect">
<source>Please select</source>
<target state="signed-off">Выберите</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="oldPassword" resname="oldPassword">
<source>Old password</source>
<target state="signed-off">Старый пароль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="newPasswordPlaceholder" resname="newPasswordPlaceholder">
<source>Type in a new password</source>
<target state="signed-off">Введите новый пароль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="oldPasswordPlaceholder" resname="oldPasswordPlaceholder">
<source>Type in the old password</source>
<target state="signed-off">Введите старый пароль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="passwordRepeatPlaceholder" resname="passwordRepeatPlaceholder">
<source>Repeat the new password</source>
<target state="signed-off">Повторите новый пароль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="resetPassword" resname="resetPassword">
<source>Reset password</source>
<target state="signed-off">Сбросить пароль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="youAreNotSignedIn" resname="youAreNotSignedIn">
<source>You are currently not signed in.</source>
<target state="signed-off">Вход в систему не выполнен.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="youDontHaveRequiredPermission" resname="youDontHaveRequiredPermission">
<source>You don''t have the required permission.</source>
<target state="signed-off">У вас нет необходимого разрешения.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="accountConfirmation" resname="accountConfirmation">
<source>Account confirmation</source>
<target state="signed-off">Подтверждение учетной записи</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="error" resname="error">
<source>Unknown error</source>
<target state="signed-off">Неизвестная ошибка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="refresh" resname="refresh">
<source>Refresh</source>
<target state="signed-off">Обновить</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-03-23T08:44:12Z" original="/usr/sap/ljs/app/Converter_123998372962663836/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/i18n/StringMessages.properties" source-language="en" target-language="zh-CN">
<file datatype="javapropertyresourcebundle" date="2016-04-18T13:56:34Z" original="/usr/sap/ljs/app/Converter_1765894632275589659/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/i18n/StringMessages.properties" source-language="en" target-language="zh-CN">
<header>
<skl>
<internal-file crc="ad098eb3d0a7bbfaf753d0f6d0a7c151" form="base64">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</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-03-16T17:55:32Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
<phase company-name="SAP AG" date="2016-04-14T07:19:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.0.0"/>
</header>
@@ -25,6 +25,8 @@ sessionManager = com.sap.sse.security.SecurityWebSessionManager
securityManager.sessionManager = $sessionManager
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
securityManager.sessionManager.sessionDAO = $sessionDAO
# 24h timeout
securityManager.sessionManager.globalSessionTimeout = 86400000
cacheManager = com.sap.sse.security.SessionCacheManager
securityManager.cacheManager = $cacheManager
@@ -25,6 +25,8 @@ sessionManager = com.sap.sse.security.SecurityWebSessionManager
securityManager.sessionManager = $sessionManager
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
securityManager.sessionManager.sessionDAO = $sessionDAO
# 24h timeout
securityManager.sessionManager.globalSessionTimeout = 86400000
cacheManager = com.sap.sse.security.SessionCacheManager
securityManager.cacheManager = $cacheManager
@@ -25,6 +25,8 @@ sessionManager = com.sap.sse.security.SecurityWebSessionManager
securityManager.sessionManager = $sessionManager
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
securityManager.sessionManager.sessionDAO = $sessionDAO
# 24h timeout
securityManager.sessionManager.globalSessionTimeout = 86400000
cacheManager = com.sap.sse.security.SessionCacheManager
securityManager.cacheManager = $cacheManager
@@ -5,6 +5,8 @@ import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import com.sap.sse.common.Duration;
public class HttpUrlConnectionHelper {
private static final int HTTP_MAX_REDIRECTS = 5;
@@ -20,7 +22,7 @@ public class HttpUrlConnectionHelper {
connection.setRequestProperty("User-Agent", "Mozilla/5.0...");
connection.setDoOutput(true);
// Initial timeout needs to be big enough to allow the first parts of the response to reach this server
connection.setReadTimeout(10000);
connection.setReadTimeout((int) Duration.ONE_MINUTE.times(10).asMillis());
if (connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_PERM
|| connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP) {
String location = connection.getHeaderField("Location");
@@ -11,11 +11,11 @@ import android.content.Context;
public class HttpGetRequest extends HttpRequest {
public HttpGetRequest(URL requestUrl, Context context) {
super(requestUrl, context);
super(context, requestUrl);
}
public HttpGetRequest(URL url, HttpRequestProgressListener listener, Context context) {
super(url, listener, context);
super(context, url, listener);
}
@Override
@@ -10,8 +10,8 @@ import android.content.Context;
public class HttpJsonGetRequest extends HttpRequest {
public final static String ContentType = "application/json;charset=UTF-8";
public HttpJsonGetRequest(URL requestUrl, Context context) {
super(requestUrl, context);
public HttpJsonGetRequest(Context context, URL requestUrl) {
super(context, requestUrl);
}
@Override
@@ -16,16 +16,16 @@ public class HttpJsonPostRequest extends HttpRequest {
private String requestBody;
private String accessToken;
public HttpJsonPostRequest(URL requestUrl, Context context) {
this(requestUrl, null, context, null);
public HttpJsonPostRequest(Context context, URL requestUrl) {
this(context, requestUrl, null, null);
}
public HttpJsonPostRequest(URL requestUrl, String body, Context context) {
this(requestUrl, body, context, null);
public HttpJsonPostRequest(Context context, URL requestUrl, String body) {
this(context, requestUrl, body, null);
}
public HttpJsonPostRequest(URL requestUrl, String body, Context context, String accessToken) {
super(requestUrl, context);
public HttpJsonPostRequest(Context context, URL requestUrl, String body, String accessToken) {
super(context, requestUrl);
this.requestBody = body;
this.accessToken = accessToken;
}
@@ -46,11 +46,11 @@ public abstract class HttpRequest {
private boolean isCancelled;
protected SharedPreferences pref;
public HttpRequest(URL url, Context context) {
this(url, null, context);
public HttpRequest(Context context, URL url) {
this(context, url, null);
}
public HttpRequest(URL url, HttpRequestProgressListener listener, Context context) {
public HttpRequest(Context context, URL url, HttpRequestProgressListener listener) {
this.url = url;
this.listener = listener;
this.isCancelled = false;
@@ -15,7 +15,7 @@ public class LoginGetRequest extends HttpRequest {
private final LoginData loginData;
public LoginGetRequest(URL url, Context context, LoginData login) {
super(url, context);
super(context, url);
loginData = login;
}
@@ -40,7 +40,7 @@ public class MessageSenderTask extends AsyncTask<Intent, Void, MessageSenderResu
InputStream responseStream = null;
try {
ExLog.i(context, TAG, "Posting message: " + payload);
HttpRequest post = new HttpJsonPostRequest(new URL(url), payload, context);
HttpRequest post = new HttpJsonPostRequest(context, new URL(url), payload);
responseStream = post.execute();
ExLog.i(context, TAG, "Post successful for the following message: " + payload);
result = new MessageSenderResult(intent, responseStream);
@@ -41,7 +41,7 @@ public class AuthCheckTask extends AsyncTask<Void, Void, Boolean> {
Boolean authenticated = false;
if (url != null) {
try {
HttpRequest request = new HttpJsonGetRequest(url, context);
HttpRequest request = new HttpJsonGetRequest(context, url);
InputStream responseStream = request.execute();
JSONParser parser = new JSONParser();
@@ -32,7 +32,7 @@ public class LogoutTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
if (url != null && params != null && params.length > 0) {
HttpRequest request = new HttpJsonGetRequest(url, context);
HttpRequest request = new HttpJsonGetRequest(context, url);
try {
request.execute();
} catch (IOException e) {
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sap.sailing.android.tracking.app"
android:versionCode="7"
android:versionName="1.5">
android:versionCode="8"
android:versionName="1.6">
<uses-sdk
android:minSdkVersion="14"
@@ -7,5 +7,6 @@
<string name="decline_data_is_incorrect">Das bin nicht ich!</string>
<string name="confirm_delete_checkin">Möchten Sie den Checkin wirklich löschen?</string>
<string name="download_team_image_message">Team Bild wird geladen...</string>
<string name="checkout_warning_message">Möchten Sie sich wirklich ausloggen? Sie müssen sich erneut mit dem QR code einloggen, um ihre Regatta zu sehen!</string>
</resources>
@@ -8,4 +8,5 @@
<string name="decline_data_is_incorrect">That\'s not me!</string>
<string name="confirm_delete_checkin">Do you really want to delete this checkin?</string>
<string name="download_team_image_message">Downloading team image...</string>
<string name="checkout_warning_message">Do you REALLY want to logout? You will need to re-login with the provided QR code to access your regatta!</string>
</resources>

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