mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-19 02:29:58 +00:00
Merge local branch newSelectionModelinto newSelectionModel
This commit is contained in:
commit
d9624dd385
42 files changed
+149
-742
No files matched your search
+2
-51
@@ -1,7 +1,6 @@
|
||||
package com.sap.sailing.dashboards.gwt.client.dataretriever;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
@@ -12,9 +11,6 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.dashboards.gwt.client.RibDashboardServiceAsync;
|
||||
import com.sap.sailing.dashboards.gwt.client.actions.GetRibDashboardRaceInfoAction;
|
||||
import com.sap.sailing.dashboards.gwt.shared.dto.RibDashboardRaceInfoDTO;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
|
||||
@@ -26,11 +22,10 @@ import com.sap.sse.gwt.client.player.TimeListener;
|
||||
* @author Alexander Ries
|
||||
*
|
||||
*/
|
||||
public class RibDashboardDataRetriever implements TimeListener, RaceSelectionProvider {
|
||||
public class RibDashboardDataRetriever implements TimeListener {
|
||||
|
||||
private String leaderboardName;
|
||||
private ArrayList<RibDashboardDataRetrieverListener> dataRetrieverListener;
|
||||
private ArrayList<RaceSelectionChangeListener> raceSelectionChangeListener;
|
||||
|
||||
private AsyncActionsExecutor asyncActionsExecutor;
|
||||
|
||||
@@ -51,7 +46,6 @@ public class RibDashboardDataRetriever implements TimeListener, RaceSelectionPro
|
||||
|
||||
private void initNonFinalMemberVariablesWithNoArgumentConstructor() {
|
||||
dataRetrieverListener = new ArrayList<RibDashboardDataRetrieverListener>();
|
||||
raceSelectionChangeListener = new ArrayList<RaceSelectionChangeListener>();
|
||||
}
|
||||
|
||||
private void loadLiveRaceInfoFromRibDashboadService() {
|
||||
@@ -66,10 +60,8 @@ public class RibDashboardDataRetriever implements TimeListener, RaceSelectionPro
|
||||
switch (result.responseMessage) {
|
||||
case RACE_LIVE:
|
||||
logger.log(Level.INFO, "RibDashboardRaceInfoDTO.responseMessage is RACE_LIVE");
|
||||
if(result.idOfLastTrackedRace != null) {
|
||||
if (result.idOfLastTrackedRace != null) {
|
||||
logger.log(Level.INFO, "RibDashboardRaceInfoDTO idOfLastTrackedRace is "+result.idOfLastTrackedRace);
|
||||
List<RegattaAndRaceIdentifier> singletonList = Collections.singletonList(result.idOfLastTrackedRace);
|
||||
setSelection(singletonList);
|
||||
} else {
|
||||
logger.log(Level.INFO, "RibDashboardRaceInfoDTO.idOfLastTrackedRace is null");
|
||||
}
|
||||
@@ -123,45 +115,4 @@ public class RibDashboardDataRetriever implements TimeListener, RaceSelectionPro
|
||||
public void timeChanged(Date newTime, Date oldTime) {
|
||||
loadLiveRaceInfoFromRibDashboadService();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRaceSelectionChangeListener(RaceSelectionChangeListener listener) {
|
||||
synchronized (MUTEX) {
|
||||
if (listener != null) {
|
||||
raceSelectionChangeListener.add(listener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeRaceSelectionChangeListener(RaceSelectionChangeListener listener) {
|
||||
synchronized (MUTEX) {
|
||||
raceSelectionChangeListener.remove(listener);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelection(List<RegattaAndRaceIdentifier> newSelection,
|
||||
RaceSelectionChangeListener... listenersNotToNotify) {
|
||||
synchronized (MUTEX) {
|
||||
for (RaceSelectionChangeListener currentRaceSelectionChangeListener : raceSelectionChangeListener) {
|
||||
currentRaceSelectionChangeListener.onRaceSelectionChange(newSelection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RegattaAndRaceIdentifier> getAllRaces() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAllRaces(List<RegattaAndRaceIdentifier> newAllRaces,
|
||||
RaceSelectionChangeListener... listenersNotToNotify) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RegattaAndRaceIdentifier> getSelectedRaces() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
-1
@@ -153,7 +153,6 @@ public class StartlineAnalysisCard extends Composite implements HasWidgets, Star
|
||||
raceMap = new RaceMap(sailingServiceAsync, asyncActionsExecutor, null, timer, competitorSelectionModel,
|
||||
StringMessages.INSTANCE, false, false, false, false, startAnalysisDTO.regattaAndRaceIdentifier,
|
||||
resources.combinedWindPanelStyle(), /* showHeaderPanel */ true);
|
||||
raceMap.onRaceSelectionChange(Collections.singletonList(startAnalysisDTO.regattaAndRaceIdentifier));
|
||||
raceMap.getSettings().setZoomSettings(new RaceMapZoomSettings(zoomTypes, false));
|
||||
raceMap.getSettings().setHelpLinesSettings(getHelpLineSettings());
|
||||
raceMap.getSettings().setTailLengthInMilliseconds(startAnalysisDTO.tailLenghtInMilliseconds);
|
||||
|
||||
+1
-8
@@ -1,9 +1,7 @@
|
||||
package com.sap.sailing.gwt.autoplay.client.place.player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.core.client.Scheduler;
|
||||
@@ -29,7 +27,6 @@ import com.sap.sailing.gwt.common.client.FullscreenUtil;
|
||||
import com.sap.sailing.gwt.common.client.i18n.TextMessages;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -167,12 +164,8 @@ public class AutoPlayController implements RaceTimesInfoProviderListener {
|
||||
}
|
||||
|
||||
private RaceBoardPanel createRaceBoardPanel(String leaderboardName, RegattaAndRaceIdentifier raceToShow, Map<CompetitorDTO, BoatDTO> competitorsAndTheirBoats) {
|
||||
RaceSelectionModel raceSelectionModel = new RaceSelectionModel();
|
||||
List<RegattaAndRaceIdentifier> singletonList = Collections.singletonList(raceToShow);
|
||||
raceSelectionModel.setSelection(singletonList);
|
||||
|
||||
RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, mediaService, userService, asyncActionsExecutor,
|
||||
competitorsAndTheirBoats, raceboardTimer, raceSelectionModel, leaderboardName, null, /* event */null, raceboardViewConfig,
|
||||
competitorsAndTheirBoats, raceboardTimer, raceToShow, leaderboardName, null, /* event */null, raceboardViewConfig,
|
||||
errorReporter, StringMessages.INSTANCE, userAgent, raceTimesInfoProvider, /* showMapControls */false);
|
||||
return raceBoardPanel;
|
||||
}
|
||||
|
||||
+5
-5
@@ -17,18 +17,18 @@ import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTOImpl;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDialog<Set<CompetitorDTO>> {
|
||||
protected CompetitorTableWrapper<MultiSelectionModel<CompetitorDTO>> allCompetitorsTable;
|
||||
protected CompetitorTableWrapper<MultiSelectionModel<CompetitorDTO>> registeredCompetitorsTable;
|
||||
protected CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> allCompetitorsTable;
|
||||
protected CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> registeredCompetitorsTable;
|
||||
protected final boolean filterByLeaderBoardInitially = false;
|
||||
private final StringMessages stringMessages;
|
||||
protected final SailingServiceAsync sailingService;
|
||||
@@ -145,8 +145,8 @@ public abstract class AbstractCompetitorRegistrationsDialog extends DataEntryDia
|
||||
}
|
||||
}
|
||||
|
||||
private void moveSelected(CompetitorTableWrapper<MultiSelectionModel<CompetitorDTO>> from,
|
||||
CompetitorTableWrapper<MultiSelectionModel<CompetitorDTO>> to) {
|
||||
private void moveSelected(CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> from,
|
||||
CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> to) {
|
||||
move(from, to, from.getSelectionModel().getSelectedSet());
|
||||
}
|
||||
|
||||
|
||||
+11
-13
@@ -25,7 +25,6 @@ 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.SelectionChangeEvent.Handler;
|
||||
import com.google.gwt.view.client.SetSelectionModel;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
@@ -71,7 +70,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
|
||||
|
||||
protected final CellTable<StrippedLeaderboardDTO> leaderboardTable;
|
||||
|
||||
protected final RaceTableWrapper<SetSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>> raceColumnTable;
|
||||
protected final RaceTableWrapper<RefreshableSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>> raceColumnTable;
|
||||
protected final RefreshableSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality> raceColumnTableSelectionModel;
|
||||
|
||||
protected RaceColumnDTOAndFleetDTOWithNameBasedEquality selectedRaceInLeaderboard;
|
||||
@@ -86,7 +85,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
|
||||
|
||||
protected final RefreshableMultiSelectionModel<StrippedLeaderboardDTO> refreshableLeaderboardSelectionModel;
|
||||
|
||||
protected final RefreshableSingleSelectionModel<RaceDTO> raceSingelSelectionModel;
|
||||
protected final RefreshableSingleSelectionModel<RaceDTO> raceSingleSelectionModel;
|
||||
protected boolean reactOnSelectionChangeEvent;
|
||||
|
||||
private final LeaderboardsRefresher leaderboardsRefresher;
|
||||
@@ -218,16 +217,15 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
|
||||
trackedRacesListComposite.ensureDebugId("TrackedRacesListComposite");
|
||||
trackedRacesPanel.add(trackedRacesListComposite);
|
||||
trackedRacesListComposite.addTrackedRaceChangeListener(this);
|
||||
this.raceSingelSelectionModel = (RefreshableSingleSelectionModel<RaceDTO>) trackedRacesListComposite.getSelectionModel();
|
||||
this.raceSingelSelectionModel.addSelectionChangeHandler(new Handler() {
|
||||
|
||||
this.raceSingleSelectionModel = (RefreshableSingleSelectionModel<RaceDTO>) trackedRacesListComposite.getSelectionModel();
|
||||
this.raceSingleSelectionModel.addSelectionChangeHandler(new Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
if (reactOnSelectionChangeEvent) {
|
||||
// if no leaderboard column is selected, ignore the race selection change
|
||||
RaceColumnDTOAndFleetDTOWithNameBasedEquality selectedRaceColumnAndFleetName = getSelectedRaceColumnWithFleet();
|
||||
if (selectedRaceColumnAndFleetName != null) {
|
||||
if (raceSingelSelectionModel.getSelectedSet().isEmpty()) {
|
||||
if (raceSingleSelectionModel.getSelectedSet().isEmpty()) {
|
||||
if (selectedRaceColumnAndFleetName.getA()
|
||||
.getRaceIdentifier(selectedRaceColumnAndFleetName.getB()) != null) {
|
||||
unlinkRaceColumnFromTrackedRace(
|
||||
@@ -237,7 +235,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
|
||||
} else {
|
||||
linkTrackedRaceToSelectedRaceColumn(selectedRaceColumnAndFleetName.getA(),
|
||||
selectedRaceColumnAndFleetName.getB(),
|
||||
raceSingelSelectionModel.getSelectedObject().getRaceIdentifier());
|
||||
raceSingleSelectionModel.getSelectedObject().getRaceIdentifier());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -261,11 +259,11 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
|
||||
vPanel.add(reloadAllRaceLogs);
|
||||
Label lblRaceNamesIn = new Label(stringMessages.races());
|
||||
vPanel.add(lblRaceNamesIn);
|
||||
raceColumnTable = new RaceTableWrapper<SetSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>>(
|
||||
raceColumnTable = new RaceTableWrapper<RefreshableSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>>(
|
||||
sailingService, stringMessages, errorReporter, multiSelection);
|
||||
raceColumnTable.getTable().setWidth("100%");
|
||||
addColumnsToRacesTable(raceColumnTable.getTable());
|
||||
this.raceColumnTableSelectionModel = raceColumnTable.getRefreshableSelectionModel();
|
||||
this.raceColumnTableSelectionModel = raceColumnTable.getSelectionModel();
|
||||
raceColumnTableSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
leaderboardRaceColumnSelectionChanged();
|
||||
@@ -336,7 +334,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
|
||||
}
|
||||
replaceLeaderboardInList(availableLeaderboardList, leaderboardName, leaderboard);
|
||||
filterLeaderboardPanel.updateAll(availableLeaderboardList); // also updates leaderboardList provider
|
||||
refreshableLeaderboardSelectionModel.setSelected(leaderboard, true);
|
||||
refreshableLeaderboardSelectionModel.setSelected(leaderboard, true); // TODO Lukas: should/will this replace a previously selected element that is compared equal by the EntityIdentityComparator?
|
||||
if (nameOfRaceColumnToSelect != null) {
|
||||
selectRaceColumn(nameOfRaceColumnToSelect);
|
||||
}
|
||||
@@ -356,12 +354,12 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement
|
||||
int index = -1;
|
||||
for (StrippedLeaderboardDTO existingLeaderboard : leaderboardList) {
|
||||
index++;
|
||||
if (existingLeaderboard.name.equals(leaderboardToReplace)) {
|
||||
if (existingLeaderboard.name.equals(leaderboardToReplace)) { // TODO Lukas: this should be the EntityIdentityComparator used for the RefreshableSelectionModel
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (index >= 0) {
|
||||
leaderboardList.set(index, newLeaderboard);
|
||||
leaderboardList.set(index, newLeaderboard); // TODO Lukas: update refreshable selection model accordingly
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -21,13 +21,14 @@ import com.sap.sailing.gwt.ui.shared.DeviceMappingDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.TrackFileImportDeviceIdentifierDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public abstract class AbstractLogImportFixesAndAddMappingsDialog extends DataEntryDialog<Collection<DeviceMappingDTO>> {
|
||||
TrackFileImportWidget importWidget;
|
||||
private TrackFileImportDeviceIdentifierTableWrapper deviceIdTable;
|
||||
protected final CompetitorTableWrapper<SingleSelectionModel<CompetitorDTO>> competitorTable;
|
||||
protected final MarkTableWrapper<SingleSelectionModel<MarkDTO>> markTable;
|
||||
protected final CompetitorTableWrapper<RefreshableSingleSelectionModel<CompetitorDTO>> competitorTable;
|
||||
protected final MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>> markTable;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
private final Map<TrackFileImportDeviceIdentifierDTO, MappableToDevice> mappings = new HashMap<>();
|
||||
@@ -56,7 +57,7 @@ public abstract class AbstractLogImportFixesAndAddMappingsDialog extends DataEnt
|
||||
}
|
||||
});
|
||||
competitorTable = new CompetitorTableWrapper<>(sailingService, stringMessages, errorReporter, /* multiSelection */ false, true);
|
||||
markTable = new MarkTableWrapper<SingleSelectionModel<MarkDTO>>(
|
||||
markTable = new MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>>(
|
||||
/* multiSelection */ false, sailingService, stringMessages, errorReporter);
|
||||
|
||||
competitorTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
|
||||
+14
-24
@@ -29,36 +29,14 @@ public abstract class AbstractRaceManagementPanel extends AbstractEventManagemen
|
||||
public AbstractRaceManagementPanel(final SailingServiceAsync sailingService, ErrorReporter errorReporter,
|
||||
RegattaRefresher regattaRefresher, boolean actionButtonsEnabled, StringMessages stringMessages) {
|
||||
super(sailingService, regattaRefresher, errorReporter, actionButtonsEnabled, stringMessages);
|
||||
|
||||
VerticalPanel mainPanel = new VerticalPanel();
|
||||
this.setWidget(mainPanel);
|
||||
mainPanel.setWidth("100%");
|
||||
|
||||
mainPanel.add(trackedRacesListComposite);
|
||||
|
||||
trackedRacesListComposite.getSelectionModel().addSelectionChangeHandler(new Handler() {
|
||||
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
onRaceSelectionChange(trackedRacesListComposite.getSelectionModel().getSelectedSet());
|
||||
}
|
||||
});
|
||||
|
||||
singleSelectedRace = null;
|
||||
|
||||
selectedCaptionRacePanel = new CaptionPanel(stringMessages.race());
|
||||
selectedCaptionRacePanel.setWidth("100%");
|
||||
mainPanel.add(selectedCaptionRacePanel);
|
||||
|
||||
selectedRaceContentPanel = new VerticalPanel();
|
||||
selectedRaceContentPanel.setWidth("100%");
|
||||
selectedCaptionRacePanel.setContentWidget(selectedRaceContentPanel);
|
||||
selectedCaptionRacePanel.setVisible(false);
|
||||
}
|
||||
|
||||
abstract void refreshSelectedRaceData();
|
||||
|
||||
public void onRaceSelectionChange(Set<RaceDTO> selectedRaces) {
|
||||
Set<RaceDTO> selectedRaces = trackedRacesListComposite.getSelectionModel().getSelectedSet();
|
||||
if (selectedRaces.size() == 1) {
|
||||
singleSelectedRace = selectedRaces.iterator().next().getRaceIdentifier();
|
||||
selectedCaptionRacePanel.setCaptionText(singleSelectedRace.getRaceName());
|
||||
@@ -66,7 +44,7 @@ public abstract class AbstractRaceManagementPanel extends AbstractEventManagemen
|
||||
for (RegattaDTO regatta : getAvailableRegattas()) {
|
||||
for (RaceDTO race : regatta.races) {
|
||||
if (race != null && race.getRaceIdentifier().equals(singleSelectedRace)) {
|
||||
this.selectedRaceDTO = race;
|
||||
AbstractRaceManagementPanel.this.selectedRaceDTO = race;
|
||||
refreshSelectedRaceData();
|
||||
break;
|
||||
}
|
||||
@@ -78,4 +56,16 @@ public abstract class AbstractRaceManagementPanel extends AbstractEventManagemen
|
||||
selectedCaptionRacePanel.setVisible(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
singleSelectedRace = null;
|
||||
selectedCaptionRacePanel = new CaptionPanel(stringMessages.race());
|
||||
selectedCaptionRacePanel.setWidth("100%");
|
||||
mainPanel.add(selectedCaptionRacePanel);
|
||||
selectedRaceContentPanel = new VerticalPanel();
|
||||
selectedRaceContentPanel.setWidth("100%");
|
||||
selectedCaptionRacePanel.setContentWidget(selectedRaceContentPanel);
|
||||
selectedCaptionRacePanel.setVisible(false);
|
||||
}
|
||||
|
||||
abstract void refreshSelectedRaceData();
|
||||
}
|
||||
+8
-13
@@ -98,14 +98,11 @@ public abstract class AbstractTrackedRacesListComposite extends SimplePanel impl
|
||||
|
||||
protected void createUI() {
|
||||
AdminConsoleTableResources tableResources = GWT.create(AdminConsoleTableResources.class);
|
||||
|
||||
raceList = new ListDataProvider<RaceDTO>();
|
||||
settings = new TrackedRacesSettings();
|
||||
settings.setDelayToLiveInSeconds(DEFAULT_LIVE_DELAY_IN_MILLISECONDS / 1000l);
|
||||
|
||||
VerticalPanel panel = new VerticalPanel();
|
||||
setWidget(panel);
|
||||
|
||||
HorizontalPanel filterPanel = new HorizontalPanel();
|
||||
panel.add(filterPanel);
|
||||
Label lblFilterRaces = new Label(stringMessages.filterRacesByName() + ":");
|
||||
@@ -116,23 +113,21 @@ public abstract class AbstractTrackedRacesListComposite extends SimplePanel impl
|
||||
noTrackedRacesLabel = new Label(stringMessages.noRacesYet());
|
||||
noTrackedRacesLabel.setWordWrap(false);
|
||||
panel.add(noTrackedRacesLabel);
|
||||
|
||||
AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
|
||||
raceTable = new CellTable<RaceDTO>(/* pageSize */10000, tableRes);
|
||||
raceTable.ensureDebugId("TrackedRacesCellTable");
|
||||
|
||||
final EntityIdentityComparator<RaceDTO> entityIdentityComparator = new EntityIdentityComparator<RaceDTO>() {
|
||||
@Override
|
||||
public boolean representSameEntity(RaceDTO dto1, RaceDTO dto2) {
|
||||
return dto1.getRaceIdentifier().equals(dto2.getRaceIdentifier());
|
||||
}
|
||||
};
|
||||
if (multiSelection) {
|
||||
this.selectionCheckboxColumn = new SelectionCheckboxColumn<RaceDTO>(
|
||||
tableResources.cellTableStyle().cellTableCheckboxSelected(),
|
||||
tableResources.cellTableStyle().cellTableCheckboxDeselected(),
|
||||
tableResources.cellTableStyle().cellTableCheckboxColumnCell(),
|
||||
new EntityIdentityComparator<RaceDTO>() {
|
||||
|
||||
@Override
|
||||
public boolean representSameEntity(RaceDTO dto1, RaceDTO dto2) {
|
||||
return dto1.getRaceIdentifier().equals(dto2.getRaceIdentifier());
|
||||
}
|
||||
}) {
|
||||
entityIdentityComparator) {
|
||||
@Override
|
||||
protected ListDataProvider<RaceDTO> getListDataProvider() {
|
||||
return raceList;
|
||||
@@ -146,7 +141,7 @@ public abstract class AbstractTrackedRacesListComposite extends SimplePanel impl
|
||||
refreshableSelectionModel = selectionCheckboxColumn.getSelectionModel();
|
||||
raceTable.setSelectionModel(refreshableSelectionModel, this.selectionCheckboxColumn.getSelectionManager());
|
||||
} else {
|
||||
refreshableSelectionModel = new RefreshableSingleSelectionModel<RaceDTO>();
|
||||
refreshableSelectionModel = new RefreshableSingleSelectionModel<RaceDTO>(entityIdentityComparator);
|
||||
raceTable.setSelectionModel(refreshableSelectionModel);
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -14,7 +14,6 @@ import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
@@ -36,7 +35,7 @@ public class CompetitorPanel extends SimplePanel {
|
||||
private final SailingServiceAsync sailingService;
|
||||
private final StringMessages stringMessages;
|
||||
private final ErrorReporter errorReporter;
|
||||
private final CompetitorTableWrapper<MultiSelectionModel<CompetitorDTO>> competitorTable;
|
||||
private final CompetitorTableWrapper<RefreshableMultiSelectionModel<CompetitorDTO>> competitorTable;
|
||||
private final RefreshableMultiSelectionModel<CompetitorDTO> refreshableCompetitorSelectionModel;
|
||||
private final String leaderboardName;
|
||||
|
||||
|
||||
+1
-2
@@ -15,7 +15,6 @@ import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.ImageResourceRenderer;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.ColorColumn.ColorRetriever;
|
||||
import com.sap.sailing.gwt.ui.client.FlagImageResolver;
|
||||
@@ -28,7 +27,7 @@ import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
|
||||
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
|
||||
|
||||
public class CompetitorTableWrapper<S extends SelectionModel<CompetitorDTO>> extends TableWrapper<CompetitorDTO, S> {
|
||||
public class CompetitorTableWrapper<S extends RefreshableSelectionModel<CompetitorDTO>> extends TableWrapper<CompetitorDTO, S> {
|
||||
private final LabeledAbstractFilterablePanel<CompetitorDTO> filterField;
|
||||
|
||||
public CompetitorTableWrapper(SailingServiceAsync sailingService, StringMessages stringMessages,ErrorReporter errorReporter,
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.ControlPointDTO;
|
||||
@@ -11,7 +10,7 @@ import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
|
||||
|
||||
public class ControlPointTableWrapper<S extends SelectionModel<ControlPointDTO>> extends TableWrapper<ControlPointDTO, S> {
|
||||
public class ControlPointTableWrapper<S extends RefreshableSelectionModel<ControlPointDTO>> extends TableWrapper<ControlPointDTO, S> {
|
||||
public ControlPointTableWrapper(boolean multiSelection, SailingServiceAsync sailingService, final StringMessages stringMessages,
|
||||
ErrorReporter errorReporter) {
|
||||
super(sailingService, stringMessages, errorReporter, multiSelection, /* enablePager */ true,
|
||||
|
||||
+3
-3
@@ -7,17 +7,17 @@ import com.google.gwt.user.client.ui.CheckBox;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.AbstractLeaderboardConfigPanel.RaceColumnDTOAndFleetDTOWithNameBasedEquality;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public class CopyCourseAndCompetitorsDialog extends DataEntryDialog<CourseAndCompetitorCopyOperation> {
|
||||
private final RaceTableWrapper<MultiSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>>
|
||||
private final RaceTableWrapper<RefreshableMultiSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>>
|
||||
racesTable;
|
||||
private final CheckBox courseCheckBox;
|
||||
private final CheckBox competitorCheckBox;
|
||||
@@ -38,7 +38,7 @@ public class CopyCourseAndCompetitorsDialog extends DataEntryDialog<CourseAndCom
|
||||
return null;
|
||||
}
|
||||
}, true, dialogCallback);
|
||||
racesTable = new RaceTableWrapper<MultiSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>>(
|
||||
racesTable = new RaceTableWrapper<RefreshableMultiSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>>(
|
||||
sailingService, stringMessages, errorReporter, /* multiSelection */ true);
|
||||
racesTable.setSelectedLeaderboardName(leaderboardName);
|
||||
racesTable.getDataProvider().getList().addAll(races);
|
||||
|
||||
+8
-8
@@ -16,11 +16,9 @@ import com.google.gwt.user.client.ui.HasVerticalAlignment;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.IsWidget;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.google.gwt.view.client.SetSelectionModel;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sailing.domain.common.PassingInstruction;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
@@ -30,12 +28,14 @@ import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceCourseDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WaypointDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public abstract class CourseManagementWidget implements IsWidget {
|
||||
protected final MarkTableWrapper<MultiSelectionModel<MarkDTO>> marks;
|
||||
protected final ControlPointTableWrapper<SingleSelectionModel<ControlPointDTO>> multiMarkControlPoints;
|
||||
protected final WaypointTableWrapper<SingleSelectionModel<WaypointDTO>> waypoints;
|
||||
protected final MarkTableWrapper<RefreshableMultiSelectionModel<MarkDTO>> marks;
|
||||
protected final ControlPointTableWrapper<RefreshableSingleSelectionModel<ControlPointDTO>> multiMarkControlPoints;
|
||||
protected final WaypointTableWrapper<RefreshableSingleSelectionModel<WaypointDTO>> waypoints;
|
||||
|
||||
protected final Grid mainPanel;
|
||||
|
||||
@@ -67,11 +67,11 @@ public abstract class CourseManagementWidget implements IsWidget {
|
||||
mainPanel.setCellPadding(5);
|
||||
mainPanel.getRowFormatter().setVerticalAlign(0, HasVerticalAlignment.ALIGN_TOP);
|
||||
|
||||
waypoints = new WaypointTableWrapper<SingleSelectionModel<WaypointDTO>>(
|
||||
waypoints = new WaypointTableWrapper<RefreshableSingleSelectionModel<WaypointDTO>>(
|
||||
/* multiSelection */ false, sailingService, stringMessages, errorReporter);
|
||||
multiMarkControlPoints = new ControlPointTableWrapper<SingleSelectionModel<ControlPointDTO>>(
|
||||
multiMarkControlPoints = new ControlPointTableWrapper<RefreshableSingleSelectionModel<ControlPointDTO>>(
|
||||
/* multiSelection */ false, sailingService, stringMessages, errorReporter);
|
||||
marks = new MarkTableWrapper<MultiSelectionModel<MarkDTO>>(
|
||||
marks = new MarkTableWrapper<RefreshableMultiSelectionModel<MarkDTO>>(
|
||||
/* multiSelection */ true, sailingService, stringMessages, errorReporter);
|
||||
|
||||
CaptionPanel waypointsPanel = new CaptionPanel(stringMessages.waypoints());
|
||||
|
||||
+2
-2
@@ -1,13 +1,13 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.DeviceIdentifierDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
|
||||
public class DeviceIdentifierTableWrapper extends TableWrapper<DeviceIdentifierDTO, MultiSelectionModel<DeviceIdentifierDTO>> {
|
||||
public class DeviceIdentifierTableWrapper extends TableWrapper<DeviceIdentifierDTO, RefreshableMultiSelectionModel<DeviceIdentifierDTO>> {
|
||||
|
||||
public DeviceIdentifierTableWrapper(SailingServiceAsync sailingService, StringMessages stringMessages,
|
||||
ErrorReporter errorReporter) {
|
||||
|
||||
+2
-2
@@ -11,15 +11,15 @@ import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler;
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.user.client.ui.CheckBox;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
|
||||
import com.sap.sailing.gwt.ui.shared.DeviceMappingDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
|
||||
public class DeviceMappingTableWrapper extends TableWrapper<DeviceMappingDTO, SingleSelectionModel<DeviceMappingDTO>> {
|
||||
public class DeviceMappingTableWrapper extends TableWrapper<DeviceMappingDTO, RefreshableSingleSelectionModel<DeviceMappingDTO>> {
|
||||
static interface FilterChangedHandler {
|
||||
void onFilterChanged(List<DeviceMappingDTO> filteredList);
|
||||
}
|
||||
|
||||
+3
-3
@@ -10,7 +10,6 @@ import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -18,10 +17,11 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.GateDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public class GateCreationDialog extends DataEntryDialog<GateDTO> {
|
||||
private final MarkTableWrapper<MultiSelectionModel<MarkDTO>> marksWrapper;
|
||||
private final MarkTableWrapper<RefreshableMultiSelectionModel<MarkDTO>> marksWrapper;
|
||||
private final TextBox name;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
@@ -42,7 +42,7 @@ public class GateCreationDialog extends DataEntryDialog<GateDTO> {
|
||||
}, /* animationEnabled */ false, callback);
|
||||
this.stringMessages = stringMessages;
|
||||
name = createTextBox("");
|
||||
marksWrapper = new MarkTableWrapper<MultiSelectionModel<MarkDTO>>(
|
||||
marksWrapper = new MarkTableWrapper<RefreshableMultiSelectionModel<MarkDTO>>(
|
||||
/* multiSelection */ true, sailingService, stringMessages, errorReporter);
|
||||
marksWrapper.getDataProvider().getList().addAll(marks);
|
||||
marksWrapper.getSelectionModel().addSelectionChangeHandler(new Handler() {
|
||||
|
||||
+4
-3
@@ -16,10 +16,11 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.MarkDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
|
||||
public class ItemToMapToDeviceSelectionPanel implements IsWidget {
|
||||
private final CompetitorTableWrapper<SingleSelectionModel<CompetitorDTO>> competitorTable;
|
||||
private final MarkTableWrapper<SingleSelectionModel<MarkDTO>> markTable;
|
||||
private final CompetitorTableWrapper<RefreshableSingleSelectionModel<CompetitorDTO>> competitorTable;
|
||||
private final MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>> markTable;
|
||||
private MappableToDevice selected;
|
||||
private final VerticalPanel mainPanel;
|
||||
private final ErrorReporter errorReporter;
|
||||
@@ -34,7 +35,7 @@ public class ItemToMapToDeviceSelectionPanel implements IsWidget {
|
||||
this.selected = selected;
|
||||
this.errorReporter = errorReporter;
|
||||
competitorTable = new CompetitorTableWrapper<>(sailingService, stringMessages, errorReporter, /* multiSelection */ false, /* enablePager */ true);
|
||||
markTable = new MarkTableWrapper<SingleSelectionModel<MarkDTO>>(/* multiSelection */ false, sailingService,
|
||||
markTable = new MarkTableWrapper<RefreshableSingleSelectionModel<MarkDTO>>(/* multiSelection */ false, sailingService,
|
||||
stringMessages, errorReporter);
|
||||
final SingleSelectionModel<MarkDTO> markSelectionModel = markTable.getSelectionModel();
|
||||
competitorTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
|
||||
+1
-2
@@ -6,7 +6,6 @@ import java.util.Comparator;
|
||||
import com.google.gwt.safehtml.shared.SafeHtml;
|
||||
import com.google.gwt.user.cellview.client.Column;
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.ColorColumn.ColorRetriever;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
@@ -17,7 +16,7 @@ import com.sap.sse.common.impl.RGBColor;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
|
||||
|
||||
public class MarkTableWrapper<S extends SelectionModel<MarkDTO>> extends TableWrapper<MarkDTO, S> {
|
||||
public class MarkTableWrapper<S extends RefreshableSelectionModel<MarkDTO>> extends TableWrapper<MarkDTO, S> {
|
||||
public MarkTableWrapper(boolean multiSelection, SailingServiceAsync sailingService, StringMessages stringMessages,
|
||||
ErrorReporter errorReporter) {
|
||||
super(sailingService, stringMessages, errorReporter, multiSelection, true, null /*EntityIdentityComparator for RefreshableSelectionModel*/);
|
||||
|
||||
+1
-6
@@ -9,7 +9,6 @@ import com.google.gwt.safehtml.shared.SafeHtml;
|
||||
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
|
||||
import com.google.gwt.user.cellview.client.Column;
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.AbstractLeaderboardConfigPanel.RaceColumnDTOAndFleetDTOWithNameBasedEquality;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.LeaderboardConfigPanel.AnchorCell;
|
||||
@@ -21,7 +20,7 @@ import com.sap.sse.common.util.NaturalComparator;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
|
||||
|
||||
public class RaceTableWrapper<S extends SelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>>
|
||||
public class RaceTableWrapper<S extends RefreshableSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>>
|
||||
extends TableWrapper<RaceColumnDTOAndFleetDTOWithNameBasedEquality, S> {
|
||||
private final AnchorTemplates ANCHORTEMPLATE = GWT.create(AnchorTemplates.class);
|
||||
private String selectedLeaderboardName;
|
||||
@@ -75,8 +74,4 @@ extends TableWrapper<RaceColumnDTOAndFleetDTOWithNameBasedEquality, S> {
|
||||
public void setSelectedLeaderboardName(String name) {
|
||||
this.selectedLeaderboardName = name;
|
||||
}
|
||||
|
||||
public RefreshableSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality> getRefreshableSelectionModel() {
|
||||
return (RefreshableSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>) super.getSelectionModel();
|
||||
}
|
||||
}
|
||||
-152
@@ -1,152 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.event.dom.client.ChangeEvent;
|
||||
import com.google.gwt.event.dom.client.ChangeHandler;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.event.dom.client.ClickHandler;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.FormPanel;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.ListBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.RaceDTO;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.RegattasDisplayer;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
|
||||
public class RacesListBoxPanel extends FormPanel implements RegattasDisplayer, RaceSelectionChangeListener {
|
||||
private final List<RaceDTO> raceList;
|
||||
private final ListBox raceListBox;
|
||||
private final RegattaRefresher regattaRefresher;
|
||||
private final StringMessages stringConstants;
|
||||
private final RaceSelectionProvider raceSelectionProvider;
|
||||
|
||||
public RacesListBoxPanel(RegattaRefresher regattaRefresher, RaceSelectionProvider raceSelectionProvider, StringMessages stringConstants) {
|
||||
this.regattaRefresher = regattaRefresher;
|
||||
this.stringConstants = stringConstants;
|
||||
this.raceSelectionProvider = raceSelectionProvider;
|
||||
raceListBox = new ListBox();
|
||||
raceListBox.addChangeHandler(new ChangeHandler() {
|
||||
@Override
|
||||
public void onChange(ChangeEvent event) {
|
||||
RacesListBoxPanel.this.raceSelectionProvider.setSelection(getSelectedRaceIdentifiers(), RacesListBoxPanel.this);
|
||||
}
|
||||
});
|
||||
raceListBox.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
RacesListBoxPanel.this.raceSelectionProvider.setSelection(getSelectedRaceIdentifiers(), RacesListBoxPanel.this);
|
||||
}
|
||||
});
|
||||
raceList = new ArrayList<RaceDTO>();
|
||||
VerticalPanel vp = new VerticalPanel();
|
||||
HorizontalPanel labelAndRefreshButton = new HorizontalPanel();
|
||||
labelAndRefreshButton.setSpacing(20);
|
||||
vp.add(labelAndRefreshButton);
|
||||
labelAndRefreshButton.add(new Label(stringConstants.races()));
|
||||
vp.add(raceListBox);
|
||||
Button btnRefresh = new Button(stringConstants.refresh());
|
||||
btnRefresh.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
RacesListBoxPanel.this.regattaRefresher.fillRegattas();
|
||||
}
|
||||
});
|
||||
labelAndRefreshButton.add(btnRefresh);
|
||||
setWidget(vp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillRegattas(Iterable<RegattaDTO> result) {
|
||||
raceList.clear();
|
||||
raceListBox.clear();
|
||||
for (RegattaDTO regatta : result) {
|
||||
for (RaceDTO race : regatta.races) {
|
||||
raceList.add(race);
|
||||
}
|
||||
}
|
||||
Collections.sort(raceList, new Comparator<RaceDTO>() {
|
||||
@Override
|
||||
public int compare(RaceDTO o1, RaceDTO o2) {
|
||||
String name1 = RacesListBoxPanel.this.toString(o1);
|
||||
String name2 = RacesListBoxPanel.this.toString(o2);
|
||||
return name1.compareTo(name2);
|
||||
}
|
||||
|
||||
});
|
||||
for (RaceDTO p : raceList) {
|
||||
raceListBox.addItem(toString(p));
|
||||
}
|
||||
raceSelectionProvider.setSelection(getSelectedRaceIdentifiers(), this);
|
||||
}
|
||||
|
||||
private List<RegattaAndRaceIdentifier> getSelectedRaceIdentifiers() {
|
||||
List<RegattaAndRaceIdentifier> result = new ArrayList<RegattaAndRaceIdentifier>();
|
||||
for (RaceDTO selectedRace : getSelectedRaces()) {
|
||||
result.add(selectedRace.getRaceIdentifier());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<RaceDTO> getSelectedRaces() {
|
||||
int i=0;
|
||||
List<RaceDTO> result = new ArrayList<RaceDTO>();
|
||||
for (RaceDTO triple : raceList) {
|
||||
if (raceListBox.isItemSelected(i)) {
|
||||
result.add(triple);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private String toString(RaceDTO race) {
|
||||
return race.getRegattaName()+" - "+race.getName()+(race.isTracked ? " ("+stringConstants.tracked()+")" : "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
if (selectedRaces != null && !selectedRaces.isEmpty()) {
|
||||
RaceDTO newSelection = getRace(selectedRaces.iterator().next());
|
||||
int index = raceList.indexOf(newSelection);
|
||||
if (index >= 0) {
|
||||
raceListBox.setSelectedIndex(index);
|
||||
} else {
|
||||
deselectAll();
|
||||
}
|
||||
} else {
|
||||
deselectAll();
|
||||
}
|
||||
}
|
||||
|
||||
private void deselectAll() {
|
||||
for (int i=0; i<raceListBox.getItemCount(); i++) {
|
||||
raceListBox.setItemSelected(i, false);
|
||||
}
|
||||
}
|
||||
|
||||
public List<RaceDTO> getAllRaces() {
|
||||
return Collections.unmodifiableList(raceList);
|
||||
}
|
||||
|
||||
public RaceDTO getRace(RaceIdentifier raceIdentifier) {
|
||||
for (RaceDTO race : getAllRaces()) {
|
||||
if (raceIdentifier.equals(race.getRaceIdentifier())) {
|
||||
return race;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
-1
@@ -29,7 +29,6 @@ public class RegattaLogTrackingDeviceMappingsDialog extends AbstractLogTrackingD
|
||||
@Override
|
||||
public void onSuccess(List<DeviceMappingDTO> result) {
|
||||
mappings = result;
|
||||
|
||||
updateChart();
|
||||
deviceMappingTable.refresh(mappings);
|
||||
}
|
||||
|
||||
+2
-3
@@ -8,13 +8,13 @@ import com.google.gwt.user.client.ui.IsWidget;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.shared.controls.SelectionCheckboxColumn;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
|
||||
/**
|
||||
@@ -22,8 +22,7 @@ import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
* offers already a {@link ListHandler} for sorting. Subclasses can obtain the table's default column sort handler
|
||||
* created by this class's constructor by calling {@link #getColumnSortHandler}.
|
||||
*/
|
||||
//TODO change <T, S extends SelectionModel<T>> to <T, S extents RefreshableSelectionModel<T>>
|
||||
public abstract class TableWrapper<T, S extends SelectionModel<T>> implements IsWidget {
|
||||
public abstract class TableWrapper<T, S extends RefreshableSelectionModel<T>> implements IsWidget {
|
||||
protected final CellTable<T> table;
|
||||
private final S selectionModel;
|
||||
protected final ListDataProvider<T> dataProvider;
|
||||
|
||||
+1
-1
@@ -154,7 +154,7 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite
|
||||
|
||||
@Override
|
||||
protected void makeControlsReactToSelectionChange(Set<RaceDTO> selectedRaces) {
|
||||
if(actionButtonsEnabled) {
|
||||
if (actionButtonsEnabled) {
|
||||
if (selectedRaces.isEmpty()) {
|
||||
btnRemoveRace.setEnabled(false);
|
||||
btnUntrack.setEnabled(false);
|
||||
|
||||
+3
-3
@@ -9,7 +9,6 @@ import com.google.gwt.user.client.ui.ListBox;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sailing.domain.common.PassingInstruction;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
@@ -17,10 +16,11 @@ import com.sap.sailing.gwt.ui.shared.ControlPointDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WaypointDTO;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
|
||||
public class WaypointCreationDialog extends DataEntryDialog<WaypointDTO> {
|
||||
private final ControlPointTableWrapper<SingleSelectionModel<ControlPointDTO>> controlPointsWrapper;
|
||||
private final ControlPointTableWrapper<RefreshableSingleSelectionModel<ControlPointDTO>> controlPointsWrapper;
|
||||
private final ListBox passingInstructions;
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
@@ -39,7 +39,7 @@ public class WaypointCreationDialog extends DataEntryDialog<WaypointDTO> {
|
||||
|
||||
}, /* animationEnabled */ false, callback);
|
||||
this.stringMessages = stringMessages;
|
||||
controlPointsWrapper = new ControlPointTableWrapper<SingleSelectionModel<ControlPointDTO>>(
|
||||
controlPointsWrapper = new ControlPointTableWrapper<RefreshableSingleSelectionModel<ControlPointDTO>>(
|
||||
/* multiSelection */ false, sailingService, stringMessages, errorReporter);
|
||||
controlPointsWrapper.getDataProvider().getList().addAll(controlPoints);
|
||||
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.adminconsole;
|
||||
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.ControlPointDTO;
|
||||
@@ -11,7 +10,7 @@ import com.sap.sailing.gwt.ui.shared.WaypointDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
|
||||
|
||||
public class WaypointTableWrapper<S extends SelectionModel<WaypointDTO>> extends TableWrapper<WaypointDTO, S> {
|
||||
public class WaypointTableWrapper<S extends RefreshableSelectionModel<WaypointDTO>> extends TableWrapper<WaypointDTO, S> {
|
||||
public WaypointTableWrapper(boolean multiSelection, SailingServiceAsync sailingService, final StringMessages stringMessages,
|
||||
ErrorReporter errorReporter) {
|
||||
super(sailingService, stringMessages, errorReporter, multiSelection, true, null /*EntityIdentityComparator for RefreshableSelectionModel*/);
|
||||
|
||||
+3
-3
@@ -217,10 +217,10 @@ public class CompetitorSelectionModel implements CompetitorSelectionProvider {
|
||||
|
||||
Set<CompetitorDTO> oldCompetitorsToRemove = new HashSet<CompetitorDTO>(allCompetitors);
|
||||
for (CompetitorDTO newCompetitor : newCompetitors) {
|
||||
if (allCompetitors.contains(newCompetitor)) {
|
||||
oldCompetitorsToRemove.remove(newCompetitor);
|
||||
if (allCompetitors.contains(newCompetitor)) { // TODO Lukas: should this use an EntityIdentityComparator instead?
|
||||
oldCompetitorsToRemove.remove(newCompetitor); // TODO Lukas: the old competitor object remains in allCompetitors; it is equal but doesn't have to be identical to newCompetitor; should it be replaced?
|
||||
} else {
|
||||
add(newCompetitor, false);
|
||||
add(newCompetitor, false); // due to the equals definition of CompetitorDTOImpl that compares most fields, state changes lead to a replacement here
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
|
||||
|
||||
/**
|
||||
* Allows UI components to observe a race selector, such as a drop-down box showing a list of races
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public interface RaceSelectionChangeListener {
|
||||
|
||||
/**
|
||||
* The first element is the first one selected
|
||||
*
|
||||
* @param selectedRaces a non-<code>null</code> list which is empty if nothing is selected
|
||||
*/
|
||||
void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces);
|
||||
|
||||
}
|
||||
-90
@@ -1,90 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
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.domain.common.RaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
|
||||
public class RaceSelectionModel implements RaceSelectionProvider {
|
||||
private final List<RegattaAndRaceIdentifier> selection;
|
||||
|
||||
private final List<RegattaAndRaceIdentifier> allRaces;
|
||||
|
||||
private final Set<RaceSelectionChangeListener> listeners;
|
||||
|
||||
public RaceSelectionModel() {
|
||||
this.selection = new ArrayList<RegattaAndRaceIdentifier>();
|
||||
this.allRaces = new ArrayList<RegattaAndRaceIdentifier>();
|
||||
listeners = new HashSet<RaceSelectionChangeListener>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RegattaAndRaceIdentifier> getSelectedRaces() {
|
||||
return Collections.unmodifiableList(selection);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRaceSelectionChangeListener(RaceSelectionChangeListener listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeRaceSelectionChangeListener(RaceSelectionChangeListener listener) {
|
||||
listeners.remove(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSelection(List<RegattaAndRaceIdentifier> newSelection, RaceSelectionChangeListener... listenersNotToNotify) {
|
||||
boolean notify = !selection.equals(newSelection);
|
||||
selection.clear();
|
||||
selection.addAll(newSelection);
|
||||
if (notify) {
|
||||
notifyListeners(listenersNotToNotify);
|
||||
}
|
||||
}
|
||||
|
||||
private void notifyListeners(RaceSelectionChangeListener[] listenersNotToNotify) {
|
||||
List<RegattaAndRaceIdentifier> selectedRaces = getSelectedRaces();
|
||||
for (RaceSelectionChangeListener listener : listeners) {
|
||||
if (listenersNotToNotify == null || !Arrays.asList(listenersNotToNotify).contains(listener)) {
|
||||
listener.onRaceSelectionChange(selectedRaces);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the universe of all races from which this selection model may select. An equal list will subsequently be
|
||||
* returned by {@link #getAllRaces()}. Races from the {@link #getSelectedRaces() selection} not in
|
||||
* <code>newAllRaces</code> are removed from the selection. If this happens, the selection listeners are notified.
|
||||
*/
|
||||
@Override
|
||||
public void setAllRaces(List<RegattaAndRaceIdentifier> newAllRaces, RaceSelectionChangeListener... listenersNotToNotify) {
|
||||
allRaces.clear();
|
||||
for (RegattaAndRaceIdentifier r : newAllRaces) {
|
||||
allRaces.add(r);
|
||||
}
|
||||
boolean notify = false;
|
||||
for (Iterator<RegattaAndRaceIdentifier> i=selection.iterator(); i.hasNext(); ) {
|
||||
RaceIdentifier selectedRace = i.next();
|
||||
if (!allRaces.contains(selectedRace)) {
|
||||
notify = true;
|
||||
i.remove();
|
||||
}
|
||||
}
|
||||
if (notify) {
|
||||
notifyListeners(listenersNotToNotify);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RegattaAndRaceIdentifier> getAllRaces() {
|
||||
return Collections.unmodifiableList(allRaces);
|
||||
}
|
||||
|
||||
}
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
|
||||
public interface RaceSelectionProvider {
|
||||
/**
|
||||
* @return a non-<code>null</code> list which may be empty
|
||||
*/
|
||||
List<RegattaAndRaceIdentifier> getSelectedRaces();
|
||||
|
||||
void addRaceSelectionChangeListener(RaceSelectionChangeListener listener);
|
||||
|
||||
void removeRaceSelectionChangeListener(RaceSelectionChangeListener listener);
|
||||
|
||||
void setSelection(List<RegattaAndRaceIdentifier> newSelection, RaceSelectionChangeListener... listenersNotToNotify);
|
||||
|
||||
/**
|
||||
* @return a non-<code>null</code> list which may be empty
|
||||
*/
|
||||
List<RegattaAndRaceIdentifier> getAllRaces();
|
||||
|
||||
void setAllRaces(List<RegattaAndRaceIdentifier> newAllRaces, RaceSelectionChangeListener... listenersNotToNotify);
|
||||
}
|
||||
+6
-12
@@ -15,7 +15,7 @@ import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
|
||||
|
||||
public class RaceTimePanel extends TimePanel<RaceTimePanelSettings> implements RaceSelectionChangeListener, RaceTimesInfoProviderListener {
|
||||
public class RaceTimePanel extends TimePanel<RaceTimePanelSettings> implements RaceTimesInfoProviderListener {
|
||||
private final RaceTimesInfoProvider raceTimesInfoProvider;
|
||||
|
||||
private RegattaAndRaceIdentifier selectedRace;
|
||||
@@ -30,11 +30,15 @@ public class RaceTimePanel extends TimePanel<RaceTimePanelSettings> implements R
|
||||
private boolean redrawAllMarkersPendingForMinMaxBeingInitialized;
|
||||
|
||||
public RaceTimePanel(Timer timer, TimeRangeWithZoomProvider timeRangeProvider, StringMessages stringMessages,
|
||||
RaceTimesInfoProvider raceTimesInfoProvider, boolean canReplayWhileLiveIsPossible) {
|
||||
RaceTimesInfoProvider raceTimesInfoProvider, boolean canReplayWhileLiveIsPossible, RegattaAndRaceIdentifier selectedRaceIdentifier) {
|
||||
super(timer, timeRangeProvider, stringMessages, canReplayWhileLiveIsPossible);
|
||||
this.raceTimesInfoProvider = raceTimesInfoProvider;
|
||||
selectedRace = null;
|
||||
autoAdjustPlayMode = true;
|
||||
selectedRace = selectedRaceIdentifier;
|
||||
if (!raceTimesInfoProvider.containsRaceIdentifier(selectedRace)) {
|
||||
raceTimesInfoProvider.addRaceIdentifier(selectedRace, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -148,16 +152,6 @@ public class RaceTimePanel extends TimePanel<RaceTimePanelSettings> implements R
|
||||
(lastRaceTimesInfo.startOfRace != null && liveTimePointInMillis > lastRaceTimesInfo.startOfRace.getTime() - timeBeforeRaceStartTolerance));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
if (selectedRaces != null && !selectedRaces.isEmpty()) {
|
||||
selectedRace = selectedRaces.iterator().next();
|
||||
if (!raceTimesInfoProvider.containsRaceIdentifier(selectedRace)) {
|
||||
raceTimesInfoProvider.addRaceIdentifier(selectedRace, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playStateChanged(PlayStates playState, PlayModes playMode) {
|
||||
super.playStateChanged(playState, playMode);
|
||||
|
||||
-159
@@ -1,159 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.FormPanel;
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.WindSourceType;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindInfoForRaceDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.player.TimeListener;
|
||||
|
||||
/**
|
||||
* Displays a bit of wind history around the time notified to this time listener.
|
||||
*
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public class SmallWindHistoryPanel extends FormPanel implements TimeListener, RaceSelectionChangeListener {
|
||||
private final Position position;
|
||||
private final WindIndicator[] windIndicators;
|
||||
private final Label selectedWindSourceLabel;
|
||||
private Date date;
|
||||
private RegattaAndRaceIdentifier race;
|
||||
private final SailingServiceAsync sailingService;
|
||||
private final long millisecondStepsPerLabel;
|
||||
private final ErrorReporter errorReporter;
|
||||
private final StringMessages stringConstants;
|
||||
|
||||
/**
|
||||
* @param position
|
||||
* the position to show the wind for; can, e.g., be the middle of the race course if an average wind
|
||||
* display for a race is desired
|
||||
* @param numberOfTimepoints
|
||||
* the number of wind displays arranged in this panel; each display shows the estimated wind
|
||||
* @param windTrack
|
||||
* the wind track to visualize using this panel
|
||||
*/
|
||||
public SmallWindHistoryPanel(SailingServiceAsync sailingService, Position position,
|
||||
int numberOfTimepoints, long millisecondStepsPerLabel, StringMessages stringConstants, ErrorReporter errorReporter) {
|
||||
this.sailingService = sailingService;
|
||||
this.position = position;
|
||||
this.stringConstants = stringConstants;
|
||||
this.millisecondStepsPerLabel = millisecondStepsPerLabel;
|
||||
this.errorReporter = errorReporter;
|
||||
windIndicators = new WindIndicator[numberOfTimepoints];
|
||||
VerticalPanel vp = new VerticalPanel();
|
||||
setWidget(vp);
|
||||
Grid grid = new Grid(2, numberOfTimepoints);
|
||||
selectedWindSourceLabel = new Label();
|
||||
vp.add(selectedWindSourceLabel);
|
||||
for (int i=0; i<numberOfTimepoints; i++) {
|
||||
windIndicators[i] = new WindIndicator();
|
||||
grid.setWidget(0, i, new Label("t-"+((numberOfTimepoints-i-1)*millisecondStepsPerLabel/1000)+"s"));
|
||||
grid.setWidget(1, i, windIndicators[i]);
|
||||
}
|
||||
vp.add(grid);
|
||||
}
|
||||
|
||||
private void updateWindDisplay() {
|
||||
if (date != null) {
|
||||
Date from = new Date(date.getTime() - windIndicators.length * millisecondStepsPerLabel);
|
||||
if (race != null) {
|
||||
sailingService.getAveragedWindInfo(race, from, millisecondStepsPerLabel,
|
||||
windIndicators.length, position.getLatDeg(), position.getLngDeg(), /* all sources */ null,
|
||||
new AsyncCallback<WindInfoForRaceDTO>() {
|
||||
@Override
|
||||
public void onSuccess(WindInfoForRaceDTO result) {
|
||||
if (result != null) {
|
||||
WindSource bestWindSource = getBestWindSource(result, windIndicators.length);
|
||||
// expecting to find windIndicators.length fixes
|
||||
if (result == null
|
||||
|| result.windTrackInfoByWindSource.get(bestWindSource).windFixes.size() != windIndicators.length) {
|
||||
clearWindDisplay();
|
||||
} else {
|
||||
setSelectedWindSource(bestWindSource);
|
||||
int i = 0;
|
||||
for (WindDTO fix : result.windTrackInfoByWindSource.get(bestWindSource).windFixes) {
|
||||
updateWindIndicator(i, fix);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error trying to obtain wind information for race "
|
||||
+ race + ": " + caught.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks for the best wind source in <code>windInfo</code> that has <code>length</code> fixes. Uses the order of
|
||||
* literals of {@link WindSourceType} to determine precedence.
|
||||
*
|
||||
* @return <code>null</code> if no wind source has the expected number of fixes; the best wind source with the
|
||||
* expected number of fixes otherwise
|
||||
*/
|
||||
private WindSource getBestWindSource(WindInfoForRaceDTO windInfo, int expectedNumberOfFixes) {
|
||||
List<WindSourceType> windSourceTypesInOrder = Arrays.asList(WindSourceType.values());
|
||||
WindSource result = null;
|
||||
int bestIndexSoFar = Integer.MAX_VALUE;
|
||||
for (Map.Entry<WindSource, WindTrackInfoDTO> e : windInfo.windTrackInfoByWindSource.entrySet()) {
|
||||
if (e.getValue().windFixes.size() == expectedNumberOfFixes) {
|
||||
int index = windSourceTypesInOrder.indexOf(e.getKey());
|
||||
if (index < bestIndexSoFar) {
|
||||
bestIndexSoFar = index;
|
||||
result = e.getKey();
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void clearWindDisplay() {
|
||||
for (int i=0; i<windIndicators.length; i++) {
|
||||
windIndicators[i].setFromDeg(0);
|
||||
windIndicators[i].setSpeedInKnots(0.0);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateWindIndicator(int i, WindDTO fix) {
|
||||
windIndicators[i].setFromDeg(fix.dampenedTrueWindFromDeg);
|
||||
windIndicators[i].setSpeedInKnots(fix.dampenedTrueWindSpeedInKnots);
|
||||
}
|
||||
|
||||
private void setSelectedWindSource(WindSource selectedWindSource) {
|
||||
selectedWindSourceLabel.setText(stringConstants.windSource()+": "+selectedWindSource.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void timeChanged(Date newTime, Date oldTime) {
|
||||
this.date = newTime;
|
||||
updateWindDisplay();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
if (!selectedRaces.isEmpty()) {
|
||||
race = selectedRaces.get(selectedRaces.size() - 1);
|
||||
updateWindDisplay();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+8
-20
@@ -45,7 +45,6 @@ import com.sap.sailing.gwt.ui.actions.GetCompetitorsRaceDataAction;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorRaceDataDTO;
|
||||
@@ -94,16 +93,16 @@ public abstract class AbstractCompetitorRaceChart<SettingsType extends ChartSett
|
||||
private Long timeOfLatestRequestInMillis;
|
||||
|
||||
protected AbstractCompetitorRaceChart(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, RaceSelectionProvider raceSelectionProvider,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, RegattaAndRaceIdentifier selectedRaceIdentifier,
|
||||
Timer timer, TimeRangeWithZoomProvider timeRangeWithZoomProvider, Button settingsButton,
|
||||
final StringMessages stringMessages, ErrorReporter errorReporter, DetailType detailType, boolean compactChart, boolean allowTimeAdjust) {
|
||||
this(sailingService, asyncActionsExecutor, competitorSelectionProvider, raceSelectionProvider, timer,
|
||||
this(sailingService, asyncActionsExecutor, competitorSelectionProvider, selectedRaceIdentifier, timer,
|
||||
timeRangeWithZoomProvider, stringMessages, errorReporter, detailType, compactChart, allowTimeAdjust,
|
||||
null, null);
|
||||
}
|
||||
|
||||
AbstractCompetitorRaceChart(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, RaceSelectionProvider raceSelectionProvider,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, RegattaAndRaceIdentifier selectedRaceIdentifier,
|
||||
Timer timer, TimeRangeWithZoomProvider timeRangeWithZoomProvider, final StringMessages stringMessages,
|
||||
ErrorReporter errorReporter, DetailType detailType, boolean compactChart, boolean allowTimeAdjust,
|
||||
String leaderboardGroupName, String leaderboardName) {
|
||||
@@ -124,9 +123,12 @@ public abstract class AbstractCompetitorRaceChart<SettingsType extends ChartSett
|
||||
noDataFoundLabel.setStyleName("abstractChartPanel-importantMessageOfChart");
|
||||
createChart();
|
||||
setSelectedDetailType(detailType);
|
||||
|
||||
competitorSelectionProvider.addCompetitorSelectionChangeListener(this);
|
||||
raceSelectionProvider.addRaceSelectionChangeListener(this);
|
||||
this.selectedRaceIdentifier = selectedRaceIdentifier;
|
||||
clearChart();
|
||||
if (selectedRaceIdentifier != null) {
|
||||
timeChanged(timer.getTime(), null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -550,20 +552,6 @@ public abstract class AbstractCompetitorRaceChart<SettingsType extends ChartSett
|
||||
return hasReversedYAxis(selectedDetailType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
if (selectedRaces != null && !selectedRaces.isEmpty()) {
|
||||
selectedRaceIdentifier = selectedRaces.iterator().next();
|
||||
} else {
|
||||
selectedRaceIdentifier = null;
|
||||
}
|
||||
|
||||
clearChart();
|
||||
if (selectedRaceIdentifier != null) {
|
||||
timeChanged(timer.getTime(), null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the relation of the mark passings to the selection range.
|
||||
*
|
||||
|
||||
+1
-3
@@ -18,7 +18,6 @@ import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.SimplePanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.ChartCssResources.ChartsCss;
|
||||
@@ -33,8 +32,7 @@ import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
|
||||
|
||||
public abstract class AbstractRaceChart extends AbsolutePanel implements RaceSelectionChangeListener,
|
||||
TimeListener, TimeZoomChangeListener, TimeRangeChangeListener {
|
||||
public abstract class AbstractRaceChart extends AbsolutePanel implements TimeListener, TimeZoomChangeListener, TimeRangeChangeListener {
|
||||
/**
|
||||
* Used as the turboThreshold for the Highcharts series; this is basically the maximum number of points in a series
|
||||
* to be displayed. Default is 1000. See also bug 1742.
|
||||
|
||||
+2
-9
@@ -32,7 +32,6 @@ import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceCourseDTO;
|
||||
@@ -47,8 +46,7 @@ import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.shared.components.Component;
|
||||
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
|
||||
|
||||
public class EditMarkPassingsPanel extends AbsolutePanel implements Component<AbstractSettings>, RaceSelectionChangeListener,
|
||||
CompetitorSelectionChangeListener {
|
||||
public class EditMarkPassingsPanel extends AbsolutePanel implements Component<AbstractSettings>, CompetitorSelectionChangeListener {
|
||||
private static class AnchorCell extends AbstractCell<SafeHtml> {
|
||||
@Override
|
||||
public void render(com.google.gwt.cell.client.Cell.Context context, SafeHtml safeHtml, SafeHtmlBuilder sb) {
|
||||
@@ -259,6 +257,7 @@ public class EditMarkPassingsPanel extends AbsolutePanel implements Component<Ab
|
||||
buttonPanel.add(removeSuppressedPassingButton);
|
||||
buttonPanel.add(selectCompetitorLabel);
|
||||
enableButtons();
|
||||
refreshWaypoints();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -383,12 +382,6 @@ public class EditMarkPassingsPanel extends AbsolutePanel implements Component<Ab
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
raceIdentifier = selectedRaces.iterator().next();
|
||||
refreshWaypoints();
|
||||
}
|
||||
|
||||
public void setLeaderboard(LeaderboardDTO leaderboard) {
|
||||
this.leaderboard = leaderboard;
|
||||
}
|
||||
|
||||
+3
-3
@@ -3,8 +3,8 @@ package com.sap.sailing.gwt.ui.client.shared.charts;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
@@ -33,11 +33,11 @@ public class MultiCompetitorRaceChart extends AbstractCompetitorRaceChart<MultiC
|
||||
private boolean hasOverallLeaderboard;
|
||||
|
||||
public MultiCompetitorRaceChart(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, RaceSelectionProvider raceSelectionProvider,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, RegattaAndRaceIdentifier selectedRaceIdentifier,
|
||||
Timer timer, TimeRangeWithZoomProvider timeRangeWithZoomProvider, final StringMessages stringMessages,
|
||||
final ErrorReporter errorReporter, boolean compactChart, boolean allowTimeAdjust,
|
||||
final String leaderboardGroupName, String leaderboardName) {
|
||||
super(sailingService, asyncActionsExecutor, competitorSelectionProvider, raceSelectionProvider, timer, timeRangeWithZoomProvider, stringMessages, errorReporter,
|
||||
super(sailingService, asyncActionsExecutor, competitorSelectionProvider, selectedRaceIdentifier, timer, timeRangeWithZoomProvider, stringMessages, errorReporter,
|
||||
/*show initially*/ DetailType.WINDWARD_DISTANCE_TO_COMPETITOR_FARTHEST_AHEAD, compactChart, allowTimeAdjust, leaderboardGroupName, leaderboardName);
|
||||
if (leaderboardGroupName != null) {
|
||||
sailingService.getLeaderboardGroupByName(leaderboardGroupName, false,
|
||||
|
||||
+11
-22
@@ -44,8 +44,6 @@ import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.impl.ColorMapImpl;
|
||||
import com.sap.sailing.gwt.ui.actions.GetWindInfoAction;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.WindSourceTypeFormatter;
|
||||
@@ -84,14 +82,14 @@ public class WindChart extends AbstractRaceChart implements Component<WindChartS
|
||||
private final ColorMapImpl<WindSource> colorMap;
|
||||
|
||||
/**
|
||||
* @param raceSelectionProvider
|
||||
* @param selectedRaceIdentifier
|
||||
* if <code>null</code>, this chart won't update its contents automatically upon race selection change;
|
||||
* otherwise, whenever the selection changes, the wind data of the race selected now is loaded from the
|
||||
* server and displayed in this chart. If no race is selected, the chart is cleared. The caller of this
|
||||
* constructor must ensure to trigger {@link RaceSelectionChangeListener#onRaceSelectionChange(List)} at
|
||||
* least once to ensure that this chart sets its {@link AbstractRaceChart#selectedRaceIdentifier} field.
|
||||
*/
|
||||
public WindChart(SailingServiceAsync sailingService, RaceSelectionProvider raceSelectionProvider, Timer timer,
|
||||
public WindChart(SailingServiceAsync sailingService, RegattaAndRaceIdentifier selectedRaceIdentifier, Timer timer,
|
||||
TimeRangeWithZoomProvider timeRangeWithZoomProvider, WindChartSettings settings, final StringMessages stringMessages,
|
||||
AsyncActionsExecutor asyncActionsExecutor, ErrorReporter errorReporter, boolean compactChart) {
|
||||
super(sailingService, timer, timeRangeWithZoomProvider, stringMessages, asyncActionsExecutor, errorReporter);
|
||||
@@ -190,7 +188,15 @@ public class WindChart extends AbstractRaceChart implements Component<WindChartS
|
||||
.getXAxis().setAxisTitle(null);
|
||||
}
|
||||
setSize("100%", "100%");
|
||||
raceSelectionProvider.addRaceSelectionChangeListener(this);
|
||||
this.selectedRaceIdentifier = selectedRaceIdentifier;
|
||||
if (selectedRaceIdentifier != null) {
|
||||
clearCacheAndReload();
|
||||
if (isVisible()) {
|
||||
updateVisibleSeries();
|
||||
}
|
||||
} else {
|
||||
clearChart();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -497,23 +503,6 @@ public class WindChart extends AbstractRaceChart implements Component<WindChartS
|
||||
chart.removeAllSeries();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
if (selectedRaces != null && !selectedRaces.isEmpty()) {
|
||||
selectedRaceIdentifier = selectedRaces.iterator().next();
|
||||
} else {
|
||||
selectedRaceIdentifier = null;
|
||||
}
|
||||
|
||||
if(selectedRaceIdentifier != null) {
|
||||
clearCacheAndReload();
|
||||
if(isVisible())
|
||||
updateVisibleSeries();
|
||||
} else {
|
||||
clearChart();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If in live mode, fetches what's missing since the last fix and <code>date</code>. If nothing has been loaded yet,
|
||||
* loads from the beginning up to <code>date</code>. If in replay mode, checks if anything has been loaded at all. If not,
|
||||
|
||||
+5
-4
@@ -52,7 +52,7 @@ public abstract class SelectionCheckboxColumn<T> extends AbstractSortableColumnW
|
||||
private final RefreshableMultiSelectionModel<T> selectionModel;
|
||||
|
||||
/**
|
||||
* @param selectionmodel
|
||||
* @param selectionModel
|
||||
* {@link RefreshableSelectionModel} to set an already existing selectionmodel for the
|
||||
* {@link SelectionCheckboxColumn}
|
||||
* @param selectedCheckboxCSSClass
|
||||
@@ -62,9 +62,10 @@ public abstract class SelectionCheckboxColumn<T> extends AbstractSortableColumnW
|
||||
* @param checkboxColumnCellCSSClass
|
||||
* CSS class for the <code><td></code> element rendering the cell
|
||||
*/
|
||||
protected SelectionCheckboxColumn(RefreshableMultiSelectionModel<T> selectionmodel, String selectedCheckboxCSSClass,
|
||||
// TODO Lukas: test whether using an arbitrary selection model here that does not trigger the redrawRow method displays the checkbox correctly when the selection is changed programmatically; is this required at all, or could the client grab the selection model from this column instead?
|
||||
protected SelectionCheckboxColumn(RefreshableMultiSelectionModel<T> selectionModel, String selectedCheckboxCSSClass,
|
||||
String deselectedCheckboxCSSClass, String checkboxColumnCellCSSClass) {
|
||||
this(selectionmodel, new BetterCheckboxCell(selectedCheckboxCSSClass, deselectedCheckboxCSSClass), checkboxColumnCellCSSClass);
|
||||
this(selectionModel, new BetterCheckboxCell(selectedCheckboxCSSClass, deselectedCheckboxCSSClass), checkboxColumnCellCSSClass);
|
||||
}
|
||||
/**
|
||||
* @param selectedCheckboxCSSClass
|
||||
@@ -82,6 +83,7 @@ public abstract class SelectionCheckboxColumn<T> extends AbstractSortableColumnW
|
||||
entityIdentityComparator);
|
||||
}
|
||||
|
||||
// TODO Lukas: test whether using an arbitrary selection model here that does not trigger the redrawRow method displays the checkbox correctly when the selection is changed programmatically; is this required at all, or could the client grab the selection model from this column instead?
|
||||
private SelectionCheckboxColumn(RefreshableMultiSelectionModel<T> selectionModel, BetterCheckboxCell checkboxCell, String checkboxColumnCellCSSClass) {
|
||||
super(checkboxCell, SortingOrder.DESCENDING);
|
||||
this.cell = checkboxCell;
|
||||
@@ -143,7 +145,6 @@ public abstract class SelectionCheckboxColumn<T> extends AbstractSortableColumnW
|
||||
redrawRow(item, getListDataProvider().getList());
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
+8
-16
@@ -90,7 +90,6 @@ import com.sap.sailing.gwt.ui.client.ClientResources;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.NumberFormatterFactory;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
|
||||
import com.sap.sailing.gwt.ui.client.RequiresDataInitialization;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -137,7 +136,7 @@ import com.sap.sse.gwt.client.shared.components.Component;
|
||||
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
|
||||
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
|
||||
|
||||
public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSelectionChangeListener, RaceSelectionChangeListener,
|
||||
public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSelectionChangeListener,
|
||||
RaceTimesInfoProviderListener, TailFactory, Component<RaceMapSettings>, RequiresDataInitialization, RequiresResize, QuickRankProvider {
|
||||
public static final String GET_RACE_MAP_DATA_CATEGORY = "getRaceMapData";
|
||||
public static final String GET_WIND_DATA_CATEGORY = "getWindData";
|
||||
@@ -286,8 +285,6 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
||||
|
||||
private final CompetitorSelectionProvider competitorSelection;
|
||||
|
||||
private List<RegattaAndRaceIdentifier> selectedRaces;
|
||||
|
||||
/**
|
||||
* Used to check if the first initial zoom to the mark markers was already done.
|
||||
*/
|
||||
@@ -441,6 +438,8 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
||||
trueNorthIndicatorPanel = new TrueNorthIndicatorPanel(this, raceMapImageManager, combinedWindPanelStyle, stringMessages, coordinateSystem);
|
||||
trueNorthIndicatorPanel.setVisible(true);
|
||||
orientationChangeInProgress = false;
|
||||
mapFirstZoomDone = false;
|
||||
// TODO bug 494: reset zoom settings to user preferences
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -735,17 +734,10 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
||||
return panelForRightHeaderLabels;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
mapFirstZoomDone = false;
|
||||
// TODO bug 494: reset zoom settings to user preferences
|
||||
this.selectedRaces = selectedRaces;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void raceTimesInfosReceived(Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfos, long clientTimeWhenRequestWasSent, Date serverTimeDuringRequest, long clientTimeWhenResponseWasReceived) {
|
||||
timer.adjustClientServerOffset(clientTimeWhenRequestWasSent, serverTimeDuringRequest, clientTimeWhenResponseWasReceived);
|
||||
this.lastRaceTimesInfo = raceTimesInfos.get(selectedRaces.get(0));
|
||||
this.lastRaceTimesInfo = raceTimesInfos.get(raceIdentifier);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -761,8 +753,8 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
||||
@Override
|
||||
public void timeChanged(final Date newTime, final Date oldTime) {
|
||||
if (newTime != null && isMapInitialized) {
|
||||
if (selectedRaces != null && !selectedRaces.isEmpty()) {
|
||||
RegattaAndRaceIdentifier race = selectedRaces.get(selectedRaces.size() - 1);
|
||||
if (raceIdentifier != null) {
|
||||
RegattaAndRaceIdentifier race = raceIdentifier;
|
||||
final Iterable<CompetitorDTO> competitorsToShow = getCompetitorsToShow();
|
||||
|
||||
if (race != null) {
|
||||
@@ -1941,8 +1933,8 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
||||
vPanel.add(createInfoWindowLabelAndValue(stringMessages.degreesBoatToTheWind(),
|
||||
(int) Math.abs(lastFix.degreesBoatToTheWind) + " " + stringMessages.degreesShort()));
|
||||
}
|
||||
if (!selectedRaces.isEmpty()) {
|
||||
RegattaAndRaceIdentifier race = selectedRaces.get(selectedRaces.size() - 1);
|
||||
if (raceIdentifier != null) {
|
||||
RegattaAndRaceIdentifier race = raceIdentifier;
|
||||
if (race != null) {
|
||||
Map<CompetitorDTO, Date> from = new HashMap<CompetitorDTO, Date>();
|
||||
from.put(competitorDTO, fixesAndTails.getFixes(competitorDTO).get(fixesAndTails.getFirstShownFix(competitorDTO)).timepoint);
|
||||
|
||||
+1
-9
@@ -2,9 +2,7 @@
|
||||
package com.sap.sailing.gwt.ui.raceboard;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -29,7 +27,6 @@ import com.sap.sailing.gwt.ui.client.CompetitorColorProviderImpl;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.TimePanel;
|
||||
import com.sap.sailing.gwt.ui.client.TimePanelSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.charts.WindChart;
|
||||
@@ -141,9 +138,6 @@ public class EmbeddedMapAndWindChartEntryPoint extends AbstractSailingEntryPoint
|
||||
title.append(fleetName);
|
||||
}
|
||||
Window.setTitle(title.toString());
|
||||
final RaceSelectionModel raceSelectionModel = new RaceSelectionModel();
|
||||
final List<RegattaAndRaceIdentifier> raceList = Collections.singletonList(selectedRaceIdentifier);
|
||||
raceSelectionModel.setSelection(raceList);
|
||||
final long refreshInterval = Duration.ONE_SECOND.times(3).asMillis();
|
||||
final Timer timer = new Timer(play ? PlayModes.Live : PlayModes.Replay);
|
||||
AsyncActionsExecutor asyncActionsExecutor = new AsyncActionsExecutor();
|
||||
@@ -187,14 +181,12 @@ public class EmbeddedMapAndWindChartEntryPoint extends AbstractSailingEntryPoint
|
||||
}
|
||||
mapSettings.setWindUp(windUp);
|
||||
raceMap.updateSettings(mapSettings);
|
||||
raceMap.onRaceSelectionChange(raceList);
|
||||
final WindChart windChart;
|
||||
if (showWindChart) {
|
||||
windChart = new WindChart(sailingService, raceSelectionModel, timer,
|
||||
windChart = new WindChart(sailingService, selectedRaceIdentifier, timer,
|
||||
timeRangeWithZoomProvider, new WindChartSettings(), getStringMessages(),
|
||||
asyncActionsExecutor, /* errorReporter */
|
||||
EmbeddedMapAndWindChartEntryPoint.this, /* compactChart */ true);
|
||||
windChart.onRaceSelectionChange(raceList);
|
||||
} else {
|
||||
windChart = null;
|
||||
}
|
||||
|
||||
+3
-8
@@ -2,7 +2,6 @@
|
||||
package com.sap.sailing.gwt.ui.raceboard;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
@@ -17,12 +16,10 @@ import com.google.gwt.user.client.ui.DockLayoutPanel;
|
||||
import com.google.gwt.user.client.ui.FlowPanel;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.RootLayoutPanel;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.client.AbstractSailingEntryPoint;
|
||||
import com.sap.sailing.gwt.ui.client.LogoAndTitlePanel;
|
||||
import com.sap.sailing.gwt.ui.client.MediaService;
|
||||
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceWithCompetitorsDTO;
|
||||
@@ -140,14 +137,12 @@ public class RaceBoardEntryPoint extends AbstractSailingEntryPoint {
|
||||
}
|
||||
selectedRace = raceboardData.getRace();
|
||||
Window.setTitle(selectedRace.getName());
|
||||
RaceSelectionModel raceSelectionModel = new RaceSelectionModel();
|
||||
List<RegattaAndRaceIdentifier> singletonList = Collections.singletonList(selectedRace.getRaceIdentifier());
|
||||
raceSelectionModel.setSelection(singletonList);
|
||||
Timer timer = new Timer(PlayModes.Replay, 1000l);
|
||||
AsyncActionsExecutor asyncActionsExecutor = new AsyncActionsExecutor();
|
||||
RaceTimesInfoProvider raceTimesInfoProvider = new RaceTimesInfoProvider(sailingService, asyncActionsExecutor, this, singletonList, 5000l /* requestInterval*/);
|
||||
RaceTimesInfoProvider raceTimesInfoProvider = new RaceTimesInfoProvider(sailingService, asyncActionsExecutor, this,
|
||||
Collections.singletonList(selectedRace.getRaceIdentifier()), 5000l /* requestInterval*/);
|
||||
RaceBoardPanel raceBoardPanel = new RaceBoardPanel(sailingService, mediaService, getUserService(), asyncActionsExecutor,
|
||||
raceboardData.getCompetitorAndTheirBoats(), timer, raceSelectionModel, leaderboardName, leaderboardGroupName, eventId,
|
||||
raceboardData.getCompetitorAndTheirBoats(), timer, selectedRace.getRaceIdentifier(), leaderboardName, leaderboardGroupName, eventId,
|
||||
raceboardViewConfig, RaceBoardEntryPoint.this, getStringMessages(), userAgent, raceTimesInfoProvider, showMapControls);
|
||||
|
||||
createRaceBoardInOneScreenMode(raceBoardPanel, raceboardViewConfig);
|
||||
|
||||
+6
-21
@@ -1,7 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.raceboard;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -36,8 +35,6 @@ import com.sap.sailing.gwt.ui.client.EntryPointLinkFactory;
|
||||
import com.sap.sailing.gwt.ui.client.GlobalNavigationPanel;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
|
||||
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimePanel;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -79,7 +76,7 @@ import com.sap.sse.security.ui.client.UserService;
|
||||
* @author Frank Mittag, Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeListener, LeaderboardUpdateListener, PopupPositionProvider {
|
||||
public class RaceBoardPanel extends SimplePanel implements LeaderboardUpdateListener, PopupPositionProvider {
|
||||
private final SailingServiceAsync sailingService;
|
||||
private final MediaServiceAsync mediaService;
|
||||
private final UUID eventId;
|
||||
@@ -91,7 +88,6 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
|
||||
private final List<ComponentViewer> componentViewers;
|
||||
private RaceTimePanel timePanel;
|
||||
private final Timer timer;
|
||||
private final RaceSelectionProvider raceSelectionProvider;
|
||||
private final UserAgentDetails userAgent;
|
||||
private final CompetitorSelectionProvider competitorSelectionProvider;
|
||||
private final TimeRangeWithZoomModel timeRangeWithZoomModel;
|
||||
@@ -126,7 +122,7 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
|
||||
*/
|
||||
public RaceBoardPanel(SailingServiceAsync sailingService, MediaServiceAsync mediaService,
|
||||
UserService userService, AsyncActionsExecutor asyncActionsExecutor, Map<CompetitorDTO, BoatDTO> competitorsAndTheirBoats,
|
||||
Timer timer, RaceSelectionProvider theRaceSelectionProvider, String leaderboardName,
|
||||
Timer timer, RegattaAndRaceIdentifier selectedRaceIdentifier, String leaderboardName,
|
||||
String leaderboardGroupName, UUID eventId, RaceBoardViewConfiguration raceboardViewConfiguration,
|
||||
ErrorReporter errorReporter, final StringMessages stringMessages,
|
||||
UserAgentDetails userAgent, RaceTimesInfoProvider raceTimesInfoProvider, boolean showMapControls) {
|
||||
@@ -134,7 +130,6 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
|
||||
this.mediaService = mediaService;
|
||||
this.stringMessages = stringMessages;
|
||||
this.raceboardViewConfiguration = raceboardViewConfiguration;
|
||||
this.raceSelectionProvider = theRaceSelectionProvider;
|
||||
this.raceTimesInfoProvider = raceTimesInfoProvider;
|
||||
this.errorReporter = errorReporter;
|
||||
this.userAgent = userAgent;
|
||||
@@ -142,8 +137,7 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
|
||||
this.eventId = eventId;
|
||||
this.currentRaceHasBeenSelectedOnce = false;
|
||||
this.leaderboardName = leaderboardName;
|
||||
raceSelectionProvider.addRaceSelectionChangeListener(this);
|
||||
selectedRaceIdentifier = raceSelectionProvider.getSelectedRaces().iterator().next();
|
||||
this.selectedRaceIdentifier = selectedRaceIdentifier;
|
||||
this.setRaceBoardName(selectedRaceIdentifier.getRaceName());
|
||||
this.asyncActionsExecutor = asyncActionsExecutor;
|
||||
FlowPanel mainPanel = new FlowPanel();
|
||||
@@ -190,11 +184,9 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
|
||||
}
|
||||
}
|
||||
timePanel = new RaceTimePanel(timer, timeRangeWithZoomModel, stringMessages, raceTimesInfoProvider,
|
||||
raceboardViewConfiguration.isCanReplayDuringLiveRaces());
|
||||
raceboardViewConfiguration.isCanReplayDuringLiveRaces(), selectedRaceIdentifier);
|
||||
timeRangeWithZoomModel.addTimeZoomChangeListener(timePanel);
|
||||
raceTimesInfoProvider.addRaceTimesInfoProviderListener(timePanel);
|
||||
raceSelectionProvider.addRaceSelectionChangeListener(timePanel);
|
||||
timePanel.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -205,18 +197,15 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
|
||||
boolean showMapControls, RaceMap raceMap, UserService userService) {
|
||||
// create the default leaderboard and select the right race
|
||||
raceTimesInfoProvider.addRaceTimesInfoProviderListener(raceMap);
|
||||
raceMap.onRaceSelectionChange(Collections.singletonList(selectedRaceIdentifier));
|
||||
List<Component<?>> components = new ArrayList<Component<?>>();
|
||||
competitorChart = new MultiCompetitorRaceChart(sailingService, asyncActionsExecutor, competitorSelectionProvider, raceSelectionProvider,
|
||||
competitorChart = new MultiCompetitorRaceChart(sailingService, asyncActionsExecutor, competitorSelectionProvider, selectedRaceIdentifier,
|
||||
timer, timeRangeWithZoomModel, stringMessages, errorReporter, true, true, leaderboardGroupName, leaderboardName);
|
||||
competitorChart.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
|
||||
competitorChart.getEntryWidget().setTitle(stringMessages.competitorCharts());
|
||||
competitorChart.setVisible(false);
|
||||
components.add(competitorChart);
|
||||
windChart = new WindChart(sailingService, raceSelectionProvider, timer, timeRangeWithZoomModel, new WindChartSettings(),
|
||||
windChart = new WindChart(sailingService, selectedRaceIdentifier, timer, timeRangeWithZoomModel, new WindChartSettings(),
|
||||
stringMessages, asyncActionsExecutor, errorReporter, /* compactChart */ true);
|
||||
windChart.setVisible(false);
|
||||
windChart.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
|
||||
windChart.getEntryWidget().setTitle(stringMessages.windChart());
|
||||
components.add(windChart);
|
||||
editMarkPassingPanel = new EditMarkPassingsPanel(sailingService, selectedRaceIdentifier,
|
||||
@@ -334,10 +323,6 @@ public class RaceBoardPanel extends SimplePanel implements RaceSelectionChangeLi
|
||||
return errorReporter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRaceSelectionChange(List<RegattaAndRaceIdentifier> selectedRaces) {
|
||||
}
|
||||
|
||||
public RaceBoardViewConfiguration getConfiguration() {
|
||||
return raceboardViewConfiguration;
|
||||
}
|
||||
|
||||
+13
@@ -6,6 +6,11 @@ import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.ProvidesKey;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
|
||||
/**
|
||||
* TODO Lukas: Add Javadoc
|
||||
*
|
||||
* @param <T>
|
||||
*/
|
||||
public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T> implements RefreshableSelectionModel<T> {
|
||||
private final EntityIdentityComparator<T> comp;
|
||||
|
||||
@@ -14,11 +19,19 @@ public class RefreshableMultiSelectionModel<T> extends MultiSelectionModel<T> im
|
||||
comp = null;
|
||||
}
|
||||
|
||||
// TODO / FIXME: Need to redefine setSelected here: if an element is set selected for which another element is in the current selection that is compared equal by the EntityIdentityComparator then it should be replaced
|
||||
|
||||
/**
|
||||
* TODO Lukas: Add Javadoc
|
||||
*/
|
||||
public RefreshableMultiSelectionModel(EntityIdentityComparator<T> comp) {
|
||||
super();
|
||||
this.comp = comp;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO Lukas: Add Javadoc
|
||||
*/
|
||||
public RefreshableMultiSelectionModel(ProvidesKey<T> keyProvider, EntityIdentityComparator<T> comp) {
|
||||
super(keyProvider);
|
||||
this.comp = comp;
|
||||
|
||||
Reference in new issue
Block a user