Merge remote-tracking branch 'origin/bug1163'

This commit is contained in:
fmittag committed 2015-07-25 17:36:01 +02:00
commit fff96ae306
12 files changed
+39 -53

No files matched your search

@@ -1,8 +1,6 @@
package com.sap.sailing.domain.common; package com.sap.sailing.domain.common;
public interface LeaderboardNameConstants { public interface LeaderboardNameConstants {
static final String DEFAULT_LEADERBOARD_NAME = "Default Leaderboard";
static final String OVERALL = "Overall"; static final String OVERALL = "Overall";
static final String DEFAULT_FLEET_NAME = "Default"; static final String DEFAULT_FLEET_NAME = "Default";
@@ -44,7 +44,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, c
String competitor(); String competitor();
String competitors(); String competitors();
String competitorsSelected(int selectedCompetitorsCount, int competitorsCount); String competitorsSelected(int selectedCompetitorsCount, int competitorsCount);
String defaultLeaderboard();
String noSuchLeaderboard(); String noSuchLeaderboard();
String leaderboardConfiguration(); String leaderboardConfiguration();
String newDotDotDot(); String newDotDotDot();
@@ -32,7 +32,6 @@ carry=Accumulated
competitor=Competitor competitor=Competitor
competitors=Competitors competitors=Competitors
competitorsSelected={0}/{1} competitors selected. competitorsSelected={0}/{1} competitors selected.
defaultLeaderboard=Default Leaderboard
noSuchLeaderboard=No such leaderboard noSuchLeaderboard=No such leaderboard
leaderboardConfiguration=Leaderboard Configuration leaderboardConfiguration=Leaderboard Configuration
newDotDotDot=New... newDotDotDot=New...
@@ -32,7 +32,6 @@ carry=übertr.
competitor=Team competitor=Team
competitors=Teams competitors=Teams
competitorsSelected={0}/{1} Teams ausgewählt. competitorsSelected={0}/{1} Teams ausgewählt.
defaultLeaderboard=Alle Ergebnisse
noSuchLeaderboard=Rangliste nicht gefunden noSuchLeaderboard=Rangliste nicht gefunden
leaderboardConfiguration=Ranglisten-Konfiguration leaderboardConfiguration=Ranglisten-Konfiguration
newDotDotDot=Neu... newDotDotDot=Neu...
@@ -32,7 +32,6 @@ carry=Суммарная
competitor=Участник competitor=Участник
competitors=Участники competitors=Участники
competitorsSelected={0}/{1} Участники. competitorsSelected={0}/{1} Участники.
defaultLeaderboard=Таблица лидеров по умолчанию
noSuchLeaderboard=Такая таблица лидеров отсутствует noSuchLeaderboard=Такая таблица лидеров отсутствует
leaderboardConfiguration=Форма таблицы лидеров leaderboardConfiguration=Форма таблицы лидеров
newDotDotDot=Новый... newDotDotDot=Новый...
@@ -1051,7 +1051,6 @@ polarSheetMinimumConfidenceMeasure=Minimum confidence measure
operator=operator operator=operator
tractracUsername=TracTrac username tractracUsername=TracTrac username
webWindSourceTypeName=Manual webWindSourceTypeName=Manual
defaultLeaderboard=Default Leaderboard
raceIsLive=Race {0} is live raceIsLive=Race {0} is live
sapSailingAnalytics=航行分析 sapSailingAnalytics=航行分析
trackWind=Track Wind trackWind=Track Wind
@@ -9,7 +9,6 @@ import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONArray; import org.json.simple.JSONArray;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.server.gateway.AbstractJsonHttpServlet; import com.sap.sailing.server.gateway.AbstractJsonHttpServlet;
@@ -21,8 +20,7 @@ public class LeaderboardsJsonGetServlet extends AbstractJsonHttpServlet {
JSONArray jsonLeaderboards = new JSONArray(); JSONArray jsonLeaderboards = new JSONArray();
Map<String, Leaderboard> leaderboards = getService().getLeaderboards(); Map<String, Leaderboard> leaderboards = getService().getLeaderboards();
for (String leaderboardName : leaderboards.keySet()) { for (String leaderboardName : leaderboards.keySet()) {
if(!leaderboardName.equals(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME)) jsonLeaderboards.add(leaderboardName);
jsonLeaderboards.add(leaderboardName);
} }
setJsonResponseHeader(resp); setJsonResponseHeader(resp);
jsonLeaderboards.writeJSONString(resp.getWriter()); jsonLeaderboards.writeJSONString(resp.getWriter());
@@ -51,7 +51,6 @@ import com.sap.sailing.domain.base.Nationality;
import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.common.Distance; import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.NoWindException;
import com.sap.sailing.domain.common.Position; import com.sap.sailing.domain.common.Position;
@@ -106,9 +105,7 @@ public class LeaderboardsResource extends AbstractSailingServerResource {
JSONArray jsonLeaderboards = new JSONArray(); JSONArray jsonLeaderboards = new JSONArray();
Map<String, Leaderboard> leaderboards = getService().getLeaderboards(); Map<String, Leaderboard> leaderboards = getService().getLeaderboards();
for (String leaderboardName : leaderboards.keySet()) { for (String leaderboardName : leaderboards.keySet()) {
if (!leaderboardName.equals(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME)) { jsonLeaderboards.add(leaderboardName);
jsonLeaderboards.add(leaderboardName);
}
} }
String json = jsonLeaderboards.toJSONString(); String json = jsonLeaderboards.toJSONString();
return Response.ok(json, MediaType.APPLICATION_JSON).build(); return Response.ok(json, MediaType.APPLICATION_JSON).build();
@@ -22,11 +22,12 @@ import com.sap.sailing.domain.base.Waypoint;
import com.sap.sailing.domain.base.impl.CourseImpl; import com.sap.sailing.domain.base.impl.CourseImpl;
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl; import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
import com.sap.sailing.domain.base.impl.RegattaImpl; import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.RegattaName; import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule; import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
import com.sap.sailing.domain.leaderboard.impl.LowPoint; import com.sap.sailing.domain.leaderboard.impl.LowPoint;
import com.sap.sailing.server.RacingEventServiceOperation;
import com.sap.sailing.server.operationaltransformation.AddDefaultRegatta; import com.sap.sailing.server.operationaltransformation.AddDefaultRegatta;
import com.sap.sailing.server.operationaltransformation.AddRaceDefinition; import com.sap.sailing.server.operationaltransformation.AddRaceDefinition;
import com.sap.sailing.server.operationaltransformation.CreateFlexibleLeaderboard; import com.sap.sailing.server.operationaltransformation.CreateFlexibleLeaderboard;
@@ -34,6 +35,8 @@ import com.sap.sailing.server.operationaltransformation.RemoveLeaderboard;
import com.sap.sse.common.Util; import com.sap.sse.common.Util;
public class ServerReplicationTest extends AbstractServerReplicationTest { public class ServerReplicationTest extends AbstractServerReplicationTest {
private static final String LEADERBOARDNAME = "TESTLEADERBOARD";
@Test @Test
public void testBasicInitialLoad() throws Exception { public void testBasicInitialLoad() throws Exception {
assertNotSame(master, replica); assertNotSame(master, replica);
@@ -63,15 +66,18 @@ public class ServerReplicationTest extends AbstractServerReplicationTest {
@Test @Test
public void testLeaderboardRemovalReplication() throws InterruptedException { public void testLeaderboardRemovalReplication() throws InterruptedException {
final String leaderboardName = LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME; RacingEventServiceOperation<FlexibleLeaderboard> addLeaderboardOp = new CreateFlexibleLeaderboard(LEADERBOARDNAME,null, new int[] { 5 },
assertNotNull(replica.getLeaderboardByName(leaderboardName)); new LowPoint(), null);
assertNotNull(master.getLeaderboardByName(leaderboardName)); master.apply(addLeaderboardOp);
RemoveLeaderboard removeDefaultLeaderboard = new RemoveLeaderboard(leaderboardName); Thread.sleep(1000); // wait 1s for JMS to deliver the message and the message to be applied
assertNotNull(replica.getLeaderboardByName(LEADERBOARDNAME));
assertNotNull(master.getLeaderboardByName(LEADERBOARDNAME));
RemoveLeaderboard removeDefaultLeaderboard = new RemoveLeaderboard(LEADERBOARDNAME);
master.apply(removeDefaultLeaderboard); master.apply(removeDefaultLeaderboard);
final Leaderboard masterLeaderboard = master.getLeaderboardByName(leaderboardName); final Leaderboard masterLeaderboard = master.getLeaderboardByName(LEADERBOARDNAME);
assertNull(masterLeaderboard); assertNull(masterLeaderboard);
Thread.sleep(1000); // wait 1s for JMS to deliver the message and the message to be applied Thread.sleep(1000); // wait 1s for JMS to deliver the message and the message to be applied
final Leaderboard replicaLeaderboard = replica.getLeaderboardByName(leaderboardName); final Leaderboard replicaLeaderboard = replica.getLeaderboardByName(LEADERBOARDNAME);
assertNull(replicaLeaderboard); assertNull(replicaLeaderboard);
} }
@@ -20,7 +20,6 @@ import org.junit.Test;
import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaNameAndRaceName; import com.sap.sailing.domain.common.RegattaNameAndRaceName;
import com.sap.sailing.domain.common.WindSourceType; import com.sap.sailing.domain.common.WindSourceType;
@@ -114,6 +113,13 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest {
@Test @Test
public void testStartTrackingRaceReplication() throws Exception { public void testStartTrackingRaceReplication() throws Exception {
final String leaderboardName = "Test Leaderboard";
Leaderboard masterLeaderboard = master.apply(new CreateFlexibleLeaderboard(leaderboardName, null, new int[0], new LowPoint(), null));
final String columnName = "R1";
master.apply(new AddColumnToLeaderboard(columnName, leaderboardName, /* medalRace */ false));
final Fleet defaultFleet = masterLeaderboard.getFleet(null);
master.apply(new ConnectTrackedRaceToLeaderboardColumn(leaderboardName, columnName, defaultFleet.getName(),
new RegattaNameAndRaceName("Academy Tracking 2011 (STG)", "weym470may122011")));
startTracking(); startTracking();
Thread.sleep(1000); Thread.sleep(1000);
TrackedRace replicaTrackedRace = replica.getTrackedRace(raceIdentifier); TrackedRace replicaTrackedRace = replica.getTrackedRace(raceIdentifier);
@@ -121,10 +127,10 @@ public class TrackRaceReplicationTest extends AbstractServerReplicationTest {
assertNotSame(masterTrackedRace, replicaTrackedRace); assertNotSame(masterTrackedRace, replicaTrackedRace);
assertNotSame(masterTrackedRace.getRace(), replicaTrackedRace.getRace()); assertNotSame(masterTrackedRace.getRace(), replicaTrackedRace.getRace());
assertEquals(Util.size(masterTrackedRace.getRace().getCompetitors()), Util.size(replicaTrackedRace.getRace().getCompetitors())); assertEquals(Util.size(masterTrackedRace.getRace().getCompetitors()), Util.size(replicaTrackedRace.getRace().getCompetitors()));
Leaderboard replicaDefaultLeaderboard = replica.getLeaderboardByName(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME); Leaderboard replicaLeaderboard = replica.getLeaderboardByName(leaderboardName);
RaceColumn column = replicaDefaultLeaderboard.getRaceColumnByName(replicaTrackedRace.getRace().getName()); RaceColumn column = replicaLeaderboard.getRaceColumnByName(columnName);
assertNotNull(column); assertNotNull(column);
assertSame(replicaTrackedRace, column.getTrackedRace(replicaDefaultLeaderboard.getFleet(null))); assertSame(replicaTrackedRace, column.getTrackedRace(replicaLeaderboard.getFleet(null)));
} }
@Test @Test
@@ -10,7 +10,6 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceColumn;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
import com.sap.sailing.domain.leaderboard.Leaderboard; import com.sap.sailing.domain.leaderboard.Leaderboard;
import com.sap.sailing.domain.leaderboard.impl.LowPoint; import com.sap.sailing.domain.leaderboard.impl.LowPoint;
@@ -57,18 +56,21 @@ public class OperationalTransformationTest {
server.waitForNotRunning(); server.waitForNotRunning();
replica.waitForNotRunning(); replica.waitForNotRunning();
Map<String, Leaderboard> replicaLeaderboards = racingEventServiceReplica.getLeaderboards(); Map<String, Leaderboard> replicaLeaderboards = racingEventServiceReplica.getLeaderboards();
assertEquals(2, replicaLeaderboards.size()); // expected to include the default leaderboard assertEquals(1, replicaLeaderboards.size());
assertEquals(new HashSet<String>(Arrays.asList(new String[] { LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME, LEADERBOARDNAME })), assertEquals(new HashSet<String>(Arrays.asList(new String[] { LEADERBOARDNAME })),
replicaLeaderboards.keySet()); replicaLeaderboards.keySet());
assertEquals(racingEventServiceServer.getLeaderboards().keySet(), replicaLeaderboards.keySet()); assertEquals(racingEventServiceServer.getLeaderboards().keySet(), replicaLeaderboards.keySet());
} }
@Test @Test
public void testAddColumnToLeaderboardOnServerAndRemoveLeaderboardOnClient() throws InterruptedException { public void testAddColumnToLeaderboardOnServerAndRemoveLeaderboardOnClient() throws InterruptedException {
RacingEventServiceOperation<FlexibleLeaderboard> addLeaderboardOp = new CreateFlexibleLeaderboard(LEADERBOARDNAME,null, new int[] { 5 },
new LowPoint(), null);
server.apply(addLeaderboardOp);
RacingEventServiceOperation<RaceColumn> addLeaderboardColumn = new AddColumnToLeaderboard( RacingEventServiceOperation<RaceColumn> addLeaderboardColumn = new AddColumnToLeaderboard(
"newColumn", LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME, /* medalRace */ true); "newColumn", LEADERBOARDNAME, /* medalRace */ true);
server.apply(addLeaderboardColumn); server.apply(addLeaderboardColumn);
RacingEventServiceOperation<Void> removeDefaultLeaderboard = new RemoveLeaderboard(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME); RacingEventServiceOperation<Void> removeDefaultLeaderboard = new RemoveLeaderboard(LEADERBOARDNAME);
replica.apply(removeDefaultLeaderboard); replica.apply(removeDefaultLeaderboard);
replica.waitForNotRunning(); replica.waitForNotRunning();
server.waitForNotRunning(); server.waitForNotRunning();
@@ -78,17 +80,20 @@ public class OperationalTransformationTest {
@Test @Test
public void testAddOneColumnOnEachSideThenMoveOneUpOnServerAndRemoveLeaderboardOnClient() throws InterruptedException { public void testAddOneColumnOnEachSideThenMoveOneUpOnServerAndRemoveLeaderboardOnClient() throws InterruptedException {
RacingEventServiceOperation<FlexibleLeaderboard> addLeaderboardOp = new CreateFlexibleLeaderboard(LEADERBOARDNAME,null, new int[] { 5 },
new LowPoint(), null);
server.apply(addLeaderboardOp);
RacingEventServiceOperation<RaceColumn> addLeaderboardColumnOnServer = new AddColumnToLeaderboard( RacingEventServiceOperation<RaceColumn> addLeaderboardColumnOnServer = new AddColumnToLeaderboard(
"newColumn1", LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME, /* medalRace */ true); "newColumn1", LEADERBOARDNAME, /* medalRace */ true);
server.apply(addLeaderboardColumnOnServer); server.apply(addLeaderboardColumnOnServer);
RacingEventServiceOperation<RaceColumn> addLeaderboardColumnOnReplica = new AddColumnToLeaderboard( RacingEventServiceOperation<RaceColumn> addLeaderboardColumnOnReplica = new AddColumnToLeaderboard(
"newColumn2", LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME, /* medalRace */ true); "newColumn2", LEADERBOARDNAME, /* medalRace */ true);
replica.apply(addLeaderboardColumnOnReplica); replica.apply(addLeaderboardColumnOnReplica);
replica.waitForNotRunning(); replica.waitForNotRunning();
server.waitForNotRunning(); server.waitForNotRunning();
RacingEventServiceOperation<Void> moveUpNewColumn2 = new MoveLeaderboardColumnUp(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME, "newColumn2"); RacingEventServiceOperation<Void> moveUpNewColumn2 = new MoveLeaderboardColumnUp(LEADERBOARDNAME, "newColumn2");
server.apply(moveUpNewColumn2); server.apply(moveUpNewColumn2);
RacingEventServiceOperation<Void> removeDefaultLeaderboard = new RemoveLeaderboard(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME); RacingEventServiceOperation<Void> removeDefaultLeaderboard = new RemoveLeaderboard(LEADERBOARDNAME);
replica.apply(removeDefaultLeaderboard); replica.apply(removeDefaultLeaderboard);
replica.waitForNotRunning(); replica.waitForNotRunning();
server.waitForNotRunning(); server.waitForNotRunning();
@@ -91,7 +91,6 @@ import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.base.impl.RemoteSailingServerReferenceImpl; import com.sap.sailing.domain.base.impl.RemoteSailingServerReferenceImpl;
import com.sap.sailing.domain.common.DataImportProgress; import com.sap.sailing.domain.common.DataImportProgress;
import com.sap.sailing.domain.common.Distance; import com.sap.sailing.domain.common.Distance;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.Position; import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.RegattaIdentifier; import com.sap.sailing.domain.common.RegattaIdentifier;
@@ -594,11 +593,6 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
this.configurationMap = new DeviceConfigurationMapImpl(); this.configurationMap = new DeviceConfigurationMapImpl();
this.serviceFinderFactory = serviceFinderFactory; this.serviceFinderFactory = serviceFinderFactory;
// Add one default leaderboard that aggregates all races currently tracked by this service.
// This is more for debugging purposes than for anything else.
addFlexibleLeaderboard(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME, null, new int[] { 5, 8 },
getBaseDomainFactory().createScoringScheme(ScoringSchemeType.LOW_POINT), null);
final Iterable<Pair<Event, Boolean>> loadedEventsWithRequireStoreFlag = loadStoredEvents(); final Iterable<Pair<Event, Boolean>> loadedEventsWithRequireStoreFlag = loadStoredEvents();
loadStoredRegattas(); loadStoredRegattas();
loadRaceIDToRegattaAssociations(); loadRaceIDToRegattaAssociations();
@@ -659,10 +653,6 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
} }
// TODO clear user store? See bug 2430. // TODO clear user store? See bug 2430.
this.competitorStore.clear(); this.competitorStore.clear();
// Add one default leaderboard that aggregates all races currently tracked by this service.
// This is more for debugging purposes than for anything else.
addFlexibleLeaderboard(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME, null, new int[] { 5, 8 },
getBaseDomainFactory().createScoringScheme(ScoringSchemeType.LOW_POINT), null);
} }
@Override @Override
@@ -1597,12 +1587,6 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
trackedRace.getMillisecondsOverWhichToAverageSpeed()); trackedRace.getMillisecondsOverWhichToAverageSpeed());
replicate(op); replicate(op);
linkRaceToConfiguredLeaderboardColumns(trackedRace); linkRaceToConfiguredLeaderboardColumns(trackedRace);
final FlexibleLeaderboard defaultLeaderboard = (FlexibleLeaderboard) leaderboardsByName
.get(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME);
if (defaultLeaderboard != null) {
String columnName = trackedRace.getRace().getName();
defaultLeaderboard.addRace(trackedRace, columnName, /* medalRace */false);
}
TrackedRaceReplicator trackedRaceReplicator = new TrackedRaceReplicator(trackedRace); TrackedRaceReplicator trackedRaceReplicator = new TrackedRaceReplicator(trackedRace);
trackedRaceReplicators.put(trackedRace, trackedRaceReplicator); trackedRaceReplicators.put(trackedRace, trackedRaceReplicator);
trackedRace.addListener(trackedRaceReplicator, /* fire wind already loaded */true, true); trackedRace.addListener(trackedRaceReplicator, /* fire wind already loaded */true, true);
@@ -1826,9 +1810,6 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
} }
for (RaceDefinition race : regatta.getAllRaces()) { for (RaceDefinition race : regatta.getAllRaces()) {
stopTrackingWind(regatta, race); stopTrackingWind(regatta, race);
// remove from default leaderboard
FlexibleLeaderboard defaultLeaderboard = (FlexibleLeaderboard) getLeaderboardByName(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME);
defaultLeaderboard.removeRaceColumn(race.getName());
} }
} }
} }