added a legend to the leaderboard group page

This commit is contained in:
fmittag
2012-11-15 12:33:00 +01:00
parent 47b47e247d
commit e66f5b0407
4 changed files with 86 additions and 38 deletions
@@ -429,4 +429,6 @@ public interface StringMessages extends Messages {
String averageManeuverLossInMeters();
String averageTackLossInMeters();
String averageJibeLossInMeters();
String legend();
String live();
}
@@ -429,4 +429,6 @@ errorUpdatingIsMedalRace=Error updating the medal race setting: {0}
maneuverLoss=Maneuver loss
averageManeuverLossInMeters=\u2205 Maneuver Loss
averageTackLossInMeters=\u2205 Tack Loss
averageJibeLossInMeters=\u2205 Jibe Loss
averageJibeLossInMeters=\u2205 Jibe Loss
legend=Legend
live=live
@@ -430,4 +430,6 @@ errorUpdatingIsMedalRace=Fehler beim Ändern der Medaillenrennen-Einstellung: {0
maneuverLoss=Manöververlust
averageManeuverLossInMeters=\u2205 Manöververlust
averageTackLossInMeters=\u2205 Wendeverlust
averageJibeLossInMeters=\u2205 Halseverlust
averageJibeLossInMeters=\u2205 Halseverlust
legend=Legende
live=live
@@ -8,6 +8,7 @@ import java.util.Map;
import com.google.gwt.cell.client.SafeHtmlCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.FontWeight;
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
@@ -15,8 +16,11 @@ import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
@@ -25,7 +29,6 @@ import com.sap.sailing.domain.common.Color;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.gwt.ui.adminconsole.LeaderboardConfigPanel.AnchorCell;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.HasWelcomeWidget;
@@ -39,7 +42,6 @@ import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.SeriesDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.panels.BreadcrumbPanel;
import com.sap.sailing.gwt.ui.shared.panels.WelcomeWidget;
public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget {
@@ -71,8 +73,17 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
private static final AnchorTemplates ANCHORTEMPLATE = GWT.create(AnchorTemplates.class);
private static final TextWithClassTemplate TEXTTEMPLATE = GWT.create(TextWithClassTemplate.class);
private static final ColorBoxTemplate COLORBOXTEMPLATE = GWT.create(ColorBoxTemplate.class);
private static final String STYLE_NAME_PREFIX = "leaderboardGroupPanel-";
private static final String STYLE_NAME_PREFIX = "leaderboardGroupPanel-";
private static final String STYLE_INACTIVE_RACE = STYLE_NAME_PREFIX + "InactiveRace";
private static final String STYLE_ACTIVE_RACE = STYLE_NAME_PREFIX + "ActiveRace";
private static final String STYLE_LIVE_RACE = STYLE_NAME_PREFIX + "LiveRace";
private static final String STYLE_ACTIVE_BUTTON = STYLE_NAME_PREFIX + "ActiveButton";
private static final String STYLE_ACTIVE_LEADERBOARD = STYLE_NAME_PREFIX + "ActiveLeaderboard";
private static final String STYLE_LEGEND = STYLE_NAME_PREFIX + "Legend";
private enum RacesRenderStrategy { DEFAULT, ESS40 };
private final SailingServiceAsync sailingService;
private final StringMessages stringMessages;
private final ErrorReporter errorReporter;
@@ -87,6 +98,8 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
private final boolean isEmbedded;
private final boolean showRaceDetails;
private RacesRenderStrategy racesRenderStrategy = RacesRenderStrategy.DEFAULT;
public LeaderboardGroupPanel(SailingServiceAsync sailingService, StringMessages stringConstants,
ErrorReporter errorReporter, final String groupName, String root, String viewMode, boolean embedded, boolean showRaceDetails) {
super();
@@ -129,7 +142,7 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
for(RegattaDTO regattaDTO: regattaDTOs) {
regattasByName.put(regattaDTO.name, regattaDTO);
}
buildGUI();
createdPageContent();
}
@Override
@@ -138,7 +151,7 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
}
});
} else {
buildGUI();
createdPageContent();
}
} else {
errorReporter.reportError(stringMessages.noLeaderboardGroupWithNameFound(leaderboardGroupName));
@@ -151,14 +164,8 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
});
}
private void buildGUI() {
private void createdPageContent() {
if (!isEmbedded) {
// Create breadcrumb panel
BreadcrumbPanel breadcrumbPanel = createBreadcrumbPanel();
if (breadcrumbPanel != null) {
mainPanel.add(breadcrumbPanel);
}
// leaderboard group details GUI
Label groupNameLabel = new Label(leaderboardGroup.name + ":");
groupNameLabel.setStyleName(STYLE_NAME_PREFIX + "GroupName");
mainPanel.add(groupNameLabel);
@@ -168,7 +175,6 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
leaderboardGroupDescriptionLabel.setStyleName(STYLE_NAME_PREFIX + "GroupDescription");
mainPanel.add(leaderboardGroupDescriptionLabel);
// leaderboards UI
Label leaderboardsTableLabel = new Label(stringMessages.leaderboards());
leaderboardsTableLabel.setStyleName(STYLE_NAME_PREFIX + "LeaderboardsTableLabel");
mainPanel.add(leaderboardsTableLabel);
@@ -181,8 +187,10 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
+ "&displayName=" + stringMessages.overallStandings()
+ "&leaderboardGroupName=" + leaderboardGroup.name + "&root=" + root
+ (debugParam != null && !debugParam.isEmpty() ? "&gwt.codesvr=" + debugParam : ""));
HTML overallLeaderboardAnchor = new HTML(getAnchor(link, stringMessages.overallStandings(), "ActiveButton overallStandings"));
mainPanel.add(overallLeaderboardAnchor);
Anchor overallStandingsLink = new Anchor(stringMessages.overallStandings(), true, link);
overallStandingsLink.setStyleName(STYLE_ACTIVE_BUTTON);
overallStandingsLink.addStyleName("overallStandings");
mainPanel.add(overallStandingsLink);
}
}
SafeHtmlCell leaderboardNameCell = new SafeHtmlCell();
@@ -213,7 +221,7 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
+ (isEmbedded ? "&embedded=true" : "")
+ "&leaderboardGroupName=" + leaderboardGroup.name + "&root=" + root
+ (debugParam != null && !debugParam.isEmpty() ? "&gwt.codesvr=" + debugParam : ""));
return getAnchor(link, stringMessages.overview(), /* style */ "ActiveLeaderboard");
return getAnchor(link, stringMessages.overview(), STYLE_ACTIVE_LEADERBOARD);
}
};
@@ -228,7 +236,12 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
racesCell) {
@Override
public SafeHtml getValue(StrippedLeaderboardDTO leaderboard) {
return leaderboardRacesToHtml(leaderboard);
switch(racesRenderStrategy) {
case DEFAULT: return leaderboardRacesToHtml(leaderboard);
case ESS40: ess40LeaderboardRacesToHtml(leaderboard);
}
return null;
}
};
leaderboardsTable.addColumn(racesColumn, stringMessages.races());
@@ -239,6 +252,31 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
leaderboardsTable.setRowData(leaderboardGroup.getLeaderboards());
}
mainPanel.add(leaderboardsTable);
// legend
if(!isEmbedded) {
HorizontalPanel legendPanel = new HorizontalPanel();
legendPanel.setStyleName(STYLE_LEGEND);
legendPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
legendPanel.setSpacing(5);
mainPanel.add(legendPanel);
Label legendLabel = new Label(stringMessages.legend() + ":");
legendLabel.getElement().getStyle().setFontWeight(FontWeight.BOLD);
legendPanel.add(legendLabel);
Label inactiveRace = new Label(stringMessages.untracked());
inactiveRace.setStyleName(STYLE_INACTIVE_RACE);
legendPanel.add(inactiveRace);
Label activeRace = new Label(stringMessages.tracked());
activeRace.setStyleName(STYLE_ACTIVE_RACE);
legendPanel.add(activeRace);
Label liveRace = new Label(stringMessages.live());
liveRace.setStyleName(STYLE_LIVE_RACE);
legendPanel.add(liveRace);
}
}
private String shortenLeaderboardName(String prefixToCut, String leaderboardName) {
@@ -268,6 +306,24 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
return b.toSafeHtml();
}
private SafeHtml ess40LeaderboardRacesToHtml(StrippedLeaderboardDTO leaderboard) {
SafeHtmlBuilder b = new SafeHtmlBuilder();
if (leaderboard.isRegattaLeaderboard && leaderboard.regattaName != null) {
RegattaDTO regatta = regattasByName.get(leaderboard.regattaName);
boolean renderSeriesName = Util.size(regatta.series) > 1;
for (SeriesDTO series : regatta.series) {
b.appendHtmlConstant("<div>");
renderSeriesToHtml(leaderboard, series, renderSeriesName, b);
b.appendHtmlConstant("<div style=\"clear:both;\"></div>");
b.appendHtmlConstant("</div>");
}
} else {
List<RaceColumnDTO> raceColumns = leaderboard.getRaceList();
renderRacesToHTml(leaderboard, raceColumns, new FleetDTO("Default", 0, null), b);
}
return b.toSafeHtml();
}
private void renderSeriesToHtml(StrippedLeaderboardDTO leaderboard, SeriesDTO series, boolean renderSeriesName, SafeHtmlBuilder b) {
boolean hasMultipleFleets = series.getFleets().size() > 1;
Map<String, List<RaceColumnDTO>> racesOrderedByFleets = getRacesOrderedByFleets(leaderboard);
@@ -324,13 +380,13 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
link += "&viewMode=" + viewMode;
}
if (race.trackedRace.hasGPSData && race.trackedRace.hasWindData) {
b.append(getAnchor(link, linkText, /* style */ "ActiveRace"));
b.append(getAnchor(link, linkText, STYLE_ACTIVE_RACE));
} else {
b.append(TEXTTEMPLATE.textWithClass(linkText, STYLE_NAME_PREFIX + "InactiveRace"));
b.append(TEXTTEMPLATE.textWithClass(linkText, STYLE_INACTIVE_RACE));
}
} else {
b.append(TEXTTEMPLATE.textWithClass(linkText, STYLE_NAME_PREFIX + "InactiveRace"));
b.append(TEXTTEMPLATE.textWithClass(linkText, STYLE_INACTIVE_RACE));
}
}
}
@@ -354,26 +410,12 @@ public class LeaderboardGroupPanel extends FormPanel implements HasWelcomeWidget
private SafeHtml getAnchor(String link, String linkText, String style) {
if (isEmbedded) {
return ANCHORTEMPLATE.anchorWithTarget(link, linkText, STYLE_NAME_PREFIX + style, "_blank");
return ANCHORTEMPLATE.anchorWithTarget(link, linkText, style, "_blank");
} else {
return ANCHORTEMPLATE.anchor(link, linkText, STYLE_NAME_PREFIX + style);
return ANCHORTEMPLATE.anchor(link, linkText, style);
}
}
private BreadcrumbPanel createBreadcrumbPanel() {
BreadcrumbPanel breadcrumbPanel = null;
if (root.equals("overview")) {
String debugParam = Window.Location.getParameter("gwt.codesvr");
String link = "/gwt/Spectator.html"
+ (showRaceDetails ? "?showRaceDetails=true" : "")
+ (debugParam != null && !debugParam.isEmpty() ? (showRaceDetails?"":"?")+"gwt.codesvr=" + debugParam : "");
ArrayList<Pair<String, String>> breadcrumbLinksData = new ArrayList<Pair<String, String>>();
breadcrumbLinksData.add(new Pair<String, String>(link, stringMessages.home()));
breadcrumbPanel = new BreadcrumbPanel(breadcrumbLinksData, leaderboardGroup.name);
}
return breadcrumbPanel;
}
@Override
public void setWelcomeWidgetVisible(boolean isVisible) {
if (welcomeWidget != null) {