added new method to the sailingservice to retreive the timepoints of the legs (for the TimePanel)

This commit is contained in:
fmittag committed 2012-02-03 17:16:38 +01:00
1 parent afc8392a75
commit 08e30bef40
10 files changed
+128 -12

No files matched your search

@@ -297,3 +297,10 @@ input.magnifier {
.gwt-DialogBox {
z-index: 20;
}
.breadcrumbPanel-ActiveBreadcrumb, .breadcrumbPanel-InactiveBreadcrumb, .breadcrumbPanel-NextArrow {
font-size: 20px;
text-transform: uppercase;
color: #a1a1a1;
font-weight: 500;
}
@@ -34,6 +34,7 @@ import com.sap.sailing.gwt.ui.client.TimePanel;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.PositionDTO;
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
import com.sap.sailing.gwt.ui.shared.RaceDTO;
@@ -155,7 +156,19 @@ public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListe
}
break;
}
timePanel.setLegMarkers();
sailingService.getLegTimePositions(selectedRace.getRaceIdentifier(),
new AsyncCallback<List<LegTimepointDTO>>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error obtaining leg timepoints: " + caught.getMessage());
}
@Override
public void onSuccess(List<LegTimepointDTO> legTimepoints) {
timePanel.setLegMarkers(legTimepoints);
}
});
}
@Override
@@ -21,6 +21,7 @@ import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.GPSFixDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
import com.sap.sailing.gwt.ui.shared.MarkDTO;
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
@@ -61,6 +62,8 @@ public interface SailingService extends RemoteService {
Map<CompetitorDTO, List<GPSFixDTO>> getBoatPositions(RaceIdentifier raceIdentifier, Map<CompetitorDTO, Date> from,
Map<CompetitorDTO, Date> to, boolean extrapolate) throws NoWindException;
List<LegTimepointDTO> getLegTimePositions(RaceIdentifier raceIdentifier);
List<MarkDTO> getMarkPositions(RaceIdentifier raceIdentifier, Date date);
List<QuickRankDTO> getQuickRanks(RaceIdentifier raceIdentifier, Date date) throws NoWindException;
@@ -20,6 +20,7 @@ import com.sap.sailing.gwt.ui.shared.GPSFixDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
import com.sap.sailing.gwt.ui.shared.MarkDTO;
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
@@ -107,6 +108,8 @@ public interface SailingServiceAsync {
Map<CompetitorDTO, Date> from, Map<CompetitorDTO, Date> to,
boolean extrapolate, AsyncCallback<Map<CompetitorDTO, List<GPSFixDTO>>> callback);
void getLegTimePositions(RaceIdentifier raceIdentifier, AsyncCallback<List<LegTimepointDTO>> callback);
void getMarkPositions(RaceIdentifier raceIdentifier, Date date, AsyncCallback<List<MarkDTO>> asyncCallback);
void getQuickRanks(RaceIdentifier raceIdentifier, Date date, AsyncCallback<List<QuickRankDTO>> callback);
@@ -1,6 +1,7 @@
package com.sap.sailing.gwt.ui.client;
import java.util.Date;
import java.util.List;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
@@ -23,6 +24,7 @@ import com.google.gwt.user.client.ui.RequiresResize;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.components.Component;
import com.sap.sailing.gwt.ui.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent;
@@ -220,9 +222,11 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
case Live:
playModeLabel.setText(stringMessages.playModeLive());
timeDelayLabel.setText(((int) timer.getCurrentDelay() / 1000) + " s");
sliderBar.setEnabled(false);
break;
case Replay:
playModeLabel.setText(stringMessages.playModeReplay());
sliderBar.setEnabled(true);
break;
}
playModeLabel.setText(timer.getPlayMode().name());
@@ -254,16 +258,21 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
}
}
public void setLegMarkers() {
public void setLegMarkers(List<LegTimepointDTO> legTimepoints) {
if(sliderBar.isMinMaxInitialized()) {
sliderBar.clearMarkers();
Double minValue = sliderBar.getMinValue();
Double maxValue = sliderBar.getMaxValue();
int legCount = 5;
double diff = (maxValue - minValue) / (double) legCount;
for(int i = 0; i < legCount; i++) {
sliderBar.addMarker("L" + (i + 1), minValue + i * diff);
for (LegTimepointDTO legTimepointDTO : legTimepoints) {
sliderBar.addMarker(legTimepointDTO.name, new Double(legTimepointDTO.firstPassingDate.getTime()));
}
// Double minValue = sliderBar.getMinValue();
// Double maxValue = sliderBar.getMaxValue();
// int legCount = 5;
// double diff = (maxValue - minValue) / (double) legCount;
// for(int i = 0; i < legCount; i++) {
// sliderBar.addMarker("L" + (i + 1), minValue + i * diff);
// }
sliderBar.redraw();
}
}
@@ -210,4 +210,8 @@ public class Timer {
return playMode;
}
public void setPlayMode(PlayModes playMode) {
this.playMode = playMode;
}
}
@@ -28,6 +28,7 @@ import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
import com.google.gwt.user.cellview.client.ColumnSortList.ColumnSortInfo;
import com.google.gwt.user.cellview.client.Header;
import com.google.gwt.user.cellview.client.TextHeader;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.Anchor;
@@ -45,6 +46,7 @@ import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
import com.sap.sailing.domain.common.DetailType;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.domain.common.impl.Util.Pair;
import com.sap.sailing.gwt.ui.client.Collator;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
@@ -66,6 +68,7 @@ import com.sap.sailing.gwt.ui.shared.components.Component;
import com.sap.sailing.gwt.ui.shared.components.IsEmbeddableComponent;
import com.sap.sailing.gwt.ui.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent;
import com.sap.sailing.gwt.ui.shared.panels.BreadcrumbPanel;
/**
* A leaderboard essentially consists of a table widget that in its columns displays the entries.
@@ -848,6 +851,20 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
getLeaderboardTable().addColumnSortHandler(listHandler);
loadCompleteLeaderboard(getLeaderboardDisplayDate());
// create the breadcrumb navigation
// ArrayList<Pair<String, String>> breadcrumbLinksData = new ArrayList<Pair<String, String>>();
// String debugParam = Window.Location.getParameter("gwt.codesvr");
//
// if(leaderboardGroup != null) {
// String link = "/gwt/Spectator.html?leaderboardGroupName=" + leaderboardGroup.name;
// if(debugParam != null && !debugParam.isEmpty())
// link += "&gwt.codesvr=" + debugParam;
// breadcrumbLinksData.add(new Pair<String, String>(link, leaderboardGroup.name));
// }
// breadcrumbPanel = new BreadcrumbPanel(breadcrumbLinksData, selectedRaceIdentifier.getRaceName());
// mainPanel.add(breadcrumbPanel);
contentPanel = new VerticalPanel();
headerPanel = new DockPanel();
DockPanel toolbarPanel = new DockPanel();
@@ -10,6 +10,7 @@ import java.util.Map;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.FlowPanel;
import com.google.gwt.user.client.ui.FormPanel;
@@ -35,6 +36,7 @@ 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.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.components.ComponentViewer;
@@ -83,10 +85,16 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
collapsableViewers = new ArrayList<CollapsableComponentViewer<?>>();
CompetitorSelectionModel competitorSelectionModel = new CompetitorSelectionModel(/* hasMultiSelection */ true);
String debugParam = Window.Location.getParameter("gwt.codesvr");
String link = "/gwt/Spectator.html" + (debugParam != null && !debugParam.isEmpty() ? "?gwt.codesvr=" + debugParam : "");
// create the breadcrumb navigation
ArrayList<Pair<String, String>> breadcrumbLinksData = new ArrayList<Pair<String, String>>();
breadcrumbLinksData.add(new Pair<String, String>(link, stringMessages.home()));
String debugParam = Window.Location.getParameter("gwt.codesvr");
if(leaderboardGroup != null) {
String link = "/gwt/Spectator.html?leaderboardGroupName=" + leaderboardGroup.name;
if(debugParam != null && !debugParam.isEmpty())
link += "&gwt.codesvr=" + debugParam;
breadcrumbLinksData.add(new Pair<String, String>(link, leaderboardGroup.name));
}
breadcrumbPanel = new BreadcrumbPanel(breadcrumbLinksData, selectedRaceIdentifier.getRaceName());
mainPanel.add(breadcrumbPanel);
@@ -214,7 +222,18 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
}
break;
}
timePanel.setLegMarkers();
sailingService.getLegTimePositions(selectedRace.getRaceIdentifier(),
new AsyncCallback<List<LegTimepointDTO>>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error obtaining leg timepoints: " + caught.getMessage());
}
@Override
public void onSuccess(List<LegTimepointDTO> legTimepoints) {
timePanel.setLegMarkers(legTimepoints);
}
});
}
}
}
@@ -89,6 +89,7 @@ import com.sap.sailing.domain.tracking.GPSFixTrack;
import com.sap.sailing.domain.tracking.Maneuver;
import com.sap.sailing.domain.tracking.MarkPassing;
import com.sap.sailing.domain.tracking.RacesHandle;
import com.sap.sailing.domain.tracking.TrackedLeg;
import com.sap.sailing.domain.tracking.TrackedLegOfCompetitor;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.domain.tracking.Wind;
@@ -109,6 +110,7 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardRowDTO;
import com.sap.sailing.gwt.ui.shared.LegEntryDTO;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
import com.sap.sailing.gwt.ui.shared.MarkDTO;
import com.sap.sailing.gwt.ui.shared.PositionDTO;
@@ -744,6 +746,27 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
createSpeedWithBearingDTO(speedWithBearing), tack, legType, extrapolated);
}
@Override
public List<LegTimepointDTO> getLegTimePositions(RaceIdentifier raceIdentifier) {
List<LegTimepointDTO> result = new ArrayList<LegTimepointDTO>();
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
if (trackedRace != null) {
Iterable<TrackedLeg> trackedLegs = trackedRace.getTrackedLegs();
int i = 1;
for (TrackedLeg trackedLeg : trackedLegs) {
Waypoint to = trackedLeg.getLeg().getTo();
Iterable<MarkPassing> markPassings = trackedRace.getMarkPassingsInOrder(to);
if(markPassings != null) {
MarkPassing firstPassing = markPassings.iterator().next();
LegTimepointDTO legTimepointDTO = new LegTimepointDTO("L" + i++);
legTimepointDTO.firstPassingDate = firstPassing.getTimePoint().asDate();
result.add(legTimepointDTO);
}
}
}
return result;
}
@Override
public List<MarkDTO> getMarkPositions(RaceIdentifier raceIdentifier, Date date) {
List<MarkDTO> result = new ArrayList<MarkDTO>();
@@ -0,0 +1,18 @@
package com.sap.sailing.gwt.ui.shared;
import java.util.Date;
import com.google.gwt.user.client.rpc.IsSerializable;
public class LegTimepointDTO extends NamedDTO implements IsSerializable {
public Date firstPassingDate;
public Date lastPassingDate;
public LegTimepointDTO() {}
public LegTimepointDTO(String name) {
super(name);
}
}