From 8b03accf6648e07242b53a0efb5973602aef1144 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Mon, 27 May 2013 17:57:55 +0200 Subject: [PATCH 01/29] File must be in unix format --- configuration/tmuxManagementConsole.sh | 88 +++++++++++++------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/configuration/tmuxManagementConsole.sh b/configuration/tmuxManagementConsole.sh index 7f829e2c0c6..4d4370a1a56 100755 --- a/configuration/tmuxManagementConsole.sh +++ b/configuration/tmuxManagementConsole.sh @@ -1,44 +1,44 @@ -#!/bin/bash - -command -v tmux >/dev/null 2>&1 || { echo "I require tmux but it's not installed. Aborting." >&2; exit 1; } - -sn=sailing - -SERVERS_DIR=/home/trac/servers - -TMUX_ACTIVE=`tmux has-session -t $sn 2>/dev/null` -if [ $? -eq 0 ]; then - echo "Session exists...not configuring a new one" -else - echo "Session does not exist...creating a new one with name $sn" - cd /home/trac/git - tmux new-session -s "$sn" -n "BUILD" -d - - counter=1 - for dir in dev test prod1 prod2; do - cd $SERVERS_DIR/$dir - tmux new-window -t "$sn:$counter" -n `basename $dir` "bash -c './start'; bash" - counter=$[counter + 1] - done - - cd /home/trac/servers/prod1 - tmux new-window -t "$sn:$counter" -n "UDP" "bash -c './udpmirror -v 2012 localhost 2010 localhost 2011 localhost 2013 localhost 2014'; bash" - - cd /opt/mongodb/bin - tmux new-window -t "$sn:$[counter+1]" -n "GOAccess" "bash -c 'goaccess -f /var/log/httpd/access_log'; bash" - - cd /opt/ - tmux new-window -t "$sn:$[counter+2]" -n "ATop" "bash -c 'apachetop -f /var/log/httpd/access_log'; bash" - - cd /home/trac/servers - tmux new-window -t "$sn:$[counter+3]" -n "Logs" "bash -c 'ls -lah'; bash" - - cd /home/trac/servers/prod1 - tmux new-window -t "$sn:$[counter+4]" -n "STListener" "bash -c './swisstiminglistener 3500 3501'; bash" - - tmux select-window -t "$sn:0" -fi - -if [[ "$1" != "unattended" ]]; then - tmux -2 attach-session -t "$sn" -fi +#!/bin/bash + +command -v tmux >/dev/null 2>&1 || { echo "I require tmux but it's not installed. Aborting." >&2; exit 1; } + +sn=sailing + +SERVERS_DIR=/home/trac/servers + +TMUX_ACTIVE=`tmux has-session -t $sn 2>/dev/null` +if [ $? -eq 0 ]; then + echo "Session exists...not configuring a new one" +else + echo "Session does not exist...creating a new one with name $sn" + cd /home/trac/git + tmux new-session -s "$sn" -n "BUILD" -d + + counter=1 + for dir in dev test prod1 prod2; do + cd $SERVERS_DIR/$dir + tmux new-window -t "$sn:$counter" -n `basename $dir` "bash -c './start'; bash" + counter=$[counter + 1] + done + + cd /home/trac/servers/prod1 + tmux new-window -t "$sn:$counter" -n "UDP" "bash -c './udpmirror -v 2012 localhost 2010 localhost 2011 localhost 2013 localhost 2014'; bash" + + cd /opt/mongodb/bin + tmux new-window -t "$sn:$[counter+1]" -n "GOAccess" "bash -c 'goaccess -f /var/log/httpd/access_log'; bash" + + cd /opt/ + tmux new-window -t "$sn:$[counter+2]" -n "ATop" "bash -c 'apachetop -f /var/log/httpd/access_log'; bash" + + cd /home/trac/servers + tmux new-window -t "$sn:$[counter+3]" -n "Logs" "bash -c 'ls -lah'; bash" + + cd /home/trac/servers/prod1 + tmux new-window -t "$sn:$[counter+4]" -n "STListener" "bash -c './swisstiminglistener 3500 3501'; bash" + + tmux select-window -t "$sn:0" +fi + +if [[ "$1" != "unattended" ]]; then + tmux -2 attach-session -t "$sn" +fi From 44502f6c34ee08a5cf0eb075605275697a3f129f Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Mon, 3 Jun 2013 15:30:22 +0200 Subject: [PATCH 02/29] Do not overwrite start and stop --- configuration/buildAndUpdateProduct.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index e697a672c96..58e1e9301d7 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -347,8 +347,12 @@ if [[ "$@" == "install" ]] || [[ "$@" == "all" ]]; then cp -v $PROJECT_HOME/java/target/configuration/jetty/etc/realm.properties configuration/jetty/etc cp -v $PROJECT_HOME/java/target/configuration/monitoring.properties configuration/ cp -v $PROJECT_HOME/configuration/mongodb.cfg $ACDIR/ - cp -v $PROJECT_HOME/java/target/start $ACDIR/ - cp -v $PROJECT_HOME/java/target/stop $ACDIR/ + + # avoid overwriting start configuration if it exists + if [ ! -f $ACDIR/start ]; then + cp -v $PROJECT_HOME/java/target/start $ACDIR/ + cp -v $PROJECT_HOME/java/target/stop $ACDIR/ + fi fi cp -r -v $p2PluginRepository/configuration/org.eclipse.equinox.simpleconfigurator configuration/ From 7cb85b117c87aee6bd32beca3cc3612a66d6b397 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Mon, 3 Jun 2013 15:53:36 +0200 Subject: [PATCH 03/29] Do not remove start,stop --- configuration/buildAndUpdateProduct.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index 58e1e9301d7..77746b913a5 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -338,9 +338,6 @@ if [[ "$@" == "install" ]] || [[ "$@" == "all" ]]; then rm -rf $ACDIR/configuration/org.eclipse.* if [[ $HAS_OVERWRITTEN_TARGET -eq 0 ]]; then - rm -rf $ACDIR/start - rm -rf $ACDIR/stop - cp -v $p2PluginRepository/configuration/config.ini configuration/ mkdir -p configuration/jetty/etc cp -v $PROJECT_HOME/java/target/configuration/jetty/etc/jetty.xml configuration/jetty/etc From 86c976c0cc4c17bd4893b519784b954cea2a1b6a Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 4 Jun 2013 14:21:36 +0200 Subject: [PATCH 04/29] bug 1418: support high point scoring scheme where winner receives one point --- .../domain/common/ScoringSchemeType.java | 2 +- .../domain/base/impl/DomainFactoryImpl.java | 3 +++ .../HighPointFirstGets1LastBreaksTie.java | 25 +++++++++++++++++++ .../sailing/gwt/ui/client/StringMessages.java | 1 + .../gwt/ui/client/StringMessages.properties | 1 + .../ui/client/StringMessages_de.properties | 1 + .../ScoringSchemeTypeFormatter.java | 2 ++ 7 files changed, 34 insertions(+), 1 deletion(-) create mode 100755 java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets1LastBreaksTie.java diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java index 491b5be22da..b49b524d5cb 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/ScoringSchemeType.java @@ -2,5 +2,5 @@ package com.sap.sailing.domain.common; public enum ScoringSchemeType { LOW_POINT, HIGH_POINT, HIGH_POINT_ESS_OVERALL, HIGH_POINT_LAST_BREAKS_TIE, - HIGH_POINT_FIRST_GETS_TEN, LOW_POINT_WINNER_GETS_ZERO + HIGH_POINT_FIRST_GETS_TEN, HIGH_POINT_FIRST_GETS_ONE, LOW_POINT_WINNER_GETS_ZERO } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java index 375e7a9c9dc..fba4a42561e 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/DomainFactoryImpl.java @@ -56,6 +56,7 @@ import com.sap.sailing.domain.leaderboard.ScoringScheme; import com.sap.sailing.domain.leaderboard.impl.HighPoint; import com.sap.sailing.domain.leaderboard.impl.HighPointExtremeSailingSeriesOverall; import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets10LastBreaksTie; +import com.sap.sailing.domain.leaderboard.impl.HighPointFirstGets1LastBreaksTie; import com.sap.sailing.domain.leaderboard.impl.HighPointLastBreaksTie; import com.sap.sailing.domain.leaderboard.impl.LowPoint; import com.sap.sailing.domain.leaderboard.impl.LowPointWinnerGetsZero; @@ -320,6 +321,8 @@ public class DomainFactoryImpl implements DomainFactory { return new HighPointExtremeSailingSeriesOverall(); case HIGH_POINT_LAST_BREAKS_TIE: return new HighPointLastBreaksTie(); + case HIGH_POINT_FIRST_GETS_ONE: + return new HighPointFirstGets1LastBreaksTie(); case HIGH_POINT_FIRST_GETS_TEN: return new HighPointFirstGets10LastBreaksTie(); case LOW_POINT_WINNER_GETS_ZERO: diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets1LastBreaksTie.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets1LastBreaksTie.java new file mode 100755 index 00000000000..05a4f0fa5cd --- /dev/null +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets1LastBreaksTie.java @@ -0,0 +1,25 @@ +package com.sap.sailing.domain.leaderboard.impl; + +import java.util.List; + +import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.common.ScoringSchemeType; +import com.sap.sailing.domain.common.impl.Util.Pair; + +public class HighPointFirstGets1LastBreaksTie extends HighPointFirstGetsFixedScore { + private static final long serialVersionUID = 1L; + + public HighPointFirstGets1LastBreaksTie() { + super(10.0); + } + + @Override + public ScoringSchemeType getType() { + return ScoringSchemeType.HIGH_POINT_FIRST_GETS_ONE; + } + + @Override + public int compareByBetterScore(List> o1Scores, List> o2Scores, boolean nullScoresAreBetter) { + return 0; + } +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index 50bca9a4a3a..f1eb54b6ebe 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -449,6 +449,7 @@ public interface StringMessages extends Messages { String sideToWhichMarkAtLegStartWasRounded(); String raceIsLive(String raceName); String racesAreLive(String raceNames); + String scoringSchemeHighPointFirstGetsOne(); String scoringSchemeHighPointFirstGetsTen(); String knotsUnit(); String averageJibeLossInMetersTooltip(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index a0e4a4e07cc..5ea9061dbdf 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -490,6 +490,7 @@ sideToWhichMarkAtLegStartWasRoundedTooltip=Side to which the mark at leg start w raceIsLive=Race {0} is live racesAreLive=Races {0} are live knotsUnit=kts +scoringSchemeHighPointFirstGetsTen=High Point, winner gets 1 point scoringSchemeHighPointFirstGetsTen=High Point, winner gets 10 points knotsUnit=kts generatePolarSheet=Generate Polar Sheet diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index 52a54d147cb..1151dbed673 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -490,6 +490,7 @@ sideToWhichMarkAtLegStartWasRounded=Tonne gerundet an sideToWhichMarkAtLegStartWasRoundedTooltip=Seite, an der die Bahnmarke am Schenkelstart gerundet wurde raceIsLive=Rennen {0} ist live racesAreLive=Rennen {0} sind live +scoringSchemeHighPointFirstGetsOne=High Point System, Gewinner erhält 1 Punkt scoringSchemeHighPointFirstGetsTen=High Point System, Gewinner erhält 10 Punkte knotsUnit=kn generatePolarSheet=Polardiagramm erstellen diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ScoringSchemeTypeFormatter.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ScoringSchemeTypeFormatter.java index 18b39cf4e12..d3a2d0fc004 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ScoringSchemeTypeFormatter.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ScoringSchemeTypeFormatter.java @@ -14,6 +14,8 @@ public class ScoringSchemeTypeFormatter { return stringMessages.scoringSchemeHighPointEssOverall(); case HIGH_POINT_LAST_BREAKS_TIE: return stringMessages.scoringSchemeHighPointLastBreaksTie(); + case HIGH_POINT_FIRST_GETS_ONE: + return stringMessages.scoringSchemeHighPointFirstGetsOne(); case HIGH_POINT_FIRST_GETS_TEN: return stringMessages.scoringSchemeHighPointFirstGetsTen(); case LOW_POINT_WINNER_GETS_ZERO: From 37a659c5dd733552606a1fb43bd0abf05c70cf3d Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 4 Jun 2013 14:22:54 +0200 Subject: [PATCH 05/29] penalty for high-point scoring scheme where winner gets one point is -1 --- .../impl/HighPointFirstGets1LastBreaksTie.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets1LastBreaksTie.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets1LastBreaksTie.java index 05a4f0fa5cd..7e545cb0d2b 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets1LastBreaksTie.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/HighPointFirstGets1LastBreaksTie.java @@ -2,15 +2,18 @@ package com.sap.sailing.domain.leaderboard.impl; import java.util.List; +import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.ScoringSchemeType; import com.sap.sailing.domain.common.impl.Util.Pair; +import com.sap.sailing.domain.leaderboard.NumberOfCompetitorsInLeaderboardFetcher; public class HighPointFirstGets1LastBreaksTie extends HighPointFirstGetsFixedScore { private static final long serialVersionUID = 1L; public HighPointFirstGets1LastBreaksTie() { - super(10.0); + super(1.0); } @Override @@ -18,6 +21,12 @@ public class HighPointFirstGets1LastBreaksTie extends HighPointFirstGetsFixedSco return ScoringSchemeType.HIGH_POINT_FIRST_GETS_ONE; } + @Override + public Double getPenaltyScore(RaceColumn raceColumn, Competitor competitor, MaxPointsReason maxPointsReason, Integer numberOfCompetitorsInRace, + NumberOfCompetitorsInLeaderboardFetcher numberOfCompetitorsInLeaderboardFetcher) { + return -1.0; + } + @Override public int compareByBetterScore(List> o1Scores, List> o2Scores, boolean nullScoresAreBetter) { return 0; From 62686a9808b1e417fb893abc49b6bce6d7c24c44 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 4 Jun 2013 15:50:24 +0200 Subject: [PATCH 06/29] fixed AbstractRaceColumn so that it properly notifies listeners when releaseTrackedRace is called --- .../domain/test/LeaderboardOfflineTest.java | 49 +++++++++++++++++++ .../domain/test/mock/MockedTrackedRace.java | 4 +- .../mock/MockedTrackedRaceWithFixedRank.java | 10 +++- .../domain/base/impl/AbstractRaceColumn.java | 2 +- 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java index 312d7bfbfed..640a7ae9e67 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java @@ -2,10 +2,13 @@ package com.sap.sailing.domain.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -13,17 +16,22 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ExecutionException; import org.junit.Before; import org.junit.Test; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.RaceColumn; +import com.sap.sailing.domain.base.RaceDefinition; +import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.TimePoint; +import com.sap.sailing.domain.common.dto.LeaderboardDTO; import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.domain.common.impl.Util.Pair; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; @@ -33,7 +41,9 @@ import com.sap.sailing.domain.leaderboard.impl.ResultDiscardingRuleImpl; import com.sap.sailing.domain.leaderboard.impl.ScoreCorrectionImpl; import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRank; import com.sap.sailing.domain.test.mock.MockedTrackedRaceWithFixedRankAndManyCompetitors; +import com.sap.sailing.domain.tracking.DynamicTrackedRegatta; import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.domain.tracking.TrackedRegattaRegistry; public class LeaderboardOfflineTest extends AbstractLeaderboardTest { private Set testRaces; @@ -100,6 +110,45 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest { leaderboard.addRace(testRaces.iterator().next(), columnName, /* medalRace */ false, defaultFleet); assertTrue(leaderboard.getRaceColumnByName(columnName).isMedalRace()); } + + @Test + public void testRepeatedLeaderboardDTOCacheInvalidation() throws NoWindException, InterruptedException, ExecutionException { + FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl("Test Leaderboard", new ScoreCorrectionImpl(), new ResultDiscardingRuleImpl( + new int[] { 5, 8 }), new LowPoint(), null); + Fleet defaultFleet = leaderboard.getFleet(null); + final String columnName = "abc"; + setupRaces(1, 0); + leaderboard.addRaceColumn(columnName, /* medalRace */ true); + leaderboard.addRace(testRaces.iterator().next(), columnName, /* medalRace */ false, defaultFleet); + final Set emptySet = Collections.emptySet(); + final MillisecondsTimePoint now = MillisecondsTimePoint.now(); + final TrackedRegattaRegistry trackedRegattaRegistry = new TrackedRegattaRegistry() { + @Override + public DynamicTrackedRegatta getOrCreateTrackedRegatta(Regatta regatta) { + return null; + } + @Override + public DynamicTrackedRegatta getTrackedRegatta(Regatta regatta) { + return null; + } + @Override + public void removeTrackedRegatta(Regatta regatta) {} + + @Override + public Regatta getRememberedRegattaForRace(Serializable raceID) { + return null; + } + @Override + public boolean isRaceBeingTracked(RaceDefinition r) { + return true; + } + }; + LeaderboardDTO leaderboardDTO = leaderboard.getLeaderboardDTO(now, emptySet, trackedRegattaRegistry, DomainFactory.INSTANCE); + assertNotNull(leaderboardDTO); + assertSame(leaderboardDTO, leaderboard.getLeaderboardDTO(now, emptySet, trackedRegattaRegistry, DomainFactory.INSTANCE)); // assert it's cached + leaderboard.getRaceColumnByName(columnName).releaseTrackedRace(defaultFleet); // this should clear the cache + assertNotSame(leaderboardDTO, leaderboard.getLeaderboardDTO(now, emptySet, trackedRegattaRegistry, DomainFactory.INSTANCE)); + } @Test public void testMaxPointsDiscard() throws NoWindException { diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java index c0816107934..e4e4f97cb06 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java @@ -3,6 +3,7 @@ package com.sap.sailing.domain.test.mock; import java.io.Serializable; import java.util.List; import java.util.NavigableSet; +import java.util.TreeSet; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; @@ -191,8 +192,7 @@ public class MockedTrackedRace implements DynamicTrackedRace { @Override public NavigableSet getMarkPassings(Competitor competitor) { - // TODO Auto-generated method stub - return null; + return new TreeSet(); } @Override diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithFixedRank.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithFixedRank.java index a39362bb385..18ee0bc4be7 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithFixedRank.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRaceWithFixedRank.java @@ -1,6 +1,7 @@ package com.sap.sailing.domain.test.mock; import java.io.Serializable; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -8,6 +9,8 @@ import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Course; import com.sap.sailing.domain.base.RaceDefinition; +import com.sap.sailing.domain.base.Waypoint; +import com.sap.sailing.domain.base.impl.CourseImpl; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.TimePoint; @@ -33,6 +36,11 @@ public class MockedTrackedRaceWithFixedRank extends MockedTrackedRace { private class MockedRaceDefinition implements RaceDefinition { private static final long serialVersionUID = 6812543850545870357L; + private final Course course; + + public MockedRaceDefinition() { + course = new CourseImpl("Test Course", Arrays.asList(new Waypoint[0])); + } @Override public String getName() { @@ -41,7 +49,7 @@ public class MockedTrackedRaceWithFixedRank extends MockedTrackedRace { @Override public Course getCourse() { - return null; + return course; } @Override diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/AbstractRaceColumn.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/AbstractRaceColumn.java index 893059bbfb5..a625bd8469a 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/AbstractRaceColumn.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/AbstractRaceColumn.java @@ -101,7 +101,7 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem @Override public synchronized void releaseTrackedRace(Fleet fleet) { - trackedRaces.remove(fleet); + setTrackedRace(fleet, null); } @Override From 7f638de7d929909204607372b05ed04c14ad099e Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 4 Jun 2013 15:57:36 +0200 Subject: [PATCH 07/29] fixed bug 1421 and provided a test case --- .../domain/test/LeaderboardOfflineTest.java | 8 +- .../leaderboard/LeaderboardCacheManager.java | 153 +++++++++--------- .../caching/LeaderboardDTOCache.java | 2 +- 3 files changed, 88 insertions(+), 75 deletions(-) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java index 640a7ae9e67..b2a12be2795 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardOfflineTest.java @@ -147,7 +147,13 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest { assertNotNull(leaderboardDTO); assertSame(leaderboardDTO, leaderboard.getLeaderboardDTO(now, emptySet, trackedRegattaRegistry, DomainFactory.INSTANCE)); // assert it's cached leaderboard.getRaceColumnByName(columnName).releaseTrackedRace(defaultFleet); // this should clear the cache - assertNotSame(leaderboardDTO, leaderboard.getLeaderboardDTO(now, emptySet, trackedRegattaRegistry, DomainFactory.INSTANCE)); + LeaderboardDTO leaderboardDTO2 = leaderboard.getLeaderboardDTO(now, emptySet, trackedRegattaRegistry, DomainFactory.INSTANCE); + assertNotSame(leaderboardDTO, leaderboardDTO2); + assertSame(leaderboardDTO2, leaderboard.getLeaderboardDTO(now, emptySet, trackedRegattaRegistry, DomainFactory.INSTANCE)); // and cached again + leaderboard.getRaceColumnByName(columnName).setTrackedRace(defaultFleet, testRaces.iterator().next()); // clear cache again; requires listener(s) to still be attached + LeaderboardDTO leaderboardDTO3 = leaderboard.getLeaderboardDTO(now, emptySet, trackedRegattaRegistry, DomainFactory.INSTANCE); + assertNotSame(leaderboardDTO2, leaderboardDTO3); + assertSame(leaderboardDTO3, leaderboard.getLeaderboardDTO(now, emptySet, trackedRegattaRegistry, DomainFactory.INSTANCE)); // and cached again } @Test diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/LeaderboardCacheManager.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/LeaderboardCacheManager.java index a09b9a63e5e..dccab7703f0 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/LeaderboardCacheManager.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/LeaderboardCacheManager.java @@ -180,94 +180,101 @@ public class LeaderboardCacheManager { * is updated accordingly. */ private void registerAsListener(final Leaderboard leaderboard) { - for (TrackedRace trackedRace : leaderboard.getTrackedRaces()) { - registerListener(leaderboard, trackedRace); - } - final CacheInvalidationUponScoreCorrectionListener scoreCorrectionListener = new CacheInvalidationUponScoreCorrectionListener(leaderboard); - leaderboard.getScoreCorrection().addScoreCorrectionListener(scoreCorrectionListener); - synchronized (scoreCorrectionListeners) { - scoreCorrectionListeners.put(leaderboard, scoreCorrectionListener); - } - final RaceColumnListener raceColumnListener = new RaceColumnListener() { - private static final long serialVersionUID = 8165124797028386317L; - - @Override - public void trackedRaceLinked(RaceColumn raceColumn, Fleet fleet, TrackedRace trackedRace) { - removeFromCache(leaderboard); + // only add as listener again if not yet added + if (!scoreCorrectionListeners.containsKey(leaderboard)) { + for (TrackedRace trackedRace : leaderboard.getTrackedRaces()) { registerListener(leaderboard, trackedRace); } - - /** - * This listener must not be serialized. See also bug 952. - */ - @Override - public boolean isTransient() { - return true; + final CacheInvalidationUponScoreCorrectionListener scoreCorrectionListener = new CacheInvalidationUponScoreCorrectionListener( + leaderboard); + leaderboard.getScoreCorrection().addScoreCorrectionListener(scoreCorrectionListener); + synchronized (scoreCorrectionListeners) { + scoreCorrectionListeners.put(leaderboard, scoreCorrectionListener); } - - @Override - public void trackedRaceUnlinked(RaceColumn raceColumn, Fleet fleet, TrackedRace trackedRace) { - removeFromCache(leaderboard); - Map> listenersMap = invalidationListenersPerLeaderboard.get(leaderboard); - if (listenersMap != null) { - Set listeners = listenersMap.get(trackedRace); - if (listeners != null) { - for (CacheInvalidationListener listener : listeners) { - listener.removeFromTrackedRace(); + final RaceColumnListener raceColumnListener = new RaceColumnListener() { + private static final long serialVersionUID = 8165124797028386317L; + + @Override + public void trackedRaceLinked(RaceColumn raceColumn, Fleet fleet, TrackedRace trackedRace) { + removeFromCache(leaderboard); + registerListener(leaderboard, trackedRace); + } + + /** + * This listener must not be serialized. See also bug 952. + */ + @Override + public boolean isTransient() { + return true; + } + + @Override + public void trackedRaceUnlinked(RaceColumn raceColumn, Fleet fleet, TrackedRace trackedRace) { + removeFromCache(leaderboard); + Map> listenersMap = invalidationListenersPerLeaderboard + .get(leaderboard); + if (listenersMap != null) { + Set listeners = listenersMap.get(trackedRace); + if (listeners != null) { + for (CacheInvalidationListener listener : listeners) { + listener.removeFromTrackedRace(); + } } } } - } - @Override - public void isMedalRaceChanged(RaceColumn raceColumn, boolean newIsMedalRace) { - removeFromCache(leaderboard); - } + @Override + public void isMedalRaceChanged(RaceColumn raceColumn, boolean newIsMedalRace) { + removeFromCache(leaderboard); + } - @Override - public boolean canAddRaceColumnToContainer(RaceColumn raceColumn) { - return true; - } + @Override + public boolean canAddRaceColumnToContainer(RaceColumn raceColumn) { + return true; + } - @Override - public void raceColumnAddedToContainer(RaceColumn raceColumn) { - removeFromCache(leaderboard); - } + @Override + public void raceColumnAddedToContainer(RaceColumn raceColumn) { + removeFromCache(leaderboard); + } - @Override - public void raceColumnRemovedFromContainer(RaceColumn raceColumn) { - removeFromCache(leaderboard); - } + @Override + public void raceColumnRemovedFromContainer(RaceColumn raceColumn) { + removeFromCache(leaderboard); + } - @Override - public void raceColumnMoved(RaceColumn raceColumn, int newIndex) { - removeFromCache(leaderboard); - } + @Override + public void raceColumnMoved(RaceColumn raceColumn, int newIndex) { + removeFromCache(leaderboard); + } - @Override - public void factorChanged(RaceColumn raceColumn, Double oldFactor, Double newFactor) { - removeFromCache(leaderboard); - } + @Override + public void factorChanged(RaceColumn raceColumn, Double oldFactor, Double newFactor) { + removeFromCache(leaderboard); + } - @Override - public void resultDiscardingRuleChanged(ThresholdBasedResultDiscardingRule oldDiscardingRule, - ThresholdBasedResultDiscardingRule newDiscardingRule) { - removeFromCache(leaderboard); - } + @Override + public void resultDiscardingRuleChanged(ThresholdBasedResultDiscardingRule oldDiscardingRule, + ThresholdBasedResultDiscardingRule newDiscardingRule) { + removeFromCache(leaderboard); + } - @Override - public void competitorDisplayNameChanged(Competitor competitor, String oldDisplayName, String displayName) { - removeFromCache(leaderboard); + @Override + public void competitorDisplayNameChanged(Competitor competitor, String oldDisplayName, + String displayName) { + removeFromCache(leaderboard); + } + + @Override + public void raceLogEventAdded(RaceColumn raceColumn, RaceLogIdentifier raceLogIdentifier, + RaceLogEvent event) { + removeFromCache(leaderboard); + } + }; + leaderboard.addRaceColumnListener(raceColumnListener); + synchronized (raceColumnListeners) { + raceColumnListeners.put(leaderboard, raceColumnListener); } - - @Override - public void raceLogEventAdded(RaceColumn raceColumn, RaceLogIdentifier raceLogIdentifier, RaceLogEvent event) { - removeFromCache(leaderboard); - } - }; - leaderboard.addRaceColumnListener(raceColumnListener); - synchronized (raceColumnListeners) { - raceColumnListeners.put(leaderboard, raceColumnListener); } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/caching/LeaderboardDTOCache.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/caching/LeaderboardDTOCache.java index 9c8fae22556..383c51cb4ef 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/caching/LeaderboardDTOCache.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/caching/LeaderboardDTOCache.java @@ -88,7 +88,6 @@ public class LeaderboardDTOCache implements LeaderboardCache { } }; this.leaderboardCacheManager = new LeaderboardCacheManager(this); - this.leaderboardCacheManager.add(leaderboard); } @Override @@ -159,6 +158,7 @@ public class LeaderboardDTOCache implements LeaderboardCache { } }); computeLeadearboardByNameExecutor.execute(future); + this.leaderboardCacheManager.add(leaderboard); // ensure the leaderboard is tracked for changes to invalidate leaderboardCache.put(key, future); } else { cacheHit = true; From e4766d9445e69b3a22761c4d782e79688a4e42f9 Mon Sep 17 00:00:00 2001 From: fmittag Date: Tue, 4 Jun 2013 16:56:38 +0200 Subject: [PATCH 08/29] renaming of RegattaRaceStatesJsonGetServlet to EventRaceStatesJsonGetServlet --- .../WEB-INF/web.xml | 18 +++++++++--------- ...java => EventRaceStatesJsonGetServlet.java} | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) rename java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/{rc/RegattaRaceStatesJsonGetServlet.java => EventRaceStatesJsonGetServlet.java} (97%) diff --git a/java/com.sap.sailing.server.gateway/WEB-INF/web.xml b/java/com.sap.sailing.server.gateway/WEB-INF/web.xml index 7d1ba633b4d..46d528f9ecc 100644 --- a/java/com.sap.sailing.server.gateway/WEB-INF/web.xml +++ b/java/com.sap.sailing.server.gateway/WEB-INF/web.xml @@ -58,15 +58,6 @@ RCCompetitors /rc/competitors - - - RCRegattaRaceStates - com.sap.sailing.server.gateway.impl.rc.RegattaRaceStatesJsonGetServlet - - - RCRegattaRaceStates - /rc/regattaRaceStates - @@ -97,6 +88,15 @@ /events + + EventRaceStatesServlet + com.sap.sailing.server.gateway.impl.EventRaceStatesJsonGetServlet + + + EventRaceStatesServlet + /eventRaceStates + + RegattasJsonGetServlet com.sap.sailing.server.gateway.impl.RegattasJsonGetServlet diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/RegattaRaceStatesJsonGetServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java similarity index 97% rename from java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/RegattaRaceStatesJsonGetServlet.java rename to java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java index 5dfd893a104..d3defd9d998 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/RegattaRaceStatesJsonGetServlet.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/EventRaceStatesJsonGetServlet.java @@ -1,4 +1,4 @@ -package com.sap.sailing.server.gateway.impl.rc; +package com.sap.sailing.server.gateway.impl; import java.io.IOException; import java.util.Calendar; @@ -32,10 +32,10 @@ import com.sap.sailing.domain.racelog.analyzing.impl.RaceStatusAnalyzer; import com.sap.sailing.domain.racelog.analyzing.impl.StartTimeFinder; import com.sap.sailing.server.gateway.AbstractJsonHttpServlet; -public class RegattaRaceStatesJsonGetServlet extends AbstractJsonHttpServlet { +public class EventRaceStatesJsonGetServlet extends AbstractJsonHttpServlet { private static final long serialVersionUID = -4820965681871902242L; - private final static Logger logger = Logger.getLogger(RegattaRaceStatesJsonGetServlet.class.getName()); + private final static Logger logger = Logger.getLogger(EventRaceStatesJsonGetServlet.class.getName()); private static final String PARAM_NAME_EVENTID = "eventId"; private static final String PARAM_NAME_FILTER_BY_COURSEAREA = "filterByCourseArea"; From 218b9747a9e06ae014c128aab99daad0f826dc2b Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 4 Jun 2013 17:09:28 +0200 Subject: [PATCH 09/29] fixed string messages for new scoring scheme --- .../com/sap/sailing/gwt/ui/client/StringMessages.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index 5ea9061dbdf..17f5959788c 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -490,7 +490,7 @@ sideToWhichMarkAtLegStartWasRoundedTooltip=Side to which the mark at leg start w raceIsLive=Race {0} is live racesAreLive=Races {0} are live knotsUnit=kts -scoringSchemeHighPointFirstGetsTen=High Point, winner gets 1 point +scoringSchemeHighPointFirstGetsOne=High Point, winner gets 1 point scoringSchemeHighPointFirstGetsTen=High Point, winner gets 10 points knotsUnit=kts generatePolarSheet=Generate Polar Sheet From 84e6a6d98f5858e482f3247b862b4875af055542 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 4 Jun 2013 22:15:04 +0200 Subject: [PATCH 10/29] made detaching of a race log null safe --- .../sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java | 4 +++- .../domain/tracking/impl/DynamicTrackedRaceLogListener.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java index b658309d6f4..bd81bb318d9 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceImpl.java @@ -670,7 +670,9 @@ DynamicTrackedRace, GPSTrackListener { @Override public void detachRaceLog() { - logListener.removeFrom(attachedRaceLog); + if (attachedRaceLog != null) { + logListener.removeFrom(attachedRaceLog); + } super.detachRaceLog(); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java index f4f83a1e7ad..2676d8a4570 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/DynamicTrackedRaceLogListener.java @@ -49,7 +49,9 @@ public class DynamicTrackedRaceLogListener implements RaceLogEventVisitor { // Maybe something like this is needed: // TODO: // ??? trackedRace.setStatus(new TrackedRaceStatusImpl(TrackedRaceStatusEnum.PREPARED, 0.0)); - raceLog.removeListener(this); + if (raceLog != null) { + raceLog.removeListener(this); + } } private void analyze() { From c4cc6f52809436852053cefcf99a266da611aa54 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Wed, 5 Jun 2013 12:05:46 +0200 Subject: [PATCH 11/29] Changing of strategy for configuration overwrite: You have to create a file no-overwrite if you don't want the configuration and start scripts to be overwritten --- configuration/buildAndUpdateProduct.sh | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index 77746b913a5..399b67ca7bd 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -324,32 +324,27 @@ if [[ "$@" == "install" ]] || [[ "$@" == "all" ]]; then mkdir $ACDIR/configuration fi - # seems that initial scripts not there - if [ ! -f "$ACDIR/start" ]; then - cp -v $PROJECT_HOME/java/target/start $ACDIR - cp -v $PROJECT_HOME/java/target/http2udpmirror $ACDIR - cp -v $PROJECT_HOME/java/target/configuration/logging.properties $ACDIR/configuration - fi - cd $ACDIR rm -rf $ACDIR/plugins/*.* rm -rf $ACDIR/org.eclipse.* rm -rf $ACDIR/configuration/org.eclipse.* - if [[ $HAS_OVERWRITTEN_TARGET -eq 0 ]]; then + if [[ $HAS_OVERWRITTEN_TARGET -eq 0 ]] && [ ! -f $ACDIR/no-overwrite ]; then cp -v $p2PluginRepository/configuration/config.ini configuration/ + mkdir -p configuration/jetty/etc cp -v $PROJECT_HOME/java/target/configuration/jetty/etc/jetty.xml configuration/jetty/etc cp -v $PROJECT_HOME/java/target/configuration/jetty/etc/realm.properties configuration/jetty/etc cp -v $PROJECT_HOME/java/target/configuration/monitoring.properties configuration/ cp -v $PROJECT_HOME/configuration/mongodb.cfg $ACDIR/ - # avoid overwriting start configuration if it exists - if [ ! -f $ACDIR/start ]; then - cp -v $PROJECT_HOME/java/target/start $ACDIR/ - cp -v $PROJECT_HOME/java/target/stop $ACDIR/ - fi + cp -v $PROJECT_HOME/java/target/start $ACDIR/ + cp -v $PROJECT_HOME/java/target/stop $ACDIR/ + cp -v $PROJECT_HOME/java/target/udpmirror $ACDIR/ + + cp -v $PROJECT_HOME/java/target/http2udpmirror $ACDIR + cp -v $PROJECT_HOME/java/target/configuration/logging.properties $ACDIR/configuration fi cp -r -v $p2PluginRepository/configuration/org.eclipse.equinox.simpleconfigurator configuration/ @@ -360,7 +355,5 @@ if [[ "$@" == "install" ]] || [[ "$@" == "all" ]]; then # Make sure this script is up2date at least for the next run cp -v $PROJECT_HOME/configuration/buildAndUpdateProduct.sh $ACDIR/ - cp -v $PROJECT_HOME/java/target/udpmirror $ACDIR/ - echo "Installation complete. You may now start the server using ./start" fi From 2dbb2b06a58a4c6963bf714244a953967a440d86 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Wed, 5 Jun 2013 12:57:06 +0200 Subject: [PATCH 12/29] Added option remote-deploy --- configuration/buildAndUpdateProduct.sh | 78 +++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index 399b67ca7bd..70fc1fa3d6e 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -64,7 +64,7 @@ proxy=0 extra='' if [ $# -eq 0 ]; then - echo "buildAndUpdateProduct [-g -t -o -c -m -n -l ] [build|install|all|hot-deploy]" + echo "buildAndUpdateProduct [-g -t -o -c -m -n -l ] [build|install|all|hot-deploy|remote-deploy]" echo "" echo "-g Disable GWT compile, no gwt files will be generated, old ones will be preserved." echo "-t Disable tests" @@ -76,6 +76,7 @@ if [ $# -eq 0 ]; then echo " com.sap.sailing.monitoring. Only works if there is a fully built server available." echo "-l Telnet port the OSGi server is running. Optional but enables fully automatic hot-deploy." echo "-s Name of server you want to use as target for install or hot-deploy. This overrides default behaviour." + echo "-w Target for remote-deploy. Must comply with the following format: user@server." echo "" echo "build: builds the server code using Maven to $PROJECT_HOME (log to $START_DIR/build.log)" echo "install: installs product and configuration to $SERVERS_HOME/$active_branch. Overwrites any configuration by using config from branch." @@ -107,6 +108,7 @@ do l) OSGI_TELNET_PORT=$OPTARG;; s) TARGET_SERVER_NAME=$OPTARG HAS_OVERWRITTEN_TARGET=1;; + w) REMOTE_SERVER_LOGIN=$OPTARG;; \?) echo "Invalid option" exit 2;; esac @@ -357,3 +359,77 @@ if [[ "$@" == "install" ]] || [[ "$@" == "all" ]]; then echo "Installation complete. You may now start the server using ./start" fi + +if [[ "$@" == "remote-deploy" ]]; then + read -s -n1 -p "Which server do you want to deploy ([d]ev,[t]est,[p]rod1,p[r]od2): " answer + case $answer in + "D" | "d") SERVER="dev";; + "T" | "t") SERVER="test";; + "P" | "p") SERVER="prod1";; + "R" | "r") SERVER="prod2";; + *) echo "Aborting..." + exit;; + esac + + echo "Will deploy server $SERVER" + + read -s -n1 -p "Did you want me to start a LOCAL build (without tests) for $SERVER_HOMES/$SERVER before deploying (y/n)? " answer + case $answer in + "Y" | "y") BUILD=1;; + *) echo "Aborting..." + exit;; + esac + + if [[ $BUILD -eq 1 ]]; then + ACDIR=$PWD + cd $HOME/code + git co dev + configuration/buildAndUpdateProduct.sh -t build + read -s -n1 -p "Has the build been successful (y/n)? " answer + case $answer in + "Y" | "y") OK=1;; + *) echo "Aborting..." + exit;; + esac + cd $ACDIR + echo "" + fi + + SSH_CMD="ssh $REMOTE_SERVER_LOGIN" + SCP_CMD="scp -r" + + REMOTE_HOME=`ssh $REMOTE_SERVER_LOGIN 'echo $HOME/servers'` + REMOTE_SERVER="$REMOTE_HOME/$SERVER" + + read -s -n1 -p "I will deploy $SERVERS_HOME/$SERVER to $@:$REMOTE_SERVER. Is this correct (y/n)? " answer + case $answer in + "Y" | "y") OK=1;; + *) echo "Aborting... nothing has been changed on remote server!" + exit;; + esac + + echo "" + echo "Starting deployment to $REMOTE_HOME/$SERVER..." + + $SSH_CMD "rm -rf $REMOTE_SERVER/plugins/*.*" + $SSH_CMD "rm -rf $REMOTE_SERVER/org.eclipse*.*" + $SSH_CMD "rm -rf $REMOTE_SERVER/configuration/org.eclipse*.*" + + $SCP_CMD $SERVER_HOME/$SERVER/org.eclipse* $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/ + $SCP_CMD $SERVER_HOME/$SERVER/configuration/org.eclipse* $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/configuration + $SCP_CMD $SERVER_HOME/$SERVER/plugins/*.jar $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/plugins/ + + echo "Deployed successfully. I did NOT change any configuration, only code." + + read -s -n1 -p "Do you want me to restart the remote server (y/n)? " answer + case $answer in + "Y" | "y") OK=1;; + *) echo "Aborting... deployment should be ready by now!" + exit;; + esac + + $SSH_CMD "$REMOTE_SERVER/stop" + $SSH_CMD "$REMOTE_SERVER/start" + + echo "Restarted remote server. Please check." +fi From b211491e8bf068ec421d6ca3425ec510287d014a Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Wed, 5 Jun 2013 12:58:47 +0200 Subject: [PATCH 13/29] Updated documentation --- configuration/buildAndUpdateProduct.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index 70fc1fa3d6e..7fa64d520eb 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -81,7 +81,12 @@ if [ $# -eq 0 ]; then echo "build: builds the server code using Maven to $PROJECT_HOME (log to $START_DIR/build.log)" echo "install: installs product and configuration to $SERVERS_HOME/$active_branch. Overwrites any configuration by using config from branch." echo "all: calls build and then install" + echo "" echo "hot-deploy: performs hot deployment of named bundle into OSGi server" + echo "Example: $0 -n com.sap.sailing.www -l 14888 hot-deploy" + echo "" + echo "remote-deploy: performs hot deployment of named bundle into OSGi server" + echo "Example: $0 -w trac@sapsailing.com remote-deploy" echo "" echo "Active branch is $active_branch" echo "Project home is $PROJECT_HOME" From e37f46143eebf433c096351ec0caeb220f569cc0 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Wed, 5 Jun 2013 13:01:10 +0200 Subject: [PATCH 14/29] Fixed typo --- configuration/buildAndUpdateProduct.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index 7fa64d520eb..fea930b2902 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -378,7 +378,7 @@ if [[ "$@" == "remote-deploy" ]]; then echo "Will deploy server $SERVER" - read -s -n1 -p "Did you want me to start a LOCAL build (without tests) for $SERVER_HOMES/$SERVER before deploying (y/n)? " answer + read -s -n1 -p "Did you want me to start a LOCAL build (without tests) for $SERVERS_HOME/$SERVER before deploying (y/n)? " answer case $answer in "Y" | "y") BUILD=1;; *) echo "Aborting..." From 81c28ca34652234d028528db923ab9b5fa9692b4 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Wed, 5 Jun 2013 13:02:10 +0200 Subject: [PATCH 15/29] Fixed option --- configuration/buildAndUpdateProduct.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index fea930b2902..3eb29d84083 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -99,7 +99,7 @@ echo PROJECT_HOME is $PROJECT_HOME echo SERVERS_HOME is $SERVERS_HOME echo BRANCH is $active_branch -options=':gtocpm:n:l:s:' +options=':gtocpm:n:l:s:w:' while getopts $options option do case $option in @@ -115,7 +115,7 @@ do HAS_OVERWRITTEN_TARGET=1;; w) REMOTE_SERVER_LOGIN=$OPTARG;; \?) echo "Invalid option" - exit 2;; + exit 4;; esac done From b68f076d5b25f130c25dd035f620069c5a2b4136 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Wed, 5 Jun 2013 13:03:17 +0200 Subject: [PATCH 16/29] Fixed option --- configuration/buildAndUpdateProduct.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index 3eb29d84083..0713f141767 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -381,8 +381,7 @@ if [[ "$@" == "remote-deploy" ]]; then read -s -n1 -p "Did you want me to start a LOCAL build (without tests) for $SERVERS_HOME/$SERVER before deploying (y/n)? " answer case $answer in "Y" | "y") BUILD=1;; - *) echo "Aborting..." - exit;; + *) echo "Not building anything. You have been warned!" esac if [[ $BUILD -eq 1 ]]; then From 84cfe90653238424d1d095b3dbb06f72815cb632 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Wed, 5 Jun 2013 13:04:47 +0200 Subject: [PATCH 17/29] Fixed variables --- configuration/buildAndUpdateProduct.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index 0713f141767..993fbfcd33c 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -405,7 +405,7 @@ if [[ "$@" == "remote-deploy" ]]; then REMOTE_HOME=`ssh $REMOTE_SERVER_LOGIN 'echo $HOME/servers'` REMOTE_SERVER="$REMOTE_HOME/$SERVER" - read -s -n1 -p "I will deploy $SERVERS_HOME/$SERVER to $@:$REMOTE_SERVER. Is this correct (y/n)? " answer + read -s -n1 -p "I will deploy $SERVERS_HOME/$SERVER to $REMOTE_SERVER_LOGIN:$REMOTE_SERVER. Is this correct (y/n)? " answer case $answer in "Y" | "y") OK=1;; *) echo "Aborting... nothing has been changed on remote server!" @@ -419,9 +419,9 @@ if [[ "$@" == "remote-deploy" ]]; then $SSH_CMD "rm -rf $REMOTE_SERVER/org.eclipse*.*" $SSH_CMD "rm -rf $REMOTE_SERVER/configuration/org.eclipse*.*" - $SCP_CMD $SERVER_HOME/$SERVER/org.eclipse* $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/ - $SCP_CMD $SERVER_HOME/$SERVER/configuration/org.eclipse* $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/configuration - $SCP_CMD $SERVER_HOME/$SERVER/plugins/*.jar $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/plugins/ + $SCP_CMD $SERVERS_HOME/$SERVER/org.eclipse* $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/ + $SCP_CMD $SERVERS_HOME/$SERVER/configuration/org.eclipse* $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/configuration + $SCP_CMD $SERVERS_HOME/$SERVER/plugins/*.jar $REMOTE_SERVER_LOGIN:$REMOTE_SERVER/plugins/ echo "Deployed successfully. I did NOT change any configuration, only code." From 23e3373defdb2f9861fb6fa9ad6c901741ccee18 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Wed, 5 Jun 2013 13:06:35 +0200 Subject: [PATCH 18/29] Fixed newline --- configuration/buildAndUpdateProduct.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index 993fbfcd33c..ddc637fea7b 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -432,6 +432,7 @@ if [[ "$@" == "remote-deploy" ]]; then exit;; esac + echo "" $SSH_CMD "$REMOTE_SERVER/stop" $SSH_CMD "$REMOTE_SERVER/start" From b53a39142e2adc039b8e8c1171b01c5ccbc2d3bd Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 15:03:13 +0200 Subject: [PATCH 19/29] Cleaning up warnings --- .../selenium/test/adminconsole/TestLeaderboardCreation.java | 2 -- .../test/adminconsole/pages/LeaderboardConfigurationPanel.java | 1 - 2 files changed, 3 deletions(-) diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/test/adminconsole/TestLeaderboardCreation.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/test/adminconsole/TestLeaderboardCreation.java index 852f290f3aa..190c3970354 100755 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/test/adminconsole/TestLeaderboardCreation.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/test/adminconsole/TestLeaderboardCreation.java @@ -3,11 +3,9 @@ package com.sap.sailing.selenium.test.adminconsole; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import org.junit.Before; import org.junit.Test; import com.sap.sailing.selenium.test.AbstractSeleniumTest; -import com.sap.sailing.selenium.test.DatabaseHelper; import com.sap.sailing.selenium.test.adminconsole.pages.AdminConsolePage; import com.sap.sailing.selenium.test.adminconsole.pages.FlexibleLeaderboardCreationDialog; import com.sap.sailing.selenium.test.adminconsole.pages.LeaderboardConfigurationPanel; diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/test/adminconsole/pages/LeaderboardConfigurationPanel.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/test/adminconsole/pages/LeaderboardConfigurationPanel.java index a3588736b17..0e912ff88a3 100755 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/test/adminconsole/pages/LeaderboardConfigurationPanel.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/test/adminconsole/pages/LeaderboardConfigurationPanel.java @@ -1,7 +1,6 @@ package com.sap.sailing.selenium.test.adminconsole.pages; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.openqa.selenium.By; From 5680e90c88857250aa9988b3676dec1d354cdb31 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 15:04:35 +0200 Subject: [PATCH 20/29] Added ignore for file that seems to get ignored by ignores somehow --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index df16a1f9bab..00de9eb7a46 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ sailing_debug0* /mobile/com.sap.sailing.racecommittee.glue/bin/jarlist.cache /java/com.sap.sailing.server.gateway.serialization.test/.settings/*.prefs .DS_Store +java/com.sap.sailing.simulator/bin/com/sap/sailing/simulator/Simulator.gwt.xml From 87ba885056f4e50a86e8c0518e4c50c070ff7560 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 15:05:26 +0200 Subject: [PATCH 21/29] This file should have never been added to the repository --- .../bin/com/sap/sailing/simulator/Simulator.gwt.xml | 5 ----- 1 file changed, 5 deletions(-) delete mode 100755 java/com.sap.sailing.simulator/bin/com/sap/sailing/simulator/Simulator.gwt.xml diff --git a/java/com.sap.sailing.simulator/bin/com/sap/sailing/simulator/Simulator.gwt.xml b/java/com.sap.sailing.simulator/bin/com/sap/sailing/simulator/Simulator.gwt.xml deleted file mode 100755 index 818a5a2adf1..00000000000 --- a/java/com.sap.sailing.simulator/bin/com/sap/sailing/simulator/Simulator.gwt.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - From 4c652f18f33c77544c8505863e821b47748eaa1b Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 15:09:09 +0200 Subject: [PATCH 22/29] Cleaning up no proxy jetty on 8889 launch config --- ...ingServer (No Proxy, Jetty on 8889).launch | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch index d560c6e4c5d..970eba9adc3 100755 --- a/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch +++ b/java/com.sap.sailing.server/SailingServer (No Proxy, Jetty on 8889).launch @@ -1,31 +1,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 76e2f86707adc9b981fe487a761efb67c232b663 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 15:32:22 +0200 Subject: [PATCH 23/29] First step to display version information in AdminConsole --- configuration/buildAndUpdateProduct.sh | 6 ++++++ .../sailing/gwt/ui/client/SailingService.java | 2 ++ .../gwt/ui/client/SailingServiceAsync.java | 2 ++ .../gwt/ui/server/SailingServiceImpl.java | 16 ++++++++++++++++ 4 files changed, 26 insertions(+) diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index ddc637fea7b..aa78622d84e 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -48,6 +48,10 @@ cd $PROJECT_HOME active_branch=$(git symbolic-ref -q HEAD) active_branch=`basename $active_branch` +HEAD_SHA=$(git show-ref --head -s | head -1) +HEAD_DATE=$(date "+%Y%m%d%H%M") +VERSION_INFO="$HEAD_SHA-$active_branch-$HEAD_DATE" + MAVEN_SETTINGS=$PROJECT_HOME/configuration/maven-settings.xml MAVEN_SETTINGS_PROXY=$PROJECT_HOME/configuration/maven-settings-proxy.xml @@ -91,6 +95,7 @@ if [ $# -eq 0 ]; then echo "Active branch is $active_branch" echo "Project home is $PROJECT_HOME" echo "Server home is $SERVERS_HOME" + echo "Version info: $VERSION_INFO" echo "P2 home is $p2PluginRepository" exit 2 fi @@ -362,6 +367,7 @@ if [[ "$@" == "install" ]] || [[ "$@" == "all" ]]; then # Make sure this script is up2date at least for the next run cp -v $PROJECT_HOME/configuration/buildAndUpdateProduct.sh $ACDIR/ + echo $VERSION_INFO > $ACDIR/configuration/jetty/version.txt echo "Installation complete. You may now start the server using ./start" fi diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java index 3ede22af652..f5759d1b721 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingService.java @@ -299,4 +299,6 @@ public interface SailingService extends RemoteService { List getRegattaOverviewEntriesForEvent(String eventIdAsString); EventDTO getEventByIdAsString(String eventIdAsString); + + String getBuildVersion(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java index 32b9fd6e489..738633dd582 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SailingServiceAsync.java @@ -436,6 +436,8 @@ public interface SailingServiceAsync { void getEventByIdAsString(String eventIdAsString, AsyncCallback asyncCallback); void updateRegatta(RegattaIdentifier regattaIdentifier, String defaultCourseAreaId, AsyncCallback callback); + + void getBuildVersion(AsyncCallback callback); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 59f3307d23c..e1db161e98f 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -1,5 +1,8 @@ package com.sap.sailing.gwt.ui.server; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; @@ -2789,4 +2792,17 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S protected com.sap.sailing.domain.base.DomainFactory getBaseDomainFactory() { return baseDomainFactory; } + + public String getBuildVersion() { + String version = "Unknown or Development"; + File versionfile = new File(System.getProperty("jetty.home") + File.pathSeparator + "version.txt"); + if (versionfile.exists()) { + try { + version = new BufferedReader(new FileReader(versionfile)).readLine(); + } catch (Exception ex) { + logger.severe("Could not load file " + versionfile.getAbsolutePath()); + } + } + return version; + } } \ No newline at end of file From 78e853f9a40aeaa832f1cc3edd444e31ab28ac38 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 15:33:03 +0200 Subject: [PATCH 24/29] Fixed compile settings - include simulator --- .../.settings/com.google.gwt.eclipse.core.prefs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs b/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs index 5cdf60f9e2e..c412bfe3984 100755 --- a/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs +++ b/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs @@ -1,4 +1,4 @@ -eclipse.preferences.version=1 -entryPointModules= -filesCopiedToWebInfLib=gwt-servlet.jar -gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgLiAtbG9jYWxXb3JrZXJzIDMgLXN0cmljdCAtbG9nTGV2ZWwgVFJBQ0VdXT48L2V4dHJhLWFyZ3M+PHZtLWFyZ3M+PCFbQ0RBVEFbLVhteDEwMjRtXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5BZG1pbkNvbnNvbGU8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuTGVhZGVyYm9hcmQ8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuTGVhZGVyYm9hcmRFZGl0aW5nPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlJhY2VCb2FyZDwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TcGVjdGF0b3I8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuVXNlck1hbmFnZW1lbnQ8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuVHZWaWV3PC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlZpZGVvUG9wdXA8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuWW91dHViZVBvcHVwPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlBvbGFyU2hlZXRzPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlJlZ2F0dGFPdmVydmlldzwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+ +eclipse.preferences.version=1 +entryPointModules= +filesCopiedToWebInfLib=gwt-servlet.jar +gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgLiAtbG9jYWxXb3JrZXJzIDYgLXN0cmljdCAtbG9nTGV2ZWwgVFJBQ0VdXT48L2V4dHJhLWFyZ3M+PHZtLWFyZ3M+PCFbQ0RBVEFbLVhteDIwMjRtXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5BZG1pbkNvbnNvbGU8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuTGVhZGVyYm9hcmQ8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuTGVhZGVyYm9hcmRFZGl0aW5nPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlJhY2VCb2FyZDwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TcGVjdGF0b3I8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuVXNlck1hbmFnZW1lbnQ8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuVHZWaWV3PC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlZpZGVvUG9wdXA8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuWW91dHViZVBvcHVwPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlBvbGFyU2hlZXRzPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlJlZ2F0dGFPdmVydmlldzwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TaW11bGF0b3I8L2VudHJ5LXBvaW50LW1vZHVsZT48L2d3dC1jb21waWxlLXNldHRpbmdzPg\=\= From 63f4d9a1dd745c0abfdb195448224b02f3b833f3 Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 15:59:25 +0200 Subject: [PATCH 25/29] This project should have the gwt nature --- java/com.sap.sailing.simulator/.project | 67 ++++++++++++++----------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/java/com.sap.sailing.simulator/.project b/java/com.sap.sailing.simulator/.project index 5fcae835e7d..3f09d9050b0 100644 --- a/java/com.sap.sailing.simulator/.project +++ b/java/com.sap.sailing.simulator/.project @@ -1,28 +1,39 @@ - - - com.sap.sailing.simulator - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - + + + com.sap.sailing.simulator + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + com.google.gdt.eclipse.core.webAppProjectValidator + + + + + com.google.gwt.eclipse.core.gwtProjectValidator + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + com.google.gwt.eclipse.core.gwtNature + + From c87c7003329d9b84c358228080b03784ccafd33e Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 15:59:57 +0200 Subject: [PATCH 26/29] This project should have the gwt nature (in classpath also) --- java/com.sap.sailing.simulator/.classpath | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/java/com.sap.sailing.simulator/.classpath b/java/com.sap.sailing.simulator/.classpath index 50da4ce691f..ee5f16d7e71 100644 --- a/java/com.sap.sailing.simulator/.classpath +++ b/java/com.sap.sailing.simulator/.classpath @@ -1,9 +1,10 @@ - - - - - - - - - + + + + + + + + + + From 7dc9bbfabfdcefc2f195aab992894d0478fa827f Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 16:00:23 +0200 Subject: [PATCH 27/29] Setting workers back to 3 --- .../.settings/com.google.gwt.eclipse.core.prefs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs b/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs index c412bfe3984..34c58334cd4 100755 --- a/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs +++ b/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs @@ -1,4 +1,4 @@ eclipse.preferences.version=1 entryPointModules= filesCopiedToWebInfLib=gwt-servlet.jar -gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgLiAtbG9jYWxXb3JrZXJzIDYgLXN0cmljdCAtbG9nTGV2ZWwgVFJBQ0VdXT48L2V4dHJhLWFyZ3M+PHZtLWFyZ3M+PCFbQ0RBVEFbLVhteDIwMjRtXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5BZG1pbkNvbnNvbGU8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuTGVhZGVyYm9hcmQ8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuTGVhZGVyYm9hcmRFZGl0aW5nPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlJhY2VCb2FyZDwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TcGVjdGF0b3I8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuVXNlck1hbmFnZW1lbnQ8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuVHZWaWV3PC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlZpZGVvUG9wdXA8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuWW91dHViZVBvcHVwPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlBvbGFyU2hlZXRzPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlJlZ2F0dGFPdmVydmlldzwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TaW11bGF0b3I8L2VudHJ5LXBvaW50LW1vZHVsZT48L2d3dC1jb21waWxlLXNldHRpbmdzPg\=\= +gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgLiAtbG9jYWxXb3JrZXJzIDMgLXN0cmljdCAtbG9nTGV2ZWwgVFJBQ0VdXT48L2V4dHJhLWFyZ3M+PHZtLWFyZ3M+PCFbQ0RBVEFbLVhteDIwMjRtIC1EZ3d0LnVzZWFyY2hpdmVzPWZhbHNlXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5BZG1pbkNvbnNvbGU8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuTGVhZGVyYm9hcmQ8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuTGVhZGVyYm9hcmRFZGl0aW5nPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlJhY2VCb2FyZDwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TcGVjdGF0b3I8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuVXNlck1hbmFnZW1lbnQ8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuVHZWaWV3PC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlZpZGVvUG9wdXA8L2VudHJ5LXBvaW50LW1vZHVsZT48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5zYXAuc2FpbGluZy5nd3QudWkuWW91dHViZVBvcHVwPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlBvbGFyU2hlZXRzPC9lbnRyeS1wb2ludC1tb2R1bGU+PGVudHJ5LXBvaW50LW1vZHVsZT5jb20uc2FwLnNhaWxpbmcuZ3d0LnVpLlJlZ2F0dGFPdmVydmlldzwvZW50cnktcG9pbnQtbW9kdWxlPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5TaW11bGF0b3I8L2VudHJ5LXBvaW50LW1vZHVsZT48L2d3dC1jb21waWxlLXNldHRpbmdzPg\=\= From b520e9f30cb4edeeecfbcae08d2230652c7448ab Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 16:44:54 +0200 Subject: [PATCH 28/29] Introduced a simple display of build version - eases life when handling multiple servers - build information is generated by build script --- .../adminconsole/AdminConsoleEntryPoint.java | 5 +++ .../shared/panels/SystemInformationPanel.java | 41 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/panels/SystemInformationPanel.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java index a01f0d8d18b..429558e9cbb 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java @@ -13,6 +13,7 @@ import com.sap.sailing.gwt.ui.actions.AsyncActionsExecutor; import com.sap.sailing.gwt.ui.client.AbstractEntryPoint; import com.sap.sailing.gwt.ui.client.RegattaDisplayer; import com.sap.sailing.gwt.ui.client.RegattaRefresher; +import com.sap.sailing.gwt.ui.client.shared.panels.SystemInformationPanel; import com.sap.sailing.gwt.ui.client.shared.panels.UserStatusPanel; import com.sap.sailing.gwt.ui.shared.RegattaDTO; @@ -122,6 +123,10 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt } }); fillRegattas(); + + SystemInformationPanel sysinfoPanel = new SystemInformationPanel(sailingService, this); + sysinfoPanel.ensureDebugId("SystemInformation"); + rootPanel.add(sysinfoPanel); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/panels/SystemInformationPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/panels/SystemInformationPanel.java new file mode 100644 index 00000000000..1ad20a82b81 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/panels/SystemInformationPanel.java @@ -0,0 +1,41 @@ +package com.sap.sailing.gwt.ui.client.shared.panels; + +import com.google.gwt.dom.client.Style; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.ui.client.ErrorReporter; +import com.sap.sailing.gwt.ui.client.SailingServiceAsync; + +public class SystemInformationPanel extends FlowPanel { + + private final Label buildVersionText; + + public SystemInformationPanel(final SailingServiceAsync sailingService, final ErrorReporter errorReporter) { + super(); + + buildVersionText = new Label(""); + addFloatingWidget(buildVersionText); + + sailingService.getBuildVersion(new AsyncCallback() { + + @Override + public void onSuccess(String result) { + buildVersionText.setText("Version: " + result); + } + + @Override + public void onFailure(Throwable caught) { + buildVersionText.setText("Version: " + "Unknown"); + } + }); + } + + private void addFloatingWidget(Widget w) { + w.getElement().getStyle().setFloat(Style.Float.LEFT); + w.getElement().getStyle().setPadding(3, Style.Unit.PX); + add(w); + } + +} From 782c7c1b33aefd02682462851dbae4383cdd646f Mon Sep 17 00:00:00 2001 From: Simon Pamies Date: Thu, 6 Jun 2013 16:50:25 +0200 Subject: [PATCH 29/29] Wrong separator used. --- .../java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index e1db161e98f..ca5131c7ace 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -2795,7 +2795,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S public String getBuildVersion() { String version = "Unknown or Development"; - File versionfile = new File(System.getProperty("jetty.home") + File.pathSeparator + "version.txt"); + File versionfile = new File(System.getProperty("jetty.home") + File.separator + "version.txt"); if (versionfile.exists()) { try { version = new BufferedReader(new FileReader(versionfile)).readLine();