added ess 175% rule for race finish.

This commit is contained in:
Fabian Tschirschnitz committed 2013-04-10 23:45:37 +02:00
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>
@@ -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);
@@ -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);
@@ -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) {
@@ -12,4 +12,6 @@ public interface RaceStateChangedListener {
void onIndividualRecallDisplayed(TimePoint individualRecallRemovalFireTimePoint);
void onIndividualRecallRemoval();
void onAutomaticRaceEnd(TimePoint automaticRaceEnd);
}
@@ -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) {
@@ -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);
}
}
@@ -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);
}
}
@@ -233,4 +233,10 @@ public class RaceInfoFragment extends RaceFragment implements RaceStateChangedLi
}
}
@Override
public void onAutomaticRaceEnd(TimePoint automaticRaceEnd) {
// TODO Auto-generated method stub
}
}
@@ -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 <