From 812fef2f220fc804256a655bf2dbc6629b82b145 Mon Sep 17 00:00:00 2001 From: Frank Mittag Date: Mon, 4 Dec 2017 14:38:59 +0100 Subject: [PATCH] Removed not needed RegattaLogRegisterAndBoatEvent after discussion with Axel. All registration on regatta level will be of type RegattaLogRegisterCompetitorEvent where the passed competitor is either of type Competitor or CompetitorWithBoat depending on the regatta type --- .../persistence/DomainObjectFactory.java | 7 +- .../impl/DomainObjectFactoryImpl.java | 76 ++++++++----------- .../impl/MongoObjectFactoryImpl.java | 11 +-- .../impl/MongoRegattaLogStoreVisitor.java | 6 -- .../impl/CreateAndTrackWithRaceLogTest.java | 10 ++- ...RaceLogRegisterCompetitorAndBoatEvent.java | 6 ++ .../RaceLogRegisterCompetitorEvent.java | 6 +- .../regatta/RegattaLogEventVisitor.java | 3 - .../events/RegattaLogRegisterBoatEvent.java | 3 + ...attaLogRegisterCompetitorAndBoatEvent.java | 16 ---- .../RegattaLogRegisterCompetitorEvent.java | 10 ++- ...LogRegisterCompetitorAndBoatEventImpl.java | 39 ---------- ...RegattaLogRegisterCompetitorEventImpl.java | 12 ++- .../impl/BaseRegattaLogEventVisitor.java | 5 -- .../regatta/impl/RegattaLogEventListener.java | 6 -- .../events/RegisterCompetitorEvent.java | 6 +- .../impl/BaseRegisterCompetitorEventImpl.java | 15 ++-- ...mpetitorProviderCacheInvalidationTest.java | 18 ++--- ...ttaLogEventNotificationForwardingTest.java | 22 +++--- .../domain/test/mock/MockedTrackedRace.java | 6 +- .../sailing/domain/base/impl/RegattaImpl.java | 19 ++--- .../impl/AbstractLeaderboardImpl.java | 25 +++--- ...ProviderFromRaceColumnsAndRegattaLike.java | 6 +- ...ProviderFromRaceColumnsAndRegattaLike.java | 6 +- ...aLeaderboardWithCompetitorElimination.java | 12 +-- .../domain/regattalike/HasRegattaLike.java | 10 +-- .../LeaderboardThatHasRegattaLike.java | 5 +- .../gwt/ui/server/SailingServiceImpl.java | 2 +- ...estStoringAndLoadingEventsAndRegattas.java | 6 +- ...LeaderboardsResourceCheckinAndOutTest.java | 10 ++- .../gateway/jaxrs/api/RegattasResource.java | 6 +- .../test/RegattaLogReplicationTest.java | 4 +- .../server/test/MasterDataImportTest.java | 13 ++-- .../impl/PersistentCompetitorStore.java | 9 +-- 34 files changed, 169 insertions(+), 247 deletions(-) delete mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterCompetitorAndBoatEvent.java delete mode 100644 java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorAndBoatEventImpl.java diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java index 1bd49c6a10f..e12f3c5a3db 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/DomainObjectFactory.java @@ -132,7 +132,12 @@ public interface DomainObjectFactory { RegattaLog loadRegattaLog(RegattaLikeIdentifier identifier); - Collection renameCompetitorsCollectionAndloadAllLegacyCompetitors(); + /** + * Migrates the old COMPETITORS collection and the new BOATS collection. + * The old COLLECTION is will be renamed to COMPETITORS_BAK for deveopment and test purposes + * @return a collection of the old type where all competitors contain their boats or null if migration was not required. + */ + Collection migrateLegacyCompetitorsIfRequired(); /** * Loads all competitors (with and without embedded boats) and resolves them via the domain factory. 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 f3762ad0114..d1ac5bafeaf 100644 --- 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 @@ -109,7 +109,6 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorSensorDataMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterBoatEvent; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent; @@ -123,7 +122,6 @@ import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceCo import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceCompetitorMappingEventImpl; import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceMarkMappingEventImpl; import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterBoatEventImpl; -import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorAndBoatEventImpl; import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl; import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRevokeEventImpl; import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEventImpl; @@ -1951,8 +1949,6 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { return loadRegattaLogRegisterBoatEvent(createdAt, author, logicalTimePoint, id, dbObject); } else if (eventClass.equals(RegattaLogRegisterCompetitorEvent.class.getSimpleName())) { return loadRegattaLogRegisterCompetitorEvent(createdAt, author, logicalTimePoint, id, dbObject); - } else if (eventClass.equals(RegattaLogRegisterCompetitorAndBoatEvent.class.getSimpleName())) { - return loadRegattaLogRegisterCompetitorAndBoatEvent(createdAt, author, logicalTimePoint, id, dbObject); } else if (eventClass.equals(RegattaLogSetCompetitorTimeOnTimeFactorEvent.class.getSimpleName())) { return loadRegattaLogSetCompetitorTimeOnTimeFactorEvent(createdAt, author, logicalTimePoint, id, dbObject); } else if (eventClass @@ -2051,31 +2047,6 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { return result; } - private RegattaLogRegisterCompetitorAndBoatEvent loadRegattaLogRegisterCompetitorAndBoatEvent(TimePoint createdAt, - AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, DBObject dbObject) { - Competitor comp = getCompetitorByID(dbObject); - Boat boat = getBoatByID(dbObject); - final RegattaLogRegisterCompetitorAndBoatEvent result; - if (comp == null || boat == null) { - result = null; - if (comp == null) { - logger.log(Level.SEVERE, "Couldn't resolve competitor with ID " - + dbObject.get(FieldNames.REGATTA_LOG_COMPETITOR_ID.name()) - + " from registration event with ID " + id + ". Skipping this competitor registration."); - } - if (boat == null) { - logger.log(Level.SEVERE, - "Couldn't resolve boat with ID " + dbObject.get(FieldNames.REGATTA_LOG_BOAT_ID.name()) - + " from registration event with ID " + id - + ". Skipping this competitor registration."); - } - } else { - result = new RegattaLogRegisterCompetitorAndBoatEventImpl(createdAt, logicalTimePoint, author, id, comp, - boat); - } - return result; - } - private RegattaLogCloseOpenEndedDeviceMappingEvent loadRegattaLogCloseOpenEndedDeviceMappingEvent( TimePoint createdAt, AbstractLogEventAuthor author, TimePoint logicalTimePoint, Serializable id, DBObject dbObject) { @@ -2400,21 +2371,40 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory { } @Override - public Collection renameCompetitorsCollectionAndloadAllLegacyCompetitors() { + public Collection migrateLegacyCompetitorsIfRequired() { + ArrayList result = null; + + boolean competitorsCollectionExist = database.collectionExists(CollectionNames.COMPETITORS.name()); + boolean boatsCollectionCollectionExist = database.collectionExists(CollectionNames.BOATS.name()); DBCollection orginalCompetitorCollection = database.getCollection(CollectionNames.COMPETITORS.name()); - orginalCompetitorCollection.rename(CollectionNames.COMPETITORS_BAK.name(), /* dropTarget */ true); - DBCollection collection = database.getCollection(CollectionNames.COMPETITORS_BAK.name()); - ArrayList result = new ArrayList<>(); - try { - for (DBObject o : collection.find()) { - JSONObject json = Helpers.toJSONObjectSafe(new JSONParser().parse(JSON.serialize(o))); - CompetitorWithBoat c = legacyCompetitorWithBoatDeserializer.deserialize(json); - result.add(c); - } - } catch (Exception e) { - logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load competitors."); - logger.log(Level.SEVERE, "renameCompetitorsCollectionAndloadAllLegacyCompetitors", e); - } + + // there is a corner case where tests can create just one competitor without boat + // before we migrate we need to check if this case + if (competitorsCollectionExist && !boatsCollectionCollectionExist) { + long competitorCount = orginalCompetitorCollection.count(); + if (competitorCount > 0) { + DBObject oneCompetitorDbObject = orginalCompetitorCollection.findOne(); + Object boatObject = oneCompetitorDbObject.get("boat"); + // only in case such a boat object exist we need a migration, because the new type stores only a boatID or no boat at all + if (boatObject != null) { + result = new ArrayList<>(); + + orginalCompetitorCollection.rename(CollectionNames.COMPETITORS_BAK.name(), /* dropTarget */ true); + DBCollection collection = database.getCollection(CollectionNames.COMPETITORS_BAK.name()); + try { + for (DBObject o : collection.find()) { + JSONObject json = Helpers.toJSONObjectSafe(new JSONParser().parse(JSON.serialize(o))); + CompetitorWithBoat c = legacyCompetitorWithBoatDeserializer.deserialize(json); + result.add(c); + } + } catch (Exception e) { + logger.log(Level.SEVERE, "Error connecting to MongoDB, unable to load competitors."); + logger.log(Level.SEVERE, "renameCompetitorsCollectionAndloadAllLegacyCompetitors", e); + } + } + } + } + return result; } diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index 146e66d2194..9e18d77f5ef 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -62,7 +62,6 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterBoatEvent; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent; @@ -1345,7 +1344,7 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { @Override public void storeCompetitor(Competitor competitor) { if (competitor instanceof CompetitorWithBoat) { - storeCompetitorWithBoat((CompetitorWithBoat) competitor); + storeCompetitorWithBoat((CompetitorWithBoat) competitor); } else { storeCompetitorWithoutBoat(competitor); } @@ -1640,14 +1639,6 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { storeRegattaLogEvent(regattaLikeId, result); } - public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogRegisterCompetitorAndBoatEvent event) { - DBObject result = createBasicRegattaLogEventDBObject(event); - result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogRegisterCompetitorAndBoatEvent.class.getSimpleName()); - result.put(FieldNames.REGATTA_LOG_COMPETITOR_ID.name(), event.getCompetitor().getId()); - result.put(FieldNames.REGATTA_LOG_BOAT_ID.name(), event.getBoat().getId()); - storeRegattaLogEvent(regattaLikeId, result); - } - public void storeRegattaLogEvent(RegattaLikeIdentifier regattaLikeId, RegattaLogCloseOpenEndedDeviceMappingEvent event) { DBObject result = createBasicRegattaLogEventDBObject(event); result.put(FieldNames.REGATTA_LOG_EVENT_CLASS.name(), RegattaLogCloseOpenEndedDeviceMappingEvent.class.getSimpleName()); diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRegattaLogStoreVisitor.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRegattaLogStoreVisitor.java index 2a3d97d0671..dc340eda400 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRegattaLogStoreVisitor.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRegattaLogStoreVisitor.java @@ -9,7 +9,6 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorSensorDataMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterBoatEvent; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent; @@ -64,11 +63,6 @@ public class MongoRegattaLogStoreVisitor implements RegattaLogEventVisitor { mongoObjectFactory.storeRegattaLogEvent(regattaLikeIdentifier, event); } - @Override - public void visit(RegattaLogRegisterCompetitorAndBoatEvent event) { - mongoObjectFactory.storeRegattaLogEvent(regattaLikeIdentifier, event); - } - @Override public void visit(RegattaLogSetCompetitorTimeOnTimeFactorEvent event) { mongoObjectFactory.storeRegattaLogEvent(regattaLikeIdentifier, event); diff --git a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java index 55a514de88b..27f975493f5 100644 --- a/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java +++ b/java/com.sap.sailing.domain.racelogtrackingadapter.test/src/com/sap/sailing/domain/racelogtracking/test/impl/CreateAndTrackWithRaceLogTest.java @@ -26,10 +26,11 @@ import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterComp import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogUseCompetitorsAndBoatsFromRaceLogEventImpl; import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceCompetitorMappingEventImpl; -import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorAndBoatEventImpl; +import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl; 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.CompetitorWithBoat; import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.RaceColumn; @@ -37,6 +38,7 @@ import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.base.Series; import com.sap.sailing.domain.base.impl.BoatClassImpl; import com.sap.sailing.domain.base.impl.BoatImpl; +import com.sap.sailing.domain.base.impl.DynamicBoat; import com.sap.sailing.domain.base.impl.FleetImpl; import com.sap.sailing.domain.base.impl.RegattaImpl; import com.sap.sailing.domain.base.impl.SeriesImpl; @@ -267,13 +269,13 @@ public class CreateAndTrackWithRaceLogTest extends RaceLogTrackingTestHelper { // add a mapping and one fix in, one out of mapping Boat boat1 = new BoatImpl("id12345", "boat1", boatClass, /* sailID */ null); - Competitor comp1 = DomainFactory.INSTANCE.getOrCreateCompetitor("comp1", "comp1", "c1", null, null, null, null, - /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); + CompetitorWithBoat comp1 = DomainFactory.INSTANCE.getOrCreateCompetitorWithBoat("comp1", "comp1", "c1", null, null, null, null, + /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null, (DynamicBoat) boat1); DeviceIdentifier dev1 = new SmartphoneImeiIdentifier("dev1"); regattaLog.add(new RegattaLogDeviceCompetitorMappingEventImpl(t(), t(), author, UUID.randomUUID(), comp1, dev1, t(0), t(10))); addFixes0(dev1); - regattaLog.add(new RegattaLogRegisterCompetitorAndBoatEventImpl(t(), t(), author, UUID.randomUUID(), comp1, boat1)); + regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(t(), t(), author, UUID.randomUUID(), comp1)); raceLog.add(new RaceLogStartOfTrackingEventImpl(t(0), author, /* passId */ 0)); // start tracking diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/RaceLogRegisterCompetitorAndBoatEvent.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/RaceLogRegisterCompetitorAndBoatEvent.java index 4c48ba84796..35a60ed3c31 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/RaceLogRegisterCompetitorAndBoatEvent.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/RaceLogRegisterCompetitorAndBoatEvent.java @@ -4,6 +4,12 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogEvent; import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor; import com.sap.sailing.domain.abstractlog.shared.events.RegisterCompetitorAndBoatEvent; +/** + * The event registers a {@link Competitor} or {@link CompetitorWithBoat} on a race. + * The competitor type is determined by the {@link Regatta} attribute 'canBoatsOfCompetitorsChangePerRace' + * If 'canBoatsOfCompetitorsChangePerRace' is true the type must be {@link Competitor} + * If 'canBoatsOfCompetitorsChangePerRace' is false the type must be {@link CompetitorWithBoat} + */ public interface RaceLogRegisterCompetitorAndBoatEvent extends RaceLogEvent, RegisterCompetitorAndBoatEvent { diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/RaceLogRegisterCompetitorEvent.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/RaceLogRegisterCompetitorEvent.java index 5d526694b96..6a40cc049e0 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/RaceLogRegisterCompetitorEvent.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/tracking/RaceLogRegisterCompetitorEvent.java @@ -5,8 +5,10 @@ import com.sap.sailing.domain.abstractlog.race.RaceLogEventVisitor; import com.sap.sailing.domain.abstractlog.shared.events.RegisterCompetitorEvent; /** - * ATTENTION: This is the old legacy race log event for a competitor registration from the time before bug2822 - * DON'T delete or rename for backward compatibility + * The event registers a {@link Competitor} or {@link CompetitorWithBoat} on a race. + * The competitor type is determined by the {@link Regatta} attribute 'canBoatsOfCompetitorsChangePerRace' + * If 'canBoatsOfCompetitorsChangePerRace' is true the type must be {@link Competitor} + * If 'canBoatsOfCompetitorsChangePerRace' is false the type must be {@link CompetitorWithBoat} */ public interface RaceLogRegisterCompetitorEvent extends RaceLogEvent, RegisterCompetitorEvent { diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/RegattaLogEventVisitor.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/RegattaLogEventVisitor.java index 86d9f917ecc..d4dd4a63a61 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/RegattaLogEventVisitor.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/RegattaLogEventVisitor.java @@ -6,7 +6,6 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorSensorDataMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterBoatEvent; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent; @@ -27,8 +26,6 @@ public interface RegattaLogEventVisitor { void visit(RegattaLogRegisterCompetitorEvent event); - void visit(RegattaLogRegisterCompetitorAndBoatEvent event); - void visit(RegattaLogSetCompetitorTimeOnTimeFactorEvent event); void visit(RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent event); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterBoatEvent.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterBoatEvent.java index 5135c57e4ea..65aed03c3b6 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterBoatEvent.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterBoatEvent.java @@ -4,6 +4,9 @@ import com.sap.sailing.domain.abstractlog.Revokable; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent; import com.sap.sailing.domain.base.Boat; +/** +* The event registers a standalone {@link Boat} on a regatta. +*/ public interface RegattaLogRegisterBoatEvent extends RegattaLogEvent, Revokable { Boat getBoat(); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterCompetitorAndBoatEvent.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterCompetitorAndBoatEvent.java deleted file mode 100644 index 0f9ba9f3e91..00000000000 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterCompetitorAndBoatEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.sap.sailing.domain.abstractlog.regatta.events; - -import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; -import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent; -import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor; -import com.sap.sailing.domain.abstractlog.shared.events.RegisterCompetitorAndBoatEvent; - -/** - * Registers a competitor together with a boat for {@link RegattaLog} tracked regattas. - * @author Frank Mittag - * - */ -public interface RegattaLogRegisterCompetitorAndBoatEvent - extends RegattaLogEvent, RegisterCompetitorAndBoatEvent { - -} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterCompetitorEvent.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterCompetitorEvent.java index 29374f85624..4c253bf9c85 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterCompetitorEvent.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/RegattaLogRegisterCompetitorEvent.java @@ -3,11 +3,15 @@ package com.sap.sailing.domain.abstractlog.regatta.events; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor; import com.sap.sailing.domain.abstractlog.shared.events.RegisterCompetitorEvent; +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.base.CompetitorWithBoat; /** - * ATTENTION: This is the old legacy regatta log event for a competitor registration from the time before bug2822 - * DON'T delete or rename for backward compatibility - */ +* The event registers a {@link Competitor} or {@link CompetitorWithBoat} on a regatta. +* The competitor type is determined by the {@link Regatta} attribute 'canBoatsOfCompetitorsChangePerRace' +* If 'canBoatsOfCompetitorsChangePerRace' is true the type must be {@link Competitor} +* If 'canBoatsOfCompetitorsChangePerRace' is false the type must be {@link CompetitorWithBoat} +*/ public interface RegattaLogRegisterCompetitorEvent extends RegattaLogEvent, RegisterCompetitorEvent { diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorAndBoatEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorAndBoatEventImpl.java deleted file mode 100644 index b264687eb85..00000000000 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorAndBoatEventImpl.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.sap.sailing.domain.abstractlog.regatta.events.impl; - -import java.io.Serializable; - -import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; -import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; -import com.sap.sailing.domain.abstractlog.shared.events.impl.BaseRegisterCompetitorAndBoatEventImpl; -import com.sap.sailing.domain.base.Boat; -import com.sap.sailing.domain.base.Competitor; -import com.sap.sse.common.TimePoint; - -public class RegattaLogRegisterCompetitorAndBoatEventImpl extends BaseRegisterCompetitorAndBoatEventImpl - implements RegattaLogRegisterCompetitorAndBoatEvent { - private static final long serialVersionUID = 3577775910921730978L; - - /** - * @throws IllegalArgumentException - * if {@code competitor} is null - */ - public RegattaLogRegisterCompetitorAndBoatEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, - AbstractLogEventAuthor author, Serializable id, Competitor competitor, Boat boat) throws IllegalArgumentException { - super(createdAt, logicalTimePoint, author, id, competitor, boat); - } - - /** - * @throws IllegalArgumentException - * if {@code competitor} is null - */ - public RegattaLogRegisterCompetitorAndBoatEventImpl(TimePoint logicalTimePoint, - AbstractLogEventAuthor author, Competitor competitor, Boat boat) throws IllegalArgumentException { - super(logicalTimePoint, author, competitor, boat); - } - - @Override - public void accept(RegattaLogEventVisitor visitor) { - visitor.visit(this); - } -} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorEventImpl.java index ffdb74f0e90..988642ebe66 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorEventImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/events/impl/RegattaLogRegisterCompetitorEventImpl.java @@ -6,9 +6,17 @@ import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; import com.sap.sailing.domain.abstractlog.shared.events.impl.BaseRegisterCompetitorEventImpl; +import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sse.common.TimePoint; +/** + * This event can be used for 2 kinds of competitor registrations. + * If 'canBoatsOfCompetitorsChangePerRace' is true for a regatta the event registers a standalone {@link Competitor} without a boat. + * If 'canBoatsOfCompetitorsChangePerRace' is false the event registers a {@link CompetitorWithBoat}. + * @author Frank Mittag + * + */ public class RegattaLogRegisterCompetitorEventImpl extends BaseRegisterCompetitorEventImpl implements RegattaLogRegisterCompetitorEvent { private static final long serialVersionUID = -5114645637316367845L; @@ -18,7 +26,7 @@ public class RegattaLogRegisterCompetitorEventImpl extends BaseRegisterCompetito * if {@code competitor} is null */ public RegattaLogRegisterCompetitorEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, - AbstractLogEventAuthor author, Serializable id, CompetitorWithBoat competitor) throws IllegalArgumentException { + AbstractLogEventAuthor author, Serializable id, Competitor competitor) throws IllegalArgumentException { super(createdAt, logicalTimePoint, author, id, competitor); } @@ -27,7 +35,7 @@ public class RegattaLogRegisterCompetitorEventImpl extends BaseRegisterCompetito * if {@code competitor} is null */ public RegattaLogRegisterCompetitorEventImpl(TimePoint logicalTimePoint, - AbstractLogEventAuthor author, CompetitorWithBoat competitor) throws IllegalArgumentException { + AbstractLogEventAuthor author, Competitor competitor) throws IllegalArgumentException { super(logicalTimePoint, author, competitor); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/impl/BaseRegattaLogEventVisitor.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/impl/BaseRegattaLogEventVisitor.java index 409064f0827..0b98c112dbc 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/impl/BaseRegattaLogEventVisitor.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/impl/BaseRegattaLogEventVisitor.java @@ -7,7 +7,6 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorSensorDataMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterBoatEvent; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent; @@ -43,10 +42,6 @@ public class BaseRegattaLogEventVisitor implements RegattaLogEventVisitor { public void visit(RegattaLogRegisterCompetitorEvent event) { } - @Override - public void visit(RegattaLogRegisterCompetitorAndBoatEvent event) { - } - @Override public void visit(RegattaLogSetCompetitorTimeOnTimeFactorEvent event) { } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/impl/RegattaLogEventListener.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/impl/RegattaLogEventListener.java index 7f4ae3f34ca..6ce93260a00 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/impl/RegattaLogEventListener.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/regatta/impl/RegattaLogEventListener.java @@ -8,7 +8,6 @@ import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompeti import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorSensorDataMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMarkMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterBoatEvent; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogSetCompetitorTimeOnDistanceAllowancePerNauticalMileEvent; @@ -47,11 +46,6 @@ public abstract class RegattaLogEventListener implements RegattaLogEventVisitor eventAdded(event); } - @Override - public void visit(RegattaLogRegisterCompetitorAndBoatEvent event) { - eventAdded(event); - } - @Override public void visit(RegattaLogSetCompetitorTimeOnTimeFactorEvent event) { eventAdded(event); diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/RegisterCompetitorEvent.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/RegisterCompetitorEvent.java index 66f6de6c905..95897699c6c 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/RegisterCompetitorEvent.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/RegisterCompetitorEvent.java @@ -5,13 +5,9 @@ import com.sap.sailing.domain.abstractlog.Revokable; import com.sap.sailing.domain.abstractlog.race.RaceLog; import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.CompetitorWithBoat; import com.sap.sse.common.IsManagedByCache; /** - * ATTENTION: This is the old legacy log event for a competitor registration from the time before bug2822 - * DON'T delete or rename for backward compatibility - * * Register a competitor for {@link RaceLog} and {@link RegattaLog} tracked races and regattas. * * A dummy {@link Competitor} implementation with only an {@link Competitor#getId() id} may be used, @@ -22,5 +18,5 @@ import com.sap.sse.common.IsManagedByCache; * */ public interface RegisterCompetitorEvent extends AbstractLogEvent, Revokable { - CompetitorWithBoat getCompetitor(); + Competitor getCompetitor(); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseRegisterCompetitorEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseRegisterCompetitorEventImpl.java index d317da64a5e..ac71017500e 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseRegisterCompetitorEventImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/shared/events/impl/BaseRegisterCompetitorEventImpl.java @@ -5,20 +5,20 @@ import java.io.Serializable; import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor; import com.sap.sailing.domain.abstractlog.impl.AbstractLogEventImpl; import com.sap.sailing.domain.abstractlog.shared.events.RegisterCompetitorEvent; -import com.sap.sailing.domain.base.CompetitorWithBoat; +import com.sap.sailing.domain.base.Competitor; import com.sap.sse.common.TimePoint; public abstract class BaseRegisterCompetitorEventImpl extends AbstractLogEventImpl implements RegisterCompetitorEvent { private static final long serialVersionUID = -30864810737555657L; - private final CompetitorWithBoat competitor; + private final Competitor competitor; /** * @throws IllegalArgumentException * if {@code competitor} is null */ public BaseRegisterCompetitorEventImpl(TimePoint createdAt, TimePoint logicalTimePoint, - AbstractLogEventAuthor author, Serializable pId, CompetitorWithBoat competitor) throws IllegalArgumentException { + AbstractLogEventAuthor author, Serializable pId, Competitor competitor) throws IllegalArgumentException { super(createdAt, logicalTimePoint, author, pId); checkCompetitor(competitor); this.competitor = competitor; @@ -29,21 +29,18 @@ public abstract class BaseRegisterCompetitorEventImpl extends Abstract * if {@code competitor} is null */ public BaseRegisterCompetitorEventImpl(TimePoint logicalTimePoint, AbstractLogEventAuthor author, - CompetitorWithBoat competitor) throws IllegalArgumentException { + Competitor competitor) throws IllegalArgumentException { this(now(), logicalTimePoint, author, randId(), competitor); } - private static void checkCompetitor(CompetitorWithBoat competitor) throws IllegalArgumentException { + private static void checkCompetitor(Competitor competitor) throws IllegalArgumentException { if (competitor == null) { throw new IllegalArgumentException("Competitor may not be null"); } - if (competitor.getBoat() == null) { - throw new IllegalArgumentException("BoaCompetitor may not be null"); - } } @Override - public CompetitorWithBoat getCompetitor() { + public Competitor getCompetitor() { return competitor; } diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CompetitorProviderCacheInvalidationTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CompetitorProviderCacheInvalidationTest.java index 0c5bddaeee7..571ae1ba998 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CompetitorProviderCacheInvalidationTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/CompetitorProviderCacheInvalidationTest.java @@ -24,8 +24,8 @@ import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsAnd import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogRegisterCompetitorAndBoatEventImpl; import com.sap.sailing.domain.abstractlog.race.tracking.impl.RaceLogUseCompetitorsAndBoatsFromRaceLogEventImpl; import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; -import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorAndBoatEventImpl; +import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; +import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl; import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Series; @@ -105,10 +105,10 @@ public class CompetitorProviderCacheInvalidationTest extends AbstractLeaderboard regatta.removeSeries(seriesToRemove); } RegattaLog regattaLog = regattaLeaderboard.getRegatta().getRegattaLog(); - final Map competitorOnRegattaLogRegistrationEvents = new HashMap<>(); + final Map competitorOnRegattaLogRegistrationEvents = new HashMap<>(); final LogEventAuthorImpl author = new LogEventAuthorImpl("Me", 0); for (Competitor c : compLists[0]) { - final RegattaLogRegisterCompetitorAndBoatEvent registerCompetitorEvent = new RegattaLogRegisterCompetitorAndBoatEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), author, UUID.randomUUID(), c, boats.get(c)); + final RegattaLogRegisterCompetitorEvent registerCompetitorEvent = new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), author, UUID.randomUUID(), c); regattaLog.add(registerCompetitorEvent); competitorOnRegattaLogRegistrationEvents.put(c, registerCompetitorEvent); } @@ -185,7 +185,7 @@ public class CompetitorProviderCacheInvalidationTest extends AbstractLeaderboard flexibleLeaderboard.addRaceColumn("R1", /* medalRace */ false); RegattaLog regattaLog = flexibleLeaderboard.getRegattaLog(); for (Competitor c : compLists[0]) { - regattaLog.add(new RegattaLogRegisterCompetitorAndBoatEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), new LogEventAuthorImpl("Me", 0), UUID.randomUUID(), c, boats.get(c))); + regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), new LogEventAuthorImpl("Me", 0), UUID.randomUUID(), c)); } Set expected = new HashSet<>(compLists[0]); Set actual = new HashSet<>(); @@ -203,7 +203,7 @@ public class CompetitorProviderCacheInvalidationTest extends AbstractLeaderboard flexibleLeaderboard.addRaceColumn("R1", /* medalRace */ false); RegattaLog regattaLog = flexibleLeaderboard.getRegattaLog(); for (Competitor c : compLists[0]) { - regattaLog.add(new RegattaLogRegisterCompetitorAndBoatEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), new LogEventAuthorImpl("Me", 0), UUID.randomUUID(), c, boats.get(c))); + regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), new LogEventAuthorImpl("Me", 0), UUID.randomUUID(), c)); } RaceLog raceLog = flexibleLeaderboard.getRacelog("R1", LeaderboardNameConstants.DEFAULT_FLEET_NAME); final LogEventAuthorImpl author = new LogEventAuthorImpl("Me", 0); @@ -326,10 +326,10 @@ public class CompetitorProviderCacheInvalidationTest extends AbstractLeaderboard @Test public void testSimpleCompetitorListOnRegattaLogInRegattaLeaderboard() throws NotRevokableException { RegattaLog regattaLog = regattaLeaderboard.getRegatta().getRegattaLog(); - final Map competitorOnRegattaLogRegistrationEvents = new HashMap<>(); + final Map competitorOnRegattaLogRegistrationEvents = new HashMap<>(); final LogEventAuthorImpl author = new LogEventAuthorImpl("Me", 0); for (Competitor c : compLists[0]) { - final RegattaLogRegisterCompetitorAndBoatEvent registerCompetitorEvent = new RegattaLogRegisterCompetitorAndBoatEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), author, UUID.randomUUID(), c, boats.get(c)); + final RegattaLogRegisterCompetitorEvent registerCompetitorEvent = new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), author, UUID.randomUUID(), c); regattaLog.add(registerCompetitorEvent); competitorOnRegattaLogRegistrationEvents.put(c, registerCompetitorEvent); } @@ -362,7 +362,7 @@ public class CompetitorProviderCacheInvalidationTest extends AbstractLeaderboard final RegattaLog regattaLog = regattaLeaderboard.getRegatta().getRegattaLog(); final LogEventAuthorImpl author = new LogEventAuthorImpl("Me", 0); for (Competitor c : compLists[0]) { - regattaLog.add(new RegattaLogRegisterCompetitorAndBoatEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), author, UUID.randomUUID(), c, boats.get(c))); + regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), author, UUID.randomUUID(), c)); } final RaceLog raceLog = regattaLeaderboard.getRacelog("R1", "Yellow"); final int passId = 1; diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/RegattaLogEventNotificationForwardingTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/RegattaLogEventNotificationForwardingTest.java index 56601d39313..724ca4f9615 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/RegattaLogEventNotificationForwardingTest.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/RegattaLogEventNotificationForwardingTest.java @@ -15,8 +15,8 @@ import org.junit.Test; import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; -import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorAndBoatEventImpl; +import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; +import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl; import com.sap.sailing.domain.base.DomainFactory; import com.sap.sailing.domain.base.RaceColumnListener; import com.sap.sailing.domain.base.Regatta; @@ -74,7 +74,7 @@ public class RegattaLogEventNotificationForwardingTest extends AbstractSerializa receivedRegattaLogEvent[0] = event; } }); - final RegattaLogRegisterCompetitorAndBoatEvent event = createRegattaLogEvent(); + final RegattaLogRegisterCompetitorEvent event = createRegattaLogEvent(); leaderboard.getRegattaLog().add(event); assertSame(event, receivedRegattaLogEvent[0]); } @@ -96,14 +96,14 @@ public class RegattaLogEventNotificationForwardingTest extends AbstractSerializa receivedRegattaLogEvent[0] = event; } }); - final RegattaLogRegisterCompetitorAndBoatEvent event = createRegattaLogEvent(); + final RegattaLogRegisterCompetitorEvent event = createRegattaLogEvent(); deserializedLeaderboard.getRegattaLog().add(event); assertSame(event, receivedRegattaLogEvent[0]); } - private RegattaLogRegisterCompetitorAndBoatEvent createRegattaLogEvent() { - final RegattaLogRegisterCompetitorAndBoatEvent event = new RegattaLogRegisterCompetitorAndBoatEventImpl(MillisecondsTimePoint.now(), /* author */ null, - AbstractLeaderboardTest.createCompetitor("Someone"), AbstractLeaderboardTest.createBoat("Some boat")); + private RegattaLogRegisterCompetitorEvent createRegattaLogEvent() { + final RegattaLogRegisterCompetitorEvent event = new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), /* author */ null, + AbstractLeaderboardTest.createCompetitor("Someone")); return event; } @@ -129,7 +129,7 @@ public class RegattaLogEventNotificationForwardingTest extends AbstractSerializa receivedRegattaLogEvent[0] = event; } }); - final RegattaLogRegisterCompetitorAndBoatEvent event = createRegattaLogEvent(); + final RegattaLogRegisterCompetitorEvent event = createRegattaLogEvent(); regatta.getRegattaLog().add(event); assertSame(event, receivedRegattaLogEvent[0]); } @@ -151,7 +151,7 @@ public class RegattaLogEventNotificationForwardingTest extends AbstractSerializa receivedRegattaLogEvent[0] = event; } }); - final RegattaLogRegisterCompetitorAndBoatEvent event = createRegattaLogEvent(); + final RegattaLogRegisterCompetitorEvent event = createRegattaLogEvent(); deserializedRegatta.getRegattaLog().add(event); assertSame(event, receivedRegattaLogEvent[0]); } @@ -165,7 +165,7 @@ public class RegattaLogEventNotificationForwardingTest extends AbstractSerializa LeaderboardDTO dto = leaderboard.getLeaderboardDTO(now.plus(10), Collections.emptySet(), /* addOverallDetails */ false, /* trackedRegattaRegistry */ null, DomainFactory.INSTANCE, /* fillTotalPointsUncorrected */ false); assertTrue(dto.competitors.isEmpty()); - final RegattaLogRegisterCompetitorAndBoatEvent event = createRegattaLogEvent(); + final RegattaLogRegisterCompetitorEvent event = createRegattaLogEvent(); regatta.getRegattaLog().add(event); LeaderboardDTO dto2 = leaderboard.computeDTO(now.plus(20), Collections.emptySet(), /* addOverallDetails */ false, /* waitForLatestAnalyses */ false, /* trackedRegattaRegistry */ null, DomainFactory.INSTANCE, /* fillTotalPointsUncorrected */ false); @@ -197,7 +197,7 @@ public class RegattaLogEventNotificationForwardingTest extends AbstractSerializa LeaderboardDTO dto = deserializedLeaderboard.getLeaderboardDTO(now.plus(10), Collections.emptySet(), /* addOverallDetails */ false, /* trackedRegattaRegistry */ null, DomainFactory.INSTANCE, /* fillTotalPointsUncorrected */ false); assertTrue(dto.competitors.isEmpty()); - final RegattaLogRegisterCompetitorAndBoatEvent event = createRegattaLogEvent(); + final RegattaLogRegisterCompetitorEvent event = createRegattaLogEvent(); deserializedLeaderboard.getRegatta().getRegattaLog().add(event); LeaderboardDTO dto2 = deserializedLeaderboard.computeDTO(now.plus(20), Collections.emptySet(), /* addOverallDetails */ false, /* waitForLatestAnalyses */ false, /* trackedRegattaRegistry */ null, DomainFactory.INSTANCE, /* fillTotalPointsUncorrected */ false); diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java index 470fc65d9b5..59665f1fba8 100644 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/mock/MockedTrackedRace.java @@ -528,16 +528,16 @@ public class MockedTrackedRace implements DynamicTrackedRace { } @Override - public Map getCompetitorsAndBoatsRegisteredInRegattaLog() { + public Iterable getCompetitorsRegisteredInRegattaLog() { return null; } @Override - public void registerCompetitorAndBoat(Competitor competitor, Boat boat) { + public void registerCompetitor(Competitor competitor) { } @Override - public void registerCompetitorsAndBoats(Map competitorsAndBoats) { + public void registerCompetitors(Iterable competitors) { } @Override diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java index aee24031634..8ae3b6788be 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RegattaImpl.java @@ -26,11 +26,12 @@ import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor; import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterBoatEventImpl; -import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorAndBoatEventImpl; +import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl; import com.sap.sailing.domain.abstractlog.regatta.tracking.analyzing.impl.RegattaLogBoatDeregistrator; import com.sap.sailing.domain.abstractlog.regatta.tracking.analyzing.impl.RegattaLogBoatsInLogAnalyzer; import com.sap.sailing.domain.abstractlog.shared.analyzing.CompetitorDeregistrator; import com.sap.sailing.domain.abstractlog.shared.analyzing.CompetitorsAndBoatsInLogAnalyzer; +import com.sap.sailing.domain.abstractlog.shared.analyzing.CompetitorsInLogAnalyzer; import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; @@ -865,26 +866,26 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene } @Override - public Map getCompetitorsAndBoatsRegisteredInRegattaLog() { + public Iterable getCompetitorsRegisteredInRegattaLog() { RegattaLog regattaLog = getRegattaLog(); - CompetitorsAndBoatsInLogAnalyzer analyzer = new CompetitorsAndBoatsInLogAnalyzer<>( + CompetitorsInLogAnalyzer analyzer = new CompetitorsInLogAnalyzer<>( regattaLog); return analyzer.analyze(); } @Override - public void registerCompetitorAndBoat(Competitor competitor, Boat boat) { - registerCompetitorsAndBoats(Collections.singletonMap(competitor, boat)); + public void registerCompetitor(Competitor competitor) { + registerCompetitors(Collections.singletonList(competitor)); } @Override - public void registerCompetitorsAndBoats(Map competitorsAndBoats) { + public void registerCompetitors(Iterable competitors) { RegattaLog regattaLog = getRegattaLike().getRegattaLog(); TimePoint now = MillisecondsTimePoint.now(); - for (Map.Entry competitorAndBoatEntry : competitorsAndBoats.entrySet()) { - regattaLog.add(new RegattaLogRegisterCompetitorAndBoatEventImpl(now, now, regattaLogEventAuthorForRegatta, - UUID.randomUUID(), competitorAndBoatEntry.getKey(), competitorAndBoatEntry.getValue())); + for (Competitor competitor: competitors) { + regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(now, now, regattaLogEventAuthorForRegatta, + UUID.randomUUID(), competitor)); } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardImpl.java index 86ed2548a91..505f789896c 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/AbstractLeaderboardImpl.java @@ -4,7 +4,6 @@ import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; import java.util.UUID; @@ -15,11 +14,11 @@ import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor; import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterBoatEventImpl; -import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorAndBoatEventImpl; +import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl; import com.sap.sailing.domain.abstractlog.regatta.tracking.analyzing.impl.RegattaLogBoatDeregistrator; import com.sap.sailing.domain.abstractlog.regatta.tracking.analyzing.impl.RegattaLogBoatsInLogAnalyzer; import com.sap.sailing.domain.abstractlog.shared.analyzing.CompetitorDeregistrator; -import com.sap.sailing.domain.abstractlog.shared.analyzing.CompetitorsAndBoatsInLogAnalyzer; +import com.sap.sailing.domain.abstractlog.shared.analyzing.CompetitorsInLogAnalyzer; import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.Fleet; @@ -207,29 +206,29 @@ public abstract class AbstractLeaderboardImpl extends AbstractSimpleLeaderboardI } @Override - public Map getCompetitorsAndBoatsRegisteredInRegattaLog() { + public Iterable getCompetitorsRegisteredInRegattaLog() { RegattaLog regattaLog = getRegattaLike().getRegattaLog(); - CompetitorsAndBoatsInLogAnalyzer analyzer = new CompetitorsAndBoatsInLogAnalyzer<>( + CompetitorsInLogAnalyzer analyzer = new CompetitorsInLogAnalyzer<>( regattaLog); return analyzer.analyze(); } - + @Override - public void registerCompetitorAndBoat(Competitor competitor, Boat boat) { - registerCompetitorsAndBoats(Collections.singletonMap(competitor, boat)); + public void registerCompetitor(Competitor competitor) { + registerCompetitors(Collections.singletonList(competitor)); } @Override - public void registerCompetitorsAndBoats(Map competitorsAndBoats) { + public void registerCompetitors(Iterable competitors) { RegattaLog regattaLog = getRegattaLike().getRegattaLog(); TimePoint now = MillisecondsTimePoint.now(); - for (Map.Entry competitorAndBoatEntry : competitorsAndBoats.entrySet()) { - regattaLog.add(new RegattaLogRegisterCompetitorAndBoatEventImpl(now, now, regattaLogEventAuthorForAbstractLeaderboard, - UUID.randomUUID(), competitorAndBoatEntry.getKey(), competitorAndBoatEntry.getValue())); + for (Competitor competitor: competitors) { + regattaLog.add(new RegattaLogRegisterCompetitorEventImpl(now, now, regattaLogEventAuthorForAbstractLeaderboard, + UUID.randomUUID(), competitor)); } } - + @Override public void deregisterCompetitor(Competitor competitor) { deregisterCompetitors(Collections.singleton(competitor)); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/CompetitorAndBoatProviderFromRaceColumnsAndRegattaLike.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/CompetitorAndBoatProviderFromRaceColumnsAndRegattaLike.java index d513ec74a08..008bf7c41d1 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/CompetitorAndBoatProviderFromRaceColumnsAndRegattaLike.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/CompetitorAndBoatProviderFromRaceColumnsAndRegattaLike.java @@ -17,7 +17,7 @@ import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsAnd import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsFromRaceLogEvent; import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; +import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterBoatEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent; import com.sap.sailing.domain.abstractlog.regatta.impl.BaseRegattaLogEventVisitor; @@ -83,7 +83,7 @@ public class CompetitorAndBoatProviderFromRaceColumnsAndRegattaLike { invalidateAllCompetitorsAndBoatsCaches(); } - public void visit(RegattaLogRegisterCompetitorAndBoatEvent event) { + public void visit(RegattaLogRegisterBoatEvent event) { invalidateAllCompetitorsAndBoatsCaches(); } @@ -91,7 +91,7 @@ public class CompetitorAndBoatProviderFromRaceColumnsAndRegattaLike { public void visit(RegattaLogRevokeEvent event) { try { if (RegattaLogRegisterCompetitorEvent.class.isAssignableFrom(Class.forName(event.getRevokedEventType())) || - RegattaLogRegisterCompetitorAndBoatEvent.class.isAssignableFrom(Class.forName(event.getRevokedEventType()))) { + RegattaLogRegisterBoatEvent.class.isAssignableFrom(Class.forName(event.getRevokedEventType()))) { invalidateAllCompetitorsAndBoatsCaches(); } } catch (ClassNotFoundException e) { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/CompetitorProviderFromRaceColumnsAndRegattaLike.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/CompetitorProviderFromRaceColumnsAndRegattaLike.java index 08cbef38ed5..957766bbe81 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/CompetitorProviderFromRaceColumnsAndRegattaLike.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/CompetitorProviderFromRaceColumnsAndRegattaLike.java @@ -19,7 +19,7 @@ import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsAnd import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogUseCompetitorsFromRaceLogEvent; import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; +import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterBoatEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRevokeEvent; import com.sap.sailing.domain.abstractlog.regatta.impl.BaseRegattaLogEventVisitor; @@ -90,7 +90,7 @@ public class CompetitorProviderFromRaceColumnsAndRegattaLike { invalidateAllCompetitorsCaches(); } - public void visit(RegattaLogRegisterCompetitorAndBoatEvent event) { + public void visit(RegattaLogRegisterBoatEvent event) { invalidateAllCompetitorsCaches(); } @@ -98,7 +98,7 @@ public class CompetitorProviderFromRaceColumnsAndRegattaLike { public void visit(RegattaLogRevokeEvent event) { try { if (RegattaLogRegisterCompetitorEvent.class.isAssignableFrom(Class.forName(event.getRevokedEventType())) || - RegattaLogRegisterCompetitorAndBoatEvent.class.isAssignableFrom(Class.forName(event.getRevokedEventType()))) { + RegattaLogRegisterBoatEvent.class.isAssignableFrom(Class.forName(event.getRevokedEventType()))) { invalidateAllCompetitorsCaches(); } } catch (ClassNotFoundException e) { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DelegatingRegattaLeaderboardWithCompetitorElimination.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DelegatingRegattaLeaderboardWithCompetitorElimination.java index 05f3be1f67c..49dac7c5967 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DelegatingRegattaLeaderboardWithCompetitorElimination.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/leaderboard/impl/DelegatingRegattaLeaderboardWithCompetitorElimination.java @@ -190,8 +190,8 @@ public class DelegatingRegattaLeaderboardWithCompetitorElimination extends Abstr return getFullLeaderboard().getRegatta(); } - public Map getCompetitorsAndBoatsRegisteredInRegattaLog() { - return getFullLeaderboard().getCompetitorsAndBoatsRegisteredInRegattaLog(); + public Iterable getCompetitorsRegisteredInRegattaLog() { + return getFullLeaderboard().getCompetitorsRegisteredInRegattaLog(); } public IsRegattaLike getRegattaLike() { @@ -202,12 +202,12 @@ public class DelegatingRegattaLeaderboardWithCompetitorElimination extends Abstr return getFullLeaderboard().getRacelog(raceColumnName, fleetName); } - public void registerCompetitorAndBoat(Competitor competitor, Boat boat) { - getFullLeaderboard().registerCompetitorAndBoat(competitor, boat); + public void registerCompetitor(Competitor competitor) { + getFullLeaderboard().registerCompetitor(competitor); } - public void registerCompetitorsAndBoats(Map competitorsAndBoats) { - getFullLeaderboard().registerCompetitorsAndBoats(competitorsAndBoats); + public void registerCompetitors(Iterable competitors) { + getFullLeaderboard().registerCompetitors(competitors); } public void deregisterCompetitor(Competitor competitor) { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/regattalike/HasRegattaLike.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/regattalike/HasRegattaLike.java index d235c92a0a7..02bfbf99c7e 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/regattalike/HasRegattaLike.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/regattalike/HasRegattaLike.java @@ -56,13 +56,13 @@ public interface HasRegattaLike { Iterable getAllCompetitors(); /** - * Determines the competitors and boats registered in the regatta log. Note that this is not necessarily the complete set of - * competitors and boats participating in this "regatta." For that, use {@link #getAllCompetitorsAndBoats()}. + * Determines the competitors registered in the regatta log. Note that this is not necessarily the complete set of + * competitors participating in this "regatta." For that, use {@link #getAllCompetitors()}. */ - Map getCompetitorsAndBoatsRegisteredInRegattaLog(); + Iterable getCompetitorsRegisteredInRegattaLog(); - void registerCompetitorAndBoat(Competitor competitor, Boat boat); - void registerCompetitorsAndBoats(Map competitorsAndBoats); + void registerCompetitor(Competitor competitor); + void registerCompetitors(Iterable competitors); void deregisterCompetitor(Competitor competitor); void deregisterCompetitors(Iterable competitors); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/regattalike/LeaderboardThatHasRegattaLike.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/regattalike/LeaderboardThatHasRegattaLike.java index 5ab1a7a5265..a245e7d2f86 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/regattalike/LeaderboardThatHasRegattaLike.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/regattalike/LeaderboardThatHasRegattaLike.java @@ -1,12 +1,9 @@ package com.sap.sailing.domain.regattalike; -import java.util.Map; - -import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.leaderboard.HasRaceColumnsAndRegattaLike; import com.sap.sailing.domain.leaderboard.Leaderboard; public interface LeaderboardThatHasRegattaLike extends Leaderboard, HasRaceColumnsAndRegattaLike { - Map getCompetitorsAndBoatsRegisteredInRegattaLog(); + Iterable getCompetitorsRegisteredInRegattaLog(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 56ceb385b19..8f62597995e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -6545,7 +6545,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S throw new DoesNotHaveRegattaLogException(); } HasRegattaLike regattaLikeLeaderboard = ((HasRegattaLike) leaderboard); - return convertToCompetitorDTOs(regattaLikeLeaderboard.getCompetitorsAndBoatsRegisteredInRegattaLog().keySet()); + return convertToCompetitorDTOs(regattaLikeLeaderboard.getCompetitorsRegisteredInRegattaLog()); } @Override 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 4ae2f04f2c6..713e2b8327b 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 @@ -28,7 +28,7 @@ import org.junit.Test; import com.mongodb.MongoException; import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl; -import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorAndBoatEventImpl; +import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl; import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; @@ -429,8 +429,8 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest Boat boat2 = AbstractLeaderboardTest.createBoat("Humba2 Boot"); res.getCompetitorStore().addNewCompetitors(Arrays.asList(competitor1, competitor2)); res.getCompetitorStore().addNewBoats(Arrays.asList(boat1, boat2)); - regatta.getRegattaLog().add(new RegattaLogRegisterCompetitorAndBoatEventImpl(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Axel", 0), competitor1, boat1)); - regatta.getRegattaLog().add(new RegattaLogRegisterCompetitorAndBoatEventImpl(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Axel", 0), competitor2, boat2)); + regatta.getRegattaLog().add(new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Axel", 0), competitor1)); + regatta.getRegattaLog().add(new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Axel", 0), competitor2)); assertTrue(Util.contains(regatta.getAllCompetitors(), competitor1)); assertTrue(Util.contains(regatta.getAllCompetitors(), competitor2)); assertTrue(Util.contains(regatta.getAllBoats(), boat1)); diff --git a/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardsResourceCheckinAndOutTest.java b/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardsResourceCheckinAndOutTest.java index c0a1544bb9b..d493d8da401 100644 --- a/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardsResourceCheckinAndOutTest.java +++ b/java/com.sap.sailing.server.gateway.test/src/com/sap/sailing/server/gateway/test/jaxrs/LeaderboardsResourceCheckinAndOutTest.java @@ -23,8 +23,10 @@ import com.sap.sailing.domain.abstractlog.shared.analyzing.CompetitorsAndBoatsIn 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.CompetitorWithBoat; import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.base.impl.BoatClassImpl; +import com.sap.sailing.domain.base.impl.DynamicBoat; import com.sap.sailing.domain.base.impl.DynamicTeam; import com.sap.sailing.domain.base.impl.FleetImpl; import com.sap.sailing.domain.base.impl.RegattaImpl; @@ -40,7 +42,7 @@ import com.sap.sailing.server.gateway.jaxrs.api.LeaderboardsResource; import com.sap.sse.common.impl.MillisecondsTimePoint; public class LeaderboardsResourceCheckinAndOutTest extends AbstractJaxRsApiTest { - private Competitor competitor; + private CompetitorWithBoat competitor; private RegattaLog log; private RegattaLeaderboard leaderboard; private BoatClass boatClass = new BoatClassImpl("49er", false); @@ -50,16 +52,16 @@ public class LeaderboardsResourceCheckinAndOutTest extends AbstractJaxRsApiTest super.setUp(); Competitor c = createCompetitors(1).get(0); Boat boat = racingEventService.getBaseDomainFactory().getOrCreateBoat("boat", "boat", boatClass, "GER1", null); - competitor = racingEventService.getBaseDomainFactory().getOrCreateCompetitor(c.getId(), c.getName(), c.getShortName(), + competitor = racingEventService.getBaseDomainFactory().getOrCreateCompetitorWithBoat(c.getId(), c.getName(), c.getShortName(), c.getColor(), c.getEmail(), c.getFlagImage(), (DynamicTeam) c.getTeam(), - /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null); + /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null, (DynamicBoat) boat); Regatta regatta = new RegattaImpl("regatta", boatClass, /* canBoatsOfCompetitorsChangePerRace */ true, MillisecondsTimePoint.now(), MillisecondsTimePoint.now(), Collections.singleton(new SeriesImpl("series", false, /* isFleetsCanRunInParallel */ true, Collections .singleton(new FleetImpl("fleet")), Arrays.asList("column"), racingEventService)), false, new HighPoint(), 0, null, OneDesignRankingMetric::new); racingEventService.addRegattaWithoutReplication(regatta); leaderboard = racingEventService.addRegattaLeaderboard(regatta.getRegattaIdentifier(), "regatta", new int[] {}); - regatta.registerCompetitorAndBoat(competitor, boat); + regatta.registerCompetitor(competitor); log = leaderboard.getRegattaLike().getRegattaLog(); } diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java index 1b9a94d9310..f0dd9a955d7 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java @@ -296,11 +296,11 @@ public class RegattasResource extends AbstractSailingServerResource { competitorId = competitorIdAsString; } - final CompetitorWithBoat competitor = getService().getCompetitorStore().getExistingCompetitorWithBoatById(competitorId); + final Competitor competitor = getService().getCompetitorStore().getExistingCompetitorById(competitorId); if (competitor == null) { response = getBadCompetitorIdResponse(competitorId); } else { - regatta.registerCompetitorAndBoat(competitor, competitor.getBoat()); + regatta.registerCompetitor(competitor); response = Response.ok().build(); } } @@ -338,7 +338,7 @@ public class RegattasResource extends AbstractSailingServerResource { /* coach */ null), timeOnTimeFactor, timeOnDistanceAllowancePerNauticalMileAsMillis == null ? null : new MillisecondsDurationImpl(timeOnDistanceAllowancePerNauticalMileAsMillis), searchTag, (DynamicBoat) boat); - regatta.registerCompetitorAndBoat(competitor, boat); + regatta.registerCompetitor(competitor); response = Response.ok(CompetitorWithBoatJsonSerializer.create().serialize(competitor).toJSONString()). header("Content-Type", MediaType.APPLICATION_JSON + ";charset=UTF-8").build(); } diff --git a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RegattaLogReplicationTest.java b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RegattaLogReplicationTest.java index ce190cd9259..517d9d584e6 100644 --- a/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RegattaLogReplicationTest.java +++ b/java/com.sap.sailing.server.replication.test/src/com/sap/sailing/server/replication/test/RegattaLogReplicationTest.java @@ -10,7 +10,7 @@ import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl; import com.sap.sailing.domain.abstractlog.regatta.RegattaLog; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent; import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor; -import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorAndBoatEventImpl; +import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl; import com.sap.sailing.domain.base.CompetitorAndBoat; import com.sap.sailing.domain.base.Regatta; import com.sap.sailing.domain.base.impl.RegattaImpl; @@ -34,7 +34,7 @@ public class RegattaLogReplicationTest extends @Before public void createEvent() throws Exception { final CompetitorAndBoat competitorAndBoat = TrackBasedTest.createCompetitorAndBoat("Test Competitor"); - regattaLogEvent = new RegattaLogRegisterCompetitorAndBoatEventImpl(t(0), t(0), author, 0, competitorAndBoat.getCompetitor(), competitorAndBoat.getBoat()); + regattaLogEvent = new RegattaLogRegisterCompetitorEventImpl(t(0), t(0), author, 0, competitorAndBoat.getCompetitor()); // anotherRegattaLogEvent = new RegattaLogRegisterCompetitorEventImpl(t(1), author, t(1), 1, null); } 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 29b9fd3ff61..6776e0477ef 100644 --- 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 @@ -52,10 +52,10 @@ import com.sap.sailing.domain.abstractlog.race.impl.RaceLogStartTimeEventImpl; import com.sap.sailing.domain.abstractlog.race.impl.RaceLogWindFixEventImpl; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceCompetitorMappingEvent; import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogDeviceMappingEvent; -import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorAndBoatEvent; +import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent; import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceCompetitorBravoMappingEventImpl; import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogDeviceCompetitorMappingEventImpl; -import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorAndBoatEventImpl; +import com.sap.sailing.domain.abstractlog.regatta.events.impl.RegattaLogRegisterCompetitorEventImpl; import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.base.BoatClass; import com.sap.sailing.domain.base.Competitor; @@ -261,7 +261,6 @@ public class MasterDataImportTest { BoatClass boatClass = new BoatClassImpl("H16", true); CompetitorImpl competitor = new CompetitorImpl(competitorUUID, "Froderik", "KYC", Color.RED, null, null, team, /* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */null, null); - Boat boat = new BoatImpl(competitorUUID, "Boat", boatClass, "GER1"); competitors.add(competitor); UUID competitorToSuppressUUID = UUID.randomUUID(); Set sailors2 = new HashSet(); @@ -294,8 +293,8 @@ public class MasterDataImportTest { // Set RegattaLog event TimePoint regattaLogTimepoint = new MillisecondsTimePoint(84392048L); - RegattaLogRegisterCompetitorAndBoatEvent registerEvent = new RegattaLogRegisterCompetitorAndBoatEventImpl( - regattaLogTimepoint, regattaLogTimepoint, author, UUID.randomUUID(), competitor, boat); + RegattaLogRegisterCompetitorEvent registerEvent = new RegattaLogRegisterCompetitorEventImpl( + regattaLogTimepoint, regattaLogTimepoint, author, UUID.randomUUID(), competitor); regatta.getRegattaLog().add(registerEvent); // Add some racelogtracking stuff @@ -458,7 +457,7 @@ public class MasterDataImportTest { raceColumnOnTarget.getRaceLog(fleet1OnTarget).add(postImportLogEvent); // Check for regatta log event - RegattaLogRegisterCompetitorAndBoatEvent registerEventOnTarget = (RegattaLogRegisterCompetitorAndBoatEvent) regattaOnTarget + RegattaLogRegisterCompetitorEvent registerEventOnTarget = (RegattaLogRegisterCompetitorEvent) regattaOnTarget .getRegattaLog().getFirstFixAtOrAfter(regattaLogTimepoint); Assert.assertNotNull(registerEventOnTarget); Assert.assertEquals(registerEvent.getId(), registerEventOnTarget.getId()); @@ -490,7 +489,7 @@ public class MasterDataImportTest { // Check for persisting of regatta log events Regatta regattaOnTarget2 = dest2.getRegattaByName(TEST_LEADERBOARD_NAME); - RegattaLogRegisterCompetitorAndBoatEvent registerEventOnTarget2 = (RegattaLogRegisterCompetitorAndBoatEvent) regattaOnTarget2 + RegattaLogRegisterCompetitorEvent registerEventOnTarget2 = (RegattaLogRegisterCompetitorEvent) regattaOnTarget2 .getRegattaLog().getFirstFixAtOrAfter(regattaLogTimepoint); Assert.assertNotNull(registerEventOnTarget2); Assert.assertEquals(registerEvent.getId(), registerEventOnTarget2.getId()); diff --git a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/PersistentCompetitorStore.java b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/PersistentCompetitorStore.java index 468b34953d5..5bcc073338a 100755 --- a/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/PersistentCompetitorStore.java +++ b/java/com.sap.sailing.server/src/com/sap/sailing/server/impl/PersistentCompetitorStore.java @@ -23,7 +23,6 @@ import com.sap.sailing.domain.base.impl.TransientCompetitorStoreImpl; import com.sap.sailing.domain.persistence.DomainObjectFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.persistence.PersistenceFactory; -import com.sap.sailing.domain.persistence.impl.CollectionNames; import com.sap.sse.common.Color; import com.sap.sse.common.Duration; import com.sap.sse.common.TypeBasedServiceFinderFactory; @@ -76,11 +75,8 @@ public class PersistentCompetitorStore extends TransientCompetitorStoreImpl impl * Migrate competitors with contained boats (before bug2822) to competitors with separate boats if required */ private void migrateCompetitorsIfRequired() { - boolean competitorsCollectionExist = storeTo.getDatabase().collectionExists(CollectionNames.COMPETITORS.name()); - boolean boatsCollectionCollectionExist = storeTo.getDatabase().collectionExists(CollectionNames.BOATS.name()); - boolean migrationRequired = competitorsCollectionExist && !boatsCollectionCollectionExist; - if (migrationRequired) { - Collection allLegacyCompetitorsWithBoat = loadFrom.renameCompetitorsCollectionAndloadAllLegacyCompetitors(); + Collection allLegacyCompetitorsWithBoat = loadFrom.migrateLegacyCompetitorsIfRequired(); + if (allLegacyCompetitorsWithBoat != null) { List newCompetitors = new ArrayList<>(); List newBoats = new ArrayList<>(); @@ -99,7 +95,6 @@ public class PersistentCompetitorStore extends TransientCompetitorStoreImpl impl } } - DomainObjectFactory getDomainObjectFactory() { return loadFrom; }