java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/racelog/RacingProcedureType.java
... ...
@@ -17,6 +17,7 @@ public enum RacingProcedureType {
17 17
BASIC("Basic Countdown Start"),
18 18
LEAGUE("League Start"),
19 19
RRS26_3MIN("Fix Line Start with 3min Sequence (RRS26/3)"),
20
+ SWC_5MIN("Sailing World Cup Start with 5min Sequence (2025 and onwards)"),
20 21
SWC_4MIN("Sailing World Cup Start with 4min Sequence (Kites, Surfers)");
21 22
22 23
private String displayName;
java/com.sap.sailing.domain.shared.android.test/src/com/sap/sailing/domain/racelog/test/RacingProceduresWithStartModeFlagTest.java
... ...
@@ -29,7 +29,7 @@ public class RacingProceduresWithStartModeFlagTest {
29 29
for (final RacingProcedureType type : RacingProcedureType.values()) {
30 30
if (type != RacingProcedureType.UNKNOWN) {
31 31
final ReadonlyRacingProcedure racingProcedure = racingProcedureFactory.createRacingProcedure(type, raceLog, /* raceLogResolver */ null);
32
- assertEquals(RacingProcedureType.RRS26.equals(type) || RacingProcedureType.RRS26_3MIN.equals(type) || RacingProcedureType.SWC.equals(type) || RacingProcedureType.SWC_4MIN.equals(type),
32
+ assertEquals(RacingProcedureType.RRS26.equals(type) || RacingProcedureType.RRS26_3MIN.equals(type) || RacingProcedureType.SWC.equals(type) || RacingProcedureType.SWC_4MIN.equals(type) || RacingProcedureType.SWC_5MIN.equals(type),
33 33
racingProcedure instanceof ConfigurableStartModeFlagRacingProcedure,
34 34
"Racing procedure type "+type.name()+" was "+((racingProcedure instanceof ConfigurableStartModeFlagRacingProcedure) ? "" : "not ")+
35 35
"considered one with configurable start mode flag but should have");
java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/impl/ReadonlyRacingProcedureFactory.java
... ...
@@ -12,6 +12,7 @@ import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.basic.impl.
12 12
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ess.impl.ESSRacingProcedureImpl;
13 13
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.impl.GateStartRacingProcedureImpl;
14 14
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.league.impl.LeagueRacingProcedureImpl;
15
+import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.impl.MediumSWCRacingProcedureImpl;
15 16
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.impl.RRS26RacingProcedureImpl;
16 17
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.impl.RRS26ThreeMinutesRacingProcedureImpl;
17 18
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.impl.SWCRacingProcedureImpl;
... ...
@@ -56,6 +57,8 @@ public class ReadonlyRacingProcedureFactory implements RacingProcedureFactory {
56 57
return new SWCRacingProcedureImpl(raceLog, author, loadedConfiguration.getSWCStartConfiguration(), raceLogResolver);
57 58
case SWC_4MIN:
58 59
return new ShortSWCRacingProcedureImpl(raceLog, author, loadedConfiguration.getSWCStartConfiguration(), raceLogResolver);
60
+ case SWC_5MIN:
61
+ return new MediumSWCRacingProcedureImpl(raceLog, author, loadedConfiguration.getSWCStartConfiguration(), raceLogResolver);
59 62
case BASIC:
60 63
return new BasicRacingProcedureImpl(raceLog, author, loadedConfiguration.getBasicConfiguration(), raceLogResolver);
61 64
case LEAGUE:
java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/line/impl/MediumSWCRacingProcedureImpl.java
... ...
@@ -0,0 +1,71 @@
1
+package com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.impl;
2
+
3
+import java.util.Arrays;
4
+import java.util.Collections;
5
+
6
+import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
7
+import com.sap.sailing.domain.abstractlog.race.RaceLog;
8
+import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
9
+import com.sap.sailing.domain.abstractlog.race.state.RaceStateEvent;
10
+import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEventImpl;
11
+import com.sap.sailing.domain.abstractlog.race.state.impl.RaceStateEvents;
12
+import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.FlagPoleState;
13
+import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.line.SWCRacingProcedure;
14
+import com.sap.sailing.domain.base.configuration.procedures.SWCStartConfiguration;
15
+import com.sap.sailing.domain.common.racelog.FlagPole;
16
+import com.sap.sailing.domain.common.racelog.Flags;
17
+import com.sap.sailing.domain.common.racelog.RacingProcedureType;
18
+import com.sap.sse.common.Duration;
19
+import com.sap.sse.common.TimePoint;
20
+
21
+public class MediumSWCRacingProcedureImpl extends SWCRacingProcedureImpl implements SWCRacingProcedure {
22
+
23
+ private final static Duration CLASS_AND_STARTMODE_UP_INTERVAL_5MIN = Duration.ONE_MINUTE.times(5); // 5 minutes before start
24
+
25
+ public MediumSWCRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author,
26
+ SWCStartConfiguration configuration, RaceLogResolver raceLogResolver) {
27
+ super(raceLog, author, configuration, raceLogResolver);
28
+ }
29
+
30
+ @Override
31
+ protected Duration getStartPhaseStartModeUpInterval() {
32
+ return CLASS_AND_STARTMODE_UP_INTERVAL_5MIN;
33
+ }
34
+
35
+ @Override
36
+ public RacingProcedureType getType() {
37
+ return RacingProcedureType.SWC_5MIN;
38
+ }
39
+
40
+ @Override
41
+ public Iterable<RaceStateEvent> createStartStateEvents(TimePoint startTime) {
42
+ return Arrays.<RaceStateEvent>asList(
43
+ new RaceStateEventImpl(startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_5MIN), RaceStateEvents.SWC_CLASS_AND_STARTMODE_UP),
44
+ new RaceStateEventImpl(startTime.minus(FOUR_MINUTES_FLAG_UP_INTERVAL), RaceStateEvents.SWC_FOUR_UP),
45
+ new RaceStateEventImpl(startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL), RaceStateEvents.SWC_THREE_UP),
46
+ new RaceStateEventImpl(startTime.minus(TWO_MINUTES_FLAG_UP_INTERVAL), RaceStateEvents.SWC_TWO_UP),
47
+ new RaceStateEventImpl(startTime.minus(ONE_MINUTE_FLAG_UP_INTERVAL), RaceStateEvents.SWC_ONE_UP),
48
+ new RaceStateEventImpl(startTime, RaceStateEvents.START),
49
+ new RaceStateEventImpl(startTime, RaceStateEvents.SWC_GREEN_UP),
50
+ new RaceStateEventImpl(startTime.plus(CLASS_AND_STARTMODE_DOWN_INTERVAL), RaceStateEvents.SWC_CLASS_AND_STARTMODE_DOWN));
51
+ }
52
+
53
+ @Override
54
+ public FlagPoleState getActiveFlags(TimePoint startTime, TimePoint now) {
55
+ if (now.before(startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_5MIN))) {
56
+ return new FlagPoleState(
57
+ Collections.singletonList(new FlagPole(cachedStartmodeFlag, false)),
58
+ null,
59
+ Collections.singletonList(new FlagPole(cachedStartmodeFlag, true)),
60
+ startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_5MIN));
61
+ } else if (now.before(startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL))) {
62
+ return new FlagPoleState(
63
+ Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_FOUR, false)),
64
+ startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_5MIN),
65
+ Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_FOUR, true)),
66
+ startTime.minus(FOUR_MINUTES_FLAG_UP_INTERVAL));
67
+ } else {
68
+ return super.getActiveFlags(startTime, now);
69
+ }
70
+ }
71
+}
java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/abstractlog/race/state/racingprocedure/line/impl/ShortSWCRacingProcedureImpl.java
... ...
@@ -20,7 +20,7 @@ import com.sap.sse.common.TimePoint;
20 20
21 21
public class ShortSWCRacingProcedureImpl extends SWCRacingProcedureImpl implements SWCRacingProcedure {
22 22
23
- private final static Duration CLASS_AND_STARTMODE_UP_INTERVAL_4MIN = Duration.ONE_MINUTE.times(4); // 6 minutes before start
23
+ private final static Duration CLASS_AND_STARTMODE_UP_INTERVAL_4MIN = Duration.ONE_MINUTE.times(4); // 4 minutes before start
24 24
25 25
public ShortSWCRacingProcedureImpl(RaceLog raceLog, AbstractLogEventAuthor author,
26 26
SWCStartConfiguration configuration, RaceLogResolver raceLogResolver) {
... ...
@@ -57,12 +57,12 @@ public class ShortSWCRacingProcedureImpl extends SWCRacingProcedureImpl implemen
57 57
null,
58 58
Collections.singletonList(new FlagPole(cachedStartmodeFlag, true)),
59 59
startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_4MIN));
60
- } else if (now.before(startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL))) {
61
- return new FlagPoleState(
62
- Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_THREE, false)),
63
- startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_4MIN),
64
- Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_THREE, true)),
65
- startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL));
60
+ } else if (now.before(startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL))) {
61
+ return new FlagPoleState(
62
+ Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_THREE, false)),
63
+ startTime.minus(CLASS_AND_STARTMODE_UP_INTERVAL_4MIN),
64
+ Arrays.asList(new FlagPole(cachedStartmodeFlag, true), new FlagPole(Flags.SWC_THREE, true)),
65
+ startTime.minus(THREE_MINUTES_FLAG_UP_INTERVAL));
66 66
} else {
67 67
return super.getActiveFlags(startTime, now);
68 68
}
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/regattaoverview/client/RaceDetailPanel.java
... ...
@@ -212,6 +212,7 @@ public class RaceDetailPanel extends SimplePanel {
212 212
case RRS26_3MIN:
213 213
case SWC:
214 214
case SWC_4MIN:
215
+ case SWC_5MIN:
215 216
LineStartInfoDTO rrsInfo = (LineStartInfoDTO) data.raceInfo.startProcedureDTO;
216 217
if (rrsInfo != null) {
217 218
if (rrsInfo.startModeFlag != null) {
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java
... ...
@@ -1167,6 +1167,7 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
1167 1167
case RRS26_3MIN:
1168 1168
case SWC:
1169 1169
case SWC_4MIN:
1170
+ case SWC_5MIN:
1170 1171
ConfigurableStartModeFlagRacingProcedure linestart = state.getTypedReadonlyRacingProcedure();
1171 1172
info = new LineStartInfoDTO(linestart.getStartModeFlag());
1172 1173
case UNKNOWN:
mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java
... ...
@@ -261,6 +261,7 @@ public class AppPreferences {
261 261
return key(R.string.preference_racing_procedure_rrs26_hasxray_key);
262 262
case SWC:
263 263
case SWC_4MIN:
264
+ case SWC_5MIN:
264 265
return key(R.string.preference_racing_procedure_swc_hasxray_key);
265 266
case GateStart:
266 267
return key(R.string.preference_racing_procedure_gatestart_hasxray_key);
... ...
@@ -287,6 +288,7 @@ public class AppPreferences {
287 288
return key(R.string.preference_racing_procedure_rrs26_resultentryenabled_key);
288 289
case SWC:
289 290
case SWC_4MIN:
291
+ case SWC_5MIN:
290 292
return key(R.string.preference_racing_procedure_swc_resultentryenabled_key);
291 293
case GateStart:
292 294
return key(R.string.preference_racing_procedure_gatestart_resultentryenabled_key);