Merge branch 'master' into ubilabs--tracking_app--fiori_design

This commit is contained in:
Bennet Brunsen
2016-06-02 09:48:36 +02:00
96 changed files with 3673 additions and 325 deletions
@@ -14,6 +14,18 @@ The devices have three LEDs whose status works as follows:
More information on running the WindBots can be found [here](https://igtimi.desk.com/customer/portal/articles/1494533-yachtbot-tracker-basic-operation?b_id=1690).
# Operating near country borders
Confirm signal strengths by enabling cell debugging by adding two lines in the “WindBot prerequisites” section right at the top…
```
log file debug raw
log debug cell on
```
The device will already switch between carriers if an alternative carriers signal is stronger. We dont have any control over this its a low level cellular protocol thing. Brent can help with forcing carrier selection using the “CELL OPERATOR <X>” command. It can be a bit hit-and-miss to get <X> right sometimes, but if we send him logs with the debugging on, he should be able to give us a config change that forces the connection to stay with the carrier that we see in the logs.
Todo: clarify what to look for in the logs
# Update Firmware
[How to update the firmware](https://igtimi.desk.com/customer/portal/articles/1122866-how-to-update-the-firmware-in-the-yachtbot-trackers?b_id=1690)
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+559
View File
@@ -0,0 +1,559 @@
<Macro Headers>
SetEnvIf Request_Method POST REQUEST_IS_POST=1
SetEnvIf Request_URI ^/gateway.* REQUEST_IS_POST=1
SetEnvIf Request_URI ^/gwt/RegattaOverview.* REQUEST_IS_POST=1
SetEnvIf Request_URI ^/?$ REQUEST_IS_POST=1
Header set Expires "Sun, 19 Nov 1978 05:00:00 GMT" env=REQUEST_IS_POST
Header set Cache-Control no-cache,no-store,must-revalidate,post-check=0,pre-check=0 env=REQUEST_IS_POST
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/json
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE image/gif
AddOutputFilterByType DEFLATE image/png
AddOutputFilterByType DEFLATE image/jpeg
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AllowEncodedSlashes On
</Macro>
<Macro Rewrite $IP $PORT>
RewriteRule ^/(.*)$ http://$IP:$PORT/$1 [P,L]
ProxyPassReverse / http://$IP:$PORT/
</Macro>
<Macro SSL>
SSLEngine On
SSLCertificateFile /etc/pki/tls/certs/star_sapsailing_com.crt
SSLCertificateKeyFile /etc/pki/tls/private/star_sapsailing_com.key
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
</Macro>
<Macro Status $HOSTNAME $PATH>
<VirtualHost *:80>
ServerName $HOSTNAME
<Location /$PATH>
SetHandler server-status
Order deny,allow
Allow from all
</Location>
CustomLog logs/services_log combined
</VirtualHost>
</Macro>
<Macro Home $HOSTNAME $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Home.html" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Home-SSL $HOSTNAME $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
RedirectPermanent / https://$HOSTNAME/
</VirtualHost>
<VirtualHost *:443>
ServerName $HOSTNAME
Use SSL
Use Headers
RewriteEngine on
RewriteRule ^(/)?$ "https://$HOSTNAME/gwt/Home.html" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Plain $HOSTNAME $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Plain-SSL $HOSTNAME $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
RedirectPermanent / https://$HOSTNAME/
</VirtualHost>
<VirtualHost *:443>
ServerName $HOSTNAME
Use SSL
Use Headers
RewriteEngine on
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro HardRedirect $HOSTNAME $TARGETURL>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RedirectMatch /(.*)$ $TARGETURL/
</VirtualHost>
</Macro>
<Macro LiveCenterWithLanguageSubstitution-ARCHIVE $HOSTNAME $EVENTUUID>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Home.html?locale=de#/event/:eventId=$EVENTUUID" [L,NE]
RewriteCond %{REQUEST_URI} "^/en$"
RewriteRule ^(/en)?$ "http://$HOSTNAME/gwt/Home.html?locale=en#/event/:eventId=$EVENTUUID" [L,NE]
Use Rewrite 172.31.30.89 8888
</VirtualHost>
</Macro>
<Macro LiveCenterWithLanguageSubstitution $HOSTNAME $EVENTUUID $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Home.html?locale=de#/event/:eventId=$EVENTUUID" [L,NE]
RewriteCond %{REQUEST_URI} "^/en$"
RewriteRule ^(/en)?$ "http://$HOSTNAME/gwt/Home.html?locale=en#/event/:eventId=$EVENTUUID" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro RibDashboard $HOSTNAME $LEADERBOARD_NAME $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/dashboards/RibDashboard.html?leaderboardName=$LEADERBOARD_NAME&%{QUERY_STRING}" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro RegattaOverview-WithLeaderboard-WithLanguage $HOSTNAME $EVENTUUID $LANG $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/RegattaOverview.html?event=$EVENTUUID&locale=$LANG&enableLeaderboard=true" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro RegattaOverview-WithLanguage $HOSTNAME $EVENTUUID $LANG $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/RegattaOverview.html?event=$EVENTUUID&locale=$LANG" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro RegattaOverview-WithLeaderboard $HOSTNAME $EVENTUUID $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/RegattaOverview.html?event=$EVENTUUID&enableLeaderboard=true" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Event $HOSTNAME $EVENTUUID $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Home.html?%{QUERY_STRING}#/event/:eventId=$EVENTUUID" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Event-SSL $HOSTNAME $EVENTUUID $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
RedirectPermanent / https://$HOSTNAME/
</VirtualHost>
<VirtualHost *:443>
ServerName $HOSTNAME
Use SSL
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "https://$HOSTNAME/gwt/Home.html?%{QUERY_STRING}#/event/:eventId=$EVENTUUID" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Series $HOSTNAME $EVENTUUID $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Home.html?%{QUERY_STRING}#/series/:seriesId=$EVENTUUID" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Series-SSL $HOSTNAME $EVENTUUID $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
RedirectPermanent / https://$HOSTNAME/
</VirtualHost>
<VirtualHost *:443>
ServerName $HOSTNAME
Use SSL
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "https://$HOSTNAME/gwt/Home.html?%{QUERY_STRING}#/series/:seriesId=$EVENTUUID" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro EventRegattaIntro $HOSTNAME $EVENTUUID $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Home.html#/regatta/overview/:eventId=$EVENTUUID" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Event-WithLanguage $HOSTNAME $EVENTUUID $LANG $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Home.html?locale=$LANG#EventPlace:eventId=$EVENTUUID" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Event-ARCHIVE $HOSTNAME $EVENTUUID>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Home.html#/event/:eventId=$EVENTUUID" [L,NE]
Use Rewrite 172.31.30.89 8888
</VirtualHost>
</Macro>
<Macro Event-ARCHIVE-SSL $HOSTNAME $EVENTUUID>
<VirtualHost *:80>
ServerName $HOSTNAME
RedirectPermanent / https://$HOSTNAME/
</VirtualHost>
<VirtualHost *:443>
ServerName $HOSTNAME
Use SSL
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "https://$HOSTNAME/gwt/Home.html#/event/:eventId=$EVENTUUID" [L,NE]
Use Rewrite 172.31.30.89 8888
</VirtualHost>
</Macro>
<Macro RegattaOverview $HOSTNAME $EVENTUUID $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/RegattaOverview.html?event=$EVENTUUID" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Events $HOSTNAME $EVENTNAME $EXTRA $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/events/$EVENTNAME/$EXTRA" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Spectator-WithParam $HOSTNAME $GROUPNAME $EXTRA $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Spectator.html?leaderboardGroupName=$GROUPNAME&$EXTRA" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Spectator-WithLanguage $HOSTNAME $GROUPNAME $LANG $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Spectator.html?leaderboardGroupName=$GROUPNAME&showRaceDetails=true&locale=$LANG" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Spectator $HOSTNAME $GROUPNAME $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Spectator.html?leaderboardGroupName=$GROUPNAME&showRaceDetails=true" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Leaderboard $HOSTNAME $GROUPNAME $NAME $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Leaderboard.html?name=$NAME&leaderboardGroupName=$GROUPNAME&showRaceDetails=true&root=leaderboardGroupPanel" [L,NE]
Use Rewrite $IP $PORT
</VirtualHost>
</Macro>
<Macro Leaderboard-WithParam $HOSTNAME $GROUPNAME $NAME $EXTRA $IP $PORT>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Leaderboard.html?name=$NAME&leaderboardGroupName=$GROUPNAME&$EXTRA" [L,NE]
Use Rewrite-ARCHIVE1
</VirtualHost>
</Macro>
<Macro Spectator-ARCHIVE $HOSTNAME $GROUPNAME>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Spectator.html?leaderboardGroupName=$GROUPNAME&showRaceDetails=true" [L,NE]
Use Rewrite 172.31.30.89 8888
</VirtualHost>
</Macro>
<Macro Spectator-ARCHIVE-SSL $HOSTNAME $GROUPNAME>
<VirtualHost *:80>
ServerName $HOSTNAME
RedirectPermanent / https://$HOSTNAME/
</VirtualHost>
<VirtualHost *:443>
ServerName $HOSTNAME
Use SSL
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "https://$HOSTNAME/gwt/Spectator.html?leaderboardGroupName=$GROUPNAME&showRaceDetails=true" [L,NE]
Use Rewrite 172.31.30.89 8888
</VirtualHost>
</Macro>
<Macro Spectator-ARCHIVE-WithParam $HOSTNAME $GROUPNAME $EXTRA>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Spectator.html?leaderboardGroupName=$GROUPNAME&$EXTRA" [L,NE]
Use Rewrite 172.31.30.89 8888
</VirtualHost>
</Macro>
<Macro Events-ARCHIVE $HOSTNAME $EVENTNAME $EXTRA>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/events/$EVENTNAME/$EXTRA" [L,NE]
Use Rewrite 172.31.30.89 8888
</VirtualHost>
</Macro>
<Macro Spectator-DEV $HOSTNAME $GROUPNAME>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Spectator.html?leaderboardGroupName=$GROUPNAME&showRaceDetails=true" [L,NE]
Use Rewrite 172.31.18.218 8888
</VirtualHost>
</Macro>
<Macro Spectator-DEV-WithParam $HOSTNAME $GROUPNAME $EXTRA>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/gwt/Spectator.html?leaderboardGroupName=$GROUPNAME&$EXTRA" [L,NE]
Use Rewrite 172.31.18.218 8888
</VirtualHost>
</Macro>
<Macro Events-DEV $HOSTNAME $EVENTNAME $EXTRA>
<VirtualHost *:80>
ServerName $HOSTNAME
Use Headers
RewriteEngine on
RewriteCond %{REQUEST_URI} "^(/)?$"
RewriteRule ^(/)?$ "http://$HOSTNAME/events/$EVENTNAME/$EXTRA" [L,NE]
Use Rewrite 172.31.18.218 8888
</VirtualHost>
</Macro>
+16 -6
View File
@@ -39,7 +39,17 @@ start_servers() {
echo "Appending macro invocation to $APACHE_CONFIG_DIR/001-events.conf to map internal IP $INSTANCE_INTERNAL_IP4 to plain server running $SERVER_PORT..." >>/var/log/sailing.out
echo "Use Plain-SSL ${INSTANCE_INTERNAL_IP4} 127.0.0.1 $SERVER_PORT" >>$APACHE_CONFIG_DIR/001-events.conf
echo "Appending macro invocation to $APACHE_CONFIG_DIR/001-events.conf to map ${server_name}.sapsailing.com to event with ID $EVENT_ID with server running on local port $SERVER_PORT..." >>/var/log/sailing.out
echo "## EVENT ${server_name}" >>$APACHE_CONFIG_DIR/001-events.conf
echo "Use Event ${server_name}.sapsailing.com \"$EVENT_ID\" 127.0.0.1 $SERVER_PORT" >>$APACHE_CONFIG_DIR/001-events.conf
echo "Use Event-SSL ${server_name}.sapsailing.com \"$EVENT_ID\" 127.0.0.1 $SERVER_PORT" >>$APACHE_CONFIG_DIR/001-events.conf
# check if an secondary event shall be pasted to 001-events.conf
if [[ ${HTTP_SEC_EVENT} && ${HTTP_SEC_EVENT_ID} ]]; then
http_sec_event="`echo $HTTP_SEC_EVENT | tr [A-Z] [a-z]`"
echo "Appending macro invocation to $APACHE_CONFIG_DIR/001-events.conf to map ${http_sec_event}.sapsailing.com to event with ID ${HTTP_SEC_EVENT_ID} with server running on local port $SERVER_PORT..." >>/var/log/sailing.out
echo "## EVENT ${http_sec_event}" >>$APACHE_CONFIG_DIR/001-events.conf
echo "Use Event ${http_sec_event}.sapsailing.com \"$HTTP_SEC_EVENT_ID\" 127.0.0.1 $SERVER_PORT" >>$APACHE_CONFIG_DIR/001-events.conf
echo "Use Event-SSL ${http_sec_event}.sapsailing.com \"$HTTP_SEC_EVENT_ID\" 127.0.0.1 $SERVER_PORT" >>$APACHE_CONFIG_DIR/001-events.conf
fi
HTTP_LOGROTATE=/etc/logrotate.d/httpd
echo "Patching $HTTP_LOGROTATE so that old logs go to /var/log/old/$SERVER_NAME/$INSTANCE_IP4" >>/var/log/sailing.out
sed -i -e "s/\/var\/log\/old\/\([^/]*\)\/\([^/ ]*\)/\/var\/log\/old\/$SERVER_NAME\/$INSTANCE_IP4/" $HTTP_LOGROTATE
@@ -68,11 +78,12 @@ launch_httpd() {
source $SERVERS_DIR/$FIRST_SERVER/env.sh
# Append Apache macro invocation for /internal-server-status based on mod_status and INSTANCE_DNS to $APACHE_CONFIG_DIR/001-events.conf
echo "Appending macro usage for $INSTANCE_DNS/internal-server-status URL for mod_status based Apache monitoring to $APACHE_CONFIG_DIR/001-events.conf" >>/var/log/sailing.out
echo "## SERVER STATUS" >>$APACHE_CONFIG_DIR/001-events.conf
echo "Use Status $INSTANCE_DNS internal-server-status" >>$APACHE_CONFIG_DIR/001-events.conf
echo "Launching httpd..." >>/var/log/sailing.out
service httpd start
else
echo Can't launch httpd; start script doesn't seem to be installed at /etc/init.d/httpd
echo "Can't launch httpd; start script doesn't seem to be installed at /etc/init.d/httpd"
fi
}
@@ -80,7 +91,7 @@ launch_httpd() {
case "$1" in
start)
start_servers
;;
;;
stop)
stop_servers
;;
@@ -89,9 +100,8 @@ case "$1" in
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|status|stop}"
RETVAL=3
echo $"Usage: $0 {start|status|stop}"
RETVAL=3
esac
exit $RETVAL
exit $RETVAL
+1
View File
@@ -74,6 +74,7 @@ SAP is at the center of todays technology revolution, developing innovations
* [[505 worlds Kiel 2014 event page|wiki/505-worlds-kiel-2014]]
* [[Kieler Woche event page|wiki/kieler-woche-2015]]
* [[Charleston Race Week 2016|wiki/Charleston-Race-Week-2016]]
* [[Sailing Leagues 2016|wiki/Sailing-Leagues-2016]]
* Lean DI Support
* [[Setting up internal Jenkins on SAP Monsoon|wiki/setting-up-jenkins-on-sap-monsoon]]
@@ -0,0 +1,63 @@
Speed=速力
SpeedTenSecondsBefore=10 秒前の速力
DistanceTraveled=移動した距離
Name=名称
LegType=レグタイプ
SailID=セールナンバー
Year=
LegNumber=レグ番号
Nationality=国籍
Acronym=頭字語
Regatta=レガッタ
CourseArea=コースエリア
BoatClass=艇種
Fleet=フリート
Race=レース
Competitor=競技者
Boat=
Team=チーム
LeaderboardSailingDomainRetrieverChain=リーダーボード
RaceSailingDomainRetrieverChain=レース
LegSailingDomainRetrieverChain=レグ
GPSFixSailingDomainRetrieverChain=GPS フィックス
MarkPassingSailingDomainRetrieverChain=マーク通過
RaceResultSailingDomainRetrieverChain=レース結果
RaceOfCompetitorSailingDomainRetrieverChain=競技者のレース
LeaderboardGroup=リーダーボードグループ
Leaderboard=リーダーボード
Leg=レグ
MarkPassing=マーク通過
LegOfCompetitor=競技者のレグ
GpsFix=GPS フィックス
WindStrengthInBeaufort=ビューフォート風力
Bft0=平穏
Bft1=至軽風
Bft2=軽風
Bft3=軟風
Bft4=和風
Bft5=疾風
Bft6=雄風
Bft7=強風
Bft8=疾強風
Bft9=大強風
Bft10=全強風
Bft11=暴風
Bft12=颶風 (ぐふう)
RelativeScoreInRace=レース中の相対スコア (0 が最高、1 が最低)
WindSpeedInBeaufort=風速 (Bft)
DistanceAtStart=スタート時のスタートラインまでの距離
SpeedWhenStarting=スタート時の速力
SpeedTenSecondsBeforeStart=スタート 10 秒前の速力
RankAtFirstMark=第一マークでのランク
NumberOfManeuvers=マニューバー回数
NumberOfTacks=タック回数
NumberOfJibes=ジャイブ回数
NumberOfPenaltyCircles=ペナルティー回転の数
RankGainsOrLosses=ランク上下
DistanceToStarboardSideAtStart=スターボード側までの距離 (長さの %)
NumberOfPodiumFinish=表彰台回数
NumberOfWins=優勝回数
RankGainsOrLossesBetweenFirstMarkAndFinish=ランク上下 (第一マーク -> フィニッシュ)
IsTracked=追跡済
NumberOfCompetitorFixes=競技者フィックスの数
NumberOfMarkFixes=マークフィックスの数
@@ -0,0 +1,63 @@
Speed=Скорость
SpeedTenSecondsBefore=Скорость за 10 с до
DistanceTraveled=Пройденная дистанция
Name=Название
LegType=Тип отрезка
SailID=Номер на парусе
Year=Год
LegNumber=Номер отрезка
Nationality=Гражданство
Acronym=Сокращение
Regatta=Регата
CourseArea=Зона гонки
BoatClass=Класс лодок
Fleet=Флот
Race=Гонка
Competitor=Участник
Boat=Лодка
Team=Команда
LeaderboardSailingDomainRetrieverChain=Таблицы лидеров
RaceSailingDomainRetrieverChain=Гонки
LegSailingDomainRetrieverChain=Отрезки
GPSFixSailingDomainRetrieverChain=Замеры GPS
MarkPassingSailingDomainRetrieverChain=Прохождения отметок
RaceResultSailingDomainRetrieverChain=Результаты гонки
RaceOfCompetitorSailingDomainRetrieverChain=Гонки участников
LeaderboardGroup=Группа таблиц лидеров
Leaderboard=Таблица лидеров
Leg=Отрезок
MarkPassing=Прохождение отметки
LegOfCompetitor=Отрезок участника
GpsFix=Замер GPS
WindStrengthInBeaufort=Сила ветра по шкале Бофорта
Bft0=Штиль
Bft1=Тихий
Bft2=Легкий
Bft3=Слабый
Bft4=Умеренный
Bft5=Свежий
Bft6=Сильный
Bft7=Крепкий
Bft8=Очень крепкий
Bft9=Шторм
Bft10=Сильный шторм
Bft11=Жестокий шторм
Bft12=Ураган
RelativeScoreInRace=Относительная оценка в гонке (0 лучшая; 1 худшая)
WindSpeedInBeaufort=Скорость ветра по шкале Бофорта
DistanceAtStart=Дистанция до старта при старте
SpeedWhenStarting=Скорость при старте
SpeedTenSecondsBeforeStart=Скорость за 10 с до старта
RankAtFirstMark=Ранг на первой отметке
NumberOfManeuvers=Число маневров
NumberOfTacks=Число поворотов оверштаг
NumberOfJibes=Число поворотов фордевинд
NumberOfPenaltyCircles=Число штрафных кругов
RankGainsOrLosses=Повышения или понижения ранга
DistanceToStarboardSideAtStart=Дистанция до правой стороны (% длины)
NumberOfPodiumFinish=Число призовых финишей
NumberOfWins=Число побед
RankGainsOrLossesBetweenFirstMarkAndFinish=Повышения или понижения ранга (1-я отметка -> финиш)
IsTracked=Отслеживается
NumberOfCompetitorFixes=Число замеров участника
NumberOfMarkFixes=Число замеров отметки
@@ -0,0 +1,63 @@
Speed=速度
SpeedTenSecondsBefore=前 10 秒的速度
DistanceTraveled=航行距离
Name=名称
LegType=航段形式
SailID=帆号
Year=年份
LegNumber=航段编号
Nationality=国籍
Acronym=首字母缩略词
Regatta=比赛
CourseArea=场地区域
BoatClass=船只级别
Fleet=船队
Race=比赛轮次
Competitor=参赛队
Boat=船只
Team=团队
LeaderboardSailingDomainRetrieverChain=积分榜
RaceSailingDomainRetrieverChain=比赛轮次
LegSailingDomainRetrieverChain=航段
GPSFixSailingDomainRetrieverChain=GPS 修复
MarkPassingSailingDomainRetrieverChain=绕标
RaceResultSailingDomainRetrieverChain=比赛轮次结果
RaceOfCompetitorSailingDomainRetrieverChain=参赛队的比赛轮次
LeaderboardGroup=积分榜分组
Leaderboard=积分榜
Leg=航段
MarkPassing=绕标
LegOfCompetitor=参赛队的航段
GpsFix=GPS 修复
WindStrengthInBeaufort=风力(蒲福风级)
Bft0=无风
Bft1=软风
Bft2=轻风
Bft3=微风
Bft4=和风
Bft5=劲风
Bft6=强风
Bft7=疾风
Bft8=大风
Bft9=烈风
Bft10=暴风
Bft11=飓风
Bft12=台风
RelativeScoreInRace=比赛轮次中的相对得分(0 最佳;1 最差)
WindSpeedInBeaufort=风速(单位:Bft
DistanceAtStart=起航前与起航线的距离
SpeedWhenStarting=起航时的速度
SpeedTenSecondsBeforeStart=起航前 10 秒的速度
RankAtFirstMark=在第一个标志的名次
NumberOfManeuvers=操作数量
NumberOfTacks=迎风转向次数
NumberOfJibes=顺风转向次数
NumberOfPenaltyCircles=惩罚圈数
RankGainsOrLosses=名次进阶或落后
DistanceToStarboardSideAtStart=与右舷的距离(长度百分比)
NumberOfPodiumFinish=跻身颁奖台次数
NumberOfWins=获胜次数
RankGainsOrLossesBetweenFirstMarkAndFinish=名次进阶或落后(第一个标志 -> 结束)
IsTracked=是否跟踪
NumberOfCompetitorFixes=参赛队修复次数
NumberOfMarkFixes=标志修复次数
@@ -0,0 +1,63 @@
Speed=速度
SpeedTenSecondsBefore=前 10 秒的速度
DistanceTraveled=航行距离
Name=名称
LegType=航段形式
SailID=帆号
Year=年份
LegNumber=航段编号
Nationality=国籍
Acronym=首字母缩略词
Regatta=比赛
CourseArea=场地区域
BoatClass=船只级别
Fleet=船队
Race=比赛轮次
Competitor=参赛队
Boat=船只
Team=团队
LeaderboardSailingDomainRetrieverChain=积分榜
RaceSailingDomainRetrieverChain=比赛轮次
LegSailingDomainRetrieverChain=航段
GPSFixSailingDomainRetrieverChain=GPS 修复
MarkPassingSailingDomainRetrieverChain=绕标
RaceResultSailingDomainRetrieverChain=比赛轮次结果
RaceOfCompetitorSailingDomainRetrieverChain=参赛队的比赛轮次
LeaderboardGroup=积分榜分组
Leaderboard=积分榜
Leg=航段
MarkPassing=绕标
LegOfCompetitor=参赛队的航段
GpsFix=GPS 修复
WindStrengthInBeaufort=风力(蒲福风级)
Bft0=无风
Bft1=软风
Bft2=轻风
Bft3=微风
Bft4=和风
Bft5=劲风
Bft6=强风
Bft7=疾风
Bft8=大风
Bft9=烈风
Bft10=暴风
Bft11=飓风
Bft12=台风
RelativeScoreInRace=比赛轮次中的相对得分(0 最佳;1 最差)
WindSpeedInBeaufort=风速(单位:Bft
DistanceAtStart=起航前与起航线的距离
SpeedWhenStarting=起航时的速度
SpeedTenSecondsBeforeStart=起航前 10 秒的速度
RankAtFirstMark=在第一个标志的名次
NumberOfManeuvers=操作数量
NumberOfTacks=迎风转向次数
NumberOfJibes=顺风转向次数
NumberOfPenaltyCircles=惩罚圈数
RankGainsOrLosses=名次进阶或落后
DistanceToStarboardSideAtStart=与右舷的距离(长度百分比)
NumberOfPodiumFinish=跻身颁奖台次数
NumberOfWins=获胜次数
RankGainsOrLossesBetweenFirstMarkAndFinish=名次进阶或落后(第一个标志 -> 结束)
IsTracked=是否跟踪
NumberOfCompetitorFixes=参赛队修复次数
NumberOfMarkFixes=标志修复次数
@@ -0,0 +1,268 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:43:14Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties" source-language="en" target-language="ja">
<header>
<skl>
<internal-file crc="2476e2fa472ba5cb7a43d465af58c5c7" form="base64">H4sIAAAAAAAAAIVVTW8aMRC9+1fMpVJyiATptypXAiIIFfkQoEY9mt0BLBYb2SaU/vrO2Muuk0b04p1582zPjO23sx1iKWc8ijjO0cywsKb0fVxahykG3Y6HRQTEjfZBmQLnTj1jRbNPAJwQca+2KHkQE1zNjzuU9AU2xEzpanwj+QP3++0CnfiFykkemJ2wyK/D9ypoa1Slw1FmtugVzprjVtZfMcWVCkHJ+isGdu889hwqmUxgW/StCoNKeS/ZgmiKYYUYZBzFVBUoeaAVtjsMOlgnWzMuEOeKOaqt5IESVyW6hVWu5Mq0Wd3YrdJmisFpfEY3WJMnM5qP+5wjc9xzS86vuPJi9Dgb6t/naMS4Igqtd6fc5pFKJua5CUyDmpdSnaLfV+F/CUOipSkPy7Zt/60U7BJaus9bOnJ2v8ubBxHJKXmUe8aNyWt9URAT8tzibaPti/aQRztP/Tr1TTxpU86CQ7MK67Hpo9rTUwiSYTjhoA2cIqK/DB05UNWWra6c6NU6gNKO3evaXTjEP8jIezlCEyrMoA/yzlJBKuTgRzl06NcZ8knS9tasMuizvKXl4UC5sftFjlQVA19P3FUNdDuEWJdy7Mqf2laUBvgGu5a3e+d0oQzS86ro8T3jrCARGJv0SmoMPIPcAMd34KJDWuHDN+jCgY4yXKb+sZC8bp6P6sKdW4ZGWXphFhQxGmEJlpIiBFRIRtKqpzWJFbt8wEmnDgQlCp/zm4qW1n4ta/W6U2U2vTDUlDXfGMk+7xoRYEgkWXpY3lFX9nSHvUwI36AGa1hzVWxyRvSb6A9Njcqi0W+ij0hSF44D7YrqBa0OQB2JWY/oJfkHN7HeEzfmHSGwDhLYKrflHiS10uWb7W4IwAy4eMfbTuI9v2zzs6Xeb4faaL/Os4swJDwrhw48L4LdfzPvYzggmuYEeqasN3irJLjo1scCV9/rHS/F2NOfqNjQr2nsoTabLNpnHwUxS6iNQNLK9qTd5jU57plofwGIogiCRAcAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:06Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Speed" resname="Speed">
<source>Speed</source>
<target>速力</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SpeedTenSecondsBefore" resname="SpeedTenSecondsBefore">
<source>Speed 10s before</source>
<target>10 秒前の速力</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="DistanceTraveled" resname="DistanceTraveled">
<source>Distance Traveled</source>
<target state="translated">移動した距離</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Name" resname="Name">
<source>Name</source>
<target state="translated">名称</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegType" resname="LegType">
<source>Leg Type</source>
<target state="translated">レグタイプ</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SailID" resname="SailID">
<source>Sail Number</source>
<target>セールナンバー</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Year" resname="Year">
<source>Year</source>
<target>年</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegNumber" resname="LegNumber">
<source>Leg Number</source>
<target>レグ番号</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Nationality" resname="Nationality">
<source>Nationality</source>
<target state="translated">国籍</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Acronym" resname="Acronym">
<source>Acronym</source>
<target>頭字語</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Regatta" resname="Regatta">
<source>Regatta</source>
<target state="translated">レガッタ</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="CourseArea" resname="CourseArea">
<source>Course Area</source>
<target>コースエリア</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="BoatClass" resname="BoatClass">
<source>Boat Class</source>
<target state="translated">艇種</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Fleet" resname="Fleet">
<source>Fleet</source>
<target state="translated">フリート</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Race" resname="Race">
<source>Race</source>
<target state="translated">レース</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Competitor" resname="Competitor">
<source>Competitor</source>
<target>競技者</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Boat" resname="Boat">
<source>Boat</source>
<target>艇</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Team" resname="Team">
<source>Team</source>
<target state="translated">チーム</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LeaderboardSailingDomainRetrieverChain" resname="LeaderboardSailingDomainRetrieverChain">
<source>Leaderboards</source>
<target state="translated">リーダーボード</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceSailingDomainRetrieverChain" resname="RaceSailingDomainRetrieverChain">
<source>Races</source>
<target>レース</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegSailingDomainRetrieverChain" resname="LegSailingDomainRetrieverChain">
<source>Legs</source>
<target state="translated">レグ</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="GPSFixSailingDomainRetrieverChain" resname="GPSFixSailingDomainRetrieverChain">
<source>GPS-Fixes</source>
<target>GPS フィックス</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="MarkPassingSailingDomainRetrieverChain" resname="MarkPassingSailingDomainRetrieverChain">
<source>Mark Passings</source>
<target>マーク通過</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceResultSailingDomainRetrieverChain" resname="RaceResultSailingDomainRetrieverChain">
<source>Race Results</source>
<target>レース結果</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceOfCompetitorSailingDomainRetrieverChain" resname="RaceOfCompetitorSailingDomainRetrieverChain">
<source>Races of Competitors</source>
<target>競技者のレース</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LeaderboardGroup" resname="LeaderboardGroup">
<source>Leaderboard Group</source>
<target state="translated">リーダーボードグループ</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Leaderboard" resname="Leaderboard">
<source>Leaderboard</source>
<target state="translated">リーダーボード</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Leg" resname="Leg">
<source>Leg</source>
<target state="translated">レグ</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="MarkPassing" resname="MarkPassing">
<source>Mark Passing</source>
<target>マーク通過</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegOfCompetitor" resname="LegOfCompetitor">
<source>Leg of competitor</source>
<target>競技者のレグ</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="GpsFix" resname="GpsFix">
<source>GPS-Fix</source>
<target>GPS フィックス</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindStrengthInBeaufort" resname="WindStrengthInBeaufort">
<source>Wind Strength in Beaufort</source>
<target>ビューフォート風力</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft0" resname="Bft0">
<source>Calm</source>
<target>平穏</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft1" resname="Bft1">
<source>Light air</source>
<target>至軽風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft2" resname="Bft2">
<source>Light breeze</source>
<target>軽風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft3" resname="Bft3">
<source>Gentle breeze</source>
<target>軟風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft4" resname="Bft4">
<source>Moderate breeze</source>
<target>和風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft5" resname="Bft5">
<source>Fresh breeze</source>
<target>疾風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft6" resname="Bft6">
<source>Strong breeze</source>
<target>雄風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft7" resname="Bft7">
<source>High wind</source>
<target>強風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft8" resname="Bft8">
<source>Gale</source>
<target>疾強風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft9" resname="Bft9">
<source>Strong gale</source>
<target>大強風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft10" resname="Bft10">
<source>Storm</source>
<target>全強風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft11" resname="Bft11">
<source>Violent storm</source>
<target>暴風</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft12" resname="Bft12">
<source>Hurricane</source>
<target>颶風 (ぐふう)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RelativeScoreInRace" resname="RelativeScoreInRace">
<source>Relative score in race (0 best; 1 worst)</source>
<target>レース中の相対スコア (0 が最高、1 が最低)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindSpeedInBeaufort" resname="WindSpeedInBeaufort">
<source>Wind speed in Bft</source>
<target>風速 (Bft)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="DistanceAtStart" resname="DistanceAtStart">
<source>Distance to start at start</source>
<target>スタート時のスタートラインまでの距離</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SpeedWhenStarting" resname="SpeedWhenStarting">
<source>Speed when starting</source>
<target>スタート時の速力</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SpeedTenSecondsBeforeStart" resname="SpeedTenSecondsBeforeStart">
<source>Speed 10s before start</source>
<target>スタート 10 秒前の速力</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RankAtFirstMark" resname="RankAtFirstMark">
<source>Rank at First Mark</source>
<target>第一マークでのランク</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfManeuvers" resname="NumberOfManeuvers">
<source>Number of Maneuvers</source>
<target>マニューバー回数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfTacks" resname="NumberOfTacks">
<source>Number of Tacks</source>
<target>タック回数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfJibes" resname="NumberOfJibes">
<source>Number of Jibes</source>
<target>ジャイブ回数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfPenaltyCircles" resname="NumberOfPenaltyCircles">
<source>Number of Penalty Circles</source>
<target>ペナルティー回転の数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RankGainsOrLosses" resname="RankGainsOrLosses">
<source>Rank Gains or Losses</source>
<target>ランク上下</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="DistanceToStarboardSideAtStart" resname="DistanceToStarboardSideAtStart">
<source>Distance to Starboard Side (% of Length)</source>
<target>スターボード側までの距離 (長さの %)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfPodiumFinish" resname="NumberOfPodiumFinish">
<source>Number of Podium Finishes</source>
<target>表彰台回数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfWins" resname="NumberOfWins">
<source>Number of Wins</source>
<target>優勝回数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RankGainsOrLossesBetweenFirstMarkAndFinish" resname="RankGainsOrLossesBetweenFirstMarkAndFinish">
<source>Rank Gains or Losses (1st Mark -&gt; Finish)</source>
<target>ランク上下 (第一マーク -&gt; フィニッシュ)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="IsTracked" resname="IsTracked">
<source>Is Tracked</source>
<target>追跡済</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfCompetitorFixes" resname="NumberOfCompetitorFixes">
<source>Number of Competitor Fixes</source>
<target>競技者フィックスの数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfMarkFixes" resname="NumberOfMarkFixes">
<source>Number of Mark Fixes</source>
<target>マークフィックスの数</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,268 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T13:02:56Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties" source-language="en" target-language="ru">
<header>
<skl>
<internal-file crc="2476e2fa472ba5cb7a43d465af58c5c7" form="base64">H4sIAAAAAAAAAIVVTW8aMRC9+1fMpVJyiATptypXAiIIFfkQoEY9mt0BLBYb2SaU/vrO2Muuk0b04p1582zPjO23sx1iKWc8ijjO0cywsKb0fVxahykG3Y6HRQTEjfZBmQLnTj1jRbNPAJwQca+2KHkQE1zNjzuU9AU2xEzpanwj+QP3++0CnfiFykkemJ2wyK/D9ypoa1Slw1FmtugVzprjVtZfMcWVCkHJ+isGdu889hwqmUxgW/StCoNKeS/ZgmiKYYUYZBzFVBUoeaAVtjsMOlgnWzMuEOeKOaqt5IESVyW6hVWu5Mq0Wd3YrdJmisFpfEY3WJMnM5qP+5wjc9xzS86vuPJi9Dgb6t/naMS4Igqtd6fc5pFKJua5CUyDmpdSnaLfV+F/CUOipSkPy7Zt/60U7BJaus9bOnJ2v8ubBxHJKXmUe8aNyWt9URAT8tzibaPti/aQRztP/Tr1TTxpU86CQ7MK67Hpo9rTUwiSYTjhoA2cIqK/DB05UNWWra6c6NU6gNKO3evaXTjEP8jIezlCEyrMoA/yzlJBKuTgRzl06NcZ8knS9tasMuizvKXl4UC5sftFjlQVA19P3FUNdDuEWJdy7Mqf2laUBvgGu5a3e+d0oQzS86ro8T3jrCARGJv0SmoMPIPcAMd34KJDWuHDN+jCgY4yXKb+sZC8bp6P6sKdW4ZGWXphFhQxGmEJlpIiBFRIRtKqpzWJFbt8wEmnDgQlCp/zm4qW1n4ta/W6U2U2vTDUlDXfGMk+7xoRYEgkWXpY3lFX9nSHvUwI36AGa1hzVWxyRvSb6A9Njcqi0W+ij0hSF44D7YrqBa0OQB2JWY/oJfkHN7HeEzfmHSGwDhLYKrflHiS10uWb7W4IwAy4eMfbTuI9v2zzs6Xeb4faaL/Os4swJDwrhw48L4LdfzPvYzggmuYEeqasN3irJLjo1scCV9/rHS/F2NOfqNjQr2nsoTabLNpnHwUxS6iNQNLK9qTd5jU57plofwGIogiCRAcAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:06Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Speed" resname="Speed">
<source>Speed</source>
<target state="translated">Скорость</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SpeedTenSecondsBefore" resname="SpeedTenSecondsBefore">
<source>Speed 10s before</source>
<target>Скорость за 10 с до</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="DistanceTraveled" resname="DistanceTraveled">
<source>Distance Traveled</source>
<target state="translated">Пройденная дистанция</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Name" resname="Name">
<source>Name</source>
<target state="translated">Название</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegType" resname="LegType">
<source>Leg Type</source>
<target state="translated">Тип отрезка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SailID" resname="SailID">
<source>Sail Number</source>
<target>Номер на парусе</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Year" resname="Year">
<source>Year</source>
<target>Год</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegNumber" resname="LegNumber">
<source>Leg Number</source>
<target>Номер отрезка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Nationality" resname="Nationality">
<source>Nationality</source>
<target>Гражданство</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Acronym" resname="Acronym">
<source>Acronym</source>
<target>Сокращение</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Regatta" resname="Regatta">
<source>Regatta</source>
<target>Регата</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="CourseArea" resname="CourseArea">
<source>Course Area</source>
<target>Зона гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="BoatClass" resname="BoatClass">
<source>Boat Class</source>
<target>Класс лодок</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Fleet" resname="Fleet">
<source>Fleet</source>
<target>Флот</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Race" resname="Race">
<source>Race</source>
<target>Гонка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Competitor" resname="Competitor">
<source>Competitor</source>
<target>Участник</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Boat" resname="Boat">
<source>Boat</source>
<target>Лодка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Team" resname="Team">
<source>Team</source>
<target>Команда</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LeaderboardSailingDomainRetrieverChain" resname="LeaderboardSailingDomainRetrieverChain">
<source>Leaderboards</source>
<target>Таблицы лидеров</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceSailingDomainRetrieverChain" resname="RaceSailingDomainRetrieverChain">
<source>Races</source>
<target>Гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegSailingDomainRetrieverChain" resname="LegSailingDomainRetrieverChain">
<source>Legs</source>
<target>Отрезки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="GPSFixSailingDomainRetrieverChain" resname="GPSFixSailingDomainRetrieverChain">
<source>GPS-Fixes</source>
<target>Замеры GPS</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="MarkPassingSailingDomainRetrieverChain" resname="MarkPassingSailingDomainRetrieverChain">
<source>Mark Passings</source>
<target>Прохождения отметок</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceResultSailingDomainRetrieverChain" resname="RaceResultSailingDomainRetrieverChain">
<source>Race Results</source>
<target>Результаты гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceOfCompetitorSailingDomainRetrieverChain" resname="RaceOfCompetitorSailingDomainRetrieverChain">
<source>Races of Competitors</source>
<target>Гонки участников</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LeaderboardGroup" resname="LeaderboardGroup">
<source>Leaderboard Group</source>
<target>Группа таблиц лидеров</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Leaderboard" resname="Leaderboard">
<source>Leaderboard</source>
<target>Таблица лидеров</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Leg" resname="Leg">
<source>Leg</source>
<target>Отрезок</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="MarkPassing" resname="MarkPassing">
<source>Mark Passing</source>
<target>Прохождение отметки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegOfCompetitor" resname="LegOfCompetitor">
<source>Leg of competitor</source>
<target>Отрезок участника</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="GpsFix" resname="GpsFix">
<source>GPS-Fix</source>
<target>Замер GPS</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindStrengthInBeaufort" resname="WindStrengthInBeaufort">
<source>Wind Strength in Beaufort</source>
<target>Сила ветра по шкале Бофорта</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft0" resname="Bft0">
<source>Calm</source>
<target>Штиль</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft1" resname="Bft1">
<source>Light air</source>
<target>Тихий</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft2" resname="Bft2">
<source>Light breeze</source>
<target>Легкий</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft3" resname="Bft3">
<source>Gentle breeze</source>
<target>Слабый</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft4" resname="Bft4">
<source>Moderate breeze</source>
<target>Умеренный</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft5" resname="Bft5">
<source>Fresh breeze</source>
<target>Свежий</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft6" resname="Bft6">
<source>Strong breeze</source>
<target>Сильный</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft7" resname="Bft7">
<source>High wind</source>
<target>Крепкий</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft8" resname="Bft8">
<source>Gale</source>
<target>Очень крепкий</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft9" resname="Bft9">
<source>Strong gale</source>
<target>Шторм</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft10" resname="Bft10">
<source>Storm</source>
<target>Сильный шторм</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft11" resname="Bft11">
<source>Violent storm</source>
<target>Жестокий шторм</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft12" resname="Bft12">
<source>Hurricane</source>
<target>Ураган</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RelativeScoreInRace" resname="RelativeScoreInRace">
<source>Relative score in race (0 best; 1 worst)</source>
<target>Относительная оценка в гонке (0 лучшая; 1 худшая)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindSpeedInBeaufort" resname="WindSpeedInBeaufort">
<source>Wind speed in Bft</source>
<target>Скорость ветра по шкале Бофорта</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="DistanceAtStart" resname="DistanceAtStart">
<source>Distance to start at start</source>
<target>Дистанция до старта при старте</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SpeedWhenStarting" resname="SpeedWhenStarting">
<source>Speed when starting</source>
<target>Скорость при старте</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SpeedTenSecondsBeforeStart" resname="SpeedTenSecondsBeforeStart">
<source>Speed 10s before start</source>
<target>Скорость за 10 с до старта</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RankAtFirstMark" resname="RankAtFirstMark">
<source>Rank at First Mark</source>
<target>Ранг на первой отметке</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfManeuvers" resname="NumberOfManeuvers">
<source>Number of Maneuvers</source>
<target>Число маневров</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfTacks" resname="NumberOfTacks">
<source>Number of Tacks</source>
<target>Число поворотов оверштаг</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfJibes" resname="NumberOfJibes">
<source>Number of Jibes</source>
<target>Число поворотов фордевинд</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfPenaltyCircles" resname="NumberOfPenaltyCircles">
<source>Number of Penalty Circles</source>
<target>Число штрафных кругов</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RankGainsOrLosses" resname="RankGainsOrLosses">
<source>Rank Gains or Losses</source>
<target>Повышения или понижения ранга</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="DistanceToStarboardSideAtStart" resname="DistanceToStarboardSideAtStart">
<source>Distance to Starboard Side (% of Length)</source>
<target>Дистанция до правой стороны (% длины)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfPodiumFinish" resname="NumberOfPodiumFinish">
<source>Number of Podium Finishes</source>
<target>Число призовых финишей</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfWins" resname="NumberOfWins">
<source>Number of Wins</source>
<target>Число побед</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RankGainsOrLossesBetweenFirstMarkAndFinish" resname="RankGainsOrLossesBetweenFirstMarkAndFinish">
<source>Rank Gains or Losses (1st Mark -&gt; Finish)</source>
<target>Повышения или понижения ранга (1-я отметка -&gt; финиш)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="IsTracked" resname="IsTracked">
<source>Is Tracked</source>
<target>Отслеживается</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfCompetitorFixes" resname="NumberOfCompetitorFixes">
<source>Number of Competitor Fixes</source>
<target>Число замеров участника</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfMarkFixes" resname="NumberOfMarkFixes">
<source>Number of Mark Fixes</source>
<target>Число замеров отметки</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,268 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:43:14Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties" source-language="en" target-language="zh-CN">
<header>
<skl>
<internal-file crc="2476e2fa472ba5cb7a43d465af58c5c7" form="base64">H4sIAAAAAAAAAIVVTW8aMRC9+1fMpVJyiATptypXAiIIFfkQoEY9mt0BLBYb2SaU/vrO2Muuk0b04p1582zPjO23sx1iKWc8ijjO0cywsKb0fVxahykG3Y6HRQTEjfZBmQLnTj1jRbNPAJwQca+2KHkQE1zNjzuU9AU2xEzpanwj+QP3++0CnfiFykkemJ2wyK/D9ypoa1Slw1FmtugVzprjVtZfMcWVCkHJ+isGdu889hwqmUxgW/StCoNKeS/ZgmiKYYUYZBzFVBUoeaAVtjsMOlgnWzMuEOeKOaqt5IESVyW6hVWu5Mq0Wd3YrdJmisFpfEY3WJMnM5qP+5wjc9xzS86vuPJi9Dgb6t/naMS4Igqtd6fc5pFKJua5CUyDmpdSnaLfV+F/CUOipSkPy7Zt/60U7BJaus9bOnJ2v8ubBxHJKXmUe8aNyWt9URAT8tzibaPti/aQRztP/Tr1TTxpU86CQ7MK67Hpo9rTUwiSYTjhoA2cIqK/DB05UNWWra6c6NU6gNKO3evaXTjEP8jIezlCEyrMoA/yzlJBKuTgRzl06NcZ8knS9tasMuizvKXl4UC5sftFjlQVA19P3FUNdDuEWJdy7Mqf2laUBvgGu5a3e+d0oQzS86ro8T3jrCARGJv0SmoMPIPcAMd34KJDWuHDN+jCgY4yXKb+sZC8bp6P6sKdW4ZGWXphFhQxGmEJlpIiBFRIRtKqpzWJFbt8wEmnDgQlCp/zm4qW1n4ta/W6U2U2vTDUlDXfGMk+7xoRYEgkWXpY3lFX9nSHvUwI36AGa1hzVWxyRvSb6A9Njcqi0W+ij0hSF44D7YrqBa0OQB2JWY/oJfkHN7HeEzfmHSGwDhLYKrflHiS10uWb7W4IwAy4eMfbTuI9v2zzs6Xeb4faaL/Os4swJDwrhw48L4LdfzPvYzggmuYEeqasN3irJLjo1scCV9/rHS/F2NOfqNjQr2nsoTabLNpnHwUxS6iNQNLK9qTd5jU57plofwGIogiCRAcAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:06Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Speed" resname="Speed">
<source>Speed</source>
<target state="translated">速度</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SpeedTenSecondsBefore" resname="SpeedTenSecondsBefore">
<source>Speed 10s before</source>
<target>前 10 秒的速度</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="DistanceTraveled" resname="DistanceTraveled">
<source>Distance Traveled</source>
<target state="translated">航行距离</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Name" resname="Name">
<source>Name</source>
<target state="translated">名称</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegType" resname="LegType">
<source>Leg Type</source>
<target state="translated">航段形式</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SailID" resname="SailID">
<source>Sail Number</source>
<target>帆号</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Year" resname="Year">
<source>Year</source>
<target>年份</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegNumber" resname="LegNumber">
<source>Leg Number</source>
<target>航段编号</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Nationality" resname="Nationality">
<source>Nationality</source>
<target state="translated">国籍</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Acronym" resname="Acronym">
<source>Acronym</source>
<target>首字母缩略词</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Regatta" resname="Regatta">
<source>Regatta</source>
<target state="translated">比赛</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="CourseArea" resname="CourseArea">
<source>Course Area</source>
<target>场地区域</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="BoatClass" resname="BoatClass">
<source>Boat Class</source>
<target state="translated">船只级别</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Fleet" resname="Fleet">
<source>Fleet</source>
<target state="translated">船队</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Race" resname="Race">
<source>Race</source>
<target state="translated">比赛轮次</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Competitor" resname="Competitor">
<source>Competitor</source>
<target>参赛队</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Boat" resname="Boat">
<source>Boat</source>
<target>船只</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Team" resname="Team">
<source>Team</source>
<target state="translated">团队</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LeaderboardSailingDomainRetrieverChain" resname="LeaderboardSailingDomainRetrieverChain">
<source>Leaderboards</source>
<target state="translated">积分榜</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceSailingDomainRetrieverChain" resname="RaceSailingDomainRetrieverChain">
<source>Races</source>
<target>比赛轮次</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegSailingDomainRetrieverChain" resname="LegSailingDomainRetrieverChain">
<source>Legs</source>
<target state="translated">航段</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="GPSFixSailingDomainRetrieverChain" resname="GPSFixSailingDomainRetrieverChain">
<source>GPS-Fixes</source>
<target>GPS 修复</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="MarkPassingSailingDomainRetrieverChain" resname="MarkPassingSailingDomainRetrieverChain">
<source>Mark Passings</source>
<target>绕标</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceResultSailingDomainRetrieverChain" resname="RaceResultSailingDomainRetrieverChain">
<source>Race Results</source>
<target>比赛轮次结果</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceOfCompetitorSailingDomainRetrieverChain" resname="RaceOfCompetitorSailingDomainRetrieverChain">
<source>Races of Competitors</source>
<target>参赛队的比赛轮次</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LeaderboardGroup" resname="LeaderboardGroup">
<source>Leaderboard Group</source>
<target state="translated">积分榜分组</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Leaderboard" resname="Leaderboard">
<source>Leaderboard</source>
<target state="translated">积分榜</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Leg" resname="Leg">
<source>Leg</source>
<target state="translated">航段</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="MarkPassing" resname="MarkPassing">
<source>Mark Passing</source>
<target>绕标</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegOfCompetitor" resname="LegOfCompetitor">
<source>Leg of competitor</source>
<target>参赛队的航段</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="GpsFix" resname="GpsFix">
<source>GPS-Fix</source>
<target>GPS 修复</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindStrengthInBeaufort" resname="WindStrengthInBeaufort">
<source>Wind Strength in Beaufort</source>
<target>风力(蒲福风级)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft0" resname="Bft0">
<source>Calm</source>
<target>无风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft1" resname="Bft1">
<source>Light air</source>
<target>软风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft2" resname="Bft2">
<source>Light breeze</source>
<target>轻风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft3" resname="Bft3">
<source>Gentle breeze</source>
<target>微风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft4" resname="Bft4">
<source>Moderate breeze</source>
<target>和风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft5" resname="Bft5">
<source>Fresh breeze</source>
<target>劲风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft6" resname="Bft6">
<source>Strong breeze</source>
<target>强风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft7" resname="Bft7">
<source>High wind</source>
<target>疾风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft8" resname="Bft8">
<source>Gale</source>
<target>大风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft9" resname="Bft9">
<source>Strong gale</source>
<target>烈风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft10" resname="Bft10">
<source>Storm</source>
<target>暴风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft11" resname="Bft11">
<source>Violent storm</source>
<target>飓风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Bft12" resname="Bft12">
<source>Hurricane</source>
<target>台风</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RelativeScoreInRace" resname="RelativeScoreInRace">
<source>Relative score in race (0 best; 1 worst)</source>
<target>比赛轮次中的相对得分(0 最佳;1 最差)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindSpeedInBeaufort" resname="WindSpeedInBeaufort">
<source>Wind speed in Bft</source>
<target>风速(单位:Bft</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="DistanceAtStart" resname="DistanceAtStart">
<source>Distance to start at start</source>
<target>起航前与起航线的距离</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SpeedWhenStarting" resname="SpeedWhenStarting">
<source>Speed when starting</source>
<target>起航时的速度</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SpeedTenSecondsBeforeStart" resname="SpeedTenSecondsBeforeStart">
<source>Speed 10s before start</source>
<target>起航前 10 秒的速度</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RankAtFirstMark" resname="RankAtFirstMark">
<source>Rank at First Mark</source>
<target>在第一个标志的名次</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfManeuvers" resname="NumberOfManeuvers">
<source>Number of Maneuvers</source>
<target>操作数量</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfTacks" resname="NumberOfTacks">
<source>Number of Tacks</source>
<target>迎风转向次数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfJibes" resname="NumberOfJibes">
<source>Number of Jibes</source>
<target>顺风转向次数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfPenaltyCircles" resname="NumberOfPenaltyCircles">
<source>Number of Penalty Circles</source>
<target>惩罚圈数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RankGainsOrLosses" resname="RankGainsOrLosses">
<source>Rank Gains or Losses</source>
<target>名次进阶或落后</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="DistanceToStarboardSideAtStart" resname="DistanceToStarboardSideAtStart">
<source>Distance to Starboard Side (% of Length)</source>
<target>与右舷的距离(长度百分比)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfPodiumFinish" resname="NumberOfPodiumFinish">
<source>Number of Podium Finishes</source>
<target>跻身颁奖台次数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfWins" resname="NumberOfWins">
<source>Number of Wins</source>
<target>获胜次数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RankGainsOrLossesBetweenFirstMarkAndFinish" resname="RankGainsOrLossesBetweenFirstMarkAndFinish">
<source>Rank Gains or Losses (1st Mark -&gt; Finish)</source>
<target>名次进阶或落后(第一个标志 -&gt; 结束)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="IsTracked" resname="IsTracked">
<source>Is Tracked</source>
<target>是否跟踪</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfCompetitorFixes" resname="NumberOfCompetitorFixes">
<source>Number of Competitor Fixes</source>
<target>参赛队修复次数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="NumberOfMarkFixes" resname="NumberOfMarkFixes">
<source>Number of Mark Fixes</source>
<target>标志修复次数</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -76,7 +76,7 @@ public enum BoatClassMasterdata {
OPEN_BIC("O'pen BIC", true, 2.75, 1.14, BoatHullType.MONOHULL, false, "OpenBIC"),
OPTIMIST ("Optimist", true, 2.34, 1.07, BoatHullType.MONOHULL, false, "Opti", "Optimist Dinghy"),
PIRATE ("Pirate", true, 5.00, 1.61, BoatHullType.MONOHULL, false, "Pirat", "Piraten"),
PLATU_25 ("Platu 25", true, 7.53, 2.62, BoatHullType.MONOHULL, true, "Platu", "Platu-25", "PLA", "B25"),
PLATU_25 ("Platu 25", true, 7.53, 2.62, BoatHullType.MONOHULL, true, "Platu", "Platu-25", "PLA", "B25", "Platu25"),
PWA ("PWA", true, 5.0, 0.6, BoatHullType.MONOHULL, true, "Professional Windsurfers Association", "PWA World Tour"),
RC44 ("RC44", true, 13.35, 2.75, BoatHullType.MONOHULL, true),
RS_X ("RS:X", true, 2.86, 0.93, BoatHullType.SURFERBOARD, false, "RS-X", "RSX", "RS:X"),
@@ -0,0 +1,12 @@
trackingInvitationFor=招待の追跡:
scanQRCodeOrVisitUrlToRegisterAs={0} アプリがインストールされていることを確認してください。その上で、以下の QR コードをスキャンするか、スマートフォンを使用してリンクをクリックして登録します:
welcomeTo=ようこそ:
iOSUsers=iOS アプリ起動
androidUsers=Android アプリ起動
alternativelyVisitThisLink=アプリがすでにインストールされているデバイス上でこのメールを参照している場合は、下記をクリックして起動します:
buoyTender=設標船
appStoreInstallText=まだアプリがない場合は、インストールしてください:
appIos=iOS アプリのインストール
appAndroid=Android アプリのインストール
buoyPingerAppName=SAP Sailing Buoy Pinger
sailInSightAppName=SAP Sail InSight
@@ -0,0 +1,12 @@
trackingInvitationFor=Приглашение на отслеживание для
scanQRCodeOrVisitUrlToRegisterAs=Убедитесь, что приложение {0} установлено. Затем отсканируйте следующий QR-код или откройте ссылку на смартфоне, чтобы зарегистрироваться как
welcomeTo=Вас приветствует
iOSUsers=Запустить приложение для iOS
androidUsers=Запустить приложение для Android
alternativelyVisitThisLink=Если вы читаете это сообщение на устройстве с уже установленным приложением, просто щелкните ниже, чтобы начать:
buoyTender=лоцмейстерское судно
appStoreInstallText=Если у вас еще нет приложения, установите его:
appIos=Установить приложение для iOS
appAndroid=Установить приложение для Android
buoyPingerAppName=SAP Sailing Buoy Pinger
sailInSightAppName=SAP Sail InSight
@@ -0,0 +1,12 @@
trackingInvitationFor=跟踪邀请 -
scanQRCodeOrVisitUrlToRegisterAs=确保已安装 {0} 应用。然后,使用智能手机扫描以下二维码或点击链接注册
welcomeTo=欢迎使用
iOSUsers=启动 iOS 应用
androidUsers=启动 Android 应用
alternativelyVisitThisLink=如果在已安装该应用的设备中读取邮件,只需点击以下链接即可启动:
buoyTender=浮标供应船
appStoreInstallText=如果尚无该应用,请安装:
appIos=安装 iOS 应用
appAndroid=安装 Android 应用
buoyPingerAppName=SAP Sailing Buoy Pinger
sailInSightAppName=SAP Sail InSight
@@ -0,0 +1,12 @@
trackingInvitationFor=跟踪邀请 -
scanQRCodeOrVisitUrlToRegisterAs=确保已安装 {0} 应用。然后,使用智能手机扫描以下二维码或点击链接注册
welcomeTo=欢迎使用
iOSUsers=启动 iOS 应用
androidUsers=启动 Android 应用
alternativelyVisitThisLink=如果在已安装该应用的设备中读取邮件,只需点击以下链接即可启动:
buoyTender=浮标供应船
appStoreInstallText=如果尚无该应用,请安装:
appIos=安装 iOS 应用
appAndroid=安装 Android 应用
buoyPingerAppName=SAP Sailing Buoy Pinger
sailInSightAppName=SAP Sail InSight
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:39:27Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sailing.domain.racelogtrackingadapter/resources/stringmessages/TrackingStringMessages.properties" source-language="en" target-language="ja">
<header>
<skl>
<internal-file crc="cdbdcb19e10086d34f715e2a7da26eef" form="base64">H4sIAAAAAAAAAF2RTU/DMAyG7/0VvnGZEGekHgYSUiVgY+3gnLXeajWNo9jbqBD/naQtbOLm+PXH+zgaTN2ROxTuRGqU2D1xyKs5C5c07DlkUhv3tnnkBlfhnYR0G2zFGzyQKIal5C+mQ5BjQBj4CK05IWiL8HX3DUvvgZyosRabW6hadJDmjQV7tpbPaeM0HjhAbanuRtWS6+AoSY5jA0hvgvqWXZzOEOb1YCQ7o625x4rzjymKBRmtyq1gkLzU2AfxmcxkxjWBqbmWllNqkm2c6SL7Ce0wwlYtyXO0khf7Ec9EzICmSb40atAbssATUYMnqhHOpO34TvjGpvLhcoYFCPXeDjPrDuMREpIkN/fZ7shDha7BkKcQdIwz432pHLCYxlT4qclSw+5GLzdPCwfUBXiLRvB36X1qL1jyuftyDu9n/D/p+hzJwDqSxm/2/tX0mJfLNZSROOE/JHuTnEnMFa6kQ6v/S2HOZz95rIJYdwIAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="trackingInvitationFor" resname="trackingInvitationFor">
<source>Tracking Invitation for</source>
<target>招待の追跡:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="scanQRCodeOrVisitUrlToRegisterAs" resname="scanQRCodeOrVisitUrlToRegisterAs">
<source>Make sure you have the <ph id="1">{0}</ph> App installed. Then scan the following QRCode or click the link using your smartphone to register as</source>
<target><ph id="1">{0}</ph> アプリがインストールされていることを確認してください。その上で、以下の QR コードをスキャンするか、スマートフォンを使用してリンクをクリックして登録します:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="welcomeTo" resname="welcomeTo">
<source>Welcome to</source>
<target>ようこそ:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="iOSUsers" resname="iOSUsers">
<source>Start iOS App</source>
<target>iOS アプリ起動</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="androidUsers" resname="androidUsers">
<source>Start Android App</source>
<target>Android アプリ起動</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="alternativelyVisitThisLink" resname="alternativelyVisitThisLink">
<source>If you are reading this mail on the device with the App already installed, simply click below to start:</source>
<target>アプリがすでにインストールされているデバイス上でこのメールを参照している場合は、下記をクリックして起動します:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="buoyTender" resname="buoyTender">
<source>buoy tender</source>
<target>設標船</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="appStoreInstallText" resname="appStoreInstallText">
<source>If don't have the App yet, please install:</source>
<target>まだアプリがない場合は、インストールしてください:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="appIos" resname="appIos">
<source>Install iOS App</source>
<target>iOS アプリのインストール</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="appAndroid" resname="appAndroid">
<source>Install Android App</source>
<target>Android アプリのインストール</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="buoyPingerAppName" resname="buoyPingerAppName">
<source>SAP Sailing Buoy Pinger</source>
<target>SAP Sailing Buoy Pinger</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sailInSightAppName" resname="sailInSightAppName">
<source>SAP Sail InSight</source>
<target>SAP Sail InSight</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:44:06Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sailing.domain.racelogtrackingadapter/resources/stringmessages/TrackingStringMessages.properties" source-language="en" target-language="ru">
<header>
<skl>
<internal-file crc="cdbdcb19e10086d34f715e2a7da26eef" form="base64">H4sIAAAAAAAAAF2RTU/DMAyG7/0VvnGZEGekHgYSUiVgY+3gnLXeajWNo9jbqBD/naQtbOLm+PXH+zgaTN2ROxTuRGqU2D1xyKs5C5c07DlkUhv3tnnkBlfhnYR0G2zFGzyQKIal5C+mQ5BjQBj4CK05IWiL8HX3DUvvgZyosRabW6hadJDmjQV7tpbPaeM0HjhAbanuRtWS6+AoSY5jA0hvgvqWXZzOEOb1YCQ7o625x4rzjymKBRmtyq1gkLzU2AfxmcxkxjWBqbmWllNqkm2c6SL7Ce0wwlYtyXO0khf7Ec9EzICmSb40atAbssATUYMnqhHOpO34TvjGpvLhcoYFCPXeDjPrDuMREpIkN/fZ7shDha7BkKcQdIwz432pHLCYxlT4qclSw+5GLzdPCwfUBXiLRvB36X1qL1jyuftyDu9n/D/p+hzJwDqSxm/2/tX0mJfLNZSROOE/JHuTnEnMFa6kQ6v/S2HOZz95rIJYdwIAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="trackingInvitationFor" resname="trackingInvitationFor">
<source>Tracking Invitation for</source>
<target>Приглашение на отслеживание для</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="scanQRCodeOrVisitUrlToRegisterAs" resname="scanQRCodeOrVisitUrlToRegisterAs">
<source>Make sure you have the <ph id="1">{0}</ph> App installed. Then scan the following QRCode or click the link using your smartphone to register as</source>
<target>Убедитесь, что приложение <ph id="1">{0}</ph> установлено. Затем отсканируйте следующий QR-код или откройте ссылку на смартфоне, чтобы зарегистрироваться как</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="welcomeTo" resname="welcomeTo">
<source>Welcome to</source>
<target>Вас приветствует</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="iOSUsers" resname="iOSUsers">
<source>Start iOS App</source>
<target>Запустить приложение для iOS</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="androidUsers" resname="androidUsers">
<source>Start Android App</source>
<target>Запустить приложение для Android</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="alternativelyVisitThisLink" resname="alternativelyVisitThisLink">
<source>If you are reading this mail on the device with the App already installed, simply click below to start:</source>
<target>Если вы читаете это сообщение на устройстве с уже установленным приложением, просто щелкните ниже, чтобы начать:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="buoyTender" resname="buoyTender">
<source>buoy tender</source>
<target>лоцмейстерское судно</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="appStoreInstallText" resname="appStoreInstallText">
<source>If don't have the App yet, please install:</source>
<target>Если у вас еще нет приложения, установите его:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="appIos" resname="appIos">
<source>Install iOS App</source>
<target>Установить приложение для iOS</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="appAndroid" resname="appAndroid">
<source>Install Android App</source>
<target>Установить приложение для Android</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="buoyPingerAppName" resname="buoyPingerAppName">
<source>SAP Sailing Buoy Pinger</source>
<target>SAP Sailing Buoy Pinger</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sailInSightAppName" resname="sailInSightAppName">
<source>SAP Sail InSight</source>
<target>SAP Sail InSight</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:39:27Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sailing.domain.racelogtrackingadapter/resources/stringmessages/TrackingStringMessages.properties" source-language="en" target-language="zh-CN">
<header>
<skl>
<internal-file crc="cdbdcb19e10086d34f715e2a7da26eef" form="base64">H4sIAAAAAAAAAF2RTU/DMAyG7/0VvnGZEGekHgYSUiVgY+3gnLXeajWNo9jbqBD/naQtbOLm+PXH+zgaTN2ROxTuRGqU2D1xyKs5C5c07DlkUhv3tnnkBlfhnYR0G2zFGzyQKIal5C+mQ5BjQBj4CK05IWiL8HX3DUvvgZyosRabW6hadJDmjQV7tpbPaeM0HjhAbanuRtWS6+AoSY5jA0hvgvqWXZzOEOb1YCQ7o625x4rzjymKBRmtyq1gkLzU2AfxmcxkxjWBqbmWllNqkm2c6SL7Ce0wwlYtyXO0khf7Ec9EzICmSb40atAbssATUYMnqhHOpO34TvjGpvLhcoYFCPXeDjPrDuMREpIkN/fZ7shDha7BkKcQdIwz432pHLCYxlT4qclSw+5GLzdPCwfUBXiLRvB36X1qL1jyuftyDu9n/D/p+hzJwDqSxm/2/tX0mJfLNZSROOE/JHuTnEnMFa6kQ6v/S2HOZz95rIJYdwIAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="trackingInvitationFor" resname="trackingInvitationFor">
<source>Tracking Invitation for</source>
<target>跟踪邀请 - </target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="scanQRCodeOrVisitUrlToRegisterAs" resname="scanQRCodeOrVisitUrlToRegisterAs">
<source>Make sure you have the <ph id="1">{0}</ph> App installed. Then scan the following QRCode or click the link using your smartphone to register as</source>
<target>确保已安装 <ph id="1">{0}</ph> 应用。然后,使用智能手机扫描以下二维码或点击链接注册</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="welcomeTo" resname="welcomeTo">
<source>Welcome to</source>
<target>欢迎使用</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="iOSUsers" resname="iOSUsers">
<source>Start iOS App</source>
<target>启动 iOS 应用</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="androidUsers" resname="androidUsers">
<source>Start Android App</source>
<target>启动 Android 应用</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="alternativelyVisitThisLink" resname="alternativelyVisitThisLink">
<source>If you are reading this mail on the device with the App already installed, simply click below to start:</source>
<target>如果在已安装该应用的设备中读取邮件,只需点击以下链接即可启动:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="buoyTender" resname="buoyTender">
<source>buoy tender</source>
<target>浮标供应船</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="appStoreInstallText" resname="appStoreInstallText">
<source>If don't have the App yet, please install:</source>
<target>如果尚无该应用,请安装:</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="appIos" resname="appIos">
<source>Install iOS App</source>
<target>安装 iOS 应用</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="appAndroid" resname="appAndroid">
<source>Install Android App</source>
<target>安装 Android 应用</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="buoyPingerAppName" resname="buoyPingerAppName">
<source>SAP Sailing Buoy Pinger</source>
<target>SAP Sailing Buoy Pinger</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="sailInSightAppName" resname="sailInSightAppName">
<source>SAP Sail InSight</source>
<target>SAP Sail InSight</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,48 @@
package com.sap.sailing.domain.common.test;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.sap.sse.common.util.UrlHelper;
import com.sap.sse.util.impl.NonGwtUrlHelper;
public class NonGwtUrlHelperTest {
private final UrlHelper urlHelper = NonGwtUrlHelper.INSTANCE;
@Test
public void testEncodeQueryStringSimple() {
testCase("TestTest", "TestTest");
}
@Test
public void testEncodeQueryStringWithWhitespace() {
testCase("Test%20Test", "Test Test");
}
@Test
public void testEncodeQueryStringWithSlash() {
testCase("Test%2FTest", "Test/Test");
}
@Test
public void testEncodeQueryStringWithPlusSign() {
testCase("Test%2BTest", "Test+Test");
}
@Test
public void testEncodeQueryStringWithAmpersand() {
testCase("Test%26Test", "Test&Test");
}
@Test
public void testEncodeQueryStringComplex() {
testCase("Test%20%2B%20Test%20%2F%20Test%20%26%20Test", "Test + Test / Test & Test");
}
private void testCase(String expectedEncodedString, String decodedString) {
assertEquals(expectedEncodedString, urlHelper.encodeQueryString(decodedString));
}
}
@@ -431,7 +431,10 @@ public class CandidateFinderImpl implements CandidateFinder {
Map<Competitor, List<Candidate>> removedWaypointCandidates = removeWaypoints(removedWaypoints);
Map<Competitor, Util.Pair<List<Candidate>, List<Candidate>>> newAndUpdatedCandidates = invalidateAfterCourseChange(smallestIndex);
for (Entry<Competitor, List<Candidate>> entry : removedWaypointCandidates.entrySet()) {
newAndUpdatedCandidates.get(entry.getKey()).getB().addAll(entry.getValue());
final Pair<List<Candidate>, List<Candidate>> candidatesForCompetitor = newAndUpdatedCandidates.get(entry.getKey());
if (candidatesForCompetitor != null) { // only possible if an exception struck in invalidateAfterCourseChange for the competitor
candidatesForCompetitor.getB().addAll(entry.getValue());
}
}
return newAndUpdatedCandidates;
}
@@ -497,22 +500,17 @@ public class CandidateFinderImpl implements CandidateFinder {
instruction = PassingInstruction.Line;
}
if (instruction == PassingInstruction.None || instruction == null) {
if (w.equals(firstWaypoint) || w.equals(lastWaypoint)) {
instruction = PassingInstruction.Line;
} else {
int numberofMarks = 0;
Iterator<Mark> it = w.getMarks().iterator();
while (it.hasNext()) {
it.next();
numberofMarks++;
}
if (numberofMarks == 2) {
instruction = PassingInstruction.Gate;
} else if (numberofMarks == 1) {
instruction = PassingInstruction.Single_Unknown;
final int numberOfMarks = Util.size(w.getMarks());
if (numberOfMarks == 2) {
if (w.equals(firstWaypoint) || w.equals(lastWaypoint)) {
instruction = PassingInstruction.Line;
} else {
instruction = PassingInstruction.None;
instruction = PassingInstruction.Gate;
}
} else if (numberOfMarks == 1) {
instruction = PassingInstruction.Single_Unknown;
} else {
instruction = PassingInstruction.None;
}
}
return instruction;
@@ -735,7 +733,7 @@ public class CandidateFinderImpl implements CandidateFinder {
}
}
List<Distance> wayPointXTEs = xtes.get(w);
int size = wayPointXTEs == null ? 0 : wayPointXTEs.size();
final int size = wayPointXTEs == null ? 0 : wayPointXTEs.size();
if (size > 0) {
Double xte = wayPointXTEs.get(0).getMeters();
if (xte == 0) {
@@ -766,14 +764,16 @@ public class CandidateFinderImpl implements CandidateFinder {
Double xteAfter = xtesAfter.get(w).get(1).getMeters();
if (xte < 0 != xteAfter <= 0) {
newCandidates.put(Arrays.asList(fix, fixAfter),
createCandidate(c, xte, xteAfter, t, tAfter, w, false));
createCandidate(c, xte, xteAfter, t, tAfter, w,
/* still portMark in case of single-mark waypoint */ Util.size(w.getMarks()) < 2));
}
}
if (fixBefore != null && xtesBefore.get(w).size() >= 2) {
Double xteBefore = xtesBefore.get(w).get(1).getMeters();
if (xte < 0 != xteBefore <= 0) {
newCandidates.put(Arrays.asList(fixBefore, fix),
createCandidate(c, xteBefore, xte, tBefore, t, w, false));
createCandidate(c, xteBefore, xte, tBefore, t, w,
/* still portMark in case of single-mark waypoint */ Util.size(w.getMarks()) < 2));
}
}
}
@@ -1333,21 +1333,41 @@ public class CandidateFinderImpl implements CandidateFinder {
after.getBearingGreatCircle(starboardPosition));
result.add(new Util.Pair<Position, Bearing>(starboardPosition, crossingStarboard));
}
} else {
} else { // single mark
Bearing b = null;
Position p;
Position p = race.getOrCreateTrack(w.getMarks().iterator().next()).getEstimatedPosition(t, false);
if (instruction == PassingInstruction.FixedBearing) {
b = w.getFixedBearing();
} else {
// TODO If the first of last waypoint is not a gate or line, this will lead to issues
Bearing before = race.getTrackedLegFinishingAt(w).getLegBearing(t);
Bearing after = race.getTrackedLegStartingAt(w).getLegBearing(t);
if (before != null && after != null) {
b = before.middle(after.reverse());
// If the first of last waypoint is a single mark, check the passing instructions and create a "beam"
// emerging orthogonal to the adjacent leg's direction from the mark to the side indicated by the
// passing instructions. If no passing instructions are given, construct two lines, one to each direction
// orthogonally to the adjacent leg:
if (w == race.getRace().getCourse().getFirstWaypoint()) {
if (instruction == PassingInstruction.None || instruction == PassingInstruction.Single_Unknown) {
b = race.getTrackedLegStartingAt(w).getLegBearing(t).add(new DegreeBearingImpl(90));
result.add(new Pair<>(p, b));
b = race.getTrackedLegStartingAt(w).getLegBearing(t).add(new DegreeBearingImpl(270));
} else {
b = race.getTrackedLegStartingAt(w).getLegBearing(t).add(new DegreeBearingImpl(instruction == PassingInstruction.Port ? 90 : 270));
}
} else if (w == race.getRace().getCourse().getLastWaypoint()) {
if (instruction == PassingInstruction.None || instruction == PassingInstruction.Single_Unknown) {
b = race.getTrackedLegFinishingAt(w).getLegBearing(t).add(new DegreeBearingImpl(90));
result.add(new Pair<>(p, b));
b = race.getTrackedLegFinishingAt(w).getLegBearing(t).add(new DegreeBearingImpl(270));
} else {
b = race.getTrackedLegFinishingAt(w).getLegBearing(t).add(new DegreeBearingImpl(instruction == PassingInstruction.Port ? 90 : 270));
}
} else {
Bearing before = race.getTrackedLegFinishingAt(w).getLegBearing(t);
Bearing after = race.getTrackedLegStartingAt(w).getLegBearing(t);
if (before != null && after != null) {
b = before.middle(after.reverse());
}
}
}
p = race.getOrCreateTrack(w.getMarks().iterator().next()).getEstimatedPosition(t, false);
result.add(new Util.Pair<Position, Bearing>(p, b));
result.add(new Pair<>(p, b));
}
return result;
}
@@ -21,7 +21,6 @@ import com.sap.sailing.domain.racelog.tracking.GPSFixStore;
public interface RaceTrackingConnectivityParameters {
/**
* Starts a {@link RaceTracker} using the connectivity parameters provided by this object.
* @param raceLogResolver TODO
*/
RaceTracker createRaceTracker(TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore, RaceLogResolver raceLogResolver) throws Exception;
@@ -30,7 +29,6 @@ public interface RaceTrackingConnectivityParameters {
* instead of using the tracker's domain factory to obtain a default {@link Regatta} object for the tracking
* parameters. This is particularly useful if a predefined regatta with {@link Series} and {@link Fleet}s
* is to be used.
* @param raceLogResolver TODO
*/
RaceTracker createRaceTracker(Regatta regatta, TrackedRegattaRegistry trackedRegattaRegistry, WindStore windStore, GPSFixStore gpsFixStore, RaceLogResolver raceLogResolver) throws Exception;
@@ -29,7 +29,6 @@ import com.sap.sailing.domain.ranking.RankingMetric.RankingInfo;
import com.sap.sailing.domain.tracking.GPSFixTrack;
import com.sap.sailing.domain.tracking.Maneuver;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.TrackedLeg;
import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.WindLegTypeAndLegBearingCache;
@@ -302,15 +301,8 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor {
}
/**
* For now, we have an incredibly simple wind "model" which assigns a single common wind force and bearing to all
* positions on the course, only variable over time.
*
* @param windPositionMode
* For {@link WindPositionMode#EXACT}, the wind at position <code>p</code> is determined. For type
* {@link WindPositionMode#LEG_MIDDLE}, the {@link TrackedLeg#getMiddleOfLeg middle of the tracked leg}
* is determined and used as position. If the mode is {@link WindPositionMode#GLOBAL_AVERAGE}, <code>null</code>
* is passed as position to {@link TrackedRace#getWind(Position, TimePoint)} which yields a general average
* of the various wind sources available for the race, independent of any position.
* Calculates the competitor's rank at {@code timePoint} based on the {@link WindPositionMode#LEG_MIDDLE} wind
* direction for upwind and downwind legs, or based on the leg's rhumb line for reaching legs.
*/
@Override
public int getRank(TimePoint timePoint) {
@@ -1266,7 +1266,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
if (indexOfWaypoint == -1) {
throw new IllegalArgumentException("Waypoint " + endOfLeg + " not found in " + getRace().getCourse());
} else if (indexOfWaypoint == 0) {
throw new IllegalArgumentException("Waypoint " + endOfLeg + " isn't start of any leg in "
throw new IllegalArgumentException("Waypoint " + endOfLeg + " isn't end of any leg in "
+ getRace().getCourse());
}
return trackedLegs.get(race.getCourse().getLegs().get(indexOfWaypoint - 1));
@@ -0,0 +1,51 @@
package com.sap.sailing.gwt.ui.client;
import org.junit.Test;
import com.google.gwt.junit.client.GWTTestCase;
import com.sap.sse.common.util.UrlHelper;
public class GwtUrlHelperTest extends GWTTestCase {
private final UrlHelper urlHelper = GwtUrlHelper.INSTANCE;
@Test
public void testEncodeQueryStringSimple() {
testCase("TestTest", "TestTest");
}
@Test
public void testEncodeQueryStringWithWhitespace() {
testCase("Test%20Test", "Test Test");
}
@Test
public void testEncodeQueryStringWithSlash() {
testCase("Test%2FTest", "Test/Test");
}
@Test
public void testEncodeQueryStringWithPlusSign() {
testCase("Test%2BTest", "Test+Test");
}
@Test
public void testEncodeQueryStringWithAmpersand() {
testCase("Test%26Test", "Test&Test");
}
@Test
public void testEncodeQueryStringComplex() {
testCase("Test%20%2B%20Test%20%2F%20Test%20%26%20Test", "Test + Test / Test & Test");
}
private void testCase(String expectedEncodedString, String decodedString) {
assertEquals(expectedEncodedString, urlHelper.encodeQueryString(decodedString));
}
@Override
public String getModuleName() {
return "com.sap.sailing.gwt.ui.test.TestConsole";
}
}
-6
View File
@@ -68,12 +68,6 @@
<version>${project.version}</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>com.sap.sailing</groupId>
<artifactId>com.sap.sse.gwt.theme</artifactId>
<version>${project.version}</version>
<classifier>sources</classifier>
</dependency>
<dependency>
<groupId>com.sap.sailing</groupId>
<artifactId>com.sap.sse.gwt.adminconsole</artifactId>
@@ -14,14 +14,15 @@ import com.sap.sse.common.util.UrlHelper;
public enum GwtUrlHelper implements UrlHelper {
INSTANCE;
@Override
public String encodeUrl(String decodedUrlString) {
return URL.encode(decodedUrlString);
}
@Override
public String encodeQueryString(String queryString) {
return URL.encodeQueryString(queryString);
// TODO See bug3664 => https://bugzilla.sapsailing.com/bugzilla/show_bug.cgi?id=3664
// Because of changes in the query string encoding, the Sail InSight-App for iOS will now have problems
// while parsing the registration URLs, which are sent to invited competitors, if e.g. the leaderboard name
// contains whitespaces. To avoid this problems, we use this temporary fix until a new version of the Sail
// InSight-App for iOS is rolled out. Afterwards this fix must be replaced by the line below.
return URL.encodePathSegment(queryString);
// return URL.encodeQueryString(queryString);
}
}
@@ -1559,3 +1559,4 @@ oneTurnerRight=ワンターナー右
current=現在
simulationLegendAlgorithmTimedOutText=禁止区域
simulationLegendMixedLegText=不明瞭な風
noTracksFound=トラックが見つかりませんでした
@@ -1559,3 +1559,4 @@ oneTurnerRight=1 поворот правый
current=Текущий
simulationLegendAlgorithmTimedOutText=вне ограничений
simulationLegendMixedLegText=неопределенный ветер
noTracksFound=Отслеживания не найдены
@@ -1102,7 +1102,7 @@ regattaNameMustNotContainSlashes=比赛名称不得包含斜线
showNumberOfRacesScored=记分的比赛轮次数
errorFetchingWindStreamletData=获取风力流数据出错: {0}
showWindStreamletOverlay=显示风流覆盖
showWindStreamletColors=基于风的颜色流
showWindStreamletColors=基于风的颜色流
showSimulationOverlay=显示模拟覆盖
simulationLegendTooltip=时间比较:\n比赛轮次指根据 GPS 计算的航段历时,如果对风力了如指掌,则称为全知级;如果仅靠测量下一标志的距离就决定启航,则称为投机级;如果了解有关风力的所有信息并决定启航,则称为一圈即成级。
racesScored=记分的比赛轮次
@@ -1217,7 +1217,7 @@ showCompetitorSailIdColumn=帆号
showCompetitorFullNameColumn=参赛队全名
loadingDimensionValues=正在加载尺寸值
runningQuery=运行查询
inviteBuoyTenders=浮标招标
inviteBuoyTenders=邀请浮标供应船
orMultipleEmails=或使用逗号隔开的多个电子邮件
courseOverGroundTrueDegreesTooltip=实在对地航向角度
courseOverGroundTrueDegrees=对地航向
@@ -1559,3 +1559,4 @@ oneTurnerRight=一圈即成级 - 右
current=水流
simulationLegendAlgorithmTimedOutText=越界
simulationLegendMixedLegText=方向不定的风
noTracksFound=未找到跟踪
@@ -1102,7 +1102,7 @@ regattaNameMustNotContainSlashes=比赛名称不得包含斜线
showNumberOfRacesScored=记分的比赛轮次数
errorFetchingWindStreamletData=获取风力流数据出错: {0}
showWindStreamletOverlay=显示风流覆盖
showWindStreamletColors=基于风的颜色流
showWindStreamletColors=基于风的颜色流
showSimulationOverlay=显示模拟覆盖
simulationLegendTooltip=时间比较:\n比赛轮次指根据 GPS 计算的航段历时,如果对风力了如指掌,则称为全知级;如果仅靠测量下一标志的距离就决定启航,则称为投机级;如果了解有关风力的所有信息并决定启航,则称为一圈即成级。
racesScored=记分的比赛轮次
@@ -1217,7 +1217,7 @@ showCompetitorSailIdColumn=帆号
showCompetitorFullNameColumn=参赛队全名
loadingDimensionValues=正在加载尺寸值
runningQuery=运行查询
inviteBuoyTenders=浮标招标
inviteBuoyTenders=邀请浮标供应船
orMultipleEmails=或使用逗号隔开的多个电子邮件
courseOverGroundTrueDegreesTooltip=实在对地航向角度
courseOverGroundTrueDegrees=对地航向
@@ -1559,3 +1559,4 @@ oneTurnerRight=一圈即成级 - 右
current=水流
simulationLegendAlgorithmTimedOutText=越界
simulationLegendMixedLegText=方向不定的风
noTracksFound=未找到跟踪
@@ -12,7 +12,8 @@
"Offset" and "Fixed Bearing" are no longer offered until the application really offers
support for them, particularly during mark passing calculation.</li>
<li>Swiping the start time button to the left to reach the other buttons for entering
the racing procedure, start mode flag, etc. now works reliably.</li>
the racing procedure, start mode flag, etc. now works reliably, also in case
of multi-touch which may have made the app crash before.</li>
<li>Regatta-specific preferences now properly take precedence over the device configuration.
They are updated from the server when the regatta content is refreshed.</li>
</ul>
@@ -0,0 +1,11 @@
PolarChain1=ポーラー
PolarChain2=バックエンドポーラー
RaceColumn=レース列
LegIndex=レグ指数
PolarData=ポーラーデータ
Polars=ポーラー
GPSFix=GPS フィックス
WindRange=風範囲
WindIsConfident=風測定確度
Rank=ランク
BackendPolars=バックエンドポーラー
@@ -0,0 +1,11 @@
PolarChain1=Полярные данные
PolarChain2=Полярные данные бэкэнда
RaceColumn=Столбец гонки
LegIndex=Индекс отрезка
PolarData=Полярные данные
Polars=Полярные данные
GPSFix=Замер GPS
WindRange=Диапазон ветра
WindIsConfident=Достоверное измерение ветра
Rank=Ранг
BackendPolars=Полярные данные бэкэнда
@@ -0,0 +1,11 @@
PolarChain1=极坐标图
PolarChain2=后端极坐标图
RaceColumn=比赛轮次列
LegIndex=航段索引
PolarData=极坐标数据
Polars=极坐标图
GPSFix=GPS 修复
WindRange=风力范围
WindIsConfident=风力测量置信度
Rank=名次
BackendPolars=后端极坐标图
@@ -0,0 +1,11 @@
PolarChain1=极坐标图
PolarChain2=后端极坐标图
RaceColumn=比赛轮次列
LegIndex=航段索引
PolarData=极坐标数据
Polars=极坐标图
GPSFix=GPS 修复
WindRange=风力范围
WindIsConfident=风力测量置信度
Rank=名次
BackendPolars=后端极坐标图
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:40:57Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages.properties" source-language="en" target-language="ja">
<header>
<skl>
<internal-file crc="99b784fd6920a22f02e85034e5d2ef70" form="base64">H4sIAAAAAAAAAF2PTQrCQAyF93OKXEH32TiiFBSGunAdOrEObTPQaaHHd/6s4Cbv4yW8JMaPNOs3OTmgSRyU2a0jnqgbWCzUVksdaz+uk+AP1Y37RixvGAEylYwzLVRCIWExw3fN1TwubsMoEFU9ndiWpGdMBBmz2QTt5eUsy4I7QR66M4V15ika8TQZMBVVb67b/j74ALSew+fwAAAA</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="PolarChain1" resname="PolarChain1">
<source>Polars</source>
<target>ポーラー</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="PolarChain2" resname="PolarChain2">
<source>Backend Polars</source>
<target>バックエンドポーラー</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceColumn" resname="RaceColumn">
<source>RaceColumn</source>
<target>レース列</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegIndex" resname="LegIndex">
<source>Leg Index</source>
<target>レグ指数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="PolarData" resname="PolarData">
<source>Polar Data</source>
<target>ポーラーデータ</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Polars" resname="Polars">
<source>Polars</source>
<target>ポーラー</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="GPSFix" resname="GPSFix">
<source>GPS Fix</source>
<target>GPS フィックス</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindRange" resname="WindRange">
<source>Wind Range</source>
<target>風範囲</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindIsConfident" resname="WindIsConfident">
<source>Confident Wind Measurement</source>
<target>風測定確度</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Rank" resname="Rank">
<source>Rank</source>
<target state="translated">ランク</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="BackendPolars" resname="BackendPolars">
<source>Backend Polars</source>
<target>バックエンドポーラー</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:44:57Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages.properties" source-language="en" target-language="ru">
<header>
<skl>
<internal-file crc="99b784fd6920a22f02e85034e5d2ef70" form="base64">H4sIAAAAAAAAAF2PTQrCQAyF93OKXEH32TiiFBSGunAdOrEObTPQaaHHd/6s4Cbv4yW8JMaPNOs3OTmgSRyU2a0jnqgbWCzUVksdaz+uk+AP1Y37RixvGAEylYwzLVRCIWExw3fN1TwubsMoEFU9ndiWpGdMBBmz2QTt5eUsy4I7QR66M4V15ika8TQZMBVVb67b/j74ALSew+fwAAAA</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="PolarChain1" resname="PolarChain1">
<source>Polars</source>
<target>Полярные данные</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="PolarChain2" resname="PolarChain2">
<source>Backend Polars</source>
<target>Полярные данные бэкэнда</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceColumn" resname="RaceColumn">
<source>RaceColumn</source>
<target>Столбец гонки</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegIndex" resname="LegIndex">
<source>Leg Index</source>
<target>Индекс отрезка</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="PolarData" resname="PolarData">
<source>Polar Data</source>
<target>Полярные данные</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Polars" resname="Polars">
<source>Polars</source>
<target>Полярные данные</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="GPSFix" resname="GPSFix">
<source>GPS Fix</source>
<target>Замер GPS</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindRange" resname="WindRange">
<source>Wind Range</source>
<target>Диапазон ветра</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindIsConfident" resname="WindIsConfident">
<source>Confident Wind Measurement</source>
<target>Достоверное измерение ветра</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Rank" resname="Rank">
<source>Rank</source>
<target>Ранг</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="BackendPolars" resname="BackendPolars">
<source>Backend Polars</source>
<target>Полярные данные бэкэнда</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:40:57Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sailing.polars.datamining/resources/stringmessages/Polars_StringMessages.properties" source-language="en" target-language="zh-CN">
<header>
<skl>
<internal-file crc="99b784fd6920a22f02e85034e5d2ef70" form="base64">H4sIAAAAAAAAAF2PTQrCQAyF93OKXEH32TiiFBSGunAdOrEObTPQaaHHd/6s4Cbv4yW8JMaPNOs3OTmgSRyU2a0jnqgbWCzUVksdaz+uk+AP1Y37RixvGAEylYwzLVRCIWExw3fN1TwubsMoEFU9ndiWpGdMBBmz2QTt5eUsy4I7QR66M4V15ika8TQZMBVVb67b/j74ALSew+fwAAAA</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="PolarChain1" resname="PolarChain1">
<source>Polars</source>
<target>极坐标图</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="PolarChain2" resname="PolarChain2">
<source>Backend Polars</source>
<target>后端极坐标图</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="RaceColumn" resname="RaceColumn">
<source>RaceColumn</source>
<target>比赛轮次列</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="LegIndex" resname="LegIndex">
<source>Leg Index</source>
<target>航段索引</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="PolarData" resname="PolarData">
<source>Polar Data</source>
<target>极坐标数据</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Polars" resname="Polars">
<source>Polars</source>
<target>极坐标图</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="GPSFix" resname="GPSFix">
<source>GPS Fix</source>
<target>GPS 修复</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindRange" resname="WindRange">
<source>Wind Range</source>
<target>风力范围</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="WindIsConfident" resname="WindIsConfident">
<source>Confident Wind Measurement</source>
<target>风力测量置信度</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Rank" resname="Rank">
<source>Rank</source>
<target state="translated">名次</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="BackendPolars" resname="BackendPolars">
<source>Backend Polars</source>
<target>后端极坐标图</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -13,6 +13,7 @@ import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.domain.common.tracking.impl.CompetitorJsonConstants;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sse.common.Color;
import com.sap.sse.common.CountryCode;
public class CompetitorJsonSerializer implements JsonSerializer<Competitor> {
@@ -53,7 +54,8 @@ public class CompetitorJsonSerializer implements JsonSerializer<Competitor> {
result.put(idKeyAndValue.getKey(), idKeyAndValue.getValue());
}
result.put(CompetitorJsonConstants.FIELD_NAME, competitor.getName());
result.put(CompetitorJsonConstants.FIELD_DISPLAY_COLOR, competitor.getColor() == null ? null : competitor.getColor().getAsHtml());
Color color = getColor(competitor);
result.put(CompetitorJsonConstants.FIELD_DISPLAY_COLOR, color == null ? null : color.getAsHtml());
result.put(CompetitorJsonConstants.FIELD_EMAIL, competitor.getEmail());
result.put(CompetitorJsonConstants.FIELD_SEARCHTAG, competitor.getSearchTag());
result.put(CompetitorJsonConstants.FIELD_SAIL_ID, competitor.getBoat() == null ? "" : competitor.getBoat().getSailID());
@@ -69,7 +71,7 @@ public class CompetitorJsonSerializer implements JsonSerializer<Competitor> {
result.put(CompetitorJsonConstants.FIELD_TEAM, teamJsonSerializer.serialize(competitor.getTeam()));
}
if (boatJsonSerializer != null) {
result.put(CompetitorJsonConstants.FIELD_BOAT, boatJsonSerializer.serialize(competitor.getBoat()));
result.put(CompetitorJsonConstants.FIELD_BOAT, boatJsonSerializer.serialize(getBoat(competitor)));
}
result.put(CompetitorJsonConstants.FIELD_TIME_ON_TIME_FACTOR, competitor.getTimeOnTimeFactor());
result.put(CompetitorJsonConstants.FIELD_TIME_ON_DISTANCE_ALLOWANCE_IN_SECONDS_PER_NAUTICAL_MILE,
@@ -82,4 +84,13 @@ public class CompetitorJsonSerializer implements JsonSerializer<Competitor> {
Serializable competitorId = competitor.getId() instanceof UUID ? competitor.getId().toString() : competitor.getId();
return competitorId;
}
protected Color getColor(Competitor competitor ) {
return competitor.getColor();
}
protected Boat getBoat(Competitor competitor ) {
return competitor.getBoat();
}
}
@@ -0,0 +1,49 @@
package com.sap.sailing.server.gateway.serialization.impl;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.Team;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sse.common.Color;
/**
* This is a workaround for the serialization of a competitor with changing boats.
* The class should be removed after bug https://bugzilla.sapsailing.com/bugzilla/show_bug.cgi?id=2822 is resolved.
* @author Frank
*
*/
public class CompetitorWithChangingBoatJsonSerializer extends CompetitorJsonSerializer {
private final RaceDefinition race;
public CompetitorWithChangingBoatJsonSerializer() {
this(null, null, null);
}
public CompetitorWithChangingBoatJsonSerializer(RaceDefinition race, JsonSerializer<Team> teamJsonSerializer, JsonSerializer<Boat> boatSerializer) {
super(teamJsonSerializer, boatSerializer);
this.race = race;
}
@Override
protected Color getColor(Competitor competitor ) {
if (race != null) {
Boat boatOfCompetitor = race.getBoatOfCompetitorById(competitor.getId());
if (boatOfCompetitor != null) {
return boatOfCompetitor.getColor();
}
}
return super.getColor(competitor);
}
@Override
protected Boat getBoat(Competitor competitor ) {
if (race != null) {
Boat boatOfCompetitor = race.getBoatOfCompetitorById(competitor.getId());
if (boatOfCompetitor != null) {
return boatOfCompetitor;
}
}
return super.getBoat(competitor);
}
}
@@ -0,0 +1,36 @@
package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.RaceDefinition;
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
public class RaceEntriesJsonSerializer implements JsonSerializer<RaceDefinition> {
public static final String FIELD_NAME = "name";
public static final String FIELD_COMPETITORS = "competitors";
private final JsonSerializer<Competitor> competitorSerializer;
public RaceEntriesJsonSerializer() {
this(null);
}
public RaceEntriesJsonSerializer(JsonSerializer<Competitor> competitorSerializer) {
this.competitorSerializer = competitorSerializer;
}
public JSONObject serialize(RaceDefinition race) {
JSONObject result = new JSONObject();
result.put(FIELD_NAME, race.getName());
if(competitorSerializer != null) {
JSONArray competitorsJson = new JSONArray();
for (Competitor competitor: race.getCompetitors()) {
competitorsJson.add(competitorSerializer.serialize(competitor));
}
result.put(FIELD_COMPETITORS, competitorsJson);
}
return result;
}
}
@@ -59,10 +59,12 @@ import com.sap.sailing.server.gateway.serialization.impl.BoatClassJsonSerializer
import com.sap.sailing.server.gateway.serialization.impl.BoatJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.ColorJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.CompetitorWithChangingBoatJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.DurationJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.FleetJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.NationalityJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.PersonJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.RaceEntriesJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.RegattaJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.SeriesJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.TeamJsonSerializer;
@@ -172,6 +174,40 @@ public class RegattasResource extends AbstractSailingServerResource {
return response;
}
/**
* Gets all entries for a race.
*
* @param regattaName
* the name of the regatta
* @return
*/
@GET
@Produces("application/json;charset=UTF-8")
@Path("{regattaname}/races/{racename}/entries")
public Response getEntries(@PathParam("regattaname") String regattaName, @PathParam("racename") String raceName) {
Response response;
Regatta regatta = findRegattaByName(regattaName);
if (regatta == null) {
response = getBadRegattaErrorResponse(regattaName);
} else {
RaceDefinition race = findRaceByName(regatta, raceName);
if (race == null) {
response = getBadRaceErrorResponse(regattaName, raceName);
} else {
NationalityJsonSerializer nationalityJsonSerializer = new NationalityJsonSerializer();
CompetitorJsonSerializer competitorJsonSerializer = new CompetitorWithChangingBoatJsonSerializer(race, new TeamJsonSerializer(
new PersonJsonSerializer(nationalityJsonSerializer)), new BoatJsonSerializer(
new BoatClassJsonSerializer()));
JsonSerializer<RaceDefinition> raceEntriesSerializer = new RaceEntriesJsonSerializer(competitorJsonSerializer);
JSONObject serializedRaceEntries = raceEntriesSerializer.serialize(race);
String json = serializedRaceEntries.toJSONString();
response = Response.ok(json).header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build();
}
}
return response;
}
/**
* Gets all GPS positions of the competitors for a given race.
*
@@ -60,6 +60,10 @@ name to make sure you get to the event you're interested in.
<td><a href="entriesGetDoc.html">/api/v1/regattas/{name}/entries</a></td>
<td>Gets the entries of a regatta</td>
</tr>
<tr>
<td><a href="raceEntriesGetDoc.html">/api/v1/regattas/{regattaname}/races/{racename}/entries</a></td>
<td>Gets the entries of a race</td>
</tr>
<tr>
<td><a href="raceBearingOfFirstLegGetDoc.html">/api/v1/regattas/{regattaname}/races/{racename}/firstlegbearing</a></td>
<td>Gets the bearing of the first leg</td>
@@ -0,0 +1,46 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link href='../../../../sailing-fontface-1.0.cache.css' media='screen' rel='stylesheet' title='Default stylesheet' type='text/css' />
<link href='../../../main.css' media='screen' rel='stylesheet' title='Default stylesheet' type='text/css' />
<link rel='icon' href='../../../../sap.ico' type='image/x-icon'>
<title>SAP Sailing Analytics Webservices API Version 1.0 Beta</title>
</head>
<body>
<h1>SAP Sailing Analytics Webservices API Version 1.0 Beta</h1>
<h2>URL: /api/v1/regattas/{regattaname}/races/{racename}/entries</h2>
<b>Description:</b>
<p>The service gets the entries (competitor list) of a race</p>
<br/>
<table>
<tr>
<td>Webservice Type:</td>
<td>REST</td>
</tr>
<tr>
<td>Output format:</td>
<td>Json</td>
</tr>
<tr>
<td>Mandatory parameters:</td>
<td>None</td>
</tr>
<tr>
<td>Optional parameters:</td>
<td>None</td>
</tr>
<tr>
<td>Request method:</td>
<td>GET</td>
</tr>
<tr>
<td>Example:</td>
<td><a href="http://www.sapsailing.com/sailingserver/api/v1/regattas/Kieler Woche (5o5)/races/Race 1/entries">http://www.sapsailing.com/sailingserver/api/v1/regattas/Kieler Woche (5o5)/races/Race 1/entries</a></td>
</tr>
</table>
<div style="height: 1em;"></div>
<a href="index.html">Back to Web Service Overview</a>
</body>
</html>
@@ -0,0 +1,111 @@
package com.sap.sailing.server.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.server.RacingEventService;
import com.sap.sailing.server.impl.RacingEventServiceImpl;
import com.sap.sailing.server.operationaltransformation.AddLeaderboardGroupToEvent;
import com.sap.sailing.server.operationaltransformation.CreateEvent;
import com.sap.sailing.server.operationaltransformation.CreateLeaderboardGroup;
import com.sap.sailing.server.operationaltransformation.RemoveEvent;
import com.sap.sailing.server.operationaltransformation.RemoveLeaderboard;
import com.sap.sailing.server.operationaltransformation.RemoveLeaderboardGroup;
import com.sap.sailing.server.operationaltransformation.RemoveRegatta;
import com.sap.sailing.server.operationaltransformation.UpdateLeaderboardGroup;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.shared.media.ImageDescriptor;
import com.sap.sse.shared.media.VideoDescriptor;
public class RemoveLeaderboardGroupTest {
private RacingEventService server;
private Event pfingstbusch;
@Before
public void setUp() {
server = new RacingEventServiceImpl();
List<Event> allEvents = new ArrayList<>();
Util.addAll(server.getAllEvents(), allEvents);
for (final Event e : allEvents) {
server.apply(new RemoveEvent(e.getId()));
}
Map<String, Leaderboard> allLeaderboards = new HashMap<>(server.getLeaderboards());
for (final String leaderboardName : allLeaderboards.keySet()) {
server.apply(new RemoveLeaderboard(leaderboardName));
}
Map<String, LeaderboardGroup> allLeaderboardGroups = new HashMap<>(server.getLeaderboardGroups());
for (final String leaderboardGroupName : allLeaderboardGroups.keySet()) {
server.apply(new RemoveLeaderboardGroup(leaderboardGroupName));
}
server.apply(new RemoveRegatta(new RegattaName("Pfingstbusch (29er)")));
server.apply(new RemoveRegatta(new RegattaName("Pfingstbusch (470)")));
server.apply(new RemoveRegatta(new RegattaName("Aalregatta (ORC)")));
final Calendar cal = new GregorianCalendar();
cal.set(2014, 5, 6, 10, 00);
final TimePoint pfingstbuschStartDate = new MillisecondsTimePoint(cal.getTime());
cal.set(2014, 5, 8, 16, 00);
final TimePoint pfingstbuschEndDate = new MillisecondsTimePoint(cal.getTime());
pfingstbusch = server.apply(new CreateEvent("Pfingstbusch", /* eventDescription */ null, pfingstbuschStartDate, pfingstbuschEndDate,
"Kiel", /* isPublic */ true, UUID.randomUUID(), /* officialWebsiteURLAsString */ null, /* sailorsInfoWebsiteURLAsString */ null,
/* images */Collections.<ImageDescriptor> emptyList(), /* videos */Collections.<VideoDescriptor> emptyList()));
final LeaderboardGroup pfingstbuschLeaderboardGroup = server.apply(new CreateLeaderboardGroup("Pfingstbusch", "Pfingstbusch", /* displayName */ null,
/* displayGroupsInReverseOrder */ false, /* leaderboard names */ Collections.emptyList(),
new int[0], /* overallLeaderboardScoringSchemeType */ ScoringSchemeType.LOW_POINT));
server.apply(new AddLeaderboardGroupToEvent(pfingstbusch.getId(), pfingstbuschLeaderboardGroup.getId()));
}
@Test
public void testOverallLeaderboardPresent() {
final Leaderboard overallLeaderboard = server.getLeaderboardByName("Pfingstbusch "+LeaderboardNameConstants.OVERALL);
assertNotNull(overallLeaderboard);
}
@Test
public void testOverallLeaderboardDisappearsWhenUpdatingLeaderboardGroup() {
server.apply(new UpdateLeaderboardGroup("Pfingstbusch", "Pfingstbusch", "Pfingstbusch", /* displayName */ null,
/* newLeaderboardNames */ Collections.emptyList(),
new int[0], /* overallLeaderboardScoringSchemeType */ null));
final Leaderboard overallLeaderboard = server.getLeaderboardByName("Pfingstbusch "+LeaderboardNameConstants.OVERALL);
assertNull(overallLeaderboard);
}
@Test
public void testRemovingOverallLeaderboardUnlinksItFromLeaderboardGroup() {
assertNotNull(pfingstbusch.getLeaderboardGroups().iterator().next().getOverallLeaderboard());
server.apply(new RemoveLeaderboard("Pfingstbusch "+LeaderboardNameConstants.OVERALL));
final Leaderboard overallLeaderboard = server.getLeaderboardByName("Pfingstbusch "+LeaderboardNameConstants.OVERALL);
assertNull(overallLeaderboard);
assertNull(pfingstbusch.getLeaderboardGroups().iterator().next().getOverallLeaderboard());
}
@Test
public void testRemovingLeaderboardGroupRemovesOverallLeaderboardAndUnlinksItFromEvent() {
assertEquals(1, Util.size(pfingstbusch.getLeaderboardGroups()));
server.apply(new RemoveLeaderboardGroup("Pfingstbusch"));
final Leaderboard overallLeaderboard = server.getLeaderboardByName("Pfingstbusch "+LeaderboardNameConstants.OVERALL);
assertNull(overallLeaderboard);
assertFalse(pfingstbusch.getLeaderboardGroups().iterator().hasNext());
}
}
@@ -60,13 +60,16 @@ import com.sap.sailing.server.gateway.serialization.impl.LeaderboardSearchResult
import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer;
import com.sap.sailing.server.impl.RacingEventServiceImpl;
import com.sap.sailing.server.operationaltransformation.AddColumnToSeries;
import com.sap.sailing.server.operationaltransformation.AddLeaderboardGroupToEvent;
import com.sap.sailing.server.operationaltransformation.AddRaceDefinition;
import com.sap.sailing.server.operationaltransformation.AddSpecificRegatta;
import com.sap.sailing.server.operationaltransformation.CreateEvent;
import com.sap.sailing.server.operationaltransformation.CreateLeaderboardGroup;
import com.sap.sailing.server.operationaltransformation.CreateRegattaLeaderboard;
import com.sap.sailing.server.operationaltransformation.CreateTrackedRace;
import com.sap.sailing.server.operationaltransformation.RemoveEvent;
import com.sap.sailing.server.operationaltransformation.RemoveLeaderboard;
import com.sap.sailing.server.operationaltransformation.RemoveLeaderboardGroup;
import com.sap.sailing.server.operationaltransformation.RemoveRegatta;
import com.sap.sse.common.Color;
import com.sap.sse.common.TimePoint;
@@ -104,13 +107,17 @@ public class SearchServiceTest {
server = new RacingEventServiceImpl();
List<Event> allEvents = new ArrayList<>();
Util.addAll(server.getAllEvents(), allEvents);
for (Event e : allEvents) {
for (final Event e : allEvents) {
server.apply(new RemoveEvent(e.getId()));
}
Map<String, Leaderboard> allLeaderboards = new HashMap<>(server.getLeaderboards());
for (String leaderboardName : allLeaderboards.keySet()) {
for (final String leaderboardName : allLeaderboards.keySet()) {
server.apply(new RemoveLeaderboard(leaderboardName));
}
Map<String, LeaderboardGroup> allLeaderboardGroups = new HashMap<>(server.getLeaderboardGroups());
for (final String leaderboardGroupName : allLeaderboardGroups.keySet()) {
server.apply(new RemoveLeaderboardGroup(leaderboardGroupName));
}
server.apply(new RemoveRegatta(new RegattaName("Pfingstbusch (29er)")));
server.apply(new RemoveRegatta(new RegattaName("Pfingstbusch (470)")));
server.apply(new RemoveRegatta(new RegattaName("Aalregatta (ORC)")));
@@ -119,8 +126,8 @@ public class SearchServiceTest {
final TimePoint pfingstbuschStartDate = new MillisecondsTimePoint(cal.getTime());
cal.set(2014, 5, 8, 16, 00);
final TimePoint pfingstbuschEndDate = new MillisecondsTimePoint(cal.getTime());
pfingstbusch = server.apply(new CreateEvent("Pfingsbusch", /* eventDescription */ null, pfingstbuschStartDate, pfingstbuschEndDate, /* isPublic */
"Kiel", true, UUID.randomUUID(), /* officialWebsiteURLAsString */ null, /* sailorsInfoWebsiteURLAsString */ null,
pfingstbusch = server.apply(new CreateEvent("Pfingsbusch", /* eventDescription */ null, pfingstbuschStartDate, pfingstbuschEndDate,
"Kiel", /* isPublic */ true, UUID.randomUUID(), /* officialWebsiteURLAsString */ null, /* sailorsInfoWebsiteURLAsString */ null,
/* images */Collections.<ImageDescriptor> emptyList(), /* videos */Collections.<VideoDescriptor> emptyList()));
kiel = pfingstbusch.getVenue();
final CourseAreaImpl kielAlpha = new CourseAreaImpl("Alpha", UUID.randomUUID());
@@ -149,12 +156,16 @@ public class SearchServiceTest {
server.apply(new AddColumnToSeries(pfingstbusch470.getRegattaIdentifier(), "Default", "R3"));
RegattaLeaderboard pfingstbusch470Leaderboard = server.apply(new CreateRegattaLeaderboard(pfingstbusch470.getRegattaIdentifier(),
/* leaderboardDisplayName */ null, /* discardThresholds */ new int[0]));
final LeaderboardGroup pfingstbuschLeaderboardGroup = server.apply(new CreateLeaderboardGroup("Pfingstbusch", "Pfingstbusch", /* displayName */ null,
/* displayGroupsInReverseOrder */ false, Arrays.asList(new String[] { RegattaImpl.getDefaultName("Pfingstbusch", "29er"), RegattaImpl.getDefaultName("Pfingstbusch", "470") }),
new int[0], /* overallLeaderboardScoringSchemeType */ null));
server.apply(new AddLeaderboardGroupToEvent(pfingstbusch.getId(), pfingstbuschLeaderboardGroup.getId()));
cal.set(2014, 5, 7, 10, 00);
final TimePoint aalStartDate = new MillisecondsTimePoint(cal.getTime());
cal.set(2014, 5, 8, 18, 00);
final TimePoint aalEndDate = new MillisecondsTimePoint(cal.getTime());
aalEvent = server.apply(new CreateEvent("Aalregatta", /* eventDescription */ null, aalStartDate, aalEndDate, /* isPublic */
"Flensburg", true, UUID.randomUUID(), /* officialWebsiteURLAsString */ null, /*sailorsInfoWebsiteURLAsString */ null,
aalEvent = server.apply(new CreateEvent("Aalregatta", /* eventDescription */ null, aalStartDate, aalEndDate,
"Flensburg", /* isPublic */ true, UUID.randomUUID(), /* officialWebsiteURLAsString */ null, /*sailorsInfoWebsiteURLAsString */ null,
/* images */Collections.<ImageDescriptor> emptyList(), /* videos */Collections.<VideoDescriptor> emptyList()));
flensburg = aalEvent.getVenue();
final CourseAreaImpl flensburgStandard = new CourseAreaImpl("Standard", UUID.randomUUID());
@@ -167,6 +178,10 @@ public class SearchServiceTest {
server.apply(new AddColumnToSeries(aalRegatta.getRegattaIdentifier(), "Default", "R2"));
RegattaLeaderboard aalRegattaLeaderboard = server.apply(new CreateRegattaLeaderboard(aalRegatta.getRegattaIdentifier(),
/* leaderboardDisplayName */ null, /* discardThresholds */ new int[0]));
final LeaderboardGroup aalLeaderboardGroup = server.apply(new CreateLeaderboardGroup("Aal Regatta", "Aal Regatta", /* displayName */ null,
/* displayGroupsInReverseOrder */ false, Collections.singletonList(RegattaImpl.getDefaultName("Aalregatta", "ORC")),
new int[0], /* overallLeaderboardScoringSchemeType */ null));
server.apply(new AddLeaderboardGroupToEvent(aalEvent.getId(), aalLeaderboardGroup.getId()));
hassoPlattner = AbstractTracTracLiveTest.createCompetitor("Hasso Plattner");
alexanderRies = AbstractTracTracLiveTest.createCompetitor("Alexander Ries");
antonKoch = AbstractTracTracLiveTest.createCompetitor("Anton Koch");
@@ -189,6 +189,7 @@ import com.sap.sailing.server.operationaltransformation.RecordMarkGPSFixForNewMa
import com.sap.sailing.server.operationaltransformation.RecordWindFix;
import com.sap.sailing.server.operationaltransformation.RemoveDeviceConfiguration;
import com.sap.sailing.server.operationaltransformation.RemoveEvent;
import com.sap.sailing.server.operationaltransformation.RemoveLeaderboardGroupFromEvent;
import com.sap.sailing.server.operationaltransformation.RemoveMediaTrackOperation;
import com.sap.sailing.server.operationaltransformation.RemoveWindFix;
import com.sap.sailing.server.operationaltransformation.RenameEvent;
@@ -1004,15 +1005,15 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
}
/**
* Checks all groups, if they contain a leaderboard with the <code>removedLeaderboardName</code> and removes it from
* the group.
* Checks all groups, if they contain a leaderboard with the <code>removedLeaderboardName</code> or reference it as their
* overall leaderboard and removes it from the group or unlinks it as the overall leaderboard, respectively.
*
* @param removedLeaderboardName
*/
private void syncGroupsAfterLeaderboardRemove(String removedLeaderboardName, boolean doDatabaseUpdate) {
boolean groupNeedsUpdate = false;
for (LeaderboardGroup leaderboardGroup : leaderboardGroupsByName.values()) {
for (Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) {
for (final Leaderboard leaderboard : leaderboardGroup.getLeaderboards()) {
if (leaderboard.getName().equals(removedLeaderboardName)) {
leaderboardGroup.removeLeaderboard(leaderboard);
groupNeedsUpdate = true;
@@ -1020,7 +1021,10 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
break;
}
}
if (leaderboardGroup.getOverallLeaderboard() != null && leaderboardGroup.getOverallLeaderboard().getName().equals(removedLeaderboardName)) {
leaderboardGroup.setOverallLeaderboard(null);
groupNeedsUpdate = true;
}
if (doDatabaseUpdate && groupNeedsUpdate) {
mongoObjectFactory.storeLeaderboardGroup(leaderboardGroup);
}
@@ -2260,6 +2264,16 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
try {
leaderboardGroup = leaderboardGroupsByName.remove(groupName);
if (leaderboardGroup != null) {
for (final Event event : eventsById.values()) {
if (Util.contains(event.getLeaderboardGroups(), leaderboardGroup)) {
// unlink the leaderboard group from the event; note that the operation is not "apply"-ed to
// this service because it would redundantly replicate; a replica, however, would already have
// received the call to this method and should carry out the following statement locally.
// As such, using the operation to unlink the leaderboard group from the event is only trying
// to avoid duplication of code contained in the operation's internalApplyTo method
new RemoveLeaderboardGroupFromEvent(event.getId(), leaderboardGroup.getId()).internalApplyTo(this);
}
}
leaderboardGroupsByID.remove(leaderboardGroup.getId());
}
} finally {
@@ -7,6 +7,8 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CourseArea;
@@ -95,7 +97,11 @@ public class RegattaByKeywordSearchService {
return leaderboardStrings;
}
};
for (Leaderboard matchingLeaderboard : leaderboardFilter.applyFilter(query.getKeywords(), racingEventService.getLeaderboards().values())) {
final Set<Leaderboard> leaderboardsToConsider = StreamSupport.stream(racingEventService.getAllEvents().spliterator(), /* parallel */ false).filter(e->e.isPublic()).
flatMap(e->StreamSupport.stream(e.getLeaderboardGroups().spliterator(), /* parallel */ false)).
flatMap(lg->StreamSupport.stream(lg.getLeaderboards().spliterator(), /* parallel */ false)).
collect(Collectors.toSet());
for (Leaderboard matchingLeaderboard : leaderboardFilter.applyFilter(query.getKeywords(), leaderboardsToConsider)) {
result.addHit(new LeaderboardSearchResultImpl(matchingLeaderboard,
getEventsForLeaderboard(matchingLeaderboard, leaderboardGroupsForLeaderboard,
eventsForLeaderboardGroup, eventForCourseArea), leaderboardGroupsForLeaderboard
@@ -22,7 +22,7 @@ public class RemoveLeaderboardGroupFromEvent extends AbstractRacingEventServiceO
}
@Override
public Boolean internalApplyTo(RacingEventService toState) throws Exception {
public Boolean internalApplyTo(RacingEventService toState) {
boolean updated = false;
Event event = toState.getEvent(eventId);
if (event != null) {
@@ -772,7 +772,8 @@ public class LeaderboardData extends ExportAction {
addNamedElementWithValue(competitorLegDataElement, "leg_rank_at_leg_finish", competitorLeg.getRank(legFinishTime));
if (legCounter>1) {
addNamedElementWithValue(competitorLegDataElement, "rank_gain_for_this_leg_between_start_and_finish", competitorLeg.getRank(competitorLeg.getStartTime())-competitorLeg.getRank(legFinishTime));
final TrackedLegOfCompetitor previousLeg = competitorLeg.getTrackedLeg().getTrackedRace().getTrackedLegFinishingAt(competitorLeg.getLeg().getFrom()).getTrackedLeg(competitor);
addNamedElementWithValue(competitorLegDataElement, "rank_gain_for_this_leg_between_start_and_finish", previousLeg.getRank(previousLeg.getFinishTime())-competitorLeg.getRank(legFinishTime));
} else {
addNamedElementWithValue(competitorLegDataElement, "rank_gain_for_this_leg_between_start_and_finish", 0);
}
@@ -1,18 +0,0 @@
package com.sap.sse.common.test;
import static org.junit.Assert.assertEquals;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import org.junit.Test;
public class TestUrlEncoding {
@Test
public void testUrlQueryStringEncoding() throws UnsupportedEncodingException {
final String s = "Test & Test";
assertEquals("Test+%26+Test", URLEncoder.encode(s, "UTF-8"));
assertEquals(s, URLDecoder.decode(URLEncoder.encode(s, "UTF-8"), "UTF-8"));
}
}
@@ -5,7 +5,6 @@ package com.sap.sse.common.util;
* GWT context does not offer full implementations of URL/URI. *
*/
public interface UrlHelper {
String encodeUrl(String decodedUrlString);
String encodeQueryString(String queryString);
}
@@ -0,0 +1,11 @@
Average=平均
Median=中央値
Sum=合計
Maximum=最大
Minimum=最小
Count=カウント
Meters=m
Knots=kn
Collecting=コレクション
ResultSignifier={0} ({1})
SignifierInUnit={0} / {1}
@@ -0,0 +1,11 @@
Average=Среднее
Median=Медиана
Sum=Сумма
Maximum=Максимум
Minimum=Минимум
Count=Количество
Meters=м
Knots=уз.
Collecting=Коллекция
ResultSignifier={0} ({1})
SignifierInUnit={0} в {1}
@@ -0,0 +1,11 @@
Average=平均值
Median=中值
Sum=求和
Maximum=最大值
Minimum=最小值
Count=计数
Meters=m
Knots=kn
Collecting=集合
ResultSignifier={0} ({1})
SignifierInUnit={0}(单位:{1}
@@ -0,0 +1,11 @@
Average=平均值
Median=中值
Sum=求和
Maximum=最大值
Minimum=最小值
Count=计数
Meters=m
Knots=kn
Collecting=集合
ResultSignifier={0} ({1})
SignifierInUnit={0}(单位:{1}
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:43:15Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sse.datamining/resources/stringmessages/StringMessages.properties" source-language="en" target-language="ja">
<header>
<skl>
<internal-file crc="299055c6be272a85a07b907e3c6ce40a" form="base64">H4sIAAAAAAAAAD2MQQoCMQxF9znFLHWnB8hicCXSjYMHKBpLsE2hTQdhmLsbpuoieT958MeZig+EYyc4erAX7ICpJbQB59+cLH8JjqXfnXDKTRS3bQ1KpWKCi2St+BKzMdJdWQL+Yha4Um1RJw7CT6aCy2Eddstx3cP/d5absG6GZTAHH6Y6WeOvAAAA</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:06Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Average" resname="Average">
<source>Average</source>
<target>平均</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Median" resname="Median">
<source>Median</source>
<target>中央値</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Sum" resname="Sum">
<source>Sum</source>
<target>合計</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Maximum" resname="Maximum">
<source>Maximum</source>
<target>最大</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Minimum" resname="Minimum">
<source>Minimum</source>
<target>最小</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Count" resname="Count">
<source>Count</source>
<target>カウント</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Meters" resname="Meters">
<source>m</source>
<target state="translated">m</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Knots" resname="Knots">
<source>kn</source>
<target>kn</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Collecting" resname="Collecting">
<source>Collection</source>
<target>コレクション</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="ResultSignifier" resname="ResultSignifier">
<source><ph id="1">{0}</ph> (<ph id="2">{1}</ph>)</source>
<target><ph id="1">{0}</ph> (<ph id="2">{1}</ph>)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SignifierInUnit" resname="SignifierInUnit">
<source><ph id="1">{0}</ph> in <ph id="2">{1}</ph></source>
<target><ph id="1">{0}</ph> / <ph id="2">{1}</ph></target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T13:02:56Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sse.datamining/resources/stringmessages/StringMessages.properties" source-language="en" target-language="ru">
<header>
<skl>
<internal-file crc="299055c6be272a85a07b907e3c6ce40a" form="base64">H4sIAAAAAAAAAD2MQQoCMQxF9znFLHWnB8hicCXSjYMHKBpLsE2hTQdhmLsbpuoieT958MeZig+EYyc4erAX7ICpJbQB59+cLH8JjqXfnXDKTRS3bQ1KpWKCi2St+BKzMdJdWQL+Yha4Um1RJw7CT6aCy2Eddstx3cP/d5absG6GZTAHH6Y6WeOvAAAA</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:06Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Average" resname="Average">
<source>Average</source>
<target>Среднее</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Median" resname="Median">
<source>Median</source>
<target>Медиана</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Sum" resname="Sum">
<source>Sum</source>
<target>Сумма</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Maximum" resname="Maximum">
<source>Maximum</source>
<target>Максимум</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Minimum" resname="Minimum">
<source>Minimum</source>
<target>Минимум</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Count" resname="Count">
<source>Count</source>
<target>Количество</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Meters" resname="Meters">
<source>m</source>
<target state="translated">м</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Knots" resname="Knots">
<source>kn</source>
<target>уз.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Collecting" resname="Collecting">
<source>Collection</source>
<target>Коллекция</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="ResultSignifier" resname="ResultSignifier">
<source><ph id="1">{0}</ph> (<ph id="2">{1}</ph>)</source>
<target><ph id="1">{0}</ph> (<ph id="2">{1}</ph>)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SignifierInUnit" resname="SignifierInUnit">
<source><ph id="1">{0}</ph> in <ph id="2">{1}</ph></source>
<target><ph id="1">{0}</ph> в <ph id="2">{1}</ph></target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:43:15Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sse.datamining/resources/stringmessages/StringMessages.properties" source-language="en" target-language="zh-CN">
<header>
<skl>
<internal-file crc="299055c6be272a85a07b907e3c6ce40a" form="base64">H4sIAAAAAAAAAD2MQQoCMQxF9znFLHWnB8hicCXSjYMHKBpLsE2hTQdhmLsbpuoieT958MeZig+EYyc4erAX7ICpJbQB59+cLH8JjqXfnXDKTRS3bQ1KpWKCi2St+BKzMdJdWQL+Yha4Um1RJw7CT6aCy2Eddstx3cP/d5absG6GZTAHH6Y6WeOvAAAA</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:06Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Average" resname="Average">
<source>Average</source>
<target>平均值</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Median" resname="Median">
<source>Median</source>
<target>中值</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Sum" resname="Sum">
<source>Sum</source>
<target>求和</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Maximum" resname="Maximum">
<source>Maximum</source>
<target>最大值</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Minimum" resname="Minimum">
<source>Minimum</source>
<target>最小值</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Count" resname="Count">
<source>Count</source>
<target>计数</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Meters" resname="Meters">
<source>m</source>
<target state="translated">m</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Knots" resname="Knots">
<source>kn</source>
<target>kn</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="Collecting" resname="Collecting">
<source>Collection</source>
<target>集合</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="ResultSignifier" resname="ResultSignifier">
<source><ph id="1">{0}</ph> (<ph id="2">{1}</ph>)</source>
<target><ph id="1">{0}</ph> (<ph id="2">{1}</ph>)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="SignifierInUnit" resname="SignifierInUnit">
<source><ph id="1">{0}</ph> in <ph id="2">{1}</ph></source>
<target><ph id="1">{0}</ph>(单位:<ph id="2">{1}</ph></target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,7 @@
s3Desc=ファイルを Amazon S3 に保管します。結果として得られるファイル名は、ランダムな UUID に元のファイルの末尾を加えたものです。
s3AccessIdDesc=アクセス ID (空白のままにすると、代わりに ~/.aws/credentials を使用)
s3AccessKeyDesc=秘密アクセスキー (空白のままにすると、代わりに ~/.aws/credentials を使用)
s3BucketNameDesc=使用するバケットの名称 (すでに存在していること、かつユーザに十分な権限があることが必要)
localDesc=ローカルファイルシステムにファイルを保管するサービスです。ファイルは、ローカルパス + ファイル名で保管され、ベース URL + ファイル名でアクセスできます。そのため、ベース URL にあるコンテンツはリモートからアクセス可能でなければなりません。これはたとえば、複製上の static.sapsailing.com などからローカルパスにリモートファイルシステムをマウントすることによって達成することができます。
localBaseUrlDesc=ベース URL + ファイル名 = アップロードしたファイルがアクセス可能となる場所の URL
localLocalPathDesc=ファイル保管に使用するローカルパス
@@ -0,0 +1,7 @@
s3Desc=Храните файлы на Amazon S3. Результирующее имя файла — случайный UUID плюс расширение исходного файла.
s3AccessIdDesc=Ид. доступа (оставьте пустым, чтобы использовать ~/.aws/credentials)
s3AccessKeyDesc=Секретный ключ доступа (leave blank to use ~/.aws/credentials instead)
s3BucketNameDesc=Имя используемого бакета (должен уже существовать, пользователю необходимы достаточные разрешения доступа)
localDesc=Сервис для хранения файлов в локальной файловой системе. Файлы сохраняются в папке локальныйПуть+имяФайла и доступны по адресу базовыйUrl+имяФайла. Соответственно, необходима возможность удаленного доступа к содержимому по адресу базовыйUrl. Этого можно достичь, смонтировав удаленную файловую систему (например, из static.sapsailing.com) в папке локальныйПуть на репликах.
localBaseUrlDesc=Базовый URL + имяФайла = URL для доступа к выложенному файлу
localLocalPathDesc=Локальный путь для файлового хранилища
@@ -0,0 +1,7 @@
s3Desc=将文件存储在 Amazon S3 中。生成的文件名称为随机的 UUID 加原始文件结尾。
s3AccessIdDesc=访问编号(留空,改用 ~/.aws/credentials
s3AccessKeyDesc=秘密访问密钥(留空,改用 ~/.aws/credentials
s3BucketNameDesc=所用存储段的名称(必须已存在,并且用户需要足够的权限)
localDesc=用于在本地文件系统中存储文件的服务。文件存储在 localPath+fileName 中,可以在 baseUrl+fileName 访问。请注意,必须可以远程访问 baseUrl 中的内容。例如,可以从 localPath 副本所在的 static.sapsailing.com 安装远程文件系统。
localBaseUrlDesc=基本 URL + 文件名称 = URL,其中可以访问上传的文件
localLocalPathDesc=用于存储文件的本地路径
@@ -0,0 +1,7 @@
s3Desc=将文件存储在 Amazon S3 中。生成的文件名称为随机的 UUID 加原始文件结尾。
s3AccessIdDesc=访问编号(留空,改用 ~/.aws/credentials
s3AccessKeyDesc=秘密访问密钥(留空,改用 ~/.aws/credentials
s3BucketNameDesc=所用存储段的名称(必须已存在,并且用户需要足够的权限)
localDesc=用于在本地文件系统中存储文件的服务。文件存储在 localPath+fileName 中,可以在 baseUrl+fileName 访问。请注意,必须可以远程访问 baseUrl 中的内容。例如,可以从 localPath 副本所在的 static.sapsailing.com 安装远程文件系统。
localBaseUrlDesc=基本 URL + 文件名称 = URL,其中可以访问上传的文件
localLocalPathDesc=用于存储文件的本地路径
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:42:17Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sse.filestorage/resources/stringmessages/FileStorageStringMessages.properties" source-language="en" target-language="ja">
<header>
<skl>
<internal-file crc="37afe0b1eb405886cd475fe305c64722" form="base64">H4sIAAAAAAAAAJ1SwW7bMAy95yt4bNHBPeTcQ4tiQLGiGNrmAxiZTojSkiHKSb3Dvn2klGTddSdL1OPj4/PT9SNpuHsrKRMMLKSQItyP+Ms+b+sO3vcEmXSWwnFXERBxJGAFhIyxTyNsNk+PMMmsUAydMu84ojQwxd4au5Wu70Mg1ae+DmwXsL4rITwQbAXjB5QEsxL8vu3wqLchU0+xMIoCRy2E/fWF6ActTToZrMCJ0Kr/wfgwhw8qL7ZXpfQDpAFa+UxxtUf1M0q2tgXok7V8A7PAnzNEol5B52HgwDYEJsojq3KKer2SFFBOgvOBg7mdMqj5fvbVFVUDK7S5p4tpHDv4Xt93JsY7qHdohf3Esr9xaNXsWgJG2Nqx+mFILLBFpU2Wv7iXVMhG2ZPPCykW1yuLSzHmEx7GWSsi0+DxuLDyVjwUo7HI4hGxMPhY34g+cZyEKnbPdDAF2wXGNMcaIDz1fV3vax8M2QKlBQuHTnFSZPH8BKumZk+mSTi0f3HxoGsGPzTl1Wc/w+b1GW7gsvhdLRx9JZgnSdibvirlyCL/btgYn88TKme9gV/PqXDtbRf7Mbij1R9TuhdHUgMAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3Desc" resname="s3Desc">
<source>Store files on Amazon S3. The resulting file name is a random UUID plus the original file ending.</source>
<target>ファイルを Amazon S3 に保管します。結果として得られるファイル名は、ランダムな UUID に元のファイルの末尾を加えたものです。</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3AccessIdDesc" resname="s3AccessIdDesc">
<source>Access ID (leave blank to use ~/.aws/credentials instead)</source>
<target>アクセス ID (空白のままにすると、代わりに ~/.aws/credentials を使用)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3AccessKeyDesc" resname="s3AccessKeyDesc">
<source>Secret Access Key (leave blank to use ~/.aws/credentials instead)</source>
<target>秘密アクセスキー (空白のままにすると、代わりに ~/.aws/credentials を使用)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3BucketNameDesc" resname="s3BucketNameDesc">
<source>Name of Bucket to use (has to already exist, and user needs sufficient permissions)</source>
<target>使用するバケットの名称 (すでに存在していること、かつユーザに十分な権限があることが必要)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="localDesc" resname="localDesc">
<source>Service for storing files in the local file system. Files get stored in localPath+fileName and can be accessed at baseUrl+fileName Note that the content lying in baseUrl must therefore be accessible remotely. This can for examplebe achieved by mounting a remote file system for example from static.sapsailing.com on the replicas to localPath.</source>
<target>ローカルファイルシステムにファイルを保管するサービスです。ファイルは、ローカルパス + ファイル名で保管され、ベース URL + ファイル名でアクセスできます。そのため、ベース URL にあるコンテンツはリモートからアクセス可能でなければなりません。これはたとえば、複製上の static.sapsailing.com などからローカルパスにリモートファイルシステムをマウントすることによって達成することができます。</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="localBaseUrlDesc" resname="localBaseUrlDesc">
<source>Base URL + fileName = URL where uploaded file will be accessible</source>
<target>ベース URL + ファイル名 = アップロードしたファイルがアクセス可能となる場所の URL</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="localLocalPathDesc" resname="localLocalPathDesc">
<source>Local Path to use for file storage</source>
<target>ファイル保管に使用するローカルパス</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:46:45Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sse.filestorage/resources/stringmessages/FileStorageStringMessages.properties" source-language="en" target-language="ru">
<header>
<skl>
<internal-file crc="37afe0b1eb405886cd475fe305c64722" form="base64">H4sIAAAAAAAAAJ1SwW7bMAy95yt4bNHBPeTcQ4tiQLGiGNrmAxiZTojSkiHKSb3Dvn2klGTddSdL1OPj4/PT9SNpuHsrKRMMLKSQItyP+Ms+b+sO3vcEmXSWwnFXERBxJGAFhIyxTyNsNk+PMMmsUAydMu84ojQwxd4au5Wu70Mg1ae+DmwXsL4rITwQbAXjB5QEsxL8vu3wqLchU0+xMIoCRy2E/fWF6ActTToZrMCJ0Kr/wfgwhw8qL7ZXpfQDpAFa+UxxtUf1M0q2tgXok7V8A7PAnzNEol5B52HgwDYEJsojq3KKer2SFFBOgvOBg7mdMqj5fvbVFVUDK7S5p4tpHDv4Xt93JsY7qHdohf3Esr9xaNXsWgJG2Nqx+mFILLBFpU2Wv7iXVMhG2ZPPCykW1yuLSzHmEx7GWSsi0+DxuLDyVjwUo7HI4hGxMPhY34g+cZyEKnbPdDAF2wXGNMcaIDz1fV3vax8M2QKlBQuHTnFSZPH8BKumZk+mSTi0f3HxoGsGPzTl1Wc/w+b1GW7gsvhdLRx9JZgnSdibvirlyCL/btgYn88TKme9gV/PqXDtbRf7Mbij1R9TuhdHUgMAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3Desc" resname="s3Desc">
<source>Store files on Amazon S3. The resulting file name is a random UUID plus the original file ending.</source>
<target>Храните файлы на Amazon S3. Результирующее имя файла — случайный UUID плюс расширение исходного файла.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3AccessIdDesc" resname="s3AccessIdDesc">
<source>Access ID (leave blank to use ~/.aws/credentials instead)</source>
<target>Ид. доступа (оставьте пустым, чтобы использовать ~/.aws/credentials)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3AccessKeyDesc" resname="s3AccessKeyDesc">
<source>Secret Access Key (leave blank to use ~/.aws/credentials instead)</source>
<target>Секретный ключ доступа (leave blank to use ~/.aws/credentials instead)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3BucketNameDesc" resname="s3BucketNameDesc">
<source>Name of Bucket to use (has to already exist, and user needs sufficient permissions)</source>
<target>Имя используемого бакета (должен уже существовать, пользователю необходимы достаточные разрешения доступа)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="localDesc" resname="localDesc">
<source>Service for storing files in the local file system. Files get stored in localPath+fileName and can be accessed at baseUrl+fileName Note that the content lying in baseUrl must therefore be accessible remotely. This can for examplebe achieved by mounting a remote file system for example from static.sapsailing.com on the replicas to localPath.</source>
<target>Сервис для хранения файлов в локальной файловой системе. Файлы сохраняются в папке локальныйПуть+имяФайла и доступны по адресу базовыйUrl+имяФайла. Соответственно, необходима возможность удаленного доступа к содержимому по адресу базовыйUrl. Этого можно достичь, смонтировав удаленную файловую систему (например, из static.sapsailing.com) в папке локальныйПуть на репликах.</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="localBaseUrlDesc" resname="localBaseUrlDesc">
<source>Base URL + fileName = URL where uploaded file will be accessible</source>
<target>Базовый URL + имяФайла = URL для доступа к выложенному файлу</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="localLocalPathDesc" resname="localLocalPathDesc">
<source>Local Path to use for file storage</source>
<target>Локальный путь для файлового хранилища</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-19T09:42:17Z" original="/usr/sap/ljs/app/Converter_5483050776164983/java/com.sap.sse.filestorage/resources/stringmessages/FileStorageStringMessages.properties" source-language="en" target-language="zh-CN">
<header>
<skl>
<internal-file crc="37afe0b1eb405886cd475fe305c64722" form="base64">H4sIAAAAAAAAAJ1SwW7bMAy95yt4bNHBPeTcQ4tiQLGiGNrmAxiZTojSkiHKSb3Dvn2klGTddSdL1OPj4/PT9SNpuHsrKRMMLKSQItyP+Ms+b+sO3vcEmXSWwnFXERBxJGAFhIyxTyNsNk+PMMmsUAydMu84ojQwxd4au5Wu70Mg1ae+DmwXsL4rITwQbAXjB5QEsxL8vu3wqLchU0+xMIoCRy2E/fWF6ActTToZrMCJ0Kr/wfgwhw8qL7ZXpfQDpAFa+UxxtUf1M0q2tgXok7V8A7PAnzNEol5B52HgwDYEJsojq3KKer2SFFBOgvOBg7mdMqj5fvbVFVUDK7S5p4tpHDv4Xt93JsY7qHdohf3Esr9xaNXsWgJG2Nqx+mFILLBFpU2Wv7iXVMhG2ZPPCykW1yuLSzHmEx7GWSsi0+DxuLDyVjwUo7HI4hGxMPhY34g+cZyEKnbPdDAF2wXGNMcaIDz1fV3vax8M2QKlBQuHTnFSZPH8BKumZk+mSTi0f3HxoGsGPzTl1Wc/w+b1GW7gsvhdLRx9JZgnSdibvirlyCL/btgYn88TKme9gV/PqXDtbRf7Mbij1R9TuhdHUgMAAA==</internal-file>
</skl>
<phase-group>
<phase company-name="SAP AG" date="2016-05-11T12:28:05Z" phase-name="file-creation" process-name="file-creation" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter"/>
</phase-group>
<tool tool-company="SAP AG" tool-id="urn:x-sap:sls-mlt:java:properties-flexible-converter" tool-name="TEW: Javascript .properties Flexible File Converter" tool-version="1.1.0"/>
</header>
<body>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3Desc" resname="s3Desc">
<source>Store files on Amazon S3. The resulting file name is a random UUID plus the original file ending.</source>
<target>将文件存储在 Amazon S3 中。生成的文件名称为随机的 UUID 加原始文件结尾。</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3AccessIdDesc" resname="s3AccessIdDesc">
<source>Access ID (leave blank to use ~/.aws/credentials instead)</source>
<target>访问编号(留空,改用 ~/.aws/credentials</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3AccessKeyDesc" resname="s3AccessKeyDesc">
<source>Secret Access Key (leave blank to use ~/.aws/credentials instead)</source>
<target>秘密访问密钥(留空,改用 ~/.aws/credentials</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="s3BucketNameDesc" resname="s3BucketNameDesc">
<source>Name of Bucket to use (has to already exist, and user needs sufficient permissions)</source>
<target>所用存储段的名称(必须已存在,并且用户需要足够的权限)</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="localDesc" resname="localDesc">
<source>Service for storing files in the local file system. Files get stored in localPath+fileName and can be accessed at baseUrl+fileName Note that the content lying in baseUrl must therefore be accessible remotely. This can for examplebe achieved by mounting a remote file system for example from static.sapsailing.com on the replicas to localPath.</source>
<target>用于在本地文件系统中存储文件的服务。文件存储在 localPath+fileName 中,可以在 baseUrl+fileName 访问。请注意,必须可以远程访问 baseUrl 中的内容。例如,可以从 localPath 副本所在的 static.sapsailing.com 安装远程文件系统。</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="localBaseUrlDesc" resname="localBaseUrlDesc">
<source>Base URL + fileName = URL where uploaded file will be accessible</source>
<target>基本 URL + 文件名称 = URL,其中可以访问上传的文件</target>
</trans-unit>
<trans-unit datatype="x-urn:x-sap:sls-mlt:java:flexible-converter:messageformat" id="localLocalPathDesc" resname="localLocalPathDesc">
<source>Local Path to use for file storage</source>
<target>用于存储文件的本地路径</target>
</trans-unit>
</body>
</file>
</xliff>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-12T13:07:55Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="ja">
<file datatype="javapropertyresourcebundle" date="2016-05-30T12:19:28Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="ja">
<header>
<skl>
<internal-file crc="85e48bcf9e250e66161b1b03d11cf699" form="base64">H4sIAAAAAAAAAH1SzU4jMQy+5yn8BIgXyKEa2MuuAFEEZ5O4naiZZOR4WiG0746TtLNod+Hi/2/8eb4UPJLdqjFMU9b4sTmTD/b+p3GYHEU7NGfQe7vx3pAPYm/VmEJ8JL5lzmw3CagGkJ1bmMnDaQyRAEVomiWkPUgGl5OgE5CRoKOv4CESFgI3kjvAW14YEskp86FOJ3IScgJMHoTfAPcY0pVxMReyQ7WNudADZ0d+YRowxnaGEKxFqNUz30eaY6Bity0D7qlp7Ic8TUsKDivhlyBjH7LtRuXzqQsnbZ+PMHpT0L+3aU73yKb0WLcIYIE+YFxeor/L8kRFlNxMLJXKUMuQsv4YbcC8dlaAfua/87rqi/G+v/IPjv5CdDaNvDZX1K+M/itY1N63uCOGiK/xAi3/YC8DF3hR5XZMZVS1mjcJJ7J3aswR40L2uVrjqTgOc30G9uZP3AXryiiTtAv7hbFNDZ+zqkbVqwreg7Xyowk+50RJ1i7sVOn3699mbu9yS1GfoD0/0tIy8wFPN7vhNwMAAA==</internal-file>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-12T13:07:55Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="ru">
<file datatype="javapropertyresourcebundle" date="2016-05-30T12:19:28Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="ru">
<header>
<skl>
<internal-file crc="85e48bcf9e250e66161b1b03d11cf699" form="base64">H4sIAAAAAAAAAH1SzU4jMQy+5yn8BIgXyKEa2MuuAFEEZ5O4naiZZOR4WiG0746TtLNod+Hi/2/8eb4UPJLdqjFMU9b4sTmTD/b+p3GYHEU7NGfQe7vx3pAPYm/VmEJ8JL5lzmw3CagGkJ1bmMnDaQyRAEVomiWkPUgGl5OgE5CRoKOv4CESFgI3kjvAW14YEskp86FOJ3IScgJMHoTfAPcY0pVxMReyQ7WNudADZ0d+YRowxnaGEKxFqNUz30eaY6Bity0D7qlp7Ic8TUsKDivhlyBjH7LtRuXzqQsnbZ+PMHpT0L+3aU73yKb0WLcIYIE+YFxeor/L8kRFlNxMLJXKUMuQsv4YbcC8dlaAfua/87rqi/G+v/IPjv5CdDaNvDZX1K+M/itY1N63uCOGiK/xAi3/YC8DF3hR5XZMZVS1mjcJJ7J3aswR40L2uVrjqTgOc30G9uZP3AXryiiTtAv7hbFNDZ+zqkbVqwreg7Xyowk+50RJ1i7sVOn3699mbu9yS1GfoD0/0tIy8wFPN7vhNwMAAA==</internal-file>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file datatype="javapropertyresourcebundle" date="2016-05-12T13:07:55Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="zh-CN">
<file datatype="javapropertyresourcebundle" date="2016-05-30T12:19:28Z" original="/usr/sap/ljs/app/Converter_2475291648609719345/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/filestorage/StringMessages.properties" source-language="en" target-language="zh-CN">
<header>
<skl>
<internal-file crc="85e48bcf9e250e66161b1b03d11cf699" form="base64">H4sIAAAAAAAAAH1SzU4jMQy+5yn8BIgXyKEa2MuuAFEEZ5O4naiZZOR4WiG0746TtLNod+Hi/2/8eb4UPJLdqjFMU9b4sTmTD/b+p3GYHEU7NGfQe7vx3pAPYm/VmEJ8JL5lzmw3CagGkJ1bmMnDaQyRAEVomiWkPUgGl5OgE5CRoKOv4CESFgI3kjvAW14YEskp86FOJ3IScgJMHoTfAPcY0pVxMReyQ7WNudADZ0d+YRowxnaGEKxFqNUz30eaY6Bity0D7qlp7Ic8TUsKDivhlyBjH7LtRuXzqQsnbZ+PMHpT0L+3aU73yKb0WLcIYIE+YFxeor/L8kRFlNxMLJXKUMuQsv4YbcC8dlaAfua/87rqi/G+v/IPjv5CdDaNvDZX1K+M/itY1N63uCOGiK/xAi3/YC8DF3hR5XZMZVS1mjcJJ7J3aswR40L2uVrjqTgOc30G9uZP3AXryiiTtAv7hbFNDZ+zqkbVqwreg7Xyowk+50RJ1i7sVOn3699mbu9yS1GfoD0/0tIy8wFPN7vhNwMAAA==</internal-file>
@@ -1,10 +1,6 @@
package com.sap.sse.util.impl;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -16,22 +12,16 @@ public enum NonGwtUrlHelper implements UrlHelper {
private static final Logger logger = Logger.getLogger(NonGwtUrlHelper.class.getName());
public String encodeUrl(String decodedUrlString) {
try {
URL url = new URL(decodedUrlString);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(),
url.getQuery(), url.getRef());
return uri.toString();
} catch (MalformedURLException | URISyntaxException f) {
logger.log(Level.WARNING, "problem encoding URL string "+decodedUrlString, f);
return null;
}
}
@Override
public String encodeQueryString(String queryString) {
try {
return URLEncoder.encode(queryString, "UTF-8");
// TODO See bug3664 => https://bugzilla.sapsailing.com/bugzilla/show_bug.cgi?id=3664
// Because of changes in the query string encoding, the Sail InSight-App for iOS will now have problems
// while parsing the registration URLs, which are sent to invited competitors, if e.g. the leaderboard name
// contains whitespaces. To avoid this problems, we use this temporary fix until a new version of the Sail
// InSight-App for iOS is rolled out. Afterwards this fix must be replaced by the line below.
return URLEncoder.encode(queryString, "UTF-8").replace("+", "%20");
// return URLEncoder.encode(queryString, "UTF-8");
} catch (UnsupportedEncodingException e) {
logger.log(Level.WARNING, "problem encoding URL query string "+queryString, e);
return null;
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/toolbar_separator"
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_separator_height"
android:layout_alignParentTop="true"
android:background="@color/sap_yellow"/>
<ImageView
android:id="@+id/homeBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:contentDescription="@string/empty"
android:layout_below="@id/toolbar_separator"
android:scaleType="centerCrop"
android:src="@drawable/working_title"/>
<RelativeLayout
android:id="@+id/bottomLayout"
android:layout_width="match_parent"
android:layout_height="@dimen/qr_code_label_height"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="@color/black_transparent"
>
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/scan_hint"
android:textColor="@color/white"/>
</RelativeLayout>
<LinearLayout
android:id="@+id/two_buttons_layout"
android:orientation="horizontal"
android:layout_above="@+id/bottomLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
>
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
android:id="@+id/noQrCode"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="@dimen/home_button_height"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:background="@drawable/rounded_btn_white"
android:textColor="@color/black"
android:text="@string/no_qr_code"/>
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
android:id="@+id/scanQr"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="@dimen/home_button_height"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:background="@drawable/rounded_btn_yellow"
android:textAllCaps="true"
android:textStyle="bold"
android:text="@string/scan_qr"/>
</LinearLayout>
<ListView
android:id="@+id/listRegatta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/two_buttons_layout"
android:layout_below="@id/toolbar_separator"
android:divider="@android:color/white"
android:dividerHeight="1dp"
>
</ListView>
</RelativeLayout>
@@ -2,6 +2,10 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_separator_height"
android:background="@color/sap_yellow"/>
<View
android:id="@+id/center_anchor"
@@ -1,21 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/toolbar_separator"
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_separator_height"
android:layout_alignParentTop="true"
android:background="@color/sap_yellow"/>
<ImageView
android:id="@+id/homeBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_below="@id/toolbar_separator"
android:contentDescription="@string/empty"
android:scaleType="centerCrop"
android:src="@drawable/working_title" />
android:src="@drawable/working_title"/>
<RelativeLayout
android:id="@+id/bottomLayout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_height="@dimen/qr_code_label_height"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
@@ -28,13 +36,13 @@
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/scan_hint"
android:textColor="@color/white" />
android:textColor="@color/white"/>
</RelativeLayout>
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
android:id="@+id/scanQr"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:layout_width="match_parent"
android:layout_height="@dimen/home_button_height"
android:layout_above="@+id/noQrCode"
android:layout_marginBottom="10dp"
android:layout_marginLeft="16dp"
@@ -44,13 +52,14 @@
android:text="@string/scan_qr"
android:textAllCaps="true"
android:textSize="18sp"
android:textStyle="bold" />
android:textStyle="bold"/>
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
android:id="@+id/noQrCode"
android:layout_width="fill_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/bottomLayout"
android:layout_marginBottom="10dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:background="@drawable/rounded_btn_white"
@@ -59,15 +68,15 @@
android:text="@string/no_qr_code"
android:textAllCaps="true"
android:textColor="@color/black"
android:textSize="18sp" />
android:textSize="18sp"/>
<ListView
android:id="@+id/listRegatta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:layout_above="@id/scanQr"
android:layout_alignParentTop="true"
android:layout_below="@id/toolbar_separator"
android:divider="@android:color/white"
android:dividerHeight="1dp" />
android:dividerHeight="1dp"/>
</RelativeLayout>
@@ -43,7 +43,7 @@
<View
android:id="@+id/toolbar_separator"
android:layout_width="fill_parent"
android:layout_height="4dp"
android:layout_height="@dimen/toolbar_separator_height"
android:background="@color/sap_yellow"/>
<FrameLayout
@@ -23,11 +23,14 @@
<dimen name="tab_space_unselected_top">6sp</dimen>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="toolbar_separator_height">4dp</dimen>
<!-- Values for buttons -->
<dimen name="about_button_top_bottom_margin">10dp</dimen>
<dimen name="about_button_side_margin">16dp</dimen>
<dimen name="about_button_height">80dp</dimen>
<dimen name="about_button_text_size">18sp</dimen>
<dimen name="home_button_height">80dp</dimen>
<dimen name="qr_code_label_height">50dp</dimen>
</resources>
@@ -13,7 +13,13 @@ public abstract class AbstractBaseActivity extends SendingServiceAwareActivity {
private static final String TAG = AbstractBaseActivity.class.getName();
protected ProgressDialog progressDialog;
/**
* An object used to synchronize access to the {@link #progressDialog} field to avoid concurrency
* issues during re-assigning a new dialog.
*/
private final Object progressDialogMonitor = new Object();
private ProgressDialog progressDialog;
public void replaceFragment(int view, Fragment fragment) {
ExLog.i(this, TAG, "Set new Fragment: " + fragment.toString());
@@ -25,11 +31,13 @@ public abstract class AbstractBaseActivity extends SendingServiceAwareActivity {
}
public void showProgressDialog(String title, String message) {
if (progressDialog == null || !progressDialog.isShowing()) {
progressDialog = new ProgressDialog(this);
progressDialog.setTitle(title);
progressDialog.setMessage(message);
progressDialog.show();
synchronized (progressDialogMonitor) {
if (progressDialog == null || !progressDialog.isShowing()) {
progressDialog = new ProgressDialog(this);
progressDialog.setTitle(title);
progressDialog.setMessage(message);
progressDialog.show();
}
}
}
@@ -38,8 +46,10 @@ public abstract class AbstractBaseActivity extends SendingServiceAwareActivity {
}
public void dismissProgressDialog() {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
synchronized (progressDialogMonitor) {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
}
@@ -16,7 +16,7 @@
<RelativeLayout
android:id="@+id/bottomLayout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_height="@dimen/qr_code_label_height"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
@@ -45,8 +45,8 @@
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
android:id="@+id/scanQr"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_width="0dp"
android:layout_height="@dimen/home_button_height"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
@@ -58,8 +58,8 @@
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
android:id="@+id/noQrCode"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_width="0dp"
android:layout_height="@dimen/home_button_height"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:paddingLeft="@dimen/activity_horizontal_margin"
@@ -3,8 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/list_header_background_color"
tools:ignore="Overdraw">
android:background="@color/list_header_background_color">
<LinearLayout
android:layout_width="match_parent"
@@ -62,6 +62,7 @@
<string name="initial_timer_text_zerozero" translatable="false">00:00:00</string>
<string name="initial_hyphen" translatable="false">-</string>
<string name="initial_hyphen_degrees" translatable="false"></string>
<string name="course_over_ground_display" translatable="false">%d°</string>
<string name="content_description_flag_icon" translatable="false">flag icon</string>
<string name="tracking_notification_text">Currently Tracking %s</string>
<string name="waiting_for_gps">Waiting for GPS</string>
@@ -74,10 +74,17 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
* displayed immediately after device rotation. Thus they are cached here and the fragments can pick them up.
*/
public String lastSpeedIndicatorText;
public String lastCompassIndicatorText = "";
public String lastCompassIndicatorText = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
lastCompassIndicatorText = savedInstanceState.getString(SIS_LAST_COMPASS_TEXT, getString(R.string.initial_hyphen_degrees));
lastSpeedIndicatorText = savedInstanceState.getString(SIS_LAST_SPEED_TEXT, getString(R.string.initial_hyphen));
} else {
lastCompassIndicatorText = getString(R.string.initial_hyphen_degrees);
lastSpeedIndicatorText = getString(R.string.initial_hyphen);
}
super.onCreate(savedInstanceState);
prefs = new AppPreferences(this);
@@ -87,10 +94,7 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
} else {
checkinDigest = prefs.getTrackerIsTrackingCheckinDigest();
}
lastSpeedIndicatorText = getString(R.string.initial_hyphen);
setContentView(R.layout.activity_tracking);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
@@ -126,10 +130,7 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
} else {
trackingFragment = new TrackingFragment();
}
lastViewPagerItem = savedInstanceState.getInt(SIS_LAST_VIEWPAGER_ITEM);
lastSpeedIndicatorText = savedInstanceState.getString(SIS_LAST_SPEED_TEXT, "-");
lastCompassIndicatorText = savedInstanceState.getString(SIS_LAST_COMPASS_TEXT, "");
} else {
trackingFragment = new TrackingFragment();
}
@@ -24,7 +24,7 @@ public class CompassFragment extends BaseFragment {
if (isAdded()) {
TextView headingText = (TextView) getActivity().findViewById(R.id.compass_bearing_text_view);
if (bearing != null) {
headingText.setText(String.valueOf(Math.round(bearing.getDegrees())) + (char) 0x00B0);
headingText.setText(getString(R.string.course_over_ground_display, Math.round(bearing.getDegrees())));
} else {
headingText.setText(R.string.initial_hyphen_degrees);
}
@@ -40,8 +40,7 @@
<activity
android:name=".ui.activities.StartActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
@@ -66,15 +65,15 @@
</activity>
<activity
android:name=".ui.activities.RegattaActivity"
android:screenOrientation="portrait"/>
android:configChanges="layoutDirection|screenSize|orientation"/>
<activity
android:name=".ui.activities.PositioningActivity"
android:screenOrientation="portrait"/>
android:name=".ui.activities.PositioningActivity"/>
<activity
android:name=".ui.activities.SettingActivity"/>
android:name=".ui.activities.SettingActivity"
android:configChanges="layoutDirection|screenSize|orientation"/>
<activity
android:name=".ui.activities.AboutActivity"
android:screenOrientation="portrait"/>
android:configChanges="layoutDirection|screenSize|orientation"/>
<service
android:name="com.sap.sailing.android.shared.services.sending.MessageSendingService"
@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:orientation="vertical"
android:paddingLeft="0dp"
android:paddingRight="0dp">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_separator_height"
android:background="@color/sap_yellow"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginBottom="@dimen/position_detail_bottom_margin"
android:layout_weight="1"
android:background="@color/white">
<FrameLayout
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
android:id="@+id/mark_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_gravity="start"
android:background="@color/black_slightly_transparent"
android:gravity="start"
android:paddingBottom="7dp"
android:paddingLeft="16dp"
android:paddingTop="7dp"
android:textColor="@color/white"
android:textSize="14sp"/>
</RelativeLayout>
<!-- Begin of detailed mark information -->
<LinearLayout
android:id="@+id/layout_mark"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical">
<!-- Accuracy -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="12dp">
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/accuracy"
android:textColor="@color/white"
android:textSize="20sp"/>
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
android:id="@+id/marker_gps_accuracy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold"
tools:text="ca. 13m"/>
<com.sap.sailing.android.shared.ui.customviews.SignalQualityIndicatorView
android:id="@+id/signal_quality_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<com.sap.sailing.android.shared.ui.customviews.OpenSansLightTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="12dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/accuracy_detail"/>
<View style="@style/Divider"/>
<!-- Distance to old buoy -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="12dp">
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/distance"
android:textColor="@color/white"
android:textSize="20sp"/>
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
android:id="@+id/marker_gps_distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:textColor="@color/white"
android:textSize="20sp"
tools:text="11,4m"/>
</LinearLayout>
<com.sap.sailing.android.shared.ui.customviews.OpenSansLightTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="12dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/distance_detail"/>
<View style="@style/Divider"/>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<!-- Button -->
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
android:id="@+id/marker_set_position_button"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_marginBottom="@dimen/position_detail_bottom_margin"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="15dp"
android:background="@drawable/position_send_button"
android:text="@string/set_position"
android:textSize="18sp"
android:textStyle="bold"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
@@ -10,7 +10,7 @@
<View
android:layout_width="fill_parent"
android:layout_height="4dp"
android:layout_height="@dimen/toolbar_separator_height"
android:background="@color/sap_yellow"/>
<RelativeLayout
@@ -19,11 +19,10 @@
android:layout_weight="1"
android:background="@color/white">
<fragment
<FrameLayout
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment"/>
android:layout_height="match_parent"/>
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
android:id="@+id/mark_header"
@@ -148,17 +147,4 @@
android:textAllCaps="false"
android:textStyle="bold"/>
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
android:id="@+id/marker_reset_position_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="15dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="5dp"
android:background="@drawable/rounded_btn_transparent"
android:text="@string/reset_position"
android:textSize="18sp"
android:textStyle="bold"/>
</LinearLayout>
@@ -7,7 +7,7 @@
<View
android:layout_width="fill_parent"
android:layout_height="4dp"
android:layout_height="@dimen/toolbar_separator_height"
android:background="@color/sap_yellow"/>
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="position_detail_bottom_margin">10dp</dimen>
<dimen name="buoy_overview_text_size">20sp</dimen>
</resources>
@@ -3,6 +3,8 @@ package com.sap.sailing.android.buoy.positioning.app.ui.fragments;
import java.text.DecimalFormat;
import android.app.AlertDialog;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
@@ -53,7 +55,6 @@ public class BuoyFragment extends BaseFragment implements LocationListener {
private OpenSansTextView accuracyTextView;
private OpenSansTextView distanceTextView;
private OpenSansButton setPositionButton;
private OpenSansButton resetPositionButton;
private MapFragment mapFragment;
private Location lastKnownLocation;
private LatLng savedPosition;
@@ -78,16 +79,14 @@ public class BuoyFragment extends BaseFragment implements LocationListener {
setUpSetPositionButton(layout, clickListener);
resetPositionButton = ViewHelper.get(layout, R.id.marker_reset_position_button);
resetPositionButton.setOnClickListener(clickListener);
resetPositionButton.setVisibility(View.GONE);
signalQualityIndicatorView = ViewHelper.get(layout, R.id.signal_quality_indicator);
signalQualityIndicatorView.setSignalQuality(GPSQuality.noSignal.toInt());
mReceiver = new IntentReceiver();
mGpsListener = new GPSListener();
mBroadcastManager = LocalBroadcastManager.getInstance(inflater.getContext());
initMapFragment();
return layout;
}
@@ -96,7 +95,6 @@ public class BuoyFragment extends BaseFragment implements LocationListener {
super.onResume();
disablePositionButton();
positioningActivity = (PositioningActivity) getActivity();
mapFragment = (MapFragment) positioningActivity.getFragmentManager().findFragmentById(R.id.map);
mapFragment.getMap().setMapType(GoogleMap.MAP_TYPE_SATELLITE);
initialLocationUpdate = true;
initLocationProvider();
@@ -116,6 +114,14 @@ public class BuoyFragment extends BaseFragment implements LocationListener {
checkGPS();
}
private void initMapFragment() {
mapFragment = new MapFragment();
FragmentManager manager = getActivity().getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.map, mapFragment);
transaction.commit();
}
private void setUpSetPositionButton(View layout, ClickListener clickListener) {
setPositionButton = ViewHelper.get(layout, R.id.marker_set_position_button);
disablePositionButton();
@@ -209,7 +215,7 @@ public class BuoyFragment extends BaseFragment implements LocationListener {
updateMap();
}
if (initialLocationUpdate) {
if (initialLocationUpdate && lastKnownLocation != null) {
LatLng lastKnownLatLng = new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude());
GoogleMap map = mapFragment.getMap();
configureMap(map);
@@ -330,8 +336,6 @@ public class BuoyFragment extends BaseFragment implements LocationListener {
} else {
Toast.makeText(getActivity(), "Location is not available yet", Toast.LENGTH_LONG).show();
}
} else if (id == R.id.marker_reset_position_button) {
// Reset position
}
}
}
@@ -3,7 +3,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.DrawerLayout
<com.sap.sailing.racecommittee.app.ui.layouts.CustomDrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
@@ -28,5 +28,5 @@
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start" />
</android.support.v4.widget.DrawerLayout>
</com.sap.sailing.racecommittee.app.ui.layouts.CustomDrawerLayout>
</RelativeLayout>
@@ -0,0 +1,30 @@
package com.sap.sailing.racecommittee.app.ui.layouts;
import android.content.Context;
import android.support.v4.widget.DrawerLayout;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class CustomDrawerLayout extends DrawerLayout {
public CustomDrawerLayout(Context context) {
super(context);
}
public CustomDrawerLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomDrawerLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (ArrayIndexOutOfBoundsException e) {
// Fix for multitouch issue see: https://bugzilla.sapsailing.com/bugzilla/show_bug.cgi?id=3659
return false;
}
}
}
+128
View File
@@ -0,0 +1,128 @@
# Sailing Leagues
## bundesliga2016
### URL
- Public ELB: https://bundesliga2016.sapsailing.com
- Public ELB: https://bundesliga2-2016.sapsailing.com
- Public Master WEB: https://bundesliga2016-master.sapsailing.com
- Master Instance: `german-master.league.sapsailing.com`
### Firing up replica's
```
INSTALL_FROM_RELEASE=build-201605131237
USE_ENVIRONMENT=live-replica-server
REPLICATE_MASTER_SERVLET_HOST=172.31.19.178
REPLICATE_MASTER_EXCHANGE_NAME=germanleague2016
REPLICATE_ON_START=com.sap.sailing.server.impl.RacingEventServiceImpl,com.sap.sse.security.impl.SecurityServiceImpl,com.sap.sse.filestorage.impl.FileStorageManagementServiceImpl,com.sap.sse.mail.impl.MailServiceImpl,com.sap.sailing.polars.impl.PolarDataServiceImpl
SERVER_NAME=germanleague2016
MONGODB_NAME=germanleague2016-replica
EVENT_ID=85a865fd-6af2-4ac6-90d6-7c5c592a0975
SERVER_STARTUP_NOTIFY=steffen.tobias.wagner@sap.com
```
## danishleague2016
### URL
- Public ELB: https://danishleague2016.sapsailing.com
- Public Master WEB: https://danishleague2016-master.sapsailing.com
- Master Instance: `danish-master.league.sapsailing.com`
### Firing up replica's
```
INSTALL_FROM_RELEASE=build-201605131237
USE_ENVIRONMENT=live-replica-server
REPLICATE_MASTER_SERVLET_HOST=172.31.18.162
REPLICATE_MASTER_EXCHANGE_NAME=danishleague2016
REPLICATE_ON_START=com.sap.sailing.server.impl.RacingEventServiceImpl,com.sap.sse.security.impl.SecurityServiceImpl,com.sap.sse.filestorage.impl.FileStorageManagementServiceImpl,com.sap.sse.mail.impl.MailServiceImpl,com.sap.sailing.polars.impl.PolarDataServiceImpl
SERVER_NAME=danishleague2016
MONGODB_NAME=danishleague2016-replica
EVENT_ID=3e8e08e1-05e2-4140-832f-1f4cf0065032
SERVER_STARTUP_NOTIFY=steffen.tobias.wagner@sap.com
```
## dutchleague2016
### URL
- Public ELB: https://dutchleague2016.sapsailing.com
- Public Master WEB: https://durchleague2016-master.sapsailing.com
- Master Instance: `dutch-master.league.sapsailing.com`
### Firing up replica's
```
INSTALL_FROM_RELEASE=build-201605131237
USE_ENVIRONMENT=live-replica-server
REPLICATE_MASTER_SERVLET_HOST=172.31.23.95
REPLICATE_MASTER_EXCHANGE_NAME=dutchleague2016
REPLICATE_ON_START=com.sap.sailing.server.impl.RacingEventServiceImpl,com.sap.sse.security.impl.SecurityServiceImpl,com.sap.sse.filestorage.impl.FileStorageManagementServiceImpl,com.sap.sse.mail.impl.MailServiceImpl,com.sap.sailing.polars.impl.PolarDataServiceImpl
SERVER_NAME=dutchleague2016
MONGODB_NAME=dutchleague2016-replica
EVENT_ID=77999de1-e925-4e7e-b9be-f0b8e14616ae
SERVER_STARTUP_NOTIFY=steffen.tobias.wagner@sap.com
```
## norwegianleague2016
### URL
- Public ELB: https://norwegianleage2016.sapsailing.com
- Public Master WEB: https://norwegianleague2016-master.sapsailing.com
- Master Instance: `norwegian-master.league.sapsailing.com`
### Firing up replica's
```
INSTALL_FROM_RELEASE=build-201605131237
USE_ENVIRONMENT=live-replica-server
REPLICATE_MASTER_SERVLET_HOST=172.31.27.2
REPLICATE_MASTER_EXCHANGE_NAME=norwegianleague2016
REPLICATE_ON_START=com.sap.sailing.server.impl.RacingEventServiceImpl,com.sap.sse.security.impl.SecurityServiceImpl,com.sap.sse.filestorage.impl.FileStorageManagementServiceImpl,com.sap.sse.mail.impl.MailServiceImpl,com.sap.sailing.polars.impl.PolarDataServiceImpl
SERVER_NAME=norwegianleague2016
MONGODB_NAME=norwegianleague2016-replica
EVENT_ID=69924f98-c00f-4f33-8264-d00ecc46c270
SERVER_STARTUP_NOTIFY=steffen.tobias.wagner@sap.com
```
## swedishleague2016
### URL
- Public ELB: https://swedishleague2016.sapsailing.com
- Public Master WEB: https://swedishleague2016-master.sapsailing.com
- Master Instance: `swedish-master.league.sapsailing.com`
### Firing up replica's
```
INSTALL_FROM_RELEASE=build-201605131237
USE_ENVIRONMENT=live-replica-server
REPLICATE_MASTER_SERVLET_HOST=172.31.31.165
REPLICATE_MASTER_EXCHANGE_NAME=swedishleague2016
REPLICATE_ON_START=com.sap.sailing.server.impl.RacingEventServiceImpl,com.sap.sse.security.impl.SecurityServiceImpl,com.sap.sse.filestorage.impl.FileStorageManagementServiceImpl,com.sap.sse.mail.impl.MailServiceImpl,com.sap.sailing.polars.impl.PolarDataServiceImpl
SERVER_NAME=swedishleague2016
MONGODB_NAME=swedishleague2016-replica
EVENT_ID=1fa8905c-9449-419d-9986-c0a4a96632b0
SERVER_STARTUP_NOTIFY=steffen.tobias.wagner@sap.com
```
## finnishleague2016
### URL
- Public ELB: https://finnishleague2016.sapsailing.com
- Public Master WEB: https://finnishleague2016-master.sapsailing.com
- Master Instance: `finnish-master.league.sapsailing.com`
### Firing up replica's
```
INSTALL_FROM_RELEASE=build-201605131237
USE_ENVIRONMENT=live-replica-server
REPLICATE_MASTER_SERVLET_HOST=172.31.27.104
REPLICATE_MASTER_EXCHANGE_NAME=finnishleague2016
REPLICATE_ON_START=com.sap.sailing.server.impl.RacingEventServiceImpl,com.sap.sse.security.impl.SecurityServiceImpl,com.sap.sse.filestorage.impl.FileStorageManagementServiceImpl,com.sap.sse.mail.impl.MailServiceImpl,com.sap.sailing.polars.impl.PolarDataServiceImpl
SERVER_NAME=finnishleague2016
MONGODB_NAME=finnishleague2016-replica
EVENT_ID=83a2846d-7c2d-4af9-a40d-3f20ed077a91
SERVER_STARTUP_NOTIFY=steffen.tobias.wagner@sap.com
```
+9 -6
View File
@@ -332,15 +332,18 @@ Follow these steps to upgrade the AMI:
* Log in as user `root`
* Run `yum update` to update the operating system
* Remove any obsolete logs from `/home/sailing/servers/server/logs`
* Update the git contents (essential for up-to-date versions of `/etc/init.d/sailing` which links to the git, and the `refreshInstance.sh` script used during automatic instance launch), and clean any build artifacts by doing <pre>
su - sailing
cd code
mvn clean
git fetch
git merge origin/master</pre>
* Update the git contents (essential for up-to-date versions of `/etc/init.d/sailing` which links to the git, and the `refreshInstance.sh` script used during automatic instance launch), and clean any build artifacts by doing
```
> su - sailing
> cd code
> mvn clean
> git fetch
> git merge origin/master
```
* Then, still as user `sailing`, edit `~sailing/servers/server/env.sh` and remove everything after the line `# **** Overwritten environment variables ****` as this will then be the place where any downloaded environment and the EC2 user data variables will be appended later during automatic installation upon reboot.
* Check the sizes of the mounted partitions by doing `df; swapon -s`. These will come in handy after creating the new AMI in order to tag the new volume snapshots accordingly
* Update any keys in `/root/.ssh/authorized_keys` and `/home/sailing/.ssh/authorized_keys`
* Remove created http rewrite entries in `/etc/httpd/conf.d/001-events.conf`
* In the EC2 administration console go to the "Instances" tab, select your running instance and from the "Actions" drop-down select "Create Image". Give the image the name "SAP Sailing Analytics App x.y" where "x.y" is the updated version number of the image. Just make sure it's greater than the previous one. If you feel like it, you may provide a short description telling the most important features of the image.
* Once the image creation has completed, go to the Snapshots list in the "Elastic Block Store" category and name the new snapshots appropriately. Now the information about the device sizes obtained earlier from the `df` and `swapon` commands will help you to identify which snapshot is which. Usually, the three snapshots would be something like AMI Analytics Home x.y, AMI Analytics System x.y and AMI Analytics Swap x.y with "x.y" being the version number matching that of your image.
* Now you can remove any earlier Sailing Server AMI version and the corresponding snapshots.