diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/AbstractLeaderboardTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/AbstractLeaderboardTest.java index 303a1649001..a862947ea90 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/AbstractLeaderboardTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/AbstractLeaderboardTest.java @@ -5,11 +5,9 @@ import java.util.Collections; import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.CompetitorAndBoat; import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sailing.domain.base.impl.BoatClassImpl; import com.sap.sailing.domain.base.impl.BoatImpl; -import com.sap.sailing.domain.base.impl.CompetitorAndBoatImpl; import com.sap.sailing.domain.base.impl.CompetitorImpl; import com.sap.sailing.domain.base.impl.CompetitorWithBoatImpl; import com.sap.sailing.domain.base.impl.DynamicBoat; @@ -21,10 +19,6 @@ import com.sap.sse.common.Color; public abstract class AbstractLeaderboardTest { private final static BoatClass boatClass = new BoatClassImpl("505", /* typicallyStartsUpwind */ true); - public static CompetitorAndBoat createCompetitorAndBoat(String competitorName) { - return new CompetitorAndBoatImpl(createCompetitor(competitorName), createBoat(competitorName)); - } - public static Competitor createCompetitor(String competitorName) { return new CompetitorImpl(competitorName, competitorName, "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( new PersonImpl(competitorName, new NationalityImpl("GER"), diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java index f0baae1f2bf..5ca55645c38 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CourseTest.java @@ -21,7 +21,7 @@ import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver; import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.CompetitorAndBoat; +import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sailing.domain.base.ControlPoint; import com.sap.sailing.domain.base.Course; import com.sap.sailing.domain.base.DomainFactory; @@ -304,9 +304,9 @@ public class CourseTest { Course course = new CourseImpl("Test Course", waypoints); assertWaypointIndexes(course); final BoatClass boatClass = new BoatClassImpl("505", /* upwind start */true); - final CompetitorAndBoat hasso = AbstractLeaderboardTest.createCompetitorAndBoat("Hasso"); + final CompetitorWithBoat hasso = AbstractLeaderboardTest.createCompetitorWithBoat("Hasso"); final Map competitorsAndBoats = new HashMap<>(); - competitorsAndBoats.put(hasso.getCompetitor(), hasso.getBoat()); + competitorsAndBoats.put(hasso, hasso.getBoat()); DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(/* trackedRegatta */new DynamicTrackedRegattaImpl( new RegattaImpl("test", null, true, null, null, new HashSet(), false, null, "test", null, OneDesignRankingMetric::new)), new RaceDefinitionImpl("Test Race", course, boatClass, competitorsAndBoats), @@ -338,9 +338,9 @@ public class CourseTest { waypoints.add(wp2); Course course = new CourseImpl("Test Course", waypoints); final BoatClass boatClass = new BoatClassImpl("505", /* upwind start */true); - final CompetitorAndBoat hasso = AbstractLeaderboardTest.createCompetitorAndBoat("Hasso"); + final CompetitorWithBoat hasso = AbstractLeaderboardTest.createCompetitorWithBoat("Hasso"); final Map competitorsAndBoats = new HashMap<>(); - competitorsAndBoats.put(hasso.getCompetitor(), hasso.getBoat()); + competitorsAndBoats.put(hasso, hasso.getBoat()); DynamicTrackedRace trackedRace = new DynamicTrackedRaceImpl(/* trackedRegatta */ new DynamicTrackedRegattaImpl( new RegattaImpl("test", null, true, null, null, new HashSet(), false, null, "test", null, OneDesignRankingMetric::new)), new RaceDefinitionImpl("Test Race", course, boatClass, competitorsAndBoats), Collections. emptyList(), diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardScoringAndRankingTestBase.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardScoringAndRankingTestBase.java index ae75698114b..0f9f4b1a667 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardScoringAndRankingTestBase.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/LeaderboardScoringAndRankingTestBase.java @@ -107,7 +107,7 @@ public class LeaderboardScoringAndRankingTestBase extends AbstractLeaderboardTes public static List createCompetitors(int numberOfCompetitorsToCreate) { List result = new ArrayList(); for (int i=1; i<=numberOfCompetitorsToCreate; i++) { - result.add(createCompetitorAndBoat("C"+i).getCompetitor()); + result.add(createCompetitorWithBoat("C"+i)); } return result; } diff --git a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java index 2196d664a7a..1263510880e 100755 --- a/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java +++ b/java/com.sap.sailing.mongodb.test/src/com/sap/sailing/mongodb/test/TestStoringAndLoadingEventsAndRegattas.java @@ -32,7 +32,6 @@ import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegister import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.CompetitorAndBoat; import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sailing.domain.base.Course; import com.sap.sailing.domain.base.CourseArea; @@ -473,7 +472,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest // for some reason the dropping of collections doesn't work reliably on Linux... explicitly drop those collections that we depend on getMongoService().getDB().getCollection(CollectionNames.LEADERBOARDS.name()).drop(); getMongoService().getDB().getCollection(CollectionNames.REGATTAS.name()).drop(); - CompetitorAndBoat hasso = AbstractLeaderboardTest.createCompetitorAndBoat("Dr. Hasso Plattner"); + CompetitorWithBoat hasso = AbstractLeaderboardTest.createCompetitorWithBoat("Dr. Hasso Plattner"); BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("29erXX", /* typicallyStartsUpwind */ true); final DynamicTrackedRegatta[] trackedRegatta = new DynamicTrackedRegatta[1]; final DynamicTrackedRace q2YellowTrackedRace = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 1, /* started */ false, boatClass) { @@ -509,7 +508,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest assertNotNull(regattaLeaderboard.getRaceColumnByName(q2.getName())); res.apply(new ConnectTrackedRaceToLeaderboardColumn(regattaLeaderboard.getName(), q2.getName(), yellow .getName(), q2YellowTrackedRace.getRaceIdentifier())); - res.apply(new UpdateLeaderboardMaxPointsReason(regattaLeaderboard.getName(), q2.getName(), hasso.getCompetitor().getId().toString(), + res.apply(new UpdateLeaderboardMaxPointsReason(regattaLeaderboard.getName(), q2.getName(), hasso.getId().toString(), MaxPointsReason.DNF, MillisecondsTimePoint.now())); // load new RacingEventService including regatta and leaderboard @@ -534,7 +533,7 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest trackedRegatta[0] = new DynamicTrackedRegattaImpl(loadedRegatta); resForLoading.apply(new ConnectTrackedRaceToLeaderboardColumn(loadedLeaderboard.getName(), loadedQ2.getName(), loadedYellow .getName(), q2YellowTrackedRace.getRaceIdentifier())); - MaxPointsReason hassosLoadedMaxPointsReason = loadedLeaderboard.getScoreCorrection().getMaxPointsReason(hasso.getCompetitor(), loadedQ2, MillisecondsTimePoint.now()); + MaxPointsReason hassosLoadedMaxPointsReason = loadedLeaderboard.getScoreCorrection().getMaxPointsReason(hasso, loadedQ2, MillisecondsTimePoint.now()); assertEquals(MaxPointsReason.DNF, hassosLoadedMaxPointsReason); } 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 f03a845906d..b193fc613c8 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 @@ -18,15 +18,16 @@ import org.junit.Before; import org.junit.Test; import com.mongodb.MongoException; -import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.impl.BoatClassImpl; import com.sap.sailing.domain.base.impl.BoatImpl; -import com.sap.sailing.domain.base.impl.CompetitorAndBoatImpl; import com.sap.sailing.domain.base.impl.CompetitorImpl; +import com.sap.sailing.domain.base.impl.CompetitorWithBoatImpl; +import com.sap.sailing.domain.base.impl.DynamicBoat; import com.sap.sailing.domain.base.impl.NationalityImpl; import com.sap.sailing.domain.base.impl.PersonImpl; import com.sap.sailing.domain.base.impl.TeamImpl; @@ -115,21 +116,23 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe @Test public void testStoringAndRetrievingLeaderboardGroupWithOverallLeaderboardWithScoreCorrection() throws NoWindException { RacingEventService racingEventService = new RacingEventServiceImpl(); - Competitor wolfgang = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( + Competitor wolfgangWithoutBoat = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( new PersonImpl("$$$Dr. Wolfgang+Hunger$$$", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is famous Dr. Wolfgang Hunger")), new PersonImpl("Rigo van Maas", new NationalityImpl("NED"), /* dateOfBirth */ null, "This is Rigo, the coach")), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); - Boat wolfgangsBoat = new BoatImpl("123", "Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); - Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", "KYC", Color.RED, null, null, + DynamicBoat wolfgangsBoat = new BoatImpl("123", "Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + CompetitorWithBoat wolfgang = new CompetitorWithBoatImpl(wolfgangWithoutBoat,wolfgangsBoat); + Competitor hassoWithoutBoat = new CompetitorImpl(234, "Hasso Plattner", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( new PersonImpl("Hasso Plattner", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is famous Dr. Hasso Plattner")), new PersonImpl("Lutz Patrunky", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is Patty, the coach")), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); - Boat hassosBoat = new BoatImpl("456", "Dr. Hasso Plattner's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + DynamicBoat hassosBoat = new BoatImpl("456", "Dr. Hasso Plattner's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + CompetitorWithBoat hasso = new CompetitorWithBoatImpl(hassoWithoutBoat,hassosBoat); final String raceColumnName1 = "My First Race 1"; MockedTrackedRaceWithFixedRankAndManyCompetitors raceWithTwoCompetitors = new MockedTrackedRaceWithFixedRankAndManyCompetitors( - new CompetitorAndBoatImpl(wolfgang,wolfgangsBoat), /* rank */ 1, /* started */ true); - raceWithTwoCompetitors.addCompetitorWithBoat(new CompetitorAndBoatImpl(hasso,hassosBoat)); + wolfgang, /* rank */ 1, /* started */ true); + raceWithTwoCompetitors.addCompetitorWithBoat(hasso); final String[] leaderboardNames = {"Leaderboard 0", "Leaderboard 1", "Leaderboard 2", "Leaderboard 3"}; final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; @@ -174,21 +177,23 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe @Test public void testStoringAndRetrievingLeaderboardGroupWithSuppressedCompetitorsInOverallLeaderboard() { - Competitor wolfgang = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( + Competitor wolfgangWithoutBoat = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( new PersonImpl("$$$Dr. Wolfgang+Hunger$$$", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is famous Dr. Wolfgang Hunger")), new PersonImpl("Rigo van Maas", new NationalityImpl("NED"), /* dateOfBirth */ null, "This is Rigo, the coach")), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); - Boat wolfgangsBoat = new BoatImpl("123", "Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); - Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", "KYC", Color.RED, null, null, + DynamicBoat wolfgangsBoat = new BoatImpl("123", "Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + CompetitorWithBoat wolfgang = new CompetitorWithBoatImpl(wolfgangWithoutBoat,wolfgangsBoat); + Competitor hassoWithoutBaot = new CompetitorImpl(234, "Hasso Plattner", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( new PersonImpl("Hasso Plattner", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is famous Dr. Hasso Plattner")), new PersonImpl("Lutz Patrunky", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is Patty, the coach")), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); - Boat hassosBoat = new BoatImpl("456", "Dr. Hasso Plattner's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + DynamicBoat hassosBoat = new BoatImpl("456", "Dr. Hasso Plattner's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + CompetitorWithBoat hasso = new CompetitorWithBoatImpl(hassoWithoutBaot,hassosBoat); final String raceColumnName1 = "My First Race 1"; MockedTrackedRaceWithFixedRankAndManyCompetitors raceWithTwoCompetitors = new MockedTrackedRaceWithFixedRankAndManyCompetitors( - new CompetitorAndBoatImpl(wolfgang,wolfgangsBoat), /* rank */ 1, /* started */ true); - raceWithTwoCompetitors.addCompetitorWithBoat(new CompetitorAndBoatImpl(hasso,hassosBoat)); + wolfgang, /* rank */ 1, /* started */ true); + raceWithTwoCompetitors.addCompetitorWithBoat(hasso); final String[] leaderboardNames = {"Leaderboard 0", "Leaderboard 1", "Leaderboard 2", "Leaderboard 3"}; final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; @@ -233,21 +238,23 @@ public class TestStoringAndRetrievingLeaderboardGroups extends AbstractMongoDBTe @Test public void testStoringAndRetrievingLeaderboardGroupWithTwoSuppressedCompetitorsInOverallLeaderboard() { - Competitor wolfgang = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( + Competitor wolfgangWithoutBoat = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( new PersonImpl("$$$Dr. Wolfgang+Hunger$$$", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is famous Dr. Wolfgang Hunger")), new PersonImpl("Rigo van Maas", new NationalityImpl("NED"), /* dateOfBirth */ null, "This is Rigo, the coach")), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); - Boat wolfgangsBoat = new BoatImpl("123", "Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); - Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", "KYC", Color.RED, null,null, + DynamicBoat wolfgangsBoat = new BoatImpl("123", "Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + CompetitorWithBoat wolfgang = new CompetitorWithBoatImpl(wolfgangWithoutBoat,wolfgangsBoat); + Competitor hassoWithoutBaot = new CompetitorImpl(234, "Hasso Plattner", "KYC", Color.RED, null,null, new TeamImpl("STG", Collections.singleton( new PersonImpl("Hasso Plattner", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is famous Dr. Hasso Plattner")), new PersonImpl("Lutz Patrunky", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is Patty, the coach")), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); - Boat hassosBoat = new BoatImpl("456", "Dr. Hasso Plattner's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + DynamicBoat hassosBoat = new BoatImpl("456", "Dr. Hasso Plattner's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + CompetitorWithBoat hasso = new CompetitorWithBoatImpl(hassoWithoutBaot,hassosBoat); final String raceColumnName1 = "My First Race 1"; MockedTrackedRaceWithFixedRankAndManyCompetitors raceWithTwoCompetitors = new MockedTrackedRaceWithFixedRankAndManyCompetitors( - new CompetitorAndBoatImpl(wolfgang,wolfgangsBoat), /* rank */ 1, /* started */ true); - raceWithTwoCompetitors.addCompetitorWithBoat(new CompetitorAndBoatImpl(hasso,hassosBoat)); + wolfgang, /* rank */ 1, /* started */ true); + raceWithTwoCompetitors.addCompetitorWithBoat(hasso); final String[] leaderboardNames = {"Leaderboard 0", "Leaderboard 1", "Leaderboard 2", "Leaderboard 3"}; final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; 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 7a68b2f77da..b57782429e1 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 @@ -13,16 +13,16 @@ import org.junit.Before; import org.junit.Test; import com.mongodb.MongoException; -import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.CompetitorAndBoat; +import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.impl.BoatClassImpl; import com.sap.sailing.domain.base.impl.BoatImpl; import com.sap.sailing.domain.base.impl.CompetitorImpl; -import com.sap.sailing.domain.base.impl.CompetitorAndBoatImpl; +import com.sap.sailing.domain.base.impl.CompetitorWithBoatImpl; import com.sap.sailing.domain.base.impl.DomainFactoryImpl; +import com.sap.sailing.domain.base.impl.DynamicBoat; import com.sap.sailing.domain.base.impl.NationalityImpl; import com.sap.sailing.domain.base.impl.PersonImpl; import com.sap.sailing.domain.base.impl.TeamImpl; @@ -79,27 +79,27 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; FlexibleLeaderboardImpl leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); - CompetitorAndBoat wolfgangWithBoat = createCompetitorAndBoat(); + CompetitorWithBoat wolfgangWithBoat = createCompetitorWithBoat(); Competitor hasso = new CompetitorImpl(234, "Hasso Plattner", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( new PersonImpl("Hasso Plattner", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is famous Dr. Hasso Plattner")), new PersonImpl("Lutz Patrunky", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is Patty, the coach")), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); - Boat hassosBoat = new BoatImpl("123", "Dr. Hasso Plattner's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); - CompetitorAndBoat hassoWithBoat = new CompetitorAndBoatImpl(hasso, hassosBoat); + DynamicBoat hassosBoat = new BoatImpl("123", "Dr. Hasso Plattner's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + CompetitorWithBoat hassoWithBoat = new CompetitorWithBoatImpl(hasso, hassosBoat); final String raceColumnName1 = "My First Race 1"; MockedTrackedRaceWithFixedRankAndManyCompetitors raceWithTwoCompetitors = new MockedTrackedRaceWithFixedRankAndManyCompetitors(wolfgangWithBoat, /* rank */ 1, /* started */ true); raceWithTwoCompetitors.addCompetitorWithBoat(hassoWithBoat); leaderboard.addRace(raceWithTwoCompetitors, raceColumnName1, /* medalRace */ false); - leaderboard.setSuppressed(wolfgangWithBoat.getCompetitor(), true); - assertTrue(Util.contains(leaderboard.getSuppressedCompetitors(), wolfgangWithBoat.getCompetitor())); + leaderboard.setSuppressed(wolfgangWithBoat, true); + assertTrue(Util.contains(leaderboard.getSuppressedCompetitors(), wolfgangWithBoat)); assertFalse(Util.contains(leaderboard.getSuppressedCompetitors(), hasso)); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); Leaderboard loadedLeaderboard = new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null, /* leaderboardRegistry */ null); MockedTrackedRaceWithFixedRankAndManyCompetitors raceWithTwoCompetitors2 = new MockedTrackedRaceWithFixedRankAndManyCompetitors(wolfgangWithBoat, /* rank */ 1, /* started */ true); raceWithTwoCompetitors2.addCompetitorWithBoat(hassoWithBoat); loadedLeaderboard.getRaceColumnByName(raceColumnName1).setTrackedRace(loadedLeaderboard.getFleet(null), raceWithTwoCompetitors2); - assertTrue(Util.contains(loadedLeaderboard.getSuppressedCompetitors(), wolfgangWithBoat.getCompetitor())); + assertTrue(Util.contains(loadedLeaderboard.getSuppressedCompetitors(), wolfgangWithBoat)); assertFalse(Util.contains(loadedLeaderboard.getSuppressedCompetitors(), hasso)); } @@ -124,18 +124,18 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; FlexibleLeaderboardImpl leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); - CompetitorAndBoat competitorWithBoat = createCompetitorAndBoat(); + CompetitorWithBoat competitorWithBoat = createCompetitorWithBoat(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 1, /* started */ true); final String raceColumnName1 = "My First Race 1"; leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); final String displayName = "$$$ ... The Renamed Competitor ... $$$"; - leaderboard.setDisplayName(competitorWithBoat.getCompetitor(), displayName); + leaderboard.setDisplayName(competitorWithBoat, displayName); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard( leaderboardName, /* regattaRegistry */null, /* leaderboardRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly loadedLeaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace, ignored */ false); - Competitor loadedCompetitor = loadedLeaderboard.getCompetitorByName(competitorWithBoat.getCompetitor().getName()); + Competitor loadedCompetitor = loadedLeaderboard.getCompetitorByName(competitorWithBoat.getName()); assertEquals(displayName, loadedLeaderboard.getDisplayName(loadedCompetitor)); } @@ -172,10 +172,10 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; FlexibleLeaderboardImpl leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); - CompetitorAndBoat competitorWithBoat = createCompetitorAndBoat(); + CompetitorWithBoat competitorWithBoat = createCompetitorWithBoat(); TrackedRace raceWithOneCompetitor = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 1, /* started */ true); leaderboard.addRace(raceWithOneCompetitor, raceColumnName, /* medalRace */ false); - leaderboard.setCarriedPoints(competitorWithBoat.getCompetitor(), carriedPointsForWolfgangHunger); + leaderboard.setCarriedPoints(competitorWithBoat, carriedPointsForWolfgangHunger); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null, /* leaderboardRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly @@ -184,8 +184,8 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { assertTrue(Arrays.equals(discardIndexResultsStartingWithHowManyRaces, ((ThresholdBasedResultDiscardingRule) loadedLeaderboard.getResultDiscardingRule()).getDiscardIndexResultsStartingWithHowManyRaces())); assertEquals(1, Util.size(loadedLeaderboard.getCompetitors())); - assertEquals(competitorWithBoat.getCompetitor(), loadedLeaderboard.getCompetitors().iterator().next()); - assertEquals(carriedPointsForWolfgangHunger, loadedLeaderboard.getCarriedPoints(competitorWithBoat.getCompetitor()), 0.000000001); + assertEquals(competitorWithBoat, loadedLeaderboard.getCompetitors().iterator().next()); + assertEquals(carriedPointsForWolfgangHunger, loadedLeaderboard.getCarriedPoints(competitorWithBoat), 0.000000001); } @Test @@ -197,21 +197,21 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; FlexibleLeaderboardImpl leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); - CompetitorAndBoat competitorWithBoat = createCompetitorAndBoat(); + CompetitorWithBoat competitorWithBoat = createCompetitorWithBoat(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 2, /* started */ true); leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); - leaderboard.getScoreCorrection().correctScore(competitorWithBoat.getCompetitor(), leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); + leaderboard.getScoreCorrection().correctScore(competitorWithBoat, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null, /* leaderboardRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly 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(competitorWithBoat.getCompetitor(), loadedColumn1, MillisecondsTimePoint.now())); - assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitorWithBoat.getCompetitor(), loadedColumn1), 0.00000001); - assertFalse(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat.getCompetitor(), loadedColumn2, MillisecondsTimePoint.now())); + assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat, loadedColumn1, MillisecondsTimePoint.now())); + assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitorWithBoat, loadedColumn1), 0.00000001); + assertFalse(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat, loadedColumn2, MillisecondsTimePoint.now())); } @Test @@ -223,21 +223,21 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; FlexibleLeaderboardImpl leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); - CompetitorAndBoat competitor = createCompetitorAndBoat(); + CompetitorWithBoat competitor = createCompetitorWithBoat(); 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.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); - leaderboard.getScoreCorrection().correctScore(competitor.getCompetitor(), leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); + 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, /* leaderboardRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly 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.getCompetitor(), loadedColumn1, MillisecondsTimePoint.now())); - assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitor.getCompetitor(), loadedColumn1), 0.00000001); - assertFalse(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor.getCompetitor(), loadedColumn2, MillisecondsTimePoint.now())); + assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn1, MillisecondsTimePoint.now())); + assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitor, loadedColumn1), 0.00000001); + assertFalse(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitor, loadedColumn2, MillisecondsTimePoint.now())); } @Test @@ -249,21 +249,21 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; FlexibleLeaderboardImpl leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); - CompetitorAndBoat competitorWithBoat = createCompetitorAndBoat(); + CompetitorWithBoat competitorWithBoat = createCompetitorWithBoat(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 2, /* started */ true); leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); - leaderboard.getScoreCorrection().setMaxPointsReason(competitorWithBoat.getCompetitor(), leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason); + leaderboard.getScoreCorrection().setMaxPointsReason(competitorWithBoat, leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null, /* leaderboardRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly 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(competitorWithBoat.getCompetitor(), loadedColumn1, MillisecondsTimePoint.now())); - assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat.getCompetitor(), loadedColumn2, MillisecondsTimePoint.now())); - assertEquals(maxPointsReason, loadedLeaderboard.getScoreCorrection().getMaxPointsReason(competitorWithBoat.getCompetitor(), loadedColumn2, MillisecondsTimePoint.now())); + assertFalse(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat, loadedColumn1, MillisecondsTimePoint.now())); + assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat, loadedColumn2, MillisecondsTimePoint.now())); + assertEquals(maxPointsReason, loadedLeaderboard.getScoreCorrection().getMaxPointsReason(competitorWithBoat, loadedColumn2, MillisecondsTimePoint.now())); } @Test @@ -276,23 +276,23 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; FlexibleLeaderboardImpl leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); - CompetitorAndBoat competitorWithBoat = createCompetitorAndBoat(); + CompetitorWithBoat competitorWithBoat = createCompetitorWithBoat(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 2, /* started */ true); leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); - leaderboard.getScoreCorrection().correctScore(competitorWithBoat.getCompetitor(), leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); - leaderboard.getScoreCorrection().setMaxPointsReason(competitorWithBoat.getCompetitor(), leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason); + leaderboard.getScoreCorrection().correctScore(competitorWithBoat, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); + leaderboard.getScoreCorrection().setMaxPointsReason(competitorWithBoat, leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason); new MongoObjectFactoryImpl(db).storeLeaderboard(leaderboard); FlexibleLeaderboard loadedLeaderboard = (FlexibleLeaderboard) new DomainObjectFactoryImpl(db, DomainFactory.INSTANCE).loadLeaderboard(leaderboardName, /* regattaRegistry */ null, /* leaderboardRegistry */ null); // attach tracked race to leaderboard to ensure that competitor object is assigned properly 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(competitorWithBoat.getCompetitor(), loadedColumn1, MillisecondsTimePoint.now())); - assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitorWithBoat.getCompetitor(), loadedColumn1), 0.000000001); - assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat.getCompetitor(), loadedColumn2, MillisecondsTimePoint.now())); - assertEquals(maxPointsReason, loadedLeaderboard.getScoreCorrection().getMaxPointsReason(competitorWithBoat.getCompetitor(), loadedColumn2, MillisecondsTimePoint.now())); + assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat, loadedColumn1, MillisecondsTimePoint.now())); + assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitorWithBoat, loadedColumn1), 0.000000001); + assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat, loadedColumn2, MillisecondsTimePoint.now())); + assertEquals(maxPointsReason, loadedLeaderboard.getScoreCorrection().getMaxPointsReason(competitorWithBoat, loadedColumn2, MillisecondsTimePoint.now())); } /** @@ -314,13 +314,13 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { final int[] discardIndexResultsStartingWithHowManyRaces = new int[] { 5, 8 }; FlexibleLeaderboardImpl leaderboard = new FlexibleLeaderboardImpl(leaderboardName, new ThresholdBasedResultDiscardingRuleImpl(discardIndexResultsStartingWithHowManyRaces), new LowPoint(), null); - CompetitorAndBoat competitorWithBoat = createCompetitorAndBoat(); + CompetitorWithBoat competitorWithBoat = createCompetitorWithBoat(); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 2, /* started */ true); RaceColumn r1 = leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); RaceColumn r2 = leaderboard.addRace(raceWithOneCompetitor2, raceColumnName2, /* medalRace */ true); - leaderboard.getScoreCorrection().correctScore(competitorWithBoat.getCompetitor(), leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); - leaderboard.getScoreCorrection().setMaxPointsReason(competitorWithBoat.getCompetitor(), leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason); + leaderboard.getScoreCorrection().correctScore(competitorWithBoat, leaderboard.getRaceColumnByName(raceColumnName1), correctedPoints); + leaderboard.getScoreCorrection().setMaxPointsReason(competitorWithBoat, leaderboard.getRaceColumnByName(raceColumnName2), maxPointsReason); // now release the tracked races; leaving no competitors in leaderboard.getCompetitors() r1.releaseTrackedRace(leaderboard.getFleet(null)); r2.releaseTrackedRace(leaderboard.getFleet(null)); @@ -330,10 +330,10 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { 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(competitorWithBoat.getCompetitor(), loadedColumn1, MillisecondsTimePoint.now())); - assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitorWithBoat.getCompetitor(), loadedColumn1), 0.000000001); - assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat.getCompetitor(), loadedColumn2, MillisecondsTimePoint.now())); - assertEquals(maxPointsReason, loadedLeaderboard.getScoreCorrection().getMaxPointsReason(competitorWithBoat.getCompetitor(), loadedColumn2, MillisecondsTimePoint.now())); + assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat, loadedColumn1, MillisecondsTimePoint.now())); + assertEquals(correctedPoints, (double) loadedLeaderboard.getScoreCorrection().getExplicitScoreCorrection(competitorWithBoat, loadedColumn1), 0.000000001); + assertTrue(loadedLeaderboard.getScoreCorrection().isScoreCorrected(competitorWithBoat, loadedColumn2, MillisecondsTimePoint.now())); + assertEquals(maxPointsReason, loadedLeaderboard.getScoreCorrection().getMaxPointsReason(competitorWithBoat, loadedColumn2, MillisecondsTimePoint.now())); } /** @@ -361,8 +361,8 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { /* dateOfBirth */ null, "This is famous Dr. Wolfgang Hunger")), new PersonImpl("Rigo van Maas", new NationalityImpl("NED"), /* dateOfBirth */ null, "This is Rigo, the coach")), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); - Boat boat = domainFactory.getOrCreateBoat("boat", "Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null, null); - CompetitorAndBoat competitorWithBoat = new CompetitorAndBoatImpl(competitor, boat); + DynamicBoat boat = (DynamicBoat) domainFactory.getOrCreateBoat("boat", "Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null, null); + CompetitorWithBoat competitorWithBoat = new CompetitorWithBoatImpl(competitor, boat); TrackedRace raceWithOneCompetitor1 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 1, /* started */ true); TrackedRace raceWithOneCompetitor2 = new MockedTrackedRaceWithFixedRank(competitorWithBoat, /* rank */ 2, /* started */ true); leaderboard.addRace(raceWithOneCompetitor1, raceColumnName1, /* medalRace */ false); @@ -385,12 +385,12 @@ public class TestStoringAndRetrievingLeaderboards extends AbstractMongoDBTest { assertEquals(maxPointsReason, loadedLeaderboard2.getScoreCorrection().getMaxPointsReason(competitor, loadedColumn2, MillisecondsTimePoint.now())); } - private CompetitorAndBoat createCompetitorAndBoat() { + private CompetitorWithBoat createCompetitorWithBoat() { Competitor competitor = new CompetitorImpl(123, "$$$Dr. Wolfgang+Hunger$$$", "KYC", Color.RED, null, null, new TeamImpl("STG", Collections.singleton( new PersonImpl("$$$Dr. Wolfgang+Hunger$$$", new NationalityImpl("GER"), /* dateOfBirth */ null, "This is famous Dr. Wolfgang Hunger")), new PersonImpl("Rigo van Maas", new NationalityImpl("NED"), /* dateOfBirth */ null, "This is Rigo, the coach")), /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); - Boat boat = new BoatImpl(competitor.getId(), "Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); - return new CompetitorAndBoatImpl(competitor, boat); + DynamicBoat boat = new BoatImpl(competitor.getId(), "Dr. Wolfgang Hunger's boat", new BoatClassImpl("505", /* typicallyStartsUpwind */ true), null); + return new CompetitorWithBoatImpl(competitor, boat); } } diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/DelayedLeaderboardCorrectionsReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/DelayedLeaderboardCorrectionsReplicationTest.java index 6fe9daa0bc4..c362f2efcde 100755 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/DelayedLeaderboardCorrectionsReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/DelayedLeaderboardCorrectionsReplicationTest.java @@ -14,7 +14,7 @@ import org.junit.Test; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.CompetitorAndBoat; +import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.base.RaceColumn; import com.sap.sailing.domain.base.RaceColumnListener; @@ -79,7 +79,7 @@ public class DelayedLeaderboardCorrectionsReplicationTest extends AbstractServer // resolved properly on the replica. final DomainFactory domainFactory = new DomainFactoryImpl((srlid)->null); BoatClass boatClass = domainFactory.getOrCreateBoatClass("29erXX", /* typicallyStartsUpwind */ true); - CompetitorAndBoat hassoWithBoat = AbstractLeaderboardTest.createCompetitorAndBoat("Dr. Hasso Plattner"); // don't create competitor using CompetitorStore + CompetitorWithBoat hassoWithBoat = AbstractLeaderboardTest.createCompetitorWithBoat("Dr. Hasso Plattner"); // don't create competitor using CompetitorStore final DynamicTrackedRace q2YellowTrackedRace = new MockedTrackedRaceWithFixedRank(hassoWithBoat, /* rank */ 1, /* started */ false, boatClass) { private static final long serialVersionUID = 1234L; @Override @@ -98,9 +98,9 @@ public class DelayedLeaderboardCorrectionsReplicationTest extends AbstractServer master.apply(new AddColumnToLeaderboard(Q2, leaderboardName, /* medalRace */ false)); // uses leaderboard's default fleet master.apply(new ConnectTrackedRaceToLeaderboardColumn(masterLeaderboard.getName(), Q2, /* default fleet */ masterLeaderboard.getFleet(null).getName(), q2YellowTrackedRace.getRaceIdentifier())); - master.apply(new UpdateLeaderboardMaxPointsReason(masterLeaderboard.getName(), Q2, hassoWithBoat.getCompetitor().getId().toString(), + master.apply(new UpdateLeaderboardMaxPointsReason(masterLeaderboard.getName(), Q2, hassoWithBoat.getId().toString(), MaxPointsReason.DNF, MillisecondsTimePoint.now())); - assertEquals(MaxPointsReason.DNF, masterLeaderboard.getMaxPointsReason(hassoWithBoat.getCompetitor(), + assertEquals(MaxPointsReason.DNF, masterLeaderboard.getMaxPointsReason(hassoWithBoat, masterLeaderboard.getRaceColumnByName(Q2), MillisecondsTimePoint.now())); // re-load new master from persistence @@ -112,7 +112,7 @@ public class DelayedLeaderboardCorrectionsReplicationTest extends AbstractServer // expecting the correction to not be in the leaderboard because the competitor was not found in the // domain factory's competitor store while loading and therefore the score correction could not immediately // be applied to the leaderboard's real score correction - assertEquals(MaxPointsReason.NONE, masterLeaderboardReloaded.getMaxPointsReason(hassoWithBoat.getCompetitor(), + assertEquals(MaxPointsReason.NONE, masterLeaderboardReloaded.getMaxPointsReason(hassoWithBoat, masterLeaderboardReloaded.getRaceColumnByName(Q2), MillisecondsTimePoint.now())); // replicate the re-loaded environment @@ -130,7 +130,7 @@ public class DelayedLeaderboardCorrectionsReplicationTest extends AbstractServer assertNotNull(replicaLeaderboard.getRaceColumnByName(Q2)); // so far, the replica should also only have the delayed corrections since during deserializing them the // replicatedHasso competitor was not yet known to the replica's competitor store: - assertEquals(MaxPointsReason.NONE, replicaLeaderboard.getMaxPointsReason(hassoWithBoat.getCompetitor(), + assertEquals(MaxPointsReason.NONE, replicaLeaderboard.getMaxPointsReason(hassoWithBoat, replicaLeaderboard.getRaceColumnByName(Q2), MillisecondsTimePoint.now())); logger.info("hasso object ID hash: "+System.identityHashCode(hassoWithBoat)); @@ -151,13 +151,13 @@ public class DelayedLeaderboardCorrectionsReplicationTest extends AbstractServer master.apply(new ConnectTrackedRaceToLeaderboardColumn(masterLeaderboard.getName(), Q2, /* default fleet */ masterLeaderboard.getFleet(null).getName(), q2YellowTrackedRace.getRaceIdentifier())); logger.info("got score correction for competitor "+System.identityHashCode(newMasterScoreCorrections.getCompetitorsThatHaveCorrectionsIn(newMasterQ2).iterator().next())); - assertTrue(Util.contains(newMasterScoreCorrections.getCompetitorsThatHaveCorrectionsIn(newMasterQ2), hassoWithBoat.getCompetitor())); // now score corrections must have been applied from Delayed... + assertTrue(Util.contains(newMasterScoreCorrections.getCompetitorsThatHaveCorrectionsIn(newMasterQ2), hassoWithBoat)); // now score corrections must have been applied from Delayed... // now the delayed corrections are expected to have been resolved: - assertEquals(MaxPointsReason.DNF, master.getLeaderboardByName(leaderboardName).getMaxPointsReason(hassoWithBoat.getCompetitor(), + assertEquals(MaxPointsReason.DNF, master.getLeaderboardByName(leaderboardName).getMaxPointsReason(hassoWithBoat, master.getLeaderboardByName(leaderboardName).getRaceColumnByName(Q2), MillisecondsTimePoint.now())); Thread.sleep(1000); // wait for the tracked race to column connection to be replicated - assertNotNull(replicaLeaderboard.getRaceColumnByName(Q2).getTrackedRace(hassoWithBoat.getCompetitor())); - assertEquals(MaxPointsReason.DNF, replicaLeaderboard.getMaxPointsReason(hassoWithBoat.getCompetitor(), + assertNotNull(replicaLeaderboard.getRaceColumnByName(Q2).getTrackedRace(hassoWithBoat)); + assertEquals(MaxPointsReason.DNF, replicaLeaderboard.getMaxPointsReason(hassoWithBoat, replicaLeaderboard.getRaceColumnByName(Q2), MillisecondsTimePoint.now())); } 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 f6abc55f5eb..31d63af6d53 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 @@ -8,7 +8,7 @@ import org.junit.Before; import org.junit.Test; import com.sap.sailing.domain.base.BoatClass; -import com.sap.sailing.domain.base.CompetitorAndBoat; +import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sailing.domain.common.NoWindException; @@ -66,28 +66,28 @@ public class LeaderboardDiscardingRulesTest { assertNotNull(leaderboard); BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("29erXX", /* typicallyStartsUpwind */ true); - CompetitorAndBoat hasso = AbstractLeaderboardTest.createCompetitorAndBoat("Dr. Hasso Plattner"); + CompetitorWithBoat hasso = AbstractLeaderboardTest.createCompetitorWithBoat("Dr. Hasso Plattner"); final TrackedRace race1 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass); leaderboard.addRace(race1, "R1", /* medalRace */false); final TrackedRace race2 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass); leaderboard.addRace(race2, "R2", /* medalRace */false); - CompetitorAndBoat wolfgang = AbstractLeaderboardTest.createCompetitorAndBoat("Wolfgang Hunger"); + CompetitorWithBoat wolfgang = AbstractLeaderboardTest.createCompetitorWithBoat("Wolfgang Hunger"); final TrackedRace race3 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 123, /* started */ true, boatClass); leaderboard.addRace(race3, "R3", /* medalRace */false); final TrackedRace race4 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 124, /* started */ true, boatClass); leaderboard.addRace(race4, "R4", /* medalRace */false); - leaderboard.getScoreCorrection().correctScore(hasso.getCompetitor(), leaderboard.getRaceColumnByName("R3"), 123.); - leaderboard.getScoreCorrection().correctScore(hasso.getCompetitor(), leaderboard.getRaceColumnByName("R4"), 123.); - leaderboard.getScoreCorrection().correctScore(wolfgang.getCompetitor(), leaderboard.getRaceColumnByName("R1"), 122.); - leaderboard.getScoreCorrection().correctScore(wolfgang.getCompetitor(), leaderboard.getRaceColumnByName("R2"), 122.); + leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R3"), 123.); + leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R4"), 123.); + leaderboard.getScoreCorrection().correctScore(wolfgang, leaderboard.getRaceColumnByName("R1"), 122.); + leaderboard.getScoreCorrection().correctScore(wolfgang, leaderboard.getRaceColumnByName("R2"), 122.); TimePoint now = MillisecondsTimePoint.now(); // Hunger scores better than Plattner in this case because Hunger's two discards are 123/124, keeping 122/122 // whereas Plattner is to discard two of the four 123 results, keeping 123/123, being two points worse than Hunger: - double netPointsHasso = leaderboard.getNetPoints(hasso.getCompetitor(), now); - double netPointsWolfgang = leaderboard.getNetPoints(wolfgang.getCompetitor(), now); + double netPointsHasso = leaderboard.getNetPoints(hasso, now); + double netPointsWolfgang = leaderboard.getNetPoints(wolfgang, now); assertEquals(122.+122., netPointsWolfgang, 0.0000000001); assertEquals(123.+123., netPointsHasso, 0.000000001); } @@ -105,32 +105,32 @@ public class LeaderboardDiscardingRulesTest { assertNotNull(leaderboard); BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("ESS40", /* typicallyStartsUpwind */ true); - CompetitorAndBoat rasmus = AbstractLeaderboardTest.createCompetitorAndBoat("Rasmus"); + CompetitorWithBoat rasmus = AbstractLeaderboardTest.createCompetitorWithBoat("Rasmus"); final TrackedRace race1 = new MockedTrackedRaceWithFixedRank(rasmus, /* rank */ 2, /* started */ true, boatClass); // score 2.0 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); - CompetitorAndBoat jes = AbstractLeaderboardTest.createCompetitorAndBoat("Jes"); + CompetitorWithBoat jes = AbstractLeaderboardTest.createCompetitorWithBoat("Jes"); final TrackedRace race3 = new MockedTrackedRaceWithFixedRank(jes, /* rank */ 2, /* started */ true, boatClass); // score 2.0 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); - CompetitorAndBoat nobody = AbstractLeaderboardTest.createCompetitorAndBoat("Nobody"); + CompetitorWithBoat nobody = AbstractLeaderboardTest.createCompetitorWithBoat("Nobody"); final TrackedRace race5 = new MockedTrackedRaceWithFixedRank(nobody, /* rank */ 3, /* started */ true, boatClass); // score 1.0 leaderboard.addRace(race5, "R5", /* medalRace */false); - leaderboard.getScoreCorrection().correctScore(rasmus.getCompetitor(), leaderboard.getRaceColumnByName("R3"), 2.0); - leaderboard.getScoreCorrection().correctScore(rasmus.getCompetitor(), leaderboard.getRaceColumnByName("R4"), 2.0); - leaderboard.getScoreCorrection().correctScore(jes.getCompetitor(), leaderboard.getRaceColumnByName("R1"), 3.0); - leaderboard.getScoreCorrection().correctScore(jes.getCompetitor(), leaderboard.getRaceColumnByName("R2"), 3.0); + leaderboard.getScoreCorrection().correctScore(rasmus, leaderboard.getRaceColumnByName("R3"), 2.0); + leaderboard.getScoreCorrection().correctScore(rasmus, leaderboard.getRaceColumnByName("R4"), 2.0); + leaderboard.getScoreCorrection().correctScore(jes, leaderboard.getRaceColumnByName("R1"), 3.0); + leaderboard.getScoreCorrection().correctScore(jes, leaderboard.getRaceColumnByName("R2"), 3.0); TimePoint now = MillisecondsTimePoint.now(); // Jes scores better than Rasmus in this case because Jes's two discards are 1.0/2.0, keeping 3.0/3.0 // whereas Rasmus is to discard two of the four 2.0 results, keeping 2.0/2.0, being two points worse than Hunger: - double netPointsRasmus = leaderboard.getNetPoints(rasmus.getCompetitor(), now); - double netPointsJes = leaderboard.getNetPoints(jes.getCompetitor(), now); + double netPointsRasmus = leaderboard.getNetPoints(rasmus, now); + double netPointsJes = leaderboard.getNetPoints(jes, now); assertEquals(3, Util.size(leaderboard.getCompetitors())); assertEquals(3.+3., netPointsJes, 0.0000000001); assertEquals(2.+2., netPointsRasmus, 0.000000001); @@ -149,30 +149,30 @@ public class LeaderboardDiscardingRulesTest { assertNotNull(leaderboard); BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("29erXX", /* typicallyStartsUpwind */ true); - CompetitorAndBoat hasso = AbstractLeaderboardTest.createCompetitorAndBoat("Dr. Hasso Plattner"); + CompetitorWithBoat hasso = AbstractLeaderboardTest.createCompetitorWithBoat("Dr. Hasso Plattner"); final TrackedRace race1 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass); leaderboard.addRace(race1, "R1", /* medalRace */false); final TrackedRace race2 = new MockedTrackedRaceWithFixedRank(hasso, /* rank */ 123, /* started */ true, boatClass); leaderboard.addRace(race2, "R2", /* medalRace */false); - CompetitorAndBoat wolfgang = AbstractLeaderboardTest.createCompetitorAndBoat("Wolfgang Hunger"); + CompetitorWithBoat wolfgang = AbstractLeaderboardTest.createCompetitorWithBoat("Wolfgang Hunger"); final TrackedRace race3 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 123, /* started */ true, boatClass); leaderboard.addRace(race3, "R3", /* medalRace */false); final TrackedRace race4 = new MockedTrackedRaceWithFixedRank(wolfgang, /* rank */ 124, /* started */ true, boatClass); leaderboard.addRace(race4, "R4", /* medalRace */false); - leaderboard.getScoreCorrection().correctScore(hasso.getCompetitor(), leaderboard.getRaceColumnByName("R3"), 123.); - leaderboard.getScoreCorrection().correctScore(hasso.getCompetitor(), leaderboard.getRaceColumnByName("R4"), 123.); - leaderboard.getScoreCorrection().setMaxPointsReason(hasso.getCompetitor(), leaderboard.getRaceColumnByName("R1"), MaxPointsReason.DNE); - leaderboard.getScoreCorrection().correctScore(hasso.getCompetitor(), leaderboard.getRaceColumnByName("R1"), 123.); - leaderboard.getScoreCorrection().correctScore(wolfgang.getCompetitor(), leaderboard.getRaceColumnByName("R1"), 122.); - leaderboard.getScoreCorrection().correctScore(wolfgang.getCompetitor(), leaderboard.getRaceColumnByName("R2"), 122.); + leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R3"), 123.); + leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R4"), 123.); + leaderboard.getScoreCorrection().setMaxPointsReason(hasso, leaderboard.getRaceColumnByName("R1"), MaxPointsReason.DNE); + leaderboard.getScoreCorrection().correctScore(hasso, leaderboard.getRaceColumnByName("R1"), 123.); + leaderboard.getScoreCorrection().correctScore(wolfgang, leaderboard.getRaceColumnByName("R1"), 122.); + leaderboard.getScoreCorrection().correctScore(wolfgang, leaderboard.getRaceColumnByName("R2"), 122.); TimePoint now = MillisecondsTimePoint.now(); // Hunger scores better than Plattner in this case because Hunger's two discards are 123/124, keeping 122/122 // whereas Plattner is to discard two of the four 123 results, keeping 123/123, being two points worse than Hunger: - double netPointsHasso = leaderboard.getNetPoints(hasso.getCompetitor(), now); - double netPointsWolfgang = leaderboard.getNetPoints(wolfgang.getCompetitor(), now); + double netPointsHasso = leaderboard.getNetPoints(hasso, now); + double netPointsWolfgang = leaderboard.getNetPoints(wolfgang, now); assertEquals(122.+122., netPointsWolfgang, 0.0000000001); assertEquals(123.+123., netPointsHasso, 0.000000001); }