Merge branch 'master' into bug4811

This commit is contained in:
Axel Uhl
2021-04-19 17:33:58 +02:00
6 changed files with 35 additions and 10 deletions
@@ -789,4 +789,6 @@ public interface Leaderboard extends LeaderboardBase, HasRaceColumns {
ScoreCorrectionMapping mapRegattaScoreCorrections(RegattaScoreCorrections regattaScoreCorrections,
Map<String, RaceColumn> raceNumberOrNameToRaceColumnMap, Map<String, Competitor> sailIdToCompetitorMap,
boolean allowRaceDefaultsByOrder, boolean allowPartialImport);
boolean isResultsAreOfficial(RaceColumn raceColumn, Fleet fleet);
}
@@ -10,6 +10,7 @@ import java.util.UUID;
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.ResultsAreOfficialFinder;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEvent;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLogEventVisitor;
@@ -282,5 +283,10 @@ public abstract class AbstractLeaderboardImpl extends AbstractSimpleLeaderboardI
RegattaLogBoatDeregistrator<RegattaLog, RegattaLogEvent, RegattaLogEventVisitor> deregisterer = new RegattaLogBoatDeregistrator<>(regattaLog, boats, regattaLogEventAuthorForAbstractLeaderboard);
deregisterer.deregister(deregisterer.analyze());
}
@Override
public boolean isResultsAreOfficial(RaceColumn raceColumn, Fleet fleet) {
final RaceLog raceLog = raceColumn.getRaceLog(fleet);
return new ResultsAreOfficialFinder(raceLog).analyze() != null;
}
}
@@ -502,4 +502,9 @@ public class DelegatingRegattaLeaderboardWithCompetitorElimination extends Abstr
return getFullLeaderboard().getNetPoints(competitor, raceColumn, timePoint, discardedRaceColumns,
totalPointsProvider);
}
@Override
public boolean isResultsAreOfficial(RaceColumn raceColumn, Fleet fleet) {
return getFullLeaderboard().isResultsAreOfficial(raceColumn, fleet);
}
}
@@ -210,7 +210,7 @@ public abstract class AbstractMetaLeaderboard extends AbstractSimpleLeaderboardI
return result;
}
protected RaceColumn getColumnForLeaderboard(Leaderboard leaderboard) {
protected MetaLeaderboardColumn getColumnForLeaderboard(Leaderboard leaderboard) {
MetaLeaderboardColumn result = columnsForLeaderboards.get(leaderboard);
if (result == null) {
result = new MetaLeaderboardColumn(leaderboard, metaFleet);
@@ -276,4 +276,21 @@ public abstract class AbstractMetaLeaderboard extends AbstractSimpleLeaderboardI
public String getName() {
return name;
}
@Override
public boolean isResultsAreOfficial(RaceColumn raceColumn, Fleet fleet) {
if (!(raceColumn instanceof MetaLeaderboardColumn)) {
throw new IllegalArgumentException("Expected a MetaLeaderboardColumn in a MetaLeaderboard but got "+raceColumn.getClass());
}
final MetaLeaderboardColumn metaRaceColumn = (MetaLeaderboardColumn) raceColumn;
final Leaderboard leaderboard = metaRaceColumn.getLeaderboard();
for (final RaceColumn raceColumnLeaderboardRaceColumn : leaderboard.getRaceColumns()) {
for (final Fleet raceColumnLeaderboardFleet : raceColumnLeaderboardRaceColumn.getFleets()) {
if (!leaderboard.isResultsAreOfficial(raceColumnLeaderboardRaceColumn, raceColumnLeaderboardFleet)) {
return false;
}
}
}
return true;
}
}
@@ -10,8 +10,6 @@ import org.apache.shiro.SecurityUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.abstractlog.race.RaceLog;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.ResultsAreOfficialFinder;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorWithBoat;
import com.sap.sailing.domain.base.Fleet;
@@ -180,7 +178,7 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer
final JSONObject fleetJson = new JSONObject();
fleetsJson.add(fleetJson);
fleetJson.put("name", fleet.getName());
fleetJson.put("resultsAreOfficial", isResultsAreOfficial(raceColumn, fleet));
fleetJson.put("resultsAreOfficial", leaderboard.isResultsAreOfficial(raceColumn, fleet));
final TrackedRace trackedRace = raceColumn.getTrackedRace(fleet);
final JSONObject trackedRaceInfo;
if (trackedRace == null) {
@@ -206,11 +204,6 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer
}
}
private boolean isResultsAreOfficial(RaceColumn raceColumn, Fleet fleet) {
final RaceLog raceLog = raceColumn.getRaceLog(fleet);
return new ResultsAreOfficialFinder(raceLog).analyze() != null;
}
protected TimePoint calculateTimePointForResultState(Leaderboard leaderboard, ResultStates resultState) {
TimePoint result = null;
switch (resultState) {
@@ -30,6 +30,8 @@
<li>Importing of results where sail numbers have leading or trailing space/blank characters works now.</li>
<li>Image URLs used for events must not use the insecure HTTP protocol anymore; they have to use HTTPS now,
meaning they should start with "http://".</li>
<li>Fixed a problem with API access to seasonal/overall leaderboards regarding reporting "official" status.
Clients received an error message when querying seasonal leaderboards. This is now solved.</li>
</ul>
<h2 class="articleSubheadline">March 2021</h2>
<ul class="bulletList">