diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/RibDashboardDataRetriever.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/RibDashboardDataRetriever.java index 7ef3fbd6c27..fe206005f0a 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/RibDashboardDataRetriever.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/dataretriever/RibDashboardDataRetriever.java @@ -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 dataRetrieverListener; - private ArrayList raceSelectionChangeListener; private AsyncActionsExecutor asyncActionsExecutor; @@ -51,7 +46,6 @@ public class RibDashboardDataRetriever implements TimeListener, RaceSelectionPro private void initNonFinalMemberVariablesWithNoArgumentConstructor() { dataRetrieverListener = new ArrayList(); - raceSelectionChangeListener = new ArrayList(); } 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 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 newSelection, - RaceSelectionChangeListener... listenersNotToNotify) { - synchronized (MUTEX) { - for (RaceSelectionChangeListener currentRaceSelectionChangeListener : raceSelectionChangeListener) { - currentRaceSelectionChangeListener.onRaceSelectionChange(newSelection); - } - } - } - - @Override - public List getAllRaces() { - return null; - } - - @Override - public void setAllRaces(List newAllRaces, - RaceSelectionChangeListener... listenersNotToNotify) { - } - - @Override - public List getSelectedRaces() { - return null; - } } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartlineAnalysisCard.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartlineAnalysisCard.java index 60ebd904b53..3d4bc02cbec 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartlineAnalysisCard.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartlineAnalysisCard.java @@ -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); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java index 5cfe4fe6697..bc2d5d95a8e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/place/player/AutoPlayController.java @@ -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 competitorsAndTheirBoats) { - RaceSelectionModel raceSelectionModel = new RaceSelectionModel(); - List 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; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractCompetitorRegistrationsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractCompetitorRegistrationsDialog.java index 406415114dc..dc97fa861dc 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractCompetitorRegistrationsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractCompetitorRegistrationsDialog.java @@ -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> { - protected CompetitorTableWrapper> allCompetitorsTable; - protected CompetitorTableWrapper> registeredCompetitorsTable; + protected CompetitorTableWrapper> allCompetitorsTable; + protected CompetitorTableWrapper> 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> from, - CompetitorTableWrapper> to) { + private void moveSelected(CompetitorTableWrapper> from, + CompetitorTableWrapper> to) { move(from, to, from.getSelectionModel().getSelectedSet()); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardConfigPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardConfigPanel.java index b11071504b8..f071f525547 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardConfigPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLeaderboardConfigPanel.java @@ -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 leaderboardTable; - protected final RaceTableWrapper> raceColumnTable; + protected final RaceTableWrapper> raceColumnTable; protected final RefreshableSelectionModel raceColumnTableSelectionModel; protected RaceColumnDTOAndFleetDTOWithNameBasedEquality selectedRaceInLeaderboard; @@ -86,7 +85,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement protected final RefreshableMultiSelectionModel refreshableLeaderboardSelectionModel; - protected final RefreshableSingleSelectionModel raceSingelSelectionModel; + protected final RefreshableSingleSelectionModel 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) trackedRacesListComposite.getSelectionModel(); - this.raceSingelSelectionModel.addSelectionChangeHandler(new Handler() { - + this.raceSingleSelectionModel = (RefreshableSingleSelectionModel) 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>( + raceColumnTable = new RaceTableWrapper>( 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 } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLogImportFixesAndAddMappingsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLogImportFixesAndAddMappingsDialog.java index 5ddaf3893a3..1c841b5e8f4 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLogImportFixesAndAddMappingsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractLogImportFixesAndAddMappingsDialog.java @@ -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> { TrackFileImportWidget importWidget; private TrackFileImportDeviceIdentifierTableWrapper deviceIdTable; - protected final CompetitorTableWrapper> competitorTable; - protected final MarkTableWrapper> markTable; + protected final CompetitorTableWrapper> competitorTable; + protected final MarkTableWrapper> markTable; private final StringMessages stringMessages; private final Map 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>( + markTable = new MarkTableWrapper>( /* multiSelection */ false, sailingService, stringMessages, errorReporter); competitorTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRaceManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRaceManagementPanel.java index 4651e402fcd..283b8d9196b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRaceManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractRaceManagementPanel.java @@ -29,27 +29,38 @@ 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()); + Set selectedRaces = trackedRacesListComposite.getSelectionModel().getSelectedSet(); + if (selectedRaces.size() == 1) { + singleSelectedRace = selectedRaces.iterator().next().getRaceIdentifier(); + selectedCaptionRacePanel.setCaptionText(singleSelectedRace.getRaceName()); + selectedCaptionRacePanel.setVisible(true); + for (RegattaDTO regatta : getAvailableRegattas()) { + for (RaceDTO race : regatta.races) { + if (race != null && race.getRaceIdentifier().equals(singleSelectedRace)) { + AbstractRaceManagementPanel.this.selectedRaceDTO = race; + refreshSelectedRaceData(); + break; + } + } + } + } else { + selectedCaptionRacePanel.setCaptionText(""); + singleSelectedRace = null; + 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); @@ -57,25 +68,4 @@ public abstract class AbstractRaceManagementPanel extends AbstractEventManagemen } abstract void refreshSelectedRaceData(); - - public void onRaceSelectionChange(Set selectedRaces) { - if (selectedRaces.size() == 1) { - singleSelectedRace = selectedRaces.iterator().next().getRaceIdentifier(); - selectedCaptionRacePanel.setCaptionText(singleSelectedRace.getRaceName()); - selectedCaptionRacePanel.setVisible(true); - for (RegattaDTO regatta : getAvailableRegattas()) { - for (RaceDTO race : regatta.races) { - if (race != null && race.getRaceIdentifier().equals(singleSelectedRace)) { - this.selectedRaceDTO = race; - refreshSelectedRaceData(); - break; - } - } - } - } else { - selectedCaptionRacePanel.setCaptionText(""); - singleSelectedRace = null; - selectedCaptionRacePanel.setVisible(false); - } - } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractTrackedRacesListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractTrackedRacesListComposite.java index b4b2e7bb611..945ad3086bf 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractTrackedRacesListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AbstractTrackedRacesListComposite.java @@ -98,14 +98,11 @@ public abstract class AbstractTrackedRacesListComposite extends SimplePanel impl protected void createUI() { AdminConsoleTableResources tableResources = GWT.create(AdminConsoleTableResources.class); - raceList = new ListDataProvider(); 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(/* pageSize */10000, tableRes); raceTable.ensureDebugId("TrackedRacesCellTable"); - + final EntityIdentityComparator entityIdentityComparator = new EntityIdentityComparator() { + @Override + public boolean representSameEntity(RaceDTO dto1, RaceDTO dto2) { + return dto1.getRaceIdentifier().equals(dto2.getRaceIdentifier()); + } + }; if (multiSelection) { this.selectionCheckboxColumn = new SelectionCheckboxColumn( tableResources.cellTableStyle().cellTableCheckboxSelected(), tableResources.cellTableStyle().cellTableCheckboxDeselected(), tableResources.cellTableStyle().cellTableCheckboxColumnCell(), - new EntityIdentityComparator() { - - @Override - public boolean representSameEntity(RaceDTO dto1, RaceDTO dto2) { - return dto1.getRaceIdentifier().equals(dto2.getRaceIdentifier()); - } - }) { + entityIdentityComparator) { @Override protected ListDataProvider 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(); + refreshableSelectionModel = new RefreshableSingleSelectionModel(entityIdentityComparator); raceTable.setSelectionModel(refreshableSelectionModel); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorPanel.java index 52520fa7e52..2f8eb97706a 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorPanel.java @@ -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> competitorTable; + private final CompetitorTableWrapper> competitorTable; private final RefreshableMultiSelectionModel refreshableCompetitorSelectionModel; private final String leaderboardName; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorTableWrapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorTableWrapper.java index a9e4be72683..462b37f4718 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorTableWrapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CompetitorTableWrapper.java @@ -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> extends TableWrapper { +public class CompetitorTableWrapper> extends TableWrapper { private final LabeledAbstractFilterablePanel filterField; public CompetitorTableWrapper(SailingServiceAsync sailingService, StringMessages stringMessages,ErrorReporter errorReporter, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ControlPointTableWrapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ControlPointTableWrapper.java index 41fcd120df5..7b9d8d400f9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ControlPointTableWrapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ControlPointTableWrapper.java @@ -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> extends TableWrapper { +public class ControlPointTableWrapper> extends TableWrapper { public ControlPointTableWrapper(boolean multiSelection, SailingServiceAsync sailingService, final StringMessages stringMessages, ErrorReporter errorReporter) { super(sailingService, stringMessages, errorReporter, multiSelection, /* enablePager */ true, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CopyCourseAndCompetitorsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CopyCourseAndCompetitorsDialog.java index 096b8f8b20b..24efd341018 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CopyCourseAndCompetitorsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CopyCourseAndCompetitorsDialog.java @@ -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 { - private final RaceTableWrapper> + private final RaceTableWrapper> racesTable; private final CheckBox courseCheckBox; private final CheckBox competitorCheckBox; @@ -38,7 +38,7 @@ public class CopyCourseAndCompetitorsDialog extends DataEntryDialog>( + racesTable = new RaceTableWrapper>( sailingService, stringMessages, errorReporter, /* multiSelection */ true); racesTable.setSelectedLeaderboardName(leaderboardName); racesTable.getDataProvider().getList().addAll(races); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CourseManagementWidget.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CourseManagementWidget.java index 3ac01a1e044..5c402d443b9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CourseManagementWidget.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/CourseManagementWidget.java @@ -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> marks; - protected final ControlPointTableWrapper> multiMarkControlPoints; - protected final WaypointTableWrapper> waypoints; + protected final MarkTableWrapper> marks; + protected final ControlPointTableWrapper> multiMarkControlPoints; + protected final WaypointTableWrapper> 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>( + waypoints = new WaypointTableWrapper>( /* multiSelection */ false, sailingService, stringMessages, errorReporter); - multiMarkControlPoints = new ControlPointTableWrapper>( + multiMarkControlPoints = new ControlPointTableWrapper>( /* multiSelection */ false, sailingService, stringMessages, errorReporter); - marks = new MarkTableWrapper>( + marks = new MarkTableWrapper>( /* multiSelection */ true, sailingService, stringMessages, errorReporter); CaptionPanel waypointsPanel = new CaptionPanel(stringMessages.waypoints()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DeviceIdentifierTableWrapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DeviceIdentifierTableWrapper.java index a47a1923e11..2025f79b76b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DeviceIdentifierTableWrapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DeviceIdentifierTableWrapper.java @@ -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> { +public class DeviceIdentifierTableWrapper extends TableWrapper> { public DeviceIdentifierTableWrapper(SailingServiceAsync sailingService, StringMessages stringMessages, ErrorReporter errorReporter) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DeviceMappingTableWrapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DeviceMappingTableWrapper.java index 66d654661f3..fe26f2fccea 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DeviceMappingTableWrapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/DeviceMappingTableWrapper.java @@ -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> { +public class DeviceMappingTableWrapper extends TableWrapper> { static interface FilterChangedHandler { void onFilterChanged(List filteredList); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/GateCreationDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/GateCreationDialog.java index d7fee494249..adbc9f85ee6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/GateCreationDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/GateCreationDialog.java @@ -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 { - private final MarkTableWrapper> marksWrapper; + private final MarkTableWrapper> marksWrapper; private final TextBox name; private final StringMessages stringMessages; @@ -42,7 +42,7 @@ public class GateCreationDialog extends DataEntryDialog { }, /* animationEnabled */ false, callback); this.stringMessages = stringMessages; name = createTextBox(""); - marksWrapper = new MarkTableWrapper>( + marksWrapper = new MarkTableWrapper>( /* multiSelection */ true, sailingService, stringMessages, errorReporter); marksWrapper.getDataProvider().getList().addAll(marks); marksWrapper.getSelectionModel().addSelectionChangeHandler(new Handler() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ItemToMapToDeviceSelectionPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ItemToMapToDeviceSelectionPanel.java index 688aadeefd5..1e3c7928a86 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ItemToMapToDeviceSelectionPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/ItemToMapToDeviceSelectionPanel.java @@ -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> competitorTable; - private final MarkTableWrapper> markTable; + private final CompetitorTableWrapper> competitorTable; + private final MarkTableWrapper> 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>(/* multiSelection */ false, sailingService, + markTable = new MarkTableWrapper>(/* multiSelection */ false, sailingService, stringMessages, errorReporter); final SingleSelectionModel markSelectionModel = markTable.getSelectionModel(); competitorTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/MarkTableWrapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/MarkTableWrapper.java index 2a3f50c9174..a52565138de 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/MarkTableWrapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/MarkTableWrapper.java @@ -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> extends TableWrapper { +public class MarkTableWrapper> extends TableWrapper { public MarkTableWrapper(boolean multiSelection, SailingServiceAsync sailingService, StringMessages stringMessages, ErrorReporter errorReporter) { super(sailingService, stringMessages, errorReporter, multiSelection, true, null /*EntityIdentityComparator for RefreshableSelectionModel*/); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceTableWrapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceTableWrapper.java index b72c2a296b4..388adf0c6af 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceTableWrapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceTableWrapper.java @@ -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> +public class RaceTableWrapper> extends TableWrapper { private final AnchorTemplates ANCHORTEMPLATE = GWT.create(AnchorTemplates.class); private String selectedLeaderboardName; @@ -75,8 +74,4 @@ extends TableWrapper { public void setSelectedLeaderboardName(String name) { this.selectedLeaderboardName = name; } - - public RefreshableSelectionModel getRefreshableSelectionModel() { - return (RefreshableSelectionModel) super.getSelectionModel(); - } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RacesListBoxPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RacesListBoxPanel.java deleted file mode 100755 index 706b564ebef..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RacesListBoxPanel.java +++ /dev/null @@ -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 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(); - 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 result) { - raceList.clear(); - raceListBox.clear(); - for (RegattaDTO regatta : result) { - for (RaceDTO race : regatta.races) { - raceList.add(race); - } - } - Collections.sort(raceList, new Comparator() { - @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 getSelectedRaceIdentifiers() { - List result = new ArrayList(); - for (RaceDTO selectedRace : getSelectedRaces()) { - result.add(selectedRace.getRaceIdentifier()); - } - return result; - } - - private List getSelectedRaces() { - int i=0; - List result = new ArrayList(); - 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 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 getAllRaces() { - return Collections.unmodifiableList(raceList); - } - - public RaceDTO getRace(RaceIdentifier raceIdentifier) { - for (RaceDTO race : getAllRaces()) { - if (raceIdentifier.equals(race.getRaceIdentifier())) { - return race; - } - } - return null; - } - -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLogTrackingDeviceMappingsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLogTrackingDeviceMappingsDialog.java index 86672aeb74a..be18983bff0 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLogTrackingDeviceMappingsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaLogTrackingDeviceMappingsDialog.java @@ -29,7 +29,6 @@ public class RegattaLogTrackingDeviceMappingsDialog extends AbstractLogTrackingD @Override public void onSuccess(List result) { mappings = result; - updateChart(); deviceMappingTable.refresh(mappings); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TableWrapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TableWrapper.java index cb1024fe7eb..5edfb750251 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TableWrapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TableWrapper.java @@ -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 > to > -public abstract class TableWrapper> implements IsWidget { +public abstract class TableWrapper> implements IsWidget { protected final CellTable table; private final S selectionModel; protected final ListDataProvider dataProvider; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java index ea5a026932e..54d801f5eeb 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java @@ -154,7 +154,7 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite @Override protected void makeControlsReactToSelectionChange(Set selectedRaces) { - if(actionButtonsEnabled) { + if (actionButtonsEnabled) { if (selectedRaces.isEmpty()) { btnRemoveRace.setEnabled(false); btnUntrack.setEnabled(false); @@ -164,7 +164,7 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite btnUntrack.setEnabled(true); btnExport.setEnabled(true); } - } + } } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WaypointCreationDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WaypointCreationDialog.java index 42b98c2bc79..e103e0cae81 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WaypointCreationDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WaypointCreationDialog.java @@ -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 { - private final ControlPointTableWrapper> controlPointsWrapper; + private final ControlPointTableWrapper> controlPointsWrapper; private final ListBox passingInstructions; private final StringMessages stringMessages; @@ -39,7 +39,7 @@ public class WaypointCreationDialog extends DataEntryDialog { }, /* animationEnabled */ false, callback); this.stringMessages = stringMessages; - controlPointsWrapper = new ControlPointTableWrapper>( + controlPointsWrapper = new ControlPointTableWrapper>( /* multiSelection */ false, sailingService, stringMessages, errorReporter); controlPointsWrapper.getDataProvider().getList().addAll(controlPoints); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WaypointTableWrapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WaypointTableWrapper.java index dc3a9588c0c..dbd7cd7093b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WaypointTableWrapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WaypointTableWrapper.java @@ -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> extends TableWrapper { +public class WaypointTableWrapper> extends TableWrapper { public WaypointTableWrapper(boolean multiSelection, SailingServiceAsync sailingService, final StringMessages stringMessages, ErrorReporter errorReporter) { super(sailingService, stringMessages, errorReporter, multiSelection, true, null /*EntityIdentityComparator for RefreshableSelectionModel*/); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompetitorSelectionModel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompetitorSelectionModel.java index 62793384452..b9627a4acab 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompetitorSelectionModel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/CompetitorSelectionModel.java @@ -217,10 +217,10 @@ public class CompetitorSelectionModel implements CompetitorSelectionProvider { Set oldCompetitorsToRemove = new HashSet(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; } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceSelectionChangeListener.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceSelectionChangeListener.java deleted file mode 100755 index de8556b6dc5..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceSelectionChangeListener.java +++ /dev/null @@ -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-null list which is empty if nothing is selected - */ - void onRaceSelectionChange(List selectedRaces); - -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceSelectionModel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceSelectionModel.java deleted file mode 100755 index 556bbf02538..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceSelectionModel.java +++ /dev/null @@ -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 selection; - - private final List allRaces; - - private final Set listeners; - - public RaceSelectionModel() { - this.selection = new ArrayList(); - this.allRaces = new ArrayList(); - listeners = new HashSet(); - } - - @Override - public List 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 newSelection, RaceSelectionChangeListener... listenersNotToNotify) { - boolean notify = !selection.equals(newSelection); - selection.clear(); - selection.addAll(newSelection); - if (notify) { - notifyListeners(listenersNotToNotify); - } - } - - private void notifyListeners(RaceSelectionChangeListener[] listenersNotToNotify) { - List 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 - * newAllRaces are removed from the selection. If this happens, the selection listeners are notified. - */ - @Override - public void setAllRaces(List newAllRaces, RaceSelectionChangeListener... listenersNotToNotify) { - allRaces.clear(); - for (RegattaAndRaceIdentifier r : newAllRaces) { - allRaces.add(r); - } - boolean notify = false; - for (Iterator i=selection.iterator(); i.hasNext(); ) { - RaceIdentifier selectedRace = i.next(); - if (!allRaces.contains(selectedRace)) { - notify = true; - i.remove(); - } - } - if (notify) { - notifyListeners(listenersNotToNotify); - } - } - - @Override - public List getAllRaces() { - return Collections.unmodifiableList(allRaces); - } - -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceSelectionProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceSelectionProvider.java deleted file mode 100755 index 5db6435e36b..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceSelectionProvider.java +++ /dev/null @@ -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-null list which may be empty - */ - List getSelectedRaces(); - - void addRaceSelectionChangeListener(RaceSelectionChangeListener listener); - - void removeRaceSelectionChangeListener(RaceSelectionChangeListener listener); - - void setSelection(List newSelection, RaceSelectionChangeListener... listenersNotToNotify); - - /** - * @return a non-null list which may be empty - */ - List getAllRaces(); - - void setAllRaces(List newAllRaces, RaceSelectionChangeListener... listenersNotToNotify); -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceTimePanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceTimePanel.java index ef6d167bb08..85ac2790950 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceTimePanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RaceTimePanel.java @@ -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 implements RaceSelectionChangeListener, RaceTimesInfoProviderListener { +public class RaceTimePanel extends TimePanel implements RaceTimesInfoProviderListener { private final RaceTimesInfoProvider raceTimesInfoProvider; private RegattaAndRaceIdentifier selectedRace; @@ -30,11 +30,15 @@ public class RaceTimePanel extends TimePanel 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 implements R (lastRaceTimesInfo.startOfRace != null && liveTimePointInMillis > lastRaceTimesInfo.startOfRace.getTime() - timeBeforeRaceStartTolerance)); } - @Override - public void onRaceSelectionChange(List 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); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SmallWindHistoryPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SmallWindHistoryPanel.java deleted file mode 100755 index f5d3b5d2fe4..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/SmallWindHistoryPanel.java +++ /dev/null @@ -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() { - @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 windInfo that has length fixes. Uses the order of - * literals of {@link WindSourceType} to determine precedence. - * - * @return null 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 windSourceTypesInOrder = Arrays.asList(WindSourceType.values()); - WindSource result = null; - int bestIndexSoFar = Integer.MAX_VALUE; - for (Map.Entry 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 selectedRaces) { - if (!selectedRaces.isEmpty()) { - race = selectedRaces.get(selectedRaces.size() - 1); - updateWindDisplay(); - } - } - -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java index 58bfe7fe2aa..66cb9d0bd54 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java @@ -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 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. * diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractRaceChart.java index 64e2ddfae51..9ad391e7444 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractRaceChart.java @@ -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. diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/EditMarkPassingsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/EditMarkPassingsPanel.java index a812cae69a8..6e060aec45b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/EditMarkPassingsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/EditMarkPassingsPanel.java @@ -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, RaceSelectionChangeListener, - CompetitorSelectionChangeListener { +public class EditMarkPassingsPanel extends AbsolutePanel implements Component, CompetitorSelectionChangeListener { private static class AnchorCell extends AbstractCell { @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 selectedRaces) { - raceIdentifier = selectedRaces.iterator().next(); - refreshWaypoints(); - } - public void setLeaderboard(LeaderboardDTO leaderboard) { this.leaderboard = leaderboard; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/MultiCompetitorRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/MultiCompetitorRaceChart.java index faf11f93c11..3848f3d2cf3 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/MultiCompetitorRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/MultiCompetitorRaceChart.java @@ -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 colorMap; /** - * @param raceSelectionProvider + * @param selectedRaceIdentifier * if null, 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 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 date. If nothing has been loaded yet, * loads from the beginning up to date. If in replay mode, checks if anything has been loaded at all. If not, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/controls/SelectionCheckboxColumn.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/controls/SelectionCheckboxColumn.java index fa6475f0dad..1315019f7cc 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/controls/SelectionCheckboxColumn.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/controls/SelectionCheckboxColumn.java @@ -52,7 +52,7 @@ public abstract class SelectionCheckboxColumn extends AbstractSortableColumnW private final RefreshableMultiSelectionModel 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 extends AbstractSortableColumnW * @param checkboxColumnCellCSSClass * CSS class for the <td> element rendering the cell */ - protected SelectionCheckboxColumn(RefreshableMultiSelectionModel 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 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 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 selectionModel, BetterCheckboxCell checkboxCell, String checkboxColumnCellCSSClass) { super(checkboxCell, SortingOrder.DESCENDING); this.cell = checkboxCell; @@ -143,7 +145,6 @@ public abstract class SelectionCheckboxColumn extends AbstractSortableColumnW redrawRow(item, getListDataProvider().getList()); } } - }; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java index b4657f0d566..81995e7c360 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java @@ -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, 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 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 selectedRaces) { - mapFirstZoomDone = false; - // TODO bug 494: reset zoom settings to user preferences - this.selectedRaces = selectedRaces; - } - @Override public void raceTimesInfosReceived(Map 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 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 from = new HashMap(); from.put(competitorDTO, fixesAndTails.getFixes(competitorDTO).get(fixesAndTails.getFirstShownFix(competitorDTO)).timepoint); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/EmbeddedMapAndWindChartEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/EmbeddedMapAndWindChartEntryPoint.java index 926e3ca3efe..f72936ca077 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/EmbeddedMapAndWindChartEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/EmbeddedMapAndWindChartEntryPoint.java @@ -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 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; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java index 219d66c3acb..fde2c93a7cc 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java @@ -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 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); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index 414c16d8f1e..4ec5cadfa03 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -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 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 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> components = new ArrayList>(); - 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 selectedRaces) { - } - public RaceBoardViewConfiguration getConfiguration() { return raceboardViewConfiguration; } diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableMultiSelectionModel.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableMultiSelectionModel.java index 1d88541c66e..bf18a1dd069 100644 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableMultiSelectionModel.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableMultiSelectionModel.java @@ -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 + */ public class RefreshableMultiSelectionModel extends MultiSelectionModel implements RefreshableSelectionModel { private final EntityIdentityComparator comp; @@ -14,11 +19,19 @@ public class RefreshableMultiSelectionModel extends MultiSelectionModel 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 comp) { super(); this.comp = comp; } + /** + * TODO Lukas: Add Javadoc + */ public RefreshableMultiSelectionModel(ProvidesKey keyProvider, EntityIdentityComparator comp) { super(keyProvider); this.comp = comp;