+ * A leaderboard panel may have been provided with a valid {@link RaceTimesInfoProvider} upon creation; in this
+ * case, that object will be returned. If none was provided to the constructor, one is created and remembered if no
+ * previously created/remembered object exists.
+ *
*
* Precondition: {@link #timer} is not null
*/
@@ -601,20 +580,21 @@ public class LeaderboardPanel extends SimplePanel implements Component {
private final CompetitorColumnBase base;
-
+
protected CompetitorColumn(CompetitorColumnBase base) {
super(base.getCell(getLeaderboard()), SortingOrder.ASCENDING, LeaderboardPanel.this);
this.base = base;
}
- public CompetitorColumn(CompositeCell compositeCell, CompetitorColumnBase base) {
+ public CompetitorColumn(CompositeCell compositeCell,
+ CompetitorColumnBase base) {
super(compositeCell, SortingOrder.ASCENDING, LeaderboardPanel.this);
this.base = base;
}
@@ -643,11 +623,11 @@ public class LeaderboardPanel extends SimplePanel implements Component extends LeaderboardSortableColumnWithMinMax {
private final CompetitorFetcher competitorFetcher;
-
+
protected SailIDColumn(CompetitorFetcher competitorFetcher) {
super(new TextCell(), SortingOrder.ASCENDING, LeaderboardPanel.this);
this.competitorFetcher = competitorFetcher;
@@ -680,16 +660,19 @@ public class LeaderboardPanel extends SimplePanel implements Component() {
@Override
public int compare(T o1, T o2) {
- return competitorFetcher.getCompetitor(o1).getSailID() == null ? competitorFetcher.getCompetitor(o2).getSailID() == null ? 0 : -1
- : competitorFetcher.getCompetitor(o2).getSailID() == null ? 1 : Collator.getInstance().compare(
- competitorFetcher.getCompetitor(o1).getSailID(), competitorFetcher.getCompetitor(o2).getSailID());
+ return competitorFetcher.getCompetitor(o1).getSailID() == null
+ ? competitorFetcher.getCompetitor(o2).getSailID() == null ? 0 : -1
+ : competitorFetcher.getCompetitor(o2).getSailID() == null ? 1
+ : Collator.getInstance().compare(competitorFetcher.getCompetitor(o1).getSailID(),
+ competitorFetcher.getCompetitor(o2).getSailID());
}
};
}
@Override
public SafeHtmlHeader getHeader() {
- return new SafeHtmlHeaderWithTooltip(SafeHtmlUtils.fromString(stringMessages.competitor()), stringMessages.sailIdColumnTooltip());
+ return new SafeHtmlHeaderWithTooltip(SafeHtmlUtils.fromString(stringMessages.competitor()),
+ stringMessages.sailIdColumnTooltip());
}
@Override
@@ -698,20 +681,21 @@ public class LeaderboardPanel extends SimplePanel implements Component");
}
-
if (flagImageURL != null && !flagImageURL.isEmpty()) {
- sb.appendHtmlConstant("
");
+ sb.appendHtmlConstant("
");
sb.appendHtmlConstant(" ");
} else {
final ImageResource flagImageResource;
- if (twoLetterIsoCountryCode==null || twoLetterIsoCountryCode.isEmpty()) {
+ if (twoLetterIsoCountryCode == null || twoLetterIsoCountryCode.isEmpty()) {
flagImageResource = FlagImageResolver.getEmptyFlagImageResource();
} else {
flagImageResource = FlagImageResolver.getFlagImageResource(twoLetterIsoCountryCode);
@@ -742,12 +726,11 @@ public class LeaderboardPanel extends SimplePanel implements Component extends ExpandableSortableColumn {
private RaceColumnDTO race;
-
private final String headerStyle;
private final String columnStyle;
- public RaceColumn(RaceColumnDTO race, boolean enableExpansion, Cell cell,
- SortingOrder preferredSortingOrder, String headerStyle, String columnStyle) {
+ public RaceColumn(RaceColumnDTO race, boolean enableExpansion, Cell cell, SortingOrder preferredSortingOrder,
+ String headerStyle, String columnStyle) {
super(LeaderboardPanel.this, enableExpansion, cell, preferredSortingOrder, stringMessages,
LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, selectedRaceDetails, LeaderboardPanel.this);
setHorizontalAlignment(ALIGN_CENTER);
@@ -759,9 +742,9 @@ public class LeaderboardPanel extends SimplePanel implements Component");
}
- html.appendEscaped(entry.reasonForMaxPoints == MaxPointsReason.NONE ? "" : entry.reasonForMaxPoints.name());
+ html.appendEscaped(
+ entry.reasonForMaxPoints == MaxPointsReason.NONE ? "" : entry.reasonForMaxPoints.name());
if (entry.discarded) {
html.appendHtmlConstant("");
}
@@ -864,21 +849,21 @@ public class LeaderboardPanel extends SimplePanel implements Component 0 ? 1 : intermediate_result < 0 ? -1 : 0;
} else {
result = intermediate_result > 0 ? -1 : intermediate_result < 0 ? 1 : 0;
}
} else {
- List competitorsFromBestToWorst = getLeaderboard().getCompetitorsFromBestToWorst(
- race);
+ List competitorsFromBestToWorst = getLeaderboard()
+ .getCompetitorsFromBestToWorst(race);
int o1Rank = competitorsFromBestToWorst.indexOf(o1.competitor) + 1;
int o2Rank = competitorsFromBestToWorst.indexOf(o2.competitor) + 1;
- result = o1Rank == 0 ? o2Rank == 0 ? 0 : isAscending() ? 1 : -1 : o2Rank == 0 ? isAscending() ? -1
- : 1 : o1Rank - o2Rank;
+ result = o1Rank == 0 ? o2Rank == 0 ? 0 : isAscending() ? 1 : -1
+ : o2Rank == 0 ? isAscending() ? -1 : 1 : o1Rank - o2Rank;
}
return result;
}
@@ -892,24 +877,26 @@ public class LeaderboardPanel extends SimplePanel implements Component getHeader() {
- SortableExpandableColumnHeader header = new SortableExpandableColumnHeader(/* title */race.getRaceColumnName(),
- /* iconURL */race.isMedalRace() ? "/gwt/images/medal_small.png" : null, LeaderboardPanel.this, this, stringMessages);
+ SortableExpandableColumnHeader header = new SortableExpandableColumnHeader(
+ /* title */race.getRaceColumnName(),
+ /* iconURL */race.isMedalRace() ? "/gwt/images/medal_small.png" : null, LeaderboardPanel.this, this,
+ stringMessages);
return header;
}
}
public static DetailType[] getAvailableRaceDetailColumnTypes() {
return new DetailType[] { DetailType.RACE_GAP_TO_LEADER_IN_SECONDS,
- DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS,
- DetailType.RACE_DISTANCE_TRAVELED, DetailType.RACE_DISTANCE_TRAVELED_INCLUDING_GATE_START,
- DetailType.RACE_TIME_TRAVELED, DetailType.RACE_CALCULATED_TIME_TRAVELED,
+ DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS, DetailType.RACE_DISTANCE_TRAVELED,
+ DetailType.RACE_DISTANCE_TRAVELED_INCLUDING_GATE_START, DetailType.RACE_TIME_TRAVELED,
+ DetailType.RACE_CALCULATED_TIME_TRAVELED,
DetailType.RACE_CALCULATED_TIME_AT_ESTIMATED_ARRIVAL_AT_COMPETITOR_FARTHEST_AHEAD,
- DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS, DetailType.RACE_CURRENT_RIDE_HEIGHT_IN_METERS,
- DetailType.RACE_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD_IN_METERS,
- DetailType.NUMBER_OF_MANEUVERS, DetailType.DISPLAY_LEGS, DetailType.CURRENT_LEG,
+ DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS, DetailType.RACE_CURRENT_RIDE_HEIGHT_IN_METERS,
+ DetailType.RACE_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD_IN_METERS, DetailType.NUMBER_OF_MANEUVERS,
+ DetailType.DISPLAY_LEGS, DetailType.CURRENT_LEG,
DetailType.RACE_AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS,
DetailType.RACE_AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS,
- DetailType.RACE_RATIO_BETWEEN_TIME_SINCE_LAST_POSITION_FIX_AND_AVERAGE_SAMPLING_INTERVAL};
+ DetailType.RACE_RATIO_BETWEEN_TIME_SINCE_LAST_POSITION_FIX_AND_AVERAGE_SAMPLING_INTERVAL };
}
public static DetailType[] getAvailableRaceStartAnalysisColumnTypes() {
@@ -921,13 +908,10 @@ public class LeaderboardPanel extends SimplePanel implements Component implements RaceNameProvider {
@@ -965,71 +949,96 @@ public class LeaderboardPanel extends SimplePanel implements Component> result = new HashMap<>();
result.put(DetailType.RACE_RATIO_BETWEEN_TIME_SINCE_LAST_POSITION_FIX_AND_AVERAGE_SAMPLING_INTERVAL,
- new TimeSinceLastGpsFixColumn(DetailType.RACE_RATIO_BETWEEN_TIME_SINCE_LAST_POSITION_FIX_AND_AVERAGE_SAMPLING_INTERVAL,
- new RaceRatioBetweenTimeSinceLastPositionFixAndAverageSamplingInterval(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new TimeSinceLastGpsFixColumn(
+ DetailType.RACE_RATIO_BETWEEN_TIME_SINCE_LAST_POSITION_FIX_AND_AVERAGE_SAMPLING_INTERVAL,
+ new RaceRatioBetweenTimeSinceLastPositionFixAndAverageSamplingInterval(),
+ LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
result.put(DetailType.RACE_DISTANCE_TRAVELED,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_DISTANCE_TRAVELED, new RaceDistanceTraveledInMeters(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.RACE_DISTANCE_TRAVELED,
+ new RaceDistanceTraveledInMeters(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
result.put(DetailType.RACE_DISTANCE_TRAVELED_INCLUDING_GATE_START,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_DISTANCE_TRAVELED_INCLUDING_GATE_START, new RaceDistanceTraveledIncludingGateStartInMeters(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
- result.put(DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS, new RaceAverageSpeedInKnots(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.RACE_DISTANCE_TRAVELED_INCLUDING_GATE_START,
+ new RaceDistanceTraveledIncludingGateStartInMeters(), LEG_COLUMN_HEADER_STYLE,
+ LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ result.put(DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS,
+ new FormattedDoubleDetailTypeColumn(DetailType.RACE_AVERAGE_SPEED_OVER_GROUND_IN_KNOTS,
+ new RaceAverageSpeedInKnots(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
result.put(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS, new RaceGapToLeaderInSeconds(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS,
+ new RaceGapToLeaderInSeconds(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
result.put(DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS, new RaceCurrentSpeedOverGroundInKnots(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
- result.put(DetailType.RACE_CURRENT_RIDE_HEIGHT_IN_METERS, new RideHeightColumn(DetailType.RACE_CURRENT_RIDE_HEIGHT_IN_METERS,
- new RaceCurrentRideHeightInMeters(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS,
+ new RaceCurrentSpeedOverGroundInKnots(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
+ result.put(DetailType.RACE_CURRENT_RIDE_HEIGHT_IN_METERS,
+ new RideHeightColumn(DetailType.RACE_CURRENT_RIDE_HEIGHT_IN_METERS,
+ new RaceCurrentRideHeightInMeters(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
result.put(DetailType.RACE_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD_IN_METERS,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD_IN_METERS, new RaceDistanceToCompetitorFarthestAheadInMeters(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.RACE_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD_IN_METERS,
+ new RaceDistanceToCompetitorFarthestAheadInMeters(), LEG_COLUMN_HEADER_STYLE,
+ LEG_COLUMN_STYLE, LeaderboardPanel.this));
result.put(DetailType.RACE_AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS, new RaceAverageAbsoluteCrossTrackErrorInMeters(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.RACE_AVERAGE_ABSOLUTE_CROSS_TRACK_ERROR_IN_METERS,
+ new RaceAverageAbsoluteCrossTrackErrorInMeters(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
result.put(DetailType.RACE_AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS, new RaceAverageSignedCrossTrackErrorInMeters(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.RACE_AVERAGE_SIGNED_CROSS_TRACK_ERROR_IN_METERS,
+ new RaceAverageSignedCrossTrackErrorInMeters(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
result.put(DetailType.RACE_DISTANCE_TO_START_FIVE_SECONDS_BEFORE_RACE_START,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_DISTANCE_TO_START_FIVE_SECONDS_BEFORE_RACE_START, new DistanceToStartFiveSecondsBeforeStartInMeters(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(
+ DetailType.RACE_DISTANCE_TO_START_FIVE_SECONDS_BEFORE_RACE_START,
+ new DistanceToStartFiveSecondsBeforeStartInMeters(), LEG_COLUMN_HEADER_STYLE,
+ LEG_COLUMN_STYLE, LeaderboardPanel.this));
result.put(DetailType.RACE_SPEED_OVER_GROUND_FIVE_SECONDS_BEFORE_START,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_SPEED_OVER_GROUND_FIVE_SECONDS_BEFORE_START, new SpeedFiveSecondsBeforeStartInKnots(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.RACE_SPEED_OVER_GROUND_FIVE_SECONDS_BEFORE_START,
+ new SpeedFiveSecondsBeforeStartInKnots(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
result.put(DetailType.DISTANCE_TO_START_AT_RACE_START,
- new FormattedDoubleDetailTypeColumn(DetailType.DISTANCE_TO_START_AT_RACE_START, new DistanceToStartAtRaceStartInMeters(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.DISTANCE_TO_START_AT_RACE_START,
+ new DistanceToStartAtRaceStartInMeters(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
result.put(DetailType.TIME_BETWEEN_RACE_START_AND_COMPETITOR_START,
- new FormattedDoubleDetailTypeColumn(DetailType.TIME_BETWEEN_RACE_START_AND_COMPETITOR_START, new TimeBetweenRaceStartAndCompetitorStartInSeconds(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.TIME_BETWEEN_RACE_START_AND_COMPETITOR_START,
+ new TimeBetweenRaceStartAndCompetitorStartInSeconds(), LEG_COLUMN_HEADER_STYLE,
+ LEG_COLUMN_STYLE, LeaderboardPanel.this));
result.put(DetailType.SPEED_OVER_GROUND_AT_RACE_START,
- new FormattedDoubleDetailTypeColumn(DetailType.SPEED_OVER_GROUND_AT_RACE_START, new SpeedOverGroundAtRaceStartInKnots(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.SPEED_OVER_GROUND_AT_RACE_START,
+ new SpeedOverGroundAtRaceStartInKnots(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
result.put(DetailType.SPEED_OVER_GROUND_WHEN_PASSING_START,
- new FormattedDoubleDetailTypeColumn(DetailType.SPEED_OVER_GROUND_WHEN_PASSING_START, new SpeedOverGroundWhenPassingStartInKnots(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ new FormattedDoubleDetailTypeColumn(DetailType.SPEED_OVER_GROUND_WHEN_PASSING_START,
+ new SpeedOverGroundWhenPassingStartInKnots(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
result.put(DetailType.DISTANCE_TO_STARBOARD_END_OF_STARTLINE_WHEN_PASSING_START_IN_METERS,
- new FormattedDoubleDetailTypeColumn(DetailType.DISTANCE_TO_STARBOARD_END_OF_STARTLINE_WHEN_PASSING_START_IN_METERS, new DistanceToStarboardSideOfStartLineInMeters(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
- result.put(DetailType.START_TACK, new StartingTackColumn(new TackWhenStarting(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE));
- result.put(DetailType.NUMBER_OF_MANEUVERS, new ManeuverCountRaceColumn(getLeaderboardPanel(), this, stringMessages,
- LeaderboardPanel.this.selectedManeuverDetails, LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
- LEG_DETAIL_COLUMN_HEADER_STYLE, LEG_DETAIL_COLUMN_STYLE, LeaderboardPanel.this));
- result.put(DetailType.CURRENT_LEG,
- new FormattedDoubleDetailTypeColumn(DetailType.CURRENT_LEG, new CurrentLeg(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
- result.put(DetailType.RACE_TIME_TRAVELED, new TimeTraveledRaceColumn(getLeaderboardPanel(), this,
- stringMessages, LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LEG_DETAIL_COLUMN_HEADER_STYLE,
- LEG_DETAIL_COLUMN_STYLE));
+ new FormattedDoubleDetailTypeColumn(
+ DetailType.DISTANCE_TO_STARBOARD_END_OF_STARTLINE_WHEN_PASSING_START_IN_METERS,
+ new DistanceToStarboardSideOfStartLineInMeters(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
+ result.put(DetailType.START_TACK,
+ new StartingTackColumn(new TackWhenStarting(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE));
+ result.put(DetailType.NUMBER_OF_MANEUVERS,
+ new ManeuverCountRaceColumn(getLeaderboardPanel(), this, stringMessages,
+ LeaderboardPanel.this.selectedManeuverDetails, LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LEG_DETAIL_COLUMN_HEADER_STYLE, LEG_DETAIL_COLUMN_STYLE, LeaderboardPanel.this));
+ result.put(DetailType.CURRENT_LEG, new FormattedDoubleDetailTypeColumn(DetailType.CURRENT_LEG,
+ new CurrentLeg(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
+ result.put(DetailType.RACE_TIME_TRAVELED,
+ new TimeTraveledRaceColumn(getLeaderboardPanel(), this, stringMessages, LEG_COLUMN_HEADER_STYLE,
+ LEG_COLUMN_STYLE, LEG_DETAIL_COLUMN_HEADER_STYLE, LEG_DETAIL_COLUMN_STYLE));
result.put(DetailType.RACE_CALCULATED_TIME_TRAVELED,
- new FormattedDoubleDetailTypeColumn(DetailType.RACE_CALCULATED_TIME_TRAVELED, new RaceCalculatedTimeTraveledInSeconds(),
+ new FormattedDoubleDetailTypeColumn(DetailType.RACE_CALCULATED_TIME_TRAVELED,
+ new RaceCalculatedTimeTraveledInSeconds(), LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE,
+ LeaderboardPanel.this));
+ result.put(DetailType.RACE_CALCULATED_TIME_AT_ESTIMATED_ARRIVAL_AT_COMPETITOR_FARTHEST_AHEAD,
+ new FormattedDoubleDetailTypeColumn(
+ DetailType.RACE_CALCULATED_TIME_AT_ESTIMATED_ARRIVAL_AT_COMPETITOR_FARTHEST_AHEAD,
+ new RaceCalculatedTimeAtEstimatedArrivalAtCompetitorFarthestAheadInSeconds(),
LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
- result.put(DetailType.RACE_CALCULATED_TIME_AT_ESTIMATED_ARRIVAL_AT_COMPETITOR_FARTHEST_AHEAD, new FormattedDoubleDetailTypeColumn(
- DetailType.RACE_CALCULATED_TIME_AT_ESTIMATED_ARRIVAL_AT_COMPETITOR_FARTHEST_AHEAD,
- new RaceCalculatedTimeAtEstimatedArrivalAtCompetitorFarthestAheadInSeconds(),
- LEG_COLUMN_HEADER_STYLE, LEG_COLUMN_STYLE, LeaderboardPanel.this));
return result;
}
@@ -1078,21 +1087,24 @@ public class LeaderboardPanel extends SimplePanel implements Componentnull if there are no fixes in the track.
+ * Reports the ratio of the time that passed since the last position fix and the average sampling interval of
+ * the competitor's track. On a perfect track, this value will never exceed 1.0. Immediately when a fix is
+ * received, this value goes to 0.0. For a competitor whose tracker is lagging, this value can grow considerably
+ * greater than 1. The value goes to null if there are no fixes in the track.
*
* @author Axel Uhl (D043530)
*
*/
- private class RaceRatioBetweenTimeSinceLastPositionFixAndAverageSamplingInterval implements LegDetailField {
+ private class RaceRatioBetweenTimeSinceLastPositionFixAndAverageSamplingInterval
+ implements LegDetailField {
@Override
public Double get(LeaderboardRowDTO row) {
Double result = null;
LeaderboardEntryDTO fieldsForRace = row.fieldsByRaceColumnName.get(getRaceColumnName());
- if (fieldsForRace != null && fieldsForRace.timeSinceLastPositionFixInSeconds != null && fieldsForRace.averageSamplingInterval != null) {
- result = fieldsForRace.timeSinceLastPositionFixInSeconds / fieldsForRace.averageSamplingInterval.asSeconds();
+ if (fieldsForRace != null && fieldsForRace.timeSinceLastPositionFixInSeconds != null
+ && fieldsForRace.averageSamplingInterval != null) {
+ result = fieldsForRace.timeSinceLastPositionFixInSeconds
+ / fieldsForRace.averageSamplingInterval.asSeconds();
}
return result;
}
@@ -1119,7 +1131,8 @@ public class LeaderboardPanel extends SimplePanel implements Component {
+ private class RaceCalculatedTimeAtEstimatedArrivalAtCompetitorFarthestAheadInSeconds
+ implements LegDetailField {
@Override
public Double get(LeaderboardRowDTO row) {
Double result = null;
@@ -1390,7 +1405,8 @@ public class LeaderboardPanel extends SimplePanel implements Component> implements LegDetailField {
@Override
public final T get(LeaderboardRowDTO row) {
@@ -1438,12 +1454,12 @@ public class LeaderboardPanel extends SimplePanel implements Component {
@Override
protected Double getBeforeLastLegFinished(LegEntryDTO currentLegDetail) {
@@ -1455,7 +1471,7 @@ public class LeaderboardPanel extends SimplePanel implements Component {
@Override
protected Double getBeforeLastLegFinished(LegEntryDTO currentLegDetail) {
@@ -1473,35 +1489,36 @@ public class LeaderboardPanel extends SimplePanel implements Component {
private final String columnStyle;
- private final MaxPointsReason[] MAX_POINTS_REASONS_THAT_IDENTIFY_NON_FINISHED_RACES =
- new MaxPointsReason[] {MaxPointsReason.DNS, MaxPointsReason.DNF, MaxPointsReason.DNC};
+ private final MaxPointsReason[] MAX_POINTS_REASONS_THAT_IDENTIFY_NON_FINISHED_RACES = new MaxPointsReason[] {
+ MaxPointsReason.DNS, MaxPointsReason.DNF, MaxPointsReason.DNC };
protected TotalRacesCompletedColumn(String columnStyle) {
super(new TextCell(), SortingOrder.ASCENDING, LeaderboardPanel.this);
this.columnStyle = columnStyle;
setHorizontalAlignment(ALIGN_CENTER);
}
-
+
private int computeNumberOfRacesCompleted(LeaderboardRowDTO object) {
int racesSailedInRow = 0;
for (RaceColumnDTO raceColumn : getLeaderboard().getRaceList()) {
LeaderboardEntryDTO entryBefore = object.fieldsByRaceColumnName.get(raceColumn.getName());
if (entryBefore.netPoints != null) {
- if (entryBefore.reasonForMaxPoints.equals(MaxPointsReason.NONE) ||
- !Util.contains(Arrays.asList(MAX_POINTS_REASONS_THAT_IDENTIFY_NON_FINISHED_RACES), entryBefore.reasonForMaxPoints)) {
+ if (entryBefore.reasonForMaxPoints.equals(MaxPointsReason.NONE)
+ || !Util.contains(Arrays.asList(MAX_POINTS_REASONS_THAT_IDENTIFY_NON_FINISHED_RACES),
+ entryBefore.reasonForMaxPoints)) {
racesSailedInRow++;
}
- }
+ }
}
return racesSailedInRow;
}
@@ -1513,8 +1530,8 @@ public class LeaderboardPanel extends SimplePanel implements Component");
sb.appendEscaped(getValue(object));
sb.appendHtmlConstant("");
@@ -1527,7 +1544,8 @@ public class LeaderboardPanel extends SimplePanel implements Component 0 ? 1 : result < 0 ? -1 : 0;
}
};
@@ -1540,7 +1558,8 @@ public class LeaderboardPanel extends SimplePanel implements Component");
sb.appendEscaped(getValue(object));
sb.appendHtmlConstant("");
@@ -1592,7 +1611,8 @@ public class LeaderboardPanel extends SimplePanel implements Component(new AbstractSafeHtmlRenderer() {
@Override
public SafeHtml render(LeaderboardRowDTO object) {
- return new SafeHtmlBuilder().appendEscaped(object.carriedPoints == null ? "" : scoreFormat.format(object.carriedPoints)).toSafeHtml();
+ return new SafeHtmlBuilder()
+ .appendEscaped(object.carriedPoints == null ? "" : scoreFormat.format(object.carriedPoints))
+ .toSafeHtml();
}
}) {
@Override
- protected void render(com.google.gwt.cell.client.Cell.Context context, SafeHtml data, SafeHtmlBuilder sb) {
+ protected void render(com.google.gwt.cell.client.Cell.Context context, SafeHtml data,
+ SafeHtmlBuilder sb) {
sb.append(data);
}
}, SortingOrder.ASCENDING, LeaderboardPanel.this);
@@ -1642,19 +1665,24 @@ public class LeaderboardPanel extends SimplePanel implements Component
- implements CompetitorSelectionChangeListener {
+ private class LeaderboardSelectionCheckboxColumn
+ extends com.sap.sailing.gwt.ui.client.shared.controls.SelectionCheckboxColumn
+ implements CompetitorSelectionChangeListener {
protected LeaderboardSelectionCheckboxColumn(final CompetitorSelectionProvider competitorSelectionProvider) {
- super(tableResources.cellTableStyle().cellTableCheckboxSelected(), tableResources.cellTableStyle().cellTableCheckboxDeselected(),
- tableResources.cellTableStyle().cellTableCheckboxColumnCell(), new EntityIdentityComparator() {
+ super(tableResources.cellTableStyle().cellTableCheckboxSelected(),
+ tableResources.cellTableStyle().cellTableCheckboxDeselected(),
+ tableResources.cellTableStyle().cellTableCheckboxColumnCell(),
+ new EntityIdentityComparator() {
@Override
public boolean representSameEntity(LeaderboardRowDTO dto1, LeaderboardRowDTO dto2) {
return dto1.competitor.getIdAsString().equals(dto2.competitor.getIdAsString());
}
+
@Override
public int hashCode(LeaderboardRowDTO t) {
return t.competitor.getIdAsString().hashCode();
@@ -1662,15 +1690,24 @@ public class LeaderboardPanel extends SimplePanel implements Component competitors) {}
- @Override public void filterChanged(FilterSet> oldFilterSet, FilterSet> newFilterSet) {}
- @Override public void filteredCompetitorsListChanged(Iterable filteredCompetitors) {}
+ @Override
+ public void competitorsListChanged(Iterable competitors) {
+ }
+
+ @Override
+ public void filterChanged(FilterSet> oldFilterSet,
+ FilterSet> newFilterSet) {
+ }
+
+ @Override
+ public void filteredCompetitorsListChanged(Iterable filteredCompetitors) {
+ }
/**
* Ensure that the checkbox is redrawn when the competitor selection changes
@@ -1695,9 +1732,10 @@ public class LeaderboardPanel extends SimplePanel implements Component {
public TotalRankColumn() {
super(new TextCell(), SortingOrder.ASCENDING, LeaderboardPanel.this);
@@ -1725,7 +1763,8 @@ public class LeaderboardPanel extends SimplePanel implements Component(
- /* pageSize */10000, tableResources);
+ leaderboardTable = new FlushableSortedCellTableWithStylableHeaders(/* pageSize */10000,
+ tableResources);
leaderboardTable.addCellPreviewHandler(new CellPreviewEvent.Handler() {
@Override
public void onCellPreview(CellPreviewEvent event) {
if (BrowserEvents.FOCUS.equals(event.getNativeEvent().getType())) {
elementToBlur = event.getNativeEvent().getEventTarget().cast();
elementToBlur.blur();
- blurInOnSelectionChanged = 2; // blur a couple of times; doing it one time only doesn't seem to work reliably
+ blurInOnSelectionChanged = 2; // blur a couple of times; doing it one time only doesn't seem to work
+ // reliably
blurFocusedElementAfterSelectionChange();
}
}
@@ -1851,7 +1896,8 @@ public class LeaderboardPanel extends SimplePanel implements Component();
- // remember handler registration so we can temporarily remove it and re-add it to suspend selection events while we're actively changing it
+ // remember handler registration so we can temporarily remove it and re-add it to suspend selection events while
+ // we're actively changing it
selectionChangeHandler = new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
@@ -1859,20 +1905,22 @@ public class LeaderboardPanel extends SimplePanel implements Component 0) {
blurInOnSelectionChanged--;
blurFocusedElementAfterSelectionChange();
}
}
};
- leaderboardAsTableSelectionModelRegistration = leaderboardSelectionModel.addSelectionChangeHandler(selectionChangeHandler);
+ leaderboardAsTableSelectionModelRegistration = leaderboardSelectionModel
+ .addSelectionChangeHandler(selectionChangeHandler);
leaderboardTable.setSelectionModel(leaderboardSelectionModel, selectionCheckboxColumn.getSelectionManager());
setShowAddedScores(settings.isShowAddedScores());
setShowCompetitorSailId(settings.isShowCompetitorSailIdColumn());
setShowCompetitorFullName(settings.isShowCompetitorFullNameColumn());
- setShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(settings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor());
-
+ setShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(
+ settings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor());
SimplePanel mainPanel = new SimplePanel();
contentPanel = new FlowPanel();
leaderboardTable.getElement().getStyle().setMarginTop(10, Unit.PX);
@@ -1880,7 +1928,6 @@ public class LeaderboardPanel extends SimplePanel implements Component();
-
// the information panel
if (!isEmbedded) {
Widget toolbarPanel = createToolbarPanel();
@@ -1922,14 +1969,12 @@ public class LeaderboardPanel extends SimplePanel implements Component filter : competitorSelectionProvider.getCompetitorsFilterSet().getFilters()) {
+ for (Filter filter : competitorSelectionProvider.getCompetitorsFilterSet()
+ .getFilters()) {
if (filter instanceof FilterWithUI>) {
- labelText += ((FilterWithUI)filter).getLocalizedDescription(stringMessages) + ", ";
+ labelText += ((FilterWithUI) filter).getLocalizedDescription(stringMessages)
+ + ", ";
} else {
labelText += filter.getName() + ", ";
}
}
- filterStatusLabel.setText("Active Filter(s): " + labelText.substring(0, labelText.length()-2));
+ filterStatusLabel.setText("Active Filter(s): " + labelText.substring(0, labelText.length() - 2));
filterClearButton.setVisible(true);
filterControlPanel.setVisible(true);
} else {
@@ -2016,35 +2062,37 @@ public class LeaderboardPanel extends SimplePanel implements Component {
@Override
public Double get(LeaderboardRowDTO row) {
return row.totalDistanceTraveledInMeters;
}
}
-
+
private static class TimeOnTimeFactorColumn implements LegDetailField {
@Override
public Double get(LeaderboardRowDTO row) {
return row.competitor.getTimeOnTimeFactor();
}
}
-
+
private static class TimeOnDistanceAllowanceInSecondsPerNauticalMileColumn implements LegDetailField {
@Override
public Double get(LeaderboardRowDTO row) {
- return row.competitor.getTimeOnDistanceAllowancePerNauticalMile() == null ? null :
- row.competitor.getTimeOnDistanceAllowancePerNauticalMile().asSeconds();
+ return row.competitor.getTimeOnDistanceAllowancePerNauticalMile() == null ? null
+ : row.competitor.getTimeOnDistanceAllowancePerNauticalMile().asSeconds();
}
}
-
+
private static class TotalAverageSpeedOverGroundField implements LegDetailField {
@Override
public Double get(LeaderboardRowDTO row) {
final Double result;
- if (row.totalDistanceTraveledInMeters != null && row.totalTimeSailedInSeconds != null && row.totalTimeSailedInSeconds != 0.0) {
- result = row.totalDistanceTraveledInMeters / row.totalTimeSailedInSeconds / Mile.METERS_PER_NAUTICAL_MILE * 3600;
+ if (row.totalDistanceTraveledInMeters != null && row.totalTimeSailedInSeconds != null
+ && row.totalTimeSailedInSeconds != 0.0) {
+ result = row.totalDistanceTraveledInMeters / row.totalTimeSailedInSeconds
+ / Mile.METERS_PER_NAUTICAL_MILE * 3600;
} else {
result = null;
}
@@ -2060,16 +2108,15 @@ public class LeaderboardPanel extends SimplePanel implements Componentcolumn to the right end of the {@link #getLeaderboardTable() leaderboard table} and sets
- * the column style according to the {@link LeaderboardSortableColumnWithMinMax#getColumnStyle() column's style definition}.
+ * the column style according to the {@link LeaderboardSortableColumnWithMinMax#getColumnStyle() column's style
+ * definition}.
*/
protected void addColumn(AbstractSortableColumnWithMinMax column) {
- leaderboardTable.addColumn(column, column.getHeader(), column.getComparator(), column
- .getPreferredSortingOrder().isAscending());
+ leaderboardTable.addColumn(column, column.getHeader(), column.getComparator(),
+ column.getPreferredSortingOrder().isAscending());
String columnStyle = column.getColumnStyle();
if (columnStyle != null) {
getLeaderboardTable().addColumnStyleName(getLeaderboardTable().getColumnCount() - 1, columnStyle);
@@ -2294,7 +2343,8 @@ public class LeaderboardPanel extends SimplePanel implements Component() {
@@ -2308,15 +2358,15 @@ public class LeaderboardPanel extends SimplePanel implements Componentnull
- * is used as time point. The condition for this is encapsulated in this method so others can find out. For example, when a time change
- * is signaled due to local offset / delay adjustments, no additional call to {@link #loadCompleteLeaderboard(boolean)} would be required
- * as null will be passed in any case, not being affected by local time offsets.
+ * In {@link PlayModes#Live live mode}, when {@link #loadCompleteLeaderboard(boolean) loading the leaderboard
+ * contents}, null is used as time point. The condition for this is encapsulated in this method so
+ * others can find out. For example, when a time change is signaled due to local offset / delay adjustments, no
+ * additional call to {@link #loadCompleteLeaderboard(boolean)} would be required as null will be
+ * passed in any case, not being affected by local time offsets.
*/
private boolean useNullAsTimePoint() {
return timer.getPlayMode() == PlayModes.Live;
@@ -2360,7 +2411,7 @@ public class LeaderboardPanel extends SimplePanel implements Component= 40) {
@@ -2370,8 +2421,8 @@ public class LeaderboardPanel extends SimplePanel implements Component(BinaryOperator.Operators.LessThanEquals));
raceRankFilter.setValue(maxRaceRank);
- FilterSet> activeFilterSet =
- competitorSelectionProvider.getOrCreateCompetitorsFilterSet(stringMessages.topNCompetitorsByRaceRank(maxRaceRank));
+ FilterSet> activeFilterSet = competitorSelectionProvider
+ .getOrCreateCompetitorsFilterSet(stringMessages.topNCompetitorsByRaceRank(maxRaceRank));
activeFilterSet.addFilter(raceRankFilter);
competitorSelectionProvider.setCompetitorsFilterSet(activeFilterSet);
}
@@ -2383,7 +2434,8 @@ public class LeaderboardPanel extends SimplePanel implements Component> columnsToCollapseAndExpandAgain = getExpandedRaceColumnsWhoseDisplayedLegCountChanged(leaderboard);
+ Collection> columnsToCollapseAndExpandAgain = getExpandedRaceColumnsWhoseDisplayedLegCountChanged(
+ leaderboard);
for (RaceColumn> columnToCollapseAndExpandAgain : columnsToCollapseAndExpandAgain) {
columnToCollapseAndExpandAgain.changeExpansionState(/* expand */ false);
}
@@ -2405,19 +2457,22 @@ public class LeaderboardPanel extends SimplePanel implements Component rowsToUpdate = new HashMap<>();
synchronized (getData().getList()) {
int index = 0;
- for (Iterator i = getData().getList().iterator(); i.hasNext(); ) {
+ for (Iterator i = getData().getList().iterator(); i.hasNext();) {
LeaderboardRowDTO oldRow = i.next();
LeaderboardRowDTO newRow = rowsToDisplay.get(oldRow.competitor);
if (newRow != null) {
rowsToUpdate.put(index++, newRow); // update row in place, preserving its selection state
rowsToAdd.remove(newRow); // no need to add this row when it was updated in-place
} else {
- i.remove(); // old row's competitor not found in new rows' competitors; remove old row from table
+ i.remove(); // old row's competitor not found in new rows' competitors; remove old row from
+ // table
}
}
for (Entry updateEntry : rowsToUpdate.entrySet()) {
- LeaderboardRowDTO oldElement = getData().getList().set(updateEntry.getKey(), updateEntry.getValue());
- leaderboardSelectionModel.setSelected(oldElement, false); // make sure the old element is no longer part of the selection
+ LeaderboardRowDTO oldElement = getData().getList().set(updateEntry.getKey(),
+ updateEntry.getValue());
+ leaderboardSelectionModel.setSelected(oldElement, false); // make sure the old element is no longer
+ // part of the selection
updateSelection(updateEntry.getValue());
}
for (LeaderboardRowDTO rowToAdd : rowsToAdd) {
@@ -2426,19 +2481,21 @@ public class LeaderboardPanel extends SimplePanel implements Component lastRaceColumn = null;
- for (int i=getLeaderboardTable().getColumnCount()-1; i>=0; i--) {
+ for (int i = getLeaderboardTable().getColumnCount() - 1; i >= 0; i--) {
if (getLeaderboardTable().getColumn(i) instanceof RaceColumn>) {
lastRaceColumn = (RaceColumn>) getLeaderboardTable().getColumn(i);
break;
}
}
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
- AbstractSortableColumnWithMinMax, ?> c = (AbstractSortableColumnWithMinMax, ?>) getLeaderboardTable().getColumn(i);
+ AbstractSortableColumnWithMinMax, ?> c = (AbstractSortableColumnWithMinMax, ?>) getLeaderboardTable()
+ .getColumn(i);
c.updateMinMax();
- // Toggle pre-selected race, if the setting is set and it isn't open yet, or the last race column if that was requested
+ // Toggle pre-selected race, if the setting is set and it isn't open yet, or the last race column if
+ // that was requested
if ((!autoExpandPerformedOnce && isAutoExpandPreSelectedRace() && c instanceof RaceColumn>
- && ((RaceColumn>) c).getRace().hasTrackedRace(preSelectedRace)) ||
- (isAutoExpandLastRaceColumn() && c == lastRaceColumn)) {
+ && ((RaceColumn>) c).getRace().hasTrackedRace(preSelectedRace))
+ || (isAutoExpandLastRaceColumn() && c == lastRaceColumn)) {
ExpandableSortableColumn> expandableSortableColumn = (ExpandableSortableColumn>) c;
if (!expandableSortableColumn.isExpanded()) {
expandableSortableColumn.changeExpansionState(/* expand */ true);
@@ -2456,7 +2513,6 @@ public class LeaderboardPanel extends SimplePanel implements Component columnToSortFor = getDefaultSortColumn();
leaderboardTable.sortColumn(columnToSortFor, columnToSortFor.getPreferredSortingOrder().isAscending());
}
-
if (!isEmbedded) {
scoreCorrectionCommentLabel.setText(leaderboard.getComment() != null ? leaderboard.getComment() : "");
if (leaderboard.getTimePointOfLastCorrectionsValidity() != null) {
@@ -2467,7 +2523,6 @@ public class LeaderboardPanel extends SimplePanel implements Component raceColumn = getRaceColumnByRaceColumnName(newRace.getName());
- if (raceColumn != null) {
- raceColumn.setRace(newRace);
- }
- }
+ for (RaceColumnDTO newRace : leaderboard.getRaceList()) {
+ RaceColumn> raceColumn = getRaceColumnByRaceColumnName(newRace.getName());
+ if (raceColumn != null) {
+ raceColumn.setRace(newRace);
+ }
+ }
}
/**
@@ -2518,15 +2576,18 @@ public class LeaderboardPanel extends SimplePanel implements Component> getExpandedRaceColumnsWhoseDisplayedLegCountChanged(LeaderboardDTO newLeaderboard) {
+ private Collection> getExpandedRaceColumnsWhoseDisplayedLegCountChanged(
+ LeaderboardDTO newLeaderboard) {
Set> result = new HashSet>();
if (selectedRaceDetails.contains(DetailType.DISPLAY_LEGS)) {
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column c = getLeaderboardTable().getColumn(i);
if (c instanceof RaceColumn>) {
RaceColumn> rc = (RaceColumn>) c;
- // If the new leaderboard no longer contains the column, getLegCount will return -1, causing the column
- // to be collapsed if it was expanded. This is correct because otherwise, removing it would no longer
+ // If the new leaderboard no longer contains the column, getLegCount will return -1, causing the
+ // column
+ // to be collapsed if it was expanded. This is correct because otherwise, removing it would no
+ // longer
// know the correct leg count.
if (!rc.isTogglingInProcess() && rc.isExpanded()) {
int oldLegCount = getLeaderboard().getLegCount(rc.getRaceColumnName(), preSelectedRace);
@@ -2603,7 +2664,8 @@ public class LeaderboardPanel extends SimplePanel implements Component e : getLeaderboard().rows.entrySet()) {
- LeaderboardEntryDTO entry = e.getValue().fieldsByRaceColumnName.get(raceColumn.getRaceColumnName());
+ LeaderboardEntryDTO entry = e.getValue().fieldsByRaceColumnName
+ .get(raceColumn.getRaceColumnName());
if (entry != null && entry.race != null && entry.race.equals(race)) {
result.add(e.getKey());
}
@@ -2655,33 +2717,35 @@ public class LeaderboardPanel extends SimplePanel implements ComponentindexOfFirstOverallDetailsColumn and are in the order
- * defined by {@link #getAvailableOverallDetailColumnTypes()}.
+ * Ensures that the columns requested by {@link #selectedOverallDetailColumns} are in the table. Assumes that if
+ * there are any existing overall details columns, they start at indexOfFirstOverallDetailsColumn and
+ * are in the order defined by {@link #getAvailableOverallDetailColumnTypes()}.
*
* @param indexOfFirstOverallDetailsColumn
* tells the column index for the first overall details column
*/
private void adjustOverallDetailColumns(LeaderboardDTO leaderboard, int indexOfFirstOverallDetailsColumn) {
- List> overallDetailColumnsToShow = new ArrayList>();
- // ensure the ordering in overallDetailColumnsToShow conforms to the ordering of getAvailableOverallDetailColumnTypes()
+ List> overallDetailColumnsToShow = new ArrayList>();
+ // ensure the ordering in overallDetailColumnsToShow conforms to the ordering of
+ // getAvailableOverallDetailColumnTypes()
for (DetailType overallDetailType : getAvailableOverallDetailColumnTypes()) {
- if (selectedOverallDetailColumns.contains(overallDetailType) && overallDetailColumnMap.containsKey(overallDetailType)) {
+ if (selectedOverallDetailColumns.contains(overallDetailType)
+ && overallDetailColumnMap.containsKey(overallDetailType)) {
overallDetailColumnsToShow.add(overallDetailColumnMap.get(overallDetailType));
}
}
int currentColumnIndex = indexOfFirstOverallDetailsColumn;
int i = 0; // index into overallDetailColumnToShow
- Column currentColumn = currentColumnIndex < getLeaderboardTable().getColumnCount() ?
- getLeaderboardTable().getColumn(currentColumnIndex) : null;
+ Column currentColumn = currentColumnIndex < getLeaderboardTable().getColumnCount()
+ ? getLeaderboardTable().getColumn(currentColumnIndex) : null;
// repeat until no more column to check for removal and no more column left to check for need to insert
- while (i raceColumn, RaceColumnDTO race) {
int columnIndex = getRaceColumnPosition(raceColumn);
- if (raceColumn.isExpansionEnabled() != race.hasTrackedRaces() || race.isMedalRace() != raceColumn.isMedalRace()) {
+ if (raceColumn.isExpansionEnabled() != race.hasTrackedRaces()
+ || race.isMedalRace() != raceColumn.isMedalRace()) {
if (raceColumn.isExpanded()) {
raceColumn.changeExpansionState(/* expand */ false); // remove children from table
}
@@ -2723,7 +2788,8 @@ public class LeaderboardPanel extends SimplePanel implements Component c = getLeaderboardTable().getColumn(leaderboardposition);
if (c instanceof RaceColumn) {
RaceColumn> raceColumn = (RaceColumn>) c;
@@ -2747,7 +2813,8 @@ public class LeaderboardPanel extends SimplePanel implements Component raceColumn) {
- for (int leaderboardposition = 0; leaderboardposition < getLeaderboardTable().getColumnCount(); leaderboardposition++) {
+ for (int leaderboardposition = 0; leaderboardposition < getLeaderboardTable()
+ .getColumnCount(); leaderboardposition++) {
Column c = getLeaderboardTable().getColumn(leaderboardposition);
if (c instanceof RaceColumn) {
RaceColumn> rc = (RaceColumn>) c;
@@ -2807,9 +2874,8 @@ public class LeaderboardPanel extends SimplePanel implements Component> columnsToRemove = new ArrayList>();
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column c = getLeaderboardTable().getColumn(i);
- if (c instanceof RaceColumn
- && (leaderboard == null || !selectedRaceColumnNames.contains(((RaceColumn>) c)
- .getRaceColumnName()))) {
+ if (c instanceof RaceColumn && (leaderboard == null
+ || !selectedRaceColumnNames.contains(((RaceColumn>) c).getRaceColumnName()))) {
columnsToRemove.add(c);
}
}
@@ -2824,9 +2890,11 @@ public class LeaderboardPanel extends SimplePanel implements Component correctedOrderSelectedRaces = raceColumnSelection.getSelectedRaceColumnsOrderedAsInLeaderboard(leaderboard);
+ Iterable correctedOrderSelectedRaces = raceColumnSelection
+ .getSelectedRaceColumnsOrderedAsInLeaderboard(leaderboard);
removeRaceColumnsNotSelected(correctedOrderSelectedRaces);
- for (int selectedRaceCount = 0; selectedRaceCount < Util.size(correctedOrderSelectedRaces); selectedRaceCount++) {
+ for (int selectedRaceCount = 0; selectedRaceCount < Util
+ .size(correctedOrderSelectedRaces); selectedRaceCount++) {
RaceColumnDTO selectedRaceColumn = Util.get(correctedOrderSelectedRaces, selectedRaceCount);
final RaceColumn> raceColumn = selectedRaceColumn == null ? null
: getRaceColumnByRaceColumnName(selectedRaceColumn.getName());
@@ -2867,8 +2935,8 @@ public class LeaderboardPanel extends SimplePanel implements Component> columnsToRemove = new ArrayList>();
for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) {
Column c = getLeaderboardTable().getColumn(i);
- if (c instanceof RaceColumn
- && (leaderboard == null || !leaderboard.raceListContains(((RaceColumn>) c).getRaceColumnName()))) {
+ if (c instanceof RaceColumn && (leaderboard == null
+ || !leaderboard.raceListContains(((RaceColumn>) c).getRaceColumnName()))) {
columnsToRemove.add(c);
}
}
@@ -2884,21 +2952,22 @@ public class LeaderboardPanel extends SimplePanel implements Component raceColumn) {
- if (getLeaderboardTable().getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof TotalNetPointssColumn) {
+ if (getLeaderboardTable()
+ .getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof TotalNetPointssColumn) {
removeColumn(getLeaderboardTable().getColumnCount() - 1);
}
addColumn(raceColumn);
}
/**
- * The regatta rank column shall be displayed if an only if the {@link DetailType#REGATTA_RANK} detail is selected in the
- * {@link #selectedOverallDetailColumns}. It will then be displayed after the selection checkbox column (if any) and
- * before the sail number / competitor name columns.
+ * The regatta rank column shall be displayed if an only if the {@link DetailType#REGATTA_RANK} detail is selected
+ * in the {@link #selectedOverallDetailColumns}. It will then be displayed after the selection checkbox column (if
+ * any) and before the sail number / competitor name columns.
*/
private boolean isShowRegattaRankColumn() {
return selectedOverallDetailColumns.contains(DetailType.REGATTA_RANK);
}
-
+
/**
* @param rankColumnIndex
* the column index (0-based) where to put the rank column, if needed
@@ -2958,30 +3027,33 @@ public class LeaderboardPanel extends SimplePanel implements Component)) {
- insertColumn(columnIndexWhereToInsertTheNextColumn, new SailIDColumn(new CompetitorFetcher() {
- @Override
- public CompetitorDTO getCompetitor(LeaderboardRowDTO t) {
- return t.competitor;
- }
- }));
+ || !(getLeaderboardTable()
+ .getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn>)) {
+ insertColumn(columnIndexWhereToInsertTheNextColumn,
+ new SailIDColumn(new CompetitorFetcher() {
+ @Override
+ public CompetitorDTO getCompetitor(LeaderboardRowDTO t) {
+ return t.competitor;
+ }
+ }));
}
columnIndexWhereToInsertTheNextColumn++;
} else {
- if (getLeaderboardTable().getColumnCount() > columnIndexWhereToInsertTheNextColumn
- && getLeaderboardTable().getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn>) {
+ if (getLeaderboardTable().getColumnCount() > columnIndexWhereToInsertTheNextColumn && getLeaderboardTable()
+ .getColumn(columnIndexWhereToInsertTheNextColumn) instanceof SailIDColumn>) {
removeColumn(columnIndexWhereToInsertTheNextColumn);
}
}
if (isShowCompetitorFullName()) {
if (getLeaderboardTable().getColumnCount() <= columnIndexWhereToInsertTheNextColumn
- || !(getLeaderboardTable().getColumn(columnIndexWhereToInsertTheNextColumn) instanceof CompetitorColumn)) {
+ || !(getLeaderboardTable()
+ .getColumn(columnIndexWhereToInsertTheNextColumn) instanceof CompetitorColumn)) {
insertColumn(columnIndexWhereToInsertTheNextColumn, createCompetitorColumn());
}
columnIndexWhereToInsertTheNextColumn++;
} else {
- if (getLeaderboardTable().getColumnCount() > columnIndexWhereToInsertTheNextColumn
- && getLeaderboardTable().getColumn(columnIndexWhereToInsertTheNextColumn) instanceof CompetitorColumn) {
+ if (getLeaderboardTable().getColumnCount() > columnIndexWhereToInsertTheNextColumn && getLeaderboardTable()
+ .getColumn(columnIndexWhereToInsertTheNextColumn) instanceof CompetitorColumn) {
removeColumn(columnIndexWhereToInsertTheNextColumn);
}
}
@@ -2991,35 +3063,36 @@ public class LeaderboardPanel extends SimplePanel implements Component(this, getStringMessages(),
new CompetitorFetcher() {
- @Override
- public CompetitorDTO getCompetitor(LeaderboardRowDTO t) {
- return t.competitor;
- }
- }));
+ @Override
+ public CompetitorDTO getCompetitor(LeaderboardRowDTO t) {
+ return t.competitor;
+ }
+ }));
}
private void ensureTotalsColumn() {
// add a totals column on the right
- if (getLeaderboardTable().getColumnCount() == 0
- || !(getLeaderboardTable().getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof TotalNetPointssColumn)) {
+ if (getLeaderboardTable().getColumnCount() == 0 || !(getLeaderboardTable()
+ .getColumn(getLeaderboardTable().getColumnCount() - 1) instanceof TotalNetPointssColumn)) {
addColumn(new TotalNetPointssColumn(TOTAL_COLUMN_STYLE));
}
}
-
+
private void ensureTotalRacesSailedColumn() {
- // add a totals column on the right
- if (getLeaderboardTable().getColumnCount() == 0
- || !(getLeaderboardTable().getColumn(getLeaderboardTable().getColumnCount() - 2) instanceof TotalRacesCompletedColumn)) {
+ // add a totals column on the right
+ if (getLeaderboardTable().getColumnCount() == 0 || !(getLeaderboardTable()
+ .getColumn(getLeaderboardTable().getColumnCount() - 2) instanceof TotalRacesCompletedColumn)) {
insertColumn(getLeaderboardTable().getColumnCount() - 1, new TotalRacesCompletedColumn(TOTAL_COLUMN_STYLE));
}
}
-
+
private void ensureNoTotalRacesSailedColumn() {
- if ((getLeaderboardTable().getColumn(getLeaderboardTable().getColumnCount() - 2) instanceof TotalRacesCompletedColumn)) {
+ if ((getLeaderboardTable()
+ .getColumn(getLeaderboardTable().getColumnCount() - 2) instanceof TotalRacesCompletedColumn)) {
removeColumn(getLeaderboardTable().getColumnCount() - 2);
}
}
-
+
protected void updateTotalRacesSailedColumn() {
final boolean showTotalRacesCompletedColumn = isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor();
if (showTotalRacesCompletedColumn) {
@@ -3047,7 +3120,7 @@ public class LeaderboardPanel extends SimplePanel implements Component selectedRaceColumns = raceColumnSelection.getSelectedRaceColumnsOrderedAsInLeaderboard(leaderboard);
+ Iterable selectedRaceColumns = raceColumnSelection
+ .getSelectedRaceColumnsOrderedAsInLeaderboard(leaderboard);
List namesOfRaceColumnsToShow = new ArrayList<>();
for (RaceColumnDTO raceColumn : selectedRaceColumns) {
namesOfRaceColumnsToShow.add(raceColumn.getName());
}
return new LeaderboardSettings(Collections.unmodifiableList(selectedManeuverDetails),
Collections.unmodifiableList(selectedLegDetails), Collections.unmodifiableList(selectedRaceDetails),
- Collections.unmodifiableList(selectedOverallDetailColumns), namesOfRaceColumnsToShow, /*namesOfRacesToShow*/ null,
- raceColumnSelection.getNumberOfLastRaceColumnsToShow(),
- autoExpandPreSelectedRace, timer.getRefreshInterval(), /* nameOfRaceToSort*/ null,
- /*sortAscending*/ true, /*updateUponPlayStateChange*/ true, raceColumnSelection.getType(),
- isShowAddedScores(), isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
+ Collections.unmodifiableList(selectedOverallDetailColumns), namesOfRaceColumnsToShow,
+ /* namesOfRacesToShow */ null, raceColumnSelection.getNumberOfLastRaceColumnsToShow(),
+ autoExpandPreSelectedRace, timer.getRefreshInterval(), /* nameOfRaceToSort */ null,
+ /* sortAscending */ true, /* updateUponPlayStateChange */ true, raceColumnSelection.getType(),
+ isShowAddedScores(), isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
isShowCompetitorSailId(), isShowCompetitorFullName());
}
-
+
@Override
public String getLocalizedShortName() {
return stringMessages.leaderboard();
@@ -3209,7 +3285,7 @@ public class LeaderboardPanel extends SimplePanel implements Component getSelectedRows() {
return leaderboardSelectionModel.getSelectedSet();
}
@@ -3231,21 +3307,22 @@ public class LeaderboardPanel extends SimplePanel implements Component> oldFilterSet,
FilterSet> newFilterSet) {
- // nothing to do; if the list of filtered competitors has changed, a separate call to filteredCompetitorsListChanged will occur
+ // nothing to do; if the list of filtered competitors has changed, a separate call to
+ // filteredCompetitorsListChanged will occur
setFilterControlStatus();
}
public RaceColumnSelection getRaceColumnSelection() {
return raceColumnSelection;
}
-
+
public void removeAllListeners() {
if (raceTimesInfoProviderListener != null) {
getRaceTimesInfoProvider().removeRaceTimesInfoProviderListener(raceTimesInfoProviderListener);
}
if (raceColumnSelection != null && raceColumnSelection.getType() == RaceColumnSelectionStrategies.LAST_N) {
- getRaceTimesInfoProvider().removeRaceTimesInfoProviderListener(
- (LastNRacesColumnSelection) raceColumnSelection);
+ getRaceTimesInfoProvider()
+ .removeRaceTimesInfoProviderListener((LastNRacesColumnSelection) raceColumnSelection);
}
if (timer != null) {
timer.removeTimeListener(this);
@@ -3277,7 +3354,7 @@ public class LeaderboardPanel extends SimplePanel implements Component liveRace, boolean isMeta) {
String raceName = liveRace.getA().getRaceColumnName(), fleetName = liveRace.getB().getName();
boolean isDefaultFleet = LeaderboardNameConstants.DEFAULT_FLEET_NAME.equals(fleetName);
- return raceName + ((isDefaultFleet || isMeta) ? "" : (" (" + liveRace.getB().getName() + ")"));
+ return raceName + ((isDefaultFleet || isMeta) ? "" : (" (" + liveRace.getB().getName() + ")"));
}
-
+
@Override
public String getDependentCssClassName() {
return "leaderboard";
@@ -3367,7 +3445,7 @@ public class LeaderboardPanel extends SimplePanel implements Component{0}