mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-05 03:43:52 +00:00
Revamped RaceColumn link and unlink logic. Never ever remove the
RaceDefinition upon TrackedRace removal.
This commit is contained in:
1 parent
166325d51d
commit
ff5568fd05
5 files changed
+37
-17
No files matched your search
@@ -114,6 +114,8 @@ public interface RaceColumn extends Named {
|
||||
*
|
||||
* @param fleet
|
||||
* the fleet for which to associate a race by its identifier
|
||||
* @param raceIdentifier
|
||||
* the race that should be associated with this column+fleet. It should never be null.
|
||||
*/
|
||||
void setRaceIdentifier(Fleet fleet, RaceIdentifier raceIdentifier);
|
||||
|
||||
@@ -135,7 +137,7 @@ public interface RaceColumn extends Named {
|
||||
|
||||
/**
|
||||
* Releases the {@link TrackedRace} previously set by {@link #setTrackedRace(Fleet, TrackedRace)} but leaves the
|
||||
* {@link #getRaceIdentifier(Fleet) race identifier} untouched. Therefore, the {@link TrackedRace} may be garbage
|
||||
* {@link #getRaceIdentifier(Fleet) race identifier} untouched(!). Therefore, the {@link TrackedRace} may be garbage
|
||||
* collected but may be re-resolved for this column using the race identifier at a later time.
|
||||
*
|
||||
* @param fleet
|
||||
@@ -189,5 +191,14 @@ public interface RaceColumn extends Named {
|
||||
* @param raceLogInformation
|
||||
* @param fleetImpl
|
||||
*/
|
||||
void setOrReloadRaceLogInformation(RaceLogInformation raceLogInformation, Fleet fleetImpl);
|
||||
void setOrReloadRaceLogInformation(RaceLogInformation raceLogInformation, Fleet fleetImpl);
|
||||
|
||||
/**
|
||||
* Remove the association between a race and a column. This is different from
|
||||
* {@link RaceColumn#releaseTrackedRace(Fleet)} because it will also remove the
|
||||
* association from database.
|
||||
*
|
||||
* @param fleet
|
||||
*/
|
||||
void removeRaceIdentifier(Fleet fleet);
|
||||
}
|
||||
+17
-14
@@ -71,20 +71,13 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
|
||||
public void setTrackedRace(Fleet fleet, TrackedRace trackedRace) {
|
||||
TrackedRace previouslyLinkedRace = this.trackedRaces.get(fleet);
|
||||
if (trackedRace != previouslyLinkedRace) {
|
||||
releaseTrackedRace(fleet);
|
||||
synchronized (this) {
|
||||
if (trackedRace == null) {
|
||||
setRaceIdentifier(fleet, null);
|
||||
this.trackedRaces.remove(fleet);
|
||||
} else {
|
||||
if (trackedRace != null) {
|
||||
this.trackedRaces.put(fleet, trackedRace);
|
||||
this.setRaceIdentifier(fleet, trackedRace.getRaceIdentifier());
|
||||
}
|
||||
}
|
||||
if (previouslyLinkedRace != null) {
|
||||
RaceLogIdentifierImpl identifier = new RaceLogIdentifierImpl(raceLogInformation.getIdentifierTemplate(), getName(), fleet);
|
||||
previouslyLinkedRace.detachRaceLog(identifier);
|
||||
getRaceColumnListeners().notifyListenersAboutTrackedRaceUnlinked(this, fleet, previouslyLinkedRace);
|
||||
}
|
||||
if (trackedRace != null) {
|
||||
trackedRace.attachRaceLog(getRaceLog(fleet));
|
||||
getRaceColumnListeners().notifyListenersAboutTrackedRaceLinked(this, fleet, trackedRace);
|
||||
@@ -99,18 +92,28 @@ public abstract class AbstractRaceColumn extends SimpleAbstractRaceColumn implem
|
||||
|
||||
@Override
|
||||
public void setRaceIdentifier(Fleet fleet, RaceIdentifier raceIdentifier) {
|
||||
if (raceIdentifier == null) {
|
||||
this.raceIdentifiers.remove(fleet);
|
||||
} else {
|
||||
if (raceIdentifier != null) {
|
||||
this.raceIdentifiers.put(fleet, raceIdentifier);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void releaseTrackedRace(Fleet fleet) {
|
||||
setTrackedRace(fleet, null);
|
||||
TrackedRace previouslyLinkedRace = this.trackedRaces.get(fleet);
|
||||
this.trackedRaces.remove(fleet);
|
||||
if (previouslyLinkedRace != null) {
|
||||
RaceLogIdentifierImpl identifier = new RaceLogIdentifierImpl(raceLogInformation.getIdentifierTemplate(), getName(), fleet);
|
||||
previouslyLinkedRace.detachRaceLog(identifier);
|
||||
getRaceColumnListeners().notifyListenersAboutTrackedRaceUnlinked(this, fleet, previouslyLinkedRace);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void removeRaceIdentifier(Fleet fleet) {
|
||||
releaseTrackedRace(fleet);
|
||||
this.raceIdentifiers.remove(fleet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fleet getFleetOfCompetitor(Competitor competitor) {
|
||||
for (Map.Entry<Fleet, TrackedRace> e : trackedRaces.entrySet()) {
|
||||
|
||||
+4
@@ -189,4 +189,8 @@ public class MetaLeaderboardColumn extends SimpleAbstractRaceColumn implements R
|
||||
@Override
|
||||
public void setOrReloadRaceLogInformation(RaceLogInformation raceLogInformation, Fleet fleetImpl) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeRaceIdentifier(Fleet fleet) {
|
||||
}
|
||||
}
|
||||
+2
@@ -717,7 +717,9 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
|
||||
@Override
|
||||
public Pair<String, List<RaceRecord>> getTracTracRaceRecords(URL jsonURL) throws IOException, ParseException, org.json.simple.parser.ParseException, URISyntaxException {
|
||||
logger.info("Retrieving TracTrac race records from " + jsonURL);
|
||||
JSONService jsonService = getTracTracDomainFactory().parseJSONURL(jsonURL);
|
||||
logger.info("OK retrieving TracTrac race records from " + jsonURL);
|
||||
return new Pair<String, List<RaceRecord>>(jsonService.getEventName(), jsonService.getRaceRecords());
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ public class DisconnectLeaderboardColumnFromTrackedRace extends AbstractLeaderbo
|
||||
if (leaderboard != null) {
|
||||
RaceColumn raceColumn = leaderboard.getRaceColumnByName(getColumnName());
|
||||
if (raceColumn != null) {
|
||||
raceColumn.setTrackedRace(raceColumn.getFleetByName(fleetName), null);
|
||||
raceColumn.removeRaceIdentifier(raceColumn.getFleetByName(fleetName));
|
||||
updateDB(toState, leaderboard, raceColumn);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Didn't find race "+getColumnName()+" in leaderboard "+getLeaderboardName());
|
||||
|
||||
Reference in new issue
Block a user