bug4641 Simplified/unified rendering of competitor short and full name

This commit is contained in:
Benjamin Barth committed 2018-07-10 16:16:09 +02:00
1 parent 2df1d531b8
commit 17ca279a0b
5 files changed
+56 -80

No files matched your search

@@ -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)));
}
}
@@ -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("&nbsp;");
}
}
if (flagImageURL != null && !flagImageURL.isEmpty()) {
style.renderFlagImage(flagImageURL, sb, competitor);
sb.appendHtmlConstant("&nbsp;");
}
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("&nbsp;");
}
}
if (flagImageURL != null && !flagImageURL.isEmpty()) {
style.renderFlagImage(flagImageURL, sb, competitor);
sb.appendHtmlConstant("&nbsp;");
}
}
textRenderer.accept(sb);
sb.appendHtmlConstant("</div>");
}
}
@@ -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
@@ -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
@@ -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);
}
}