mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 03:13:49 +00:00
added Timepanel to RaceBoard and connected TimePanel to RaceMap and LeaderBoard
This commit is contained in:
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>
|
||||
|
||||
|
||||
+10
-1
@@ -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();
|
||||
|
||||
+6
-8
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
+80
-20
@@ -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);
|
||||
}
|
||||
}
|
||||
+64
-28
@@ -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
|
||||
|
||||
Reference in new issue
Block a user