mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-11 05:12:43 +00:00
Merge remote-tracking branch 'server/master'
This commit is contained in:
commit
214d2b8131
3 files changed
+38
-17
No files matched your search
+14
-6
@@ -6,6 +6,7 @@ import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
@@ -31,7 +32,10 @@ import com.sap.sailing.domain.tracking.MarkPassing;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
|
||||
import com.sap.sse.security.shared.impl.SecuredSecurityTypes;
|
||||
|
||||
public abstract class AbstractLeaderboardsResource extends AbstractSailingServerResource {
|
||||
private static final Logger logger = Logger.getLogger(AbstractLeaderboardsResource.class.getName());
|
||||
@@ -54,12 +58,16 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer
|
||||
return result;
|
||||
}
|
||||
|
||||
protected JSONObject createEmptyLeaderboardJson(Leaderboard leaderboard, ResultStates resultState, Integer maxCompetitorsCount) throws NoWindException {
|
||||
protected JSONObject createEmptyLeaderboardJson(Leaderboard leaderboard, ResultStates resultState, Integer maxCompetitorsCount, boolean userPresentedValidRegattaSecret) throws NoWindException {
|
||||
JSONObject jsonLeaderboard = new JSONObject();
|
||||
writeCommonLeaderboardData(jsonLeaderboard, leaderboard, resultState, null, maxCompetitorsCount);
|
||||
JSONArray jsonCompetitorEntries = new JSONArray();
|
||||
jsonLeaderboard.put("competitors", jsonCompetitorEntries);
|
||||
for (Competitor competitor : leaderboard.getCompetitors()) {
|
||||
for (Competitor competitor : Util.filter(leaderboard.getCompetitors(),
|
||||
competitor->userPresentedValidRegattaSecret || SecurityUtils.getSubject().isPermitted(competitor.getIdentifier()
|
||||
.getStringPermission(SecuredSecurityTypes.PublicReadableActions.READ_PUBLIC))
|
||||
|| SecurityUtils.getSubject()
|
||||
.isPermitted(competitor.getIdentifier().getStringPermission(DefaultActions.READ)))) {
|
||||
JSONObject jsonCompetitor = new JSONObject();
|
||||
jsonCompetitor.put("name", competitor.getName());
|
||||
jsonCompetitor.put("shortName", competitor.getShortName());
|
||||
@@ -245,20 +253,20 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer
|
||||
protected abstract JSONObject getLeaderboardJson(Leaderboard leaderboard, TimePoint resultTimePoint,
|
||||
ResultStates resultState, Integer maxCompetitorsCount, List<String> raceColumnNames,
|
||||
List<String> raceDetailNames, boolean competitorAndBoatIdsOnly,
|
||||
List<String> showOnlyActiveRacesForCompetitorIds)
|
||||
List<String> showOnlyActiveRacesForCompetitorIds, boolean userPresentedValidRegattaSecret)
|
||||
throws NoWindException, InterruptedException, ExecutionException;
|
||||
|
||||
protected JSONObject getLeaderboardJson(ResultStates resultState, Integer maxCompetitorsCount,
|
||||
TimePoint requestTimePoint, Leaderboard leaderboard, TimePoint timePoint, List<String> raceColumnNames,
|
||||
List<String> raceDetailNames, boolean competitorAndBoatIdsOnly,
|
||||
List<String> showOnlyActiveRacesForCompetitorIds)
|
||||
List<String> showOnlyActiveRacesForCompetitorIds, boolean userPresentedValidRegattaSecret)
|
||||
throws NoWindException, InterruptedException, ExecutionException {
|
||||
final JSONObject jsonLeaderboard;
|
||||
if (timePoint != null || resultState == ResultStates.Live) {
|
||||
jsonLeaderboard = getLeaderboardJson(leaderboard, timePoint, resultState, maxCompetitorsCount,
|
||||
raceColumnNames, raceDetailNames, competitorAndBoatIdsOnly, showOnlyActiveRacesForCompetitorIds);
|
||||
raceColumnNames, raceDetailNames, competitorAndBoatIdsOnly, showOnlyActiveRacesForCompetitorIds, userPresentedValidRegattaSecret);
|
||||
} else {
|
||||
jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, maxCompetitorsCount);
|
||||
jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, maxCompetitorsCount, userPresentedValidRegattaSecret);
|
||||
}
|
||||
return jsonLeaderboard;
|
||||
}
|
||||
|
||||
+17
-5
@@ -218,7 +218,7 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
JSONObject jsonLeaderboard;
|
||||
jsonLeaderboard = getLeaderboardJson(resultState, maxCompetitorsCount, requestTimePoint,
|
||||
leaderboard, timePoint, /* race column names */ null, /* race detail names */ null, competitorAndBoatIdsOnly,
|
||||
/* showOnlyActiveRacesForCompetitorIds */ null);
|
||||
/* showOnlyActiveRacesForCompetitorIds */ null, skip);
|
||||
StringWriter sw = new StringWriter();
|
||||
jsonLeaderboard.writeJSONString(sw);
|
||||
String json = sw.getBuffer().toString();
|
||||
@@ -238,7 +238,7 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
@Override
|
||||
protected JSONObject getLeaderboardJson(Leaderboard leaderboard,
|
||||
TimePoint resultTimePoint, ResultStates resultState, Integer maxCompetitorsCount, List<String> raceColumnNames,
|
||||
List<String> raceDetailNames, boolean competitorIdsOnly, List<String> showOnlyActiveRacesForCompetitorIds)
|
||||
List<String> raceDetailNames, boolean competitorIdsOnly, List<String> showOnlyActiveRacesForCompetitorIds, boolean userPresentedValidRegattaSecret)
|
||||
throws NoWindException, InterruptedException, ExecutionException {
|
||||
LeaderboardDTO leaderboardDTO = leaderboard.getLeaderboardDTO(
|
||||
resultTimePoint, Collections.<String> emptyList(), /* addOverallDetails */
|
||||
@@ -249,7 +249,12 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
JSONArray jsonCompetitorEntries = new JSONArray();
|
||||
jsonLeaderboard.put("competitors", jsonCompetitorEntries);
|
||||
int counter = 1;
|
||||
for (CompetitorDTO competitor : leaderboardDTO.competitors) {
|
||||
for (CompetitorDTO competitor : Util.filter(leaderboardDTO.competitors,
|
||||
competitor -> userPresentedValidRegattaSecret || SecurityUtils.getSubject()
|
||||
.isPermitted(competitor.getIdentifier().getStringPermission(
|
||||
SecuredSecurityTypes.PublicReadableActions.READ_PUBLIC))
|
||||
|| SecurityUtils.getSubject().isPermitted(
|
||||
competitor.getIdentifier().getStringPermission(DefaultActions.READ)))) {
|
||||
LeaderboardRowDTO leaderboardRowDTO = leaderboardDTO.rows.get(competitor);
|
||||
if (maxCompetitorsCount != null && counter > maxCompetitorsCount) {
|
||||
break;
|
||||
@@ -545,7 +550,6 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName);
|
||||
Competitor competitor = getService().getCompetitorAndBoatStore()
|
||||
.getExistingCompetitorByIdAsString(competitorIdAsString);
|
||||
|
||||
if (competitor == null) {
|
||||
response = Response
|
||||
.status(Status.NOT_FOUND).entity("Could not find a competitor with id '"
|
||||
@@ -1312,7 +1316,15 @@ public class LeaderboardsResource extends AbstractLeaderboardsResource {
|
||||
map(mark->trackedRace.getTrack(mark)).filter(markTrack->markTrack!=null).
|
||||
map(markTrack->markTrack.getEstimatedPosition(timeToUseForStart, /* extrapolate */ false)).
|
||||
collect(Collectors.toList());
|
||||
Util.addAll(trackedRace.getRace().getCompetitors(), competitors);
|
||||
Util.addAll(
|
||||
// filter for those competitors that the current user may read
|
||||
Util.filter(trackedRace.getRace().getCompetitors(),
|
||||
competitor -> SecurityUtils.getSubject()
|
||||
.isPermitted(competitor.getIdentifier().getStringPermission(
|
||||
SecuredSecurityTypes.PublicReadableActions.READ_PUBLIC))
|
||||
|| SecurityUtils.getSubject().isPermitted(
|
||||
competitor.getIdentifier().getStringPermission(DefaultActions.READ))),
|
||||
competitors);
|
||||
competitors.sort((a, b)->{
|
||||
final MarkPassing aStartMarkPassing = trackedRace.getMarkPassing(a, firstWaypoint);
|
||||
final MarkPassing bStartMarkPassing = trackedRace.getMarkPassing(b, firstWaypoint);
|
||||
|
||||
+7
-6
@@ -98,9 +98,9 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
if (timePoint != null || resultState == ResultStates.Live) {
|
||||
jsonLeaderboard = getLeaderboardJson(leaderboard, timePoint, resultState, maxCompetitorsCount,
|
||||
raceColumnNames, raceDetails, competitorAndBoatIdsOnly,
|
||||
showOnlyActiveRacesForCompetitorIds);
|
||||
showOnlyActiveRacesForCompetitorIds, skip);
|
||||
} else {
|
||||
jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, maxCompetitorsCount);
|
||||
jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, maxCompetitorsCount, skip);
|
||||
}
|
||||
StringWriter sw = new StringWriter();
|
||||
jsonLeaderboard.writeJSONString(sw);
|
||||
@@ -118,9 +118,10 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JSONObject getLeaderboardJson(Leaderboard leaderboard,
|
||||
TimePoint resultTimePoint, ResultStates resultState, Integer maxCompetitorsCount,
|
||||
List<String> raceColumnNames, List<String> raceDetailNames, boolean competitorAndBoatIdsOnly, List<String> showOnlyActiveRacesForCompetitorIds)
|
||||
protected JSONObject getLeaderboardJson(Leaderboard leaderboard, TimePoint resultTimePoint,
|
||||
ResultStates resultState, Integer maxCompetitorsCount, List<String> raceColumnNames,
|
||||
List<String> raceDetailNames, boolean competitorAndBoatIdsOnly,
|
||||
List<String> showOnlyActiveRacesForCompetitorIds, boolean userPresentedValidRegattaSecret)
|
||||
throws NoWindException, InterruptedException, ExecutionException {
|
||||
List<String> raceColumnsToShow = calculateRaceColumnsToShow(leaderboard, raceColumnNames, showOnlyActiveRacesForCompetitorIds, resultTimePoint);
|
||||
List<DetailType> raceDetailsToShow = calculateRaceDetailTypesToShow(raceDetailNames);
|
||||
@@ -137,7 +138,7 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource {
|
||||
Map<String, Map<CompetitorDTO, Integer>> competitorsOrderedByFleets = new HashMap<>();
|
||||
List<CompetitorDTO> filteredCompetitorsFromBestToWorst = new ArrayList<>();
|
||||
competitorsFromBestToWorst.forEach(competitor -> {
|
||||
if (SecurityUtils.getSubject().isPermitted(competitor.getIdentifier()
|
||||
if (userPresentedValidRegattaSecret || SecurityUtils.getSubject().isPermitted(competitor.getIdentifier()
|
||||
.getStringPermission(SecuredSecurityTypes.PublicReadableActions.READ_PUBLIC))
|
||||
|| SecurityUtils.getSubject()
|
||||
.isPermitted(competitor.getIdentifier().getStringPermission(DefaultActions.READ))) {
|
||||
|
||||
Reference in new issue
Block a user