mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-17 11:19:15 +00:00
Merge remote-tracking branch 'origin/bug3286'
This commit is contained in:
+2
-2
@@ -41,7 +41,7 @@ public class MongoRaceLogStoreImpl implements RaceLogStore {
|
||||
}
|
||||
|
||||
private void addListener(RaceLogIdentifier identifier, final RaceLog raceLog) {
|
||||
MongoRaceLogStoreVisitor listener = new MongoRaceLogStoreVisitor(identifier, mongoObjectFactory);
|
||||
final MongoRaceLogStoreVisitor listener = new MongoRaceLogStoreVisitor(identifier, mongoObjectFactory);
|
||||
listeners.put(raceLog, listener);
|
||||
raceLog.addListener(listener);
|
||||
}
|
||||
@@ -55,7 +55,7 @@ public class MongoRaceLogStoreImpl implements RaceLogStore {
|
||||
|
||||
@Override
|
||||
public void removeListenersAddedByStoreFrom(RaceLog raceLog) {
|
||||
RaceLogEventVisitor visitor = listeners.get(raceLog);
|
||||
final RaceLogEventVisitor visitor = listeners.get(raceLog);
|
||||
if (visitor != null) {
|
||||
raceLog.removeListener(visitor);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,13 @@ import com.sap.sse.common.Util.Pair;
|
||||
*
|
||||
*/
|
||||
public interface RaceColumn extends Named {
|
||||
/**
|
||||
* Sets the information object used to access the race column's race logs (see
|
||||
* {@link #setRaceLogInformation(RaceLogStore, RegattaLikeIdentifier)}) and (re-)loads the contents of all fleets'
|
||||
* race logs.
|
||||
*/
|
||||
void setRaceLogInformationAndLoad(RaceLogStore raceLogStore, RegattaLikeIdentifier regattaLikeParent);
|
||||
|
||||
/**
|
||||
* Sets the information object used to access the race column's race logs.
|
||||
*/
|
||||
@@ -49,7 +56,6 @@ public interface RaceColumn extends Named {
|
||||
* Gets the race column's race log associated to the passed fleet. Note that the result may be <code>null</code>
|
||||
* particularly for columns in a {@link MetaLeaderboard}.
|
||||
*
|
||||
* @param fleet
|
||||
* @return the race log or <code>null</code> in case this column belongs to a {@link MetaLeaderboard}
|
||||
*/
|
||||
RaceLog getRaceLog(Fleet fleet);
|
||||
|
||||
+9
-3
@@ -74,14 +74,19 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void setRaceLogInformation(RaceLogStore raceLogStore, RegattaLikeIdentifier regattaLikeParent) {
|
||||
this.raceLogStore = raceLogStore;
|
||||
this.regattaLikeParent = regattaLikeParent;
|
||||
public synchronized void setRaceLogInformationAndLoad(RaceLogStore raceLogStore, RegattaLikeIdentifier regattaLikeParent) {
|
||||
setRaceLogInformation(raceLogStore, regattaLikeParent);
|
||||
for (final Fleet fleet : getFleets()) {
|
||||
reloadRaceLog(fleet);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void setRaceLogInformation(RaceLogStore raceLogStore, RegattaLikeIdentifier regattaLikeParent) {
|
||||
this.raceLogStore = raceLogStore;
|
||||
this.regattaLikeParent = regattaLikeParent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceLog getRaceLog(Fleet fleet) {
|
||||
return raceLogs.get(fleet);
|
||||
@@ -191,6 +196,7 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
|
||||
|
||||
@Override
|
||||
public void reloadRaceLog(Fleet fleet) {
|
||||
// FIXME bug3286: newOrLoadedRaceLog will have MongoRaceLogStoreListener attached; raceLogAvailable, result of de-serialization, will not; merging newOrLoadedRaceLog into raceLogAvailable will leave resulting log without persistence
|
||||
RaceLogIdentifier identifier = getRaceLogIdentifier(fleet);
|
||||
RaceLog newOrLoadedRaceLog = raceLogStore.getRaceLog(identifier, /* ignoreCache */true);
|
||||
RaceLog raceLogAvailable = raceLogs.get(fleet);
|
||||
|
||||
@@ -284,7 +284,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
}
|
||||
this.series = seriesList;
|
||||
for (Series s : series) {
|
||||
linkToRegattaAndConnectRaceLogsAndAddListeners(s);
|
||||
linkToRegattaAndConnectRaceLogsAndAddListeners(s, /* load race logs */ true);
|
||||
}
|
||||
this.persistent = persistent;
|
||||
this.scoringScheme = scoringScheme;
|
||||
@@ -323,14 +323,19 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
return rankingMetricConstructor == null ? OneDesignRankingMetric::new : rankingMetricConstructor;
|
||||
}
|
||||
|
||||
private void registerRaceLogsOnRaceColumns(Series series) {
|
||||
private void registerRaceLogsOnRaceColumns(Series series, boolean loadRaceLogs) {
|
||||
for (RaceColumn raceColumn : series.getRaceColumns()) {
|
||||
setRaceLogInformationOnRaceColumn(raceColumn);
|
||||
setRaceLogInformationOnRaceColumn(raceColumn, loadRaceLogs);
|
||||
}
|
||||
}
|
||||
|
||||
private void setRaceLogInformationOnRaceColumn(RaceColumn raceColumn) {
|
||||
raceColumn.setRaceLogInformation(raceLogStore, new RegattaAsRegattaLikeIdentifier(this));
|
||||
private void setRaceLogInformationOnRaceColumn(RaceColumn raceColumn, boolean loadRaceLogs) {
|
||||
final RegattaLikeIdentifier regattaLikeIdentifier = new RegattaAsRegattaLikeIdentifier(this);
|
||||
if (loadRaceLogs) {
|
||||
raceColumn.setRaceLogInformationAndLoad(raceLogStore, regattaLikeIdentifier);
|
||||
} else {
|
||||
raceColumn.setRaceLogInformation(raceLogStore, regattaLikeIdentifier);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -375,17 +380,14 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
|
||||
/**
|
||||
* {@link RaceColumnListeners} may not be de-serialized (yet) when the regatta is de-serialized. To avoid
|
||||
* re-registering empty objects most probably leading to null pointer exception one needs to initialize all
|
||||
* re-registering empty objects most probably leading to a {link NullPointerException} one needs to initialize all
|
||||
* listeners after all objects have been read.
|
||||
*/
|
||||
public void initializeSeriesAfterDeserialize() {
|
||||
for (Series series : getSeries()) {
|
||||
linkToRegattaAndConnectRaceLogsAndAddListeners(series);
|
||||
if (series.getRaceColumns() != null) {
|
||||
for (RaceColumnInSeries column : series.getRaceColumns()) {
|
||||
column.setRaceLogInformation(raceLogStore, new RegattaAsRegattaLikeIdentifier(this));
|
||||
}
|
||||
} else {
|
||||
for (final Series series : getSeries()) {
|
||||
// the following also transitively invokes setRaceLogInformation(raceLogStore, getRegattaLikeIdentifier()) on all race columns
|
||||
linkToRegattaAndConnectRaceLogsAndAddListeners(series, /* load race logs */ false);
|
||||
if (series.getRaceColumns() == null) {
|
||||
logger.warning("Race Columns were null during deserialization. This should not happen.");
|
||||
}
|
||||
}
|
||||
@@ -594,7 +596,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
|
||||
@Override
|
||||
public void raceColumnAddedToContainer(RaceColumn raceColumn) {
|
||||
setRaceLogInformationOnRaceColumn(raceColumn);
|
||||
setRaceLogInformationOnRaceColumn(raceColumn, /* loadRaceLogs */ true);
|
||||
raceColumnListeners.notifyListenersAboutRaceColumnAddedToContainer(raceColumn);
|
||||
}
|
||||
|
||||
@@ -790,7 +792,7 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
public void addSeries(Series seriesToAdd) {
|
||||
Series existingSeries = getSeriesByName(seriesToAdd.getName());
|
||||
if (existingSeries == null) {
|
||||
linkToRegattaAndConnectRaceLogsAndAddListeners(seriesToAdd);
|
||||
linkToRegattaAndConnectRaceLogsAndAddListeners(seriesToAdd, /* load race logs */ true);
|
||||
synchronized (this.series) {
|
||||
ArrayList<Series> newSeriesList = new ArrayList<Series>();
|
||||
for (Series seriesObject : this.series) {
|
||||
@@ -802,10 +804,10 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
}
|
||||
}
|
||||
|
||||
private void linkToRegattaAndConnectRaceLogsAndAddListeners(Series seriesToAdd) {
|
||||
private void linkToRegattaAndConnectRaceLogsAndAddListeners(Series seriesToAdd, boolean loadRaceLogs) {
|
||||
seriesToAdd.setRegatta(this);
|
||||
seriesToAdd.addRaceColumnListener(this);
|
||||
registerRaceLogsOnRaceColumns(seriesToAdd);
|
||||
registerRaceLogsOnRaceColumns(seriesToAdd, loadRaceLogs);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -178,7 +178,7 @@ public class FlexibleLeaderboardImpl extends AbstractLeaderboardImpl implements
|
||||
column = createRaceColumn(name, medalRace);
|
||||
column.addRaceColumnListener(this);
|
||||
races.add(column);
|
||||
column.setRaceLogInformation(raceLogStore, new FlexibleLeaderboardAsRegattaLikeIdentifier(this));
|
||||
column.setRaceLogInformationAndLoad(raceLogStore, new FlexibleLeaderboardAsRegattaLikeIdentifier(this));
|
||||
column.setRegattaLikeHelper(regattaLikeHelper);
|
||||
getRaceColumnListeners().notifyListenersAboutRaceColumnAddedToContainer(column);
|
||||
}
|
||||
|
||||
+4
@@ -231,6 +231,10 @@ public class MetaLeaderboardColumn extends SimpleAbstractRaceColumn implements R
|
||||
public void setMasterDataExportOngoingThreadFlag(boolean flagValue) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRaceLogInformationAndLoad(RaceLogStore raceLogStore, RegattaLikeIdentifier regattaLikeParent) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRaceLogInformation(RaceLogStore raceLogStore, RegattaLikeIdentifier regattaLikeParent) {
|
||||
}
|
||||
|
||||
+2
-2
@@ -339,7 +339,7 @@ public class ImportMasterDataOperation extends
|
||||
} else if (override) {
|
||||
for (RaceColumn raceColumn : existingLeaderboards.get(leaderboard.getName()).getRaceColumns()) {
|
||||
for (Fleet fleet : raceColumn.getFleets()) {
|
||||
TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
|
||||
final TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
|
||||
if (trackedRace != null) {
|
||||
raceColumn.releaseTrackedRace(fleet);
|
||||
}
|
||||
@@ -414,7 +414,7 @@ public class ImportMasterDataOperation extends
|
||||
|
||||
private void addAllImportedEvents(MongoObjectFactory mongoObjectFactory, RaceLogStore mongoRaceLogStore,
|
||||
final RaceLog log, RaceLogIdentifier identifier) {
|
||||
RaceLogEventVisitor storeVisitor = MongoRaceLogStoreFactory.INSTANCE
|
||||
final RaceLogEventVisitor storeVisitor = MongoRaceLogStoreFactory.INSTANCE
|
||||
.getMongoRaceLogStoreVisitor(identifier, mongoObjectFactory);
|
||||
log.lockForRead();
|
||||
try {
|
||||
|
||||
+4
-4
@@ -4162,12 +4162,12 @@ Replicator {
|
||||
|
||||
@Override
|
||||
public void reloadRaceLog(String leaderboardName, String raceColumnName, String fleetName) {
|
||||
Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
|
||||
final Leaderboard leaderboard = getLeaderboardByName(leaderboardName);
|
||||
if (leaderboard != null) {
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
final RaceColumn raceColumn = leaderboard.getRaceColumnByName(raceColumnName);
|
||||
if (raceColumn != null) {
|
||||
Fleet fleetImpl = raceColumn.getFleetByName(fleetName);
|
||||
RaceLog racelog = raceColumn.getRaceLog(fleetImpl);
|
||||
final Fleet fleetImpl = raceColumn.getFleetByName(fleetName);
|
||||
final RaceLog racelog = raceColumn.getRaceLog(fleetImpl);
|
||||
if (racelog != null) {
|
||||
raceColumn.reloadRaceLog(fleetImpl);
|
||||
logger.info("Reloaded race log for fleet " + fleetImpl + " for race column " + raceColumn.getName()
|
||||
|
||||
Reference in New Issue
Block a user