From 6c5aee84f3e9cf2d8a3e430de760658b0d2bfee6 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Wed, 29 May 2019 09:39:58 +0200 Subject: [PATCH] fixed rank delivery in case of filtered competitors due to lack of permissions Change-Id: Ie87b1759db9bf2354a6d4453f4895f5341c67bb0 --- .../gateway/jaxrs/api/LeaderboardsResourceV2.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResourceV2.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResourceV2.java index e97e2fc54ed..5eb49e06e77 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResourceV2.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResourceV2.java @@ -64,7 +64,6 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { @QueryParam("maxCompetitorsCount") Integer maxCompetitorsCount, @QueryParam("secret") String regattaSecret) { ShardingContext.setShardingConstraint(ShardingType.LEADERBOARDNAME, leaderboardName); - try { Response response; Leaderboard leaderboard = getService().getLeaderboardByName(leaderboardName); @@ -133,7 +132,7 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { filteredCompetitorsFromBestToWorst.add(competitor); } }); - for (CompetitorDTO competitor: filteredCompetitorsFromBestToWorst) { + for (CompetitorDTO competitor : filteredCompetitorsFromBestToWorst) { LeaderboardRowDTO row = leaderboardDTO.rows.get(competitor); LeaderboardEntryDTO leaderboardEntry = row.fieldsByRaceColumnName.get(raceColumnName); FleetDTO fleetOfCompetitor = leaderboardEntry.fleet; @@ -151,10 +150,12 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { JSONArray jsonCompetitorEntries = new JSONArray(); jsonLeaderboard.put("competitors", jsonCompetitorEntries); jsonLeaderboard.put("ShardingLeaderboardName", ShardingType.LEADERBOARDNAME.encodeIfNeeded(leaderboard.getName())); - int competitorCounter = 1; + final int[] regattaRankCounter = new int[] { 1 }; // Remark: leaderboardDTO.competitors are ordered by total rank List filteredCompetitors = new ArrayList<>(); + final Map ranks = new HashMap<>(); // holds ranks, regardless of permission-based filtering leaderboardDTO.competitors.forEach(competitor -> { + ranks.put(competitor, regattaRankCounter[0]++); if (SecurityUtils.getSubject() .isPermitted(competitor.getIdentifier() .getStringPermission(SecuredSecurityTypes.PublicReadableActions.READ_PUBLIC)) @@ -163,9 +164,10 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { filteredCompetitors.add(competitor); } }); + int competitorCounter = 0; for (CompetitorDTO competitor : filteredCompetitors) { LeaderboardRowDTO leaderboardRowDTO = leaderboardDTO.rows.get(competitor); - if (maxCompetitorsCount != null && competitorCounter > maxCompetitorsCount) { + if (maxCompetitorsCount != null && competitorCounter >= maxCompetitorsCount) { break; } JSONObject jsonCompetitor = new JSONObject(); @@ -176,7 +178,7 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { writeBoatData(jsonBoat, rowBoatDTO); jsonCompetitor.put("boat", jsonBoat); } - jsonCompetitor.put("rank", competitorCounter); + jsonCompetitor.put("rank", ranks.get(competitor)); jsonCompetitor.put("carriedPoints", leaderboardRowDTO.carriedPoints); jsonCompetitor.put("netPoints", leaderboardRowDTO.netPoints); jsonCompetitor.put("overallRank", leaderboardDTO.getTotalRank(competitor));