diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPRequestOperation.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPRequestOperation.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPRequestOperation.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPRequestOperation.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPRequestOperationManager.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPRequestOperationManager.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPRequestOperationManager.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPRequestOperationManager.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPSessionManager.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPSessionManager.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPSessionManager.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFHTTPSessionManager.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFNetworkReachabilityManager.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFNetworkReachabilityManager.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFNetworkReachabilityManager.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFNetworkReachabilityManager.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFNetworking.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFNetworking.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFSecurityPolicy.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFSecurityPolicy.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFSecurityPolicy.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFSecurityPolicy.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLConnectionOperation.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLConnectionOperation.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLConnectionOperation.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLConnectionOperation.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLRequestSerialization.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLRequestSerialization.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLRequestSerialization.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLRequestSerialization.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLResponseSerialization.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLResponseSerialization.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLResponseSerialization.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLResponseSerialization.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLSessionManager.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLSessionManager.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLSessionManager.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/AFNetworking/AFURLSessionManager.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVIndefiniteAnimatedView.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVIndefiniteAnimatedView.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVIndefiniteAnimatedView.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVIndefiniteAnimatedView.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressAnimatedView.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressAnimatedView.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressAnimatedView.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressAnimatedView.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD-Prefix.pch b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD-Prefix.pch old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/angle-mask.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/angle-mask@2x.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/angle-mask@3x.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/error.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/error.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/error@2x.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/error@2x.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/error@3x.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/error@3x.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/info.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/info.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/info@2x.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/info@2x.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/info@3x.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/info@3x.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/success.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/success.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/success@2x.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/success@2x.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/success@3x.png b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.bundle/success@3x.png old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVProgressHUD.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVRadialGradientLayer.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVRadialGradientLayer.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVRadialGradientLayer.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/SVProgressHUD/SVRadialGradientLayer.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/TSMarkdownParser/TSMarkdownParser-Prefix.pch b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/TSMarkdownParser/TSMarkdownParser-Prefix.pch old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/TSMarkdownParser/TSMarkdownParser.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/TSMarkdownParser/TSMarkdownParser.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/TSMarkdownParser/TSMarkdownParser.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/TSMarkdownParser/TSMarkdownParser.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIAlertView+AFNetworking.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIAlertView+AFNetworking.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIAlertView+AFNetworking.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIAlertView+AFNetworking.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIButton+AFNetworking.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIButton+AFNetworking.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIButton+AFNetworking.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIButton+AFNetworking.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIImage+AFNetworking.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIImage+AFNetworking.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIImageView+AFNetworking.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIImageView+AFNetworking.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIImageView+AFNetworking.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIImageView+AFNetworking.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIKit+AFNetworking.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIKit+AFNetworking.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIProgressView+AFNetworking.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIProgressView+AFNetworking.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIProgressView+AFNetworking.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIProgressView+AFNetworking.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIRefreshControl+AFNetworking.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIRefreshControl+AFNetworking.m old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIWebView+AFNetworking.h b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIWebView+AFNetworking.h old mode 100755 new mode 100644 diff --git a/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIWebView+AFNetworking.m b/ios/SAPTracker/src/xcode/SAPTracker/Libraries/UIKit+AFNetworking/UIWebView+AFNetworking.m old mode 100755 new mode 100644 diff --git a/java/com.sap.sailing.declination/NOAAImporter (No Proxy).launch b/java/com.sap.sailing.declination/NOAAImporter (No Proxy).launch index 1ec884cf04a..78e0d708fbc 100644 --- a/java/com.sap.sailing.declination/NOAAImporter (No Proxy).launch +++ b/java/com.sap.sailing.declination/NOAAImporter (No Proxy).launch @@ -1,12 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MaxPointsReason.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MaxPointsReason.java index 38e86148f2b..d57b844be68 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MaxPointsReason.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/MaxPointsReason.java @@ -10,49 +10,54 @@ package com.sap.sailing.domain.common; public enum MaxPointsReason { /** The competitor finished the race properly */ - NONE(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false), + NONE(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false, /* appliesAtStartOfRace */ false), /** Did Not Start */ - DNS(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true), + DNS(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ true), /** Did Not Finish */ - DNF(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true), + DNF(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ false), /** DiSQualified */ - DSQ(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true), + DSQ(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ false), /** On Course Side (jumped the gun) */ - OCS(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true), + OCS(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ true), /** Disqualified, non-discardable */ - DND(/* discardable */ false, /* advanceCompetitorsTrackedWorse */ true), + DND(/* discardable */ false, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ false), /** 20 % penalty under rule 30.2 */ - ZFP(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false), + ZFP(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false, /* appliesAtStartOfRace */ false), /** Took a Scoring penalty under rule 44.3 (a) */ - SCP(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false), + SCP(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false, /* appliesAtStartOfRace */ false), /** Disqualification not excludable under rule 90.3 (b) */ - DNE(/* discardable */ false, /* advanceCompetitorsTrackedWorse */ true), + DNE(/* discardable */ false, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ false), /** Disqualification for gross misconduct not excludable under rule 90.3 (b) */ - DGM(/* discardable */ false, /* advanceCompetitorsTrackedWorse */ true), + DGM(/* discardable */ false, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ false), /** Redress given */ - RDG(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false), + RDG(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false, /* appliesAtStartOfRace */ false), /** Black Flag Disqualified */ - BFD(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true), + BFD(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ true), /** Did Not Compete */ - DNC(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true), + DNC(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ true), /** Retired After Finishing */ - RAF(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true), + RAF(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ false), /** Discretionary Penalty Imposed by the race committee */ - DPI(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false), + DPI(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false, /* appliesAtStartOfRace */ false), /** Retired */ - RET(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true), + RET(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ false), /** Uniform Flag Disqualification */ - UFD(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true), + UFD(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ true), /** Time limit Expired */ - TLE(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true); + TLE(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ true, /* appliesAtStartOfRace */ false), + /** Standard Penalty by Race Committee; gives a certain number of penalty points on top of rank-inferred score */ + STP(/* discardable */ true, /* advanceCompetitorsTrackedWorse */ false, /* appliesAtStartOfRace */ true); private final boolean discardable; private final boolean advanceCompetitorsTrackedWorse; + + private final boolean appliesAtStartOfRace; - private MaxPointsReason(boolean discardable, boolean advanceCompetitorsTrackedWorse) { + private MaxPointsReason(boolean discardable, boolean advanceCompetitorsTrackedWorse, boolean appliesAtStartOfRace) { this.discardable = discardable; this.advanceCompetitorsTrackedWorse = advanceCompetitorsTrackedWorse; + this.appliesAtStartOfRace = appliesAtStartOfRace; } public boolean isDiscardable() { @@ -67,4 +72,8 @@ public enum MaxPointsReason { public boolean isAdvanceCompetitorsTrackedWorse() { return advanceCompetitorsTrackedWorse; } + + public boolean isAppliesAtStartOfRace() { + return appliesAtStartOfRace; + } } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index 6849154863f..eca729f54e6 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -221,8 +221,8 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { public DBCollection getGPSFixCollection() { DBCollection gpsFixCollection = database.getCollection(CollectionNames.GPS_FIXES.name()); DBObject index = new BasicDBObject(); - index.put(FieldNames.DEVICE_ID.name(), null); - index.put(FieldNames.TIME_AS_MILLIS.name(), null); + index.put(FieldNames.DEVICE_ID.name()+"."+FieldNames.DEVICE_TYPE_SPECIFIC_ID.name(), 1); + index.put(FieldNames.GPSFIX.name()+"."+FieldNames.TIME_AS_MILLIS.name(), 1); gpsFixCollection.createIndex(index); return gpsFixCollection; } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java index 48cc6251ace..c7e72a6e978 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/racelog/tracking/impl/MongoSensorFixStoreImpl.java @@ -81,7 +81,7 @@ public class MongoSensorFixStoreImpl implements MongoSensorFixStore { return (TypeBasedServiceFinder) serviceFinderFactory.createServiceFinder(FixMongoHandler.class); } - public T loadFix(DBObject object) + private T loadFix(DBObject object) throws TransformationException, NoCorrespondingServiceRegisteredException { String type = (String) object.get(FieldNames.GPSFIX_TYPE.name()); DBObject fixObject = (DBObject) object.get(FieldNames.GPSFIX.name()); @@ -125,56 +125,53 @@ public class MongoSensorFixStoreImpl implements MongoSensorFixStore { */ @Override public void storeFixes(DeviceIdentifier device, Iterable fixes) { - if (Util.isEmpty(fixes)) { - return; - } - try { - final Object dbDeviceId = storeDeviceId(deviceServiceFinder, device); - final int nrOfTotalFixes = Util.size(fixes); - final ArrayList dbFixes = new ArrayList<>(nrOfTotalFixes); - - TimePoint newFrom = null; - TimePoint newTo = null; - for (FixT fix : fixes) { - String type = fix.getClass().getName(); - FixMongoHandler mongoHandler = findService(type); - Object fixObject = mongoHandler.transformForth(fix); - DBObject entry = new BasicDBObjectBuilder().add(FieldNames.DEVICE_ID.name(), dbDeviceId) - .add(FieldNames.GPSFIX_TYPE.name(), type).add(FieldNames.GPSFIX.name(), fixObject).get(); - mongoOF.storeTimed(fix, entry); - dbFixes.add(entry); - TimePoint fixTP = fix.getTimePoint(); - if (newFrom == null || newFrom.after(fixTP)) { - newFrom = fixTP; + if (!Util.isEmpty(fixes)) { + try { + final Object dbDeviceId = storeDeviceId(deviceServiceFinder, device); + final int nrOfTotalFixes = Util.size(fixes); + final ArrayList dbFixes = new ArrayList<>(nrOfTotalFixes); + + TimePoint newFrom = null; + TimePoint newTo = null; + for (FixT fix : fixes) { + String type = fix.getClass().getName(); + FixMongoHandler mongoHandler = findService(type); + Object fixObject = mongoHandler.transformForth(fix); + DBObject entry = new BasicDBObjectBuilder().add(FieldNames.DEVICE_ID.name(), dbDeviceId) + .add(FieldNames.GPSFIX_TYPE.name(), type).add(FieldNames.GPSFIX.name(), fixObject).get(); + mongoOF.storeTimed(fix, entry); + dbFixes.add(entry); + TimePoint fixTP = fix.getTimePoint(); + if (newFrom == null || newFrom.after(fixTP)) { + newFrom = fixTP; + } + if (newTo == null || newTo.before(fixTP)) { + newTo = fixTP; + } } - if (newTo == null || newTo.before(fixTP)) { - newTo = fixTP; + fixesCollection.insert(dbFixes); + final BasicDBObject updateOperation = new BasicDBObject(); + final BasicDBObject newMetadata = new BasicDBObject(); + newMetadata.put(FieldNames.DEVICE_ID.name(), dbDeviceId); + + TimeRange oldTimeRange = getTimeRangeCoveredByFixes(device); + if (oldTimeRange != null) { + newFrom = oldTimeRange.from().before(newFrom) ? oldTimeRange.from() : newFrom; + newTo = oldTimeRange.to().after(newTo) ? oldTimeRange.to() : newTo; } + final TimeRange newTimeRange = new TimeRangeImpl(newFrom, newTo); + + storeTimeRange(newTimeRange, newMetadata, FieldNames.TIMERANGE); + updateOperation.append("$set", newMetadata); + updateOperation.append("$inc", new BasicDBObject(FieldNames.NUM_FIXES.name(), nrOfTotalFixes)); + metadataCollection.update(getDeviceQuery(device), updateOperation, /* create if not existent */ true, + /* update multiple */ false); + } catch (TransformationException e) { + logger.log(Level.WARNING, "Could not store fix in MongoDB"); + e.printStackTrace(); } - fixesCollection.insert(dbFixes); - final BasicDBObject updateOperation = new BasicDBObject(); - final BasicDBObject newMetadata = new BasicDBObject(); - newMetadata.put(FieldNames.DEVICE_ID.name(), dbDeviceId); - - TimeRange oldTimeRange = getTimeRangeCoveredByFixes(device); - if (oldTimeRange != null) { - newFrom = oldTimeRange.from().before(newFrom) ? oldTimeRange.from() : newFrom; - newTo = oldTimeRange.to().after(newTo) ? oldTimeRange.to() : newTo; - } - final TimeRange newTimeRange = new TimeRangeImpl(newFrom, newTo); - - storeTimeRange(newTimeRange, newMetadata, FieldNames.TIMERANGE); - updateOperation.append("$set", newMetadata); - updateOperation.append("$inc", new BasicDBObject(FieldNames.NUM_FIXES.name(), nrOfTotalFixes)); - metadataCollection.update(getDeviceQuery(device), updateOperation, /* create if not existent */ true, - /* update multiple */ false); - - - } catch (TransformationException e) { - logger.log(Level.WARNING, "Could not store fix in MongoDB"); - e.printStackTrace(); + notifyListeners(device, fixes); } - notifyListeners(device, fixes); } @Override @@ -260,4 +257,24 @@ public class MongoSensorFixStoreImpl implements MongoSensorFixStore { private FixMongoHandler findService(String type) { return (FixMongoHandler) fixServiceFinder.findService(type); } + + @Override + public Map getLastFix(Iterable forDevices) + throws TransformationException, NoCorrespondingServiceRegisteredException { + Map result = new HashMap<>(); + for (final DeviceIdentifier deviceIdentifier : forDevices) { + final DBObject deviceQuery = new BasicDBObject(FieldNames.DEVICE_ID.name()+"."+FieldNames.DEVICE_TYPE_SPECIFIC_ID.name(), + deviceIdentifier.getStringRepresentation()); + final DBObject orderBy = new BasicDBObject(FieldNames.GPSFIX.name()+"."+FieldNames.TIME_AS_MILLIS.name(), -1); + DBCursor lastFixForDeviceCursor = fixesCollection.find(deviceQuery).sort(orderBy).limit(1); + if (lastFixForDeviceCursor.hasNext()) { + final DBObject lastFixForDeviceDbObject = lastFixForDeviceCursor.next(); + final Timed lastFixForDevice = loadFix(lastFixForDeviceDbObject); + @SuppressWarnings("unchecked") + final FixT lastFixForDeviceTyped = (FixT) lastFixForDevice; + result.put(deviceIdentifier, lastFixForDeviceTyped); + } + } + return result; + } } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceLoadsFixesTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceLoadsFixesTest.java index cec7a09e3c3..044b3b0c676 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceLoadsFixesTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/TrackedRaceLoadsFixesTest.java @@ -5,6 +5,7 @@ import static org.mockito.Mockito.mock; import java.util.Arrays; import java.util.Collections; +import java.util.Map; import org.junit.Rule; import org.junit.Test; @@ -38,6 +39,7 @@ import com.sap.sailing.domain.tracking.impl.DynamicTrackedRaceImpl; import com.sap.sailing.domain.tracking.impl.DynamicTrackedRegattaImpl; import com.sap.sailing.domain.tracking.impl.EmptyWindStore; import com.sap.sse.common.NoCorrespondingServiceRegisteredException; +import com.sap.sse.common.Timed; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.impl.TimeRangeImpl; @@ -157,4 +159,34 @@ public class TrackedRaceLoadsFixesTest extends AbstractGPSFixStoreTest { assertEquals(2, store.getNumberOfFixes(device)); assertEquals(TimeRangeImpl.create(100, 200), store.getTimeRangeCoveredByFixes(device)); } + + @Test + public void testFindLatestFixForMapping() throws TransformationException, NoCorrespondingServiceRegisteredException { + store.storeFix(device, createFix(100, 10, 20, 30, 40)); + store.storeFix(device, createFix(1100, 10, 20, 30, 40)); + store.storeFix(device, createFix(2100, 10, 20, 30, 40)); + final Map lastFixes = store.getLastFix(Collections.singleton(device)); + assertEquals(1, lastFixes.size()); + Timed lastFix = lastFixes.get(device); + assertEquals(2100, lastFix.getTimePoint().asMillis()); + store.storeFix(device, createFix(2000, 10, 20, 30, 40)); + final Map lastFixes2 = store.getLastFix(Collections.singleton(device)); + assertEquals(1, lastFixes2.size()); + Timed lastFix2 = lastFixes2.get(device); + assertEquals(2100, lastFix2.getTimePoint().asMillis()); + store.storeFix(device, createFix(2200, 10, 20, 30, 40)); + final Map lastFixes3 = store.getLastFix(Collections.singleton(device)); + assertEquals(1, lastFixes3.size()); + Timed lastFix3 = lastFixes3.get(device); + assertEquals(2200, lastFix3.getTimePoint().asMillis()); + final DeviceIdentifier device2 = new SmartphoneImeiIdentifier("b"); + store.storeFix(device2, createFix(1200, 10, 20, 30, 40)); + store.storeFix(device2, createFix(1100, 10, 20, 30, 40)); + final Map lastFixes4 = store.getLastFix(Arrays.asList(device, device2)); + assertEquals(2, lastFixes4.size()); + Timed lastFix4 = lastFixes4.get(device); + assertEquals(2200, lastFix4.getTimePoint().asMillis()); + Timed lastFixDevice2 = lastFixes4.get(device2); + assertEquals(1200, lastFixDevice2.getTimePoint().asMillis()); + } } diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/FixLoaderAndTracker.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/FixLoaderAndTracker.java old mode 100644 new mode 100755 index 75d7501a908..8678c973503 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/FixLoaderAndTracker.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/FixLoaderAndTracker.java @@ -43,6 +43,7 @@ import com.sap.sse.common.Timed; import com.sap.sse.common.Util; import com.sap.sse.common.WithID; import com.sap.sse.common.impl.TimeRangeImpl; +import com.sap.sse.util.ThreadPoolUtil; /** * This class listens to RaceLog Events, changes to the race and fix loading events and properly handles mappings and @@ -297,8 +298,7 @@ public class FixLoaderAndTracker implements TrackingDataLoader { activeLoaders.incrementAndGet(); setStatusAndProgress(TrackedRaceStatusEnum.LOADING, 0.5); } - Thread t = new Thread( - this.getClass().getSimpleName() + " loader for tracked race " + trackedRace.getRace().getName()) { + ThreadPoolUtil.INSTANCE.getDefaultForegroundTaskThreadPoolExecutor().execute(new Runnable() { @Override public void run() { try { @@ -320,11 +320,9 @@ public class FixLoaderAndTracker implements TrackingDataLoader { } } trackedRace.unlockAfterSerializationRead(); - logger.info("Thread " + getName() + " done."); } } - }; - t.start(); + }); } /** diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/RegattaLogDeviceMappings.java b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/RegattaLogDeviceMappings.java index a7b5e30b265..c3fa0ebeabd 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/RegattaLogDeviceMappings.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter/src/com/sap/sailing/domain/racelogtracking/impl/fixtracker/RegattaLogDeviceMappings.java @@ -270,8 +270,8 @@ public abstract class RegattaLogDeviceMappings { Map>> newMappings) { Set itemsToProcess = new HashSet(previousMappings.keySet()); itemsToProcess.addAll(newMappings.keySet()); - for(ItemT item : itemsToProcess) { - if(!newMappings.containsKey(item)) { + for (ItemT item : itemsToProcess) { + if (!newMappings.containsKey(item)) { previousMappings.get(item).forEach(this::mappingRemoved); } else { final List> oldMappings = previousMappings.containsKey(item) diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/AbstractLog.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/AbstractLog.java index a40781f618f..2a0a91a4650 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/AbstractLog.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/AbstractLog.java @@ -120,10 +120,17 @@ extends Track, WithID { void merge(AbstractLog other); /** - * Inserts a {@link RevokeEvent} for {@code toRevoke}, if latter is revokable, exists in the racelog - * and has not yet been revoked. + * Inserts a {@link RevokeEvent} for {@code toRevoke}, if latter is revokable, exists in the racelog and has not yet + * been revoked and the {@code author} has a {@link AbstractLogEventAuthor#getPriority() priority} that is at least + * as high as that of {@code toRevoke}'s author (numerically less or equal). * - * @param author The author for the {@code RevokeEvent}. + * @param author + * The author for the {@code RevokeEvent}. + * @param toRevoke + * the event to revoke + * + * @exception NotRevokableException if {@code toRevoke} is not a {@link Revokable} event or {@code author} doesn't + * have sufficient priority */ void revokeEvent(AbstractLogEventAuthor author, EventT toRevoke, String reason) throws NotRevokableException; void revokeEvent(AbstractLogEventAuthor author, EventT toRevoke) throws NotRevokableException; diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackImpl.java index b2ad7e825b0..113fa50e5ae 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/tracking/impl/TrackImpl.java @@ -107,12 +107,12 @@ public class TrackImpl implements Track { } /** - * Callers that want to iterate over the collection returned need to synchronize on this object to - * avoid {@link ConcurrentModificationException}s. + * Callers that want to iterate over the collection returned need to use {@link #lockForRead()} and + * {@link #unlockAfterRead()} to avoid {@link ConcurrentModificationException}s. * - * @return the smoothened fixes ordered by their time points; this implementation simply delegates to {@link #getInternalRawFixes()} because for - * only {@link Timed} fixes we can't know how to remove outliers. Subclasses that constrain the - * FixType may provide smoothening implementations. + * @return the smoothened fixes ordered by their time points; this implementation simply delegates to + * {@link #getInternalRawFixes()} because for only {@link Timed} fixes we can't know how to remove outliers. + * Subclasses that constrain the FixType may provide smoothening implementations. */ protected NavigableSet getInternalFixes() { NavigableSet result = getInternalRawFixes(); diff --git a/java/com.sap.sailing.domain.test/.gitignore b/java/com.sap.sailing.domain.test/.gitignore index 092357e47d3..2b3af10a43e 100644 --- a/java/com.sap.sailing.domain.test/.gitignore +++ b/java/com.sap.sailing.domain.test/.gitignore @@ -1 +1,2 @@ bin +/gc.log.0.current diff --git a/java/com.sap.sailing.domain.test/OutperformingTheGarbageCollectorTest.launch b/java/com.sap.sailing.domain.test/OutperformingTheGarbageCollectorTest.launch new file mode 100644 index 00000000000..2afa31388b6 --- /dev/null +++ b/java/com.sap.sailing.domain.test/OutperformingTheGarbageCollectorTest.launch @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/common/test/OutperformingTheGarbageCollectorTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/common/test/OutperformingTheGarbageCollectorTest.java new file mode 100644 index 00000000000..d57dc9d0ede --- /dev/null +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/common/test/OutperformingTheGarbageCollectorTest.java @@ -0,0 +1,84 @@ +package com.sap.sailing.domain.common.test; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; +import java.util.NoSuchElementException; +import java.util.Random; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.junit.Ignore; +import org.junit.Test; + +/** + * Used to force specific garbage collection properties together with the G1GC implementation. By adjusting the + * {@link #MAX_THREADPOOL_SIZE} to, say, 500, it is possible to generate a lot of garbage and hold on to it while they + * are executing slowly in the massively oversized thread pool. This will cause the temporary objects to get promoted + * into the GC's old generation where the mixed GC runs are too slow to keep up, ultimately forcing a Full GC. + * See bug 3864 for more details. Use the launch configuration {@code OutperformingTheGarbageCollectorTest.launch} + * in this project.

+ * + * The configuration is pretty chaotic, with fairly unpredictable impact of changing the constants + * {@link #NUMBER_OF_OBJECTS_TO_CREATE_INITIALLY} and {@link #NUMBER_OF_FOLLOW_UP_OBJECTS_TO_CREATE}. On a four-core + * machine, 100 threads with 50,000,000 initial objects to create and 100,000,000 follow-up objects to create + * we reach a state where Full GC strikes. + * + * @author Axel Uhl (D043530) + * + */ +@Ignore("Unignore if you want to run GC tests") +public class OutperformingTheGarbageCollectorTest { + private static final Logger logger = Logger.getLogger(OutperformingTheGarbageCollectorTest.class.getName()); + private static final int MAX_THREADPOOL_SIZE = 100; + private static final int BATCH_SIZE = 100000; + private static final int NUMBER_OF_OBJECTS_TO_CREATE_INITIALLY = 50000000; + private static final int NUMBER_OF_FOLLOW_UP_OBJECTS_TO_CREATE = 100000000; + private final Random random = new Random(); + private final ThreadPoolExecutor executor = new ThreadPoolExecutor(MAX_THREADPOOL_SIZE, MAX_THREADPOOL_SIZE, 1, TimeUnit.SECONDS, new LinkedBlockingQueue()); + private final ThreadLocal> mapTemporarilyHoldingGarbage = ThreadLocal.withInitial(HashMap::new); + private int numberOfFollowUpTasksCreated; + + @Test + public void testOutperformingTheGarbageCollector() throws InterruptedException { + for (int i=0; iproduceSomeContentAndRemoveSomeOtherContent()); + } + logger.info("Done with producing tasks; waiting for task queue to become empty."); + while (!executor.getQueue().isEmpty()) { + logger.info("Queue still has "+executor.getQueue().size()+" elements; "+ + numberOfFollowUpTasksCreated+" of "+NUMBER_OF_FOLLOW_UP_OBJECTS_TO_CREATE/BATCH_SIZE+ + " follow-up tasks produced; waiting..."); + Thread.sleep(1000); + } + logger.info("Task queue empty; terminating"); + } + + /** + * Produces {@link #BATCH_SIZE} map entries and then turns them into garbage again by removing them again from the map. + * If follow-up tasks for less than {@link #NUMBER_OF_FOLLOW_UP_OBJECTS_TO_CREATE} have been created, enqueue another one. + */ + private void produceSomeContentAndRemoveSomeOtherContent() { + for (int i=0; i> i = mapTemporarilyHoldingGarbage.get().entrySet().iterator(); + int count = 0; + try { + while (i.hasNext() && count++ < BATCH_SIZE) { + i.next(); + i.remove(); + } + } catch (NoSuchElementException e) { + // ignore because some other thread may already have removed the last element, and that's OK then + logger.log(Level.INFO, "Very strange", e); + } + if (numberOfFollowUpTasksCreated < NUMBER_OF_FOLLOW_UP_OBJECTS_TO_CREATE/BATCH_SIZE) { + numberOfFollowUpTasksCreated++; + executor.execute(()->produceSomeContentAndRemoveSomeOtherContent()); + } + } +} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/AbstractRaceColumn.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/AbstractRaceColumn.java index 6e55e05a973..aede43cf677 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/AbstractRaceColumn.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/AbstractRaceColumn.java @@ -107,7 +107,7 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem } if (trackedRace != null) { RegattaLog regattaLog = getRegattaLog(); - if(regattaLog != null) { + if (regattaLog != null) { trackedRace.attachRegattaLog(regattaLog); } final RaceLog raceLog = getRaceLog(fleet); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java index 93adcc6a3e9..be33eb85031 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java @@ -284,7 +284,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene } public static String getDefaultName(String baseName, String boatClassName) { - return baseName + (boatClassName == null ? "" : " (" + boatClassName + ")").replace('/', '_'); + return baseName.replace('/', '_') + (boatClassName == null ? "" : " (" + boatClassName + ")").replace('/', '_'); } @Override diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/caching/LeaderboardDTOCache.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/caching/LeaderboardDTOCache.java index cfb62ba8115..a4c9e684d01 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/caching/LeaderboardDTOCache.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/caching/LeaderboardDTOCache.java @@ -6,12 +6,7 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executor; -import java.util.concurrent.Future; import java.util.concurrent.FutureTask; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import com.sap.sailing.domain.base.DomainFactory; @@ -28,7 +23,6 @@ import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util; import com.sap.sse.concurrent.LockUtil; import com.sap.sse.concurrent.NamedReentrantReadWriteLock; -import com.sap.sse.util.impl.ThreadFactoryWithPriority; /** * Caches the expensive to compute {@link LeaderboardDTO} results of a @@ -66,16 +60,6 @@ public class LeaderboardDTOCache implements LeaderboardCache { */ private final boolean waitForLatestAnalyses; - private static final int THREAD_POOL_SIZE = Math.max(Runtime.getRuntime().availableProcessors()/2, 3); - /** - * A multi-threaded executor for the currently running leaderboard requests, executing the {@link Future}s currently - * pending. - */ - private static final Executor computeLeadearboardByNameExecutor = new ThreadPoolExecutor(/* corePoolSize */ THREAD_POOL_SIZE, - /* maximumPoolSize */ THREAD_POOL_SIZE, - /* keepAliveTime */ 60, TimeUnit.SECONDS, - /* workQueue */ new LinkedBlockingQueue(), new ThreadFactoryWithPriority(Thread.NORM_PRIORITY-1, /* daemon */ true)); - private final LeaderboardCacheManager leaderboardCacheManager; private final Leaderboard leaderboard; @@ -156,24 +140,15 @@ public class LeaderboardDTOCache implements LeaderboardCache { LockUtil.unlockAfterRead(leaderboardCacheLock); } if (future == null) { - final Thread callerThread = Thread.currentThread(); future = new FutureTask(new Callable() { @Override public LeaderboardDTO call() throws Exception { - // The outer getLeaderboardByName(...) method will always wait for this future's completion. - // Therefore, it's safe to propagate the calling thread's locks to this one: - LockUtil.propagateLockSetFrom(callerThread); - try { - LeaderboardDTO result = leaderboard.computeDTO(adjustedTimePoint, - namesOfRaceColumnsForWhichToLoadLegDetails, addOverallDetails, - waitForLatestAnalyses, trackedRegattaRegistry, baseDomainFactory, /* fillTotalPointsUncorrected */ false); - return result; - } finally { - LockUtil.unpropagateLockSetFrom(callerThread); - } + LeaderboardDTO result = leaderboard.computeDTO(adjustedTimePoint, + namesOfRaceColumnsForWhichToLoadLegDetails, addOverallDetails, + waitForLatestAnalyses, trackedRegattaRegistry, baseDomainFactory, /* fillTotalPointsUncorrected */ false); + return result; } }); - computeLeadearboardByNameExecutor.execute(future); // The add(Leaderboard) method that the cache manager calls back on this class does nothing, so no synchronization required this.leaderboardCacheManager.add(leaderboard); // ensure the leaderboard is tracked for changes to invalidate LockUtil.lockForWrite(leaderboardCacheLock); @@ -182,6 +157,7 @@ public class LeaderboardDTOCache implements LeaderboardCache { } finally { LockUtil.unlockAfterWrite(leaderboardCacheLock); } + future.run(); // execute in calling thread as it is fetched a few instructions later using future.get() anyway } else { cacheHit = true; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java index 17484be3622..a60ec26b586 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractSimpleLeaderboardImpl.java @@ -19,13 +19,10 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; -import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.RunnableFuture; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -99,7 +96,7 @@ import com.sap.sse.common.Util.Pair; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.concurrent.LockUtil; import com.sap.sse.concurrent.NamedReentrantReadWriteLock; -import com.sap.sse.util.impl.ThreadFactoryWithPriority; +import com.sap.sse.util.ThreadPoolUtil; /** * Base implementation for various types of leaderboards. The {@link RaceColumnListener} implementation forwards events @@ -153,24 +150,8 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race */ private transient Set cacheInvalidationListeners; - private final static int THREAD_POOL_SIZE = Math.max(Runtime.getRuntime().availableProcessors()/2, 3); - private static final ThreadPoolExecutor executor = new ThreadPoolExecutor(/* corePoolSize */ THREAD_POOL_SIZE, - /* maximumPoolSize */ THREAD_POOL_SIZE, - /* keepAliveTime */ 60, TimeUnit.SECONDS, - /* workQueue */ new LinkedBlockingQueue(), new ThreadFactoryWithPriority(Thread.NORM_PRIORITY-1, /* daemon */ true)); - /** - * This executor needs to be a different one than {@link #executor} because the tasks run by {@link #executor} - * can depend on the results of the tasks run by {@link #raceDetailsExecutor}, and an {@link Executor} doesn't - * move a task that is blocked by waiting for another {@link FutureTask} to the side but blocks permanently, - * ending in a deadlock (one that cannot easily be detected by the Eclipse debugger either). - */ - private final static Executor raceDetailsExecutor = new ThreadPoolExecutor(/* corePoolSize */ THREAD_POOL_SIZE, - /* maximumPoolSize */ THREAD_POOL_SIZE, - /* keepAliveTime */ 60, TimeUnit.SECONDS, - /* workQueue */ new LinkedBlockingQueue(), new ThreadFactoryWithPriority(Thread.NORM_PRIORITY-1, /* daemon */ true)); - - - + private static final ExecutorService executor = ThreadPoolUtil.INSTANCE.getDefaultForegroundTaskThreadPoolExecutor(); + private transient LiveLeaderboardUpdater liveLeaderboardUpdater; private transient LeaderboardDTOCache leaderboardDTOCache; @@ -1625,9 +1606,11 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race RankingInfo rankingInfo, final WindLegTypeAndLegBearingCache cache) throws InterruptedException, ExecutionException { final com.sap.sse.common.Util.Pair key = new com.sap.sse.common.Util.Pair(trackedRace, competitor); RunnableFuture raceDetails; + final boolean needToRunRaceDetails; // when found in cache, another call to this method is already running it; else, it needs to be run here synchronized (raceDetailsAtEndOfTrackingCache) { raceDetails = raceDetailsAtEndOfTrackingCache.get(key); if (raceDetails == null) { + needToRunRaceDetails = true; raceDetails = new FutureTask(new Callable() { @Override public RaceDetails call() throws Exception { @@ -1642,13 +1625,18 @@ public abstract class AbstractSimpleLeaderboardImpl implements Leaderboard, Race legRanksCache, cache, rankingInfo); } }); - raceDetailsExecutor.execute(raceDetails); - raceDetailsAtEndOfTrackingCache.put(key, raceDetails); + raceDetailsAtEndOfTrackingCache.put(key, raceDetails); // this way, final CacheInvalidationListener cacheInvalidationListener = new CacheInvalidationListener(trackedRace, competitor); trackedRace.addListener(cacheInvalidationListener); cacheInvalidationListeners.add(cacheInvalidationListener); + } else { + needToRunRaceDetails = false; } } + // now, outside the synchronized block, run task if needed: + if (needToRunRaceDetails) { + raceDetails.run(); + } return raceDetails.get(); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java index 47d1e4fb489..6cb3fece26c 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/ScoreCorrectionImpl.java @@ -308,21 +308,6 @@ public class ScoreCorrectionImpl implements SettableScoreCorrection { return result; } - private boolean appliesAtStartOfRace(MaxPointsReason maxPointsReason) { - final boolean result; - switch (maxPointsReason) { - case DNS: - case DNC: - case OCS: - case BFD: - result = true; - break; - default: - result = false; - } - return result; - } - @Override public MaxPointsReason getMaxPointsReason(Competitor competitor, RaceColumn raceColumn, TimePoint timePoint) { return getAnnotatedMaxPointsReason(competitor, raceColumn, timePoint).getMaxPointsReason(); @@ -361,7 +346,7 @@ public class ScoreCorrectionImpl implements SettableScoreCorrection { } private boolean isMaxPointsReasonApplicable(MaxPointsReason maxPointsReason, TimePoint timePoint, RaceColumn raceColumn, Competitor competitor) { - return (appliesAtStartOfRace(maxPointsReason) && !isCertainlyBeforeRaceStart(timePoint, raceColumn, competitor)) + return (maxPointsReason.isAppliesAtStartOfRace() && !isCertainlyBeforeRaceStart(timePoint, raceColumn, competitor)) || !isCertainlyBeforeRaceFinish(timePoint, raceColumn, competitor); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/MarkPassingCalculator.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/MarkPassingCalculator.java index a3f10118fbe..9814c6cb300 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/MarkPassingCalculator.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/MarkPassingCalculator.java @@ -10,9 +10,6 @@ import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -30,7 +27,7 @@ import com.sap.sse.common.Util; import com.sap.sse.common.Util.Pair; import com.sap.sse.common.Util.Triple; import com.sap.sse.common.util.IntHolder; -import com.sap.sse.util.impl.ThreadFactoryWithPriority; +import com.sap.sse.util.ThreadPoolUtil; /** * Calculates the {@link MarkPassing}s for a {@link DynamicTrackedRace} using an {@link CandidateFinder} and an @@ -52,11 +49,7 @@ public class MarkPassingCalculator { private CandidateChooser chooser; private static final Logger logger = Logger.getLogger(MarkPassingCalculator.class.getName()); private final MarkPassingUpdateListener listener; - private final static ExecutorService executor = new ThreadPoolExecutor(/* corePoolSize */Math.max(Runtime - .getRuntime().availableProcessors()/2, 3), - /* maximumPoolSize */Math.max(Runtime.getRuntime().availableProcessors() - 1, 3), - /* keepAliveTime */60, TimeUnit.SECONDS, - /* workQueue */new LinkedBlockingQueue(), new ThreadFactoryWithPriority(Thread.NORM_PRIORITY - 1, /* daemon */ true)); + private final static ExecutorService executor = ThreadPoolUtil.INSTANCE.getDefaultBackgroundTaskThreadPoolExecutor(); private boolean suspended = false; @@ -298,7 +291,7 @@ public class MarkPassingCalculator { try { executor.invokeAll(tasks); } catch (InterruptedException e) { - e.printStackTrace(); + logger.log(Level.INFO, "mark passing calculation interrupted", e); } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java index 9d53824e95c..c15b26cfaa9 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/markpassingcalculation/impl/CandidateFinderImpl.java @@ -17,9 +17,6 @@ import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ExecutorService; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -50,10 +47,10 @@ import com.sap.sse.common.Timed; import com.sap.sse.common.Util; import com.sap.sse.common.Util.Pair; import com.sap.sse.common.impl.TimeRangeImpl; -import com.sap.sse.util.impl.ThreadFactoryWithPriority; +import com.sap.sse.util.ThreadPoolUtil; /** - * The standard implemantation of {@link CandidateFinder}. There are two kinds of {@link Candidate}s. First of all, + * The standard implementation of {@link CandidateFinder}. There are two kinds of {@link Candidate}s. First of all, * every time a competitor passes the crossing-bearing of a waypoint, a candidate is created using linear interpolation * to estimate the exact time the bearing was crossed. Secondly, all local distance minima to a waypoint are candidates. * The probability of a candidate depends on its distance, whether it is on the right side and if it passes in the right @@ -149,11 +146,7 @@ public class CandidateFinderImpl implements CandidateFinder { * Like {@link #CandidateFinderImpl(DynamicTrackedRace, ExecutorService)} but creates a default executor service */ public CandidateFinderImpl(DynamicTrackedRace race) { - this(race, new ThreadPoolExecutor(/* corePoolSize */Math.max(Runtime - .getRuntime().availableProcessors()/2, 3), - /* maximumPoolSize */Math.max(Runtime.getRuntime().availableProcessors()/2, 3), - /* keepAliveTime */60, TimeUnit.SECONDS, - /* workQueue */new LinkedBlockingQueue(), new ThreadFactoryWithPriority(Thread.NORM_PRIORITY - 1, /* daemon */ true))); + this(race, ThreadPoolUtil.INSTANCE.getDefaultBackgroundTaskThreadPoolExecutor()); } public CandidateFinderImpl(DynamicTrackedRace race, ExecutorService executor) { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/EmptySensorFixStore.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/EmptySensorFixStore.java index 6829b649b73..17262e26d04 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/EmptySensorFixStore.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/EmptySensorFixStore.java @@ -1,5 +1,6 @@ package com.sap.sailing.domain.racelog.tracking; +import java.util.Map; import java.util.function.Consumer; import com.sap.sailing.domain.common.racelog.tracking.TransformationException; @@ -47,4 +48,9 @@ public enum EmptySensorFixStore implements SensorFixStore { @Override public void storeFixes(DeviceIdentifier device, Iterable fixes) { } + + @Override + public Map getLastFix(Iterable forDevices) { + return null; + } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/SensorFixStore.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/SensorFixStore.java index f1fe00a6b9d..5df10b28b80 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/SensorFixStore.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/racelog/tracking/SensorFixStore.java @@ -1,5 +1,6 @@ package com.sap.sailing.domain.racelog.tracking; +import java.util.Map; import java.util.function.Consumer; import com.sap.sailing.domain.common.racelog.tracking.TransformationException; @@ -68,4 +69,6 @@ public interface SensorFixStore { NoCorrespondingServiceRegisteredException; long getNumberOfFixes(DeviceIdentifier device) throws TransformationException, NoCorrespondingServiceRegisteredException; + + Map getLastFix(Iterable forDevices) throws TransformationException, NoCorrespondingServiceRegisteredException; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRaceWithWindEssentials.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRaceWithWindEssentials.java index 5f84849d6a6..ce7bf54732c 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRaceWithWindEssentials.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/TrackedRaceWithWindEssentials.java @@ -23,7 +23,7 @@ public abstract class TrackedRaceWithWindEssentials implements TrackedRace { private static final Logger logger = Logger.getLogger(TrackedRaceWithWindEssentials.class.getName()); /** - * Serializing an instance of this class has to serialized the various data structures holding the tracked race's + * Serializing an instance of this class has to serialize the various data structures holding the tracked race's * state. When a race is currently on, these structures change very frequently, and * {@link ConcurrentModificationException}s during serialization will be the norm rather than the exception. To * avoid this, all modifications to any data structure that is not in itself synchronized obtains this lock's @@ -146,7 +146,4 @@ public abstract class TrackedRaceWithWindEssentials implements TrackedRace { protected NamedReentrantReadWriteLock getSerializationLock() { return serializationLock; } - - - } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ShortTimeWindCache.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ShortTimeWindCache.java index 43258659c92..96855cf0158 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ShortTimeWindCache.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/ShortTimeWindCache.java @@ -1,11 +1,11 @@ package com.sap.sailing.domain.tracking.impl; import java.util.Set; -import java.util.Timer; -import java.util.TimerTask; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -15,6 +15,7 @@ import com.sap.sailing.domain.tracking.WindWithConfidence; import com.sap.sse.common.TimePoint; import com.sap.sse.common.Util.Pair; import com.sap.sse.common.Util.Triple; +import com.sap.sse.util.ThreadPoolUtil; import com.sap.sse.util.impl.ApproximateTime; /** @@ -36,9 +37,12 @@ public class ShortTimeWindCache { private final ConcurrentLinkedDeque>>> order; /** - * Creation and removal / cancellation of the timer is synchronized using {@link #order}. + * Creation and removal / cancellation of the timer is synchronized using {@link #order}. If this handle is + * {@code null}, any task that was previously scheduled by this object has been canceled. Otherwise, an uncanceled + * {@link CacheInvalidator} task is still scheduled to execute at a fixed rate. It can be cancelled using this + * future. */ - private Timer timer; + private ScheduledFuture invalidatorHandle; private final long preserveHowManyMilliseconds; private final TrackedRaceImpl trackedRace; @@ -46,7 +50,7 @@ public class ShortTimeWindCache { private long hits; private long misses; - private class CacheInvalidator extends TimerTask { + private class CacheInvalidator implements Runnable { @Override public void run() { long oldestToKeep = System.currentTimeMillis() - preserveHowManyMilliseconds; @@ -57,9 +61,8 @@ public class ShortTimeWindCache { } synchronized (order) { if (order.isEmpty()) { - cancel(); - timer.cancel(); - timer = null; + invalidatorHandle.cancel(/* mayInterruptIfRunning */ false); + invalidatorHandle = null; } } } @@ -107,12 +110,12 @@ public class ShortTimeWindCache { } /** - * Must be called under write lock + * Must be called while owning the {@link #order} monitor (synchronized) */ private void ensureTimerIsRunning() { - if (timer == null) { - timer = new Timer(getClass().getSimpleName()+" for "+trackedRace.getRace().getName(), /* isDaemon */ true); - timer.scheduleAtFixedRate(new CacheInvalidator(), /* delay */ preserveHowManyMilliseconds, preserveHowManyMilliseconds); + if (invalidatorHandle == null) { + invalidatorHandle = ThreadPoolUtil.INSTANCE.getDefaultBackgroundTaskThreadPoolExecutor(). + scheduleAtFixedRate(new CacheInvalidator(), /* delay */ preserveHowManyMilliseconds, preserveHowManyMilliseconds, TimeUnit.MILLISECONDS); } } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackBasedEstimationWindTrackImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackBasedEstimationWindTrackImpl.java index b5b5e0746cc..d3f198f7562 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackBasedEstimationWindTrackImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackBasedEstimationWindTrackImpl.java @@ -10,8 +10,7 @@ import java.util.Iterator; import java.util.Map; import java.util.NavigableSet; import java.util.Set; -import java.util.Timer; -import java.util.TimerTask; +import java.util.concurrent.TimeUnit; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Mark; @@ -44,6 +43,7 @@ import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.impl.SerializableComparator; import com.sap.sse.concurrent.LockUtil; import com.sap.sse.concurrent.NamedReentrantReadWriteLock; +import com.sap.sse.util.ThreadPoolUtil; import com.sap.sse.util.impl.ArrayListNavigableSet; /** @@ -504,21 +504,16 @@ public class TrackBasedEstimationWindTrackImpl extends VirtualWindTrackImpl { if (delayForCacheInvalidationInMilliseconds == 0) { invalidateCache(); } else { - final Timer cacheInvalidationTimer = new Timer( - "TrackBasedEstimationWindTrackImpl cache invalidation timer for race " + getTrackedRace().getRace(), /* isDaemon */ true); - cacheInvalidationTimer.schedule(new TimerTask() { - @Override - public void run() { - // no locking required here; the incremental cache refresh protects the inner cache structures from concurrent modifications - cacheInvalidationTimer.cancel(); // terminates the timer thread - if (getTrackedRace().getStatus().getStatus() == TrackedRaceStatusEnum.LOADING) { - // during loading, only invalidate the cache after the interval expired but don't trigger incremental re-calculation - invalidateCache(); - } else { - refreshCacheIncrementally(); - } - } - }, delayForCacheInvalidationInMilliseconds); + ThreadPoolUtil.INSTANCE.getDefaultBackgroundTaskThreadPoolExecutor(). + schedule(()->{ + // no locking required here; the incremental cache refresh protects the inner cache structures from concurrent modifications + if (getTrackedRace().getStatus().getStatus() == TrackedRaceStatusEnum.LOADING) { + // during loading, only invalidate the cache after the interval expired but don't trigger incremental re-calculation + invalidateCache(); + } else { + refreshCacheIncrementally(); + } + }, delayForCacheInvalidationInMilliseconds, TimeUnit.MILLISECONDS); } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index f1365bfc4dd..cad88ade91b 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -747,6 +747,11 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl return startOfTracking; } + /** + * Monitor object to synchronize access to the {@link #updateStartAndEndOfTracking(boolean)} method. See bug 3922. + */ + private final Serializable updateStartAndEndOfTrackingMonitor = ""; + /** * Updates the start and end of tracking in the following precedence order: * @@ -757,42 +762,46 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl * */ public void updateStartAndEndOfTracking(boolean waitForGPSFixesToLoad) { - final Pair trackingTimesFromRaceLog = this.getTrackingTimesFromRaceLogs(); - TimePoint oldStartOfTracking = getStartOfTracking(); - TimePoint oldEndOfTracking = getEndOfTracking(); - boolean startOfTrackingFound = false; - boolean endOfTrackingFound = false; - // check race log - if (trackingTimesFromRaceLog != null){ - if (trackingTimesFromRaceLog.getA() != null) { - startOfTracking = trackingTimesFromRaceLog.getA().getTimePoint(); - startOfTrackingFound = true; + final TimePoint oldStartOfTracking; + final TimePoint oldEndOfTracking; + synchronized (updateStartAndEndOfTrackingMonitor) { + final Pair trackingTimesFromRaceLog = this.getTrackingTimesFromRaceLogs(); + oldStartOfTracking = getStartOfTracking(); + oldEndOfTracking = getEndOfTracking(); + boolean startOfTrackingFound = false; + boolean endOfTrackingFound = false; + // check race log + if (trackingTimesFromRaceLog != null){ + if (trackingTimesFromRaceLog.getA() != null) { + startOfTracking = trackingTimesFromRaceLog.getA().getTimePoint(); + startOfTrackingFound = true; + } + if (trackingTimesFromRaceLog.getB() != null) { + endOfTracking = trackingTimesFromRaceLog.getB().getTimePoint(); + endOfTrackingFound = true; + } } - if (trackingTimesFromRaceLog.getB() != null) { - endOfTracking = trackingTimesFromRaceLog.getB().getTimePoint(); - endOfTrackingFound = true; + // check "received" variants coming from a connector directly + if (!startOfTrackingFound || !endOfTrackingFound) { + if (startOfTrackingReceived != null && !startOfTrackingFound) { + startOfTrackingFound = true; + startOfTracking = startOfTrackingReceived; + } + if (endOfTrackingReceived != null && !endOfTrackingFound) { + endOfTrackingFound = true; + endOfTracking = endOfTrackingReceived; + } } - } - // check "received" variants coming from a connector directly - if (!startOfTrackingFound || !endOfTrackingFound) { - if (startOfTrackingReceived != null && !startOfTrackingFound) { - startOfTrackingFound = true; - startOfTracking = startOfTrackingReceived; - } - if (endOfTrackingReceived != null && !endOfTrackingFound) { - endOfTrackingFound = true; - endOfTracking = endOfTrackingReceived; - } - } - // check for start/finished times in race log and add a few minutes on the ends - if (!startOfTrackingFound || !endOfTrackingFound) { - if (!startOfTrackingFound && getStartOfRace() != null) { - startOfTracking = getStartOfRace().minus(START_TRACKING_THIS_MUCH_BEFORE_RACE_START); - startOfTrackingFound = true; - } - if (!endOfTrackingFound && getFinishedTime() != null) { - endOfTracking = getFinishedTime().plus(STOP_TRACKING_THIS_MUCH_AFTER_RACE_FINISH); - endOfTrackingFound = true; + // check for start/finished times in race log and add a few minutes on the ends + if (!startOfTrackingFound || !endOfTrackingFound) { + if (!startOfTrackingFound && getStartOfRace() != null) { + startOfTracking = getStartOfRace().minus(START_TRACKING_THIS_MUCH_BEFORE_RACE_START); + startOfTrackingFound = true; + } + if (!endOfTrackingFound && getFinishedTime() != null) { + endOfTracking = getFinishedTime().plus(STOP_TRACKING_THIS_MUCH_AFTER_RACE_FINISH); + endOfTrackingFound = true; + } } } startOfTrackingChanged(oldStartOfTracking, waitForGPSFixesToLoad); @@ -1971,6 +1980,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl */ private void clearAllCachesExceptManeuvers() { synchronized (cacheInvalidationTimerLock) { + // TODO bug 3864: schedule a task with a background thread executor instead of affording a new Timer for each race if (cacheInvalidationTimer == null) { cacheInvalidationTimer = new Timer("Cache invalidation timer for TrackedRaceImpl " + getRace().getName(), /* isDaemon */ true); diff --git a/java/com.sap.sailing.expeditionconnector/src/com/sap/sailing/expeditionconnector/ExpeditionWindTrackerFactory.java b/java/com.sap.sailing.expeditionconnector/src/com/sap/sailing/expeditionconnector/ExpeditionWindTrackerFactory.java index a30719ea1bf..961d030e3db 100755 --- a/java/com.sap.sailing.expeditionconnector/src/com/sap/sailing/expeditionconnector/ExpeditionWindTrackerFactory.java +++ b/java/com.sap.sailing.expeditionconnector/src/com/sap/sailing/expeditionconnector/ExpeditionWindTrackerFactory.java @@ -96,4 +96,9 @@ public class ExpeditionWindTrackerFactory implements WindTrackerFactory { windReceivers.remove(windTracker.getReceiver().getPort()); } } + + @Override + public String toString() { + return "ExpeditionWindTrackerFactory [defaultPort=" + defaultPort + "]"; + } } diff --git a/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs b/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs index df8834786fc..e725b136935 100755 --- a/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs +++ b/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs @@ -1,10 +1,4 @@ eclipse.preferences.version=1 -encoding//src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages.properties=UTF-8 -encoding//src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_de.properties=UTF-8 -encoding//src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_ja.properties=UTF-8 -encoding//src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_ru.properties=UTF-8 -encoding//src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_zh.properties=UTF-8 -encoding//src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_zh_CN.properties=UTF-8 encoding//src/main/java/com/sap/sailing/gwt/home/mobile/partials/sectionHeader/SectionHeaderContent.java=utf-8 encoding//src/main/java/com/sap/sailing/gwt/regattaoverview/client/RegattaRaceStatesComponent.java=utf-8 encoding//src/main/java/com/sap/sailing/gwt/server/HomeServiceUtil.java=utf-8 diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java index 9b4fb1bc612..f51031329eb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java @@ -20,6 +20,7 @@ import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider; import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint; import com.sap.sailing.gwt.ui.raceboard.RaceBoardPanel; import com.sap.sailing.gwt.ui.raceboard.RaceBoardPerspectiveLifecycle; import com.sap.sailing.gwt.ui.raceboard.RaceBoardPerspectiveSettings; @@ -82,7 +83,7 @@ public class AutoPlayController implements RaceTimesInfoProviderListener, Leader asyncActionsExecutor = new AsyncActionsExecutor(); currentLeaderboard = null; - leaderboardTimer = new Timer(PlayModes.Live, /* delayBetweenAutoAdvancesInMilliseconds */1000l); + leaderboardTimer = new Timer(PlayModes.Live, /* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS); leaderboardTimer.setLivePlayDelayInMillis(delayToLiveInMillis); leaderboardTimer.setRefreshInterval(REFRESH_INTERVAL_IN_MILLIS_LEADERBOARD); leaderboardTimer.play(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/start/DesktopStartView.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/start/DesktopStartView.ui.xml index f0b2b33ce53..5ec165ba872 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/start/DesktopStartView.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/start/DesktopStartView.ui.xml @@ -4,7 +4,6 @@ xmlns:g="urn:import:com.google.gwt.user.client.ui"> - .row { padding-bottom:1em; @@ -23,7 +22,7 @@

- : + :
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/oldleaderboard/OldLeaderboard.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/oldleaderboard/OldLeaderboard.java index d60d762b176..d12e5bf3774 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/oldleaderboard/OldLeaderboard.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/oldleaderboard/OldLeaderboard.java @@ -12,7 +12,6 @@ import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.RaceIdentifier; import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO; -import com.sap.sailing.gwt.common.client.i18n.TextMessages; import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil; @@ -58,7 +57,7 @@ public class OldLeaderboard extends Composite implements LeaderboardUpdateListen String lastUpdate = DateAndTimeFormatterUtil.defaultDateFormatter.render(lastCorrectionDate) + ", " + DateAndTimeFormatterUtil.longTimeFormatter.render(lastCorrectionDate); lastScoringUpdateTimeDiv.setInnerText(lastUpdate); - lastScoringUpdateTextDiv.setInnerText(TextMessages.INSTANCE.eventRegattaLeaderboardLastScoreUpdate()); + lastScoringUpdateTextDiv.setInnerText(StringMessages.INSTANCE.eventRegattaLeaderboardLastScoreUpdate()); } else { lastScoringUpdateTimeDiv.setInnerText(""); lastScoringUpdateTextDiv.setInnerText(""); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/oldleaderboard/OldLeaderboard.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/oldleaderboard/OldLeaderboard.ui.xml index 2982a5c7df9..c099c010cc8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/oldleaderboard/OldLeaderboard.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/shared/oldleaderboard/OldLeaderboard.ui.xml @@ -1,7 +1,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages.java deleted file mode 100644 index 8343bb86ccc..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages.java +++ /dev/null @@ -1,241 +0,0 @@ -package com.sap.sailing.gwt.common.client.i18n; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.i18n.client.LocalizableResource.DefaultLocale; -import com.google.gwt.i18n.client.Messages; - - -@DefaultLocale("en") -public interface TextMessages extends Messages { - public static final TextMessages INSTANCE = GWT.create(TextMessages.class); - - String chartSelectionHint(); - String chooseALanguage(); - String home(); - String events(); - String aboutUs(); - String contact(); - String sponsoring(); - String solutions(); - String blog(); - String german(); - String english(); - String fullEventSchedule(); - String officalEventWebsite(); - String leg(); - String races(); - String moreInfo(); - String viewAnalysis(); - String overallLeaderboard(); - String pleaseEnterASearchTerm(); - String pleaseTryAgain(); - String reloadPage(); - String errorMessageLoadingData(); - String errorMessageNoSuchLeaderboard(); - String raceNotScheduled(); - String regattaDetails(); - String regatta(); - String competitorsAnalytics(); - String chooseChart(); - String series(); - String regattaLeaderboards(); - String features(); - String releaseNotes(); - String whatsNew(); - String overview(); - String sapSailing(); - String search(); - String startSimulator(); - String countdownStartingInDays(); - String countdownDays(); - String countdownHours(); - String countdownMinutes(); - String countdownSeconds(); - String countdownDay(); - String countdownHour(); - String countdownMinute(); - String countdownSecond(); - String live(); - String finished(); - String watchNow(); - String lastUpdate(); - String leaderboard(); - String boxNewsUpdateMoreLink(); - String boxNewsUpdateTitle(); - String boxUpcomingRacesCountdownStarted1(); - String boxUpcomingRacesCountdownStarted2(); - String boxUpcomingRacesCountdownStarted3(); - String boxUpcomingRacesCountdownStarting1(); - String boxUpcomingRacesCountdownStarting2(); - String boxUpcomingRacesCountdownStarting3(); - String boxUpcomingRacesMoreLink(); - String boxUpcomingRacesTitle(); - String boxWeather(); - String boxWeatherUnit(); - String defaultTitle(); - String eventHeaderMedia(); - String eventHeaderOverview(); - String eventHeaderRaces(); - String eventHeaderRegattas(); - String seriesHeaderOverview(); - String seriesHeaderUpcoming(); - String seriesHeaderRecent(); - String seriesHeaderLeaderboard(); - String seriesOverviewHeaderRecent(); - String seriesOverviewReadMore(); - String eventsOverviewRecentEvents(); - String eventsOverviewRecentCountries(); - String eventsOverviewRecentSailors(); - String eventsOverviewRecentTrackedRaces(); - String eventResultsHeadline(); - String eventResultsBoatClassesDropDown(); - String eventOverviewMoreEvents(); - String eventOverviewRecentEvents(); - String eventOverviewUpcomingDate(); - String eventOverviewUpcomingEvent(); - String eventOverviewUpcomingLocation(); - String eventOverviewUpcomingSchedule(); - String eventOverviewUpcomingSeries(); - String eventOverviewUpcomingTeaser(); - String eventQuickfinderTitle(); - String eventRegattaHeaderLeaderboard(); - String eventRegattaHeaderRaceRaces(); - String eventRegattaListAllBoatClasses(); - String eventRegattaLeaderboardCompetitor(); - String eventRegattaLeaderboardExtendLeaderboard(); - String eventRegattaLeaderboardFinishedMessage(); - String eventRegattaLeaderboardLastScoreUpdate(); - String eventRegattaLeaderboardName(); - String eventRegattaLeaderboardRegattaRank(); - String eventRegattaLeaderboardTotalPoints(); - String eventRegattaRaceWatch(); - String eventRegattaRaceAnalyse(); - String eventRegattaRaceNotTracked(); - String eventRegattaRaceFinished(); - String eventRegattaRaceStarted(); - String eventRegattaRaceScheduled(); - String eventRegattaRaceRace(); - String eventRegattaRaceWind(); - String eventRegattaRaceWinner(); - String eventRegattaRaceLeader(); - String eventRegattaRacesLegendGps(); - String eventRegattaRacesLegendWind(); - String eventRegattaRacesLegendVideo(); - String eventRegattaRacesLegendAudio(); - String eventSponsorsTitle(); - String footerJobs(); - String footerCopyright(); - String footerLanguage(); - String footerLegal(); - String footerPrivacy(); - String footerFeedback(); - String headerEvents(); - String headerHome(); - String headerLogo(); - String headerSearch(); - String headerSearchPlaceholder(); - String headerSolutions(); - String headerSponsoring(); - String latestRaceResultsHeadline(); - String latestRaceResultsIsNew(); - String latestRaceResultsIsUpdated(); - String latestRaceResultsRaceCountUnit(); - String latestRaceResultsRefresh(); - String leaderboardQuickAccessLabel(); - String mainEventShowAll(); - String mainEventTitle(); - String mainMediaSubtitle(); - String mainMediaTitle(); - String mainMediaVideosSubtitle(); - String mainMediaVideosTitle(); - String mainSponsorsReadMore(); - String mediaTeaserPhotosTitle(); - String mediaTeaserVideosTitle(); - String regattaCompetitors(); - String regattaRaces(); - String regattaTracked(); - String regattaRegattaStarts(); - String regattaPts(); - String regattaCourse(); - String regattaArea(); - String regattaFinishedAt(); - String regattaScheduledAt(); - String regattaStartedAt(); - String regattasResultsTitle(); - String searchResultHeaderButton(); - String searchResultHeaderLabel(); - String searchResultsFound(); - String searchResultHeaderPlaceholder(); - String searchResultMore(); - String searchResultSearch(); - String searchResultSearchAgain(); - String searchResultSortLabel(); - String searchResultSortNewest(); - String searchResultSortOldest(); - String searchResultSortRelevance(); - String searchResultCount(); - String sharingEmail(); - String sharingFacebook(); - String sharingTwitter(); - String socialFooterShare(); - String socialFooterTitle(); - - String solutionsSISHeadline(); - String solutionsSAPHeadline(); - String solutionsRaceHeadline(); - String solutionsInSightHeadline(); - String solutionsBuoyPingerHeadline(); - String solutionsPostHeadline(); - String solutionsTrainingHeadline(); - String solutionsSimulatorHeadline(); - - String sapInSailing(); - String contentSapInSailing1(); - String contentSapInSailing2(); - String contentSapInSailing3(); - String contentSapInSailing4(); - String contentSapInSailing5(); - String contentSapInSailing6(); - String contentSapInSailing7(); - String contentSapInSailing8(); - String contentSapInSailing9(); - String contentSapInSailing10(); - String contentSapInSailing11(); - String contentSapInSailing12(); - String solutionsSAPText1(); - String solutionsSAPText2(); - String solutionsRaceText(); - String solutionsPostText(); - String solutionsTrainingText(); - String solutionsSimulatorText(); - String sapSailingAnalytics(); - String autoPlayerConfiguration(); - String contentSapSailingAnalytics1(); - String contentSapSailingAnalytics2(); - String sapSailingAnalyticsReadMore(); - - String sapSailingRaceManager(); - String contentSapSailingRaceManager(); - String sapSailingRaceManagerReadMore(); - - String sapSailInSight(); - String contentSapSailInSight(); - String sapSailInSightReadMore(); - - String sapSailingBuoyPinger(); - String contentSapSailingBuoyPinger(); - String sapSailingBuoyPingerReadMore(); - - String postRaceAnalytics(); - String contentPostRaceAnalytics1(); - String contentPostRaceAnalytics2(); - String i18nDeSolutionsTrainingHeadline(); - String i18nDeSolutionsTrainingText(); - - String strategySimulator(); - String contentStrategySimulator(); - - String strategySimulatorReadMore(); - - String impressum(); -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages.properties deleted file mode 100644 index c1693b835c4..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages.properties +++ /dev/null @@ -1,235 +0,0 @@ -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 -solutions=Solutions -blog=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 -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 -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 -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=Photographers love Sailing -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 - -# SOLUTIONS - -solutionsSISHeadline=SAP in Sailing -solutionsSAPHeadline=SAP Sailing Analytics -solutionsRaceHeadline=SAP Sailing Race Manager -solutionsInSightHeadline=SAP Sail InSight -solutionsBuoyPingerHeadline=SAP Sailing Buoy Pinger -solutionsPostHeadline=Post-Race Analytics -solutionsTrainingHeadline=Training Diary -solutionsSimulatorHeadline=Strategy Simulator - -sapInSailing=SAP in Sailing -contentSapInSailing1=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: -contentSapInSailing2=Help sailors analyze performance and optimize strategy -contentSapInSailing3=Bring fans closer to the action -contentSapInSailing4=Provide the media with information and insights to deliver a greater informed commentary -contentSapInSailing5=SAP has a longstanding involvement with sailing and has established a portfolio spanning across teams and regattas, including: -contentSapInSailing6=Official Technology Partner of Travemünder Woche -contentSapInSailing7=Technical Partner of the European Sailing Leagues -contentSapInSailing8=Title sponsor of the SAP Extreme Sailing Team -contentSapInSailing9=Official Technical Partner of the Extreme Sailing Series -contentSapInSailing10=Premium Partner of Germany’s national sailing team, Audi Sailing Team Germany -contentSapInSailing11=Premium Partner of the world’s largest regatta, Kieler Woche (Kiel Week) -contentSapInSailing12=Title sponsor of the SAP 5O5 World Championships - -solutionsSAPText1=By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. -solutionsSAPText2=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. -solutionsRaceText=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. -solutionsPostText=Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.
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. -solutionsTrainingText=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. -solutionsSimulatorText=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. - -autoPlayerConfiguration=Auto Player Configuration - -sapSailingAnalytics=SAP Sailing Analytics -contentSapSailingAnalytics1=By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. -contentSapSailingAnalytics2=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. -sapSailingAnalyticsReadMore=Read More - -sapSailingRaceManager=SAP Sailing Race Manager -contentSapSailingRaceManager=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. -sapSailingRaceManagerReadMore=Learn More - -sapSailInSight=SAP Sail InSight -contentSapSailInSight=With the SAP Sail InSight mobile app for iPhone, iPad and Android phones, sailboat racers can manage their regatta participation and performance anywhere and anytime. This app connects to the SAP Sailing Analytics solution and enables racers to sign in to an SAP Sail InSight-enabled regatta, track their location together with performance indicators like speed or distance sailed, and analyze their performance. -sapSailInSightReadMore=Learn More - -sapSailingBuoyPinger=SAP Sailing Buoy Pinger -contentSapSailingBuoyPinger=With the SAP Sailing Buoy Pinger mobile app for Android phones, sailboat race managers can simplify the positioning of race marks and communication with the mark layers anywhere and anytime. This app connects to the SAP Sailing Analytics solution and allows regatta managers to track the geographical position of their race marks, enabling the use of the SAP Sail InSight mobile app by sailors participating in the regatta. -sapSailingBuoyPingerReadMore=Learn More - -postRaceAnalytics=Post-Race Analytics -contentPostRaceAnalytics1=Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better. -contentPostRaceAnalytics2=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. - -i18nDeSolutionsTrainingHeadline=SAP Sail Better – STG Training Diary -i18nDeSolutionsTrainingText=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. - -strategySimulator=Strategy Simulator -contentStrategySimulator=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. - -strategySimulatorReadMore=Learn More -impressum=Imprint - diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_de.properties deleted file mode 100644 index 2bf83bbc25d..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_de.properties +++ /dev/null @@ -1,235 +0,0 @@ -chartSelectionHint=Hinweis: Sie können auch Ergebnisstabelle (im Menü ERGEBNISSE) nutzen, um die im Diagramm angezeigten Teilnehmer auszuwählen. -chooseALanguage=Wähle eine Sprache -events=Veranstaltungen -home=Startseite -aboutUs=Über uns -contact=Kontakt -sponsoring=Sponsoring -solutions=Lösungen -blog=Blog -german=Deutsch -english=English -fullEventSchedule=Gesamter Veranstaltungsplan -officalEventWebsite=Offizielle Internetseite -leg=Schenkel -races=Rennen -moreInfo=Weitere Informationen -viewAnalysis=Analysen ansehen -overallLeaderboard=Gesamtergebnis -pleaseEnterASearchTerm=Bitte gebe einen Suchbegriff ein. -pleaseTryAgain=Bitte versuchen sie es erneut... -reloadPage=Seite neu laden -errorMessageLoadingData=Beim Laden der Daten für diese Seite ist ein Fehler aufgetreten. -errorMessageNoSuchLeaderboard=Es wurde keine Ergebnisliste mit diesem Namen gefunden. -raceNotScheduled=Keine Startzeit bekannt -regattaDetails=Regatta anzeigen -regatta=Regatta -competitorsAnalytics=Teilnehmeranalysen -chooseChart=Wähle einen Diagrammtyp aus -series=Serie -regattaLeaderboards=Regattaergebnisse -features=Funktionen -releaseNotes=Anmerkungen zur Version -whatsNew=Neuigkeiten -overview=Übersicht -sapSailing=SAP Sailing -search=Suche -startSimulator=Simulator starten -countdownStartingInDays=Tagen -countdownDays=Tage -countdownHours=Std. -countdownMinutes=Min. -countdownSeconds=Sek. -countdownDay=Tag -countdownHour=Std. -countdownMinute=Min. -countdownSecond=Sek. -live=Live -finished=Beendet -watchNow=Jetzt mitverfolgen -lastUpdate=Letztes Update -leaderboard=Ergebnisliste -boxNewsUpdateMoreLink=Neuigkeiten berichten -boxNewsUpdateTitle=News Update -boxUpcomingRacesCountdownStarted1=Gestartet -boxUpcomingRacesCountdownStarted2=Std. und -boxUpcomingRacesCountdownStarted3=Minuten vorbei -boxUpcomingRacesCountdownStarting1=Startet in -boxUpcomingRacesCountdownStarting2=Std. in -boxUpcomingRacesCountdownStarting3=Minuten -boxUpcomingRacesMoreLink=Veranstaltungszeitplan -boxUpcomingRacesTitle=Kommende Rennen heute -boxWeather=Wetter -boxWeatherUnit=KTN -defaultTitle=SAP Sailing Analytics -eventHeaderMedia=Media -eventHeaderOverview=Übersicht -eventHeaderRaces=Zeitplan -eventHeaderRegattas=Regatten -seriesHeaderOverview=Über die Serie -seriesHeaderUpcoming=Demnächst -seriesHeaderRecent=Letzte Veranstaltungen -seriesHeaderLeaderboard=Ergebnisliste -seriesOverviewHeaderRecent=Letzte Serienveranstaltungen -seriesOverviewReadMore=Mehr -eventsOverviewRecentEvents=Veranstaltungen -eventsOverviewRecentCountries=Länder -eventsOverviewRecentSailors=Segler -eventsOverviewRecentTrackedRaces=mitverfolgte Rennen -eventResultsHeadline=Gewinner und Ergebnisse -eventResultsBoatClassesDropDown=Alle Bootklassen -eventOverviewMoreEvents=Mehr Veranstaltungen -eventOverviewRecentEvents=Letzte Veranstaltungen -eventOverviewUpcomingDate=Datum -eventOverviewUpcomingEvent=Veranstaltungen -eventOverviewUpcomingLocation=Ort -eventOverviewUpcomingSchedule=Kommendes Programm -eventOverviewUpcomingSeries=Serien -eventOverviewUpcomingTeaser=Mehr Veranstaltungen werden bald veröffentlicht -eventQuickfinderTitle=Veranstaltung Schnellsuche -eventRegattaHeaderLeaderboard=Ergebnisliste -eventRegattaHeaderRaceRaces=Rennen -eventRegattaListAllBoatClasses=Alle Bootklassen -eventRegattaLeaderboardCompetitor=Teilnehmer -eventRegattaLeaderboardExtendLeaderboard=Erweitere Ergebnisliste -eventRegattaLeaderboardFinishedMessage=Keine weiteren rennen -eventRegattaLeaderboardLastScoreUpdate=Letztes Ergebnisupdate -eventRegattaLeaderboardName=Name -eventRegattaLeaderboardRegattaRank=Platz in der Regatta -eventRegattaLeaderboardTotalPoints=Gesamtpunkte -eventRegattaRaceWatch=Live ansehen -eventRegattaRaceAnalyse=Rennen analysieren -eventRegattaRaceNotTracked=Nicht getrackt -eventRegattaRaceFinished=Beendet um: -eventRegattaRaceStarted=Gestartet um: -eventRegattaRaceScheduled=Geplant um: -eventRegattaRaceRace=Rennen -eventRegattaRaceWind=Windstärke: -eventRegattaRaceWinner=Gewinner -eventRegattaRaceLeader=Führender -eventRegattaRacesLegendGps=Tracking -eventRegattaRacesLegendWind=Winddaten -eventRegattaRacesLegendVideo=Video -eventRegattaRacesLegendAudio=Audio -eventSponsorsTitle=Veranstaltungssponsoren -footerJobs=Jobs -footerCopyright=\u00A9 2011-2016 SAP Sailing Analytics -footerLanguage=SAP Sailing in -footerLegal=Impressum -footerPrivacy=Datenschutz -footerFeedback=Feedback -headerEvents=Veranstaltungen -headerHome=Startseite -headerLogo=Sailing Analytics -headerSearch=Suche in SAPSailing.com -headerSearchPlaceholder=Suche -headerSolutions=Lösungen -headerSponsoring=Sponsoren -latestRaceResultsHeadline=Letzten ofiziellen Ergebnisse -latestRaceResultsIsNew=Neu -latestRaceResultsIsUpdated=Aktualisiert -latestRaceResultsRaceCountUnit=Rennen -latestRaceResultsRefresh=aktualisieren -leaderboardQuickAccessLabel=Ergebnisliste Schnellzugang -mainEventShowAll=Zeige alle Veranstaltungen -mainEventTitle=Die letzten Veranstaltungen aus der Segelwelt -mainMediaSubtitle=Hier gibt es die aktuellsten und schönsten Impressionen aus deiner beliebtesten Segelveranstaltung. -mainMediaTitle=Fotografen lieben Segeln -mainMediaVideosSubtitle=Tauche ein in die Welt des Segelns und besuche auch die anderen Veranstaltungen für mehr Videos. -mainMediaVideosTitle= Die Letzten Videoeinträge -mainSponsorsReadMore=Lese mehr -mediaTeaserPhotosTitle=Fotos -mediaTeaserVideosTitle=Videos -regattaCompetitors=Teilnehmer -regattaRaces=Rennen -regattaTracked=Getrackt -regattaRegattaStarts=Regatta wird starten -regattaPts=Pkt. -regattaCourse=Kurs -regattaArea=Regattabahn -regattaFinishedAt=Beendet um -regattaScheduledAt=Geplant um -regattaStartedAt=Gestartet um -regattasResultsTitle=Gewinner und Ergebnisse -searchResultHeaderButton=Suche -searchResultHeaderLabel=Deine Suche -searchResultsFound=Ergebnisse gefunden für -searchResultHeaderPlaceholder=Suchbegriff eingeben -searchResultMore=Mehr -searchResultSearch=Suche -searchResultSearchAgain=Noch einmal suchen -searchResultSortLabel=Sortiert nach -searchResultSortNewest=Neueste -searchResultSortOldest=Älteste -searchResultSortRelevance=Relevanz -searchResultCount=Um die 2.450 Ergebnisse wurden gefunden für "Schnitzel" -sharingEmail=Email versenden -sharingFacebook=Auf Facebook teilen -sharingTwitter=Twittern -socialFooterShare=Teile es auf -socialFooterTitle=Empfehle SAP Sailing Analytics - -# SOLUTIONS - -solutionsSISHeadline=SAP im Segelsport -solutionsSAPHeadline=SAP Sailing Analytics -solutionsRaceHeadline=SAP Sailing Race Manager -solutionsInSightHeadline=SAP Sail InSight -solutionsBuoyPingerHeadline=SAP Sailing Buoy Pinger -solutionsPostHeadline=Analysen nach den Rennen -solutionsTrainingHeadline=Trainingstagebuch -solutionsSimulatorHeadline=Strategie-Simulator - -sapInSailing=SAP im Segelsport -contentSapInSailing1=Der Segelsport bietet SAP eine perfekte Plattform, um seine Lösungen zu demonstrieren und dem Sport zu neuen Bestleistungen zu verhelfen. SAPs Unterstützung hat das Segelerlebnis vollkommen verwandelt. Tools von SAP: -contentSapInSailing2=helfen Seglern, ihre Leistung zu analysieren und ihre Strategie zu optimieren -contentSapInSailing3=bringen Fans näher an das Geschehen heran -contentSapInSailing4=stellen Informationen und Einblicke für die Medien bereit, um eine besser informierte Berichterstattung zu ermöglichen -contentSapInSailing5=SAP ist bereits seit vielen Jahren mit dem Segelsport verbunden und hat ein Portfolio zahlreicher Teams und Regatten aufgebaut, darunter: -contentSapInSailing6=Offizieller Technologiepartner der Travemünder Woche -contentSapInSailing7=Technischer Partner der Europäischen Segelligen -contentSapInSailing8=Titelsponsor des SAP Extreme Sailing Teams -contentSapInSailing9=Offizieller technischer Partner der Extreme Sailing Series -autoPlayerConfiguration=Auto Player Konfiguration -contentSapInSailing10=Premium-Partner der deutschen Segel-Nationalmannschaft Audi Sailing Team Germany -contentSapInSailing11=Premium-Partner der Kieler Woche, der größten Regatta der Welt -contentSapInSailing12=Titelsponsor der SAP 5O5 World Championships - -solutionsSAPText1=Durch die Bereitstellung von Echtzeit-Analysen zu Ranglisten, Geschwindigkeiten, Manövern, Kursen etc. trägt SAP dazu bei, die komplexe Welt des Segelns einfacher und verständlicher zu machen. -solutionsSAPText2=SAP Sailing Analytics nutzt Cloud- und In-Memory-Technologie, verarbeitet GPS- und Winddaten in Echtzeit und visualisiert Inhalte in verschiedenen Frontends, die von überall zugänglich sind, um transparente Einblicke in die Welt des Segelns zu liefern. -solutionsRaceText=Der SAP Sailing Race Manager bietet Rennveranstaltern mehr Effizienz und Kontrolle, indem er ihre manuellen Aufgaben sowie die Kommunikation während Regatten automatisiert und vereinfacht. Diese App unterstützt die Durchführung und Abwicklung von Segelrennen und hilft Rennleitungen dadurch, intelligenter zu arbeiten. -solutionsPostText=Daten von den Segelveranstaltungen bieten Seglern die Möglichkeit, ihre Leistungen zu analysieren und zu bewerten, damit sie ihre Strategien verfeinern und letztendlich besser segeln können.
Lösungen von SAP Business Analytics geben Seglern, Trainern, Fans und Medien die Mittel in die Hand, um historische Daten von vielen Regatten und Rennen abzurufen und zu analysieren. Mit SAP HANA sind Informationen über Leistungsmuster, Trends und Segler-Profile einfach, schnell und effizient abrufbar, so dass Segler ihre eigene Leistung optimieren und Erfolgsstrategien für zukünftige Regatten entwickeln können. -solutionsTrainingText=Das STG Trainingstagebuch unterstützt die tägliche Dokumentation und Analyse der Kondition und Trainingsaktivitäten eines Sportlers, sowohl in Bereichen wie Training auf dem Wasser, Körpertraining, Arbeit auf dem Boot, Mentaltraining und Theorie als auch bei anderen Aktivitäten wie Weiterbildung oder Reisen. -solutionsSimulatorText=Während eines Rennens hängt viel von der Wahl der richtigen Strategie ab. Der Strategy Simulator vereinfacht die Ermittlung der besten Segelstrategie für diverse Wind- und Strömungsbedingungen. Da Wind und Strömung sofort in der Simulation geändert werden können, lässt sich die Robustheit einer Strategie selbst für unsichere Wetterbedingungen problemlos bewerten. - - -sapSailingAnalytics=SAP Sailing Analytics -contentSapSailingAnalytics1=Durch die Bereitstellung von Echtzeit-Analysen zu Ranglisten, Geschwindigkeiten, Manövern, Kursen etc. trägt SAP dazu bei, die komplexe Welt des Segelns einfacher und verständlicher zu machen. -contentSapSailingAnalytics2=SAP Sailing Analytics nutzt Cloud- und In-Memory-Technologie, verarbeitet GPS- und Winddaten in Echtzeit und visualisiert Inhalte in verschiedenen Frontends, die von überall zugänglich sind, um transparente Einblicke in die Welt des Segelns zu liefern. -sapSailingAnalyticsReadMore=Mehr lesen - -sapSailingRaceManager=SAP Sailing Race Manager -contentSapSailingRaceManager=Der SAP Sailing Race Manager bietet Rennveranstaltern mehr Effizienz und Kontrolle, indem sie ihre manuellen Aufgaben und die Kommunikation während Regatten automatisiert und vereinfacht. Die Race Committee App unterstützt die Durchführung und Abwicklung von Segelrennen und hilft Rennleitungen dadurch, intelligenter zu arbeiten. -sapSailingRaceManagerReadMore=Mehr erfahren - -sapSailInSight=SAP Sail InSight -contentSapSailInSight=Mit der SAP Sail InSight App für iPhone, iPad und Android Telefone, können Regattasegler ihre Teilnahme an Regatten managen und ihre Leistungen analysieren – überall und jederzeit. Diese App verbindet sich mit der SAP Sailing Analytics Lösung und \ -erlaubt Seglern, sich bei einer SAP Sail InSight unterstützen Regatta anzumelden, ihre Position (inkl. Kennzahlen wie Geschwindigkeit und gesegelte Strecke) zu erfassen und ihre Leistung auszuwerten. -sapSailInSightReadMore=Learn More - -sapSailingBuoyPinger=SAP Sailing Buoy Pinger -contentSapSailingBuoyPinger=Mit der SAP Sailing Buoy Pinger App für Android Telefone, können Wettfahrtleiter die Auslage der Kursmarken sowie die Kommunikation mit den Tonnenlegern vereinfachen – überall und jederzeit. Diese App verbindet sich mit der SAP Sailing Analytics Lösung und ermöglicht Wettfahrtleitern die geografische Position ihrer Kursmarken zu erfassen. Dies ermöglicht es teilnehmenden Seglern die SAP Sail InSight App bei einer Regatta zu verwenden. -sapSailingBuoyPingerReadMore=Learn More - -postRaceAnalytics=Analysen nach den Rennen -contentPostRaceAnalytics1=Daten von den Segelveranstaltungen bieten Seglern die Möglichkeit, ihre Leistungen zu analysieren und zu bewerten, um ihre Strategien zu verfeinern und letztendlich besser zu segeln. -contentPostRaceAnalytics2=Lösungen von SAP Business Analytics geben Seglern, Trainern, Fans und Medien die Mittel in die Hand, um historische Daten von vielen Regatten und Rennen abzurufen und zu analysieren. Mit SAP HANA sind Informationen über Leistungsmuster, Trends und Segler-Profile einfach, schnell und effizient abrufbar, so dass Segler ihre eigene Leistung optimieren und Erfolgsstrategien für zukünftige Regatten entwickeln können. - -i18nDeSolutionsTrainingHeadline=SAP Sail Better – STG Trainingstagebuch -i18nDeSolutionsTrainingText=Das STG Trainingstagebuch unterstützt die tägliche Dokumentation und Analyse der Kondition und Trainingsaktivitäten eines Sportlers, sowohl in Bereichen wie Training auf dem Wasser, Körpertraining, Arbeit auf dem Boot, Mentaltraining und Theorie als auch bei anderen Aktivitäten wie Weiterbildung oder Reisen. - -strategySimulator=Strategie-Simulator -contentStrategySimulator=Während eines Rennens hängt viel von der Wahl der richtigen Strategie ab. Der Strategie-Simulator vereinfacht die Ermittlung der besten Segelstrategie für diverse Wind- und Strömungsbedingungen. Da Wind und Strömung sofort in der Simulation geändert werden können, lässt sich die Robustheit einer Strategie selbst für unsichere Wetterbedingungen problemlos bewerten. - -strategySimulatorReadMore=Mehr erfahren -impressum=Impressum diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_ja.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_ja.properties deleted file mode 100644 index c8b3752106d..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_ja.properties +++ /dev/null @@ -1,235 +0,0 @@ -chartSelectionHint=ヒント: リーダーボード (リーダーボードタブ内) を使用して、チャートに表示する競技者を選択することもできます。 -chooseALanguage=言語を選択してください -events=イベント -home=ホーム -aboutUs=SAP について -contact=問い合わせ先 -sponsoring=スポンサー -solutions=ソリューション -blog=ブログ -german=ドイツ語 -english=英語 -fullEventSchedule=全イベントスケジュール -officalEventWebsite=公式イベント Web サイト -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=検索 -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=kt -defaultTitle=SAP Sailing Analytics -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=© 2011-2016 SAP Sailing Analytics -footerLanguage=SAP Sailing - -footerLegal=利用規約 -footerPrivacy=個人情報保護 -footerFeedback=フィードバック -headerEvents=イベント -headerHome=ホーム -headerLogo=Sailing Analytics -headerSearch=検索 -headerSearchPlaceholder=検索 -headerSolutions=ソリューション -headerSponsoring=スポンサー -latestRaceResultsHeadline=公式レース最新結果 -latestRaceResultsIsNew=新規 -latestRaceResultsIsUpdated=更新済 -latestRaceResultsRaceCountUnit=レース -latestRaceResultsRefresh=リフレッシュ -leaderboardQuickAccessLabel=リーダーボードクイックアクセス -mainEventShowAll=全イベント表示 -mainEventTitle=Sailing World からの最新イベント -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=約 2,450 の結果が ''Schnitzel'' に対して見つかりました -sharingEmail=電子メール送信 -sharingFacebook=Facebook でシェア -sharingTwitter=Twitter でツイート -socialFooterShare=これをシェアする場所: -socialFooterTitle=SAP Sailing Analytics を推奨 - -# SOLUTIONS - -solutionsSISHeadline=SAP in Sailing -solutionsSAPHeadline=SAP Sailing Analytics -solutionsRaceHeadline=SAP Sailing Race Manager -solutionsInSightHeadline=SAP Sail InSight -solutionsBuoyPingerHeadline=SAP Sailing Buoy Pinger -solutionsPostHeadline=レース後分析 -solutionsTrainingHeadline=トレーニング日記 -solutionsSimulatorHeadline=戦略シミュレータ - -sapInSailing=SAP in Sailing -contentSapInSailing1=セーリングは、SAP にとってソリューションを紹介するためのプラットフォームとしてうってつけのものであり、これまでになかったやり方でスポーツの運営を支援しています。SAP によるスポーツへの関与は、以下のことを行うツールを提供することによってセーリングから得られる体験を別次元のものに変えました。 -contentSapInSailing2=パフォーマンスの分析と戦略の最適化でセーラーを支援します -contentSapInSailing3=アクションをファンにとって身近なものにします -contentSapInSailing4=情報豊富なすばらしい解説を行うための情報とインサイトを報道関係者に提供します -contentSapInSailing5=SAP は、長年にわたりセーリングに関与しており、以下のようなチームおよびレガッタと関係を構築してきました。 -contentSapInSailing6=Travemünder Woche の公式テクノロジーパートナー -contentSapInSailing7=欧州セーリング連盟 (European Sailing Leagues) のテクノロジーパートナー -contentSapInSailing8=SAP Extreme Sailing Team のタイトルスポンサー -contentSapInSailing9=Extreme Sailing Series の公式テクニカルパートナー -contentSapInSailing10=ドイツ代表セーリングチームである Audi Sailing Team Germany のプレミアムパートナー -contentSapInSailing11=世界最大のレガッタである Kieler Woche (Kiel Week) のプレミアムパートナー -contentSapInSailing12=SAP 5O5 World Championships のタイトルスポンサー - -solutionsSAPText1=レースランキング、速力、操縦、ベアリングなどに関係するリアルタイム分析を提供することにより、SAP はセーリングという複雑なスポーツを簡略に分かりやすく説明することをお手伝いしています。 -solutionsSAPText2=SAP Sailing Analytics は、クラウドおよびインメモリ技術を活用し、リアルタイムで GPS および風計測データを処理し、どこからでもアクセスできるさまざまなフロントエンドでコンテンツを視覚化することによってセーリングの世界にインサイトと透明性を提供します。 -solutionsRaceText=SAP Race Committee アプリは、セーリングレガッタ運営中にレース組織者が手動で行う作業や連絡業務を自動化/簡略化することによって効率と統制を向上させます。Race Committee アプリは、レースイベントの運営/管理業務を簡略化するのに役立ち、レース委員会がより円滑に運営されるよう支援します。 -solutionsPostText=セーリングイベントで収集されたデータへのアクセスにより、戦略の策定や帆走の向上を支援するためにセーラーがそのパフォーマンスを評価および分析するための機会が提供されます。
SAP Business Analytics ソリューションは、多くのレガッタおよびレースを横断して履歴データを照会および分析するツールをセーラー、コーチ、ファン、そして報道関係者に提供します。SAP HANA は、こうした人たちが自身のパフォーマンスを最適化し、予定されているレガッタのために成功を収める戦略を策定するために簡単、迅速、かつ効率的な方法でパフォーマンスのパターン、傾向、およびセーラーのプロファイルを知ることを可能にします。 -solutionsTrainingText=STG Training Diary は、選手の体調、ならびに水上トレーニング、身体的トレーニング、操艇、メンタル、理論、さらに教育や移動などのその他の活動の領域におけるトレーニングへの取り組みの日々の記録および分析をサポートします。 -solutionsSimulatorText=適切な戦略を選択すれば、レース中に大きな競争上の優位性を得ることが可能です。Strategy Simulator により、さまざまな風況および水流に対して最良のセーリング戦略を決定することが容易になります。風と水流をシミュレーションで直ちに変更することができるため、不確かな気象条件に対しても戦略の確かさを簡単に評価することができます。 - -autoPlayerConfiguration=自動プレイヤー設定 - -sapSailingAnalytics=SAP Sailing Analytics -contentSapSailingAnalytics1=レースランキング、速力、操縦、ベアリングなどに関係するリアルタイム分析を提供することにより、SAP はセーリングという複雑なスポーツを簡略に分かりやすく説明することをお手伝いしています。 -contentSapSailingAnalytics2=SAP Sailing Analytics は、クラウドおよびインメモリ技術を活用し、リアルタイムで GPS および風計測データを処理し、どこからでもアクセスできる多様なフロントエンドでコンテンツを視覚化して、セーリングの世界に洞察力と透明性を提供します。 -sapSailingAnalyticsReadMore=続きを読む - -sapSailingRaceManager=SAP Sailing Race Manager -contentSapSailingRaceManager=SAP Sailing Race Manager は、セーリングレガッタ運営中にレース組織者が手動で行う作業や連絡業務を自動化/簡略化することによって効率と統制を向上させます。Race Committee アプリは、レースイベントの運営/管理業務を簡略化するのに役立ち、レース委員会がより円滑に運営されるよう支援します。 -sapSailingRaceManagerReadMore=詳細情報 - -sapSailInSight=SAP Sail InSight -contentSapSailInSight=With the SAP Sail InSight mobile app for iPhone, iPad and Android phones, sailboat racers can manage their regatta participation and performance anywhere and anytime. This app connects to the SAP Sailing Analytics solution and enables racers to sign in to an SAP Sail InSight-enabled regatta, track their location together with performance indicators like speed or distance sailed, and analyze their performance. -sapSailInSightReadMore=Learn More - -sapSailingBuoyPinger=SAP Sailing Buoy Pinger -contentSapSailingBuoyPinger=With the SAP Sailing Buoy Pinger mobile app for Android phones, sailboat race managers can simplify the positioning of race marks and communication with the mark layers anywhere and anytime. This app connects to the SAP Sailing Analytics solution and allows regatta managers to track the geographical position of their race marks, enabling the use of the SAP Sail InSight mobile app by sailors participating in the regatta. -sapSailingBuoyPingerReadMore=Learn More - -postRaceAnalytics=レース後分析 -contentPostRaceAnalytics1=セーリングイベントで収集されたデータへのアクセスにより、戦略の策定や帆走の向上に役立つ、セーラーがそのパフォーマンスを評価および分析する機会が提供されます。 -contentPostRaceAnalytics2=SAP Business Analytics ソリューションは、多くのレガッタおよびレースにわたって履歴データを照会および分析するツールをセーラー、コーチ、ファン、そして報道関係者に提供します。SAP HANA は、こうした人たちが自身のパフォーマンスを最適化し、予定されているレガッタで成功を収める戦略を策定するために簡単、迅速、かつ効率的な方法でパフォーマンスのパターン、傾向、およびセーラーのプロファイルを知ることを可能にします。 - -i18nDeSolutionsTrainingHeadline=SAP Sail Better – STG Training Diary -i18nDeSolutionsTrainingText=STG Training Diary は、選手の体調、ならびに水上トレーニング、身体的トレーニング、操艇、メンタル、理論、さらに教育や移動などのその他の活動の領域におけるトレーニングへの取り組みの日々の記録および分析をサポートします。 - -strategySimulator=戦略シミュレータ -contentStrategySimulator=適切な戦略を選択すれば、レース中に大きな競争上の優位性を得ることが可能です。Strategy Simulator により、さまざまな風況および水流に対して最良のセーリング戦略を決定することが容易になります。風と水流をシミュレーションで直ちに変更することができるため、不確かな気象条件に対しても戦略の確かさを簡単に評価することができます。 - -strategySimulatorReadMore=詳細情報 -impressum=刻印 - diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_ru.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_ru.properties deleted file mode 100644 index 7483f9bff3e..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_ru.properties +++ /dev/null @@ -1,235 +0,0 @@ -chartSelectionHint=Совет: таблицу лидеров (на вкладке ТАБЛИЦА ЛИДЕРОВ) также можно использовать для выбора участников, отображаемых в диаграмме. -chooseALanguage=Выбор языка -events=События -home=Главная -aboutUs=О нас -contact=Контакт -sponsoring=Финансовая поддержка -solutions=Решения -blog=Блог -german=Deutsch -english=English -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=Поиск -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=Мультимедиа -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=© SAP Sailing Analytics, 2011–2016. -footerLanguage=Язык SAP Sailing -footerLegal=Раскрытие юридической информации -footerPrivacy=Конфиденциальность -footerFeedback=Обратная связь -headerEvents=События -headerHome=Главная -headerLogo=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 Sailing Analytics -solutionsRaceHeadline=SAP Sailing Race Manager -solutionsInSightHeadline=SAP Sail InSight -solutionsBuoyPingerHeadline=SAP Sailing Buoy Pinger -solutionsPostHeadline=Аналитика после гонки -solutionsTrainingHeadline=Дневник тренировок -solutionsSimulatorHeadline=Симулятор стратегии - -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 Sailing Analytics делает мир парусного спорта понятным и прозрачным, используя облако и технологию In-Memory, обработку данных GPS и параметров ветра в реальном времени, а также визуализацию контекста в разных пользовательских интерфейсах, доступных где угодно. -solutionsRaceText=Приложение SAP Race Committee повышает уровень эффективности и контроля для организаторов гонки за счет автоматизации и упрощения выполняемых вручную задач и общения во время проведения парусных регат. Приложение Race Committee помогает упростить проведение событий и управление ими, освобождая для оргкомитета время на лучшую проработку деталей. -solutionsPostText=Доступ к данным, собранным на парусных событиях, дает мореходам возможность оценить и проанализировать свои показатели, помогая разрабатывать стратегии и повышать мастерство.
Решения SAP Business Analytics предоставляют мореходам, тренерам, болельщикам и СМИ инструменты для просмотра и анализа исторических данных по множеству регат и гонок. SAP HANA позволяет изучать эффективные приемы, тенденции и профили мореходов простым, быстрым и эффективным образом для оптимизации своих показателей и разработки успешных стратегий на будущие регаты. -solutionsTrainingText=Дневник тренировок STG поддерживает ежедневное документирования и анализ физического состояния атлета и его усилий в тренировках на воде, физической подготовке, работе с лодкой, моральной, теоретической подготовке, а также других видах деятельности, таких как образование и путешествия. -solutionsSimulatorText=Выбор правильной стратегии может обеспечить большое конкурентное преимущество во время гонки. Симулятор стратегии упрощает определение лучшей стратегии хождения под парусом для разных атмосферных условий и водных течений. Возможность мгновенного изменения ветра и течения в симуляции позволяет легко оценить надежность стратегии даже для неопределенных погодных условий. - -autoPlayerConfiguration=Конфигурация автовоспроизведения - -sapSailingAnalytics=SAP Sailing Analytics -contentSapSailingAnalytics1=Предоставляя аналитику по данным о рангах в гонке, скоростях, маневрах, ветрах и т. д. в режиме реального времени, SAP помогает упростить и демистифицировать сложный парусный спорт. -contentSapSailingAnalytics2=SAP Sailing Analytics делает мир парусного спорта понятным и прозрачным, используя облако и технологию In-Memory, обработку данных GPS и параметров ветра в реальном времени, а также визуализацию контекста в разных пользовательских интерфейсах, доступных где угодно. -sapSailingAnalyticsReadMore=См. также - -sapSailingRaceManager=SAP Sailing Race Manager -contentSapSailingRaceManager=Приложение SAP Sailing Race Manager повышает уровень эффективности и контроля для организаторов гонки за счет автоматизации и упрощения выполняемых вручную задач и общения во время проведения парусных регат. Приложение Race Committee помогает упростить проведение событий и управление ими, освобождая для оргкомитета время на лучшую проработку деталей. -sapSailingRaceManagerReadMore=Узнать больше - -sapSailInSight=SAP Sail InSight -contentSapSailInSight=With the SAP Sail InSight mobile app for iPhone, iPad and Android phones, sailboat racers can manage their regatta participation and performance anywhere and anytime. This app connects to the SAP Sailing Analytics solution and enables racers to sign in to an SAP Sail InSight-enabled regatta, track their location together with performance indicators like speed or distance sailed, and analyze their performance. -sapSailInSightReadMore=Learn More - -sapSailingBuoyPinger=SAP Sailing Buoy Pinger -contentSapSailingBuoyPinger=With the SAP Sailing Buoy Pinger mobile app for Android phones, sailboat race managers can simplify the positioning of race marks and communication with the mark layers anywhere and anytime. This app connects to the SAP Sailing Analytics solution and allows regatta managers to track the geographical position of their race marks, enabling the use of the SAP Sail InSight mobile app by sailors participating in the regatta. -sapSailingBuoyPingerReadMore=Learn More - -postRaceAnalytics=Аналитика после гонки -contentPostRaceAnalytics1=Доступ к данным, собранным на парусных событиях, дает мореходам возможность оценить и проанализировать свои показатели, помогая разрабатывать стратегии и повышать мастерство. -contentPostRaceAnalytics2=Решения SAP Business Analytics предоставляют мореходам, тренерам, болельщикам и СМИ инструменты для просмотра и анализа исторических данных по множеству регат и гонок. SAP HANA позволяет изучать паттерны эффективности, тенденции и профили мореходов простым, быстрым и эффективным образом для оптимизации своих показателей и разработки успешных стратегий на будущие регаты. - -i18nDeSolutionsTrainingHeadline=SAP Sail Better – Дневник тренировок STG -i18nDeSolutionsTrainingText=Дневник тренировок STG поддерживает ежедневное документирования и анализ физического состояния атлета и его усилий в тренировках на воде, физической подготовке, работе с лодкой, моральной, теоретической подготовке, а также других видах деятельности, таких как образование и путешествия. - -strategySimulator=Симулятор стратегии -contentStrategySimulator=Выбор правильной стратегии может обеспечить большое конкурентное преимущество во время гонки. Симулятор стратегии упрощает определение лучшей стратегии хождения под парусом для разных атмосферных условий и водных течений. Возможность мгновенного изменения ветра и течения в симуляции позволяет легко оценить надежность стратегии даже для неопределенных погодных условий. - -strategySimulatorReadMore=Узнать больше -impressum=Печать - diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_zh.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_zh.properties deleted file mode 100644 index dc52694efdb..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_zh.properties +++ /dev/null @@ -1,235 +0,0 @@ -chartSelectionHint=提示:您还可以使用积分榜(在 LEADERBOARD 选项卡中)选择在记录中显示的参赛队。 -chooseALanguage=选择一种语言 -events=活动 -home=主页 -aboutUs=关于我们 -contact=联系信息 -sponsoring=赞助 -solutions=解决方案 -blog=博客 -german=德语 -english=英语 -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=搜索 -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=KTS -defaultTitle=SAP Sailing Analytics -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=版权所有 © 2011-2016 SAP Sailing Analytics -footerLanguage=SAP Sailing 语言 -footerLegal=法律声明 -footerPrivacy=隐私 -footerFeedback=反馈 -headerEvents=活动 -headerHome=主页 -headerLogo=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=找到有关“炸肉排”的约 2,450 个结果 -sharingEmail=发送电子邮件 -sharingFacebook=在 Facebook 上分享 -sharingTwitter=为其发推文 -socialFooterShare=分享到 -socialFooterTitle=推荐 SAP Sailing Analytics - -# SOLUTIONS - -solutionsSISHeadline=SAP in Sailing -solutionsSAPHeadline=SAP Sailing Analytics -solutionsRaceHeadline=SAP Sailing Race Manager -solutionsInSightHeadline=SAP Sail InSight -solutionsBuoyPingerHeadline=SAP Sailing Buoy Pinger -solutionsPostHeadline=赛后分析 -solutionsTrainingHeadline=训练日记 -solutionsSimulatorHeadline=策略模拟器 - -sapInSailing=SAP in Sailing -contentSapInSailing1=SAP 凭借此航行应用提供完美的平台,向用户展示解决方案,并以前所未有的顺畅速度呈现体育赛事。 SAP 通过提供各种工具转换其在参与此项运动中获得的航行经验,这些工具: -contentSapInSailing2=帮助水手分析表现并优化策略 -contentSapInSailing3=让粉丝近距离直击运动 -contentSapInSailing4=为媒体提供信息和见解,从而提供深度评论 -contentSapInSailing5=SAP 长期参与航行运动,并成立了跨越团队和比赛的组合,包括: -contentSapInSailing6=特拉沃明德周的官方技术合作伙伴 -contentSapInSailing7=欧洲帆船联盟的技术合作伙伴 -contentSapInSailing8=SAP 极限帆船队的冠名赞助商 -contentSapInSailing9=极限帆船系列赛的官方技术合作伙伴 -contentSapInSailing10=德国国家帆船队 - 德国奥迪帆船队的优选合作伙伴 -contentSapInSailing11=世界上最大的帆船盛事“基尔周”的优选合作伙伴 -contentSapInSailing12=SAP 5O5 世界锦标赛的冠名赞助商 - -solutionsSAPText1=通过实时分析比赛轮次排名、速度、操作和航向角等,SAP 可简化此复杂的航行运动,使其浅显易懂。 -solutionsSAPText2=SAP Sailing Analytics 利用云和内存技术实时处理 GPS 和风力测量数据,并在可从任何地方访问的前端显示,让用户全面、透彻地了解航行运动。 -solutionsRaceText=SAP Race Committee 应用通过自动化及简化赛事主办机构在航行比赛期间的人工作业和沟通,实现更高的效率和控制能力。 Race Committee 应用简化举办和管理比赛活动的操作,使竞赛委员会的操作更加智能。 -solutionsPostText=水手通过访问航行活动期间收集的数据评估和分析其表现,帮助他们制定策略和优化航行方案。
SAP Business Analytics 解决方案为水手、教练、粉丝和媒体提供跨比赛和轮次浏览和分析历史数据的工具。 SAP HANA 通过简单、快速和高效的方式使其了解表现模式、趋势和水手资料,从而提高自己的表现并为今后的比赛制定成功的策略。 -solutionsTrainingText=STG Training Diary 可每天记录和分析运动员的身体状况,在水上训练、体能训练、船艇工作、心理、理论以及教育或旅行等其他活动领域的训练力度。 -solutionsSimulatorText=选择正确的策略可在比赛期间极大地提高竞争优势。 策略模拟器为不同的风力条件和水流简化确定最佳的航行策略。 由于可以在模拟中即时更改风和水流,即便在不确定的天气条件下,也可以轻松地评估策略的稳健性。 - -autoPlayerConfiguration=自动播放器配置 - -sapSailingAnalytics=SAP Sailing Analytics -contentSapSailingAnalytics1=通过实时分析比赛轮次排名、速度、操作和航向角等,SAP 可简化此复杂的航行运动,使其浅显易懂。 -contentSapSailingAnalytics2=SAP Sailing Analytics 利用云和内存技术实时处理 GPS 和风力测量数据,并在可从任何地方访问的前端显示,让用户全面、透彻地了解航行运动。 -sapSailingAnalyticsReadMore=更多信息 - -sapSailingRaceManager=SAP Sailing Race Manager -contentSapSailingRaceManager=SAP Sailing Race Manager 通过自动化及简化赛事主办机构在航行比赛期间的人工作业和沟通,实现更高的效率和控制能力。 Race Committee 应用简化举办和管理比赛活动的操作,使竞赛委员会的操作更加智能。 -sapSailingRaceManagerReadMore=了解更多 - -sapSailInSight=SAP Sail InSight -contentSapSailInSight=With the SAP Sail InSight mobile app for iPhone, iPad and Android phones, sailboat racers can manage their regatta participation and performance anywhere and anytime. This app connects to the SAP Sailing Analytics solution and enables racers to sign in to an SAP Sail InSight-enabled regatta, track their location together with performance indicators like speed or distance sailed, and analyze their performance. -sapSailInSightReadMore=Learn More - -sapSailingBuoyPinger=SAP Sailing Buoy Pinger -contentSapSailingBuoyPinger=With the SAP Sailing Buoy Pinger mobile app for Android phones, sailboat race managers can simplify the positioning of race marks and communication with the mark layers anywhere and anytime. This app connects to the SAP Sailing Analytics solution and allows regatta managers to track the geographical position of their race marks, enabling the use of the SAP Sail InSight mobile app by sailors participating in the regatta. -sapSailingBuoyPingerReadMore=Learn More - -postRaceAnalytics=赛后分析 -contentPostRaceAnalytics1=水手通过访问航行活动期间收集的数据评估和分析其表现,帮助他们制定策略和优化航行方案。 -contentPostRaceAnalytics2=SAP Business Analytics 解决方案为水手、教练、粉丝和媒体提供跨比赛和轮次浏览和分析历史数据的工具。 SAP HANA 通过简单、快速和高效的方式使其了解表现模式、趋势和水手资料,从而提高自己的表现并为今后的比赛制定成功的策略。 - -i18nDeSolutionsTrainingHeadline=SAP Sail Better – STG Training Diary -i18nDeSolutionsTrainingText=STG Training Diary 可每天记录和分析运动员的身体状况,在水上训练、体能训练、船艇工作、心理、理论以及教育或旅行等其他活动领域的训练力度。 - -strategySimulator=策略模拟器 -contentStrategySimulator=选择正确的策略可在比赛期间极大地提高竞争优势。 策略模拟器为不同的风力条件和水流简化确定最佳的航行策略。 由于可以在模拟中即时更改风和水流,即便在不确定的天气条件下,也可以轻松地评估策略的稳健性。 - -strategySimulatorReadMore=了解更多 -impressum=版本说明 - diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_zh_CN.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_zh_CN.properties deleted file mode 100644 index 45e2985fc9a..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/TextMessages_zh_CN.properties +++ /dev/null @@ -1,235 +0,0 @@ -chartSelectionHint=提示:您还可以使用积分榜(在 LEADERBOARD 选项卡中)选择在记录中显示的参赛队。 -chooseALanguage=选择一种语言 -events=活动 -home=主页 -aboutUs=关于我们 -contact=联系信息 -sponsoring=赞助 -solutions=解决方案 -blog=博客 -german=德语 -english=英语 -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=搜索 -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=KTS -defaultTitle=SAP Sailing Analytics -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=版权所有 © 2011-2016 SAP Sailing Analytics -footerLanguage=SAP Sailing 语言 -footerLegal=法律声明 -footerPrivacy=隐私 -footerFeedback=反馈 -headerEvents=活动 -headerHome=主页 -headerLogo=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=找到有关“炸肉排”的约 2,450 个结果 -sharingEmail=发送电子邮件 -sharingFacebook=在 Facebook 上分享 -sharingTwitter=为其发推文 -socialFooterShare=分享到 -socialFooterTitle=推荐 SAP Sailing Analytics - -# SOLUTIONS - -solutionsSISHeadline=SAP in Sailing -solutionsSAPHeadline=SAP Sailing Analytics -solutionsRaceHeadline=SAP Sailing Race Manager -solutionsInSightHeadline=SAP Sail InSight -solutionsBuoyPingerHeadline=SAP Sailing Buoy Pinger -solutionsPostHeadline=赛后分析 -solutionsTrainingHeadline=训练日记 -solutionsSimulatorHeadline=策略模拟器 - -sapInSailing=SAP in Sailing -contentSapInSailing1=SAP 凭借此航行应用提供完美的平台,向用户展示解决方案,并以前所未有的顺畅速度呈现体育赛事。 SAP 通过提供各种工具转换其在参与此项运动中获得的航行经验,这些工具: -contentSapInSailing2=帮助水手分析表现并优化策略 -contentSapInSailing3=让粉丝近距离直击运动 -contentSapInSailing4=为媒体提供信息和见解,从而提供深度评论 -contentSapInSailing5=SAP 长期参与航行运动,并成立了跨越团队和比赛的组合,包括: -contentSapInSailing6=特拉沃明德周的官方技术合作伙伴 -contentSapInSailing7=欧洲帆船联盟的技术合作伙伴 -contentSapInSailing8=SAP 极限帆船队的冠名赞助商 -contentSapInSailing9=极限帆船系列赛的官方技术合作伙伴 -contentSapInSailing10=德国国家帆船队 - 德国奥迪帆船队的优选合作伙伴 -contentSapInSailing11=世界上最大的帆船盛事“基尔周”的优选合作伙伴 -contentSapInSailing12=SAP 5O5 世界锦标赛的冠名赞助商 - -solutionsSAPText1=通过实时分析比赛轮次排名、速度、操作和航向角等,SAP 可简化此复杂的航行运动,使其浅显易懂。 -solutionsSAPText2=SAP Sailing Analytics 利用云和内存技术实时处理 GPS 和风力测量数据,并在可从任何地方访问的前端显示,让用户全面、透彻地了解航行运动。 -solutionsRaceText=SAP Race Committee 应用通过自动化及简化赛事主办机构在航行比赛期间的人工作业和沟通,实现更高的效率和控制能力。 Race Committee 应用简化举办和管理比赛活动的操作,使竞赛委员会的操作更加智能。 -solutionsPostText=水手通过访问航行活动期间收集的数据评估和分析其表现,帮助他们制定策略和优化航行方案。
SAP Business Analytics 解决方案为水手、教练、粉丝和媒体提供跨比赛和轮次浏览和分析历史数据的工具。 SAP HANA 通过简单、快速和高效的方式使其了解表现模式、趋势和水手资料,从而提高自己的表现并为今后的比赛制定成功的策略。 -solutionsTrainingText=STG Training Diary 可每天记录和分析运动员的身体状况,在水上训练、体能训练、船艇工作、心理、理论以及教育或旅行等其他活动领域的训练力度。 -solutionsSimulatorText=选择正确的策略可在比赛期间极大地提高竞争优势。 策略模拟器为不同的风力条件和水流简化确定最佳的航行策略。 由于可以在模拟中即时更改风和水流,即便在不确定的天气条件下,也可以轻松地评估策略的稳健性。 - -autoPlayerConfiguration=自动播放器配置 - -sapSailingAnalytics=SAP Sailing Analytics -contentSapSailingAnalytics1=通过实时分析比赛轮次排名、速度、操作和航向角等,SAP 可简化此复杂的航行运动,使其浅显易懂。 -contentSapSailingAnalytics2=SAP Sailing Analytics 利用云和内存技术实时处理 GPS 和风力测量数据,并在可从任何地方访问的前端显示,让用户全面、透彻地了解航行运动。 -sapSailingAnalyticsReadMore=更多信息 - -sapSailingRaceManager=SAP Sailing Race Manager -contentSapSailingRaceManager=SAP Sailing Race Manager 通过自动化及简化赛事主办机构在航行比赛期间的人工作业和沟通,实现更高的效率和控制能力。 Race Committee 应用简化举办和管理比赛活动的操作,使竞赛委员会的操作更加智能。 -sapSailingRaceManagerReadMore=了解更多 - -sapSailInSight=SAP Sail InSight -contentSapSailInSight=With the SAP Sail InSight mobile app for iPhone, iPad and Android phones, sailboat racers can manage their regatta participation and performance anywhere and anytime. This app connects to the SAP Sailing Analytics solution and enables racers to sign in to an SAP Sail InSight-enabled regatta, track their location together with performance indicators like speed or distance sailed, and analyze their performance. -sapSailInSightReadMore=Learn More - -sapSailingBuoyPinger=SAP Sailing Buoy Pinger -contentSapSailingBuoyPinger=With the SAP Sailing Buoy Pinger mobile app for Android phones, sailboat race managers can simplify the positioning of race marks and communication with the mark layers anywhere and anytime. This app connects to the SAP Sailing Analytics solution and allows regatta managers to track the geographical position of their race marks, enabling the use of the SAP Sail InSight mobile app by sailors participating in the regatta. -sapSailingBuoyPingerReadMore=Learn More - -postRaceAnalytics=赛后分析 -contentPostRaceAnalytics1=水手通过访问航行活动期间收集的数据评估和分析其表现,帮助他们制定策略和优化航行方案。 -contentPostRaceAnalytics2=SAP Business Analytics 解决方案为水手、教练、粉丝和媒体提供跨比赛和轮次浏览和分析历史数据的工具。 SAP HANA 通过简单、快速和高效的方式使其了解表现模式、趋势和水手资料,从而提高自己的表现并为今后的比赛制定成功的策略。 - -i18nDeSolutionsTrainingHeadline=SAP Sail Better – STG Training Diary -i18nDeSolutionsTrainingText=STG Training Diary 可每天记录和分析运动员的身体状况,在水上训练、体能训练、船艇工作、心理、理论以及教育或旅行等其他活动领域的训练力度。 - -strategySimulator=策略模拟器 -contentStrategySimulator=选择正确的策略可在比赛期间极大地提高竞争优势。 策略模拟器为不同的风力条件和水流简化确定最佳的航行策略。 由于可以在模拟中即时更改风和水流,即便在不确定的天气条件下,也可以轻松地评估策略的稳健性。 - -strategySimulatorReadMore=了解更多 -impressum=版本说明 - diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages.properties.xlf b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages.properties.xlf deleted file mode 100644 index 7bfe01a0bbe..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages.properties.xlf +++ /dev/null @@ -1,653 +0,0 @@ - - - -
- - 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 - - - - - -
- - - Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart. - - - Choose a language - - - Events - - - Home - - - About us - - - Contact - - - Sponsoring - - - Solutions - - - Blog - - - Deutsch - - - English - - - Full event schedule - - - Official event website - - - Leg - - - Races - - - More info - - - View analysis - - - Overall leaderboard - - - Please enter a search term. - - - Please try again... - - - Reload page - - - An error occured while loading the data for this page. - - - Could not find a leaderboard with this name. - - - Not scheduled. - - - Regatta details - - - Regatta - - - Competitors Analytics - - - Choose chart type - - - Series - - - Regatta leaderboards - - - Features - - - Release notes - - - What''s new - - - Overview - - - SAP Sailing - - - Search - - - Start Simulator - - - Days - - - Days - - - Hrs - - - Min - - - Sec - - - Day - - - Hour - - - Min - - - Sec - - - Live - - - Finished - - - Watch now - - - Last Update - - - Leaderboard - - - Report news - - - News Update - - - Started - - - hrs and - - - minutes ago - - - Starting in - - - hrs and - - - minutes - - - Event Schedule - - - Upcoming Races Today - - - Weather - - - KTS - - - SAP Sailing Analytics - - - Media - - - Overview - - - Schedule - - - Regattas - - - About the Series - - - Upcoming - - - Recent Events - - - Leaderboard - - - Latest Series Events - - - More - - - Events - - - Countries - - - Sailors - - - Tracked Races - - - Winners and Results - - - All Boat Classes - - - More Events - - - Recent Events - - - Date - - - Event - - - Location - - - Upcoming Schedule - - - Series - - - More Events To Be Announced Soon! - - - Event Quick-Finder - - - Leaderboard - - - Races - - - All boat classes - - - Competitor - - - Extend Leaderboard - - - No more races - - - Last Score Update - - - Name - - - Regatta Rank - - - Total Points - - - Watch live - - - Analyze Race - - - Not Tracked - - - Finished at: - - - Started at: - - - Scheduled for: - - - Race - - - Wind Strength: - - - Winner - - - Leader - - - Tracking - - - Wind Data - - - Video - - - Audio - - - Event Sponsorships - - - Jobs - - - © 2011-2016 SAP Sailing Analytics - - - SAP Sailing in - - - Legal Disclosure - - - Privacy - - - Feedback - - - Events - - - Home - - - - Search - - - Search - - - Solutions - - - Sponsoring - - - Latest Official Race Results - - - New - - - Updated - - - races - - - refresh - - - Leaderboard Quick Access - - - Show All Events - - - Latest Events from the Sailing World - - - Get lost in the latest and most beautiful impressions from your favorite sailing event. - - - Photographers love Sailing - - - Immerse yourself in the world of sailing and check out our latest events for more videos. - - - Recent Video Entries - - - Read More - - - Photos - - - Videos - - - Competitors - - - Races - - - Tracked - - - Regatta will start - - - Pts. - - - Course - - - Area - - - Finished at - - - Scheduled at - - - Started at - - - Winner and Results - - - Search - - - Your Search - - - result(s) found for - - - Type in your searchkey - - - More - - - Search - - - Search again - - - Sort by - - - Recent - - - Oldest - - - Relevance - - - About 2,450 results where found for ''Schnitzel'' - - - Send an email - - - Share on Facebook - - - Tweet about it - - - Share this on - - - Recommend SAP Sailing Analytics - - - SAP in Sailing - SOLUTIONS - - - SAP Sailing Analytics - - - SAP Sailing Race Manager - - - Post-Race Analytics - - - Training Diary - - - Strategy Simulator - - - SAP in Sailing - - - 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: - - - Help sailors analyze performance and optimize strategy - - - Bring fans closer to the action - - - Provide the media with information and insights to deliver a greater informed commentary - - - SAP has a longstanding involvement with sailing and has established a portfolio spanning across teams and regattas, including: - - - Official Technology Partner of Travemünder Woche - - - Technical Partner of the European Sailing Leagues - - - Title sponsor of the SAP Extreme Sailing Team - - - Official Technical Partner of the Extreme Sailing Series - - - Premium Partner of Germany’s national sailing team, Audi Sailing Team Germany - - - Premium Partner of the world’s largest regatta, Kieler Woche (Kiel Week) - - - Title sponsor of the SAP 5O5 World Championships - - - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - - - 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. - - - 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. - - - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.<br> 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. - - - 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. - - - 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. - - - Auto Player Configuration - - - SAP Sailing Analytics - - - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - - - 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. - - - Read More - - - SAP Sailing Race Manager - - - 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. - - - Learn More - - - Post-Race Analytics - - - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better. - - - 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. - - - SAP Sail Better – STG Training Diary - - - 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. - - - Strategy Simulator - - - 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. - - - Learn More - - - Imprint - - -
-
\ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_en.properties.xlf b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_en.properties.xlf deleted file mode 100644 index bf266fb0476..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_en.properties.xlf +++ /dev/null @@ -1,865 +0,0 @@ - - - -
- - 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 - - - - - -
- - - Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart. - Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart. - - - Choose a language - Choose a language - - - Events - Events - - - Home - Home - - - About us - About us - - - Contact - Contact - - - Sponsoring - Sponsoring - - - Solutions - Solutions - - - Blog - Blog - - - Deutsch - Deutsch - - - English - English - - - Full event schedule - Full event schedule - - - Official event website - Official event website - - - Leg - Leg - - - Races - Races - - - More info - More info - - - View analysis - View analysis - - - Overall leaderboard - Overall leaderboard - - - Please enter a search term. - Please enter a search term. - - - Please try again... - Please try again... - - - Reload page - Reload page - - - An error occured while loading the data for this page. - An error occured while loading the data for this page. - - - Could not find a leaderboard with this name. - Could not find a leaderboard with this name. - - - Not scheduled. - Not scheduled. - - - Regatta details - Regatta details - - - Regatta - Regatta - - - Competitors Analytics - Competitors Analytics - - - Choose chart type - Choose chart type - - - Series - Series - - - Regatta leaderboards - Regatta leaderboards - - - Features - Features - - - Release notes - Release notes - - - What''s new - What''s new - - - Overview - Overview - - - SAP Sailing - SAP Sailing - - - Search - Search - - - Start Simulator - Start Simulator - - - Days - Days - - - Days - Days - - - Hrs - Hrs - - - Min - Min - - - Sec - Sec - - - Day - Day - - - Hour - Hour - - - Min - Min - - - Sec - Sec - - - Live - Live - - - Finished - Finished - - - Watch now - Watch now - - - Last Update - Last Update - - - Leaderboard - Leaderboard - - - Report news - Report news - - - News Update - News Update - - - Started - Started - - - hrs and - hrs and - - - minutes ago - minutes ago - - - Starting in - Starting in - - - hrs and - hrs and - - - minutes - minutes - - - Event Schedule - Event Schedule - - - Upcoming Races Today - Upcoming Races Today - - - Weather - Weather - - - KTS - KTS - - - SAP Sailing Analytics - SAP Sailing Analytics - - - Media - Media - - - Overview - Overview - - - Schedule - Schedule - - - Regattas - Regattas - - - About the Series - About the Series - - - Upcoming - Upcoming - - - Recent Events - Recent Events - - - Leaderboard - Leaderboard - - - Latest Series Events - Latest Series Events - - - More - More - - - Events - Events - - - Countries - Countries - - - Sailors - Sailors - - - Tracked Races - Tracked Races - - - Winners and Results - Winners and Results - - - All Boat Classes - All Boat Classes - - - More Events - More Events - - - Recent Events - Recent Events - - - Date - Date - - - Event - Event - - - Location - Location - - - Upcoming Schedule - Upcoming Schedule - - - Series - Series - - - More Events To Be Announced Soon! - More Events To Be Announced Soon! - - - Event Quick-Finder - Event Quick-Finder - - - Leaderboard - Leaderboard - - - Races - Races - - - All boat classes - All boat classes - - - Competitor - Competitor - - - Extend Leaderboard - Extend Leaderboard - - - No more races - No more races - - - Last Score Update - Last Score Update - - - Name - Name - - - Regatta Rank - Regatta Rank - - - Total Points - Total Points - - - Watch live - Watch live - - - Analyze Race - Analyze Race - - - Not Tracked - Not Tracked - - - Finished at: - Finished at: - - - Started at: - Started at: - - - Scheduled for: - Scheduled for: - - - Race - Race - - - Wind Strength: - Wind Strength: - - - Winner - Winner - - - Leader - Leader - - - Tracking - Tracking - - - Wind Data - Wind Data - - - Video - Video - - - Audio - Audio - - - Event Sponsorships - Event Sponsorships - - - Jobs - Jobs - - - © 2011-2016 SAP Sailing Analytics - © 2011-2016 SAP Sailing Analytics - - - SAP Sailing in - SAP Sailing in - - - Legal Disclosure - Legal Disclosure - - - Privacy - Privacy - - - Feedback - Feedback - - - Events - Events - - - Home - Home - - - - Search - Search - - - Search - Search - - - Solutions - Solutions - - - Sponsoring - Sponsoring - - - Latest Official Race Results - Latest Official Race Results - - - New - New - - - Updated - Updated - - - races - races - - - refresh - refresh - - - Leaderboard Quick Access - Leaderboard Quick Access - - - Show All Events - Show All Events - - - Latest Events from the Sailing World - Latest Events from the Sailing World - - - Get lost in the latest and most beautiful impressions from your favorite sailing event. - Get lost in the latest and most beautiful impressions from your favorite sailing event. - - - Photographers love Sailing - Photographers love Sailing - - - Immerse yourself in the world of sailing and check out our latest events for more videos. - Immerse yourself in the world of sailing and check out our latest events for more videos. - - - Recent Video Entries - Recent Video Entries - - - Read More - Read More - - - Photos - Photos - - - Videos - Videos - - - Competitors - Competitors - - - Races - Races - - - Tracked - Tracked - - - Regatta will start - Regatta will start - - - Pts. - Pts. - - - Course - Course - - - Area - Area - - - Finished at - Finished at - - - Scheduled at - Scheduled at - - - Started at - Started at - - - Winner and Results - Winner and Results - - - Search - Search - - - Your Search - Your Search - - - result(s) found for - result(s) found for - - - Type in your searchkey - Type in your searchkey - - - More - More - - - Search - Search - - - Search again - Search again - - - Sort by - Sort by - - - Recent - Recent - - - Oldest - Oldest - - - Relevance - Relevance - - - About 2,450 results where found for ''Schnitzel'' - About 2,450 results where found for ''Schnitzel'' - - - Send an email - Send an email - - - Share on Facebook - Share on Facebook - - - Tweet about it - Tweet about it - - - Share this on - Share this on - - - Recommend SAP Sailing Analytics - Recommend SAP Sailing Analytics - - - SAP in Sailing - SAP in Sailing - SOLUTIONS - - - SAP Sailing Analytics - SAP Sailing Analytics - - - SAP Sailing Race Manager - SAP Sailing Race Manager - - - Post-Race Analytics - Post-Race Analytics - - - Training Diary - Training Diary - - - Strategy Simulator - Strategy Simulator - - - SAP in Sailing - SAP in Sailing - - - 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: - 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: - - - Help sailors analyze performance and optimize strategy - Help sailors analyze performance and optimize strategy - - - Bring fans closer to the action - Bring fans closer to the action - - - Provide the media with information and insights to deliver a greater informed commentary - Provide the media with information and insights to deliver a greater informed commentary - - - SAP has a longstanding involvement with sailing and has established a portfolio spanning across teams and regattas, including: - SAP has a longstanding involvement with sailing and has established a portfolio spanning across teams and regattas, including: - - - Official Technology Partner of Travemünder Woche - Official Technology Partner of Travemünder Woche - - - Technical Partner of the European Sailing Leagues - Technical Partner of the European Sailing Leagues - - - Title sponsor of the SAP Extreme Sailing Team - Title sponsor of the SAP Extreme Sailing Team - - - Official Technical Partner of the Extreme Sailing Series - Official Technical Partner of the Extreme Sailing Series - - - Premium Partner of Germany’s national sailing team, Audi Sailing Team Germany - Premium Partner of Germany’s national sailing team, Audi Sailing Team Germany - - - Premium Partner of the world’s largest regatta, Kieler Woche (Kiel Week) - Premium Partner of the world’s largest regatta, Kieler Woche (Kiel Week) - - - Title sponsor of the SAP 5O5 World Championships - Title sponsor of the SAP 5O5 World Championships - - - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - - - 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. - 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. - - - 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. - 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. - - - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.<br> 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. - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.<br> 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. - - - 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. - 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. - - - 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. - 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. - - - Auto Player Configuration - Auto Player Configuration - - - SAP Sailing Analytics - SAP Sailing Analytics - - - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - - - 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. - 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. - - - Read More - Read More - - - SAP Sailing Race Manager - SAP Sailing Race Manager - - - 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. - 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. - - - Learn More - Learn More - - - Post-Race Analytics - Post-Race Analytics - - - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better. - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better. - - - 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. - 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. - - - SAP Sail Better – STG Training Diary - SAP Sail Better – STG Training Diary - - - 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. - 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. - - - Strategy Simulator - Strategy Simulator - - - 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. - 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. - - - Learn More - Learn More - - - Imprint - Imprint - - -
-
\ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_ja.properties.xlf b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_ja.properties.xlf deleted file mode 100644 index e9c84a7e9b7..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_ja.properties.xlf +++ /dev/null @@ -1,865 +0,0 @@ - - - -
- - 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 - - - - - -
- - - Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart. - ヒント: リーダーボード (リーダーボードタブ内) を使用して、チャートに表示する競技者を選択することもできます。 - - - Choose a language - 言語を選択してください - - - Events - イベント - - - Home - ホーム - - - About us - SAP について - - - Contact - 問い合わせ先 - - - Sponsoring - スポンサー - - - Solutions - ソリューション - - - Blog - ブログ - - - Deutsch - ドイツ語 - - - English - 英語 - - - Full event schedule - 全イベントスケジュール - - - Official event website - 公式イベント Web サイト - - - Leg - レグ - - - Races - レース - - - More info - 追加情報 - - - View analysis - 分析の表示 - - - Overall leaderboard - 全体リーダーボード - - - Please enter a search term. - 検索語句を入力してください。 - - - Please try again... - 再試行してください... - - - Reload page - ページのリロード - - - An error occured while loading the data for this page. - このページのデータのロードでエラーが発生しました。 - - - Could not find a leaderboard with this name. - この名称のリーダーボードを見つけることができませんでした。 - - - Not scheduled. - スケジュールされていません。 - - - Regatta details - レガッタ詳細 - - - Regatta - レガッタ - - - Competitors Analytics - 競技者分析 - - - Choose chart type - チャートタイプ選択 - - - Series - シリーズ - - - Regatta leaderboards - レガッタリーダーボード - - - Features - 機能 - - - Release notes - リリースノート - - - What''s new - 最新情報 - - - Overview - 概要 - - - SAP Sailing - SAP Sailing - - - Search - 検索 - - - Start Simulator - シミュレータ開始 - - - Days - 日 - - - Days - 日 - - - Hrs - 時間 - - - Min - 分 - - - Sec - 秒 - - - Day - 曜日 - - - Hour - 時 - - - Min - 分 - - - Sec - 秒 - - - Live - ライブ - - - Finished - 終了 - - - Watch now - 現在視聴可能 - - - Last Update - 最終更新 - - - Leaderboard - リーダーボード - - - Report news - レポートニュース - - - News Update - 最新ニュース - - - Started - スタート - - - hrs and - 時間と - - - minutes ago - 分前 - - - Starting in - スタートまでの時間 - - - hrs and - 時間と - - - minutes - 分 - - - Event Schedule - イベントスケジュール - - - Upcoming Races Today - 本日予定のレース - - - Weather - 天候 - - - KTS - kt - - - SAP Sailing Analytics - SAP Sailing Analytics - - - Media - メディア - - - Overview - 概要 - - - Schedule - スケジュール - - - Regattas - レガッタ - - - About the Series - シリーズについて - - - Upcoming - 予定 - - - Recent Events - 最新イベント - - - Leaderboard - リーダーボード - - - Latest Series Events - 最新シリーズイベント - - - More - その他 - - - Events - イベント - - - Countries - 国 - - - Sailors - セーラー - - - Tracked Races - 追跡レース - - - Winners and Results - 勝者と結果 - - - All Boat Classes - すべての艇クラス - - - More Events - その他イベント - - - Recent Events - 最新イベント - - - Date - 日付 - - - Event - イベント - - - Location - 場所 - - - Upcoming Schedule - 予定スケジュール - - - Series - シリーズ - - - More Events To Be Announced Soon! - その他イベントが近日公表されます - - - Event Quick-Finder - イベントクイックファインダ - - - Leaderboard - リーダーボード - - - Races - レース - - - All boat classes - すべての艇クラス - - - Competitor - 競技者 - - - Extend Leaderboard - リーダーボード拡張 - - - No more races - レースはすべて終了 - - - Last Score Update - 前回スコア更新 - - - Name - 名称 - - - Regatta Rank - レガッタランク - - - Total Points - 総得点 - - - Watch live - ライブ視聴 - - - Analyze Race - レース分析 - - - Not Tracked - 未追跡 - - - Finished at: - フィニッシュ時刻: - - - Started at: - スタート時刻: - - - Scheduled for: - スケジュール対象: - - - Race - レース - - - Wind Strength: - 風力: - - - Winner - 勝者 - - - Leader - 首位艇 - - - Tracking - 追跡 - - - Wind Data - 風データ - - - Video - ビデオ - - - Audio - 音声 - - - Event Sponsorships - イベントスポンサーシップ - - - Jobs - 採用 - - - © 2011-2016 SAP Sailing Analytics - © 2011-2016 SAP Sailing Analytics - - - SAP Sailing in - SAP Sailing - - - - Legal Disclosure - 利用規約 - - - Privacy - 個人情報保護 - - - Feedback - フィードバック - - - Events - イベント - - - Home - ホーム - - - - Search - 検索 - - - Search - 検索 - - - Solutions - ソリューション - - - Sponsoring - スポンサー - - - Latest Official Race Results - 公式レース最新結果 - - - New - 新規 - - - Updated - 更新済 - - - races - レース - - - refresh - リフレッシュ - - - Leaderboard Quick Access - リーダーボードクイックアクセス - - - Show All Events - 全イベント表示 - - - Latest Events from the Sailing World - Sailing World からの最新イベント - - - Get lost in the latest and most beautiful impressions from your favorite sailing event. - お気に入りのセーリングイベントのすてきな最新画像を楽しんでください。 - - - Photographers love Sailing - 最新のセーリング画像 - - - Immerse yourself in the world of sailing and check out our latest events for more videos. - 最新イベントの動画にアクセスしてセーリングの世界に浸ってください。 - - - Recent Video Entries - 最新のセーリング動画 - - - Read More - 続きを読む - - - Photos - 写真 - - - Videos - ビデオ - - - Competitors - 競技者 - - - Races - レース - - - Tracked - 追跡済 - - - Regatta will start - レガッタ開始予定 - - - Pts. - ポイント - - - Course - コース - - - Area - 領域 - - - Finished at - フィニッシュ時刻 - - - Scheduled at - スケジュール時刻 - - - Started at - スタート時刻 - - - Winner and Results - 勝者および結果 - - - Search - 検索 - - - Your Search - 検索対象 - - - result(s) found for - 結果が見つかりました: - - - Type in your searchkey - 検索キーを入力 - - - More - 詳細 - - - Search - 検索 - - - Search again - 再検索 - - - Sort by - ソートキー - - - Recent - 最新 - - - Oldest - 初期 - - - Relevance - 関連性 - - - About 2,450 results where found for ''Schnitzel'' - 約 2,450 の結果が ''Schnitzel'' に対して見つかりました - - - Send an email - 電子メール送信 - - - Share on Facebook - Facebook でシェア - - - Tweet about it - Twitter でツイート - - - Share this on - これをシェアする場所: - - - Recommend SAP Sailing Analytics - SAP Sailing Analytics を推奨 - - - SAP in Sailing - SAP in Sailing - SOLUTIONS - - - SAP Sailing Analytics - SAP Sailing Analytics - - - SAP Sailing Race Manager - SAP Sailing Race Manager - - - Post-Race Analytics - レース後分析 - - - Training Diary - トレーニング日記 - - - Strategy Simulator - 戦略シミュレータ - - - SAP in Sailing - SAP in Sailing - - - 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: - セーリングは、SAP にとってソリューションを紹介するためのプラットフォームとしてうってつけのものであり、これまでになかったやり方でスポーツの運営を支援しています。SAP によるスポーツへの関与は、以下のことを行うツールを提供することによってセーリングから得られる体験を別次元のものに変えました。 - - - Help sailors analyze performance and optimize strategy - パフォーマンスの分析と戦略の最適化でセーラーを支援します - - - Bring fans closer to the action - アクションをファンにとって身近なものにします - - - Provide the media with information and insights to deliver a greater informed commentary - 情報豊富なすばらしい解説を行うための情報とインサイトを報道関係者に提供します - - - SAP has a longstanding involvement with sailing and has established a portfolio spanning across teams and regattas, including: - SAP は、長年にわたりセーリングに関与しており、以下のようなチームおよびレガッタと関係を構築してきました。 - - - Official Technology Partner of Travemünder Woche - Travemünder Woche の公式テクノロジーパートナー - - - Technical Partner of the European Sailing Leagues - 欧州セーリング連盟 (European Sailing Leagues) のテクノロジーパートナー - - - Title sponsor of the SAP Extreme Sailing Team - SAP Extreme Sailing Team のタイトルスポンサー - - - Official Technical Partner of the Extreme Sailing Series - Extreme Sailing Series の公式テクニカルパートナー - - - Premium Partner of Germany’s national sailing team, Audi Sailing Team Germany - ドイツ代表セーリングチームである Audi Sailing Team Germany のプレミアムパートナー - - - Premium Partner of the world’s largest regatta, Kieler Woche (Kiel Week) - 世界最大のレガッタである Kieler Woche (Kiel Week) のプレミアムパートナー - - - Title sponsor of the SAP 5O5 World Championships - SAP 5O5 World Championships のタイトルスポンサー - - - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - レースランキング、速力、操縦、ベアリングなどに関係するリアルタイム分析を提供することにより、SAP はセーリングという複雑なスポーツを簡略に分かりやすく説明することをお手伝いしています。 - - - 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. - SAP Sailing Analytics は、クラウドおよびインメモリ技術を活用し、リアルタイムで GPS および風計測データを処理し、どこからでもアクセスできるさまざまなフロントエンドでコンテンツを視覚化することによってセーリングの世界にインサイトと透明性を提供します。 - - - 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. - SAP Race Committee アプリは、セーリングレガッタ運営中にレース組織者が手動で行う作業や連絡業務を自動化/簡略化することによって効率と統制を向上させます。Race Committee アプリは、レースイベントの運営/管理業務を簡略化するのに役立ち、レース委員会がより円滑に運営されるよう支援します。 - - - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.<br> 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. - セーリングイベントで収集されたデータへのアクセスにより、戦略の策定や帆走の向上を支援するためにセーラーがそのパフォーマンスを評価および分析するための機会が提供されます。<br>SAP Business Analytics ソリューションは、多くのレガッタおよびレースを横断して履歴データを照会および分析するツールをセーラー、コーチ、ファン、そして報道関係者に提供します。SAP HANA は、こうした人たちが自身のパフォーマンスを最適化し、予定されているレガッタのために成功を収める戦略を策定するために簡単、迅速、かつ効率的な方法でパフォーマンスのパターン、傾向、およびセーラーのプロファイルを知ることを可能にします。 - - - 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. - STG Training Diary は、選手の体調、ならびに水上トレーニング、身体的トレーニング、操艇、メンタル、理論、さらに教育や移動などのその他の活動の領域におけるトレーニングへの取り組みの日々の記録および分析をサポートします。 - - - 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. - 適切な戦略を選択すれば、レース中に大きな競争上の優位性を得ることが可能です。Strategy Simulator により、さまざまな風況および水流に対して最良のセーリング戦略を決定することが容易になります。風と水流をシミュレーションで直ちに変更することができるため、不確かな気象条件に対しても戦略の確かさを簡単に評価することができます。 - - - Auto Player Configuration - 自動プレイヤー設定 - - - SAP Sailing Analytics - SAP Sailing Analytics - - - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - レースランキング、速力、操縦、ベアリングなどに関係するリアルタイム分析を提供することにより、SAP はセーリングという複雑なスポーツを簡略に分かりやすく説明することをお手伝いしています。 - - - 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. - SAP Sailing Analytics は、クラウドおよびインメモリ技術を活用し、リアルタイムで GPS および風計測データを処理し、どこからでもアクセスできる多様なフロントエンドでコンテンツを視覚化して、セーリングの世界に洞察力と透明性を提供します。 - - - Read More - 続きを読む - - - SAP Sailing Race Manager - SAP Sailing Race Manager - - - 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. - SAP Sailing Race Manager は、セーリングレガッタ運営中にレース組織者が手動で行う作業や連絡業務を自動化/簡略化することによって効率と統制を向上させます。Race Committee アプリは、レースイベントの運営/管理業務を簡略化するのに役立ち、レース委員会がより円滑に運営されるよう支援します。 - - - Learn More - 詳細情報 - - - Post-Race Analytics - レース後分析 - - - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better. - セーリングイベントで収集されたデータへのアクセスにより、戦略の策定や帆走の向上に役立つ、セーラーがそのパフォーマンスを評価および分析する機会が提供されます。 - - - 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. - SAP Business Analytics ソリューションは、多くのレガッタおよびレースにわたって履歴データを照会および分析するツールをセーラー、コーチ、ファン、そして報道関係者に提供します。SAP HANA は、こうした人たちが自身のパフォーマンスを最適化し、予定されているレガッタで成功を収める戦略を策定するために簡単、迅速、かつ効率的な方法でパフォーマンスのパターン、傾向、およびセーラーのプロファイルを知ることを可能にします。 - - - SAP Sail Better – STG Training Diary - SAP Sail Better – STG Training Diary - - - 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. - STG Training Diary は、選手の体調、ならびに水上トレーニング、身体的トレーニング、操艇、メンタル、理論、さらに教育や移動などのその他の活動の領域におけるトレーニングへの取り組みの日々の記録および分析をサポートします。 - - - Strategy Simulator - 戦略シミュレータ - - - 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. - 適切な戦略を選択すれば、レース中に大きな競争上の優位性を得ることが可能です。Strategy Simulator により、さまざまな風況および水流に対して最良のセーリング戦略を決定することが容易になります。風と水流をシミュレーションで直ちに変更することができるため、不確かな気象条件に対しても戦略の確かさを簡単に評価することができます。 - - - Learn More - 詳細情報 - - - Imprint - 刻印 - - -
-
\ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_ru.properties.xlf b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_ru.properties.xlf deleted file mode 100644 index a2e8b254c41..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_ru.properties.xlf +++ /dev/null @@ -1,865 +0,0 @@ - - - -
- - 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 - - - - - -
- - - Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart. - Совет: таблицу лидеров (на вкладке ТАБЛИЦА ЛИДЕРОВ) также можно использовать для выбора участников, отображаемых в диаграмме. - - - Choose a language - Выбор языка - - - Events - События - - - Home - Главная - - - About us - О нас - - - Contact - Контакт - - - Sponsoring - Финансовая поддержка - - - Solutions - Решения - - - Blog - Блог - - - Deutsch - Deutsch - - - English - English - - - Full event schedule - Полное расписание события - - - Official event website - Официальный веб-сайт события - - - Leg - Отрезок - - - Races - Гонки - - - More info - Больше сведений - - - View analysis - Просмотреть анализ - - - Overall leaderboard - Общая таблица лидеров - - - Please enter a search term. - Введите запрос поиска. - - - Please try again... - Повторите попытку... - - - Reload page - Перезагрузить страницу - - - An error occured while loading the data for this page. - При загрузке данных для этой страницы возникла ошибка. - - - Could not find a leaderboard with this name. - Не удалось найти таблицу лидеров с этим названием. - - - Not scheduled. - Не запланировано. - - - Regatta details - Подробности регаты - - - Regatta - Регата - - - Competitors Analytics - Анализ участников - - - Choose chart type - Выберите тип диаграммы - - - Series - Серия - - - Regatta leaderboards - Таблицы лидеров регаты - - - Features - Характеристики - - - Release notes - Примечания к выпуску - - - What''s new - Новые возможности - - - Overview - Обзор - - - SAP Sailing - SAP Sailing - - - Search - Поиск - - - Start Simulator - Запустить симулятор - - - Days - дн. - - - Days - дн. - - - Hrs - ч. - - - Min - мин. - - - Sec - сек. - - - Day - дн. - - - Hour - ч. - - - Min - мин. - - - Sec - сек. - - - Live - Активно - - - Finished - Завершено - - - Watch now - Смотреть сейчас - - - Last Update - Последнее обновление - - - Leaderboard - Таблица лидеров - - - Report news - Сообщить новости - - - News Update - Обновление новостей - - - Started - Начато - - - hrs and - ч. и - - - minutes ago - мин. назад - - - Starting in - Начало через - - - hrs and - ч. - - - minutes - мин. - - - Event Schedule - Расписание событий - - - Upcoming Races Today - Предстоящие сегодня гонки - - - Weather - Погода - - - KTS - уз - - - SAP Sailing Analytics - SAP Sailing Analytics - - - Media - Мультимедиа - - - Overview - Обзор - - - Schedule - Расписание - - - Regattas - Регаты - - - About the Series - О данной серии - - - Upcoming - Предстоит - - - Recent Events - Недавние события - - - Leaderboard - Таблица лидеров - - - Latest Series Events - События последней серии - - - More - Больше - - - Events - События - - - Countries - Страны - - - Sailors - Мореходы - - - Tracked Races - Отслеживаемые гонки - - - Winners and Results - Победители и результаты - - - All Boat Classes - Все классы лодок - - - More Events - Больше событий - - - Recent Events - Недавние события - - - Date - Дата - - - Event - Событие - - - Location - Место - - - Upcoming Schedule - Расписание предстоящих - - - Series - Серия - - - More Events To Be Announced Soon! - Скоро будет анонсировано больше событий! - - - Event Quick-Finder - Быстрый поиск событий - - - Leaderboard - Таблица лидеров - - - Races - Гонки - - - All boat classes - Все классы лодок - - - Competitor - Участник - - - Extend Leaderboard - Расширить таблицу лидеров - - - No more races - Больше нет гонок - - - Last Score Update - Последнее обновление оценок - - - Name - Название - - - Regatta Rank - Ранг в регате - - - Total Points - Общий балл - - - Watch live - Смотреть в реальном времени - - - Analyze Race - Анализировать гонку - - - Not Tracked - Не отслеживается - - - Finished at: - Завершено в: - - - Started at: - Начато в: - - - Scheduled for: - Запланировано на: - - - Race - Гонка - - - Wind Strength: - Сила ветра: - - - Winner - Победитель - - - Leader - Лидер - - - Tracking - Отслеживание - - - Wind Data - Данные о ветре - - - Video - Видео - - - Audio - Аудио - - - Event Sponsorships - Спонсорская поддержка событий - - - Jobs - Работа - - - © 2011-2016 SAP Sailing Analytics - © SAP Sailing Analytics, 2011–2016. - - - SAP Sailing in - Язык SAP Sailing - - - Legal Disclosure - Раскрытие юридической информации - - - Privacy - Конфиденциальность - - - Feedback - Обратная связь - - - Events - События - - - Home - Главная - - - - Search - Поиск - - - Search - Поиск - - - Solutions - Решения - - - Sponsoring - Финансовая поддержка - - - Latest Official Race Results - Последние официальные результаты гонок - - - New - Новое - - - Updated - Обновлено - - - races - гонки - - - refresh - обновить - - - Leaderboard Quick Access - Быстрый доступ к таблице лидеров - - - Show All Events - Показать все события - - - Latest Events from the Sailing World - Последние события в мире парусного спорта - - - Get lost in the latest and most beautiful impressions from your favorite sailing event. - Погрузитесь в новейшие и прекраснейшие впечатления от избранного события в мире парусного спорта. - - - Photographers love Sailing - Фотографы любят паруса - - - Immerse yourself in the world of sailing and check out our latest events for more videos. - Погрузитесь в мир парусного спорта и просмотрите другие видео наших последних событий. - - - Recent Video Entries - Последние видеозаписи - - - Read More - См. также - - - Photos - Фото - - - Videos - Видео - - - Competitors - Участники - - - Races - Гонки - - - Tracked - Отслеживаемые - - - Regatta will start - Регата начнется - - - Pts. - баллов - - - Course - Курс - - - Area - Область - - - Finished at - Завершено в - - - Scheduled at - Запланировано в - - - Started at - Начато в - - - Winner and Results - Победитель и результат - - - Search - Поиск - - - Your Search - Ваш поиск - - - result(s) found for - результ. по запросу - - - Type in your searchkey - Введите ключ поиска - - - More - Больше - - - Search - Поиск - - - Search again - Повторный поиск - - - Sort by - Сортировать по - - - Recent - Недавние - - - Oldest - Самые старые - - - Relevance - Релевантность - - - About 2,450 results where found for ''Schnitzel'' - Около 2450 результатов по запросу ''Шницель'' - - - Send an email - Отправить эл. почту - - - Share on Facebook - Поделиться в Facebook - - - Tweet about it - Твитнуть об этом - - - Share this on - Поделиться в - - - Recommend SAP Sailing Analytics - Рекомендовать SAP Sailing Analytics - - - SAP in Sailing - SAP в парусном спорте - SOLUTIONS - - - SAP Sailing Analytics - SAP Sailing Analytics - - - SAP Sailing Race Manager - SAP Sailing Race Manager - - - Post-Race Analytics - Аналитика после гонки - - - Training Diary - Дневник тренировок - - - Strategy Simulator - Симулятор стратегии - - - SAP in Sailing - SAP в парусном спорте - - - 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: - Парусный спорт предоставляет отличную платформу для демонстрации решений SAP и беспрецедентной помощи развитию спорта. Вовлеченность SAP преобразила парусный спорт, предоставив инструменты, которые: - - - Help sailors analyze performance and optimize strategy - Помогают мореходам анализировать эффективность и оптимизировать стратегию. - - - Bring fans closer to the action - Делают болельщиков ближе к действию. - - - Provide the media with information and insights to deliver a greater informed commentary - Предоставляют информацию и аналитику для более информированного комментирования. - - - SAP has a longstanding involvement with sailing and has established a portfolio spanning across teams and regattas, including: - За немалое время причастности к парусному спорту компанией SAP накоплено солидное портфолио сотрудничества с разными командами регатами, включая: - - - Official Technology Partner of Travemünder Woche - Официальный технологический партнер Travemünder Woche - - - Technical Partner of the European Sailing Leagues - Технический партнер Европейской лиги парусного спорта - - - Title sponsor of the SAP Extreme Sailing Team - Титульный спонсор команды SAP Extreme Sailing Team - - - Official Technical Partner of the Extreme Sailing Series - Официальный технический партнер серии Extreme Sailing Series - - - Premium Partner of Germany’s national sailing team, Audi Sailing Team Germany - Премиальный партнер национальной команды Германии по парусному спорту, Audi Sailing Team Germany - - - Premium Partner of the world’s largest regatta, Kieler Woche (Kiel Week) - Премиальный партнер крупнейшей в мире регаты Kieler Woche (Кильская неделя) - - - Title sponsor of the SAP 5O5 World Championships - Титульный спонсор чемпионатов мира SAP 5O5 - - - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - Предоставляя аналитику по данным о рангах в гонке, скоростях, маневрах, ветрах и т. д. в режиме реального времени, SAP помогает упростить и демистифицировать сложный парусный спорт. - - - 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. - SAP Sailing Analytics делает мир парусного спорта понятным и прозрачным, используя облако и технологию In-Memory, обработку данных GPS и параметров ветра в реальном времени, а также визуализацию контекста в разных пользовательских интерфейсах, доступных где угодно. - - - 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. - Приложение SAP Race Committee повышает уровень эффективности и контроля для организаторов гонки за счет автоматизации и упрощения выполняемых вручную задач и общения во время проведения парусных регат. Приложение Race Committee помогает упростить проведение событий и управление ими, освобождая для оргкомитета время на лучшую проработку деталей. - - - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.<br> 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. - Доступ к данным, собранным на парусных событиях, дает мореходам возможность оценить и проанализировать свои показатели, помогая разрабатывать стратегии и повышать мастерство.<br> Решения SAP Business Analytics предоставляют мореходам, тренерам, болельщикам и СМИ инструменты для просмотра и анализа исторических данных по множеству регат и гонок. SAP HANA позволяет изучать эффективные приемы, тенденции и профили мореходов простым, быстрым и эффективным образом для оптимизации своих показателей и разработки успешных стратегий на будущие регаты. - - - 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. - Дневник тренировок STG поддерживает ежедневное документирования и анализ физического состояния атлета и его усилий в тренировках на воде, физической подготовке, работе с лодкой, моральной, теоретической подготовке, а также других видах деятельности, таких как образование и путешествия. - - - 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. - Выбор правильной стратегии может обеспечить большое конкурентное преимущество во время гонки. Симулятор стратегии упрощает определение лучшей стратегии хождения под парусом для разных атмосферных условий и водных течений. Возможность мгновенного изменения ветра и течения в симуляции позволяет легко оценить надежность стратегии даже для неопределенных погодных условий. - - - Auto Player Configuration - Конфигурация автовоспроизведения - - - SAP Sailing Analytics - SAP Sailing Analytics - - - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - Предоставляя аналитику по данным о рангах в гонке, скоростях, маневрах, ветрах и т. д. в режиме реального времени, SAP помогает упростить и демистифицировать сложный парусный спорт. - - - 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. - SAP Sailing Analytics делает мир парусного спорта понятным и прозрачным, используя облако и технологию In-Memory, обработку данных GPS и параметров ветра в реальном времени, а также визуализацию контекста в разных пользовательских интерфейсах, доступных где угодно. - - - Read More - См. также - - - SAP Sailing Race Manager - SAP Sailing Race Manager - - - 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. - Приложение SAP Sailing Race Manager повышает уровень эффективности и контроля для организаторов гонки за счет автоматизации и упрощения выполняемых вручную задач и общения во время проведения парусных регат. Приложение Race Committee помогает упростить проведение событий и управление ими, освобождая для оргкомитета время на лучшую проработку деталей. - - - Learn More - Узнать больше - - - Post-Race Analytics - Аналитика после гонки - - - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better. - Доступ к данным, собранным на парусных событиях, дает мореходам возможность оценить и проанализировать свои показатели, помогая разрабатывать стратегии и повышать мастерство. - - - 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. - Решения SAP Business Analytics предоставляют мореходам, тренерам, болельщикам и СМИ инструменты для просмотра и анализа исторических данных по множеству регат и гонок. SAP HANA позволяет изучать паттерны эффективности, тенденции и профили мореходов простым, быстрым и эффективным образом для оптимизации своих показателей и разработки успешных стратегий на будущие регаты. - - - SAP Sail Better – STG Training Diary - SAP Sail Better – Дневник тренировок STG - - - 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. - Дневник тренировок STG поддерживает ежедневное документирования и анализ физического состояния атлета и его усилий в тренировках на воде, физической подготовке, работе с лодкой, моральной, теоретической подготовке, а также других видах деятельности, таких как образование и путешествия. - - - Strategy Simulator - Симулятор стратегии - - - 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. - Выбор правильной стратегии может обеспечить большое конкурентное преимущество во время гонки. Симулятор стратегии упрощает определение лучшей стратегии хождения под парусом для разных атмосферных условий и водных течений. Возможность мгновенного изменения ветра и течения в симуляции позволяет легко оценить надежность стратегии даже для неопределенных погодных условий. - - - Learn More - Узнать больше - - - Imprint - Печать - - -
-
\ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_zh_CN.properties.xlf b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_zh_CN.properties.xlf deleted file mode 100644 index fe99d11abe1..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/common/client/i18n/XLF/TextMessages_zh_CN.properties.xlf +++ /dev/null @@ -1,865 +0,0 @@ - - - -
- - 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 - - - - - -
- - - Hint: You can also use the leaderboard (on the LEADERBOARD tab) to select the competitors displayed in the chart. - 提示:您还可以使用积分榜(在 LEADERBOARD 选项卡中)选择在记录中显示的参赛队。 - - - Choose a language - 选择一种语言 - - - Events - 活动 - - - Home - 主页 - - - About us - 关于我们 - - - Contact - 联系信息 - - - Sponsoring - 赞助 - - - Solutions - 解决方案 - - - Blog - 博客 - - - Deutsch - 德语 - - - English - 英语 - - - Full event schedule - 详细活动日程安排 - - - Official event website - 官方活动网站 - - - Leg - 航段 - - - Races - 比赛轮次 - - - More info - 更多信息 - - - View analysis - 查看分析 - - - Overall leaderboard - 总积分榜 - - - Please enter a search term. - 请输入搜索词。 - - - Please try again... - 请重试... - - - Reload page - 重新加载页面 - - - An error occured while loading the data for this page. - 加载此页面数据时出错。 - - - Could not find a leaderboard with this name. - 未找到此名称的积分榜。 - - - Not scheduled. - 未日程安排。 - - - Regatta details - 比赛详情 - - - Regatta - 比赛 - - - Competitors Analytics - 参赛队分析 - - - Choose chart type - 选择记录类型 - - - Series - 系列 - - - Regatta leaderboards - 比赛积分榜 - - - Features - 特征 - - - Release notes - 版本注释 - - - What''s new - 最新消息 - - - Overview - 总览 - - - SAP Sailing - SAP Sailing - - - Search - 搜索 - - - Start Simulator - 启动模拟器 - - - Days - 天 - - - Days - 天 - - - Hrs - 小时 - - - Min - 分钟 - - - Sec - 秒 - - - Day - 天 - - - Hour - 小时 - - - Min - 分钟 - - - Sec - 秒 - - - Live - 实时 - - - Finished - 已完成 - - - Watch now - 现在观看 - - - Last Update - 上次更新 - - - Leaderboard - 积分榜 - - - Report news - 消息播报 - - - News Update - 消息更新 - - - Started - 已开始 - - - hrs and - 小时 - - - minutes ago - 分钟前 - - - Starting in - 距离开始还有 - - - hrs and - 小时 - - - minutes - 分钟 - - - Event Schedule - 活动日程安排 - - - Upcoming Races Today - 今天即将进行的比赛轮次 - - - Weather - 天气 - - - KTS - KTS - - - SAP Sailing Analytics - SAP Sailing Analytics - - - Media - 媒体 - - - Overview - 总览 - - - Schedule - 日程安排 - - - Regattas - 比赛 - - - About the Series - 关于系列 - - - Upcoming - 即将到来 - - - Recent Events - 最近活动 - - - Leaderboard - 积分榜 - - - Latest Series Events - 最新系列活动 - - - More - 更多 - - - Events - 活动 - - - Countries - 国家 - - - Sailors - 水手 - - - Tracked Races - 跟踪的比赛轮次 - - - Winners and Results - 获胜者和结果 - - - All Boat Classes - 所有船只级别 - - - More Events - 更多活动 - - - Recent Events - 最近活动 - - - Date - 日期 - - - Event - 活动 - - - Location - 地点 - - - Upcoming Schedule - 即将到来的日程安排 - - - Series - 系列 - - - More Events To Be Announced Soon! - 即将公布更多活动! - - - Event Quick-Finder - 活动快速查找器 - - - Leaderboard - 积分榜 - - - Races - 比赛轮次 - - - All boat classes - 所有船只级别 - - - Competitor - 参赛队 - - - Extend Leaderboard - 展开积分榜 - - - No more races - 没有更多比赛轮次 - - - Last Score Update - 上次得分更新 - - - Name - 名称 - - - Regatta Rank - 比赛名次 - - - Total Points - 总分 - - - Watch live - 观看直播 - - - Analyze Race - 分析比赛轮次 - - - Not Tracked - 未跟踪 - - - Finished at: - 结束时间: - - - Started at: - 开始时间: - - - Scheduled for: - 已日程安排: - - - Race - 比赛轮次 - - - Wind Strength: - 风力: - - - Winner - 获胜者 - - - Leader - 第一名 - - - Tracking - 跟踪 - - - Wind Data - 风力数据 - - - Video - 视频 - - - Audio - 音频 - - - Event Sponsorships - 活动赞助 - - - Jobs - 招贤纳士 - - - © 2011-2016 SAP Sailing Analytics - 版权所有 © 2011-2016 SAP Sailing Analytics - - - SAP Sailing in - SAP Sailing 语言 - - - Legal Disclosure - 法律声明 - - - Privacy - 隐私 - - - Feedback - 反馈 - - - Events - 活动 - - - Home - 主页 - - - - Search - 搜索 - - - Search - 搜索 - - - Solutions - 解决方案 - - - Sponsoring - 赞助 - - - Latest Official Race Results - 最新官方比赛轮次结果 - - - New - 新建 - - - Updated - 已更新 - - - races - 比赛轮次 - - - refresh - 刷新 - - - Leaderboard Quick Access - 积分榜快速访问 - - - Show All Events - 显示所有活动 - - - Latest Events from the Sailing World - 来自风帆世界的最新活动 - - - Get lost in the latest and most beautiful impressions from your favorite sailing event. - 徜徉在让人着迷、震撼人心的最新航行活动中。 - - - Photographers love Sailing - 摄影师酷爱航行 - - - Immerse yourself in the world of sailing and check out our latest events for more videos. - 沉浸在风帆世界中,并通过更多视频了解最新活动。 - - - Recent Video Entries - 最近视频条目 - - - Read More - 更多信息 - - - Photos - 照片 - - - Videos - 视频 - - - Competitors - 参赛队 - - - Races - 比赛轮次 - - - Tracked - 跟踪 - - - Regatta will start - 比赛即将开始 - - - Pts. - 得分 - - - Course - 场地 - - - Area - 区域 - - - Finished at - 结束时间 - - - Scheduled at - 日程安排 - - - Started at - 开始时间 - - - Winner and Results - 获胜者和结果 - - - Search - 搜索 - - - Your Search - 您的搜索 - - - result(s) found for - 找到的结果 - - - Type in your searchkey - 输入搜索关键字 - - - More - 更多 - - - Search - 搜索 - - - Search again - 再次搜索 - - - Sort by - 排序方式 - - - Recent - 最近 - - - Oldest - 最早 - - - Relevance - 相关性 - - - About 2,450 results where found for ''Schnitzel'' - 找到有关“炸肉排”的约 2,450 个结果 - - - Send an email - 发送电子邮件 - - - Share on Facebook - 在 Facebook 上分享 - - - Tweet about it - 为其发推文 - - - Share this on - 分享到 - - - Recommend SAP Sailing Analytics - 推荐 SAP Sailing Analytics - - - SAP in Sailing - SAP in Sailing - SOLUTIONS - - - SAP Sailing Analytics - SAP Sailing Analytics - - - SAP Sailing Race Manager - SAP Sailing Race Manager - - - Post-Race Analytics - 赛后分析 - - - Training Diary - 训练日记 - - - Strategy Simulator - 策略模拟器 - - - SAP in Sailing - SAP in Sailing - - - 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: - SAP 凭借此航行应用提供完美的平台,向用户展示解决方案,并以前所未有的顺畅速度呈现体育赛事。 SAP 通过提供各种工具转换其在参与此项运动中获得的航行经验,这些工具: - - - Help sailors analyze performance and optimize strategy - 帮助水手分析表现并优化策略 - - - Bring fans closer to the action - 让粉丝近距离直击运动 - - - Provide the media with information and insights to deliver a greater informed commentary - 为媒体提供信息和见解,从而提供深度评论 - - - SAP has a longstanding involvement with sailing and has established a portfolio spanning across teams and regattas, including: - SAP 长期参与航行运动,并成立了跨越团队和比赛的组合,包括: - - - Official Technology Partner of Travemünder Woche - 特拉沃明德周的官方技术合作伙伴 - - - Technical Partner of the European Sailing Leagues - 欧洲帆船联盟的技术合作伙伴 - - - Title sponsor of the SAP Extreme Sailing Team - SAP 极限帆船队的冠名赞助商 - - - Official Technical Partner of the Extreme Sailing Series - 极限帆船系列赛的官方技术合作伙伴 - - - Premium Partner of Germany’s national sailing team, Audi Sailing Team Germany - 德国国家帆船队 - 德国奥迪帆船队的优选合作伙伴 - - - Premium Partner of the world’s largest regatta, Kieler Woche (Kiel Week) - 世界上最大的帆船盛事“基尔周”的优选合作伙伴 - - - Title sponsor of the SAP 5O5 World Championships - SAP 5O5 世界锦标赛的冠名赞助商 - - - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - 通过实时分析比赛轮次排名、速度、操作和航向角等,SAP 可简化此复杂的航行运动,使其浅显易懂。 - - - 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. - SAP Sailing Analytics 利用云和内存技术实时处理 GPS 和风力测量数据,并在可从任何地方访问的前端显示,让用户全面、透彻地了解航行运动。 - - - 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. - SAP Race Committee 应用通过自动化及简化赛事主办机构在航行比赛期间的人工作业和沟通,实现更高的效率和控制能力。 Race Committee 应用简化举办和管理比赛活动的操作,使竞赛委员会的操作更加智能。 - - - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.<br> 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. - 水手通过访问航行活动期间收集的数据评估和分析其表现,帮助他们制定策略和优化航行方案。<br> SAP Business Analytics 解决方案为水手、教练、粉丝和媒体提供跨比赛和轮次浏览和分析历史数据的工具。 SAP HANA 通过简单、快速和高效的方式使其了解表现模式、趋势和水手资料,从而提高自己的表现并为今后的比赛制定成功的策略。 - - - 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. - STG Training Diary 可每天记录和分析运动员的身体状况,在水上训练、体能训练、船艇工作、心理、理论以及教育或旅行等其他活动领域的训练力度。 - - - 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. - 选择正确的策略可在比赛期间极大地提高竞争优势。 策略模拟器为不同的风力条件和水流简化确定最佳的航行策略。 由于可以在模拟中即时更改风和水流,即便在不确定的天气条件下,也可以轻松地评估策略的稳健性。 - - - Auto Player Configuration - 自动播放器配置 - - - SAP Sailing Analytics - SAP Sailing Analytics - - - By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing. - 通过实时分析比赛轮次排名、速度、操作和航向角等,SAP 可简化此复杂的航行运动,使其浅显易懂。 - - - 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. - SAP Sailing Analytics 利用云和内存技术实时处理 GPS 和风力测量数据,并在可从任何地方访问的前端显示,让用户全面、透彻地了解航行运动。 - - - Read More - 更多信息 - - - SAP Sailing Race Manager - SAP Sailing Race Manager - - - 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. - SAP Sailing Race Manager 通过自动化及简化赛事主办机构在航行比赛期间的人工作业和沟通,实现更高的效率和控制能力。 Race Committee 应用简化举办和管理比赛活动的操作,使竞赛委员会的操作更加智能。 - - - Learn More - 了解更多 - - - Post-Race Analytics - 赛后分析 - - - Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better. - 水手通过访问航行活动期间收集的数据评估和分析其表现,帮助他们制定策略和优化航行方案。 - - - 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. - SAP Business Analytics 解决方案为水手、教练、粉丝和媒体提供跨比赛和轮次浏览和分析历史数据的工具。 SAP HANA 通过简单、快速和高效的方式使其了解表现模式、趋势和水手资料,从而提高自己的表现并为今后的比赛制定成功的策略。 - - - SAP Sail Better – STG Training Diary - SAP Sail Better – STG Training Diary - - - 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. - STG Training Diary 可每天记录和分析运动员的身体状况,在水上训练、体能训练、船艇工作、心理、理论以及教育或旅行等其他活动领域的训练力度。 - - - Strategy Simulator - 策略模拟器 - - - 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. - 选择正确的策略可在比赛期间极大地提高竞争优势。 策略模拟器为不同的风力条件和水流简化确定最佳的航行策略。 由于可以在模拟中即时更改风和水流,即便在不确定的天气条件下,也可以轻松地评估策略的稳健性。 - - - Learn More - 了解更多 - - - Imprint - 版本说明 - - -
-
\ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/EventPlace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/EventPlace.java index 549d060a6dd..be977e7b801 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/EventPlace.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/EventPlace.java @@ -2,7 +2,7 @@ package com.sap.sailing.gwt.home.client.place.event.legacy; import com.google.gwt.place.shared.PlaceTokenizer; import com.sap.sailing.gwt.common.client.AbstractBasePlace; -import com.sap.sailing.gwt.common.client.i18n.TextMessages; +import com.sap.sailing.gwt.ui.client.StringMessages; public class EventPlace extends AbstractBasePlace { private final String eventUuidAsString; @@ -35,7 +35,7 @@ public class EventPlace extends AbstractBasePlace { } public String getTitle(String eventName) { - return TextMessages.INSTANCE.sapSailing() + " - " + eventName; + return StringMessages.INSTANCE.sapSailing() + " - " + eventName; } public String getEventUuidAsString() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/RegattaPlace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/RegattaPlace.java index 54d9c32fe02..5d48bb252b1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/RegattaPlace.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/RegattaPlace.java @@ -2,7 +2,7 @@ package com.sap.sailing.gwt.home.client.place.event.legacy; import com.google.gwt.place.shared.PlaceTokenizer; import com.sap.sailing.gwt.common.client.AbstractBasePlace; -import com.sap.sailing.gwt.common.client.i18n.TextMessages; +import com.sap.sailing.gwt.ui.client.StringMessages; public class RegattaPlace extends AbstractBasePlace { private final String eventUuidAsString; @@ -44,7 +44,7 @@ public class RegattaPlace extends AbstractBasePlace { } public String getTitle(String eventName, String leaderboardName) { - return TextMessages.INSTANCE.sapSailing() + " - " + TextMessages.INSTANCE.leaderboard() + ": " + leaderboardName; + return StringMessages.INSTANCE.sapSailing() + " - " + StringMessages.INSTANCE.leaderboard() + ": " + leaderboardName; } public String getEventUuidAsString() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/SeriesClientFactory.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/SeriesClientFactory.java index a91cc821b7d..8fade38c2dc 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/SeriesClientFactory.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/SeriesClientFactory.java @@ -1,10 +1,11 @@ -package com.sap.sailing.gwt.home.client.place.event.legacy; - -import com.sap.sailing.gwt.home.shared.app.ClientFactoryWithDispatch; -import com.sap.sailing.gwt.ui.client.SailingClientFactory; - -public interface SeriesClientFactory extends SailingClientFactory, ClientFactoryWithDispatch { - - // SeriesAnalyticsView createSeriesAnalyticsView(EventDTO event, String leaderboardName, SeriesNavigationTabs - // navigationTab, Timer timerForClientServerOffset); -} +package com.sap.sailing.gwt.home.client.place.event.legacy; + +import com.sap.sailing.gwt.home.shared.app.ClientFactoryWithDispatch; +import com.sap.sailing.gwt.ui.client.SailingClientFactory; +import com.sap.sailing.gwt.ui.client.refresh.ErrorAndBusyClientFactory; + +public interface SeriesClientFactory extends SailingClientFactory, ClientFactoryWithDispatch, ErrorAndBusyClientFactory { + + // SeriesAnalyticsView createSeriesAnalyticsView(EventDTO event, String leaderboardName, SeriesNavigationTabs + // navigationTab, Timer timerForClientServerOffset); +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/SeriesPlace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/SeriesPlace.java index 87d1775e7e6..47978835d32 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/SeriesPlace.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/legacy/SeriesPlace.java @@ -2,7 +2,7 @@ package com.sap.sailing.gwt.home.client.place.event.legacy; import com.google.gwt.place.shared.PlaceTokenizer; import com.sap.sailing.gwt.common.client.AbstractBasePlace; -import com.sap.sailing.gwt.common.client.i18n.TextMessages; +import com.sap.sailing.gwt.ui.client.StringMessages; public class SeriesPlace extends AbstractBasePlace { private final String eventUuidAsString; @@ -44,7 +44,7 @@ public class SeriesPlace extends AbstractBasePlace { } public String getTitle(String eventName, String leaderboardName) { - return TextMessages.INSTANCE.sapSailing() + " - " + TextMessages.INSTANCE.leaderboard() + ": " + leaderboardName; + return StringMessages.INSTANCE.sapSailing() + " - " + StringMessages.INSTANCE.leaderboard() + ": " + leaderboardName; } public String getEventUuidAsString() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/eventsponsors/EventSponsor.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/eventsponsors/EventSponsor.ui.xml index 22cb13c61a8..4557f57480d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/eventsponsors/EventSponsor.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/eventsponsors/EventSponsor.ui.xml @@ -2,7 +2,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/eventsponsors/EventSponsors.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/eventsponsors/EventSponsors.ui.xml index c9a47e5d4ba..fba8bd3c37b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/eventsponsors/EventSponsors.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/eventsponsors/EventSponsors.ui.xml @@ -2,7 +2,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/mainsponsors/MainSponsors.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/mainsponsors/MainSponsors.ui.xml index 21c96d41ea4..1e917e57052 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/mainsponsors/MainSponsors.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/mainsponsors/MainSponsors.ui.xml @@ -2,7 +2,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/sponsoring/Sponsoring.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/sponsoring/Sponsoring.ui.xml index 5ed19c577c7..780b303850b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/sponsoring/Sponsoring.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/shared/sponsoring/Sponsoring.ui.xml @@ -2,7 +2,7 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/EventReferenceWithStateDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/EventReferenceWithStateDTO.java new file mode 100644 index 00000000000..0f3c15a6665 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/EventReferenceWithStateDTO.java @@ -0,0 +1,25 @@ +package com.sap.sailing.gwt.home.communication.event; + +import java.util.UUID; + +public class EventReferenceWithStateDTO extends EventReferenceDTO { + + private EventState state; + + protected EventReferenceWithStateDTO() { + } + + public EventReferenceWithStateDTO(UUID id, String name, EventState state) { + super(id, name); + this.state = state; + } + + public EventState getState() { + return state; + } + + public void setState(EventState state) { + this.state = state; + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java index 4b953e93309..8c1a1f6611a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/event/GetEventViewAction.java @@ -1,127 +1,128 @@ -package com.sap.sailing.gwt.home.communication.event; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.UUID; -import java.util.logging.Level; -import java.util.logging.Logger; - -import com.google.gwt.core.shared.GwtIncompatible; -import com.sap.sailing.domain.base.Event; -import com.sap.sailing.domain.leaderboard.LeaderboardGroup; -import com.sap.sailing.gwt.home.communication.SailingAction; -import com.sap.sailing.gwt.home.communication.SailingDispatchContext; -import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; -import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO.EventType; -import com.sap.sailing.gwt.home.communication.eventview.RegattaMetadataDTO; -import com.sap.sailing.gwt.home.server.EventActionUtil; -import com.sap.sailing.gwt.home.server.EventActionUtil.LeaderboardCallback; -import com.sap.sailing.gwt.home.server.LeaderboardContext; -import com.sap.sailing.gwt.server.HomeServiceUtil; -import com.sap.sse.common.media.MediaTagConstants; -import com.sap.sse.gwt.dispatch.shared.caching.IsClientCacheable; -import com.sap.sse.shared.media.ImageDescriptor; - -/** - *

- * {@link SailingAction} implementation to load the basic logo, name, state, date and navigation information for a - * {@link #GetEventViewAction(UUID) given event-id} to be shown on several pages of this event. - *

- */ -public class GetEventViewAction implements SailingAction, IsClientCacheable { - private static final Logger logger = Logger.getLogger(GetEventViewAction.class.getName()); - - private UUID eventId; - - @SuppressWarnings("unused") - private GetEventViewAction() { - } - - /** - * Creates a {@link GetEventViewAction} instance for the given event-id. - * - * @param eventId - * {@link UUID} of the {@link Event} to load data for - */ - public GetEventViewAction(UUID eventId) { - this.eventId = eventId; - } - - @GwtIncompatible - public EventViewDTO execute(SailingDispatchContext context) { - final Event event = context.getRacingEventService().getEvent(eventId); - if (event == null) { - throw new RuntimeException("Event not found"); - } - - final EventViewDTO dto = new EventViewDTO(); - HomeServiceUtil.mapToMetadataDTO(event, dto, context.getRacingEventService()); - - ImageDescriptor logoImage = event.findImageWithTag(MediaTagConstants.LOGO); - dto.setLogoImage(logoImage != null ? HomeServiceUtil.convertToImageDTO(logoImage) : null); - dto.setOfficialWebsiteURL(event.getOfficialWebsiteURL() == null ? null : event.getOfficialWebsiteURL().toString()); - URL sailorsInfoWebsiteURL = event.getSailorsInfoWebsiteURLOrFallback(context.getClientLocale()); - dto.setSailorsInfoWebsiteURL(sailorsInfoWebsiteURL == null ? null : sailorsInfoWebsiteURL.toString()); - - dto.setHasMedia(HomeServiceUtil.hasMedia(event)); - dto.setState(HomeServiceUtil.calculateEventState(event)); - // bug2982: always show leaderboard and competitor analytics - dto.setHasAnalytics(true); - - final boolean isFakeSeries = HomeServiceUtil.isFakeSeries(event); - - EventActionUtil.forLeaderboardsOfEvent(context, event, new LeaderboardCallback() { - @Override - public void doForLeaderboard(LeaderboardContext context) { - try { - if(isFakeSeries && !context.isPartOfEvent()) { - return; - } - RegattaMetadataDTO regattaDTO = context.asRegattaMetadataDTO(); - dto.getRegattas().add(regattaDTO); - } catch (Exception e) { - logger.log(Level.SEVERE, "Catched exception while reading data for leaderboard " + context.getLeaderboardName(), e); - } - } - }); - - if (isFakeSeries) { - dto.setType(EventType.SERIES_EVENT); - - LeaderboardGroup overallLeaderboardGroup = event.getLeaderboardGroups().iterator().next(); - dto.setSeriesName(HomeServiceUtil.getLeaderboardDisplayName(overallLeaderboardGroup)); - List fakeSeriesEvents = new ArrayList(); - - for (Event eventOfSeries : context.getRacingEventService().getAllEvents()) { - for (LeaderboardGroup leaderboardGroup : eventOfSeries.getLeaderboardGroups()) { - if (overallLeaderboardGroup.equals(leaderboardGroup)) { - fakeSeriesEvents.add(eventOfSeries); - } - } - } - Collections.sort(fakeSeriesEvents, new Comparator() { - public int compare(Event e1, Event e2) { - return e1.getStartDate().compareTo(e2.getEndDate()); - } - }); - for(Event eventInSeries: fakeSeriesEvents) { - String displayName = HomeServiceUtil.getLocation(eventInSeries, context.getRacingEventService()); - if(displayName == null) { - displayName = eventInSeries.getName(); - } - dto.getEventsOfSeries().add(new EventReferenceDTO(eventInSeries.getId(), displayName)); - } - } else { - dto.setType(dto.getRegattas().size() == 1 ? EventType.SINGLE_REGATTA: EventType.MULTI_REGATTA); - } - return dto; - } - - @Override - public void cacheInstanceKey(StringBuilder key) { - key.append(eventId); - } -} +package com.sap.sailing.gwt.home.communication.event; + +import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; + +import com.google.gwt.core.shared.GwtIncompatible; +import com.sap.sailing.domain.base.Event; +import com.sap.sailing.domain.leaderboard.LeaderboardGroup; +import com.sap.sailing.gwt.home.communication.SailingAction; +import com.sap.sailing.gwt.home.communication.SailingDispatchContext; +import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; +import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO.EventType; +import com.sap.sailing.gwt.home.communication.eventview.RegattaMetadataDTO; +import com.sap.sailing.gwt.home.server.EventActionUtil; +import com.sap.sailing.gwt.home.server.EventActionUtil.LeaderboardCallback; +import com.sap.sailing.gwt.home.server.LeaderboardContext; +import com.sap.sailing.gwt.server.HomeServiceUtil; +import com.sap.sse.common.media.MediaTagConstants; +import com.sap.sse.gwt.dispatch.shared.caching.IsClientCacheable; +import com.sap.sse.shared.media.ImageDescriptor; + +/** + *

+ * {@link SailingAction} implementation to load the basic logo, name, state, date and navigation information for a + * {@link #GetEventViewAction(UUID) given event-id} to be shown on several pages of this event. + *

+ */ +public class GetEventViewAction implements SailingAction, IsClientCacheable { + private static final Logger logger = Logger.getLogger(GetEventViewAction.class.getName()); + + private UUID eventId; + + @SuppressWarnings("unused") + private GetEventViewAction() { + } + + /** + * Creates a {@link GetEventViewAction} instance for the given event-id. + * + * @param eventId + * {@link UUID} of the {@link Event} to load data for + */ + public GetEventViewAction(UUID eventId) { + this.eventId = eventId; + } + + @GwtIncompatible + public EventViewDTO execute(SailingDispatchContext context) { + final Event event = context.getRacingEventService().getEvent(eventId); + if (event == null) { + throw new RuntimeException("Event not found"); + } + + final EventViewDTO dto = new EventViewDTO(); + HomeServiceUtil.mapToMetadataDTO(event, dto, context.getRacingEventService()); + + ImageDescriptor logoImage = event.findImageWithTag(MediaTagConstants.LOGO); + dto.setLogoImage(logoImage != null ? HomeServiceUtil.convertToImageDTO(logoImage) : null); + dto.setOfficialWebsiteURL(event.getOfficialWebsiteURL() == null ? null : event.getOfficialWebsiteURL().toString()); + URL sailorsInfoWebsiteURL = event.getSailorsInfoWebsiteURLOrFallback(context.getClientLocale()); + dto.setSailorsInfoWebsiteURL(sailorsInfoWebsiteURL == null ? null : sailorsInfoWebsiteURL.toString()); + + dto.setHasMedia(HomeServiceUtil.hasMedia(event)); + dto.setState(HomeServiceUtil.calculateEventState(event)); + // bug2982: always show leaderboard and competitor analytics + dto.setHasAnalytics(true); + + final boolean isFakeSeries = HomeServiceUtil.isFakeSeries(event); + + EventActionUtil.forLeaderboardsOfEvent(context, event, new LeaderboardCallback() { + @Override + public void doForLeaderboard(LeaderboardContext context) { + try { + if(isFakeSeries && !context.isPartOfEvent()) { + return; + } + RegattaMetadataDTO regattaDTO = context.asRegattaMetadataDTO(); + dto.getRegattas().add(regattaDTO); + } catch (Exception e) { + logger.log(Level.SEVERE, "Catched exception while reading data for leaderboard " + context.getLeaderboardName(), e); + } + } + }); + + if (isFakeSeries) { + dto.setType(EventType.SERIES_EVENT); + + LeaderboardGroup overallLeaderboardGroup = event.getLeaderboardGroups().iterator().next(); + dto.setSeriesName(HomeServiceUtil.getLeaderboardDisplayName(overallLeaderboardGroup)); + List fakeSeriesEvents = new ArrayList(); + + for (Event eventOfSeries : context.getRacingEventService().getAllEvents()) { + for (LeaderboardGroup leaderboardGroup : eventOfSeries.getLeaderboardGroups()) { + if (overallLeaderboardGroup.equals(leaderboardGroup)) { + fakeSeriesEvents.add(eventOfSeries); + } + } + } + Collections.sort(fakeSeriesEvents, new Comparator() { + public int compare(Event e1, Event e2) { + return e1.getStartDate().compareTo(e2.getEndDate()); + } + }); + for(Event eventInSeries: fakeSeriesEvents) { + String displayName = HomeServiceUtil.getLocation(eventInSeries, context.getRacingEventService()); + if(displayName == null) { + displayName = eventInSeries.getName(); + } + EventState eventState = HomeServiceUtil.calculateEventState(eventInSeries); + dto.getEventsOfSeries().add(new EventReferenceWithStateDTO(eventInSeries.getId(), displayName, eventState)); + } + } else { + dto.setType(dto.getRegattas().size() == 1 ? EventType.SINGLE_REGATTA: EventType.MULTI_REGATTA); + } + return dto; + } + + @Override + public void cacheInstanceKey(StringBuilder key) { + key.append(eventId); + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java index 3a29e720bac..78e35e28813 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/communication/eventview/EventViewDTO.java @@ -1,126 +1,126 @@ -package com.sap.sailing.gwt.home.communication.eventview; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.TreeSet; - -import com.sap.sailing.gwt.home.communication.event.EventMetadataDTO; -import com.sap.sailing.gwt.home.communication.event.EventReferenceDTO; -import com.sap.sailing.gwt.home.communication.event.HasLogo; -import com.sap.sse.gwt.client.media.ImageDTO; -import com.sap.sse.gwt.dispatch.shared.commands.Result; - -public class EventViewDTO extends EventMetadataDTO implements Result, HasLogo { - - public enum EventType { - SINGLE_REGATTA, MULTI_REGATTA, SERIES_EVENT - } - - private TreeSet regattas = new TreeSet<>(); - private ArrayList eventsOfSeries = new ArrayList<>(); - - private EventType type; - private boolean hasMedia; - private boolean hasAnalytics; - private String seriesName; - private ImageDTO logoImage; - private String officialWebsiteURL; - private String sailorsInfoWebsiteURL; - - public EventViewDTO() { - } - - public EventViewDTO(String name) { - setDisplayName(name); - } - - public EventType getType() { - return type; - } - - public void setType(EventType type) { - this.type = type; - } - - public Collection getRegattas() { - return regattas; - } - - public List getEventsOfSeries() { - return eventsOfSeries; - } - - public String getVenueCountry() { - // FIXME: We need a country? - return ""; - } - - public void setSeriesName(String seriesName) { - this.seriesName = seriesName; - } - - public String getSeriesName() { - return seriesName; - } - public String getSeriesIdAsString() { - return getId().toString(); - } - - public boolean isHasMedia() { - return hasMedia; - } - - public void setHasMedia(boolean hasMedia) { - this.hasMedia = hasMedia; - } - - public boolean isHasAnalytics() { - return hasAnalytics; - } - - public void setHasAnalytics(boolean hasAnalytics) { - this.hasAnalytics = hasAnalytics; - } - - public boolean isRegattaIDKnown(String regattaId) { - for (RegattaMetadataDTO regatta : regattas) { - if(regatta.getId().equals(regattaId)) { - return true; - } - } - return false; - } - - public void setLogoImage(ImageDTO logoImage) { - this.logoImage = logoImage; - } - - public ImageDTO getLogoImage() { - return logoImage; - } - - public void setOfficialWebsiteURL(String officialWebsiteURL) { - this.officialWebsiteURL = officialWebsiteURL; - } - - public String getOfficialWebsiteURL() { - return officialWebsiteURL; - } - - public String getSailorsInfoWebsiteURL() { - return sailorsInfoWebsiteURL; - } - - public void setSailorsInfoWebsiteURL(String sailorsInfoWebsiteURL) { - this.sailorsInfoWebsiteURL = sailorsInfoWebsiteURL; - } - - public String getLocationAndVenueAndCountry() { - String venue = getLocationAndVenue(); - if(getVenueCountry() != null && !getVenueCountry().isEmpty()) { - return venue + ", " + getVenueCountry(); - } - return venue; - } -} +package com.sap.sailing.gwt.home.communication.eventview; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.TreeSet; + +import com.sap.sailing.gwt.home.communication.event.EventMetadataDTO; +import com.sap.sailing.gwt.home.communication.event.EventReferenceWithStateDTO; +import com.sap.sailing.gwt.home.communication.event.HasLogo; +import com.sap.sse.gwt.client.media.ImageDTO; +import com.sap.sse.gwt.dispatch.shared.commands.Result; + +public class EventViewDTO extends EventMetadataDTO implements Result, HasLogo { + + public enum EventType { + SINGLE_REGATTA, MULTI_REGATTA, SERIES_EVENT + } + + private TreeSet regattas = new TreeSet<>(); + private ArrayList eventsOfSeries = new ArrayList<>(); + + private EventType type; + private boolean hasMedia; + private boolean hasAnalytics; + private String seriesName; + private ImageDTO logoImage; + private String officialWebsiteURL; + private String sailorsInfoWebsiteURL; + + public EventViewDTO() { + } + + public EventViewDTO(String name) { + setDisplayName(name); + } + + public EventType getType() { + return type; + } + + public void setType(EventType type) { + this.type = type; + } + + public Collection getRegattas() { + return regattas; + } + + public List getEventsOfSeries() { + return eventsOfSeries; + } + + public String getVenueCountry() { + // FIXME: We need a country? + return ""; + } + + public void setSeriesName(String seriesName) { + this.seriesName = seriesName; + } + + public String getSeriesName() { + return seriesName; + } + public String getSeriesIdAsString() { + return getId().toString(); + } + + public boolean isHasMedia() { + return hasMedia; + } + + public void setHasMedia(boolean hasMedia) { + this.hasMedia = hasMedia; + } + + public boolean isHasAnalytics() { + return hasAnalytics; + } + + public void setHasAnalytics(boolean hasAnalytics) { + this.hasAnalytics = hasAnalytics; + } + + public boolean isRegattaIDKnown(String regattaId) { + for (RegattaMetadataDTO regatta : regattas) { + if(regatta.getId().equals(regattaId)) { + return true; + } + } + return false; + } + + public void setLogoImage(ImageDTO logoImage) { + this.logoImage = logoImage; + } + + public ImageDTO getLogoImage() { + return logoImage; + } + + public void setOfficialWebsiteURL(String officialWebsiteURL) { + this.officialWebsiteURL = officialWebsiteURL; + } + + public String getOfficialWebsiteURL() { + return officialWebsiteURL; + } + + public String getSailorsInfoWebsiteURL() { + return sailorsInfoWebsiteURL; + } + + public void setSailorsInfoWebsiteURL(String sailorsInfoWebsiteURL) { + this.sailorsInfoWebsiteURL = sailorsInfoWebsiteURL; + } + + public String getLocationAndVenueAndCountry() { + String venue = getLocationAndVenue(); + if(getVenueCountry() != null && !getVenueCountry().isEmpty()) { + return venue + ", " + getVenueCountry(); + } + return venue; + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/event/EventTeaser.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/event/EventTeaser.ui.xml index eb62cf42ffe..96d9cbc125c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/event/EventTeaser.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/event/EventTeaser.ui.xml @@ -1,6 +1,6 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/event/EventTeaserSeriesInfoCorner.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/event/EventTeaserSeriesInfoCorner.ui.xml index 1d9afac4988..e39e46746d7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/event/EventTeaserSeriesInfoCorner.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/event/EventTeaserSeriesInfoCorner.ui.xml @@ -1,6 +1,6 @@ - +
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java index bb32e6e9bd6..5518883fb08 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventheader/EventHeader.java @@ -1,216 +1,215 @@ -package com.sap.sailing.gwt.home.desktop.partials.eventheader; - -import java.util.Date; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.AnchorElement; -import com.google.gwt.dom.client.DivElement; -import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.HeadingElement; -import com.google.gwt.dom.client.SpanElement; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.Event; -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.UIObject; -import com.google.gwt.user.client.ui.Widget; -import com.sap.sailing.gwt.common.client.i18n.TextMessages; -import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; -import com.sap.sailing.gwt.home.communication.eventview.HasRegattaMetadata; -import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingButtons; -import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingMetadataProvider; -import com.sap.sailing.gwt.home.desktop.places.event.EventView; -import com.sap.sailing.gwt.home.desktop.places.event.EventView.PlaceCallback; -import com.sap.sailing.gwt.home.desktop.places.event.EventView.Presenter; -import com.sap.sailing.gwt.home.shared.places.event.AbstractEventPlace; -import com.sap.sailing.gwt.home.shared.utils.DropdownHandler; -import com.sap.sailing.gwt.home.shared.utils.EventDatesFormatterUtil; -import com.sap.sailing.gwt.home.shared.utils.LabelTypeUtil; -import com.sap.sailing.gwt.home.shared.utils.LogoUtil; -import com.sap.sailing.gwt.ui.client.StringMessages; -import com.sap.sse.common.Util; -import com.sap.sse.gwt.client.LinkUtil; - -public class EventHeader extends Composite { - private static EventHeaderUiBinder uiBinder = GWT.create(EventHeaderUiBinder.class); - - interface EventHeaderUiBinder extends UiBinder { - } - - @UiField StringMessages i18n; - - @UiField DivElement eventLogo; - @UiField AnchorElement eventLogoAnchorUi; - @UiField HeadingElement staticTitle; - @UiField SpanElement eventName; - @UiField DivElement eventState; - @UiField DivElement dropdownTitle; - @UiField SpanElement dropdownEventName; - @UiField DivElement dropdownEventState; - @UiField AnchorElement dropdownTrigger; - @UiField DivElement eventDate; - @UiField SpanElement eventVenue; - @UiField DivElement eventVenueContainer; - @UiField AnchorElement eventLink; - @UiField DivElement competitors; - @UiField DivElement races; - @UiField DivElement eventCategory; - @UiField DivElement courseAreaUi; - @UiField FlowPanel dropdownContent; - @UiField SharingButtons sharing; - - private EventViewDTO event; - private Presenter presenter; - - public EventHeader(EventView.Presenter presenter) { - this.event = presenter.getEventDTO(); - this.presenter = presenter; - EventHeaderResources.INSTANCE.css().ensureInjected(); - initWidget(uiBinder.createAndBindUi(this)); - initFields(); - initSharing(); - } - - private void initSharing() { - sharing.setUp(new SharingMetadataProvider() { - @Override - public String getShortText() { - // TODO regatta details? - String dateString = EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate()); - return StringMessages.INSTANCE.eventSharingShortText(event.getDisplayName(), event.getLocationOrVenue(), dateString); - } - - @Override - public String getLongText(String url) { - // TODO regatta details? - String dateString = EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate()); - return StringMessages.INSTANCE.eventSharingLongText(event.getDisplayName(), event.getLocationOrVenue(), dateString, url); - } - }); - } - - private void initFields() { - LogoUtil.setEventLogo(eventLogo, event); - if (presenter.showRegattaMetadata()) { - presenter.getCurrentEventNavigation().configureAnchorElement(eventLogoAnchorUi); - } - String eventDisplayName = event.getDisplayName(); - String nameToShow; - if(presenter.showRegattaMetadata()) { - HasRegattaMetadata regattaMetadata = presenter.getRegattaMetadata(); - String regattaDisplayName = regattaMetadata.getDisplayName(); - if (regattaDisplayName.toLowerCase().contains(eventDisplayName.toLowerCase())) { - nameToShow = regattaDisplayName; - } else { - nameToShow = eventDisplayName + " - " + regattaDisplayName; - } - - if (regattaMetadata.getCompetitorsCount() > 0) { - competitors.setInnerText((i18n.competitorsCount(regattaMetadata.getCompetitorsCount()))); - } else { - hide(competitors); - } - if (regattaMetadata.getRaceCount() > 0) { - races.setInnerText((i18n.racesCount(regattaMetadata.getRaceCount()))); - } else { - hide(races); - } - if (regattaMetadata.getDefaultCourseAreaName() != null) { - courseAreaUi.setInnerText(i18n.courseAreaName(regattaMetadata.getDefaultCourseAreaName())); - } else { - hide(courseAreaUi); - } - if (regattaMetadata.getLeaderboardGroupNames() != null) { - eventCategory.setInnerText(Util.joinStrings(", ", regattaMetadata.getLeaderboardGroupNames())); - } else { - hide(eventCategory); - } - Date startDate = regattaMetadata.getStartDate() != null ? regattaMetadata.getStartDate() : event.getStartDate(); - Date endDate = regattaMetadata.getEndDate() != null ? regattaMetadata.getEndDate() : event.getEndDate(); - eventDate.setInnerHTML(EventDatesFormatterUtil.formatDateRangeWithYear(startDate, endDate)); - - hide(eventVenueContainer, eventLink); - } else { - nameToShow = eventDisplayName; - eventDate.setInnerHTML(EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate())); - eventVenue.setInnerText(event.getLocationAndVenueAndCountry()); - - if(event.getOfficialWebsiteURL() != null) { - String title = withoutPrefix(event.getOfficialWebsiteURL(), "http://", "https://"); - if(title.length() > 35) { - title = TextMessages.INSTANCE.officalEventWebsite(); - } - eventLink.setInnerText(title); - eventLink.setHref(event.getOfficialWebsiteURL()); - } else { - hide(eventLink); - } - hide(competitors, races, courseAreaUi, eventCategory); - } - initTitleAndSelection(nameToShow); - } - - private void initTitleAndSelection(String nameToShow) { - if(!presenter.needsSelectionInHeader()) { - eventName.setInnerText(nameToShow); - LabelTypeUtil.renderLabelType(eventState, event.getState().getStateMarker()); - UIObject.ensureDebugId(eventState, "EventStateLabelDiv"); - hide(dropdownTitle); - } else { - dropdownEventName.setInnerText(nameToShow); - LabelTypeUtil.renderLabelType(dropdownEventState, presenter.showRegattaMetadata() ? presenter.getRegattaMetadata().getState().getStateMarker() : event.getState().getStateMarker()); - UIObject.ensureDebugId(dropdownEventState, "EventStateLabelDiv"); - hide(staticTitle); - initDropdown(); - } - } - - private void initDropdown() { - new DropdownHandler(dropdownTrigger, dropdownContent.getElement()) { - @Override - protected void dropdownStateChanged(boolean dropdownShown) { - if(dropdownShown) { - dropdownTitle.addClassName(EventHeaderResources.INSTANCE.css().jsdropdownactive()); - } else { - dropdownTitle.removeClassName(EventHeaderResources.INSTANCE.css().jsdropdownactive()); - } - } - }; - - presenter.forPlaceSelection(new PlaceCallback() { - @Override - public void forPlace(final AbstractEventPlace place, String title, boolean active) { - DropdownItem dropdownItem = new DropdownItem(title, presenter.getUrl(place), active); - dropdownItem.addDomHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - if(LinkUtil.handleLinkClick((Event) event.getNativeEvent())) { - event.preventDefault(); - presenter.navigateTo(place); - } - } - }, ClickEvent.getType()); - dropdownContent.add(dropdownItem); - } - }); - } - - private String withoutPrefix(String title, String... prefixes) { - for (String prefix : prefixes) { - if(title.startsWith(prefix)) { - return title.substring(prefix.length(), title.length()); - } - } - return title; - } - - private void hide(Element... elementsToHide) { - for (Element element : elementsToHide) { -// element.getStyle().setDisplay(Display.NONE); - element.removeFromParent(); - } - } -} +package com.sap.sailing.gwt.home.desktop.partials.eventheader; + +import java.util.Date; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.AnchorElement; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.HeadingElement; +import com.google.gwt.dom.client.SpanElement; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.UIObject; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.communication.eventview.EventViewDTO; +import com.sap.sailing.gwt.home.communication.eventview.HasRegattaMetadata; +import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingButtons; +import com.sap.sailing.gwt.home.desktop.partials.sharing.SharingMetadataProvider; +import com.sap.sailing.gwt.home.desktop.places.event.EventView; +import com.sap.sailing.gwt.home.desktop.places.event.EventView.PlaceCallback; +import com.sap.sailing.gwt.home.desktop.places.event.EventView.Presenter; +import com.sap.sailing.gwt.home.shared.places.event.AbstractEventPlace; +import com.sap.sailing.gwt.home.shared.utils.DropdownHandler; +import com.sap.sailing.gwt.home.shared.utils.EventDatesFormatterUtil; +import com.sap.sailing.gwt.home.shared.utils.LabelTypeUtil; +import com.sap.sailing.gwt.home.shared.utils.LogoUtil; +import com.sap.sailing.gwt.ui.client.StringMessages; +import com.sap.sse.common.Util; +import com.sap.sse.gwt.client.LinkUtil; + +public class EventHeader extends Composite { + private static EventHeaderUiBinder uiBinder = GWT.create(EventHeaderUiBinder.class); + + interface EventHeaderUiBinder extends UiBinder { + } + + @UiField StringMessages i18n; + + @UiField DivElement eventLogo; + @UiField AnchorElement eventLogoAnchorUi; + @UiField HeadingElement staticTitle; + @UiField SpanElement eventName; + @UiField DivElement eventState; + @UiField DivElement dropdownTitle; + @UiField SpanElement dropdownEventName; + @UiField DivElement dropdownEventState; + @UiField AnchorElement dropdownTrigger; + @UiField DivElement eventDate; + @UiField SpanElement eventVenue; + @UiField DivElement eventVenueContainer; + @UiField AnchorElement eventLink; + @UiField DivElement competitors; + @UiField DivElement races; + @UiField DivElement eventCategory; + @UiField DivElement courseAreaUi; + @UiField FlowPanel dropdownContent; + @UiField SharingButtons sharing; + + private EventViewDTO event; + private Presenter presenter; + + public EventHeader(EventView.Presenter presenter) { + this.event = presenter.getEventDTO(); + this.presenter = presenter; + EventHeaderResources.INSTANCE.css().ensureInjected(); + initWidget(uiBinder.createAndBindUi(this)); + initFields(); + initSharing(); + } + + private void initSharing() { + sharing.setUp(new SharingMetadataProvider() { + @Override + public String getShortText() { + // TODO regatta details? + String dateString = EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate()); + return StringMessages.INSTANCE.eventSharingShortText(event.getDisplayName(), event.getLocationOrVenue(), dateString); + } + + @Override + public String getLongText(String url) { + // TODO regatta details? + String dateString = EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate()); + return StringMessages.INSTANCE.eventSharingLongText(event.getDisplayName(), event.getLocationOrVenue(), dateString, url); + } + }); + } + + private void initFields() { + LogoUtil.setEventLogo(eventLogo, event); + if (presenter.showRegattaMetadata()) { + presenter.getCurrentEventNavigation().configureAnchorElement(eventLogoAnchorUi); + } + String eventDisplayName = event.getDisplayName(); + String nameToShow; + if(presenter.showRegattaMetadata()) { + HasRegattaMetadata regattaMetadata = presenter.getRegattaMetadata(); + String regattaDisplayName = regattaMetadata.getDisplayName(); + if (regattaDisplayName.toLowerCase().contains(eventDisplayName.toLowerCase())) { + nameToShow = regattaDisplayName; + } else { + nameToShow = eventDisplayName + " - " + regattaDisplayName; + } + + if (regattaMetadata.getCompetitorsCount() > 0) { + competitors.setInnerText((i18n.competitorsCount(regattaMetadata.getCompetitorsCount()))); + } else { + hide(competitors); + } + if (regattaMetadata.getRaceCount() > 0) { + races.setInnerText((i18n.racesCount(regattaMetadata.getRaceCount()))); + } else { + hide(races); + } + if (regattaMetadata.getDefaultCourseAreaName() != null) { + courseAreaUi.setInnerText(i18n.courseAreaName(regattaMetadata.getDefaultCourseAreaName())); + } else { + hide(courseAreaUi); + } + if (regattaMetadata.getLeaderboardGroupNames() != null) { + eventCategory.setInnerText(Util.joinStrings(", ", regattaMetadata.getLeaderboardGroupNames())); + } else { + hide(eventCategory); + } + Date startDate = regattaMetadata.getStartDate() != null ? regattaMetadata.getStartDate() : event.getStartDate(); + Date endDate = regattaMetadata.getEndDate() != null ? regattaMetadata.getEndDate() : event.getEndDate(); + eventDate.setInnerHTML(EventDatesFormatterUtil.formatDateRangeWithYear(startDate, endDate)); + + hide(eventVenueContainer, eventLink); + } else { + nameToShow = eventDisplayName; + eventDate.setInnerHTML(EventDatesFormatterUtil.formatDateRangeWithYear(event.getStartDate(), event.getEndDate())); + eventVenue.setInnerText(event.getLocationAndVenueAndCountry()); + + if(event.getOfficialWebsiteURL() != null) { + String title = withoutPrefix(event.getOfficialWebsiteURL(), "http://", "https://"); + if(title.length() > 35) { + title = StringMessages.INSTANCE.officalEventWebsite(); + } + eventLink.setInnerText(title); + eventLink.setHref(event.getOfficialWebsiteURL()); + } else { + hide(eventLink); + } + hide(competitors, races, courseAreaUi, eventCategory); + } + initTitleAndSelection(nameToShow); + } + + private void initTitleAndSelection(String nameToShow) { + if(!presenter.needsSelectionInHeader()) { + eventName.setInnerText(nameToShow); + LabelTypeUtil.renderLabelType(eventState, event.getState().getStateMarker()); + UIObject.ensureDebugId(eventState, "EventStateLabelDiv"); + hide(dropdownTitle); + } else { + dropdownEventName.setInnerText(nameToShow); + LabelTypeUtil.renderLabelType(dropdownEventState, presenter.showRegattaMetadata() ? presenter.getRegattaMetadata().getState().getStateMarker() : event.getState().getStateMarker()); + UIObject.ensureDebugId(dropdownEventState, "EventStateLabelDiv"); + hide(staticTitle); + initDropdown(); + } + } + + private void initDropdown() { + new DropdownHandler(dropdownTrigger, dropdownContent.getElement()) { + @Override + protected void dropdownStateChanged(boolean dropdownShown) { + if(dropdownShown) { + dropdownTitle.addClassName(EventHeaderResources.INSTANCE.css().jsdropdownactive()); + } else { + dropdownTitle.removeClassName(EventHeaderResources.INSTANCE.css().jsdropdownactive()); + } + } + }; + + presenter.forPlaceSelection(new PlaceCallback() { + @Override + public void forPlace(final AbstractEventPlace place, String title, boolean active) { + DropdownItem dropdownItem = new DropdownItem(title, presenter.getUrl(place), active); + dropdownItem.addDomHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + if(LinkUtil.handleLinkClick((Event) event.getNativeEvent())) { + event.preventDefault(); + presenter.navigateTo(place); + } + } + }, ClickEvent.getType()); + dropdownContent.add(dropdownItem); + } + }); + } + + private String withoutPrefix(String title, String... prefixes) { + for (String prefix : prefixes) { + if(title.startsWith(prefix)) { + return title.substring(prefix.length(), title.length()); + } + } + return title; + } + + private void hide(Element... elementsToHide) { + for (Element element : elementsToHide) { +// element.getStyle().setDisplay(Display.NONE); + element.removeFromParent(); + } + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventsrecent/EventsOverviewRecent.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventsrecent/EventsOverviewRecent.ui.xml index 758bfd1b00e..ca91c83f860 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventsrecent/EventsOverviewRecent.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventsrecent/EventsOverviewRecent.ui.xml @@ -1,6 +1,6 @@ - + diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventstage/EventOverviewStage.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventstage/EventOverviewStage.ui.xml index 437d15c2855..21950df461b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventstage/EventOverviewStage.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventstage/EventOverviewStage.ui.xml @@ -4,7 +4,6 @@ xmlns:sp="urn:import:com.sap.sailing.gwt.home.shared.partials" xmlns:dp="urn:import:com.sap.sailing.gwt.home.desktop.partials"> -
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventsupcoming/EventsOverviewUpcoming.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventsupcoming/EventsOverviewUpcoming.ui.xml index 8bcbcd52241..91243e608ae 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventsupcoming/EventsOverviewUpcoming.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/eventsupcoming/EventsOverviewUpcoming.ui.xml @@ -1,7 +1,6 @@ - @@ -13,7 +12,7 @@

- + :