diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/racegroup/FilterableRace.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/racegroup/FilterableRace.java index 051e3a0f74c..22fdb378312 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/racegroup/FilterableRace.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/base/racegroup/FilterableRace.java @@ -3,6 +3,7 @@ package com.sap.sailing.domain.base.racegroup; import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.SeriesBase; import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; +import com.sap.sse.common.Util; /** * Describes the properties by which races may be filtered. This encompasses, in particular, the race's place @@ -22,4 +23,19 @@ public interface FilterableRace { */ RaceLogRaceStatus getStatus(); + /** + * A Series offers a sequence of RaceColumns, each of them split according to the Fleets modeled for the Series. A + * {@link RaceCell} describes a "slot" in this grid, defined by the series, the fleet and the race column. While + * this object's {@link #getName() name} represents the race column's name, this doesn't tell anything about the + * "horizontal" position in the "grid" or in other words what the index is of the race column in which this cell + * lies. + *

+ * + * Indices returned by this method start with zero, meaning the first race column in the series. This corresponds to + * what one would get by asking {@link Util#indexOf(Iterable, Object) Util.indexOf(series.getRaceColumns(), + * thisCellsRaceColumn)}, except in case the first race column is a "virtual" one that holds a non-discardable + * carry-forward result. In this case, the second Race Column, which is the first "non-virtual" one, receives + * index 0. + */ + int getZeroBasedIndexInFleet(); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java index 71683a1d6cc..95c0ab1b65c 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/OfflineDataManager.java @@ -111,7 +111,8 @@ public class OfflineDataManager extends DataManager { AppPreferences.on(context).getAuthor(), 1, RaceLogRaceStatus.FINISHING)); ManagedRace q1 = new ManagedRaceImpl(new ManagedRaceIdentifierImpl("A.B", new FleetImpl("A"), qualifying, raceGroup), - RaceStateImpl.create(new AndroidRaceLogResolver(), log, AppPreferences.on(context).getAuthor(), configuration)); + RaceStateImpl.create(new AndroidRaceLogResolver(), log, AppPreferences.on(context).getAuthor(), configuration), + /* zeroBasedIndexInFleet */ 0); log = new RaceLogImpl(UUID.randomUUID()); /* @@ -120,7 +121,8 @@ public class OfflineDataManager extends DataManager { */ ManagedRace q2 = new ManagedRaceImpl(new ManagedRaceIdentifierImpl("B", new FleetImpl("A.A"), qualifying, raceGroup), - RaceStateImpl.create(new AndroidRaceLogResolver(), log, AppPreferences.on(context).getAuthor(), configuration)); + RaceStateImpl.create(new AndroidRaceLogResolver(), log, AppPreferences.on(context).getAuthor(), configuration), + /* zeroBasedIndexInFleet */ 1); log = new RaceLogImpl(UUID.randomUUID()); /* @@ -128,7 +130,8 @@ public class OfflineDataManager extends DataManager { * RaceLogRaceStatus.FINISHED)); */ ManagedRace q3 = new ManagedRaceImpl(new ManagedRaceIdentifierImpl("Q3", new FleetImpl("Default"), qualifying, raceGroup), - RaceStateImpl.create(new AndroidRaceLogResolver(), log, AppPreferences.on(context).getAuthor(), configuration)); + RaceStateImpl.create(new AndroidRaceLogResolver(), log, AppPreferences.on(context).getAuthor(), configuration), + /* zeroBasedIndexInFleet */ 2); /* * ManagedRace m1 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl( "M1", new FleetImpl("Default"), medal, * raceGroup), null); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java index 920d04267aa..0b0789dc0ef 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/parsers/ManagedRacesDataParser.java @@ -64,7 +64,8 @@ public class ManagedRacesDataParser implements DataParser configurationLoader = globalConfigurationLoader; RegattaConfiguration localConfiguration = raceGroup.getRegattaConfiguration(); if (localConfiguration != null) { @@ -80,7 +81,8 @@ public class ManagedRacesDataParser implements DataParser + * + * Indices returned by this method start with zero, meaning the first race column in the series. This + * corresponds to what one would get by asking {@link Util#indexOf(Iterable, Object) + * Util.indexOf(series.getRaceColumns(), thisCellsRaceColumn)}, except in case the first race column is a + * "virtual" one that holds a non-discardable carry-forward result. In this case, the second Race Column, + * which is the first "non-virtual" one, receives index 0. + */ + private ManagedRaceImpl(ManagedRaceIdentifier identifier, double factor, Double explicitFactor, int zeroBasedIndexInFleet) { this.identifier = identifier; this.competitors = new ArrayList<>(); this.courseOnServer = null; this.factor = factor; this.explicitFactor = explicitFactor; + this.zeroBasedIndexInFleet = zeroBasedIndexInFleet; } - public ManagedRaceImpl(ManagedRaceIdentifier identifier, RaceState state) { - this(identifier, 0, null); + public ManagedRaceImpl(ManagedRaceIdentifier identifier, RaceState state, int zeroBasedIndexInFleet) { + this(identifier, 0, null, zeroBasedIndexInFleet); this.state = state; } - public ManagedRaceImpl(ManagedRaceIdentifier identifier, ManagedRaceCalculator calculator, double factor, Double explicitFactor) { - this(identifier, factor, explicitFactor); + public ManagedRaceImpl(ManagedRaceIdentifier identifier, ManagedRaceCalculator calculator, double factor, Double explicitFactor, int zeroBasedIndexInFleet) { + this(identifier, factor, explicitFactor, zeroBasedIndexInFleet); this.calculator = calculator; } @@ -201,4 +220,10 @@ public class ManagedRaceImpl implements ManagedRace { public String toString() { return "ManagedRaceImpl [identifier=" + identifier + "]"; } + + @Override + public int getZeroBasedIndexInFleet() { + return zeroBasedIndexInFleet; + } + } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java index a88a0cca96d..d178b015886 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java @@ -529,10 +529,10 @@ public class RaceListFragment extends LoggableFragment implements OnItemClickLis } } - private void showProtestTimeDialog(String raceGroupName) { + private void showProtestTimeDialog(String raceGroupDisplayName) { // Find the race group for which the for (RaceGroupSeriesFleet raceGroupSeriesFleet : mRacesByGroup.keySet()) { - Boolean matchingRaceGroup = raceGroupName.equals(raceGroupSeriesFleet.getDisplayName()); + Boolean matchingRaceGroup = raceGroupDisplayName.equals(raceGroupSeriesFleet.getDisplayName()); if (matchingRaceGroup) { List races = mRacesByGroup.get(raceGroupSeriesFleet); if (!isRaceListDirty(races)) {