introduced a manageable flag "useStartTimeInference" on Regatta that is evaluated by TrackedRaceImpl.getStartOfRace(), solving bug 1994

This commit is contained in:
Axel Uhl committed 2014-07-07 11:27:25 +02:00
1 parent 2c7db98c06
commit 4f15a562b3
41 files changed
+170 -116

No files matched your search

@@ -274,10 +274,11 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
/**
* @param series the series must not have any {@link RaceColumn}s yet
* @param useStartTimeInference TODO
*/
Regatta createRegatta(String regattaBaseName, String boatClassName, Serializable id, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId);
Regatta createRegatta(String regattaBaseName, String boatClassName, Serializable id, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId, boolean useStartTimeInference);
Regatta updateRegatta(RegattaIdentifier regattaIdentifier, Serializable newDefaultCourseAreaId, RegattaConfiguration regattaConfiguration, Iterable<? extends Series> series);
Regatta updateRegatta(RegattaIdentifier regattaIdentifier, Serializable newDefaultCourseAreaId, RegattaConfiguration regattaConfiguration, Iterable<? extends Series> series, boolean useStartTimeInference);
/**
* Adds <code>raceDefinition</code> to the {@link Regatta} such that it will appear in {@link Regatta#getAllRaces()}
@@ -444,12 +445,13 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
RaceLog getRaceLog(String leaderboardName, String raceColumnName, String fleetName);
/**
* @param useStartTimeInference TODO
* @return a pair with the found or created regatta, and a boolean that tells whether the regatta was created during
* the call
*/
Util.Pair<Regatta, Boolean> getOrCreateRegattaWithoutReplication(String baseRegattaName, String boatClassName, Serializable id,
Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme,
Serializable defaultCourseAreaId);
Serializable defaultCourseAreaId, boolean useStartTimeInference);
/**
* @return map where keys are the toString() representation of the {@link RaceDefinition#getId() IDs} of races passed to
@@ -975,9 +975,9 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
@Override
public Regatta createRegatta(String baseRegattaName, String boatClassName, Serializable id,
Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme,
Serializable defaultCourseAreaId) {
Serializable defaultCourseAreaId, boolean useStartTimeInference) {
com.sap.sse.common.Util.Pair<Regatta, Boolean> regattaWithCreatedFlag = getOrCreateRegattaWithoutReplication(baseRegattaName,
boatClassName, id, series, persistent, scoringScheme, defaultCourseAreaId);
boatClassName, id, series, persistent, scoringScheme, defaultCourseAreaId, useStartTimeInference);
Regatta regatta = regattaWithCreatedFlag.getA();
if (regattaWithCreatedFlag.getB()) {
replicateSpecificRegattaWithoutRaceColumns(regatta);
@@ -1000,12 +1000,12 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
@Override
public com.sap.sse.common.Util.Pair<Regatta, Boolean> getOrCreateRegattaWithoutReplication(String baseRegattaName, String boatClassName,
Serializable id, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme,
Serializable defaultCourseAreaId) {
Serializable defaultCourseAreaId, boolean useStartTimeInference) {
RaceLogStore raceLogStore = MongoRaceLogStoreFactory.INSTANCE.getMongoRaceLogStore(mongoObjectFactory,
domainObjectFactory);
CourseArea courseArea = getCourseArea(defaultCourseAreaId);
Regatta regatta = new RegattaImpl(raceLogStore, baseRegattaName, getBaseDomainFactory().getOrCreateBoatClass(
boatClassName), series, persistent, scoringScheme, id, courseArea);
boatClassName), series, persistent, scoringScheme, id, courseArea, /* useStartTimeInference */ true);
boolean wasCreated = addAndConnectRegatta(persistent, defaultCourseAreaId, regatta);
if (wasCreated) {
logger.info("Created regatta " + regatta.getName() + " (" + hashCode() + ") on " + this);
@@ -1186,7 +1186,7 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
replicate(new AddSpecificRegatta(regatta.getBaseName(), regatta.getBoatClass() == null ? null : regatta
.getBoatClass().getName(), regatta.getId(),
getSeriesWithoutRaceColumnsConstructionParametersAsMap(regatta), regatta.isPersistent(),
regatta.getScoringScheme(), courseAreaId));
regatta.getScoringScheme(), courseAreaId, regatta.useStartTimeInference()));
RegattaIdentifier regattaIdentifier = regatta.getRegattaIdentifier();
for (RaceDefinition race : regatta.getAllRaces()) {
replicate(new AddRaceDefinition(regattaIdentifier, race));
@@ -1600,13 +1600,16 @@ public class RacingEventServiceImpl implements RacingEventServiceWithTestSupport
@Override
public Regatta updateRegatta(RegattaIdentifier regattaIdentifier, Serializable newDefaultCourseAreaId,
RegattaConfiguration newRegattaConfiguration, Iterable<? extends Series> series) {
RegattaConfiguration newRegattaConfiguration, Iterable<? extends Series> series, boolean useStartTimeInference) {
// We're not doing any renaming of the regatta itself, therefore we don't have to sync on the maps.
Regatta regatta = getRegatta(regattaIdentifier);
CourseArea newCourseArea = getCourseArea(newDefaultCourseAreaId);
if (newCourseArea != regatta.getDefaultCourseArea()) {
regatta.setDefaultCourseArea(newCourseArea);
}
if (regatta.useStartTimeInference() != useStartTimeInference) {
regatta.setUseStartTimeInference(useStartTimeInference);
}
regatta.setRegattaConfiguration(newRegattaConfiguration);
if (series != null) {
for (Series seriesObj : series) {
@@ -26,21 +26,23 @@ public class AddSpecificRegatta extends AbstractAddRegattaOperation {
private final boolean persistent;
private final ScoringScheme scoringScheme;
private final Serializable defaultCourseAreaId;
private final boolean useStartTimeInference;
public AddSpecificRegatta(String regattaName, String boatClassName, Serializable id,
RegattaCreationParametersDTO seriesNamesWithFleetNamesAndFleetOrderingAndMedalAndDiscardingThresholds,
boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId) {
boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId, boolean useStartTimeInference) {
super(regattaName, boatClassName, id);
this.seriesNamesWithFleetNamesAndFleetOrderingAndMedalAndStartsWithZeroScoreAndDiscardingThresholds = seriesNamesWithFleetNamesAndFleetOrderingAndMedalAndDiscardingThresholds;
this.persistent = persistent;
this.scoringScheme = scoringScheme;
this.defaultCourseAreaId = defaultCourseAreaId;
this.useStartTimeInference = useStartTimeInference;
}
@Override
public Regatta internalApplyTo(RacingEventService toState) throws Exception {
Regatta regatta = toState.createRegatta(getBaseRegattaName(), getBoatClassName(), getId(), createSeries(toState),
persistent, scoringScheme, defaultCourseAreaId);
persistent, scoringScheme, defaultCourseAreaId, useStartTimeInference);
return regatta;
}
@@ -14,17 +14,19 @@ public class UpdateSpecificRegatta extends AbstractRacingEventServiceOperation<R
private final RegattaIdentifier regattaIdentifier;
private final UUID newDefaultCourseAreaId;
private final RegattaConfiguration newConfiguration;
private final boolean useStartTimeInference;
public UpdateSpecificRegatta(RegattaIdentifier regattaIdentifier, UUID newDefaultCourseAreaId,
RegattaConfiguration newConfiguration) {
RegattaConfiguration newConfiguration, boolean useStartTimeInference) {
this.regattaIdentifier = regattaIdentifier;
this.newDefaultCourseAreaId = newDefaultCourseAreaId;
this.newConfiguration = newConfiguration;
this.useStartTimeInference = useStartTimeInference;
}
@Override
public Regatta internalApplyTo(RacingEventService toState) throws Exception {
Regatta regatta = toState.updateRegatta(regattaIdentifier, newDefaultCourseAreaId, newConfiguration, null);
Regatta regatta = toState.updateRegatta(regattaIdentifier, newDefaultCourseAreaId, newConfiguration, null, useStartTimeInference);
return regatta;
}