Merge remote-tracking branch 'origin/master'

This commit is contained in:
fmittag committed 2013-06-26 17:32:36 +02:00
commit 3d2e5baf75
6 files changed
+39 -19

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);
}
@@ -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()) {
@@ -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) {
}
}
@@ -1700,8 +1700,8 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
}
}
} catch (NoWindException e) {
logger.warning("Unable to determine leg type for race " + getRace().getName()
+ " while trying to estimate wind");
logger.fine("Unable to determine leg type for race " + getRace().getName()
+ " while trying to estimate wind (Background: I've got a NoWindException)");
bearings = null;
}
}
@@ -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());
}
@@ -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());