diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java index b97e852c1de..d785f892413 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/DomainObjectFactoryImpl.java @@ -486,44 +486,31 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { result = new FlexibleLeaderboardImpl(raceLogStore, (String) dbLeaderboard.get(FieldNames.LEADERBOARD_NAME .name()), resultDiscardingRule, scoringScheme, courseArea); - // For a FlexibleLeaderboard, fleets are owned by the leaderboard's RaceColumn objects. We need to manage - // them here: - Map fleetsByName = new HashMap(); + // For a FlexibleLeaderboard, there should be only the default fleet for any race column for (Object dbRaceColumnAsObject : dbRaceColumns) { BasicDBObject dbRaceColumn = (BasicDBObject) dbRaceColumnAsObject; + String columnName = (String) dbRaceColumn.get(FieldNames.LEADERBOARD_COLUMN_NAME.name()); + + RaceColumn raceColumn = result.addRaceColumn(columnName, + (Boolean) dbRaceColumn.get(FieldNames.LEADERBOARD_IS_MEDAL_RACE_COLUMN.name())); + Map raceIdentifiers = loadRaceIdentifiers(dbRaceColumn); - RaceIdentifier defaultFleetRaceIdentifier = raceIdentifiers.get(null); + RaceIdentifier defaultFleetRaceIdentifier = raceIdentifiers.get(result.getFleet(null).getName()); + if (defaultFleetRaceIdentifier == null) { + // Backward compatibility + defaultFleetRaceIdentifier = raceIdentifiers.get(null); + } if (defaultFleetRaceIdentifier != null) { Fleet defaultFleet = result.getFleet(null); if (defaultFleet != null) { - raceIdentifiers.put(defaultFleet.getName(), defaultFleetRaceIdentifier); + + raceColumn.setRaceIdentifier(defaultFleet, defaultFleetRaceIdentifier); } else { // leaderboard has no default fleet; don't know what to do with default RaceIdentifier logger.warning("Discarding RaceIdentifier " + defaultFleetRaceIdentifier + " for default fleet for leaderboard " + result.getName() + " because no default fleet was found in leaderboard"); } - raceIdentifiers.remove(null); - } - List fleets = new ArrayList(); - for (String fleetName : raceIdentifiers.keySet()) { - Fleet fleet = fleetsByName.get(fleetName); - if (fleet == null) { - fleet = new FleetImpl(fleetName); - fleetsByName.put(fleetName, fleet); - } - fleets.add(fleet); - } - if (fleets.isEmpty()) { - fleets.add(result.getFleet(null)); - } - String columnName = (String) dbRaceColumn.get(FieldNames.LEADERBOARD_COLUMN_NAME.name()); - - RaceColumn raceColumn = result.addRaceColumn(columnName, - (Boolean) dbRaceColumn.get(FieldNames.LEADERBOARD_IS_MEDAL_RACE_COLUMN.name()), - fleets.toArray(new Fleet[0])); - for (Map.Entry e : raceIdentifiers.entrySet()) { - raceColumn.setRaceIdentifier(fleetsByName.get(e.getKey()), e.getValue()); } } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardForKielWeekTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardForKielWeekTest.java index a4bdebf753f..782638935fa 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardForKielWeekTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardForKielWeekTest.java @@ -14,7 +14,6 @@ import java.util.logging.Logger; import org.junit.Test; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.WindSourceType; @@ -27,8 +26,8 @@ import com.sap.sailing.domain.leaderboard.impl.LowPoint; import com.sap.sailing.domain.leaderboard.impl.ThresholdBasedResultDiscardingRuleImpl; import com.sap.sailing.domain.tracking.impl.WindImpl; import com.sap.sailing.domain.tractracadapter.ReceiverType; -import com.tractrac.model.lib.api.event.CreateModelException; import com.sap.sse.common.Util; +import com.tractrac.model.lib.api.event.CreateModelException; import com.tractrac.subscription.lib.api.SubscriberInitializationException; public class LeaderboardForKielWeekTest extends OnlineTracTracBasedTest { @@ -44,24 +43,23 @@ public class LeaderboardForKielWeekTest extends OnlineTracTracBasedTest { public void leaderboardWithOneRaceTest() throws URISyntaxException, NoWindException, IOException, InterruptedException, SubscriberInitializationException, CreateModelException { leaderboard = new FlexibleLeaderboardImpl("Kiel Week 2011 505s", new ThresholdBasedResultDiscardingRuleImpl(new int[] { 3, 6 }), new LowPoint(), null); - Fleet defaultFleet = leaderboard.getFleet(null); MillisecondsTimePoint now = MillisecondsTimePoint.now(); loadRace("event_20110609_KielerWoch-505_Race_2.txt", "event_20110609_KielerWoch-505_Race_2.mtb"); // 505 Race 2 Competitor kevin = getCompetitorByName("Kevin"); - RaceColumn column = leaderboard.addRace(getTrackedRace(), "Test Race 1", /* medalRace */ false, defaultFleet); + RaceColumn column = leaderboard.addRace(getTrackedRace(), "Test Race 1", /* medalRace */false); assertEquals(17, leaderboard.getTotalPoints(kevin, now), 0.000000001); Util.Pair key = new Util.Pair(kevin, column); assertEquals(17, leaderboard.getContent(now).get(key).getTotalPoints(), 0.000000001); assertEquals(17, leaderboard.getEntry(kevin, column, now).getTotalPoints(), 0.000000001); loadRace("event_20110609_KielerWoch-505_Race_3.txt", "event_20110609_KielerWoch-505_Race_3.mtb"); // 505 Race 3 - column = leaderboard.addRace(getTrackedRace(), "Test Race 2", /* medalRace */ false, defaultFleet); + column = leaderboard.addRace(getTrackedRace(), "Test Race 2", /* medalRace */false); key = new Util.Pair(kevin, column); // In Race 3, Hasso ranked 31st assertEquals(29, leaderboard.getTotalPoints(kevin, now), 0.000000001); assertEquals(12, leaderboard.getContent(now).get(key).getTotalPoints(), 0.000000001); assertEquals(12, leaderboard.getEntry(kevin, column, now).getTotalPoints(), 0.000000001); loadRace("event_20110609_KielerWoch-505_race_4.txt", "event_20110609_KielerWoch-505_race_4.mtb"); // 505 Race 4 - column = leaderboard.addRace(getTrackedRace(), "Test Race 3", /* medalRace */ false, defaultFleet); + column = leaderboard.addRace(getTrackedRace(), "Test Race 3", /* medalRace */false); key = new Util.Pair(kevin, column); // now the first race is discarded because Kevin ranked worst compared to the other two; in race 4 he ranked 10th assertEquals(22, leaderboard.getTotalPoints(kevin, now), 0.000000001); 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 84e424534af..42678bb910f 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 @@ -102,12 +102,11 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest { public void ensureMedalRaceParamIsIgnoredIfRaceColumnAlreadyExists() { FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl("Test Leaderboard", new ThresholdBasedResultDiscardingRuleImpl( 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); + leaderboard.addRace(testRaces.iterator().next(), columnName, /* medalRace */false); assertTrue(leaderboard.getRaceColumnByName(columnName).isMedalRace()); } @@ -119,7 +118,7 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest { final String columnName = "abc"; setupRaces(1, 0); leaderboard.addRaceColumn(columnName, /* medalRace */ true); - leaderboard.addRace(testRaces.iterator().next(), columnName, /* medalRace */ false, defaultFleet); + leaderboard.addRace(testRaces.iterator().next(), columnName, /* medalRace */false); final Set emptySet = Collections.emptySet(); final MillisecondsTimePoint now = MillisecondsTimePoint.now(); final TrackedRegattaRegistry trackedRegattaRegistry = new TrackedRegattaRegistry() { @@ -180,7 +179,7 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest { RaceColumn bestScoringRaceColumn = null; for (TrackedRace race : testRaces) { i++; - RaceColumn raceColumn = leaderboard.addRace(race, "Test Race " + i, /* medalRace */ false, defaultFleet); + RaceColumn raceColumn = leaderboard.addRace(race, "Test Race " + i, /* medalRace */false); raceColumnsInLeaderboard.put(race, raceColumn); if (race.getRank(competitor) < bestScore) { bestScore = race.getRank(competitor); @@ -207,8 +206,7 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest { testRace.addCompetitor(c3); // this makes maxPoints==4 FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl("Test Leaderboard", new ThresholdBasedResultDiscardingRuleImpl( new int[] { 2 }), new LowPoint(), null); - Fleet defaultFleet = leaderboard.getFleet(null); - leaderboard.addRace(testRace, "R1", /* medalRace */ false, defaultFleet); + leaderboard.addRace(testRace, "R1", /* medalRace */false); assertEquals(1., leaderboard.getTotalPoints(competitor, now), 0.00000001); assertEquals(1., leaderboard.getTotalPoints(c2, now), 0.00000001); assertEquals(1., leaderboard.getTotalPoints(c3, now), 0.00000001); @@ -235,10 +233,9 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest { testRace.addCompetitor(c3); // this makes maxPoints==4 FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl("Test Leaderboard", new ThresholdBasedResultDiscardingRuleImpl( new int[] { 2 }), new LowPoint(), null); - Fleet defaultFleet = leaderboard.getFleet(null); - RaceColumn r1 = leaderboard.addRace(testRace, "R1", /* medalRace */ false, defaultFleet); + RaceColumn r1 = leaderboard.addRace(testRace, "R1", /* medalRace */false); raceColumnsInLeaderboard.put(testRace, r1); - RaceColumn r2 = leaderboard.addRaceColumn("R2", /* medalRace */ false, defaultFleet); + RaceColumn r2 = leaderboard.addRaceColumn("R2", /* medalRace */false); leaderboard.getScoreCorrection().setMaxPointsReason(competitor, r2, MaxPointsReason.DND); // non-discardable disqualification // assert that max points were given before discarding... assertEquals(4.0, leaderboard.getEntry(competitor, r2, MillisecondsTimePoint.now()).getNetPoints(), 0.000000001); @@ -268,7 +265,7 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest { RaceColumn bestScoringRaceColumn = null; for (TrackedRace race : testRaces) { i++; - RaceColumn raceColumn = leaderboard.addRace(race, "Test Race " + i, /* medalRace */ false, defaultFleet); + RaceColumn raceColumn = leaderboard.addRace(race, "Test Race " + i, /* medalRace */false); raceColumnsInLeaderboard.put(race, raceColumn); if (race.getRank(competitor) < bestScore) { bestScore = race.getRank(competitor); @@ -294,8 +291,7 @@ public class LeaderboardOfflineTest extends AbstractLeaderboardTest { for (TrackedRace race : testRaces) { i++; raceColumnsInLeaderboard.put(race, leaderboard.addRace(race, "Test Race "+i, - /* medalRace */ numberOfUntrackedRaces == 0 && addOneMedalRace && i == testRaces.size(), - defaultFleet)); + /* medalRace */numberOfUntrackedRaces == 0 && addOneMedalRace && i == testRaces.size())); } // add a few race columns not yet connected to a tracked race for (int j=0; j rankedCompetitorsInLeaderboard = leaderboard2.getCompetitorsFromBestToWorst(later); @@ -1005,9 +1006,8 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest { public TimePoint getEndOfRace() { return endOfR1; } - }, "R1", /* medalRace */ false, - leaderboard1.getFleet(null)); - RaceColumn r2 = leaderboard1.addRaceColumn("R2", /* medalRace */ false, new Fleet[] { new FleetImpl("Default Fleet") }); + }, "R1", /* medalRace */false); + RaceColumn r2 = leaderboard1.addRaceColumn("R2", /* medalRace */false); leaderboard1.getScoreCorrection().correctScore(c[0], r2, 123.); assertEquals(2. + 123., leaderboard1.getTotalPoints(c[0], afterEndOfR1), 0.00000001); // correction expected to apply after end of last tracked race before the corrected column assertEquals(2. + 0., leaderboard1.getTotalPoints(c[0], withinR1), 0.00000001); // correction expected NOT to apply before end of last tracked race before the corrected column @@ -1033,15 +1033,13 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest { public TimePoint getEndOfRace() { return endOfR1; } - }, "R1", /* medalRace */ false, - leaderboard1.getFleet(null)); + }, "R1", /* medalRace */false); RaceColumn r2 = leaderboard1.addRace(new MockedTrackedRaceWithStartTimeAndRanks(afterEndOfR1, Arrays.asList(c2)) { private static final long serialVersionUID = 8705622361027154428L; public TimePoint getEndOfRace() { return afterEndOfR1; } - }, "R2", /* medalRace */ false, - leaderboard1.getFleet(null)); + }, "R2", /* medalRace */false); leaderboard1.getScoreCorrection().correctScore(c1[0], r2, .9); assertEquals(1. + .9, leaderboard1.getTotalPoints(c1[0], afterEndOfR1), 0.00000001); assertEquals(1, leaderboard1.getTotalRankOfCompetitor(c1[0], afterEndOfR1)); @@ -1081,8 +1079,8 @@ public class LeaderboardScoringAndRankingTest extends AbstractLeaderboardTest { }; trackedRace.getRace().getCourse().addWaypoint(0, start); trackedRace.getRace().getCourse().addWaypoint(1, finish); - RaceColumn r1 = leaderboard1.addRace(trackedRace, "R1", /* medalRace */ false, leaderboard1.getFleet(null)); - RaceColumn r2 = leaderboard1.addRaceColumn("R2", /* medalRace */ false, new Fleet[] { new FleetImpl("Default Fleet") }); + RaceColumn r1 = leaderboard1.addRace(trackedRace, "R1", /* medalRace */false); + RaceColumn r2 = leaderboard1.addRaceColumn("R2", /* medalRace */false); leaderboard1.getScoreCorrection().correctScore(c[0], r2, 123.); assertEquals(2. + 123., leaderboard1.getTotalPoints(c[0], afterEndOfR1), 0.00000001); // correction expected to apply after end of last tracked race before the corrected column assertEquals(2. + 0., leaderboard1.getTotalPoints(c[0], withinR1), 0.00000001); // correction expected NOT to apply before end of last tracked race before the corrected column diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/RaceLogAttachOnTrackedRaceTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/RaceLogAttachOnTrackedRaceTest.java index 07de1bddc6e..0a1b637c61d 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/RaceLogAttachOnTrackedRaceTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/RaceLogAttachOnTrackedRaceTest.java @@ -1,6 +1,5 @@ package com.sap.sailing.domain.test; -import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; @@ -11,7 +10,6 @@ import org.junit.Test; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.RaceColumn; -import com.sap.sailing.domain.base.impl.FleetImpl; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.impl.FlexibleLeaderboardImpl; import com.sap.sailing.domain.leaderboard.impl.LowPoint; @@ -76,18 +74,15 @@ public class RaceLogAttachOnTrackedRaceTest { } @Test - public void testAttachSpecificFleets() { - Fleet[] fleets = new Fleet[] { new FleetImpl("A"), new FleetImpl("B") }; - Fleet aFleet = fleets[0]; - Fleet bFleet = fleets[1]; - RaceColumn column = leaderboard.addRaceColumn("R1", false, fleets); + public void testAttachToDefaultFleet() { + RaceColumn column = leaderboard.addRaceColumn("R1", false); TrackedRace trackedRace = new MyMockedTrackedRace(); - column.setTrackedRace(aFleet, trackedRace); + Fleet defaultFleet = leaderboard.getFleet(null); + column.setTrackedRace(defaultFleet, trackedRace); - assertSame(column.getRaceLog(aFleet), trackedRace.getRaceLog(column.getRaceLogIdentifier(aFleet))); - assertNotSame(column.getRaceLog(bFleet), trackedRace.getRaceLog(column.getRaceIdentifier(bFleet))); + assertSame(column.getRaceLog(defaultFleet), trackedRace.getRaceLog(column.getRaceLogIdentifier(defaultFleet))); } @Test diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/FlexibleLeaderboard.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/FlexibleLeaderboard.java index 1e07f78ad26..041df9131e0 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/FlexibleLeaderboard.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/FlexibleLeaderboard.java @@ -35,35 +35,32 @@ public interface FlexibleLeaderboard extends Leaderboard, Renamable { void moveRaceColumnDown(String name); /** - * Adds a new {@link RaceColumn} that has no {@link TrackedRace} associated yet to this leaderboard. + * Adds a new {@link RaceColumn} that has no {@link TrackedRace} associated yet to this leaderboard. The default + * fleet will be used. * * @param name - * the name for the new race column such that none of the columns in {@link #getRaceColumns()} - * has that name yet; otherwise, an message will be logged, no race column will be added and - * the existing column will be returned for robustness reasons + * the name for the new race column such that none of the columns in {@link #getRaceColumns()} has that + * name yet; otherwise, an message will be logged, no race column will be added and the existing column + * will be returned for robustness reasons * @param medalRace * tells if the column to add represents a medal race which has double score and cannot be discarded - * @param fleets - * the fleets to add to the {@link RaceColumn} created. If no fleets are specified, a single default - * fleet will be assigned to the race column created. * @return the race column in the leaderboard used to represent the tracked race */ - RaceColumn addRaceColumn(String name, boolean medalRace, Fleet... fleets); + RaceColumn addRaceColumn(String name, boolean medalRace); /** * Adds a tracked race to this leaderboard. If a {@link RaceColumn} with name columnName already exists * in this leaderboard, race is {@link RaceColumn#setTrackedRace(Fleet, TrackedRace) set as its tracked * race} and medalRace is ignored. Otherwise, a new {@link RaceColumn} column, with race - * as its tracked race, is created and added to this leaderboard. + * as its tracked race, is created and added to this leaderboard. The default fleet will be used. + * * @param medalRace * tells if the column to add represents a medal race which has double score and cannot be discarded; * ignored if the column named columnName already exists - * @param fleet - * the fleet to link the race to when the {@link RaceColumn} is created. * * @return the race column in the leaderboard used to represent the tracked race */ - RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace, Fleet fleet); + RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace); void removeRaceColumn(String columnName); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DefaultFleetImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DefaultFleetImpl.java new file mode 100644 index 00000000000..34635a370c2 --- /dev/null +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DefaultFleetImpl.java @@ -0,0 +1,21 @@ +package com.sap.sailing.domain.leaderboard.impl; + +import com.sap.sailing.domain.base.IsManagedBySharedDomainFactory; +import com.sap.sailing.domain.base.SharedDomainFactory; +import com.sap.sailing.domain.base.impl.FleetImpl; +import com.sap.sailing.domain.common.LeaderboardNameConstants; + +public class DefaultFleetImpl extends FleetImpl implements IsManagedBySharedDomainFactory { + + private static final long serialVersionUID = 6233489616955255401L; + + public DefaultFleetImpl() { + super(LeaderboardNameConstants.DEFAULT_FLEET_NAME); + } + + @Override + public IsManagedBySharedDomainFactory resolve(SharedDomainFactory domainFactory) { + return FlexibleLeaderboardImpl.defaultFleet; + } + +} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/FlexibleLeaderboardImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/FlexibleLeaderboardImpl.java index 120933181e4..df57ffb89d7 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/FlexibleLeaderboardImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/FlexibleLeaderboardImpl.java @@ -13,8 +13,6 @@ import com.sap.sailing.domain.base.CourseArea; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceColumnListener; -import com.sap.sailing.domain.base.impl.FleetImpl; -import com.sap.sailing.domain.common.LeaderboardNameConstants; import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard; import com.sap.sailing.domain.leaderboard.FlexibleRaceColumn; import com.sap.sailing.domain.leaderboard.ScoringScheme; @@ -39,7 +37,7 @@ import com.sap.sailing.domain.tracking.TrackedRace; public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements FlexibleLeaderboard { private static Logger logger = Logger.getLogger(FlexibleLeaderboardImpl.class.getName()); - protected static final Fleet defaultFleet = new FleetImpl(LeaderboardNameConstants.DEFAULT_FLEET_NAME); + protected static final DefaultFleetImpl defaultFleet = new DefaultFleetImpl(); private static final long serialVersionUID = -5708971849158747846L; private final List races; private final ScoringScheme scoringScheme; @@ -96,24 +94,25 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements } @Override - public RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace, Fleet fleet) { - FlexibleRaceColumn column = addRaceColumn(columnName, medalRace, /* logAlreadyExistingColumn */ false, fleet); - column.setTrackedRace(fleet, race); // triggers listeners because this object was registered above as race column listener on the column + public RaceColumn addRace(TrackedRace race, String columnName, boolean medalRace) { + FlexibleRaceColumn column = addRaceColumn(columnName, medalRace, /* logAlreadyExistingColumn */false); + column.setTrackedRace(defaultFleet, race); // triggers listeners because this object was registered above as + // race column listener on the column return column; } @Override - public FlexibleRaceColumn addRaceColumn(String name, boolean medalRace, Fleet... fleets) { - return addRaceColumn(name, medalRace, /* logAlreadyExistingColumn */ true, fleets); + public FlexibleRaceColumn addRaceColumn(String name, boolean medalRace) { + return addRaceColumn(name, medalRace, /* logAlreadyExistingColumn */true); } - private FlexibleRaceColumn addRaceColumn(String name, boolean medalRace, boolean logAlreadyExistingColumn, Fleet... fleets) { + private FlexibleRaceColumn addRaceColumn(String name, boolean medalRace, boolean logAlreadyExistingColumn) { FlexibleRaceColumn column = getRaceColumnByName(name); if (column != null) { final String msg = "Trying to create race column with duplicate name "+name+" in leaderboard +"+getName(); logger.severe(msg); } else { - column = createRaceColumn(name, medalRace, fleets); + column = createRaceColumn(name, medalRace); column.addRaceColumnListener(this); races.add(column); column.setRaceLogInformation( @@ -159,17 +158,15 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements return Collections.unmodifiableCollection(new ArrayList(races)); } - protected RaceColumnImpl createRaceColumn(String column, boolean medalRace, Fleet... fleets) { - return new RaceColumnImpl( - column, - medalRace, - turnNullOrEmptyFleetsIntoDefaultFleet(fleets)); + protected RaceColumnImpl createRaceColumn(String column, boolean medalRace) { + return new RaceColumnImpl(column, medalRace); } protected Iterable turnNullOrEmptyFleetsIntoDefaultFleet(Fleet... fleets) { Iterable theFleets; if (fleets == null || fleets.length == 0) { - theFleets = Collections.singleton(defaultFleet); + Fleet defaultfleetCasted = defaultFleet; + theFleets = Collections.singleton(defaultfleetCasted); } else { theFleets = Arrays.asList(fleets); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/RaceColumnImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/RaceColumnImpl.java index 2b8eb35c6ea..0182667e6ce 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/RaceColumnImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/RaceColumnImpl.java @@ -1,8 +1,6 @@ package com.sap.sailing.domain.leaderboard.impl; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.impl.AbstractRaceColumn; @@ -12,23 +10,12 @@ public class RaceColumnImpl extends AbstractRaceColumn implements FlexibleRaceCo private static final long serialVersionUID = -7801617988982540470L; private String name; - /** - * All fleets for which this column can contain a race. This is the maximum set of keys possible for - * {@link #trackedRaces} and {@link #raceIdentifiers}. - */ - private final Iterable fleets; private boolean medalRace; - public RaceColumnImpl(String name, boolean medalRace, Iterable fleets) { + public RaceColumnImpl(String name, boolean medalRace) { super(); this.name = name; this.medalRace = medalRace; - List myFleets = new ArrayList(); - for (Fleet fleet : fleets) { - myFleets.add(fleet); - } - Collections.sort(myFleets); - this.fleets = myFleets; } @Override @@ -53,8 +40,8 @@ public class RaceColumnImpl extends AbstractRaceColumn implements FlexibleRaceCo } @Override - public Iterable getFleets() { - return fleets; + public Iterable getFleets() { + return Collections.singleton(FlexibleLeaderboardImpl.defaultFleet); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java index e92e582d929..53d16cdb0c1 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java @@ -451,7 +451,7 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe final com.sap.sse.common.Util.Triple, Map, Map> fromAndToAndOverlap = fixesAndTails.computeFromAndTo(newTime, competitorsToShow, settings.getEffectiveTailLengthInMilliseconds()); int requestID = ++boatPositionRequestIDCounter; - // TODO bug2026: For those competitors for which the tails don't overlap (and therefore will be replaced by the new tail coming from the server) + // For those competitors for which the tails don't overlap (and therefore will be replaced by the new tail coming from the server) // we expect some potential delay in computing the full tail. Therefore, in those cases we fire two requests: one fetching only the // boat positions at newTime with zero tail length; and another one fetching everything else. GetRaceMapDataAction getRaceMapDataForAllOverlappingAndTipsOfNonOverlapping = getRaceMapDataForAllOverlappingAndTipsOfNonOverlapping(fromAndToAndOverlap, race, newTime); diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboardGroups.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboardGroups.java index 3cea521e0a9..217133e099d 100755 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboardGroups.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboardGroups.java @@ -135,8 +135,7 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl(leaderboardNames[0], new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); racingEventService.addLeaderboard(leaderboard); - leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false, - leaderboard.getFleet(null)); + leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */false); leaderboard = new FlexibleLeaderboardImpl(leaderboardNames[1], new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); racingEventService.addLeaderboard(leaderboard); @@ -192,8 +191,7 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl(leaderboardNames[0], new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); leaderboards.add(leaderboard); - leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false, - leaderboard.getFleet(null)); + leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */false); leaderboard = new FlexibleLeaderboardImpl(leaderboardNames[1], new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); leaderboards.add(leaderboard); @@ -249,8 +247,7 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl(leaderboardNames[0], new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); leaderboards.add(leaderboard); - leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false, - leaderboard.getFleet(null)); + leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */false); leaderboard = new FlexibleLeaderboardImpl(leaderboardNames[1], new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); leaderboards.add(leaderboard); @@ -435,7 +432,7 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe final FlexibleLeaderboard leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); final Fleet fleet = leaderboard.getFleet(null); - final RaceColumn race = leaderboard.addRaceColumn(columnName, false, fleet); + final RaceColumn race = leaderboard.addRaceColumn(columnName, false); leaderboards.add(leaderboard); final LeaderboardGroup group = new LeaderboardGroupImpl(groupName, groupDescription, false, leaderboards); diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboards.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboards.java index f6b2a132cca..4e786b69d9b 100755 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboards.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingLeaderboards.java @@ -84,7 +84,7 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final String raceColumnName1 = "My First Race 1"; MockedTrackedRaceWithFixedRankAndManyCompetitors raceWithTwoCompetitors = new MockedTrackedRaceWithFixedRankAndManyCompetitors(wolfgang, /* rank */ 1, /* started */ true); raceWithTwoCompetitors.addCompetitor(hasso); - leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false, leaderboard.getFleet(null)); + leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false); leaderboard.setSuppressed(wolfgang, true); assertTrue(Util.contains(leaderboard.getSuppressedCompetitors(), wolfgang)); assertFalse(Util.contains(leaderboard.getSuppressedCompetitors(), hasso)); @@ -121,14 +121,14 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { Competitor competitor = createCompetitor(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true); final String raceColumnName1 = "My First Race 1"; - leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, leaderboard.getFleet(null)); + leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); final String displayName = "$$$ ... The Renamed Competitor ... $$$"; leaderboard.setDisplayName(competitor, displayName); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard( leaderboardName, /* regattaRegistry */null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly - loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false, leaderboard.getFleet(null)); + loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false); Competitor loadedCompetitor = loadedLeaderboard.getCompetitorByName(competitor.getName()); assertEquals(displayName, loadedLeaderboard.getDisplayName(loadedCompetitor)); } @@ -168,12 +168,12 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { new LowPoint(), null); Competitor competitor = createCompetitor(); TrackedRace raceWithOneCompetitor = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true); - leaderboard.addRace(raceWithOneCompetitor, raceColumnName, /* medalRace */ false, leaderboard.getFleet(null)); + leaderboard.addRace(raceWithOneCompetitor, raceColumnName, /* medalRace */ false); leaderboard.setCarriedPoints(competitor, carriedPointsForWolfgangHunger); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly - loadedLeaderboard.addRace(raceWithOneCompetitor, raceColumnName, /* medalRace, ignored */ false, leaderboard.getFleet(null)); + loadedLeaderboard.addRace(raceWithOneCompetitor, raceColumnName, /* medalRace, ignored */ false); assertEquals(leaderboardName, loadedLeaderboard.getName()); assertTrue(Arrays.equals(discardIndexResultsStartingWithHowManyRaces, ((ThresholdBasedResultDiscardingRule) loadedLeaderboard.getResultDiscardingRule()).getDiscardIndexResultsStartingWithHowManyRaces())); @@ -194,16 +194,14 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { Competitor competitor = createCompetitor(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 2, /* started */ true); - leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, leaderboard.getFleet(null)); - leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true, leaderboard.getFleet(null)); + leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); + leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); leaderboard.getScoreCorrection().correctScore(competitor, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly - RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false, - leaderboard.getFleet(null)); - RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false, - leaderboard.getFleet(null)); + RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false); + RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false); assertEquals(leaderboardName, loadedLeaderboard.getName()); assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1, MillisecondsTimePoint.now())); assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitor, loadedColumn1), 0.00000001); @@ -222,14 +220,14 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { Competitor competitor = createCompetitor(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 2, /* started */ true); - leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, leaderboard.getFleet(null)); - leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true, leaderboard.getFleet(null)); + leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); + leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); leaderboard.getScoreCorrection().correctScore(competitor, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly - RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false, leaderboard.getFleet(null)); - RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false, leaderboard.getFleet(null)); + RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false); + RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false); assertEquals(leaderboardName, loadedLeaderboard.getName()); assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1, MillisecondsTimePoint.now())); assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitor, loadedColumn1), 0.00000001); @@ -248,16 +246,14 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { Competitor competitor = createCompetitor(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 2, /* started */ true); - leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, leaderboard.getFleet(null)); - leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true, leaderboard.getFleet(null)); + leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); + leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); leaderboard.getScoreCorrection().setMaxPointsReason(competitor, leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly - RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false, - leaderboard.getFleet(null)); - RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false, - leaderboard.getFleet(null)); + RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false); + RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false); assertEquals(leaderboardName, loadedLeaderboard.getName()); assertFalse(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1, MillisecondsTimePoint.now())); assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn2, MillisecondsTimePoint.now())); @@ -277,19 +273,15 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { Competitor competitor = createCompetitor(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 2, /* started */ true); - leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, - leaderboard.getFleet(null)); - leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true, - leaderboard.getFleet(null)); + leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); + leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); leaderboard.getScoreCorrection().correctScore(competitor, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); leaderboard.getScoreCorrection().setMaxPointsReason(competitor, leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly - RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false, - leaderboard.getFleet(null)); - RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false, - leaderboard.getFleet(null)); + RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false); + RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false); assertEquals(leaderboardName, loadedLeaderboard.getName()); assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1, MillisecondsTimePoint.now())); assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitor, loadedColumn1), 0.000000001); @@ -319,10 +311,8 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { Competitor competitor = createCompetitor(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 2, /* started */ true); - RaceColumn r1 = leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, - leaderboard.getFleet(null)); - RaceColumn r2 = leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true, - leaderboard.getFleet(null)); + RaceColumn r1 = leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); + RaceColumn r2 = leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); leaderboard.getScoreCorrection().correctScore(competitor, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); leaderboard.getScoreCorrection().setMaxPointsReason(competitor, leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason); // now release the tracked races; leaving no competitors in leaderboard.getCompetitors() @@ -331,10 +321,8 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly - RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false, - leaderboard.getFleet(null)); - RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false, - leaderboard.getFleet(null)); + RaceColumn loadedColumn1 = loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false); + RaceColumn loadedColumn2 = loadedLeaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false); assertEquals(leaderboardName, loadedLeaderboard.getName()); assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1, MillisecondsTimePoint.now())); assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitor, loadedColumn1), 0.000000001); @@ -368,10 +356,8 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { /* dateOfBirth */ null, "This is Rigo, the coach")), new BoatImpl("Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null)); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitor, /* rank */ 2, /* started */ true); - leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false, - leaderboard.getFleet(null)); - leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true, - leaderboard.getFleet(null)); + leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); + leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); leaderboard.getScoreCorrection().correctScore(competitor, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); leaderboard.getScoreCorrection().setMaxPointsReason(competitor, leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason); final MongoObjectFactoryImpl mongoObjectFactory = new MongoObjectFactoryImpl(db); @@ -381,10 +367,8 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { // don't attach tracked race to leaderboard and immediately store again mongoObjectFactory.storeLeaderboard(loadedLeaderboard); FlexibleLeaderboard loadedLeaderboard2 = (FlexibleLeaderboard) domainObjectFactory.loadLeaderboard(leaderboardName, /* regattaRegistry */ null); - RaceColumn loadedColumn1 = loadedLeaderboard2.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false, - leaderboard.getFleet(null)); - RaceColumn loadedColumn2 = loadedLeaderboard2.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false, - leaderboard.getFleet(null)); + RaceColumn loadedColumn1 = loadedLeaderboard2.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false); + RaceColumn loadedColumn2 = loadedLeaderboard2.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace, ignored */ false); assertEquals(leaderboardName, loadedLeaderboard2.getName()); assertTrue(loadedLeaderboard2.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1, MillisecondsTimePoint.now())); assertEquals(correctedPoints, (double) loadedLeaderboard2.getScoreCorrection().getExplicitScoreCorrection(competitor, loadedColumn1), 0.000000001); diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java index ac578eb78e1..d7e0325ad4a 100644 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndRetrievingRaceLogInLeaderboards.java @@ -85,8 +85,7 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory, domainObjectFactory); leaderboard = new FlexibleLeaderboardImpl(raceLogStore, leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); - Fleet defaultFleet = leaderboard.getFleet(null); - leaderboard.addRaceColumn(raceColumnName, /* medalRace */ false, defaultFleet); + leaderboard.addRaceColumn(raceColumnName, /* medalRace */false); } private void addAndStoreRaceLogEvent(FlexibleLeaderboard leaderboard, String raceColumnName, RaceLogEvent event) { @@ -130,7 +129,7 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD db.getLastError(); // sync DB leaderboard.removeRaceColumn(raceColumnName); db.getLastError(); // sync DB - leaderboard.addRaceColumn(raceColumnName, /* medalRace */ false, defaultFleet); + leaderboard.addRaceColumn(raceColumnName, /* medalRace */false); // now assert that the race log is empty because the column was removed and so should have been the race log RaceLog loadedRaceLog = leaderboard.getRaceColumnByName(raceColumnName).getRaceLog(leaderboard.getRaceColumnByName(raceColumnName).getFleets().iterator().next()); loadedRaceLog.lockForRead(); @@ -173,7 +172,7 @@ public class TestStoringAndRetrievingRaceLogInLeaderboards extends RaceLogMongoD } finally { reloadedRenamedRaceLog.unlockAfterRead(); } - leaderboard.addRaceColumn(raceColumnName, /* medalRace */ false, defaultFleet); + leaderboard.addRaceColumn(raceColumnName, /* medalRace */false); mongoObjectFactory.storeLeaderboard(leaderboard); // now assert that the race log is empty because the renamed column's persistent race log is expected to have // been removed diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/LeaderboardDiscardingRulesTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/LeaderboardDiscardingRulesTest.java index 343f87f3aed..fa490b435f1 100644 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/LeaderboardDiscardingRulesTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/LeaderboardDiscardingRulesTest.java @@ -10,9 +10,6 @@ import org.junit.Test; import com.sap.sailing.domain.base.BoatClass; 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.impl.FleetImpl; -import com.sap.sailing.domain.common.LeaderboardNameConstants; import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.TimePoint; @@ -68,19 +65,18 @@ public class LeaderboardDiscardingRulesTest { FlexibleLeaderboard leaderboard = (FlexibleLeaderboard) racingEventService.getLeaderboardByName(LEADERBOARDNAME); assertNotNull(leaderboard); BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("29erXX", /* typicallyStartsUpwind */ true); - Fleet fleet = new FleetImpl(LeaderboardNameConstants.DEFAULT_FLEET_NAME); Competitor hasso = AbstractLeaderboardTest.createCompetitor("Dr. Hasso Plattner"); final TrackedRace race1 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass); - leaderboard.addRace(race1, "R1", /* medalRace */ false, fleet); + leaderboard.addRace(race1, "R1", /* medalRace */false); final TrackedRace race2 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass); - leaderboard.addRace(race2, "R2", /* medalRace */ false, fleet); + leaderboard.addRace(race2, "R2", /* medalRace */false); Competitor wolfgang = AbstractLeaderboardTest.createCompetitor("Wolfgang Hunger"); final TrackedRace race3 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 123, /* started */ true, boatClass); - leaderboard.addRace(race3, "R3", /* medalRace */ false, fleet); + leaderboard.addRace(race3, "R3", /* medalRace */false); final TrackedRace race4 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 124, /* started */ true, boatClass); - leaderboard.addRace(race4, "R4", /* medalRace */ false, fleet); + leaderboard.addRace(race4, "R4", /* medalRace */false); leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R3"), 123.); leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R4"), 123.); @@ -108,23 +104,22 @@ public class LeaderboardDiscardingRulesTest { FlexibleLeaderboard leaderboard = (FlexibleLeaderboard) racingEventService.getLeaderboardByName(LEADERBOARDNAME); assertNotNull(leaderboard); BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("ESS40", /* typicallyStartsUpwind */ true); - Fleet fleet = new FleetImpl(LeaderboardNameConstants.DEFAULT_FLEET_NAME); Competitor rasmus = AbstractLeaderboardTest.createCompetitor("Rasmus"); final TrackedRace race1 = new MockedTrackedRaceWithFixedRank(rasmus, /* rank */ 2, /* started */ true, boatClass); // score 2.0 - leaderboard.addRace(race1, "R1", /* medalRace */ false, fleet); + leaderboard.addRace(race1, "R1", /* medalRace */false); final TrackedRace race2 = new MockedTrackedRaceWithFixedRank(rasmus, /* rank */ 2, /* started */ true, boatClass); // score 2.0 - leaderboard.addRace(race2, "R2", /* medalRace */ false, fleet); + leaderboard.addRace(race2, "R2", /* medalRace */false); Competitor jes = AbstractLeaderboardTest.createCompetitor("Jes"); final TrackedRace race3 = new MockedTrackedRaceWithFixedRank(jes, /* rank */ 2, /* started */ true, boatClass); // score 2.0 - leaderboard.addRace(race3, "R3", /* medalRace */ false, fleet); + leaderboard.addRace(race3, "R3", /* medalRace */false); final TrackedRace race4 = new MockedTrackedRaceWithFixedRank(jes, /* rank */ 3, /* started */ true, boatClass); // score 1.0 - leaderboard.addRace(race4, "R4", /* medalRace */ false, fleet); + leaderboard.addRace(race4, "R4", /* medalRace */false); Competitor nobody = AbstractLeaderboardTest.createCompetitor("Nobody"); final TrackedRace race5 = new MockedTrackedRaceWithFixedRank(nobody, /* rank */ 3, /* started */ true, boatClass); // score 1.0 - leaderboard.addRace(race5, "R5", /* medalRace */ false, fleet); + leaderboard.addRace(race5, "R5", /* medalRace */false); leaderboard.getScoreCorrection().correctScore(rasmus, leaderboard.getRaceColumnByName("R3"), 2.0); leaderboard.getScoreCorrection().correctScore(rasmus, leaderboard.getRaceColumnByName("R4"), 2.0); @@ -153,19 +148,18 @@ public class LeaderboardDiscardingRulesTest { FlexibleLeaderboard leaderboard = (FlexibleLeaderboard) racingEventService.getLeaderboardByName(LEADERBOARDNAME); assertNotNull(leaderboard); BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("29erXX", /* typicallyStartsUpwind */ true); - Fleet fleet = new FleetImpl(LeaderboardNameConstants.DEFAULT_FLEET_NAME); Competitor hasso = AbstractLeaderboardTest.createCompetitor("Dr. Hasso Plattner"); final TrackedRace race1 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass); - leaderboard.addRace(race1, "R1", /* medalRace */ false, fleet); + leaderboard.addRace(race1, "R1", /* medalRace */false); final TrackedRace race2 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass); - leaderboard.addRace(race2, "R2", /* medalRace */ false, fleet); + leaderboard.addRace(race2, "R2", /* medalRace */false); Competitor wolfgang = AbstractLeaderboardTest.createCompetitor("Wolfgang Hunger"); final TrackedRace race3 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 123, /* started */ true, boatClass); - leaderboard.addRace(race3, "R3", /* medalRace */ false, fleet); + leaderboard.addRace(race3, "R3", /* medalRace */false); final TrackedRace race4 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 124, /* started */ true, boatClass); - leaderboard.addRace(race4, "R4", /* medalRace */ false, fleet); + leaderboard.addRace(race4, "R4", /* medalRace */false); leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R3"), 123.); leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R4"), 123.); diff --git a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java index d3c46dfee56..6a17ee26eb6 100755 --- a/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java +++ b/java/com.sap.sailing.server.test/src/com/sap/sailing/server/test/MasterDataImportTest.java @@ -1844,4 +1844,215 @@ public class MasterDataImportTest { Assert.assertEquals(factor, metaColumn.getFactor()); } + + @Test + public void testMasterDataImportWithFlexibleLeaderboard() throws MalformedURLException, IOException, + InterruptedException, ClassNotFoundException { + // Setup source service + RacingEventService sourceService = new RacingEventServiceImpl(); + UUID courseAreaUUID = UUID.randomUUID(); + + List raceColumnNames = new ArrayList(); + String raceColumnName = "T1"; + raceColumnNames.add(raceColumnName); + raceColumnNames.add("T2"); + final List emptyRaceColumnNamesList = Collections.emptyList(); + + List series = new ArrayList(); + List fleets = new ArrayList(); + String testFleet1Name = "testFleet1"; + FleetImpl testFleet1 = new FleetImpl(testFleet1Name); + fleets.add(testFleet1); + fleets.add(new FleetImpl("testFleet2")); + series.add(new SeriesImpl("testSeries", false, fleets, emptyRaceColumnNamesList, sourceService)); + UUID regattaUUID = UUID.randomUUID(); + Regatta regatta = sourceService.createRegatta( + RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, regattaUUID, + series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */true); + for (String name : raceColumnNames) { + series.get(0).addRaceColumn(name, sourceService); + } + double factor = 3.0; + series.get(0).getRaceColumnByName(raceColumnName).setFactor(factor); + + int[] discardRule = { 1, 2, 3, 4 }; + ScoringScheme scoringScheme = new LowPoint(); + String flexLeaderboardName = "FlexName"; + FlexibleLeaderboard leaderboard = sourceService.addFlexibleLeaderboard(flexLeaderboardName, "TestFlex", + discardRule, + scoringScheme, courseAreaUUID); + List leaderboardNames = new ArrayList(); + leaderboardNames.add(leaderboard.getName()); + LeaderboardGroup group = sourceService.addLeaderboardGroup(UUID.randomUUID(), TEST_GROUP_NAME, "testGroupDesc", + false, leaderboardNames, null, null); + + + // Set tracked Race with competitors + List competitors = new ArrayList(); + UUID competitorUUID = UUID.randomUUID(); + Set sailors = new HashSet(); + sailors.add(new PersonImpl("Froderik Poterson", new NationalityImpl("GER"), new Date(645487200000L), + "Oberhoschy")); + DynamicPerson coach = new PersonImpl("Lennart Hensler", new NationalityImpl("GER"), new Date(645487200000L), + "Der Lennart halt"); + DynamicTeam team = new TeamImpl("Pros", sailors, coach); + BoatClass boatClass = new BoatClassImpl("H16", true); + DynamicBoat boat = new BoatImpl("Wingy", boatClass, "GER70133"); + CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", Color.RED, team, boat); + competitors.add(competitor); + UUID competitorToSuppressUUID = UUID.randomUUID(); + Set sailors2 = new HashSet(); + sailors2.add(new PersonImpl("Angela Merkel", new NationalityImpl("GER"), new Date(645487200000L), + "segelt auch mit")); + DynamicPerson coach2 = new PersonImpl("Peer Steinbrueck", new NationalityImpl("GER"), new Date(645487200000L), + "Bester Coach"); + DynamicTeam team2 = new TeamImpl("Noobs", sailors2, coach2); + DynamicBoat boat2 = new BoatImpl("LahmeEnte", boatClass, "GER1337"); + CompetitorImpl competitorToSuppress = new CompetitorImpl(competitorToSuppressUUID, "Merkel", Color.RED, team2, + boat2); + competitors.add(competitorToSuppress); + TrackedRace trackedRace = new DummyTrackedRace(competitors, regatta, null); + + leaderboard.addRace(trackedRace, raceColumnName, false); + RaceColumn raceColumnOnLeaderboard = leaderboard.getRaceColumnByName(raceColumnName); + raceColumnOnLeaderboard.setFactor(3.0); + + // Set log event + RaceLogEventFactory factory = new RaceLogEventFactoryImpl(); + TimePoint logTimePoint = new MillisecondsTimePoint(1372489200000L); + TimePoint logTimePoint2 = new MillisecondsTimePoint(1372489201000L); + RaceLogStartTimeEvent logEvent = factory.createStartTimeEvent(logTimePoint, author, 1, logTimePoint); + Fleet defaultFleet = leaderboard.getFleet(null); + raceColumnOnLeaderboard.getRaceLog(defaultFleet).add(logEvent); + Position p = new DegreePosition(3, 3); + Wind wind = new WindImpl(p, logTimePoint2, new KnotSpeedWithBearingImpl(5, new DegreeBearingImpl(12))); + RaceLogWindFixEvent windEvent = factory.createWindFixEvent(logTimePoint2, author, UUID.randomUUID(), + new ArrayList(), 2, wind); + raceColumnOnLeaderboard.getRaceLog(defaultFleet).add(windEvent); + storedLogUUIDs.add(logEvent.getId()); + storedLogUUIDs.add(windEvent.getId()); + + // Set score correction + double scoreCorrection = 12.0; + leaderboard.getScoreCorrection().correctScore(competitor, raceColumnOnLeaderboard, scoreCorrection); + MaxPointsReason maxPointsReason = MaxPointsReason.DNS; + leaderboard.getScoreCorrection().setMaxPointsReason(competitor, raceColumnOnLeaderboard, maxPointsReason); + + // Set carried Points + double carriedPoints = 2.0; + leaderboard.setCarriedPoints(competitor, carriedPoints); + + // Set suppressed competitor + leaderboard.setSuppressed(competitorToSuppress, true); + + // Set display name + String nickName = "Angie"; + leaderboard.setDisplayName(competitorToSuppress, nickName); + + // Serialize + List groupNamesToExport = new ArrayList(); + groupNamesToExport.add(group.getName()); + + RacingEventService destService; + DomainFactory domainFactory; + MasterDataResource resource = new MasterDataResource(); + MasterDataResource spyResource = spyResource(resource, sourceService); + Response response = spyResource.getMasterDataByLeaderboardGroups(groupNamesToExport, false, true); + StreamingOutput streamingOutput = (StreamingOutput) response.getEntity(); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + UUID randomUUID = UUID.randomUUID(); + InputStream inputStream = null; + try { + streamingOutput.write(os); + os.flush(); + // Delete all data above from the database, to allow recreating all of it on target server + deleteAllDataFromDatabase(); + // Import in new service + destService = new RacingEventServiceImplMock(new DataImportProgressImpl(randomUUID)); + domainFactory = destService.getBaseDomainFactory(); + inputStream = new ByteArrayInputStream(os.toByteArray()); + + MasterDataImporter importer = new MasterDataImporter(domainFactory, destService); + importer.importFromStream(inputStream, randomUUID, false); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } finally { + os.close(); + inputStream.close(); + } + + MasterDataImportObjectCreationCount creationCount = destService.getDataImportLock().getProgress(randomUUID) + .getResult(); + + Assert.assertNotNull(creationCount); + LeaderboardGroup leaderboardGroupOnTarget = destService.getLeaderboardGroupByName(TEST_GROUP_NAME); + Assert.assertNotNull(leaderboardGroupOnTarget); + Leaderboard leaderboardOnTarget = destService.getLeaderboardByName(flexLeaderboardName); + Assert.assertNotNull(leaderboardOnTarget); + + RaceColumn raceColumnOnTarget = leaderboardOnTarget.getRaceColumns().iterator().next(); + Fleet defaultFleetOnTarget = raceColumnOnTarget.getFleets().iterator().next(); + Assert.assertNotNull(raceColumnOnTarget); + Assert.assertNull(raceColumnOnTarget.getTrackedRace(defaultFleetOnTarget)); + + Regatta regattaOnTarget = destService.createRegatta( + RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME), TEST_BOAT_CLASS_NAME, regattaUUID, + series, true, new LowPoint(), courseAreaUUID, /* useStartTimeInference */true); + + raceColumnOnTarget.setTrackedRace(defaultFleetOnTarget, + new DummyTrackedRace( + competitors, regattaOnTarget, null)); + + Assert.assertTrue(leaderboardOnTarget.getScoreCorrection().hasCorrectionFor(raceColumnOnTarget)); + Competitor competitorOnTarget = domainFactory.getExistingCompetitorById(competitorUUID); + Set competitorsCreatedOnTarget = new HashSet(); + competitorsCreatedOnTarget.add(competitorOnTarget); + + Assert.assertEquals(defaultFleetOnTarget, leaderboardOnTarget.getFleet(null)); + TrackedRace trackedRaceForTarget = new DummyTrackedRace(competitorsCreatedOnTarget, regattaOnTarget, null); + + raceColumnOnTarget.setTrackedRace(defaultFleetOnTarget, trackedRaceForTarget); + + Assert.assertEquals(factor, raceColumnOnTarget.getFactor()); + + // Check for score corrections + Assert.assertEquals( + scoreCorrection, + leaderboardOnTarget.getScoreCorrection().getExplicitScoreCorrection(competitorOnTarget, + raceColumnOnTarget)); + Assert.assertEquals( + maxPointsReason, + leaderboardOnTarget.getScoreCorrection().getMaxPointsReason(competitorOnTarget, raceColumnOnTarget, + MillisecondsTimePoint.now())); + + // Check for carried points + Assert.assertEquals(carriedPoints, leaderboardOnTarget.getCarriedPoints(competitorOnTarget)); + + // Check for suppressed competitor + Assert.assertTrue(leaderboardOnTarget.getSuppressedCompetitors().iterator().hasNext()); + Competitor suppressedCompetitorOnTarget = domainFactory.getCompetitorStore().getExistingCompetitorById( + competitorToSuppressUUID); + Assert.assertEquals(suppressedCompetitorOnTarget, leaderboardOnTarget.getSuppressedCompetitors().iterator() + .next()); + + // Check for competitor display name + Assert.assertEquals(nickName, leaderboardOnTarget.getDisplayName(suppressedCompetitorOnTarget)); + + // Check for race log event + Assert.assertNotNull(raceColumnOnTarget.getRaceLog(defaultFleetOnTarget).getFirstRawFixAtOrAfter(logTimePoint)); + Assert.assertEquals(logEvent.getId(), raceColumnOnTarget.getRaceLog(defaultFleetOnTarget) + .getFirstRawFixAtOrAfter(logTimePoint).getId()); + Assert.assertNotNull(raceColumnOnTarget.getRaceLog(defaultFleetOnTarget).getFirstFixAtOrAfter(logTimePoint2)); + Assert.assertEquals(wind, ((RaceLogWindFixEvent) raceColumnOnTarget.getRaceLog(defaultFleetOnTarget) + .getFirstFixAtOrAfter(logTimePoint2)).getWindFix()); + + // Check for persisting of race log events: + RacingEventService dest2 = new RacingEventServiceImplMock(); + Leaderboard lb2 = dest2.getLeaderboardByName(flexLeaderboardName); + RaceColumn raceColumn2 = lb2.getRaceColumns().iterator().next(); + RaceLog raceLog2 = raceColumn2.getRaceLog(raceColumn2.getFleets().iterator().next()); + Assert.assertEquals(logEvent.getId(), raceLog2.getFirstRawFixAtOrAfter(logTimePoint).getId()); + } + } diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java index cf775d02352..1e3b93a177e 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/RacingEventServiceImpl.java @@ -664,8 +664,7 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport if (leaderboard != null) { if (leaderboard instanceof FlexibleLeaderboard) { // uses the default fleet as the single fleet for the new column - RaceColumn result = ((FlexibleLeaderboard) leaderboard).addRaceColumn(columnName, medalRace, - leaderboard.getFleet(null)); + RaceColumn result = ((FlexibleLeaderboard) leaderboard).addRaceColumn(columnName, medalRace); updateStoredLeaderboard((FlexibleLeaderboard) leaderboard); return result; } else { @@ -1308,8 +1307,7 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport .get(LeaderboardNameConstants.DEFAULT_LEADERBOARD_NAME); if (defaultLeaderboard != null) { String columnName = trackedRace.getRace().getName(); - defaultLeaderboard.addRace(trackedRace, columnName, /* medalRace */false, - defaultLeaderboard.getFleet(null)); + defaultLeaderboard.addRace(trackedRace, columnName, /* medalRace */false); } TrackedRaceReplicator trackedRaceReplicator = new TrackedRaceReplicator(trackedRace); trackedRaceReplicators.put(trackedRace, trackedRaceReplicator); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java index 0785f10195b..e6a99d64159 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/operationaltransformation/ImportMasterDataOperation.java @@ -199,6 +199,7 @@ public class ImportMasterDataOperation extends storeRaceLogEvents(leaderboard, toState.getMongoObjectFactory()); creationCount.addOneLeaderboard(leaderboard.getName()); relinkTrackedRacesIfPossible(toState, leaderboard); + toState.updateStoredLeaderboard(leaderboard); } } diff --git a/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-ide-local.target b/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-ide-local.target index 8d623625f64..1630dd4c936 100755 --- a/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-ide-local.target +++ b/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-ide-local.target @@ -36,11 +36,6 @@ - - - - - @@ -54,4 +49,4 @@ - + \ No newline at end of file diff --git a/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-ide-p2admin.target b/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-ide-p2admin.target index 775fd610fc7..b4e1d160518 100644 --- a/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-ide-p2admin.target +++ b/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-ide-p2admin.target @@ -44,10 +44,5 @@ - - - - - diff --git a/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-maven-central.target b/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-maven-central.target index 15d25c00b43..23f669c680e 100644 --- a/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-maven-central.target +++ b/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-maven-central.target @@ -50,10 +50,5 @@ - - - - - diff --git a/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-maven-local.target b/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-maven-local.target index c899d7e49eb..112ebfed49d 100644 --- a/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-maven-local.target +++ b/java/com.sap.sailing.targetplatform/definitions/race-analysis-p2-maven-local.target @@ -50,10 +50,5 @@ - - - - -