mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-05 18:42:55 +00:00
Merge branch 'bug6197' into hyperspace
This commit is contained in:
commit
b6dc1ff3bc
8 files changed
+87
-8
No files matched your search
+1
@@ -17,6 +17,7 @@ public enum RacingProcedureType {
|
||||
BASIC("Basic Countdown Start"),
|
||||
LEAGUE("League Start"),
|
||||
RRS26_3MIN("Fix Line Start with 3min Sequence (RRS26/3)"),
|
||||
SWC_5MIN("Sailing World Cup Start with 5min Sequence (2025 and onwards)"),
|
||||
SWC_4MIN("Sailing World Cup Start with 4min Sequence (Kites, Surfers)");
|
||||
|
||||
private String displayName;
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ public class RacingProceduresWithStartModeFlagTest {
|
||||
for (final RacingProcedureType type : RacingProcedureType.values()) {
|
||||
if (type != RacingProcedureType.UNKNOWN) {
|
||||
final ReadonlyRacingProcedure racingProcedure = racingProcedureFactory.createRacingProcedure(type, raceLog, /* raceLogResolver */ null);
|
||||
assertEquals(RacingProcedureType.RRS26.equals(type) || RacingProcedureType.RRS26_3MIN.equals(type) || RacingProcedureType.SWC.equals(type) || RacingProcedureType.SWC_4MIN.equals(type),
|
||||
assertEquals(RacingProcedureType.RRS26.equals(type) || RacingProcedureType.RRS26_3MIN.equals(type) || RacingProcedureType.SWC.equals(type) || RacingProcedureType.SWC_4MIN.equals(type) || RacingProcedureType.SWC_5MIN.equals(type),
|
||||
racingProcedure instanceof ConfigurableStartModeFlagRacingProcedure,
|
||||
"Racing procedure type "+type.name()+" was "+((racingProcedure instanceof ConfigurableStartModeFlagRacingProcedure) ? "" : "not ")+
|
||||
"considered one with configurable start mode flag but should have");
|
||||
|
||||
+3
@@ -12,6 +12,7 @@ import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.basic.impl.
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ess.impl.ESSRacingProcedureImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.impl.GateStartRacingProcedureImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.league.impl.LeagueRacingProcedureImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.impl.MediumSWCRacingProcedureImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.impl.RRS26RacingProcedureImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.impl.RRS26ThreeMinutesRacingProcedureImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.impl.SWCRacingProcedureImpl;
|
||||
@@ -56,6 +57,8 @@ public class ReadonlyRacingProcedureFactory implements RacingProcedureFactory {
|
||||
return new SWCRacingProcedureImpl(raceLog, author, loadedConfiguration.getSWCStartConfiguration(), raceLogResolver);
|
||||
case SWC_4MIN:
|
||||
return new ShortSWCRacingProcedureImpl(raceLog, author, loadedConfiguration.getSWCStartConfiguration(), raceLogResolver);
|
||||
case SWC_5MIN:
|
||||
return new MediumSWCRacingProcedureImpl(raceLog, author, loadedConfiguration.getSWCStartConfiguration(), raceLogResolver);
|
||||
case BASIC:
|
||||
return new BasicRacingProcedureImpl(raceLog, author, loadedConfiguration.getBasicConfiguration(), raceLogResolver);
|
||||
case LEAGUE:
|
||||
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.impl;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEventImpl;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEvents;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.FlagPoleState;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.SWCRacingProcedure;
|
||||
import com.sap.sailing.domain.base.configuration.procedures.SWCStartConfiguration;
|
||||
import com.sap.sailing.domain.common.racelog.FlagPole;
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
|
||||
public class MediumSWCRacingProcedureImpl extends SWCRacingProcedureImpl implements SWCRacingProcedure {
|
||||
|
||||
private final static Duration CLASS_AND_STARTMODE_UP_INTERVAL_5MIN = Duration.ONE_MINUTE.times(5); // 5 minutes before start
|
||||
|
||||
public MediumSWCRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author,
|
||||
SWCStartConfiguration configuration, RaceLogResolver raceLogResolver) {
|
||||
super(raceLog, author, configuration, raceLogResolver);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Duration getStartPhaseStartModeUpInterval() {
|
||||
return CLASS_AND_STARTMODE_UP_INTERVAL_5MIN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RacingProcedureType getType() {
|
||||
return RacingProcedureType.SWC_5MIN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<RaceStateEvent> createStartStateEvents(TimePoint startTime) {
|
||||
return Arrays.<RaceStateEvent>asList(
|
||||
new RaceStateEventImpl(startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_5MIN), RaceStateEvents.SWC_CLASS_AND_STARTMODE_UP),
|
||||
new RaceStateEventImpl(startTime.minus(FOUR_MINUTES_FLAG_UP_INTERVAL), RaceStateEvents.SWC_FOUR_UP),
|
||||
new RaceStateEventImpl(startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL), RaceStateEvents.SWC_THREE_UP),
|
||||
new RaceStateEventImpl(startTime.minus(TWO_MINUTES_FLAG_UP_INTERVAL), RaceStateEvents.SWC_TWO_UP),
|
||||
new RaceStateEventImpl(startTime.minus(ONE_MINUTE_FLAG_UP_INTERVAL), RaceStateEvents.SWC_ONE_UP),
|
||||
new RaceStateEventImpl(startTime, RaceStateEvents.START),
|
||||
new RaceStateEventImpl(startTime, RaceStateEvents.SWC_GREEN_UP),
|
||||
new RaceStateEventImpl(startTime.plus(CLASS_AND_STARTMODE_DOWN_INTERVAL), RaceStateEvents.SWC_CLASS_AND_STARTMODE_DOWN));
|
||||
}
|
||||
|
||||
@Override
|
||||
public FlagPoleState getActiveFlags(TimePoint startTime, TimePoint now) {
|
||||
if (now.before(startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_5MIN))) {
|
||||
return new FlagPoleState(
|
||||
Collections.singletonList(new FlagPole(cachedStartmodeFlag, false)),
|
||||
null,
|
||||
Collections.singletonList(new FlagPole(cachedStartmodeFlag, true)),
|
||||
startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_5MIN));
|
||||
} else if (now.before(startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL))) {
|
||||
return new FlagPoleState(
|
||||
Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_FOUR, false)),
|
||||
startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_5MIN),
|
||||
Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_FOUR, true)),
|
||||
startTime.minus(FOUR_MINUTES_FLAG_UP_INTERVAL));
|
||||
} else {
|
||||
return super.getActiveFlags(startTime, now);
|
||||
}
|
||||
}
|
||||
}
|
||||
+7
-7
@@ -20,7 +20,7 @@ import com.sap.sse.common.TimePoint;
|
||||
|
||||
public class ShortSWCRacingProcedureImpl extends SWCRacingProcedureImpl implements SWCRacingProcedure {
|
||||
|
||||
private final static Duration CLASS_AND_STARTMODE_UP_INTERVAL_4MIN = Duration.ONE_MINUTE.times(4); // 6 minutes before start
|
||||
private final static Duration CLASS_AND_STARTMODE_UP_INTERVAL_4MIN = Duration.ONE_MINUTE.times(4); // 4 minutes before start
|
||||
|
||||
public ShortSWCRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author,
|
||||
SWCStartConfiguration configuration, RaceLogResolver raceLogResolver) {
|
||||
@@ -57,12 +57,12 @@ public class ShortSWCRacingProcedureImpl extends SWCRacingProcedureImpl implemen
|
||||
null,
|
||||
Collections.singletonList(new FlagPole(cachedStartmodeFlag, true)),
|
||||
startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_4MIN));
|
||||
} else if (now.before(startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL))) {
|
||||
return new FlagPoleState(
|
||||
Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_THREE, false)),
|
||||
startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_4MIN),
|
||||
Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_THREE, true)),
|
||||
startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL));
|
||||
} else if (now.before(startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL))) {
|
||||
return new FlagPoleState(
|
||||
Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_THREE, false)),
|
||||
startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_4MIN),
|
||||
Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_THREE, true)),
|
||||
startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL));
|
||||
} else {
|
||||
return super.getActiveFlags(startTime, now);
|
||||
}
|
||||
|
||||
+1
@@ -212,6 +212,7 @@ public class RaceDetailPanel extends SimplePanel {
|
||||
case RRS26_3MIN:
|
||||
case SWC:
|
||||
case SWC_4MIN:
|
||||
case SWC_5MIN:
|
||||
LineStartInfoDTO rrsInfo = (LineStartInfoDTO) data.raceInfo.startProcedureDTO;
|
||||
if (rrsInfo != null) {
|
||||
if (rrsInfo.startModeFlag != null) {
|
||||
|
||||
+1
@@ -1167,6 +1167,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
|
||||
case RRS26_3MIN:
|
||||
case SWC:
|
||||
case SWC_4MIN:
|
||||
case SWC_5MIN:
|
||||
ConfigurableStartModeFlagRacingProcedure linestart = state.getTypedReadonlyRacingProcedure();
|
||||
info = new LineStartInfoDTO(linestart.getStartModeFlag());
|
||||
case UNKNOWN:
|
||||
|
||||
+2
@@ -261,6 +261,7 @@ public class AppPreferences {
|
||||
return key(R.string.preference_racing_procedure_rrs26_hasxray_key);
|
||||
case SWC:
|
||||
case SWC_4MIN:
|
||||
case SWC_5MIN:
|
||||
return key(R.string.preference_racing_procedure_swc_hasxray_key);
|
||||
case GateStart:
|
||||
return key(R.string.preference_racing_procedure_gatestart_hasxray_key);
|
||||
@@ -287,6 +288,7 @@ public class AppPreferences {
|
||||
return key(R.string.preference_racing_procedure_rrs26_resultentryenabled_key);
|
||||
case SWC:
|
||||
case SWC_4MIN:
|
||||
case SWC_5MIN:
|
||||
return key(R.string.preference_racing_procedure_swc_resultentryenabled_key);
|
||||
case GateStart:
|
||||
return key(R.string.preference_racing_procedure_gatestart_resultentryenabled_key);
|
||||
|
||||
Reference in new issue
Block a user