From 558c3764714561453f545ae33c41bcd1dcbb6285 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Mon, 8 Oct 2018 16:35:28 +0200 Subject: [PATCH] added support for max speed in LeaderboardsResourceV2 Change-Id: I150b3861a490f26f08e1458ba3b918b72e5ef291 --- .../api/AbstractLeaderboardsResource.java | 21 +++++++------- .../jaxrs/api/LeaderboardsResourceV2.java | 28 +++++++++++++++---- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/AbstractLeaderboardsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/AbstractLeaderboardsResource.java index 158d58f0f5f..8fbe1ab213b 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/AbstractLeaderboardsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/AbstractLeaderboardsResource.java @@ -196,15 +196,14 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer protected JSONObject getLeaderboardJson(ResultStates resultState, Integer maxCompetitorsCount, TimePoint requestTimePoint, Leaderboard leaderboard, TimePoint timePoint, List raceColumnNames, - List raceDetailNames) - throws NoWindException, InterruptedException, ExecutionException { - final JSONObject jsonLeaderboard; - if (timePoint != null || resultState == ResultStates.Live) { - jsonLeaderboard = getLeaderboardJson(leaderboard, timePoint, resultState, maxCompetitorsCount, raceColumnNames, raceDetailNames); - } else { - jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, maxCompetitorsCount); - } - return jsonLeaderboard; - } - + List raceDetailNames) throws NoWindException, InterruptedException, ExecutionException { + final JSONObject jsonLeaderboard; + if (timePoint != null || resultState == ResultStates.Live) { + jsonLeaderboard = getLeaderboardJson(leaderboard, timePoint, resultState, maxCompetitorsCount, + raceColumnNames, raceDetailNames); + } else { + jsonLeaderboard = createEmptyLeaderboardJson(leaderboard, resultState, maxCompetitorsCount); + } + return jsonLeaderboard; + } } 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 a22681d1bbb..d333d61ef86 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 @@ -10,6 +10,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; @@ -105,7 +106,8 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { List raceDetailsToShow = calculateRaceDetailTypesToShow(raceDetailNames); LeaderboardDTO leaderboardDTO = leaderboard.getLeaderboardDTO( resultTimePoint, raceColumnsToShow, /* addOverallDetails */ - false, getService(), getService().getBaseDomainFactory(), + hasOverallDetail(raceDetailNames), + getService(), getService().getBaseDomainFactory(), /* fillTotalPointsUncorrected */false); JSONObject jsonLeaderboard = new JSONObject(); writeCommonLeaderboardData(jsonLeaderboard, leaderboard, resultState, leaderboardDTO.getTimePoint(), maxCompetitorsCount); @@ -204,9 +206,9 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { JSONObject jsonRaceDetails = new JSONObject(); jsonEntry.put("data", jsonRaceDetails); for (DetailType type : raceDetailsToShow) { - Pair valueForRaceDetailType = getValueForRaceDetailType(type, leaderboardEntry, currentLegEntry); + Pair valueForRaceDetailType = getValueForRaceDetailType(type, leaderboardRowDTO, leaderboardEntry, currentLegEntry); if (valueForRaceDetailType != null && valueForRaceDetailType.getA() != null && valueForRaceDetailType.getB() != null) { - jsonRaceDetails.put(valueForRaceDetailType.getA(), valueForRaceDetailType.getB()); + jsonRaceDetails.put(valueForRaceDetailType.getA(), valueForRaceDetailType.getB()); } } } @@ -216,6 +218,13 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { return jsonLeaderboard; } + private boolean hasOverallDetail(List raceDetailNames) { + final HashSet availableOverallDetailTypeNames = new HashSet<>( + Arrays.asList(getAvailableOverallDetailColumnTypes()).stream().map(dt->dt.name()).collect(Collectors.toSet())); + // returns true if the set changed, meaning there was an overall detail type in the raceDetailNames + return availableOverallDetailTypeNames.removeAll(raceDetailNames); + } + private List calculateRaceDetailTypesToShow(List raceDetailTypesNames) { List result = new ArrayList<>(); if (raceDetailTypesNames.size() == 0) { @@ -252,10 +261,15 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS, DetailType.RACE_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD_IN_METERS, DetailType.NUMBER_OF_MANEUVERS, - DetailType.RACE_CURRENT_LEG }; + DetailType.RACE_CURRENT_LEG, + DetailType.OVERALL_MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS }; } - private Pair getValueForRaceDetailType(DetailType type, LeaderboardEntryDTO entry, LegEntryDTO currentLegEntry) { + private DetailType[] getAvailableOverallDetailColumnTypes() { + return new DetailType[] { DetailType.OVERALL_MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS }; + } + + private Pair getValueForRaceDetailType(DetailType type, LeaderboardRowDTO leaderboardRowDTO, LeaderboardEntryDTO entry, LegEntryDTO currentLegEntry) { String name; Object value = null; Pair result = null; @@ -322,6 +336,10 @@ public class LeaderboardsResourceV2 extends AbstractLeaderboardsResource { value = currentLegNumber; } break; + case OVERALL_MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS: + name = "maxSpeedOverGroundInKnots"; + value = leaderboardRowDTO.maximumSpeedOverGroundInKnots==null?null:roundDouble(leaderboardRowDTO.maximumSpeedOverGroundInKnots, 2); + break; default: name = null; break;