mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-15 06:49:56 +00:00
bug4641 Simplified/unified rendering of competitor short and full name
This commit is contained in:
1 parent
2df1d531b8
commit
17ca279a0b
5 files changed
+56
-80
No files matched your search
+13
-11
@@ -3,6 +3,7 @@ package com.sap.sailing.gwt.ui.leaderboard;
|
||||
import java.util.Comparator;
|
||||
|
||||
import com.google.gwt.cell.client.AbstractSafeHtmlCell;
|
||||
import com.google.gwt.cell.client.Cell.Context;
|
||||
import com.google.gwt.safehtml.shared.SafeHtml;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
|
||||
@@ -17,12 +18,13 @@ import com.sap.sailing.gwt.ui.client.shared.filter.LeaderboardFetcher;
|
||||
import com.sap.sse.common.util.NaturalComparator;
|
||||
|
||||
public class CompetitorColumnBase<T> {
|
||||
|
||||
private final LeaderboardFetcher leaderboardFetcher;
|
||||
protected final StringMessages stringMessages;
|
||||
private final StringMessages stringMessages;
|
||||
private final CompetitorFetcher<T> competitorFetcher;
|
||||
|
||||
public CompetitorColumnBase(LeaderboardFetcher leaderboardFetcher, StringMessages stringMessages, CompetitorFetcher<T> competitorFetcher) {
|
||||
super();
|
||||
public CompetitorColumnBase(LeaderboardFetcher leaderboardFetcher, StringMessages stringMessages,
|
||||
CompetitorFetcher<T> competitorFetcher) {
|
||||
this.leaderboardFetcher = leaderboardFetcher;
|
||||
this.stringMessages = stringMessages;
|
||||
this.competitorFetcher = competitorFetcher;
|
||||
@@ -36,11 +38,11 @@ public class CompetitorColumnBase<T> {
|
||||
return new AbstractSafeHtmlCell<T>(new AbstractSafeHtmlRenderer<T>() {
|
||||
@Override
|
||||
public SafeHtml render(T row) {
|
||||
return new SafeHtmlBuilder().appendEscaped(leaderboard.getDisplayName(competitorFetcher.getCompetitor(row))).toSafeHtml();
|
||||
return SafeHtmlUtils.fromString(leaderboard.getDisplayName(competitorFetcher.getCompetitor(row)));
|
||||
}
|
||||
}) {
|
||||
@Override
|
||||
protected void render(com.google.gwt.cell.client.Cell.Context context, SafeHtml data, SafeHtmlBuilder sb) {
|
||||
protected void render(Context context, SafeHtml data, SafeHtmlBuilder sb) {
|
||||
sb.append(data);
|
||||
}
|
||||
};
|
||||
@@ -50,8 +52,10 @@ public class CompetitorColumnBase<T> {
|
||||
return new InvertibleComparatorAdapter<T>() {
|
||||
@Override
|
||||
public int compare(T o1, T o2) {
|
||||
return Comparator.<CompetitorDTO>nullsLast((c1, c2)->new NaturalComparator(/* caseSensitive */ false).compare(c1.getShortName(), c2.getShortName())).compare(
|
||||
competitorFetcher.getCompetitor(o1), competitorFetcher.getCompetitor(o2));
|
||||
return Comparator
|
||||
.<CompetitorDTO> nullsLast((c1, c2) -> new NaturalComparator(/* caseSensitive */ false)
|
||||
.compare(c1.getShortName(), c2.getShortName()))
|
||||
.compare(competitorFetcher.getCompetitor(o1), competitorFetcher.getCompetitor(o2));
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -61,10 +65,8 @@ public class CompetitorColumnBase<T> {
|
||||
stringMessages.competitorColumnTooltip());
|
||||
}
|
||||
|
||||
public void render(T t, String competitorColorBarStyle, SafeHtmlBuilder sb) {
|
||||
sb.appendHtmlConstant("<div " + competitorColorBarStyle + ">");
|
||||
sb.appendEscaped(getLeaderboard().getDisplayName(competitorFetcher.getCompetitor(t)));
|
||||
sb.appendHtmlConstant("</div>");
|
||||
public void render(Context context, T row, SafeHtmlBuilder sb) {
|
||||
sb.appendEscaped(getLeaderboard().getDisplayName(competitorFetcher.getCompetitor(row)));
|
||||
}
|
||||
|
||||
}
|
||||
+40
-36
@@ -11,6 +11,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
import com.google.gwt.cell.client.AbstractSafeHtmlCell;
|
||||
@@ -338,7 +339,7 @@ public abstract class LeaderboardPanel<LS extends LeaderboardSettings> extends A
|
||||
private Label scoreCorrectionCommentLabel;
|
||||
private Label liveRaceLabel;
|
||||
|
||||
protected boolean isEmbedded;
|
||||
private final boolean isEmbedded;
|
||||
|
||||
private ImageResource pauseIcon;
|
||||
private ImageResource playIcon;
|
||||
@@ -897,30 +898,9 @@ public abstract class LeaderboardPanel<LS extends LeaderboardSettings> extends A
|
||||
|
||||
@Override
|
||||
public void render(Context context, T object, SafeHtmlBuilder sb) {
|
||||
CompetitorDTO competitor = competitorFetcher.getCompetitor(object);
|
||||
final String twoLetterIsoCountryCode = competitor.getTwoLetterIsoCountryCode();
|
||||
final String flagImageURL = competitor.getFlagImageURL();
|
||||
boolean boatColorShown = renderBoatColorIfNecessary(competitorFetcher.getCompetitor(object), sb);
|
||||
if (isShowCompetitorNationality || flagImageURL == null || flagImageURL.isEmpty()) {
|
||||
final ImageResource nationalityFlagImageResource;
|
||||
if (twoLetterIsoCountryCode == null || twoLetterIsoCountryCode.isEmpty()) {
|
||||
nationalityFlagImageResource = flagImageResolver.getEmptyFlagImageResource();
|
||||
} else {
|
||||
nationalityFlagImageResource = flagImageResolver.getFlagImageResource(twoLetterIsoCountryCode);
|
||||
}
|
||||
if (nationalityFlagImageResource != null) {
|
||||
style.renderNationalityFlag(nationalityFlagImageResource, sb);
|
||||
sb.appendHtmlConstant(" ");
|
||||
}
|
||||
}
|
||||
if (flagImageURL != null && !flagImageURL.isEmpty()) {
|
||||
style.renderFlagImage(flagImageURL, sb, competitor);
|
||||
sb.appendHtmlConstant(" ");
|
||||
}
|
||||
sb.appendEscaped(competitor.getShortInfo());
|
||||
if (boatColorShown) {
|
||||
sb.appendHtmlConstant("</div>");
|
||||
}
|
||||
final CompetitorDTO competitor = competitorFetcher.getCompetitor(object);
|
||||
LeaderboardPanel.this.renderCompetitorText(competitor, isShowCompetitorShortName(),
|
||||
!isShowCompetitorFullName(), sb, builder -> builder.appendEscaped(competitor.getShortInfo()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1171,8 +1151,6 @@ public abstract class LeaderboardPanel<LS extends LeaderboardSettings> extends A
|
||||
}
|
||||
}
|
||||
|
||||
public abstract boolean renderBoatColorIfNecessary(CompetitorDTO competitor, SafeHtmlBuilder sb);
|
||||
|
||||
private class TextRaceColumn extends RaceColumn<String> implements RaceNameProvider {
|
||||
/**
|
||||
* Remembers the leg columns; <code>null</code>-padded, if {@link #getLegColumn(int)} asks for a column index
|
||||
@@ -3577,17 +3555,43 @@ public abstract class LeaderboardPanel<LS extends LeaderboardSettings> extends A
|
||||
|
||||
@Override
|
||||
public void render(Context context, LeaderboardRowDTO object, SafeHtmlBuilder sb) {
|
||||
String competitorColor = getCompetitorColor(object.competitor);
|
||||
String competitorColorBarStyle;
|
||||
if (LeaderboardPanel.this.isEmbedded && competitorColor != null) {
|
||||
competitorColorBarStyle = "style=\"border-bottom: 2px solid " + competitorColor + ";\"";
|
||||
} else {
|
||||
competitorColorBarStyle = "style=\"border: none;\"";
|
||||
}
|
||||
base.render(object, competitorColorBarStyle, sb);
|
||||
LeaderboardPanel.this.renderCompetitorText(object.competitor, !isShowCompetitorShortName(),
|
||||
isShowCompetitorFullName(), sb, builder -> base.render(context, object, builder));
|
||||
}
|
||||
}
|
||||
|
||||
public abstract String getCompetitorColor(CompetitorDTO competitor);
|
||||
protected abstract String getCompetitorColor(CompetitorDTO competitor);
|
||||
|
||||
private void renderCompetitorText(final CompetitorDTO competitor, final boolean withFlags, final boolean withColor,
|
||||
final SafeHtmlBuilder sb, final Consumer<SafeHtmlBuilder> textRenderer) {
|
||||
final String competitorColor = getCompetitorColor(competitor);
|
||||
final boolean showColor = withColor && competitorColor != null;
|
||||
final String divStyle = showColor ? style.determineBoatColorDivStyle(competitorColor) : "border: none;";
|
||||
sb.appendHtmlConstant("<div style=\"" + divStyle + "\">");
|
||||
|
||||
if (withFlags) {
|
||||
final String flagImageURL = competitor.getFlagImageURL();
|
||||
if (isShowCompetitorNationality || flagImageURL == null || flagImageURL.isEmpty()) {
|
||||
final String twoLetterIsoCountryCode = competitor.getTwoLetterIsoCountryCode();
|
||||
final ImageResource nationalityFlagImageResource;
|
||||
if (twoLetterIsoCountryCode == null || twoLetterIsoCountryCode.isEmpty()) {
|
||||
nationalityFlagImageResource = flagImageResolver.getEmptyFlagImageResource();
|
||||
} else {
|
||||
nationalityFlagImageResource = flagImageResolver.getFlagImageResource(twoLetterIsoCountryCode);
|
||||
}
|
||||
if (nationalityFlagImageResource != null) {
|
||||
style.renderNationalityFlag(nationalityFlagImageResource, sb);
|
||||
sb.appendHtmlConstant(" ");
|
||||
}
|
||||
}
|
||||
if (flagImageURL != null && !flagImageURL.isEmpty()) {
|
||||
style.renderFlagImage(flagImageURL, sb, competitor);
|
||||
sb.appendHtmlConstant(" ");
|
||||
}
|
||||
}
|
||||
|
||||
textRenderer.accept(sb);
|
||||
sb.appendHtmlConstant("</div>");
|
||||
}
|
||||
|
||||
}
|
||||
+1
-19
@@ -5,7 +5,6 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.LeaderboardType;
|
||||
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
|
||||
@@ -41,17 +40,6 @@ import com.sap.sse.gwt.client.shared.settings.ComponentContext;
|
||||
*/
|
||||
public class MultiRaceLeaderboardPanel extends LeaderboardPanel<MultiRaceLeaderboardSettings> {
|
||||
|
||||
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
|
||||
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
|
||||
MultiRaceLeaderboardSettings settings, boolean isEmbedded,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardGroupName,
|
||||
String leaderboardName, ErrorReporter errorReporter, StringMessages stringMessages, boolean showRaceDetails,
|
||||
LeaderBoardStyle style, FlagImageResolver flagImageResolver, Iterable<DetailType> availableDetailTypes) {
|
||||
super(parent, context, sailingService, asyncActionsExecutor, settings, isEmbedded, competitorSelectionProvider,
|
||||
leaderboardGroupName, leaderboardName, errorReporter, stringMessages, showRaceDetails, style, flagImageResolver, availableDetailTypes);
|
||||
initialize(settings);
|
||||
}
|
||||
|
||||
public MultiRaceLeaderboardPanel(Component<?> parent, ComponentContext<?> context,
|
||||
SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
|
||||
MultiRaceLeaderboardSettings settings, boolean isEmbedded,
|
||||
@@ -114,13 +102,7 @@ public class MultiRaceLeaderboardPanel extends LeaderboardPanel<MultiRaceLeaderb
|
||||
|
||||
@Override
|
||||
public String getCompetitorColor(CompetitorDTO competitor) {
|
||||
// not used for multi
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderBoatColorIfNecessary(CompetitorDTO competitor, SafeHtmlBuilder sb) {
|
||||
return false;
|
||||
return null; // Not used in multi-race leaderboard
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-12
@@ -5,7 +5,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.cell.client.TextCell;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
|
||||
import com.google.gwt.user.cellview.client.SafeHtmlHeader;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
@@ -165,17 +164,7 @@ public class SingleRaceLeaderboardPanel extends LeaderboardPanel<SingleRaceLeade
|
||||
|
||||
@Override
|
||||
public String getCompetitorColor(CompetitorDTO competitor) {
|
||||
return getRaceCompetitorSelection().getColor(competitor, preSelectedRace).getAsHtml();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderBoatColorIfNecessary(CompetitorDTO competitor, SafeHtmlBuilder sb) {
|
||||
boolean showBoatColor = !isShowCompetitorFullName() && isEmbedded;
|
||||
if (showBoatColor) {
|
||||
String competitorColor = getRaceCompetitorSelection().getColor(competitor, preSelectedRace).getAsHtml();
|
||||
sb.appendHtmlConstant("<div style=\" "+style.determineBoatColorDivStyle(competitorColor)+ "\">");
|
||||
}
|
||||
return showBoatColor;
|
||||
return isEmbedded() ? getRaceCompetitorSelection().getColor(competitor, preSelectedRace).getAsHtml() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-2
@@ -196,8 +196,7 @@ public class EditableLeaderboardPanel extends MultiRaceLeaderboardPanel {
|
||||
|
||||
@Override
|
||||
public void render(Context context, CompetitorDTO competitor, SafeHtmlBuilder sb) {
|
||||
String competitorColorBarStyle = "style=\"border: none;\"";
|
||||
base.render(competitor, competitorColorBarStyle, sb);
|
||||
base.render(context, competitor, sb);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user