added Timepanel to RaceBoard and connected TimePanel to RaceMap and LeaderBoard

This commit is contained in:
fmittag committed 2012-01-19 17:52:09 +01:00
1 parent ec3dc3f3c0
commit 721adfd236
5 files changed
+166 -57

No files matched your search

@@ -4,6 +4,12 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>SAP Sailing Analytics Race Board</title>
<script id="sap-ui-bootstrap"
type="text/javascript"
src="/gwt/sap-ui-core.js"
data-sap-ui-theme="sap_platinum"
data-sap-ui-libs="sap.ui.commons"></script>
<script type="text/javascript" language="javascript" src="com.sap.sailing.gwt.ui.RaceBoard/com.sap.sailing.gwt.ui.RaceBoard.nocache.js"></script>
@@ -15,6 +15,7 @@ import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FocusWidget;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter {
@@ -54,7 +55,15 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter {
errorDialogBox.center();
dialogCloseButton.setFocus(true);
}
public void createErrorPage(String message) {
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages);
logoAndTitlePanel.addStyleName("LogoAndTitlePanel");
RootPanel.get().add(logoAndTitlePanel);
RootPanel.get().add(new Label(message));
}
private DialogBox createErrorDialog() {
// Create the popup dialog box
final DialogBox myErrorDialogBox = new DialogBox();
@@ -2,7 +2,6 @@ package com.sap.sailing.gwt.ui.raceboard;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.components.CollapsablePanel;
import com.sap.sailing.gwt.ui.shared.components.Component;
@@ -10,7 +9,7 @@ import com.sap.sailing.gwt.ui.shared.components.ComponentGroup;
import com.sap.sailing.gwt.ui.shared.components.ComponentToolbar;
/**
* A GWT component that visualizes a {@link Component} or a {@link Component} including menus to scroll quickly to the embedded view
* A GWT component that visualizes a {@link ComponentGroup} or a {@link Component} including menus to scroll quickly to the embedded view
* of the respective component, collapse/expand buttons for the views embedded and homogeneous settings buttons for
* those components that have settings.
*
@@ -24,15 +23,15 @@ public class CollapsableComponentViewer<SettingsType> {
private final StringMessages stringMessages;
public CollapsableComponentViewer(Component<SettingsType> component, StringMessages stringMessages) {
public CollapsableComponentViewer(Component<SettingsType> component, String defaultWidth, String defaultHeight, StringMessages stringMessages) {
this.component = component;
this.stringMessages = stringMessages;
AbsolutePanel contentPanel = new AbsolutePanel();
disclosurePanel = createDisclosePanel(contentPanel, component.getLocalizedShortName(), 150);
disclosurePanel = createDisclosePanel(contentPanel, component.getLocalizedShortName(), defaultWidth, defaultHeight);
}
public Widget getViewerWidget() {
public CollapsablePanel getViewerWidget() {
return disclosurePanel;
}
@@ -40,7 +39,7 @@ public class CollapsableComponentViewer<SettingsType> {
return component;
}
private CollapsablePanel createDisclosePanel(Panel contentPanel, String panelTitle, int heightInPx)
private CollapsablePanel createDisclosePanel(Panel contentPanel, String panelTitle, String defaultContentWidth, String defaultContentHeight)
{
CollapsablePanel disclosurePanel = new CollapsablePanel (panelTitle);
disclosurePanel.setSize("100%", "100%");
@@ -50,7 +49,7 @@ public class CollapsableComponentViewer<SettingsType> {
toolbar.addSettingsButton();
disclosurePanel.setHeaderToolbar(toolbar);
contentPanel.setSize("100%", heightInPx + "px");
contentPanel.setSize(defaultContentWidth, defaultContentHeight);
disclosurePanel.setContent(contentPanel);
if(component.getEntryWidget() != null) {
contentPanel.add(component.getEntryWidget());
@@ -66,5 +65,4 @@ public class CollapsableComponentViewer<SettingsType> {
return disclosurePanel;
}
}
@@ -5,34 +5,94 @@ import java.util.List;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.RootPanel;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.gwt.ui.client.AbstractEntryPoint;
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.server.api.DefaultLeaderboardName;
public class RaceBoardEntryPoint extends AbstractEntryPoint {
private Triple<EventDTO, RegattaDTO, RaceDTO> selectedRace;
private String eventName;
private String raceName;
private String leaderboardName;
@Override
public void onModuleLoad() {
super.onModuleLoad();
sailingService.getLeaderboardNames(new AsyncCallback<List<String>>() {
@Override
public void onSuccess(List<String> leaderboardNames) {
String leaderboardName = Window.Location.getParameter("name");
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages);
logoAndTitlePanel.addStyleName("LogoAndTitlePanel");
RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, leaderboardName,
RaceBoardEntryPoint.this, stringMessages);
String padding = Window.Location.getParameter("padding");
if (padding != null && Boolean.valueOf(padding)) {
raceBoardPanel.addStyleName("leftPaddedPanel");
}
RootPanel.get().add(logoAndTitlePanel);
RootPanel.get().add(raceBoardPanel);
}
@Override
public void onFailure(Throwable t) {
reportError("Error trying to obtain list of leaderboard names: " + t.getMessage());
}
});
eventName = Window.Location.getParameter("eventName");
raceName = Window.Location.getParameter("raceName");
leaderboardName = Window.Location.getParameter("leaderboardName");
if(leaderboardName == null || leaderboardName.isEmpty()) {
leaderboardName = DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME;
} else {
sailingService.getLeaderboardNames(new AsyncCallback<List<String>>() {
@Override
public void onSuccess(List<String> leaderboardNames) {
if (leaderboardNames.contains(leaderboardName)) {
createErrorPage(stringMessages.noSuchLeaderboard());
}
}
@Override
public void onFailure(Throwable t) {
reportError("Error trying to obtain the list of leaderboard names: " + t.getMessage());
}
});
}
if(eventName != null && !eventName.isEmpty() && raceName != null && !raceName.isEmpty()) {
sailingService.listEvents(false, new AsyncCallback<List<EventDTO>>() {
@Override
public void onSuccess(List<EventDTO> eventNames) {
selectedRace = findRace(eventNames);
if(selectedRace != null)
createRaceBoardPanel(selectedRace);
else
createErrorPage("Could not obtain a race with name " + raceName + " for an event with name " + eventName);
}
@Override
public void onFailure(Throwable t) {
reportError("Error trying to obtain the list of events: " + t.getMessage());
}
});
} else {
createErrorPage("This page requires a valid event name and race name.");
}
}
private Triple<EventDTO, RegattaDTO, RaceDTO> findRace(List<EventDTO> eventNames) {
for (EventDTO eventDTO : eventNames) {
if(eventDTO.name.equals(eventName)) {
for (RegattaDTO regattaDTO : eventDTO.regattas) {
for(RaceDTO raceDTO: regattaDTO.races) {
if(raceDTO.name.equals(raceName)) {
return new Triple<EventDTO, RegattaDTO, RaceDTO>(eventDTO, regattaDTO, raceDTO);
}
}
}
}
}
return null;
}
private void createRaceBoardPanel(Triple<EventDTO, RegattaDTO, RaceDTO> selectedRace)
{
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages);
logoAndTitlePanel.addStyleName("LogoAndTitlePanel");
RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, selectedRace, leaderboardName,
RaceBoardEntryPoint.this, stringMessages);
String padding = Window.Location.getParameter("padding");
if (padding != null && Boolean.valueOf(padding)) {
raceBoardPanel.addStyleName("leftPaddedPanel");
}
RootPanel.get().add(logoAndTitlePanel);
RootPanel.get().add(raceBoardPanel);
}
}
@@ -4,63 +4,99 @@ import java.util.ArrayList;
import java.util.List;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.gwt.ui.adminconsole.RaceMap;
import com.sap.sailing.gwt.ui.adminconsole.RaceMapSettings;
import com.sap.sailing.gwt.ui.adminconsole.TimePanel;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.components.Component;
import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent;
import com.sap.sailing.server.api.DefaultLeaderboardName;
public class RaceBoardPanel extends FormPanel implements Component<RaceBoardSettings> {
private final SailingServiceAsync sailingService;
private final ErrorReporter errorReporter;
// private final StringMessages stringMessages;
private final Triple<EventDTO, RegattaDTO, RaceDTO> selectedRace;
private String raceBoardName;
private final Timer timer;
private final List<CollapsableComponentViewer<?>> collapsableViewers;
public RaceBoardPanel(SailingServiceAsync sailingService, String raceBoardName, ErrorReporter errorReporter,
final StringMessages stringMessages) {
public RaceBoardPanel(SailingServiceAsync sailingService, final Triple<EventDTO, RegattaDTO, RaceDTO> theSelectedRace, String leaderboardName,
ErrorReporter errorReporter, final StringMessages stringMessages) {
this.sailingService = sailingService;
this.setRaceBoardName(raceBoardName);
this.selectedRace = theSelectedRace;
this.setRaceBoardName(selectedRace.getC().name);
this.errorReporter = errorReporter;
VerticalPanel mainPanel = new VerticalPanel();
mainPanel.setSize("100%", "100%");
setWidget(mainPanel);
timer = new Timer(/* delayBetweenAutoAdvancesInMilliseconds */500);
collapsableViewers = new ArrayList<CollapsableComponentViewer<?>>();
for(int i = 0; i < 4; i++) {
if(i == 0) {
CompetitorSelectionModel competitorSelectionModel = new CompetitorSelectionModel(/* hasMultiSelection */ true);
//final RaceMapPanel raceMapPanel = new RaceMapPanel(sailingService, competitorSelectionModel, this, this, stringMessages);
LeaderboardPanel defaultLeaderboardPanel = new LeaderboardPanel(sailingService, competitorSelectionModel,
DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME, errorReporter, stringMessages);
CompetitorSelectionModel competitorSelectionModel = new CompetitorSelectionModel(/* hasMultiSelection */ true);
CollapsableComponentViewer<LeaderboardSettings> viewer = new CollapsableComponentViewer<LeaderboardSettings>(
defaultLeaderboardPanel, stringMessages);
collapsableViewers.add(viewer);
} else {
SimpleComponentGroup<Object> componentGroup = new SimpleComponentGroup<Object>("Component Group " + i);
componentGroup.addComponent(new SimpleComponent("My Component"));
componentGroup.addComponent(new SimpleComponent("My Component 2"));
componentGroup.addComponent(new SimpleComponent("My Component 3"));
// create the default leaderboard
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, competitorSelectionModel,
leaderboardName, errorReporter, stringMessages);
//LeaderboardPanel leaderboardPanel = LeaderboardPanel();
CollapsableComponentViewer<Object> viewer = new CollapsableComponentViewer<Object>(componentGroup, stringMessages);
collapsableViewers.add(viewer);
}
CollapsableComponentViewer<LeaderboardSettings> leaderboardViewer = new CollapsableComponentViewer<LeaderboardSettings>(
leaderboardPanel, "100%", "100%", stringMessages);
collapsableViewers.add(leaderboardViewer);
// create the race map
RaceMap raceMap = new RaceMap(sailingService, errorReporter, timer, competitorSelectionModel, stringMessages);
CollapsableComponentViewer<RaceMapSettings> raceMapViewer = new CollapsableComponentViewer<RaceMapSettings>(
raceMap, "600px", "300px", stringMessages);
raceMap.loadMapsAPI((Panel) raceMapViewer.getViewerWidget().getContent());
List<Triple<EventDTO, RegattaDTO, RaceDTO>> races = new ArrayList<Triple<EventDTO, RegattaDTO, RaceDTO>>();
races.add(selectedRace);
raceMap.onRaceSelectionChange(races);
collapsableViewers.add(raceMapViewer);
// create some sample components
for(int i = 0; i < 2; i++) {
SimpleComponentGroup<Object> componentGroup = new SimpleComponentGroup<Object>("Component Group " + i);
componentGroup.addComponent(new SimpleComponent("My Component"));
componentGroup.addComponent(new SimpleComponent("My Component 2"));
componentGroup.addComponent(new SimpleComponent("My Component 3"));
collapsableViewers.add(new CollapsableComponentViewer<Object>(componentGroup, "100%", "100px", stringMessages));
}
for (CollapsableComponentViewer<?> viewer : collapsableViewers) {
mainPanel.add(viewer.getViewerWidget());
for (CollapsableComponentViewer<?> componentViewer : collapsableViewers) {
mainPanel.add(componentViewer.getViewerWidget());
}
timer.addTimeListener(leaderboardPanel);
timer.addTimeListener(raceMap);
TimePanel timePanel = new TimePanel(stringMessages, timer);
RaceDTO race = selectedRace.getC();
if (race.startOfRace != null) {
timePanel.timeChanged(race.startOfRace);
timer.setTime(race.startOfRace.getTime());
}
if (race.startOfTracking != null) {
timePanel.setMin(race.startOfTracking);
}
if (race.timePointOfNewestEvent != null) {
timePanel.setMax(race.timePointOfNewestEvent);
}
mainPanel.add(timePanel);
}
@Override