mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-15 14:56:41 +00:00
added support for max speed in LeaderboardsResourceV2
Change-Id: I150b3861a490f26f08e1458ba3b918b72e5ef291
This commit is contained in:
1 parent
990b8aac51
commit
558c376471
2 files changed
+33
-16
No files matched your search
+10
-11
@@ -196,15 +196,14 @@ public abstract class AbstractLeaderboardsResource extends AbstractSailingServer
|
||||
|
||||
protected JSONObject getLeaderboardJson(ResultStates resultState, Integer maxCompetitorsCount,
|
||||
TimePoint requestTimePoint, Leaderboard leaderboard, TimePoint timePoint, List<String> raceColumnNames,
|
||||
List<String> 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<String> 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;
|
||||
}
|
||||
}
|
||||
+23
-5
@@ -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<DetailType> 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<String, Object> valueForRaceDetailType = getValueForRaceDetailType(type, leaderboardEntry, currentLegEntry);
|
||||
Pair<String, Object> 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<String> raceDetailNames) {
|
||||
final HashSet<String> 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<DetailType> calculateRaceDetailTypesToShow(List<String> raceDetailTypesNames) {
|
||||
List<DetailType> 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<String, Object> getValueForRaceDetailType(DetailType type, LeaderboardEntryDTO entry, LegEntryDTO currentLegEntry) {
|
||||
private DetailType[] getAvailableOverallDetailColumnTypes() {
|
||||
return new DetailType[] { DetailType.OVERALL_MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS };
|
||||
}
|
||||
|
||||
private Pair<String, Object> getValueForRaceDetailType(DetailType type, LeaderboardRowDTO leaderboardRowDTO, LeaderboardEntryDTO entry, LegEntryDTO currentLegEntry) {
|
||||
String name;
|
||||
Object value = null;
|
||||
Pair<String, Object> 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;
|
||||
|
||||
Reference in new issue
Block a user