changed the folder name of flags racecommmittee (hoped to solve the

nocache.js problem), restructured the RegattaOverview page with a
master-detail-principle to display the course design of a selected race
This commit is contained in:
Armin Zamani committed 2013-04-01 00:26:06 +02:00
1 parent a21efacd34
commit 2829d8dc79
34 files changed
+402 -46

No files matched your search

@@ -527,4 +527,9 @@ public interface StringMessages extends Messages {
String timePointMustBeBeforeEndOfTracking();
String regattaUsedForTheTrackedRace();
String courseDesignUpdateUrl();
String passingSide();
String refreshNow();
String stopUpdating();
String startUpdating();
String currentTime();
}
@@ -530,3 +530,8 @@ timePointMustBeAfterStartOfTracking=Time point must be after start of tracking.
timePointMustBeBeforeEndOfTracking=Time point must be before end of tracking.
regattaUsedForTheTrackedRace=Regatta used for the tracked race
courseDesignUpdateUrl=Course design update URI
passingSide=Passing side
refreshNow=Refresh now
stopUpdating=Stop updating
startUpdating=Start updating
currentTime=Current time:
@@ -526,4 +526,9 @@ netScore=Nettoergebnis
timePointMustBeAfterStartOfTracking=Der Zeitpunkt muß nach dem Trackingbeginn sein.
timePointMustBeBeforeEndOfTracking=Der Zeitpunkt muß vor dem Trackingende sein.
regattaUsedForTheTrackedRace=Regatta, zu der das Rennen gehört
courseDesignUpdateUrl=Kursvorschlag URL
courseDesignUpdateUrl=Kursvorschlag URL
passingSide=Wenderichtung
refreshNow=Jetzt aktualisieren
stopUpdating=Aktualisierung stoppen
startUpdating=Aktualisierung starten
currentTime=Aktuelle Zeit:
@@ -0,0 +1,87 @@
package com.sap.sailing.gwt.ui.regattaoverview;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ListDataProvider;
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.shared.RegattaOverviewEntryDTO;
import com.sap.sailing.gwt.ui.shared.WaypointDTO;
public class CourseDesignTableComposite extends Composite {
private final CellTable<WaypointDTO> waypointTable;
private ListDataProvider<WaypointDTO> waypointDataProvider;
private final SimplePanel mainPanel;
@SuppressWarnings("unused")
private final SailingServiceAsync sailingService;
private final StringMessages stringMessages;
private RegattaOverviewEntryDTO race;
private static RegattaOverviewTableResources tableRes = GWT.create(RegattaOverviewTableResources.class);
public CourseDesignTableComposite(final SailingServiceAsync sailingService, ErrorReporter errorReporter,
final StringMessages stringMessages) {
this.sailingService = sailingService;
this.stringMessages = stringMessages;
this.race = null;
mainPanel = new SimplePanel();
VerticalPanel panel = new VerticalPanel();
mainPanel.setWidget(panel);
waypointDataProvider = new ListDataProvider<WaypointDTO>();
waypointTable = createCourseDesignTable();
panel.add(waypointTable);
initWidget(mainPanel);
}
private CellTable<WaypointDTO> createCourseDesignTable() {
CellTable<WaypointDTO> table = new CellTable<WaypointDTO>(/* pageSize */10000, tableRes);
waypointDataProvider.addDataDisplay(table);
table.setWidth("100%");
TextColumn<WaypointDTO> waypointNameColumn = new TextColumn<WaypointDTO>() {
@Override
public String getValue(WaypointDTO waypointDTO) {
return waypointDTO.name;
}
};
TextColumn<WaypointDTO> waypointPassingSideColumn = new TextColumn<WaypointDTO>() {
@Override
public String getValue(WaypointDTO waypointDTO) {
return (waypointDTO.passingSide == null) ? "" : waypointDTO.passingSide.name();
}
};
table.addColumn(waypointNameColumn, stringMessages.waypoint());
table.addColumn(waypointPassingSideColumn, stringMessages.passingSide());
return table;
}
public void setRace(RegattaOverviewEntryDTO regattaOverviewEntryDTO) {
this.race = regattaOverviewEntryDTO;
updateCourseDetails();
}
private void updateCourseDetails() {
if (this.race != null && this.race.raceInfo.lastCourseDesign != null) {
waypointDataProvider.getList().clear();
waypointDataProvider.getList().addAll(this.race.raceInfo.lastCourseDesign.waypoints);
}
}
}
@@ -25,7 +25,7 @@ public class RegattaOverviewEntryPoint extends AbstractEntryPoint {
}
String eventIdAsString = Window.Location.getParameter("event");
RegattaOverviewTableComposite regattaOverviewPanel = new RegattaOverviewTableComposite(sailingService, this, stringMessages, eventIdAsString);
RegattaOverviewPanel regattaOverviewPanel = new RegattaOverviewPanel(sailingService, this, stringMessages, eventIdAsString);
rootPanel.add(regattaOverviewPanel);
}
@@ -0,0 +1,105 @@
package com.sap.sailing.gwt.ui.regattaoverview;
import java.util.List;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.MarkedAsyncCallback;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO;
public class RegattaOverviewPanel extends SimplePanel implements RegattaOverviewRaceSelectionChangeListener {
private final SailingServiceAsync sailingService;
@SuppressWarnings("unused")
private final ErrorReporter errorReporter;
@SuppressWarnings("unused")
private final StringMessages stringMessages;
private final String eventIdAsString;
private RegattaOverviewRaceSelectionModel raceSelectionProvider;
private RegattaOverviewTableComposite regattaOverviewTableComposite;
private CourseDesignTableComposite raceCourseDesignDetailsComposite;
private final Label eventNameLabel;
private final Label venueNameLabel;
public RegattaOverviewPanel(SailingServiceAsync sailingService, ErrorReporter errorReporter, StringMessages stringMessages, String eventIdAsString) {
this.sailingService = sailingService;
this.errorReporter = errorReporter;
this.stringMessages = stringMessages;
this.eventIdAsString = eventIdAsString;
VerticalPanel mainPanel = new VerticalPanel();
setWidget(mainPanel);
mainPanel.setWidth("100%");
eventNameLabel = new Label();
venueNameLabel = new Label();
Grid grid = new Grid(1, 2);
raceSelectionProvider = new RegattaOverviewRaceSelectionModel(false);
raceSelectionProvider.addRegattaOverviewRaceSelectionChangeListener(this);
regattaOverviewTableComposite = new RegattaOverviewTableComposite(sailingService, errorReporter, stringMessages, eventIdAsString, raceSelectionProvider);
raceCourseDesignDetailsComposite = new CourseDesignTableComposite(sailingService, errorReporter, stringMessages);
grid.setWidget(0, 0, raceCourseDesignDetailsComposite);
grid.setWidget(0, 1, regattaOverviewTableComposite);
grid.getRowFormatter().setVerticalAlign(0, HasVerticalAlignment.ALIGN_TOP);
grid.getColumnFormatter().getElement(1).getStyle().setPaddingTop(2.0, Unit.EM);
mainPanel.add(eventNameLabel);
mainPanel.add(venueNameLabel);
mainPanel.add(grid);
fillEventAndVenueName();
}
@Override
public void onRegattaOverviewEntrySelectionChange(List<RegattaOverviewEntryDTO> selectedRegattaOverviewEntries) {
final RegattaOverviewEntryDTO selectedRegattaOverviewEntry;
if (selectedRegattaOverviewEntries.iterator().hasNext()) {
selectedRegattaOverviewEntry = selectedRegattaOverviewEntries.iterator().next();
if (selectedRegattaOverviewEntry != null && regattaOverviewTableComposite.getAllRaces() != null) {
for(RegattaOverviewEntryDTO regattaOverviewEntryDTO: regattaOverviewTableComposite.getAllRaces()) {
if(regattaOverviewEntryDTO.equals(selectedRegattaOverviewEntry)) {//TOTOTOTOTO!!!!!!!!!!!!
raceCourseDesignDetailsComposite.setRace(regattaOverviewEntryDTO);
break;
}
}
}
} else {
raceCourseDesignDetailsComposite.setRace(null);
}
}
private void fillEventAndVenueName() {
sailingService.getEventByIdAsString(eventIdAsString, new MarkedAsyncCallback<EventDTO>() {
@Override
protected void handleFailure(Throwable cause) {
}
@Override
protected void handleSuccess(EventDTO result) {
if (result != null) {
eventNameLabel.setText(result.name);
venueNameLabel.setText(result.venue.name);
}
}
});
}
}
@@ -0,0 +1,14 @@
package com.sap.sailing.gwt.ui.regattaoverview;
import java.util.List;
import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO;
public interface RegattaOverviewRaceSelectionChangeListener {
/**
* The first element is the first one selected
*
* @param selectedRegattaOverviewEntries a non-<code>null</code> list which is empty if nothing is selected
*/
void onRegattaOverviewEntrySelectionChange(List<RegattaOverviewEntryDTO> selectedRegattaOverviewEntries);
}
@@ -0,0 +1,92 @@
package com.sap.sailing.gwt.ui.regattaoverview;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO;
public class RegattaOverviewRaceSelectionModel implements RegattaOverviewRaceSelectionProvider {
private final List<RegattaOverviewEntryDTO> selection;
private final List<RegattaOverviewEntryDTO> allRegattaOverviewRaces;
private final Set<RegattaOverviewRaceSelectionChangeListener> listeners;
private final boolean hasMultiSelection;
public RegattaOverviewRaceSelectionModel(boolean hasMultiSelection) {
this.hasMultiSelection = hasMultiSelection;
this.selection = new ArrayList<RegattaOverviewEntryDTO>();
this.allRegattaOverviewRaces = new ArrayList<RegattaOverviewEntryDTO>();
listeners = new HashSet<RegattaOverviewRaceSelectionChangeListener>();
}
@Override
public List<RegattaOverviewEntryDTO> getSelectedEntries() {
return Collections.unmodifiableList(selection);
}
@Override
public void addRegattaOverviewRaceSelectionChangeListener(RegattaOverviewRaceSelectionChangeListener listener) {
listeners.add(listener);
}
@Override
public void removeRegattaOverviewRaceSelectionChangeListener(RegattaOverviewRaceSelectionChangeListener listener) {
listeners.remove(listener);
}
@Override
public void setSelection(List<RegattaOverviewEntryDTO> newSelection, RegattaOverviewRaceSelectionChangeListener... listenersNotToNotify) {
boolean notify = !selection.equals(newSelection);
selection.clear();
selection.addAll(newSelection);
if (notify) {
notifyListeners(listenersNotToNotify);
}
}
private void notifyListeners(RegattaOverviewRaceSelectionChangeListener[] listenersNotToNotify) {
List<RegattaOverviewEntryDTO> selectedRegattaOverviewEntries = getSelectedEntries();
for (RegattaOverviewRaceSelectionChangeListener listener : listeners) {
if (listenersNotToNotify == null || !Arrays.asList(listenersNotToNotify).contains(listener)) {
listener.onRegattaOverviewEntrySelectionChange(selectedRegattaOverviewEntries);
}
}
}
@Override
public boolean hasMultiSelection() {
return hasMultiSelection;
}
@Override
public List<RegattaOverviewEntryDTO> getAllRegattaOverviewEntries() {
return Collections.unmodifiableList(allRegattaOverviewRaces);
}
@Override
public void setAllRegattaOverviewEntries(List<RegattaOverviewEntryDTO> newAllRegattaOverviewEntries,
RegattaOverviewRaceSelectionChangeListener... listenersNotToNotify) {
allRegattaOverviewRaces.clear();
for (RegattaOverviewEntryDTO r : newAllRegattaOverviewEntries) {
allRegattaOverviewRaces.add(r);
}
for (Iterator<RegattaOverviewEntryDTO> i=selection.iterator(); i.hasNext(); ) {
RegattaOverviewEntryDTO selectedRegattaOverviewEntry = i.next();
if (!allRegattaOverviewRaces.contains(selectedRegattaOverviewEntry)) {
i.remove();
}
}
// when setting all regatta overview entries, the actual RegattaOverviewEntryDTOs will usually have changed their identity and maybe also their state;
// so notifying the selection listeners is necessary anyhow
notifyListeners(listenersNotToNotify);
}
}
@@ -0,0 +1,27 @@
package com.sap.sailing.gwt.ui.regattaoverview;
import java.util.List;
import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO;
public interface RegattaOverviewRaceSelectionProvider {
/**
* @return a non-<code>null</code> list which may be empty
*/
List<RegattaOverviewEntryDTO> getSelectedEntries();
void addRegattaOverviewRaceSelectionChangeListener(RegattaOverviewRaceSelectionChangeListener listener);
void removeRegattaOverviewRaceSelectionChangeListener(RegattaOverviewRaceSelectionChangeListener listener);
void setSelection(List<RegattaOverviewEntryDTO> newSelection, RegattaOverviewRaceSelectionChangeListener... listenersNotToNotify);
boolean hasMultiSelection();
/**
* @return a non-<code>null</code> list which may be empty
*/
List<RegattaOverviewEntryDTO> getAllRegattaOverviewEntries();
void setAllRegattaOverviewEntries(List<RegattaOverviewEntryDTO> newAllRegattaOverviewEntries, RegattaOverviewRaceSelectionChangeListener... listenersNotToNotify);
}
@@ -1,12 +1,12 @@
package com.sap.sailing.gwt.ui.regattaoverview;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
interface RegattaOverviewResources extends ClientBundle {
@Source("com/sap/sailing/gwt/ui/client/images/flags/flagsRacecommittee/ap.png")
ImageResource flagAP();
@Source("com/sap/sailing/gwt/ui/client/images/flags/flagsRacecommittee/up.png")
ImageResource arrowUp();
package com.sap.sailing.gwt.ui.regattaoverview;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
interface RegattaOverviewResources extends ClientBundle {
@Source("com/sap/sailing/gwt/ui/client/images/flags/flags_racecommittee/ap.png")
ImageResource flagAP();
@Source("com/sap/sailing/gwt/ui/client/images/flags/flags_racecommittee/up.png")
ImageResource arrowUp();
}
@@ -1,5 +1,6 @@
package com.sap.sailing.gwt.ui.regattaoverview;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -19,6 +20,10 @@ import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionModel;
import com.google.gwt.view.client.SingleSelectionModel;
import com.sap.sailing.domain.common.RaceIdentifier;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.MarkedAsyncCallback;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
@@ -27,7 +32,6 @@ import com.sap.sailing.gwt.ui.client.TimeListener;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
import com.sap.sailing.gwt.ui.client.Timer.PlayStates;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO;
public class RegattaOverviewTableComposite extends Composite {
@@ -35,6 +39,7 @@ public class RegattaOverviewTableComposite extends Composite {
private final long serverUpdateRate = 10000;
private final long uiUpdateRate = 1000;
private final SelectionModel<RegattaOverviewEntryDTO> raceSelectionModel;
private final CellTable<RegattaOverviewEntryDTO> regattaOverviewTable;
private ListDataProvider<RegattaOverviewEntryDTO> regattaOverviewDataProvider;
private final SimplePanel mainPanel;
@@ -42,24 +47,24 @@ public class RegattaOverviewTableComposite extends Composite {
private final Timer serverUpdateTimer;
private final Timer uiUpdateTimer;
private final Label timeLabel;
private final Label eventNameLabel;
private final Label venueNameLabel;
private final Button startStopUpdatingButton;
private final DateTimeFormat timeFormatter = DateTimeFormat.getFormat("HH:mm:ss");
private final SailingServiceAsync sailingService;
private final StringMessages stringMessages;
private final String eventIdAsString;
private final RegattaOverviewRaceSelectionProvider raceSelectionProvider;
private static RegattaOverviewResources resources = GWT.create(RegattaOverviewResources.class);
private static RegattaOverviewTableResources tableRes = GWT.create(RegattaOverviewTableResources.class);
public RegattaOverviewTableComposite(final SailingServiceAsync sailingService, ErrorReporter errorReporter,
final StringMessages stringMessages, final String eventIdAsString) {
final StringMessages stringMessages, final String eventIdAsString, final RegattaOverviewRaceSelectionProvider raceSelectionProvider) {
this.sailingService = sailingService;
this.stringMessages = stringMessages;
this.eventIdAsString = eventIdAsString;
this.raceSelectionProvider = raceSelectionProvider;
this.serverUpdateTimer = new Timer(PlayModes.Live, serverUpdateRate);
this.serverUpdateTimer.addTimeListener(new TimeListener() {
@@ -88,12 +93,9 @@ public class RegattaOverviewTableComposite extends Composite {
regattaOverviewDataProvider = new ListDataProvider<RegattaOverviewEntryDTO>();
regattaOverviewTable = createRegattaTable();
eventNameLabel = new Label();
venueNameLabel = new Label();
timeLabel = new Label();
Button refreshNowButton = new Button("Refresh now");
Button refreshNowButton = new Button(stringMessages.refreshNow());
refreshNowButton.addClickHandler(new ClickHandler() {
@Override
@@ -103,56 +105,64 @@ public class RegattaOverviewTableComposite extends Composite {
});
this.startStopUpdatingButton = new Button("Stop updating");
this.startStopUpdatingButton = new Button(stringMessages.stopUpdating());
this.startStopUpdatingButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (serverUpdateTimer.getPlayState().equals(PlayStates.Playing)) {
serverUpdateTimer.pause();
startStopUpdatingButton.setText("Start updating");
startStopUpdatingButton.setText(stringMessages.startUpdating());
} else if (serverUpdateTimer.getPlayState().equals(PlayStates.Paused)) {
serverUpdateTimer.play();
startStopUpdatingButton.setText("Stop updating");
startStopUpdatingButton.setText(stringMessages.stopUpdating());
}
}
});
Grid gridTimeRefreshStop = new Grid(1, 4);
gridTimeRefreshStop.setWidget(0, 0, new Label("Current time: "));
gridTimeRefreshStop.setWidget(0, 0, new Label(stringMessages.currentTime()));
gridTimeRefreshStop.setWidget(0, 1, timeLabel);
gridTimeRefreshStop.setWidget(0, 2, refreshNowButton);
gridTimeRefreshStop.setWidget(0, 3, startStopUpdatingButton);
panel.add(eventNameLabel);
panel.add(venueNameLabel);
raceSelectionModel = new SingleSelectionModel<RegattaOverviewEntryDTO>();
raceSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
List<RegattaOverviewEntryDTO> selectedRaces = getSelectedRaces();
List<RaceIdentifier> selectedRaceIdentifiers = new ArrayList<RaceIdentifier>();
for (RegattaOverviewEntryDTO selectedRace : selectedRaces) {
selectedRaceIdentifiers.add(selectedRace.raceInfo.raceIdentifier);
}
RegattaOverviewTableComposite.this.raceSelectionProvider.setSelection(selectedRaces);
}
});
regattaOverviewTable.setSelectionModel(raceSelectionModel);
panel.add(gridTimeRefreshStop);
panel.add(regattaOverviewTable);
initWidget(mainPanel);
fillEventAndVenueName();
loadAndUpdateEventLog();
onUpdateUI(new Date());
}
private void fillEventAndVenueName() {
sailingService.getEventByIdAsString(eventIdAsString, new MarkedAsyncCallback<EventDTO>() {
@Override
protected void handleFailure(Throwable cause) {
}
@Override
protected void handleSuccess(EventDTO result) {
if (result != null) {
eventNameLabel.setText(result.name);
venueNameLabel.setText(result.venue.name);
protected List<RegattaOverviewEntryDTO> getSelectedRaces() {
List<RegattaOverviewEntryDTO> result = new ArrayList<RegattaOverviewEntryDTO>();
if (regattaOverviewDataProvider != null) {
for (RegattaOverviewEntryDTO race : regattaOverviewDataProvider.getList()) {
if (raceSelectionModel.isSelected(race)) {
result.add(race);
}
}
});
}
return result;
}
public void onUpdateServer(Date time) {
@@ -168,7 +178,6 @@ public class RegattaOverviewTableComposite extends Composite {
@Override
protected void handleFailure(Throwable cause) {
// TODO Auto-generated method stub
}
@@ -260,4 +269,8 @@ public class RegattaOverviewTableComposite extends Composite {
return table;
}
public List<RegattaOverviewEntryDTO> getAllRaces() {
return regattaOverviewDataProvider.getList();
}
}
@@ -1097,7 +1097,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
return result;
}
private RaceInfoDTO convertToRaceInfoDTO(RaceColumnDTO raceColumnDTO, Fleet fleet, RaceLog raceLog) {
private RaceInfoDTO convertToRaceInfoDTO(RaceColumnDTO raceColumnDTO, FleetDTO fleetDTO, RaceLog raceLog) {
RaceInfoDTO raceInfoDTO = new RaceInfoDTO();
PassAwareRaceLogImpl passAwareRaceLog = new PassAwareRaceLogImpl(raceLog);
@@ -1107,7 +1107,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
}
raceInfoDTO.raceName = raceColumnDTO.name;
raceInfoDTO.fleet = fleet.getName();
raceInfoDTO.fleet = fleetDTO.name;
raceInfoDTO.raceIdentifier = raceColumnDTO.getRaceIdentifier(fleetDTO);
RaceStatusAnalyzer raceStatusAnalyzer = new RaceStatusAnalyzer(passAwareRaceLog);
raceInfoDTO.lastStatus = raceStatusAnalyzer.getStatus();
@@ -2229,7 +2230,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
private void addRaceInfoToRace(RaceColumn raceColumn, Fleet fleet, final FleetDTO fleetDTO, RaceColumnDTO raceColumnDTO) {
RaceLog raceLog = raceColumn.getRaceLog(fleet);
RaceInfoDTO raceInfoDTO = convertToRaceInfoDTO(raceColumnDTO, fleet, raceLog);
RaceInfoDTO raceInfoDTO = convertToRaceInfoDTO(raceColumnDTO, fleetDTO, raceLog);
raceColumnDTO.getRaceInfoPerFleet().put(fleetDTO, raceInfoDTO);
}
@@ -2,6 +2,7 @@ package com.sap.sailing.gwt.ui.shared;
import java.util.Date;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
@@ -15,6 +16,7 @@ public class RaceInfoDTO implements IsSerializable {
public Flags lastFlag;
public boolean displayed;
public RaceCourseDTO lastCourseDesign;
public RegattaAndRaceIdentifier raceIdentifier;
// for GWT serialization
public RaceInfoDTO() { }