mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-30 15:57:11 +00:00
added ess 175% rule for race finish.
This commit is contained in:
1 parent
7ae0f1bb3f
commit
98d85cd4ce
11 files changed
+62
-2
No files matched your search
@@ -54,6 +54,7 @@
|
||||
<intent-filter>
|
||||
<action android:name="com.sap.sailing.racecommittee.app.action.registerRace" />
|
||||
<action android:name="com.sap.sailing.racecommittee.app.action.alarmAction" />
|
||||
<action android:name="com.sap.sailing.racecommittee.app.action.automaticRaceEnd" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
<service
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<string name="intentActionSendEvent">com.sap.sailing.racecommittee.app.action.sendEvent</string>
|
||||
<string name="intentActionAlarmAction">com.sap.sailing.racecommittee.app.action.alarmAction</string>
|
||||
<string name="intentActionIndividualRecallRemoval">com.sap.sailing.racecommittee.app.action.individualrecallremovalaction</string>
|
||||
<string name="intentActionAutomaticRaceEnd">com.sap.sailing.racecommittee.app.action.automaticRaceEnd</string>
|
||||
|
||||
<string name="hello">Hello World, RaceCommitteeActivity!</string>
|
||||
<string name="running_on_course">(on course %s)</string>
|
||||
|
||||
+2
@@ -31,6 +31,8 @@ public interface StartProcedure {
|
||||
|
||||
void setFinishing(TimePoint eventTime);
|
||||
|
||||
void dispatchAutomaticRaceEndEvent(TimePoint eventTime);
|
||||
|
||||
void setFinished(TimePoint eventTime);
|
||||
|
||||
void setPostponed(TimePoint eventTime, Flags lowerFlag);
|
||||
|
||||
+2
@@ -11,6 +11,8 @@ public interface StartProcedureRaceStateChangedListener {
|
||||
|
||||
void onRaceFinishing(TimePoint now);
|
||||
|
||||
void onRaceFinishing(TimePoint now, TimePoint automaticRaceEnd);
|
||||
|
||||
void onRaceFinished(TimePoint now);
|
||||
|
||||
void onIndividualRecall(TimePoint eventTime);
|
||||
|
||||
+17
-2
@@ -12,9 +12,12 @@ import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.domain.racelog.PassAwareRaceLog;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.RaceStatusAnalyzer;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.StartTimeFinder;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedure;
|
||||
import com.sap.sailing.racecommittee.app.domain.startprocedure.StartProcedureRaceStateChangedListener;
|
||||
@@ -31,6 +34,8 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
|
||||
private final static long individualRecallRemovalInterval = 4 * 60 * 1000; // minutes * seconds * milliseconds
|
||||
|
||||
private final static double essAutomaticRaceFinishMultiplyer = 0.75;
|
||||
|
||||
private List<Long> startProcedureEventIntervals;
|
||||
private PassAwareRaceLog raceLog;
|
||||
private StartProcedureRaceStateChangedListener raceStateChangedListener;
|
||||
@@ -176,12 +181,22 @@ public class ExtremeSailingSeriesStartProcedure implements StartProcedure {
|
||||
raceLog.getCurrentPassId(), Flags.BLUE, Flags.NONE, /*isDisplayed*/true);
|
||||
raceLog.add(event);
|
||||
|
||||
//TODO compute and set ESS time limit
|
||||
StartTimeFinder startTimeFinder = new StartTimeFinder(raceLog);
|
||||
long raceDuration = eventTime.asMillis()-startTimeFinder.getStartTime().asMillis();
|
||||
|
||||
TimePoint automaticRaceEnd = eventTime.plus((long) (raceDuration*essAutomaticRaceFinishMultiplyer));
|
||||
|
||||
if (raceStateChangedListener != null) {
|
||||
raceStateChangedListener.onRaceFinishing(eventTime);
|
||||
raceStateChangedListener.onRaceFinishing(eventTime, automaticRaceEnd);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispatchAutomaticRaceEndEvent(TimePoint automaticRaceEnd) {
|
||||
RaceStatusAnalyzer analyzer = new RaceStatusAnalyzer(raceLog);
|
||||
if(analyzer.getStatus().equals(RaceLogRaceStatus.FINISHING))
|
||||
setFinished(automaticRaceEnd);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFinished(TimePoint eventTime) {
|
||||
|
||||
+2
@@ -12,4 +12,6 @@ public interface RaceStateChangedListener {
|
||||
void onIndividualRecallDisplayed(TimePoint individualRecallRemovalFireTimePoint);
|
||||
|
||||
void onIndividualRecallRemoval();
|
||||
|
||||
void onAutomaticRaceEnd(TimePoint automaticRaceEnd);
|
||||
}
|
||||
+13
@@ -182,6 +182,19 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
RaceLogEvent statusEvent = RaceLogEventFactory.INSTANCE.createRaceStatusEvent(eventTime, raceLog.getCurrentPassId(), RaceLogRaceStatus.FINISHING);
|
||||
this.raceLog.add(statusEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceFinishing(TimePoint eventTime, TimePoint automaticRaceEnd) {
|
||||
onRaceFinishing(eventTime);
|
||||
notifyListenersAboutAutomaticRaceEnd(automaticRaceEnd);
|
||||
}
|
||||
|
||||
private void notifyListenersAboutAutomaticRaceEnd(TimePoint automaticRaceEnd) {
|
||||
for (RaceStateChangedListener listener : stateChangedListeners) {
|
||||
listener.onAutomaticRaceEnd(automaticRaceEnd);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceFinished(TimePoint eventTime) {
|
||||
|
||||
+5
@@ -40,4 +40,9 @@ public class RaceStateListener implements RaceStateChangedListener {
|
||||
public void onIndividualRecallRemoval() {
|
||||
service.handleIndividualRecallRemoved(race);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutomaticRaceEnd(TimePoint automaticRaceEnd) {
|
||||
service.handleAutomaticRaceEnd(race, automaticRaceEnd);
|
||||
}
|
||||
}
|
||||
+7
@@ -169,6 +169,8 @@ public class RaceStateService extends Service {
|
||||
return;
|
||||
} else if (getString(R.string.intentActionIndividualRecallRemoval).equals(action)) {
|
||||
race.getState().getStartProcedure().dispatchFiredIndividualRecallRemovalEvent(race.getState().getIndividualRecallDisplayedTime(), eventTime);
|
||||
} else if (getString(R.string.intentActionAutomaticRaceEnd).equals(action)) {
|
||||
race.getState().getStartProcedure().dispatchAutomaticRaceEndEvent(eventTime);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,4 +298,9 @@ public class RaceStateService extends Service {
|
||||
clearAlarms(race.getId());
|
||||
}
|
||||
|
||||
public void handleAutomaticRaceEnd(ManagedRace race, TimePoint automaticRaceEnd) {
|
||||
String action = getString(R.string.intentActionAutomaticRaceEnd);
|
||||
scheduleEventTime(action, race, automaticRaceEnd);
|
||||
}
|
||||
|
||||
}
|
||||
+6
@@ -233,4 +233,10 @@ public class RaceInfoFragment extends RaceFragment implements RaceStateChangedLi
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutomaticRaceEnd(TimePoint automaticRaceEnd) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+6
@@ -235,6 +235,12 @@ public class ManagedRaceListFragment extends ListFragment implements JuryFlagCli
|
||||
notifyDataChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutomaticRaceEnd(TimePoint automaticRaceEnd) {
|
||||
notifyDataChanged();
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* public void notifyDataChanged() { List<RaceListDataType> list = adapter.getItems(); for (int i = 0; i <
|
||||
|
||||
Reference in new issue
Block a user