check EXPORT permission on more REST API calls

This commit is contained in:
Axel Uhl committed 2026-09-14 22:58:14 +02:00
1 parent ccaba4e1c9
commit 4fbedbdb7a
2 files changed
+210 -189

No files matched your search

@@ -1,6 +1,7 @@
package com.sap.sailing.domain.common;
import static com.sap.sailing.domain.common.security.SecuredDomainType.LeaderboardActions.PREMIUM_LEADERBOARD_INFORMATION;
import static com.sap.sailing.domain.common.security.SecuredDomainType.TrackedRaceActions.EXPORT;
import static com.sap.sse.common.SortingOrder.ASCENDING;
import static com.sap.sse.common.SortingOrder.DESCENDING;
import static com.sap.sse.common.SortingOrder.NONE;
@@ -26,204 +27,206 @@ import com.sap.sse.security.shared.HasPermissions.SecuredEnum;
*
*/
public enum DetailType implements Serializable, SecuredEnum {
LEG_TACKTYPE_LONGTACK_SHORTTACK(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "TACKTYPE"),
LEG_DISTANCE_TRAVELED(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "DISTANCE_TRAVELED"),
LEG_DISTANCE_TRAVELED_INCLUDING_GATE_START(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "DISTANCE_TRAVELED_INCLUDING_GATE_START"),
LEG_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "AVERAGE_SPEED_OVER_GROUND_IN_KNOTS"),
RACE_RANK(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
REGATTA_RANK(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
OVERALL_RANK(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
LEG_RANK_GAIN(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "RANK_GAIN"),
NUMBER_OF_MANEUVERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT),
LEG_CURRENT_SPEED_OVER_GROUND_IN_KNOTS(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "CURRENT_SPEED_OVER_GROUND_IN_KNOTS"),
BRAVO_LEG_CURRENT_HEEL_IN_DEGREES(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_HEEL_IN_DEGREES"),
BRAVO_LEG_CURRENT_PITCH_IN_DEGREES(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_PITCH_IN_DEGREES"),
BRAVO_LEG_CURRENT_RIDE_HEIGHT_IN_METERS(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_RIDE_HEIGHT_IN_METERS"),
BRAVOEXTENDED_LEG_CURRENT_DISTANCE_FOILED_IN_METERS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_DISTANCE_FOILED_IN_METERS"),
BRAVOEXTENDED_LEG_CURRENT_DURATION_FOILED_IN_SECONDS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_DURATION_FOILED_IN_SECONDS"),
BRAVOEXTENDED_RACE_CURRENT_PORT_DAGGERBOARD_RAKE(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_PORT_DAGGERBOARD_RAKE"),
BRAVOEXTENDED_RACE_CURRENT_STBD_DAGGERBOARD_RAKE(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_STBD_DAGGERBOARD_RAKE"),
BRAVOEXTENDED_RACE_CURRENT_PORT_RUDDER_RAKE(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_PORT_RUDDER_RAKE"),
BRAVOEXTENDED_RACE_CURRENT_STBD_RUDDER_RAKE(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_STBD_RUDDER_RAKE"),
BRAVOEXTENDED_RACE_CURRENT_MAST_ROTATION_IN_DEGREES(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_MAST_ROTATION_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_LEEWAY_IN_DEGREES(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_LEEWAY_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_SET(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_SET"),
BRAVOEXTENDED_RACE_CURRENT_DRIFT_IN_DEGREES(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_DRIFT_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_DEPTH_IN_METERS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_DEPTH_IN_METERS"),
BRAVOEXTENDED_RACE_CURRENT_RUDDER_IN_DEGREES(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_RUDDER_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_TACK_ANGLE_IN_DEGREES(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_TACK_ANGLE_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_DEFLECTOR_PERCENTAGE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_DEFLECTOR_PERCENTAGE"),
BRAVOEXTENDED_RACE_CURRENT_DEFLECTOR_IN_MILLIMETERS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_DEFLECTOR_IN_MILLIMETERS"),
BRAVOEXTENDED_RACE_CURRENT_RAKE_IN_DEGREES(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_RAKE_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_TARGET_HEEL_ANGLE_IN_DEGREES(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_TARGET_HEEL_ANGLE_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_FORESTAY_LOAD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_FORESTAY_LOAD"),
BRAVOEXTENDED_RACE_CURRENT_FORESTAY_PRESSURE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_FORESTAY_PRESSURE"),
BRAVOEXTENDED_RACE_CURRENT_TARGET_BOATSPEED_PERCENTAGE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_TARGET_BOATSPEED_PERCENTAGE"),
LEG_ESTIMATED_TIME_TO_NEXT_WAYPOINT_IN_SECONDS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "ESTIMATED_TIME_TO_NEXT_WAYPOINT_IN_SECONDS"),
LEG_VELOCITY_MADE_GOOD_IN_KNOTS(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "VELOCITY_MADE_GOOD_IN_KNOTS"),
LEG_GAP_TO_LEADER_IN_SECONDS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "GAP_TO_LEADER_IN_SECONDS"),
LEG_GAP_TO_LEADER_IN_SECONDS_CHANGE(2, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "GAP_TO_LEADER_IN_SECONDS_CHANGE"),
LEG_GAP_CHANGE_SINCE_LEG_START_IN_SECONDS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "GAP_CHANGE_SINCE_LEG_START_IN_SECONDS"),
LEG_SIDE_TO_WHICH_MARK_AT_LEG_START_WAS_ROUNDED(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "SIDE_TO_WHICH_MARK_AT_LEG_START_WAS_ROUNDED"),
LEG_WINDWARD_DISTANCE_TO_GO_IN_METERS(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "WINDWARD_DISTANCE_TO_GO_IN_METERS"),
LEG_AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS"),
LEG_AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS"),
LEG_CURRENT_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
LEG_CURRENT_SIGNED_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_DISTANCE_TRAVELED(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT),
RACE_DISTANCE_TRAVELED_INCLUDING_GATE_START(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT),
RACE_GAP_TO_LEADER_IN_SECONDS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT),
RACE_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD_IN_METERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT),
RACE_AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT),
RACE_AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT),
CHART_WINDWARD_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
CHART_WINDWARD_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD_CHANGE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
START_TACK(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
DISTANCE_TO_START_AT_RACE_START(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
TIME_BETWEEN_RACE_START_AND_COMPETITOR_START(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
SPEED_OVER_GROUND_AT_RACE_START(1, DESCENDING, null, ValueSpreader.CUBIC_ROOT),
SPEED_OVER_GROUND_WHEN_PASSING_START(1, DESCENDING, null, ValueSpreader.CUBIC_ROOT),
DISTANCE_TO_STARBOARD_END_OF_STARTLINE_WHEN_PASSING_START_IN_METERS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
TACK(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
JIBE(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
PENALTY_CIRCLE(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
AVERAGE_MANEUVER_LOSS_IN_METERS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
AVERAGE_TACK_LOSS_IN_METERS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
AVERAGE_JIBE_LOSS_IN_METERS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_CURRENT_LEG(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CURRENT_LEG"),
RACE_DISPLAY_LEGS(0, NONE, null, ValueSpreader.CUBIC_ROOT, "DISPLAY_LEGS"),
RACE_DISPLAY_BOATS(0, NONE, null, ValueSpreader.CUBIC_ROOT),
LEG_TIME_TRAVELED(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "TIME_TRAVELED"),
LEG_CORRECTED_TIME_TRAVELED(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "CORRECTED_TIME_TRAVELED"),
TOTAL_TIME_SAILED_DOWNWIND_IN_SECONDS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
TOTAL_TIME_SAILED_UPWIND_IN_SECONDS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
TOTAL_TIME_SAILED_REACHING_IN_SECONDS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
OVERALL_MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS(1, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS"),
OVERALL_TIME_ON_TIME_FACTOR(4, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "TIME_ON_TIME_FACTOR"),
LEG_TACKTYPE_LONGTACK_SHORTTACK(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "TACKTYPE"),
LEG_DISTANCE_TRAVELED(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "DISTANCE_TRAVELED"),
LEG_DISTANCE_TRAVELED_INCLUDING_GATE_START(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "DISTANCE_TRAVELED_INCLUDING_GATE_START"),
LEG_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "AVERAGE_SPEED_OVER_GROUND_IN_KNOTS"),
RACE_RANK(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
REGATTA_RANK(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
OVERALL_RANK(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
LEG_RANK_GAIN(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "RANK_GAIN"),
NUMBER_OF_MANEUVERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
LEG_CURRENT_SPEED_OVER_GROUND_IN_KNOTS(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "CURRENT_SPEED_OVER_GROUND_IN_KNOTS"),
BRAVO_LEG_CURRENT_HEEL_IN_DEGREES(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_HEEL_IN_DEGREES"),
BRAVO_LEG_CURRENT_PITCH_IN_DEGREES(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_PITCH_IN_DEGREES"),
BRAVO_LEG_CURRENT_RIDE_HEIGHT_IN_METERS(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_RIDE_HEIGHT_IN_METERS"),
BRAVOEXTENDED_LEG_CURRENT_DISTANCE_FOILED_IN_METERS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "CURRENT_DISTANCE_FOILED_IN_METERS"),
BRAVOEXTENDED_LEG_CURRENT_DURATION_FOILED_IN_SECONDS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "CURRENT_DURATION_FOILED_IN_SECONDS"),
BRAVOEXTENDED_RACE_CURRENT_PORT_DAGGERBOARD_RAKE(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_PORT_DAGGERBOARD_RAKE"),
BRAVOEXTENDED_RACE_CURRENT_STBD_DAGGERBOARD_RAKE(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_STBD_DAGGERBOARD_RAKE"),
BRAVOEXTENDED_RACE_CURRENT_PORT_RUDDER_RAKE(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_PORT_RUDDER_RAKE"),
BRAVOEXTENDED_RACE_CURRENT_STBD_RUDDER_RAKE(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_STBD_RUDDER_RAKE"),
BRAVOEXTENDED_RACE_CURRENT_MAST_ROTATION_IN_DEGREES(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_MAST_ROTATION_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_LEEWAY_IN_DEGREES(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_LEEWAY_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_SET(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_SET"),
BRAVOEXTENDED_RACE_CURRENT_DRIFT_IN_DEGREES(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_DRIFT_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_DEPTH_IN_METERS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_DEPTH_IN_METERS"),
BRAVOEXTENDED_RACE_CURRENT_RUDDER_IN_DEGREES(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_RUDDER_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_TACK_ANGLE_IN_DEGREES(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_TACK_ANGLE_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_DEFLECTOR_PERCENTAGE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_DEFLECTOR_PERCENTAGE"),
BRAVOEXTENDED_RACE_CURRENT_DEFLECTOR_IN_MILLIMETERS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_DEFLECTOR_IN_MILLIMETERS"),
BRAVOEXTENDED_RACE_CURRENT_RAKE_IN_DEGREES(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_RAKE_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_TARGET_HEEL_ANGLE_IN_DEGREES(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_TARGET_HEEL_ANGLE_IN_DEGREES"),
BRAVOEXTENDED_RACE_CURRENT_FORESTAY_LOAD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_FORESTAY_LOAD"),
BRAVOEXTENDED_RACE_CURRENT_FORESTAY_PRESSURE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_FORESTAY_PRESSURE"),
BRAVOEXTENDED_RACE_CURRENT_TARGET_BOATSPEED_PERCENTAGE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT, "CURRENT_TARGET_BOATSPEED_PERCENTAGE"),
LEG_ESTIMATED_TIME_TO_NEXT_WAYPOINT_IN_SECONDS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "ESTIMATED_TIME_TO_NEXT_WAYPOINT_IN_SECONDS"),
LEG_VELOCITY_MADE_GOOD_IN_KNOTS(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "VELOCITY_MADE_GOOD_IN_KNOTS"),
LEG_GAP_TO_LEADER_IN_SECONDS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "GAP_TO_LEADER_IN_SECONDS"),
LEG_GAP_TO_LEADER_IN_SECONDS_CHANGE(2, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "GAP_TO_LEADER_IN_SECONDS_CHANGE"),
LEG_GAP_CHANGE_SINCE_LEG_START_IN_SECONDS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "GAP_CHANGE_SINCE_LEG_START_IN_SECONDS"),
LEG_SIDE_TO_WHICH_MARK_AT_LEG_START_WAS_ROUNDED(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "SIDE_TO_WHICH_MARK_AT_LEG_START_WAS_ROUNDED"),
LEG_WINDWARD_DISTANCE_TO_GO_IN_METERS(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "WINDWARD_DISTANCE_TO_GO_IN_METERS"),
LEG_AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS"),
LEG_AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS"),
LEG_CURRENT_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
LEG_CURRENT_SIGNED_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_DISTANCE_TRAVELED(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_DISTANCE_TRAVELED_INCLUDING_GATE_START(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_GAP_TO_LEADER_IN_SECONDS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD_IN_METERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
CHART_WINDWARD_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
CHART_WINDWARD_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD_CHANGE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
START_TACK(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
DISTANCE_TO_START_AT_RACE_START(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
TIME_BETWEEN_RACE_START_AND_COMPETITOR_START(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
SPEED_OVER_GROUND_AT_RACE_START(1, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
SPEED_OVER_GROUND_WHEN_PASSING_START(1, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
DISTANCE_TO_STARBOARD_END_OF_STARTLINE_WHEN_PASSING_START_IN_METERS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
TACK(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
JIBE(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
PENALTY_CIRCLE(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
AVERAGE_MANEUVER_LOSS_IN_METERS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
AVERAGE_TACK_LOSS_IN_METERS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
AVERAGE_JIBE_LOSS_IN_METERS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_CURRENT_LEG(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "CURRENT_LEG"),
RACE_DISPLAY_LEGS(0, NONE, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "DISPLAY_LEGS"),
RACE_DISPLAY_BOATS(0, NONE, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
LEG_TIME_TRAVELED(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "TIME_TRAVELED"),
LEG_CORRECTED_TIME_TRAVELED(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "CORRECTED_TIME_TRAVELED"),
TOTAL_TIME_SAILED_DOWNWIND_IN_SECONDS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
TOTAL_TIME_SAILED_UPWIND_IN_SECONDS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
TOTAL_TIME_SAILED_REACHING_IN_SECONDS(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
OVERALL_MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS(1, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "MAXIMUM_SPEED_OVER_GROUND_IN_KNOTS"),
OVERALL_TIME_ON_TIME_FACTOR(4, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "TIME_ON_TIME_FACTOR"),
OVERALL_TIME_ON_DISTANCE_ALLOWANCE_IN_SECONDS_PER_NAUTICAL_MILE(
0,
ASCENDING,
null,
ValueSpreader.CUBIC_ROOT, "TIME_ON_DISTANCE_ALLOWANCE_IN_SECONDS_PER_NAUTICAL_MILE"),
OVERALL_TOTAL_DISTANCE_TRAVELED(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "TOTAL_DISTANCE_TRAVELED"),
OVERALL_TOTAL_AVERAGE_SPEED_OVER_GROUND(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "TOTAL_AVERAGE_SPEED_OVER_GROUND"),
OVERALL_TOTAL_TIME_SAILED_IN_SECONDS(1, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, "TOTAL_TIME_SAILED_IN_SECONDS"),
OVERALL_TOTAL_DURATION_FOILED_IN_SECONDS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "TOTAL_DURATION_FOILED_IN_SECONDS"),
OVERALL_TOTAL_DISTANCE_FOILED_IN_METERS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT, "TOTAL_DISTANCE_FOILED_IN_METERS"),
RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT),
RACE_CURRENT_COURSE_OVER_GROUND_IN_TRUE_DEGREES(1, ASCENDING, null, ValueSpreader.LINEAR),
RACE_CURRENT_POSITION_LAT_DEG(10, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_CURRENT_POSITION_LNG_DEG(10, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
BRAVO_RACE_CURRENT_RIDE_HEIGHT_IN_METERS(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_CURRENT_DISTANCE_FOILED_IN_METERS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_CURRENT_DURATION_FOILED_IN_SECONDS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_NET_POINTS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
REGATTA_NET_POINTS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
REGATTA_NET_POINTS_SUM(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_RATIO_BETWEEN_TIME_SINCE_LAST_POSITION_FIX_AND_AVERAGE_SAMPLING_INTERVAL(1, DESCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_DISTANCE_TO_START_FIVE_SECONDS_BEFORE_RACE_START(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_SPEED_OVER_GROUND_FIVE_SECONDS_BEFORE_START(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_CALCULATED_TIME_TRAVELED(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_IMPLIED_WIND(5, DESCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_CALCULATED_TIME_AT_ESTIMATED_ARRIVAL_AT_COMPETITOR_FARTHEST_AHEAD(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT),
RACE_TIME_TRAVELED(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_TIME_TRAVELED_UPWIND(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_TIME_TRAVELED_DOWNWIND(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
RACE_TIME_TRAVELED_REACHING(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
CHART_DISTANCE_TO_START_LINE(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "DISTANCE_TO_START_LINE"),
CHART_BEAT_ANGLE(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "BEAT_ANGLE"),
CHART_ABS_TWA(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
CHART_COURSE_OVER_GROUND_TRUE_DEGREES(0, ASCENDING, null, ValueSpreader.LINEAR, "COURSE_OVER_GROUND_TRUE_DEGREES"),
OVERALL_TOTAL_SCORED_RACE_COUNT(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, "TOTAL_SCORED_RACE_COUNT"),
EXPEDITION_RACE_AWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_AWS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TWS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TWD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TARG_TWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_BOAT_SPEED(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TARG_BOAT_SPEED(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_SOG(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_COG(2, ASCENDING, null, ValueSpreader.LINEAR),
EXPEDITION_RACE_FORESTAY_LOAD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_RAKE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_COURSE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_HEADING(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_VMG(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_VMG_TARG_VMG_DELTA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_RATE_OF_TURN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_RUDDER_ANGLE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TARGET_HEEL(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TIME_TO_PORT_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TIME_TO_STB_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_DIST_TO_PORT_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_DIST_TO_STB_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TIME_TO_GUN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TIME_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TIME_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TIME_TO_BURN_TO_LINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TIME_TO_BURN_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_TIME_TO_BURN_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_DISTANCE_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_DISTANCE_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_DISTANCE_BELOW_LINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_LINE_SQUARE_FOR_WIND_DIRECTION(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_AWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_AWS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TWS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TWD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TARG_TWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_BOAT_SPEED(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TARG_BOAT_SPEED(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_SOG(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_COG(2, ASCENDING, null, ValueSpreader.LINEAR),
EXPEDITION_LEG_FORESTAY_LOAD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_RAKE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_COURSE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_HEADING(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_VMG(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_VMG_TARG_VMG_DELTA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_RATE_OF_TURN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_RUDDER_ANGLE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TARGET_HEEL(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TIME_TO_PORT_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TIME_TO_STB_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_DIST_TO_PORT_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_DIST_TO_STB_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TIME_TO_GUN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TIME_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TIME_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TIME_TO_BURN_TO_LINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TIME_TO_BURN_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_TIME_TO_BURN_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_DISTANCE_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_DISTANCE_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_DISTANCE_BELOW_LINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_LINE_SQUARE_FOR_WIND_DIRECTION(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_BARO(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_LOAD_S(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_LOAD_P(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_JIB_CAR_PORT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_JIB_CAR_STBD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_MAST_BUTT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_BARO(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_LOAD_S(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_LOAD_P(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_JIB_CAR_PORT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_JIB_CAR_STBD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
EXPEDITION_LEG_MAST_BUTT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT),
BRAVO_RACE_HEEL_IN_DEGREES(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT),
BRAVO_RACE_PITCH_IN_DEGREES(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT),
PERCENT_TARGET_BOAT_SPEED(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT),
EXPEDITION_RACE_KICKER_TENSION(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT);
ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "TIME_ON_DISTANCE_ALLOWANCE_IN_SECONDS_PER_NAUTICAL_MILE"),
OVERALL_TOTAL_DISTANCE_TRAVELED(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "TOTAL_DISTANCE_TRAVELED"),
OVERALL_TOTAL_AVERAGE_SPEED_OVER_GROUND(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "TOTAL_AVERAGE_SPEED_OVER_GROUND"),
OVERALL_TOTAL_TIME_SAILED_IN_SECONDS(1, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "TOTAL_TIME_SAILED_IN_SECONDS"),
OVERALL_TOTAL_DURATION_FOILED_IN_SECONDS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "TOTAL_DURATION_FOILED_IN_SECONDS"),
OVERALL_TOTAL_DISTANCE_FOILED_IN_METERS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "TOTAL_DISTANCE_FOILED_IN_METERS"),
RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
RACE_CURRENT_COURSE_OVER_GROUND_IN_TRUE_DEGREES(1, ASCENDING, null, ValueSpreader.LINEAR, /* trackedRaceAction */ EXPORT),
RACE_CURRENT_POSITION_LAT_DEG(10, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
RACE_CURRENT_POSITION_LNG_DEG(10, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
BRAVO_RACE_CURRENT_RIDE_HEIGHT_IN_METERS(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
RACE_CURRENT_DISTANCE_FOILED_IN_METERS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_CURRENT_DURATION_FOILED_IN_SECONDS(0, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_NET_POINTS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
REGATTA_NET_POINTS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
REGATTA_NET_POINTS_SUM(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_RATIO_BETWEEN_TIME_SINCE_LAST_POSITION_FIX_AND_AVERAGE_SAMPLING_INTERVAL(1, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_DISTANCE_TO_START_FIVE_SECONDS_BEFORE_RACE_START(1, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_SPEED_OVER_GROUND_FIVE_SECONDS_BEFORE_START(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_CALCULATED_TIME_TRAVELED(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_IMPLIED_WIND(5, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_CALCULATED_TIME_AT_ESTIMATED_ARRIVAL_AT_COMPETITOR_FARTHEST_AHEAD(0, ASCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_TIME_TRAVELED(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_TIME_TRAVELED_UPWIND(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_TIME_TRAVELED_DOWNWIND(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
RACE_TIME_TRAVELED_REACHING(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
CHART_DISTANCE_TO_START_LINE(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "DISTANCE_TO_START_LINE"),
CHART_BEAT_ANGLE(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "BEAT_ANGLE"),
CHART_ABS_TWA(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
CHART_COURSE_OVER_GROUND_TRUE_DEGREES(0, ASCENDING, null, ValueSpreader.LINEAR, /* trackedRaceAction */ null, "COURSE_OVER_GROUND_TRUE_DEGREES"),
OVERALL_TOTAL_SCORED_RACE_COUNT(0, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null, "TOTAL_SCORED_RACE_COUNT"),
EXPEDITION_RACE_AWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_AWS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TWS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TWD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TARG_TWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_BOAT_SPEED(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TARG_BOAT_SPEED(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_SOG(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_COG(2, ASCENDING, null, ValueSpreader.LINEAR, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_FORESTAY_LOAD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_RAKE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_COURSE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_HEADING(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_VMG(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_VMG_TARG_VMG_DELTA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_RATE_OF_TURN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_RUDDER_ANGLE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TARGET_HEEL(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TIME_TO_PORT_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TIME_TO_STB_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_DIST_TO_PORT_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_DIST_TO_STB_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TIME_TO_GUN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TIME_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TIME_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TIME_TO_BURN_TO_LINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TIME_TO_BURN_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_TIME_TO_BURN_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_DISTANCE_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_DISTANCE_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_DISTANCE_BELOW_LINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_LINE_SQUARE_FOR_WIND_DIRECTION(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_LEG_AWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_AWS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TWS(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TWD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TARG_TWA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_BOAT_SPEED(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TARG_BOAT_SPEED(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_SOG(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_COG(2, ASCENDING, null, ValueSpreader.LINEAR, /* trackedRaceAction */ null),
EXPEDITION_LEG_FORESTAY_LOAD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_RAKE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_COURSE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_HEADING(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_VMG(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_VMG_TARG_VMG_DELTA(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_RATE_OF_TURN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_RUDDER_ANGLE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TARGET_HEEL(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TIME_TO_PORT_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TIME_TO_STB_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_DIST_TO_PORT_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_DIST_TO_STB_LAYLINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TIME_TO_GUN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TIME_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TIME_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TIME_TO_BURN_TO_LINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TIME_TO_BURN_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_TIME_TO_BURN_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_DISTANCE_TO_COMMITTEE_BOAT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_DISTANCE_TO_PIN(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_DISTANCE_BELOW_LINE(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_LINE_SQUARE_FOR_WIND_DIRECTION(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_RACE_BARO(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_LOAD_S(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_LOAD_P(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_JIB_CAR_PORT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_JIB_CAR_STBD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_MAST_BUTT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_LEG_BARO(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_LOAD_S(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_LOAD_P(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_JIB_CAR_PORT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_JIB_CAR_STBD(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
EXPEDITION_LEG_MAST_BUTT(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ null),
BRAVO_RACE_HEEL_IN_DEGREES(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
BRAVO_RACE_PITCH_IN_DEGREES(2, DESCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
PERCENT_TARGET_BOAT_SPEED(2, DESCENDING, PREMIUM_LEADERBOARD_INFORMATION, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT),
EXPEDITION_RACE_KICKER_TENSION(2, ASCENDING, null, ValueSpreader.CUBIC_ROOT, /* trackedRaceAction */ EXPORT);
private int precision;
private SortingOrder defaultSortingOrder;
private Action premiumAction;
private Action trackedRaceAction;
private final String[] oldNames;
@@ -237,11 +240,17 @@ public enum DetailType implements Serializable, SecuredEnum {
* which it is applied.
* @param valueSpreader
* the strategy to use when mapping values of this detail type to a color range
* @param trackedRaceAction
* If not {@code null} then the user must have permission to execute this action on the tracked race to
* which it is applied in order to be allowed to obtain this detail through a REST/JSON API; use in a
* GWT RPC may still be acceptable without.
*/
DetailType(int precision, SortingOrder defaultSortingOrder, Action premiumAction, ValueSpreader valueSpreader, String... oldNames) {
DetailType(int precision, SortingOrder defaultSortingOrder, Action premiumAction, ValueSpreader valueSpreader,
Action trackedRaceAction, String... oldNames) {
this.oldNames = oldNames;
this.precision = precision;
this.premiumAction = premiumAction;
this.trackedRaceAction = trackedRaceAction;
this.defaultSortingOrder = defaultSortingOrder;
this.valueSpreader = valueSpreader;
}
@@ -275,6 +284,15 @@ public enum DetailType implements Serializable, SecuredEnum {
public Action getPremiumAction() {
return this.premiumAction;
}
/**
* If not {@code null} then the user must have permission to execute this action on the tracked race to which it is
* applied in order to be allowed to obtain this detail through a REST/JSON API; use in a GWT RPC may still be
* acceptable without.
*/
public Action getTrackedRaceAction() {
return this.trackedRaceAction;
}
/**
* Determines whether or not this {@link DetailType} represents an expedition data type.
@@ -2313,6 +2313,9 @@ public class RegattasResource extends AbstractSailingServerResource {
if (detailType.getPremiumAction() != null && leaderboard.getPermissionType().supports(detailType.getPremiumAction())) {
getSecurityService().checkCurrentUserExplicitPermissions(leaderboard, detailType.getPremiumAction());
}
if (detailType.getTrackedRaceAction() != null && trackedRace.getPermissionType().supports(detailType.getTrackedRaceAction())) {
getSecurityService().checkCurrentUserExplicitPermissions(trackedRace, detailType.getTrackedRaceAction());
}
}
final Map<Competitor, FutureTask<Iterable<Pair<TimePoint, Map<DetailType, Double>>>>> resultFutures = new HashMap<>();
for (final String competitorIdAsString : competitorIds) {