Merge branch 'master' into confidencewind

This commit is contained in:
Axel Uhl committed 2012-03-05 23:04:54 +01:00
commit a1d26fa780
9 files changed
+162 -116

No files matched your search

@@ -35,6 +35,9 @@ interface AdminConsoleResources extends ClientBundle {
@Source("com/sap/sailing/gwt/ui/client/images/reddot.png")
ImageResource reddotIcon();
@Source("com/sap/sailing/gwt/ui/client/images/winddirection.png")
ImageResource windDirectionIcon();
@Source("com/sap/sailing/gwt/ui/client/images/boats/Blue_Port.png")
ImageResource lowlightedBoatIcon_Port();
@@ -47,7 +50,6 @@ interface AdminConsoleResources extends ClientBundle {
@Source("com/sap/sailing/gwt/ui/client/images/boats/Blue_DW_Starbord.png")
ImageResource lowlightedBoatIconDW_Starboard();
@Source("com/sap/sailing/gwt/ui/client/images/boats/Blue_Port_Selected.png")
ImageResource highlightedBoatIcon_Port();
@@ -69,6 +69,7 @@ import com.sap.sailing.gwt.ui.shared.MarkDTO;
import com.sap.sailing.gwt.ui.shared.PositionDTO;
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
import com.sap.sailing.gwt.ui.shared.SpeedWithBearingDTO;
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
import com.sap.sailing.gwt.ui.shared.components.Component;
import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent;
@@ -295,7 +296,8 @@ public class RaceMap extends SimplePanel implements TimeListener, CompetitorSele
final ParallelExecutionCallback<Map<CompetitorDTO, List<GPSFixDTO>>> getBoatsCallback = new ParallelExecutionCallback<Map<CompetitorDTO, List<GPSFixDTO>>>();
final ParallelExecutionCallback<List<MarkDTO>> getMarksCallback = new ParallelExecutionCallback<List<MarkDTO>>();
final ParallelExecutionCallback<List<QuickRankDTO>> getQuickRanksCallback = new ParallelExecutionCallback<List<QuickRankDTO>>();
new ParallelExecutionHolder(getBoatsCallback, getMarksCallback, getQuickRanksCallback) {
final ParallelExecutionCallback<WindInfoForRaceDTO> getWindCallback = new ParallelExecutionCallback<WindInfoForRaceDTO>();
new ParallelExecutionHolder(getBoatsCallback, getMarksCallback, getQuickRanksCallback, getWindCallback) {
@Override
protected void handleSuccess() {
quickRanks = getQuickRanksCallback.getData();
@@ -336,19 +338,21 @@ public class RaceMap extends SimplePanel implements TimeListener, CompetitorSele
mapZoomedOrPannedSinceLastRaceSelectionChange = false;
}
}
showWindOnMap(getWindCallback.getData());
} else {
lastTimeChangeBeforeInitialization = date;
}
}
@Override
protected void handleFailure(Throwable t) {
errorReporter.reportError("Error trying to obtain mark and/or boat positions: " + t.getMessage());
errorReporter.reportError("Error trying to obtain data for the map: " + t.getMessage());
}
};
sailingService.getBoatPositions(race, fromAndToAndOverlap.getA(), fromAndToAndOverlap.getB(), true, getBoatsCallback);
sailingService.getMarkPositions(race, date, getMarksCallback);
sailingService.getQuickRanks(race, date, getQuickRanksCallback);
sailingService.getWindInfo(race, date, date, null, getWindCallback);
}
}
}
@@ -444,6 +448,23 @@ public class RaceMap extends SimplePanel implements TimeListener, CompetitorSele
}
}
protected void showWindOnMap(WindInfoForRaceDTO windInfo) {
// DON'T DELETE... THIS WILL BE IMPLEMENTED SOON
// System.out.println("Windsources: " + windInfo.windTrackInfoByWindSource.size());
// for(WindSource windSource: windInfo.windTrackInfoByWindSource.keySet()) {
// switch (windSource) {
// case COURSE_BASED:
// case EXPEDITION:
// case TRACK_BASED_ESTIMATION:
// case WEB:
// WindTrackInfoDTO windTrackInfoDTO = windInfo.windTrackInfoByWindSource.get(windSource);
// for(WindDTO windDTO: windTrackInfoDTO.windFixes) {
// Long timepoint = windDTO.timepoint;
// }
// }
// }
}
protected void showMarksOnMap(List<MarkDTO> result) {
if (map != null) {
Set<MarkDTO> toRemove = new HashSet<MarkDTO>(buoyMarkers.keySet());
@@ -1049,7 +1070,7 @@ public class RaceMap extends SimplePanel implements TimeListener, CompetitorSele
@Override
public Widget getEntryWidget() {
return map;
return this;
}
@Override
@@ -33,16 +33,22 @@ public class RaceBoardEntryPoint extends AbstractEntryPoint {
@Override
public void onModuleLoad() {
super.onModuleLoad();
String viewModeParamValue = Window.Location.getParameter("viewMode");
try {
viewMode = RaceBoardViewMode.valueOf(RaceBoardViewMode.class, viewModeParamValue);
} catch (Exception e) {
viewMode = RaceBoardViewMode.ONE_SCREEN;
}
eventName = Window.Location.getParameter("eventName");
raceName = Window.Location.getParameter("raceName");
String leaderboardNameParamValue = Window.Location.getParameter("leaderboardName");
String leaderboardGroupNameParamValue = Window.Location.getParameter("leaderboardGroupName");
String viewModeParamValue = Window.Location.getParameter("viewMode");
// set the view mode for the race board
if(viewModeParamValue != null && !viewModeParamValue.isEmpty()) {
try {
viewMode = RaceBoardViewMode.valueOf(viewModeParamValue);
} catch (IllegalArgumentException e) {
viewMode = RaceBoardViewMode.ONE_SCREEN;
}
} else {
viewMode = RaceBoardViewMode.ONE_SCREEN;
}
if(leaderboardNameParamValue == null || leaderboardNameParamValue.isEmpty()) {
leaderboardName = DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME;
} else {
@@ -146,7 +152,8 @@ public class RaceBoardEntryPoint extends AbstractEntryPoint {
FlowPanel raceBoardHeaderPanel = new FlowPanel();
raceBoardHeaderPanel.addStyleName("RaceBoardHeaderPanel");
raceBoardHeaderPanel.add(raceBoardPanel.getBreadcrumbWidget());
if(raceBoardPanel.getBreadcrumbWidget() != null)
raceBoardHeaderPanel.add(raceBoardPanel.getBreadcrumbWidget());
FlowPanel contentOuterPanel = new FlowPanel(); // outer div which centered page content
contentOuterPanel.addStyleName("contentOuterPanel");
@@ -12,7 +12,6 @@ import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.WindSourceType;
@@ -70,7 +69,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
*/
private int scrollOffset;
private final List<CollapsableComponentViewer<?>> collapsableViewers;
private final List<ComponentViewer> componentViewers;
private FlowPanel componentsNavigationPanel;
private BreadcrumbPanel breadcrumbPanel;
private RaceTimePanel timePanel;
@@ -97,32 +96,62 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
setWidget(mainPanel);
timer = new Timer(PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */1000);
collapsableViewers = new ArrayList<CollapsableComponentViewer<?>>();
componentViewers = new ArrayList<ComponentViewer>();
competitorSelectionModel = new CompetitorSelectionModel(/* hasMultiSelection */ true);
switch (viewMode) {
case CASCADING:
createCascadingView(leaderboardName, leaderboardGroupName, mainPanel);
break;
case ONE_SCREEN:
createOneScreenView();
break;
case TV_MODE:
createTVView();
break;
case CASCADING:
createCascadingView(leaderboardName, leaderboardGroupName, mainPanel);
break;
case ONE_SCREEN:
createOneScreenView(leaderboardName, leaderboardGroupName, mainPanel);
break;
}
for (ComponentViewer componentViewer : componentViewers) {
mainPanel.add(componentViewer.getViewerWidget());
addComponentViewerMenuEntry(componentViewer);
}
timePanel = new RaceTimePanel(sailingService, timer, errorReporter, stringMessages);
raceSelectionProvider.addRaceSelectionChangeListener(timePanel);
timePanel.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
}
private void createOneScreenView(String leaderboardName, String leaderboardGroupName, FlowPanel mainPanel) {
componentsNavigationPanel = new FlowPanel();
componentsNavigationPanel.addStyleName("raceBoardNavigation");
// create the default leaderboard and select the right race
LeaderboardSettings leaderBoardSettings = LeaderboardSettingsFactory.getInstance().createNewSettingsForPlayMode(timer.getPlayMode());
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, leaderBoardSettings, selectedRaceIdentifier, competitorSelectionModel,
timer, leaderboardName, leaderboardGroupName, errorReporter, stringMessages, userAgentType);
RaceMap raceMap = new RaceMap(sailingService, errorReporter, timer, competitorSelectionModel, stringMessages);
SideBySideComponentViewer leaderboardAndMapViewer = new SideBySideComponentViewer(leaderboardPanel, raceMap, "auto", "500px");
componentViewers.add(leaderboardAndMapViewer);
raceMap.onRaceSelectionChange(Collections.singletonList(selectedRaceIdentifier));
WindChartSettings windChartSettings = new WindChartSettings(WindSource.values());
WindChart windChart = new WindChart(sailingService, raceSelectionProvider, timer, windChartSettings,
stringMessages, errorReporter);
SimpleComponentViewer<WindChartSettings> windChartViewer = new SimpleComponentViewer<WindChartSettings>(
windChart, "auto", "200px");
windChart.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
componentViewers.add(windChartViewer);
MultiChartPanel competitorCharts = new MultiChartPanel(sailingService, competitorSelectionModel, raceSelectionProvider,
timer, stringMessages, errorReporter);
SimpleComponentViewer<MultiChartSettings> chartViewer = new SimpleComponentViewer<MultiChartSettings>(
competitorCharts, "auto", "200px");
competitorCharts.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
componentViewers.add(chartViewer);
}
private void createTVView() {
// TODO Auto-generated method stub
}
private void createOneScreenView() {
// TODO Auto-generated method stub
}
private void createCascadingView(String leaderboardName, String leaderboardGroupName, FlowPanel mainPanel) {
private void createCascadingView(String leaderboardName, String leaderboardGroupName, FlowPanel mainPanel) {
// create the breadcrumb navigation
breadcrumbPanel = createBreadcrumbPanel(leaderboardGroupName);
mainPanel.add(breadcrumbPanel);
@@ -141,7 +170,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
CollapsableComponentViewer<LeaderboardSettings> leaderboardViewer = new CollapsableComponentViewer<LeaderboardSettings>(
leaderboardPanel, "100%", "100%", stringMessages, ViewerPanelTypes.SCROLL_PANEL);
collapsableViewers.add(leaderboardViewer);
componentViewers.add(leaderboardViewer);
}
// create the race map
@@ -150,9 +179,9 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
CollapsableComponentViewer<RaceMapSettings> raceMapViewer = new CollapsableComponentViewer<RaceMapSettings>(
raceMap, "auto", "500px", stringMessages);
((Panel) raceMapViewer.getViewerWidget().getContent()).add(raceMap);
//((Panel) raceMapViewer.getViewerWidget().getContent()).add(raceMap);
raceMap.onRaceSelectionChange(Collections.singletonList(selectedRaceIdentifier));
collapsableViewers.add(raceMapViewer);
componentViewers.add(raceMapViewer);
}
WindChartSettings windChartSettings = new WindChartSettings(WindSourceType.values());
@@ -161,7 +190,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
CollapsableComponentViewer<WindChartSettings> windChartViewer = new CollapsableComponentViewer<WindChartSettings>(
windChart, "auto", "400px", stringMessages);
windChart.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
collapsableViewers.add(windChartViewer);
componentViewers.add(windChartViewer);
if (showCompetitorCharts) {
// DON'T DELETE -> this is temporary for testing of different chart types
// ChartPanel competitorCharts = new ChartPanel(sailingService, competitorSelectionModel, raceSelectionProvider,
@@ -175,17 +204,9 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
competitorCharts, "auto", "400px", stringMessages);
competitorCharts.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
collapsableViewers.add(chartViewer);
componentViewers.add(chartViewer);
}
for (CollapsableComponentViewer<?> componentViewer : collapsableViewers) {
mainPanel.add(componentViewer.getViewerWidget());
addComponentViewerMenuEntry(componentViewer);
}
timePanel = new RaceTimePanel(sailingService, timer, errorReporter, stringMessages);
raceSelectionProvider.addRaceSelectionChangeListener(timePanel);
timePanel.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
}
private BreadcrumbPanel createBreadcrumbPanel(String leaderboardGroupName) {
@@ -271,71 +292,5 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
@Override
public void onRaceSelectionChange(List<RaceIdentifier> selectedRaces) {
}
//
// if (selectedRaces != null && !selectedRaces.isEmpty()) {
// RaceDTO selectedRace = racesByIdentifier.get(selectedRaces.iterator().next());
//
// Date min = null;
// Date max = null;
//
// if (selectedRace.startOfTracking != null) {
// min = selectedRace.startOfTracking;
// }
// if (selectedRace.endOfRace != null) {
// max = selectedRace.endOfRace;
// } else if (selectedRace.timePointOfNewestEvent != null) {
// max = selectedRace.timePointOfNewestEvent;
// timer.setPlayMode(PlayModes.Live);
// }
//
// if(min != null && max != null)
// timePanel.setMinMax(min, max);
//
// // set initial timer position
// switch(timer.getPlayMode()) {
// case Live:
// if(selectedRace.timePointOfNewestEvent != null) {
// timer.setTime(selectedRace.timePointOfNewestEvent.getTime());
// }
// break;
// case Replay:
// if(selectedRace.endOfRace != null) {
// timer.setTime(selectedRace.endOfRace.getTime());
// } else {
// timer.setTime(selectedRace.startOfRace.getTime());
// }
// break;
// }
//
// sailingService.getRaceTimesInfo(selectedRace.getRaceIdentifier(),
// new AsyncCallback<RaceTimesInfoDTO>() {
// @Override
// public void onFailure(Throwable caught) {
// errorReporter.reportError("Error obtaining leg timepoints: " + caught.getMessage());
// }
//
// @Override
// public void onSuccess(RaceTimesInfoDTO raceTimesInfo) {
// // raceTimesInfo can be null if the race is not tracked anymore
// if (raceTimesInfo != null) {
// timePanel.setLegMarkers(raceTimesInfo.getLegTimes());
// if (raceTimesInfo.getStartOfRace() != null) {
// // set the new start time
// Date startOfRace = raceTimesInfo.getStartOfRace();
// Date startOfTimeslider = new Date(startOfRace.getTime() - 5 * 60 * 1000);
//
// timePanel.changeMin(startOfTimeslider);
// }
// // set time to end of race
// if(raceTimesInfo.getLastLegTimes() != null) {
// timer.setTime(raceTimesInfo.getLastLegTimes().firstPassingDate.getTime());
// }
// } else {
// timePanel.reset();
// }
// }
// });
// }
// }
}
@@ -2,6 +2,6 @@ package com.sap.sailing.gwt.ui.raceboard;
public enum RaceBoardViewMode {
CASCADING, ONE_SCREEN, TV_MODE
CASCADING, ONE_SCREEN
}
@@ -0,0 +1,31 @@
package com.sap.sailing.gwt.ui.raceboard;
import com.google.gwt.user.client.ui.HorizontalSplitPanel;
import com.google.gwt.user.client.ui.Panel;
import com.sap.sailing.gwt.ui.shared.components.Component;
import com.sap.sailing.gwt.ui.shared.components.ComponentViewer;
@SuppressWarnings("deprecation")
public class SideBySideComponentViewer implements ComponentViewer {
/** there is no easy replacement for the HorizontalSplitPanel available */
private final HorizontalSplitPanel mainPanel;
public SideBySideComponentViewer(Component<?> leftComponent, Component<?> rightComponent, String defaultWidth, String defaultHeight) {
mainPanel = new HorizontalSplitPanel();
mainPanel.setSize(defaultWidth, defaultHeight);
mainPanel.setLeftWidget(leftComponent.getEntryWidget());
mainPanel.setRightWidget(rightComponent.getEntryWidget());
}
public Panel getViewerWidget() {
return mainPanel;
}
public Component<?> getRootComponent() {
return null;
}
public String getViewerName() {
return "";
}
}
@@ -0,0 +1,30 @@
package com.sap.sailing.gwt.ui.raceboard;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.sap.sailing.gwt.ui.shared.components.Component;
import com.sap.sailing.gwt.ui.shared.components.ComponentViewer;
public class SimpleComponentViewer<SettingsType> implements ComponentViewer {
private final SimplePanel mainPanel;
private final Component<SettingsType> component;
public SimpleComponentViewer(Component<SettingsType> component, String defaultWidth, String defaultHeight) {
this.component = component;
mainPanel = new SimplePanel();
mainPanel.setSize(defaultWidth, defaultHeight);
mainPanel.setWidget(component.getEntryWidget());
}
public Panel getViewerWidget() {
return mainPanel;
}
public Component<?> getRootComponent() {
return component;
}
public String getViewerName() {
return component.getLocalizedShortName();
}
}
@@ -292,7 +292,7 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
entryDTO.legDetails.add(legEntry);
}
}
final Distance windwardDistanceToOverallLeader = trackedRace.getWindwardDistanceToOverallLeader(competitor, timePoint);
final Distance windwardDistanceToOverallLeader = trackedRace == null ? null : trackedRace.getWindwardDistanceToOverallLeader(competitor, timePoint);
entryDTO.windwardDistanceToOverallLeaderInMeters = windwardDistanceToOverallLeader == null ? null : windwardDistanceToOverallLeader.getMeters();
return entryDTO;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB