mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-30 15:57:11 +00:00
Changed the analyzers to read only after aquiring the read lock
This commit is contained in:
1 parent
212b2e2d82
commit
fdff49ebb8
8 files changed
+210
-109
No files matched your search
+1
-1
@@ -75,7 +75,7 @@ public class ManagedRaceImpl implements ManagedRace {
|
||||
|
||||
@Override
|
||||
public CourseData getCourseDesign() {
|
||||
return null;
|
||||
return state.getCourseDesign();
|
||||
}
|
||||
|
||||
}
|
||||
+7
@@ -41,6 +41,13 @@ public interface RaceState {
|
||||
* @return the finished time or <code>null</code>.
|
||||
*/
|
||||
TimePoint getFinishedTime();
|
||||
|
||||
/**
|
||||
* Sets the current race's course design
|
||||
*
|
||||
* @return the course data or <code>null</code>.
|
||||
*/
|
||||
CourseData getCourseDesign();
|
||||
|
||||
/**
|
||||
* Sets the current race's start time
|
||||
|
||||
+9
@@ -20,6 +20,7 @@ import com.sap.sailing.racecommittee.app.domain.state.RaceState;
|
||||
import com.sap.sailing.racecommittee.app.domain.state.RaceStateChangedListener;
|
||||
import com.sap.sailing.racecommittee.app.domain.state.StartProcedure;
|
||||
import com.sap.sailing.racecommittee.app.domain.state.impl.analyzers.FinishedTimeFinder;
|
||||
import com.sap.sailing.racecommittee.app.domain.state.impl.analyzers.LastPublishedCourseDesignFinder;
|
||||
import com.sap.sailing.racecommittee.domain.state.impl.analyzers.RaceStatusAnalyzer;
|
||||
import com.sap.sailing.racecommittee.domain.state.impl.analyzers.StartTimeFinder;
|
||||
|
||||
@@ -36,6 +37,7 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
private RaceStatusAnalyzer statusAnalyzer;
|
||||
private StartTimeFinder startTimeFinder;
|
||||
private FinishedTimeFinder finishedTimeFinder;
|
||||
private LastPublishedCourseDesignFinder lastCourseDesignFinder;
|
||||
|
||||
public RaceStateImpl(PassAwareRaceLog raceLog, StartProcedure procedure) {
|
||||
this.raceLog = raceLog;
|
||||
@@ -50,6 +52,7 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
this.startTimeFinder = new StartTimeFinder(raceLog);
|
||||
this.finishedTimeFinder = new FinishedTimeFinder(raceLog);
|
||||
this.statusAnalyzer = new RaceStatusAnalyzer(raceLog);
|
||||
this.lastCourseDesignFinder = new LastPublishedCourseDesignFinder(raceLog);
|
||||
updateStatus();
|
||||
}
|
||||
|
||||
@@ -104,6 +107,12 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
return finishedTimeFinder.getFinishedTime();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseData getCourseDesign() {
|
||||
return lastCourseDesignFinder.getLastCourseDesign();
|
||||
}
|
||||
|
||||
|
||||
public void setCourseDesign(CourseData newCourseData) {
|
||||
TimePoint eventTime = MillisecondsTimePoint.now();
|
||||
|
||||
|
||||
+44
-29
@@ -1,29 +1,44 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.state.impl.analyzers;
|
||||
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
|
||||
import com.sap.sailing.racecommittee.domain.state.impl.analyzers.RaceLogAnalyzer;
|
||||
|
||||
public class FinishedTimeFinder extends RaceLogAnalyzer {
|
||||
|
||||
public FinishedTimeFinder(RaceLog raceLog) {
|
||||
super(raceLog);
|
||||
}
|
||||
|
||||
public TimePoint getFinishedTime() {
|
||||
TimePoint finishedTime = null;
|
||||
for (RaceLogEvent event : getPassEvents()) {
|
||||
if (event instanceof RaceLogRaceStatusEvent) {
|
||||
RaceLogRaceStatusEvent statusEvent = (RaceLogRaceStatusEvent) event;
|
||||
if (statusEvent.getNextStatus().equals(RaceLogRaceStatus.FINISHED)) {
|
||||
finishedTime = statusEvent.getTimePoint();
|
||||
}
|
||||
}
|
||||
}
|
||||
return finishedTime;
|
||||
}
|
||||
|
||||
}
|
||||
package com.sap.sailing.racecommittee.app.domain.state.impl.analyzers;
|
||||
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
|
||||
import com.sap.sailing.racecommittee.domain.state.impl.analyzers.RaceLogAnalyzer;
|
||||
|
||||
public class FinishedTimeFinder extends RaceLogAnalyzer {
|
||||
|
||||
public FinishedTimeFinder(RaceLog raceLog) {
|
||||
super(raceLog);
|
||||
}
|
||||
|
||||
public TimePoint getFinishedTime() {
|
||||
TimePoint finishedTime = null;
|
||||
|
||||
this.raceLog.lockForRead();
|
||||
try {
|
||||
finishedTime = searchForFinishedTime();
|
||||
} finally {
|
||||
this.raceLog.unlockAfterRead();
|
||||
}
|
||||
|
||||
return finishedTime;
|
||||
}
|
||||
|
||||
private TimePoint searchForFinishedTime() {
|
||||
TimePoint finishedTime = null;
|
||||
|
||||
for (RaceLogEvent event : getPassEvents()) {
|
||||
if (event instanceof RaceLogRaceStatusEvent) {
|
||||
RaceLogRaceStatusEvent statusEvent = (RaceLogRaceStatusEvent) event;
|
||||
if (statusEvent.getNextStatus().equals(RaceLogRaceStatus.FINISHED)) {
|
||||
finishedTime = statusEvent.getTimePoint();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return finishedTime;
|
||||
}
|
||||
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.state.impl.analyzers;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseData;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.racecommittee.domain.state.impl.analyzers.RaceLogAnalyzer;
|
||||
|
||||
public class LastPublishedCourseDesignFinder extends RaceLogAnalyzer {
|
||||
|
||||
public LastPublishedCourseDesignFinder(RaceLog raceLog) {
|
||||
super(raceLog);
|
||||
}
|
||||
|
||||
public CourseData getLastCourseDesign() {
|
||||
CourseData lastCourseData = null;
|
||||
|
||||
this.raceLog.lockForRead();
|
||||
try {
|
||||
lastCourseData = searchForLastCourseData();
|
||||
} finally {
|
||||
this.raceLog.unlockAfterRead();
|
||||
}
|
||||
|
||||
return lastCourseData;
|
||||
}
|
||||
|
||||
private CourseData searchForLastCourseData() {
|
||||
CourseData lastCourseData = null;
|
||||
|
||||
for (RaceLogEvent event : getAllEvents()) {
|
||||
if (event instanceof RaceLogCourseDesignChangedEvent) {
|
||||
RaceLogCourseDesignChangedEvent courseDesignEvent = (RaceLogCourseDesignChangedEvent) event;
|
||||
lastCourseData = courseDesignEvent.getCourseDesign();
|
||||
}
|
||||
}
|
||||
|
||||
return lastCourseData;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user