mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-14 06:18:12 +00:00
fixed CompetitorsAndBoatsInLogAnalyzer and a broken test
This commit is contained in:
1 parent
6f1b629afe
commit
5fca437a61
3 files changed
+34
-21
No files matched your search
+12
-3
@@ -7,11 +7,14 @@ import com.sap.sailing.domain.abstractlog.AbstractLog;
|
||||
import com.sap.sailing.domain.abstractlog.AbstractLogEvent;
|
||||
import com.sap.sailing.domain.abstractlog.BaseLogAnalyzer;
|
||||
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogRegisterCompetitorEvent;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.events.RegattaLogRegisterCompetitorEvent;
|
||||
import com.sap.sailing.domain.base.Boat;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CompetitorWithBoat;
|
||||
|
||||
/**
|
||||
* This class searches for {@link RaceLogRegisterCompetitorEvent}s in the given log.
|
||||
* This class searches for {@link RaceLogRegisterCompetitorEvent}s or {@link RegattaLogRegisterCompetitorEvent}s in the given log
|
||||
* in order to determine the competitor/boat mappings for both kind of events
|
||||
*
|
||||
*/
|
||||
public class CompetitorsAndBoatsInLogAnalyzer<LogT extends AbstractLog<EventT, VisitorT>, EventT extends AbstractLogEvent<VisitorT>, VisitorT>
|
||||
@@ -27,8 +30,14 @@ public class CompetitorsAndBoatsInLogAnalyzer<LogT extends AbstractLog<EventT, V
|
||||
|
||||
for (EventT event : getLog().getUnrevokedEvents()) {
|
||||
if (event instanceof RaceLogRegisterCompetitorEvent) {
|
||||
RaceLogRegisterCompetitorEvent competitorAndBoatEvent = (RaceLogRegisterCompetitorEvent) event;
|
||||
result.put(competitorAndBoatEvent.getCompetitor(), competitorAndBoatEvent.getBoat());
|
||||
RaceLogRegisterCompetitorEvent raceLogCompetitorEvent = (RaceLogRegisterCompetitorEvent) event;
|
||||
result.put(raceLogCompetitorEvent.getCompetitor(), raceLogCompetitorEvent.getBoat());
|
||||
} else if (event instanceof RegattaLogRegisterCompetitorEvent) {
|
||||
RegattaLogRegisterCompetitorEvent regattaLogCompetitorEvent = (RegattaLogRegisterCompetitorEvent) event;
|
||||
if (regattaLogCompetitorEvent.getCompetitor() instanceof CompetitorWithBoat) {
|
||||
CompetitorWithBoat competitorWithBoat = (CompetitorWithBoat) regattaLogCompetitorEvent.getCompetitor();
|
||||
result.put(competitorWithBoat, competitorWithBoat.getBoat());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
-14
@@ -33,6 +33,7 @@ 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;
|
||||
import com.sap.sailing.domain.base.DomainFactory;
|
||||
@@ -416,30 +417,32 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
|
||||
final String regattaBaseName = "Kieler Woche";
|
||||
BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("29erXX", /* typicallyStartsUpwind */ true);
|
||||
Regatta regattaProxy = createRegatta(RegattaImpl.getDefaultName(regattaBaseName, boatClass.getName()), boatClass,
|
||||
/* canBoatsOfCompetitorsChangePerRace */ true, regattaStartDate, regattaEndDate, /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, OneDesignRankingMetric::new);
|
||||
/* canBoatsOfCompetitorsChangePerRace */ false, regattaStartDate, regattaEndDate, /* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null, OneDesignRankingMetric::new);
|
||||
final String regattaName = regattaProxy.getName();
|
||||
Regatta regatta = res.createRegatta(regattaName, regattaProxy.getBoatClass().getName(),
|
||||
/* canBoatsOfCompetitorsChangePerRace */ true, regattaStartDate, regattaEndDate,
|
||||
/* canBoatsOfCompetitorsChangePerRace */ false, regattaStartDate, regattaEndDate,
|
||||
"123", regattaProxy.getSeries(), regattaProxy.isPersistent(), DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT),
|
||||
/* defaultCourseAreaId */ null, /*buoyZoneRadiusInHullLengths*/ 2.0, /* useStartTimeInference */ true,
|
||||
/* controlTrackingFromStartAndFinishTimes */ false, OneDesignRankingMetric::new);
|
||||
Competitor competitor1 = AbstractLeaderboardTest.createCompetitor("Humba1");
|
||||
Competitor competitor2 = AbstractLeaderboardTest.createCompetitor("Humba2");
|
||||
CompetitorWithBoat competitorWithBoat1 = AbstractLeaderboardTest.createCompetitorWithBoat("Humba1");
|
||||
CompetitorWithBoat competitorWithBoat2 = AbstractLeaderboardTest.createCompetitorWithBoat("Humba2");
|
||||
Boat boat1= AbstractLeaderboardTest.createBoat("Humba1 Boot");
|
||||
Boat boat2 = AbstractLeaderboardTest.createBoat("Humba2 Boot");
|
||||
res.getCompetitorStore().addNewCompetitors(Arrays.asList(competitor1, competitor2));
|
||||
res.getCompetitorStore().addNewCompetitors(Arrays.asList(competitorWithBoat1, competitorWithBoat2));
|
||||
res.getCompetitorStore().addNewBoats(Arrays.asList(boat1, 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));
|
||||
assertTrue(Util.contains(regatta.getAllBoats(), boat2));
|
||||
regatta.getRegattaLog().add(new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Axel", 0), competitorWithBoat1));
|
||||
regatta.getRegattaLog().add(new RegattaLogRegisterCompetitorEventImpl(MillisecondsTimePoint.now(), new LogEventAuthorImpl("Axel", 0), competitorWithBoat2));
|
||||
assertTrue(Util.contains(regatta.getAllCompetitors(), competitorWithBoat1));
|
||||
assertTrue(Util.contains(regatta.getAllCompetitors(), competitorWithBoat2));
|
||||
Iterable<Boat> allBoats = regatta.getAllBoats();
|
||||
assertTrue(Util.size(allBoats) == 2);
|
||||
assertTrue(Util.contains(regatta.getAllBoats(), competitorWithBoat1.getBoat()));
|
||||
assertTrue(Util.contains(regatta.getAllBoats(), competitorWithBoat2.getBoat()));
|
||||
addRaceColumns(numberOfQualifyingRaces, numberOfFinalRaces, regatta);
|
||||
RegattaLeaderboard fullLeaderboard = res.addRegattaLeaderboard(regatta.getRegattaIdentifier(), null, new int[] { 3, 5 });
|
||||
// use the set-up and add a regatta leaderboard with eliminations that wraps the regatta leaderboard
|
||||
RegattaLeaderboardWithEliminations withEliminations = res.addRegattaLeaderboardWithEliminations("U16", /* leaderboardDisplayName */ "Display Name", fullLeaderboard);
|
||||
res.apply(new UpdateEliminatedCompetitorsInLeaderboard(withEliminations.getName(), Collections.singleton(competitor1)));
|
||||
res.apply(new UpdateEliminatedCompetitorsInLeaderboard(withEliminations.getName(), Collections.singleton(competitorWithBoat1)));
|
||||
|
||||
DomainObjectFactory dof = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE);
|
||||
Regatta loadedRegatta = dof.loadRegatta(regatta.getName(), /* trackedRegattaRegistry */ null);
|
||||
@@ -461,8 +464,8 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
|
||||
assertTrue(loadedLeaderboardWithEliminations instanceof RegattaLeaderboardWithEliminations);
|
||||
assertEquals("Display Name", loadedLeaderboardWithEliminations.getDisplayName());
|
||||
assertEquals(withEliminations.getAllCompetitors(), loadedLeaderboardWithEliminations.getAllCompetitors());
|
||||
assertTrue(((RegattaLeaderboardWithEliminations) loadedLeaderboardWithEliminations).isEliminated(competitor1));
|
||||
assertFalse(((RegattaLeaderboardWithEliminations) loadedLeaderboardWithEliminations).isEliminated(competitor2));
|
||||
assertTrue(((RegattaLeaderboardWithEliminations) loadedLeaderboardWithEliminations).isEliminated(competitorWithBoat1));
|
||||
assertFalse(((RegattaLeaderboardWithEliminations) loadedLeaderboardWithEliminations).isEliminated(competitorWithBoat2));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+5
-4
@@ -19,7 +19,7 @@ import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
|
||||
import com.sap.sailing.domain.abstractlog.regatta.tracking.analyzing.impl.RegattaLogDeviceCompetitorMappingFinder;
|
||||
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;
|
||||
@@ -39,6 +39,7 @@ import com.sap.sailing.domain.racelogtracking.DeviceMappingWithRegattaLogEvent;
|
||||
import com.sap.sailing.domain.racelogtracking.SmartphoneUUIDIdentifier;
|
||||
import com.sap.sailing.domain.ranking.OneDesignRankingMetric;
|
||||
import com.sap.sailing.server.gateway.jaxrs.api.LeaderboardsResource;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class LeaderboardsResourceCheckinAndOutTest extends AbstractJaxRsApiTest {
|
||||
@@ -55,7 +56,7 @@ public class LeaderboardsResourceCheckinAndOutTest extends AbstractJaxRsApiTest
|
||||
competitor = racingEventService.getBaseDomainFactory().getOrCreateCompetitorWithBoat(c.getId(), c.getName(), c.getShortName(),
|
||||
c.getColor(), c.getEmail(), c.getFlagImage(), (DynamicTeam) c.getTeam(),
|
||||
/* timeOnTimeFactor */ null, /* timeOnDistanceAllowancePerNauticalMile */ null, null, (DynamicBoat) boat);
|
||||
Regatta regatta = new RegattaImpl("regatta", boatClass, /* canBoatsOfCompetitorsChangePerRace */ true, MillisecondsTimePoint.now(),
|
||||
Regatta regatta = new RegattaImpl("regatta", boatClass, /* canBoatsOfCompetitorsChangePerRace */ false, 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);
|
||||
@@ -80,11 +81,11 @@ public class LeaderboardsResourceCheckinAndOutTest extends AbstractJaxRsApiTest
|
||||
Response response = resource.postCheckin(json.toString(), leaderboard.getName());
|
||||
assertThat("checkin returns OK", response.getStatus(), equalTo(Response.Status.OK.getStatusCode()));
|
||||
|
||||
Map<Competitor, Boat> registeredCompetitors = new CompetitorsAndBoatsInLogAnalyzer<>(log).analyze();
|
||||
Iterable<Competitor> registeredCompetitors = new CompetitorsInLogAnalyzer<>(log).analyze();
|
||||
Map<Competitor, List<DeviceMappingWithRegattaLogEvent<Competitor>>> mappings = new RegattaLogDeviceCompetitorMappingFinder(
|
||||
log).analyze();
|
||||
|
||||
assertThat("competitor was registered", registeredCompetitors.size(), equalTo(1));
|
||||
assertThat("competitor was registered", Util.size(registeredCompetitors), equalTo(1));
|
||||
assertThat("device mappings for competitor exist", mappings.size(), equalTo(1));
|
||||
List<DeviceMappingWithRegattaLogEvent<Competitor>> mappingsForC = mappings.get(competitor);
|
||||
assertThat("exactly one device mapping for competitor exists", mappingsForC.size(), equalTo(1));
|
||||
|
||||
Reference in new issue
Block a user