fixed CompetitorsAndBoatsInLogAnalyzer and a broken test

This commit is contained in:
Frank Mittag committed 2017-12-27 20:37:33 +01:00
1 parent 6f1b629afe
commit 5fca437a61
3 files changed
+34 -21

No files matched your search

@@ -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());
}
}
}
@@ -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
@@ -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));