Regattas can now be created without replication

important for master data import as it itself is a replication operation
This commit is contained in:
Frederik Petersen committed 2013-07-02 14:21:06 +02:00
1 parent 31760a3902
commit 29ce40b930
3 files changed
+41 -26

No files matched your search

@@ -537,4 +537,8 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
void reloadRaceLog(String selectedLeaderboardName, RaceColumnDTO raceColumnDTO, FleetDTO fleet);
Pair<Regatta, Boolean> createRegattaWithoutReplication(String baseRegattaName, String boatClassName, Serializable id,
Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme,
Serializable defaultCourseAreaId);
}
@@ -701,18 +701,39 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
@Override
public Regatta createRegatta(String baseRegattaName, String boatClassName,
Serializable id, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId) {
Pair<Regatta, Boolean> regattaWithCreatedFlag = createRegattaWithoutReplication(baseRegattaName, boatClassName, id, series, persistent,
scoringScheme, defaultCourseAreaId);
Regatta regatta = regattaWithCreatedFlag.getA();
if (regattaWithCreatedFlag.getB()) {
replicateSpecificRegattaWithoutRaceColumns(regatta);
}
return regatta;
}
@Override
public Pair<Regatta, Boolean> createRegattaWithoutReplication(String baseRegattaName, String boatClassName, Serializable id,
Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme,
Serializable defaultCourseAreaId) {
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);
boolean wasCreated = false;
if (!regattasByName.containsKey(regatta.getName())) {
wasCreated = true;
logger.info("putting regatta "+regatta.getName()+" ("+regatta.hashCode()+") into regattasByName of "+this);
regattasByName.put(regatta.getName(), regatta);
regatta.addRegattaListener(this);
regatta.addRaceColumnListener(raceLogReplicator);
regatta.addRaceColumnListener(raceLogScoringReplicator);
}
logger.info("Created regatta " + regatta.getName() + " (" + hashCode() + ") on "+this);
cacheAndReplicateSpecificRegattaWithoutRaceColumns(regatta);
if (persistent) {
updateStoredRegatta(regatta);
}
return regatta;
return new Pair<Regatta, Boolean>(regatta, wasCreated);
}
@Override
@@ -835,35 +856,25 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
}
/**
* If <code>regatta</code> is not yet in {@link #regattasByName}, it is added, this service is
* {@link Regatta#addRegattaListener(RegattaListener) added} as regatta listener, and the regatta and all its
* The regatta and all its
* contained {@link Regatta#getAllRaces() races} are replicated to all replica.
*
* @param regatta
* the series of this regatta must not have any {@link Series#getRaceColumns() race columns associated
* (yet)}.
*/
private void cacheAndReplicateSpecificRegattaWithoutRaceColumns(Regatta regatta) {
if (!regattasByName.containsKey(regatta.getName())) {
logger.info("putting regatta "+regatta.getName()+" ("+regatta.hashCode()+") into regattasByName of "+this);
regattasByName.put(regatta.getName(), regatta);
regatta.addRegattaListener(this);
regatta.addRaceColumnListener(raceLogReplicator);
regatta.addRaceColumnListener(raceLogScoringReplicator);
Serializable courseAreaId = null;
if (regatta.getDefaultCourseArea() != null) {
courseAreaId = regatta.getDefaultCourseArea().getId();
}
replicate(new AddSpecificRegatta(
regatta.getBaseName(), regatta.getBoatClass() == null ? null : regatta
.getBoatClass().getName(), regatta.getId(), getSeriesWithoutRaceColumnsConstructionParametersAsMap(regatta),
regatta.isPersistent(), regatta.getScoringScheme(), courseAreaId));
RegattaIdentifier regattaIdentifier = regatta.getRegattaIdentifier();
for (RaceDefinition race : regatta.getAllRaces()) {
replicate(new AddRaceDefinition(regattaIdentifier, race));
}
private void replicateSpecificRegattaWithoutRaceColumns(Regatta regatta) {
Serializable courseAreaId = null;
if (regatta.getDefaultCourseArea() != null) {
courseAreaId = regatta.getDefaultCourseArea().getId();
}
replicate(new AddSpecificRegatta(regatta.getBaseName(), regatta.getBoatClass() == null ? null : regatta
.getBoatClass().getName(), regatta.getId(),
getSeriesWithoutRaceColumnsConstructionParametersAsMap(regatta), regatta.isPersistent(),
regatta.getScoringScheme(), courseAreaId));
RegattaIdentifier regattaIdentifier = regatta.getRegattaIdentifier();
for (RaceDefinition race : regatta.getAllRaces()) {
replicate(new AddRaceDefinition(regattaIdentifier, race));
}
}
@@ -237,7 +237,7 @@ public class ImportMasterDataOperation extends AbstractRacingEventServiceOperati
String defaultCourseAreaId = singleRegattaData.getDefaultCourseAreaId();
String scoringSchemeType = singleRegattaData.getScoringSchemeType();
boolean isPersistent = singleRegattaData.isPersistent();
toState.createRegatta(baseName, boatClassName, UUID.fromString(id), series, isPersistent,
toState.createRegattaWithoutReplication(baseName, boatClassName, UUID.fromString(id), series, isPersistent,
domainFactory.createScoringScheme(ScoringSchemeType.valueOf(scoringSchemeType)),
UUID.fromString(defaultCourseAreaId));
creationCount.addOneRegatta();