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 38a6478d771..d17e7193d2a 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 @@ -29,10 +29,13 @@ import com.sap.sailing.domain.common.dto.NamedDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.gwt.ui.client.ErrorReporter; +import com.sap.sailing.gwt.ui.client.LeaderboardsDisplayer; +import com.sap.sailing.gwt.ui.client.LeaderboardsRefresher; import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener; import com.sap.sailing.gwt.ui.client.RaceSelectionModel; import com.sap.sailing.gwt.ui.client.RaceSelectionProvider; -import com.sap.sailing.gwt.ui.client.RegattaDisplayer; +import com.sap.sailing.gwt.ui.client.RegattaRefresher; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.shared.panels.LabeledAbstractFilterablePanel; @@ -41,8 +44,8 @@ import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO; import com.sap.sse.common.Pair; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; -public abstract class AbstractLeaderboardConfigPanel extends FormPanel implements SelectedLeaderboardProvider, RegattaDisplayer, RaceSelectionChangeListener, -TrackedRaceChangedListener { +public abstract class AbstractLeaderboardConfigPanel extends FormPanel implements SelectedLeaderboardProvider, + RegattasDisplayer, RaceSelectionChangeListener, TrackedRaceChangedListener, LeaderboardsDisplayer { protected final VerticalPanel mainPanel; protected final TrackedRacesListComposite trackedRacesListComposite; @@ -74,6 +77,8 @@ TrackedRaceChangedListener { protected final RaceSelectionProvider raceSelectionProvider; + private final LeaderboardsRefresher leaderboardsRefresher; + public static class RaceColumnDTOAndFleetDTOWithNameBasedEquality extends Pair { private static final long serialVersionUID = -8742476113296862662L; @@ -113,14 +118,15 @@ TrackedRaceChangedListener { } } - public AbstractLeaderboardConfigPanel(final SailingServiceAsync sailingService, AdminConsoleEntryPoint adminConsole, - final ErrorReporter errorReporter, StringMessages theStringConstants, - SetSelectionModel raceColumnTableSelectionModel) { + public AbstractLeaderboardConfigPanel(final SailingServiceAsync sailingService, RegattaRefresher regattaRefresher, + LeaderboardsRefresher leaderboardsRefresher, final ErrorReporter errorReporter, + StringMessages theStringConstants, SetSelectionModel raceColumnTableSelectionModel) { this.stringMessages = theStringConstants; this.sailingService = sailingService; leaderboardList = new ListDataProvider(); allRegattas = new ArrayList(); this.errorReporter = errorReporter; + this.leaderboardsRefresher = leaderboardsRefresher; this.availableLeaderboardList = new ArrayList(); mainPanel = new VerticalPanel(); mainPanel.setWidth("100%"); @@ -141,7 +147,8 @@ TrackedRaceChangedListener { AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class); leaderboardTable = new CellTable(/* pageSize */10000, tableRes); - filterLeaderboardPanel = new LabeledAbstractFilterablePanel(lblFilterEvents, availableLeaderboardList, leaderboardTable, leaderboardList) { + filterLeaderboardPanel = new LabeledAbstractFilterablePanel(lblFilterEvents, + availableLeaderboardList, leaderboardTable, leaderboardList) { @Override public List getSearchableStrings(StrippedLeaderboardDTO t) { List strings = new ArrayList(); @@ -202,7 +209,7 @@ TrackedRaceChangedListener { trackedRacesCaptionPanel.setStyleName("bold"); raceSelectionProvider = new RaceSelectionModel(); - trackedRacesListComposite = new TrackedRacesListComposite(sailingService, errorReporter, adminConsole, + trackedRacesListComposite = new TrackedRacesListComposite(sailingService, errorReporter, regattaRefresher, raceSelectionProvider, stringMessages, /* multiselection */false); trackedRacesListComposite.ensureDebugId("TrackedRacesListComposite"); trackedRacesPanel.add(trackedRacesListComposite); @@ -246,8 +253,6 @@ TrackedRaceChangedListener { vPanel.add(selectedLeaderboardRaceButtonPanel); addSelectedLeaderboardRacesControls(selectedLeaderboardRaceButtonPanel); - - loadLeaderboards(); } protected abstract void addLeaderboardConfigControls(Panel configPanel); @@ -256,27 +261,16 @@ TrackedRaceChangedListener { protected abstract void addColumnsToLeaderboardTable(CellTable leaderboardTable); protected abstract void addColumnsToRacesTable(CellTable racesTable); - - public void loadLeaderboards() { - sailingService.getLeaderboards(new MarkedAsyncCallback>( - new AsyncCallback>() { - @Override - public void onSuccess(List leaderboards) { - leaderboardList.getList().clear(); - availableLeaderboardList.clear(); - leaderboardList.getList().addAll(leaderboards); - availableLeaderboardList.addAll(leaderboards); - filterLeaderboardPanel.updateAll(availableLeaderboardList); - leaderboardSelectionChanged(); - leaderboardRaceColumnSelectionChanged(); - } - - @Override - public void onFailure(Throwable t) { - AbstractLeaderboardConfigPanel.this.errorReporter.reportError("Error trying to obtain list of leaderboards: " - + t.getMessage()); - } - })); + + @Override + public void fillLeaderboards(Iterable leaderboards) { + leaderboardList.getList().clear(); + availableLeaderboardList.clear(); + Util.addAll(leaderboards, leaderboardList.getList()); + Util.addAll(leaderboards, availableLeaderboardList); + filterLeaderboardPanel.updateAll(availableLeaderboardList); + leaderboardSelectionChanged(); + leaderboardRaceColumnSelectionChanged(); } /** @@ -303,6 +297,7 @@ TrackedRaceChangedListener { selectRaceColumn(nameOfRaceColumnToSelect); } leaderboardSelectionChanged(); + getLeaderboardsRefresher().updateLeaderboards(leaderboardList.getList(), AbstractLeaderboardConfigPanel.this); } @Override @@ -494,4 +489,8 @@ TrackedRaceChangedListener { public StrippedLeaderboardDTO getSelectedLeaderboard() { return leaderboardSelectionModel.getSelectedSet().isEmpty() ? null : leaderboardSelectionModel.getSelectedSet().iterator().next(); } + + protected LeaderboardsRefresher getLeaderboardsRefresher() { + return leaderboardsRefresher; + } } \ No newline at end of file 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 071caadbf5d..d8764dbc781 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 @@ -38,7 +38,7 @@ import com.sap.sailing.domain.common.impl.NaturalComparator; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener; import com.sap.sailing.gwt.ui.client.RaceSelectionProvider; -import com.sap.sailing.gwt.ui.client.RegattaDisplayer; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; @@ -50,7 +50,7 @@ import com.sap.sailing.gwt.ui.shared.RegattaDTO; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; public abstract class AbstractTrackedRacesListComposite extends SimplePanel implements Component, - RegattaDisplayer, RaceSelectionChangeListener { + RegattasDisplayer, RaceSelectionChangeListener { protected final long DEFAULT_LIVE_DELAY_IN_MILLISECONDS = 5000; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java index 68ed4fd72c7..72d7040cdc6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java @@ -21,10 +21,14 @@ import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.TabLayoutPanel; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.ui.client.AbstractEntryPoint; +import com.sap.sailing.gwt.ui.client.LeaderboardGroupsDisplayer; +import com.sap.sailing.gwt.ui.client.LeaderboardGroupsRefresher; +import com.sap.sailing.gwt.ui.client.LeaderboardsDisplayer; +import com.sap.sailing.gwt.ui.client.LeaderboardsRefresher; import com.sap.sailing.gwt.ui.client.MediaService; import com.sap.sailing.gwt.ui.client.MediaServiceAsync; -import com.sap.sailing.gwt.ui.client.RegattaDisplayer; import com.sap.sailing.gwt.ui.client.RegattaRefresher; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants; import com.sap.sailing.gwt.ui.client.SailingService; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; @@ -35,14 +39,18 @@ import com.sap.sailing.gwt.ui.client.shared.panels.SystemInformationPanel; import com.sap.sailing.gwt.ui.client.shared.panels.UserStatusPanel; import com.sap.sailing.gwt.ui.masterdataimport.MasterDataImportPanel; import com.sap.sailing.gwt.ui.shared.BetterDateTimeBox; +import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; +import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO; import com.sap.sailing.gwt.ui.shared.UserDTO; import com.sap.sailing.gwt.ui.usermanagement.UserRoles; import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; -public class AdminConsoleEntryPoint extends AbstractEntryPoint implements RegattaRefresher { - private Set regattaDisplayers; +public class AdminConsoleEntryPoint extends AbstractEntryPoint implements RegattaRefresher, LeaderboardsRefresher, LeaderboardGroupsRefresher { + private Set regattasDisplayers; + private Set leaderboardsDisplayers; + private Set leaderboardGroupsDisplayers; private final AdminConsoleResources resources = GWT.create(AdminConsoleResources.class); @@ -92,39 +100,42 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt final TabLayoutPanel tabPanel = new ScrolledTabLayoutPanel(2.5, Unit.EM, resources.arrowLeft(), resources.arrowRight(), 200); tabPanel.ensureDebugId("AdministrationTabs"); - regattaDisplayers = new HashSet(); + regattasDisplayers = new HashSet<>(); + leaderboardsDisplayers = new HashSet<>(); + leaderboardGroupsDisplayers = new HashSet<>(); - EventManagementPanel sailingEventManagementPanel = new EventManagementPanel(sailingService, this, - stringMessages); - addToTabPanel(tabPanel, user, sailingEventManagementPanel, stringMessages.events(), AdminConsoleFeatures.MANAGE_EVENTS); + EventManagementPanel eventManagementPanel = new EventManagementPanel(sailingService, this, stringMessages); + addToTabPanel(tabPanel, user, eventManagementPanel, stringMessages.events(), AdminConsoleFeatures.MANAGE_EVENTS); + leaderboardGroupsDisplayers.add(eventManagementPanel); - RegattaStructureManagementPanel eventStructureManagementPanel = new RegattaStructureManagementPanel( + RegattaStructureManagementPanel regattaManagementPanel = new RegattaStructureManagementPanel( sailingService, this, stringMessages, this); - eventStructureManagementPanel.ensureDebugId("RegattaStructureManagement"); - addToTabPanel(tabPanel, user, eventStructureManagementPanel, stringMessages.regattas(), AdminConsoleFeatures.MANAGE_REGATTAS); - regattaDisplayers.add(eventStructureManagementPanel); + regattaManagementPanel.ensureDebugId("RegattaStructureManagement"); + addToTabPanel(tabPanel, user, regattaManagementPanel, stringMessages.regattas(), AdminConsoleFeatures.MANAGE_REGATTAS); + regattasDisplayers.add(regattaManagementPanel); TracTracEventManagementPanel tractracEventManagementPanel = new TracTracEventManagementPanel(sailingService, this, this, stringMessages); tractracEventManagementPanel.ensureDebugId("TracTracEventManagement"); addToTabPanel(tabPanel, user, tractracEventManagementPanel, stringMessages.tracTracEvents(), AdminConsoleFeatures.MANAGE_TRACKED_RACES); - regattaDisplayers.add(tractracEventManagementPanel); + regattasDisplayers.add(tractracEventManagementPanel); SwissTimingReplayConnectorPanel swissTimingReplayConnectorPanel = new SwissTimingReplayConnectorPanel( sailingService, this, this, stringMessages); addToTabPanel(tabPanel, user, swissTimingReplayConnectorPanel, stringMessages.swissTimingArchiveConnector(), AdminConsoleFeatures.MANAGE_TRACKED_RACES); - regattaDisplayers.add(swissTimingReplayConnectorPanel); + regattasDisplayers.add(swissTimingReplayConnectorPanel); SwissTimingEventManagementPanel swisstimingEventManagementPanel = new SwissTimingEventManagementPanel( sailingService, this, this, stringMessages); // swisstimingEventManagementPanel.ensureDebugId("SwissTimingEventManagement"); addToTabPanel(tabPanel, user, swisstimingEventManagementPanel, stringMessages.swissTimingEvents(), AdminConsoleFeatures.MANAGE_TRACKED_RACES); - regattaDisplayers.add(swisstimingEventManagementPanel); + regattasDisplayers.add(swisstimingEventManagementPanel); final RaceLogTrackingEventManagementPanel raceLogTrackingEventManagementPanel = new RaceLogTrackingEventManagementPanel( sailingService, this, this, this, stringMessages); addToTabPanel(tabPanel, user, raceLogTrackingEventManagementPanel, stringMessages.raceLogTracking(), AdminConsoleFeatures.MANAGE_RACELOG_TRACKING); - regattaDisplayers.add(raceLogTrackingEventManagementPanel); + regattasDisplayers.add(raceLogTrackingEventManagementPanel); + leaderboardsDisplayers.add(raceLogTrackingEventManagementPanel); IgtimiAccountsPanel igtimiAccountsPanel = new IgtimiAccountsPanel(sailingService, this, stringMessages); igtimiAccountsPanel.ensureDebugId("IgtimiAccounts"); @@ -134,35 +145,36 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt this, stringMessages); trackedRacesManagementPanel.ensureDebugId("TrackedRacesManagement"); addToTabPanel(tabPanel, user, trackedRacesManagementPanel, stringMessages.trackedRaces(), AdminConsoleFeatures.SHOW_TRACKED_RACES); - regattaDisplayers.add(trackedRacesManagementPanel); + regattasDisplayers.add(trackedRacesManagementPanel); final CompetitorPanel competitorPanel = new CompetitorPanel(sailingService, stringMessages, this); addToTabPanel(tabPanel, user, competitorPanel, stringMessages.competitors(), AdminConsoleFeatures.MANAGE_ALL_COMPETITORS); - RaceCourseManagementPanel raceCourseManagementPanel = new RaceCourseManagementPanel(sailingService, this, this, - stringMessages); + RaceCourseManagementPanel raceCourseManagementPanel = new RaceCourseManagementPanel(sailingService, this, this, stringMessages); // raceCourseManagementPanel.ensureDebugId("RaceCourseManagement"); addToTabPanel(tabPanel, user, raceCourseManagementPanel, stringMessages.courseLayout(), AdminConsoleFeatures.MANAGE_COURSE_LAYOUT); - regattaDisplayers.add(raceCourseManagementPanel); + regattasDisplayers.add(raceCourseManagementPanel); final AsyncActionsExecutor asyncActionsExecutor = new AsyncActionsExecutor(); WindPanel windPanel = new WindPanel(sailingService, asyncActionsExecutor, this, this, stringMessages); // windPanel.ensureDebugId("WindManagement"); - regattaDisplayers.add(windPanel); + regattasDisplayers.add(windPanel); addToTabPanel(tabPanel, user, windPanel, stringMessages.wind(), AdminConsoleFeatures.MANAGE_WIND); final LeaderboardGroupConfigPanel leaderboardGroupConfigPanel = new LeaderboardGroupConfigPanel(sailingService, - this, this, stringMessages); + this, this, this, this, stringMessages); leaderboardGroupConfigPanel.ensureDebugId("LeaderboardGroupConfiguration"); addToTabPanel(tabPanel, user, leaderboardGroupConfigPanel, stringMessages.leaderboardGroupConfiguration(), AdminConsoleFeatures.MANAGE_LEADERBOARD_GROUPS); - regattaDisplayers.add(leaderboardGroupConfigPanel); + regattasDisplayers.add(leaderboardGroupConfigPanel); + leaderboardGroupsDisplayers.add(leaderboardGroupConfigPanel); final LeaderboardConfigPanel leaderboardConfigPanel = new LeaderboardConfigPanel(sailingService, this, this, - stringMessages, /* showRaceDetails */true); + stringMessages, /* showRaceDetails */true, this); leaderboardConfigPanel.ensureDebugId("LeaderboardConfiguration"); addToTabPanel(tabPanel, user, leaderboardConfigPanel, stringMessages.leaderboardConfiguration(), AdminConsoleFeatures.MANAGE_LEADERBOARDS); - regattaDisplayers.add(leaderboardConfigPanel); + regattasDisplayers.add(leaderboardConfigPanel); + leaderboardsDisplayers.add(leaderboardConfigPanel); ResultImportUrlsManagementPanel resultImportUrlsManagementPanel = new ResultImportUrlsManagementPanel(sailingService, this, stringMessages); addToTabPanel(tabPanel, user, resultImportUrlsManagementPanel, stringMessages.resultImportUrls(), AdminConsoleFeatures.MANAGE_RESULT_IMPORT_URLS); @@ -178,7 +190,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt addToTabPanel(tabPanel, user, mediaPanel, stringMessages.mediaPanel(), AdminConsoleFeatures.MANAGE_MEDIA); final MasterDataImportPanel masterDataImportPanel = new MasterDataImportPanel(stringMessages, sailingService, - this, sailingEventManagementPanel, leaderboardGroupConfigPanel); + this, eventManagementPanel, this, this); addToTabPanel(tabPanel, user, masterDataImportPanel, stringMessages.masterDataImportPanel(), AdminConsoleFeatures.MANAGE_MASTERDATA_IMPORT); /*final DeviceConfigurationPanel deviceConfigurationAdminPanel = new DeviceConfigurationPanel(sailingService, @@ -195,7 +207,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt public void onSelection(SelectionEvent event) { final Widget selectedPanel = ((ScrollPanel) tabPanel.getWidget(tabPanel.getSelectedIndex())).getWidget(); if (selectedPanel == leaderboardConfigPanel) { - leaderboardConfigPanel.loadLeaderboards(); + fillLeaderboards(); } if (selectedPanel == mediaPanel) { mediaPanel.onShow(); @@ -203,12 +215,14 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt if (selectedPanel == competitorPanel) { competitorPanel.refreshCompetitorList(); } - if (selectedPanel == raceLogTrackingEventManagementPanel) { - raceLogTrackingEventManagementPanel.loadLeaderboards(); + if (selectedPanel == raceLogTrackingEventManagementPanel) { + fillLeaderboards(); } } }); fillRegattas(); + fillLeaderboardGroups(); + fillLeaderboards(); SystemInformationPanel sysinfoPanel = new SystemInformationPanel(sailingService, this); sysinfoPanel.ensureDebugId("SystemInformation"); @@ -235,6 +249,61 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt } return result; } + + @Override + public void fillLeaderboards() { + sailingService.getLeaderboards(new MarkedAsyncCallback>( + new AsyncCallback>() { + @Override + public void onSuccess(List leaderboards) { + for (LeaderboardsDisplayer leaderboardsDisplayer : leaderboardsDisplayers) { + leaderboardsDisplayer.fillLeaderboards(leaderboards); + } + } + + @Override + public void onFailure(Throwable t) { + reportError("Error trying to obtain list of leaderboards: "+ t.getMessage()); + } + })); + } + + @Override + public void updateLeaderboards(Iterable updatedLeaderboards, LeaderboardsDisplayer origin) { + for (LeaderboardsDisplayer leaderboardsDisplayer : leaderboardsDisplayers) { + if (leaderboardsDisplayer != origin) { + leaderboardsDisplayer.fillLeaderboards(updatedLeaderboards); + } + } + } + + @Override + public void fillLeaderboardGroups() { + sailingService.getLeaderboardGroups(false /*withGeoLocationData*/, + new MarkedAsyncCallback>( + new AsyncCallback>() { + @Override + public void onSuccess(List groups) { + for (LeaderboardGroupsDisplayer leaderboardGroupsDisplayer : leaderboardGroupsDisplayers) { + leaderboardGroupsDisplayer.fillLeaderboardGroups(groups); + } + } + @Override + public void onFailure(Throwable t) { + reportError("Error trying to obtain list of leaderboard groups: " + t.getMessage()); + } + })); + } + + @Override + public void updateLeaderboardGroups(Iterable updatedLeaderboardGroups, + LeaderboardGroupsDisplayer origin) { + for (LeaderboardGroupsDisplayer leaderboardGroupsDisplayer : leaderboardGroupsDisplayers) { + if (leaderboardGroupsDisplayer != origin) { + leaderboardGroupsDisplayer.fillLeaderboardGroups(updatedLeaderboardGroups); + } + } + } @Override public void fillRegattas() { @@ -242,7 +311,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt new AsyncCallback>() { @Override public void onSuccess(List result) { - for (RegattaDisplayer regattaDisplayer : regattaDisplayers) { + for (RegattasDisplayer regattaDisplayer : regattasDisplayers) { regattaDisplayer.fillRegattas(result); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventManagementPanel.java index e4d5336cbc4..fec9d86423e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventManagementPanel.java @@ -34,7 +34,8 @@ import com.google.gwt.view.client.MultiSelectionModel; import com.google.gwt.view.client.SelectionChangeEvent; import com.sap.sailing.domain.common.impl.NaturalComparator; import com.sap.sailing.gwt.ui.client.ErrorReporter; -import com.sap.sailing.gwt.ui.client.EventRefresher; +import com.sap.sailing.gwt.ui.client.EventsRefresher; +import com.sap.sailing.gwt.ui.client.LeaderboardGroupsDisplayer; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.URLEncoder; @@ -51,9 +52,9 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; * connected with any regatta and it used only to manage of basic attributes of the an event. * * @author Frank Mittag (C5163974) - * + * @author Axel Uhl (d043530) */ -public class EventManagementPanel extends SimplePanel implements EventRefresher { +public class EventManagementPanel extends SimplePanel implements EventsRefresher, LeaderboardGroupsDisplayer { private final SailingServiceAsync sailingService; private final ErrorReporter errorReporter; private final StringMessages stringMessages; @@ -249,7 +250,8 @@ public class EventManagementPanel extends SimplePanel implements EventRefresher eventSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { - removeEventsButton.setEnabled(!eventSelectionModel.getSelectedSet().isEmpty()); + final boolean somethingSelected = !eventSelectionModel.getSelectedSet().isEmpty(); + removeEventsButton.setEnabled(somethingSelected); } }); eventTable.setSelectionModel(eventSelectionModel); @@ -512,4 +514,10 @@ public class EventManagementPanel extends SimplePanel implements EventRefresher } }); } + + @Override + public void fillLeaderboardGroups(Iterable leaderboardGroups) { + // TODO Auto-generated method stub + + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java index 401ac26b54e..b35f438d930 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigPanel.java @@ -39,10 +39,13 @@ import com.sap.sailing.domain.common.impl.Util.Pair; import com.sap.sailing.gwt.ui.adminconsole.DisablableCheckboxCell.IsEnabled; import com.sap.sailing.gwt.ui.adminconsole.RaceColumnInLeaderboardDialog.RaceColumnDescriptor; import com.sap.sailing.gwt.ui.client.ErrorReporter; +import com.sap.sailing.gwt.ui.client.LeaderboardsDisplayer; +import com.sap.sailing.gwt.ui.client.LeaderboardsRefresher; import com.sap.sailing.gwt.ui.client.ParallelExecutionCallback; import com.sap.sailing.gwt.ui.client.ParallelExecutionHolder; import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener; -import com.sap.sailing.gwt.ui.client.RegattaDisplayer; +import com.sap.sailing.gwt.ui.client.RegattaRefresher; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.URLEncoder; @@ -55,8 +58,8 @@ import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; -public class LeaderboardConfigPanel extends AbstractLeaderboardConfigPanel implements SelectedLeaderboardProvider, RegattaDisplayer, RaceSelectionChangeListener, -TrackedRaceChangedListener { +public class LeaderboardConfigPanel extends AbstractLeaderboardConfigPanel implements SelectedLeaderboardProvider, RegattasDisplayer, RaceSelectionChangeListener, +TrackedRaceChangedListener, LeaderboardsDisplayer { private final AnchorTemplates ANCHORTEMPLATE = GWT.create(AnchorTemplates.class); private final boolean showRaceDetails; @@ -82,11 +85,12 @@ TrackedRaceChangedListener { } - public LeaderboardConfigPanel(final SailingServiceAsync sailingService, AdminConsoleEntryPoint adminConsole, - final ErrorReporter errorReporter, StringMessages theStringConstants, final boolean showRaceDetails) { - super(sailingService, adminConsole, errorReporter, theStringConstants, new SingleSelectionModel()); + public LeaderboardConfigPanel(final SailingServiceAsync sailingService, RegattaRefresher regattaRefresher, + final ErrorReporter errorReporter, StringMessages theStringConstants, final boolean showRaceDetails, + LeaderboardsRefresher leaderboardsRefresher) { + super(sailingService, regattaRefresher, leaderboardsRefresher, errorReporter, theStringConstants, + new SingleSelectionModel()); this.showRaceDetails = showRaceDetails; - leaderboardTable.ensureDebugId("LeaderboardsCellTable"); } @@ -857,12 +861,9 @@ TrackedRaceChangedListener { leaderboardNames.add(leaderboard.name); } sailingService.removeLeaderboards(leaderboardNames, new AsyncCallback() { - @Override public void onFailure(Throwable caught) { errorReporter.reportError("Error trying to remove the leaderboards:" + caught.getMessage()); - - } @Override @@ -870,6 +871,7 @@ TrackedRaceChangedListener { for (StrippedLeaderboardDTO leaderboard : leaderboards) { removeLeaderboardFromTable(leaderboard); } + getLeaderboardsRefresher().updateLeaderboards(availableLeaderboardList, LeaderboardConfigPanel.this); } }); } @@ -887,6 +889,7 @@ TrackedRaceChangedListener { @Override public void onSuccess(Void result) { removeLeaderboardFromTable(leaderBoard); + getLeaderboardsRefresher().updateLeaderboards(availableLeaderboardList, LeaderboardConfigPanel.this); } })); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardGroupConfigPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardGroupConfigPanel.java index 8aef32cbfaf..8b0309ecf1f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardGroupConfigPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardGroupConfigPanel.java @@ -34,11 +34,15 @@ import com.google.gwt.view.client.ProvidesKey; import com.google.gwt.view.client.SelectionChangeEvent; import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.impl.NaturalComparator; +import com.sap.sailing.domain.common.impl.Util; import com.sap.sailing.gwt.ui.adminconsole.LeaderboardConfigPanel.AnchorCell; import com.sap.sailing.gwt.ui.adminconsole.LeaderboardGroupDialog.LeaderboardGroupDescriptor; import com.sap.sailing.gwt.ui.client.AbstractRegattaPanel; import com.sap.sailing.gwt.ui.client.ErrorReporter; -import com.sap.sailing.gwt.ui.client.LeaderboardGroupRefresher; +import com.sap.sailing.gwt.ui.client.LeaderboardGroupsRefresher; +import com.sap.sailing.gwt.ui.client.LeaderboardGroupsDisplayer; +import com.sap.sailing.gwt.ui.client.LeaderboardsDisplayer; +import com.sap.sailing.gwt.ui.client.LeaderboardsRefresher; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; @@ -52,7 +56,7 @@ import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; -public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements LeaderboardGroupRefresher { +public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements LeaderboardGroupsDisplayer, LeaderboardsDisplayer { interface AnchorTemplates extends SafeHtmlTemplates { @SafeHtmlTemplates.Template("{1}") @@ -95,13 +99,18 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements private ArrayList availableLeaderboardGroups; private ArrayList availableLeaderboards; + private final LeaderboardGroupsRefresher leaderboardGroupsRefresher; + private final LeaderboardsRefresher leaderboardsRefresher; public LeaderboardGroupConfigPanel(SailingServiceAsync sailingService, RegattaRefresher regattaRefresher, + LeaderboardGroupsRefresher leaderboardGroupsRefresher, LeaderboardsRefresher leaderboardsRefresher, ErrorReporter errorReporter, StringMessages stringMessages) { super(sailingService, regattaRefresher, errorReporter, stringMessages); AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class); availableLeaderboardGroups = new ArrayList(); availableLeaderboards = new ArrayList(); + this.leaderboardGroupsRefresher = leaderboardGroupsRefresher; + this.leaderboardsRefresher = leaderboardsRefresher; //Build GUI mainPanel = new VerticalPanel(); @@ -124,8 +133,8 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements splitPanel.add(createLeaderboardsGUI(tableRes)); //Load Data - fillLeaderboardGroups(); - loadLeaderboards(); + leaderboardGroupsRefresher.fillLeaderboardGroups(); + leaderboardsRefresher.fillLeaderboards(); } private Widget createSwitchLeaderboardsGUI() { @@ -453,8 +462,8 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements refreshButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - fillLeaderboardGroups(); - loadLeaderboards(); + leaderboardGroupsRefresher.fillLeaderboardGroups(); + leaderboardsRefresher.fillLeaderboards(); } }); leaderboardGroupsFunctionPanel.add(refreshButton); @@ -549,43 +558,24 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements return leaderboardGroupsCaptionPanel; } - public void fillLeaderboardGroups() { - sailingService.getLeaderboardGroups(false /*withGeoLocationData*/, - new MarkedAsyncCallback>( - new AsyncCallback>() { - @Override - public void onSuccess(List groups) { - availableLeaderboardGroups.clear(); - if (groups != null) { - availableLeaderboardGroups.addAll(groups); - } - groupsProvider.getList().clear(); - groupsProvider.getList().addAll(availableLeaderboardGroups); - } - @Override - public void onFailure(Throwable t) { - errorReporter.reportError("Error trying to obtain list of leaderboard groups: " + t.getMessage()); - } - })); + @Override + public void fillLeaderboardGroups(Iterable groups) { + availableLeaderboardGroups.clear(); + if (groups != null) { + Util.addAll(groups, availableLeaderboardGroups); + } + groupsProvider.getList().clear(); + groupsProvider.getList().addAll(availableLeaderboardGroups); } - private void loadLeaderboards() { - sailingService.getLeaderboards(new MarkedAsyncCallback>( - new AsyncCallback>() { - @Override - public void onFailure(Throwable t) { - errorReporter.reportError("Error trying to obtain list of leaderboards: " + t.getMessage()); - } - @Override - public void onSuccess(List leaderboards) { - availableLeaderboards.clear(); - if (leaderboards != null) { - availableLeaderboards.addAll(leaderboards); - } - leaderboardsProvider.getList().clear(); - leaderboardsProvider.getList().addAll(availableLeaderboards); - } - })); + @Override + public void fillLeaderboards(Iterable leaderboards) { + availableLeaderboards.clear(); + if (leaderboards != null) { + Util.addAll(leaderboards, availableLeaderboards); + } + leaderboardsProvider.getList().clear(); + leaderboardsProvider.getList().addAll(availableLeaderboards); } /** @@ -655,6 +645,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements groupsProvider.getList().add(newGroup); groupsSelectionModel.clear(); groupsSelectionModel.setSelected(newGroup, true); + leaderboardGroupsRefresher.updateLeaderboardGroups(availableLeaderboardGroups, LeaderboardGroupConfigPanel.this); } })); } @@ -691,6 +682,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements } } } + leaderboardGroupsRefresher.updateLeaderboardGroups(availableLeaderboardGroups, LeaderboardGroupConfigPanel.this); groupsProvider.refresh(); } })); @@ -736,6 +728,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements public void onSuccess(Void result) { for (LeaderboardGroupDTO group : groups) { removeGroupFromTable(group); + leaderboardGroupsRefresher.updateLeaderboardGroups(availableLeaderboardGroups, LeaderboardGroupConfigPanel.this); } } })); @@ -755,6 +748,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements @Override public void onSuccess(Void v) { removeGroupFromTable(group); + leaderboardGroupsRefresher.updateLeaderboardGroups(availableLeaderboardGroups, LeaderboardGroupConfigPanel.this); } })); } @@ -900,5 +894,4 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements private LeaderboardGroupDTO getSelectedGroup() { return groupsSelectionModel.getSelectedSet().isEmpty() ? null : groupsSelectionModel.getSelectedSet().iterator().next(); } - } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementPanel.java index 739bdd61ffb..2c905a81a0c 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceLogTrackingEventManagementPanel.java @@ -26,6 +26,8 @@ import com.sap.sailing.domain.common.dto.RaceColumnDTO; import com.sap.sailing.domain.common.impl.Util.Triple; import com.sap.sailing.domain.common.racelog.tracking.RaceLogTrackingState; import com.sap.sailing.gwt.ui.client.ErrorReporter; +import com.sap.sailing.gwt.ui.client.LeaderboardsDisplayer; +import com.sap.sailing.gwt.ui.client.LeaderboardsRefresher; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; @@ -37,15 +39,15 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; /** * Allows the user to start and stop tracking of races using the RaceLog-tracking connector. */ -public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConfigPanel { +public class RaceLogTrackingEventManagementPanel extends AbstractLeaderboardConfigPanel implements LeaderboardsDisplayer { private Button startTrackingButton; private TrackFileImportDeviceIdentifierTableWrapper deviceIdentifierTable; - public RaceLogTrackingEventManagementPanel(SailingServiceAsync sailingService, AdminConsoleEntryPoint adminConsole, - RegattaRefresher regattaRefresher, + public RaceLogTrackingEventManagementPanel(SailingServiceAsync sailingService, + RegattaRefresher regattaRefresher, LeaderboardsRefresher leaderboardsRefresher, ErrorReporter errorReporter, StringMessages stringMessages) { - super(sailingService, adminConsole, errorReporter, stringMessages, - new MultiSelectionModel()); + super(sailingService, regattaRefresher, leaderboardsRefresher, errorReporter, + stringMessages, new MultiSelectionModel()); //add upload panel CaptionPanel importPanel = new CaptionPanel(stringMessages.importFixes()); 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 index ff781a2dc3e..81c7631165c 100755 --- 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 @@ -20,12 +20,12 @@ 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.RegattaDisplayer; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.RegattaDTO; -public class RacesListBoxPanel extends FormPanel implements RegattaDisplayer, RaceSelectionChangeListener { +public class RacesListBoxPanel extends FormPanel implements RegattasDisplayer, RaceSelectionChangeListener { private final List raceList; private final ListBox raceListBox; private final RegattaRefresher regattaRefresher; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java index 835b823902e..f36145e4c15 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaListComposite.java @@ -28,7 +28,7 @@ import com.sap.sailing.domain.common.RegattaIdentifier; import com.sap.sailing.domain.common.RegattaName; import com.sap.sailing.domain.common.impl.NaturalComparator; import com.sap.sailing.gwt.ui.client.ErrorReporter; -import com.sap.sailing.gwt.ui.client.RegattaDisplayer; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.RegattaSelectionProvider; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; @@ -40,7 +40,7 @@ import com.sap.sailing.gwt.ui.shared.SeriesDTO; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; -public class RegattaListComposite extends Composite implements RegattaDisplayer { +public class RegattaListComposite extends Composite implements RegattasDisplayer { private final SelectionModel regattaSelectionModel; private final CellTable regattaTable; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaStructureManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaStructureManagementPanel.java index 6209c61820b..e2286d24d44 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaStructureManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RegattaStructureManagementPanel.java @@ -21,11 +21,11 @@ import com.sap.sailing.domain.common.RegattaIdentifier; import com.sap.sailing.domain.common.dto.RegattaCreationParametersDTO; import com.sap.sailing.domain.common.dto.SeriesCreationParametersDTO; import com.sap.sailing.gwt.ui.client.ErrorReporter; -import com.sap.sailing.gwt.ui.client.RegattaDisplayer; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.RegattaSelectionChangeListener; import com.sap.sailing.gwt.ui.client.RegattaSelectionModel; import com.sap.sailing.gwt.ui.client.RegattaSelectionProvider; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.shared.EventDTO; @@ -40,7 +40,7 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; * @author Frank Mittag (C5163974) * */ -public class RegattaStructureManagementPanel extends SimplePanel implements RegattaDisplayer, RegattaSelectionChangeListener { +public class RegattaStructureManagementPanel extends SimplePanel implements RegattasDisplayer, RegattaSelectionChangeListener { private final SailingServiceAsync sailingService; private final ErrorReporter errorReporter; private final StringMessages stringMessages; 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 db75d83ea9e..e575f731afb 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 @@ -15,7 +15,7 @@ import com.sap.sailing.domain.common.RegattaNameAndRaceName; import com.sap.sailing.domain.common.dto.RaceDTO; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.RaceSelectionProvider; -import com.sap.sailing.gwt.ui.client.RegattaDisplayer; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; @@ -24,7 +24,7 @@ import com.sap.sailing.gwt.ui.shared.RegattaDTO; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; /** - * Shows the currently tracked events/races in a table. Updated if subscribed as an {@link RegattaDisplayer}, e.g., with + * Shows the currently tracked events/races in a table. Updated if subscribed as an {@link RegattasDisplayer}, e.g., with * the {@link AdminConsoleEntryPoint}. */ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindPanel.java index b1e22dab841..d6782034940 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindPanel.java @@ -55,7 +55,7 @@ import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener; import com.sap.sailing.gwt.ui.client.RaceSelectionModel; import com.sap.sailing.gwt.ui.client.RaceSelectionProvider; -import com.sap.sailing.gwt.ui.client.RegattaDisplayer; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; @@ -76,7 +76,7 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; * @author Axel Uhl (d043530) * */ -public class WindPanel extends FormPanel implements RegattaDisplayer, WindShower, RaceSelectionChangeListener { +public class WindPanel extends FormPanel implements RegattasDisplayer, WindShower, RaceSelectionChangeListener { private static final String EXPEDITON_IMPORT_PARAMETER_RACES = "races"; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractRegattaPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractRegattaPanel.java index 4b2e742fb54..5d0bb4fa956 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractRegattaPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractRegattaPanel.java @@ -9,7 +9,7 @@ import com.google.gwt.user.client.ui.FormPanel; import com.sap.sailing.gwt.ui.shared.RegattaDTO; //TODO: Do not inherit from FormPanel since the provided functionality is never used! -public abstract class AbstractRegattaPanel extends FormPanel implements RegattaDisplayer { +public abstract class AbstractRegattaPanel extends FormPanel implements RegattasDisplayer { protected final SailingServiceAsync sailingService; protected DateTimeFormatRenderer dateFormatter = new DateTimeFormatRenderer(DateTimeFormat.getFormat(PredefinedFormat.DATE_SHORT)); protected DateTimeFormatRenderer timeFormatter = new DateTimeFormatRenderer(DateTimeFormat.getFormat(PredefinedFormat.TIME_LONG)); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/EventRefresher.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/EventsRefresher.java similarity index 61% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/EventRefresher.java rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/EventsRefresher.java index 5d074fd828a..2000472a956 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/EventRefresher.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/EventsRefresher.java @@ -1,7 +1,5 @@ package com.sap.sailing.gwt.ui.client; -public interface EventRefresher { - +public interface EventsRefresher { void fillEvents(); - } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardGroupRefresher.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardGroupRefresher.java deleted file mode 100644 index 10a757b45fc..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardGroupRefresher.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.sap.sailing.gwt.ui.client; - -public interface LeaderboardGroupRefresher { - - void fillLeaderboardGroups(); - -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardGroupsDisplayer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardGroupsDisplayer.java new file mode 100755 index 00000000000..815c724a13a --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardGroupsDisplayer.java @@ -0,0 +1,7 @@ +package com.sap.sailing.gwt.ui.client; + +import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO; + +public interface LeaderboardGroupsDisplayer { + void fillLeaderboardGroups(Iterable leaderboardGroups); +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardGroupsRefresher.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardGroupsRefresher.java new file mode 100755 index 00000000000..552c148d435 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardGroupsRefresher.java @@ -0,0 +1,24 @@ +package com.sap.sailing.gwt.ui.client; + +import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO; + +public interface LeaderboardGroupsRefresher { + /** + * Fetch all leaderboard groups from the server and distribute to all {@link LeaderboardGroupsDisplayer}s registered. + */ + void fillLeaderboardGroups(); + + /** + * Update all {@link LeaderboardGroupsDisplayer}s registered with the updated collection of leaderboard groups. + * Calling this method is useful for notifying all other {@link LeaderboardGroupsDisplayer}s after one area of the + * UI has actively changed the leaderboard groups collection and has already updated its sequence of + * {@link LeaderboardGroupDTO}s. This does not necessarily create consistency with the leaderboard groups known by + * the server at that time, but at least all areas of the UI that have registered as + * {@link LeaderboardGroupsDisplayer} will show an equal sequence of leaderboard groups. + * + * @param origin + * will not receive a call to its {@link LeaderboardGroupsDisplayer#fillLeaderboardGroups(Iterable)}, assuming that + * the update originated in origin and hence no notification is required. + */ + void updateLeaderboardGroups(Iterable updatedLeaderboardGroups, LeaderboardGroupsDisplayer origin); +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardsDisplayer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardsDisplayer.java new file mode 100755 index 00000000000..22f739c0858 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardsDisplayer.java @@ -0,0 +1,7 @@ +package com.sap.sailing.gwt.ui.client; + +import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO; + +public interface LeaderboardsDisplayer { + void fillLeaderboards(Iterable leaderboards); +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardsRefresher.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardsRefresher.java new file mode 100755 index 00000000000..d0f9cd86018 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LeaderboardsRefresher.java @@ -0,0 +1,24 @@ +package com.sap.sailing.gwt.ui.client; + +import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO; + +public interface LeaderboardsRefresher { + /** + * Fetch all leaderboards from the server as {@link StrippedLeaderboardDTO} objects and distribute to all + * {@link LeaderboardsDisplayer}s registered. + */ + void fillLeaderboards(); + + /** + * Update all {@link LeaderboardsDisplayer}s registered with the updated collection of leaderboards. Calling this + * method is useful for notifying all other {@link LeaderboardsDisplayer}s after one area of the UI has actively + * changed the leaderboard collection and has already updated its sequence of {@link StrippedLeaderboardDTO}s. + * This does not necessarily create consistency with the leaderboards known by the server at that time, but at + * least all areas of the UI that have registered as {@link LeaderboardsDisplayer} will show an equal sequence + * of leaderboards. + * + * @param origin will not receive a call to its {@link LeaderboardsDisplayer#fillLeaderboards(Iterable)}, assuming + * that the update originated in origin and hence no notification is required. + */ + void updateLeaderboards(Iterable updatedLeaderboards, LeaderboardsDisplayer origin); +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RegattaDisplayer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RegattasDisplayer.java similarity index 78% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RegattaDisplayer.java rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RegattasDisplayer.java index d64a267a767..318b01eeee0 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RegattaDisplayer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/RegattasDisplayer.java @@ -4,6 +4,6 @@ import java.util.List; import com.sap.sailing.gwt.ui.shared.RegattaDTO; -public interface RegattaDisplayer { +public interface RegattasDisplayer { void fillRegattas(List result); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/masterdataimport/MasterDataImportPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/masterdataimport/MasterDataImportPanel.java index 00706358012..0dafdf114f9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/masterdataimport/MasterDataImportPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/masterdataimport/MasterDataImportPanel.java @@ -29,8 +29,9 @@ import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.sap.sailing.domain.common.DataImportProgress; import com.sap.sailing.domain.common.MasterDataImportObjectCreationCount; -import com.sap.sailing.gwt.ui.client.EventRefresher; -import com.sap.sailing.gwt.ui.client.LeaderboardGroupRefresher; +import com.sap.sailing.gwt.ui.client.EventsRefresher; +import com.sap.sailing.gwt.ui.client.LeaderboardGroupsRefresher; +import com.sap.sailing.gwt.ui.client.LeaderboardsRefresher; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; @@ -49,20 +50,22 @@ public class MasterDataImportPanel extends VerticalPanel { private SailingServiceAsync sailingService; private CheckBox overrideSwitch; private final RegattaRefresher regattaRefresher; - private final EventRefresher eventRefresher; - private final LeaderboardGroupRefresher leaderboardGroupRefresher; + private final EventsRefresher eventRefresher; + private final LeaderboardsRefresher leaderboardsRefresher; + private final LeaderboardGroupsRefresher leaderboardGroupsRefresher; private CheckBox compressSwitch; private CheckBox exportWindSwitch; private TextBox filterBox; public MasterDataImportPanel(StringMessages stringMessages, SailingServiceAsync sailingService, - RegattaRefresher regattaRefresher, EventRefresher eventRefresher, - LeaderboardGroupRefresher leaderboardGroupRefresher) { + RegattaRefresher regattaRefresher, EventsRefresher eventsRefresher, LeaderboardsRefresher leaderboardsRefresher, + LeaderboardGroupsRefresher leaderboardGroupsRefresher) { this.sailingService = sailingService; this.stringMessages = stringMessages; this.regattaRefresher = regattaRefresher; - this.eventRefresher = eventRefresher; - this.leaderboardGroupRefresher = leaderboardGroupRefresher; + this.eventRefresher = eventsRefresher; + this.leaderboardsRefresher = leaderboardsRefresher; + this.leaderboardGroupsRefresher = leaderboardGroupsRefresher; HorizontalPanel serverAddressPanel = new HorizontalPanel(); serverAddressPanel.add(new Label(stringMessages.importRemoteHost())); @@ -205,7 +208,10 @@ public class MasterDataImportPanel extends VerticalPanel { eventRefresher.fillEvents(); } if (leaderboardGroupsCreated > 0) { - leaderboardGroupRefresher.fillLeaderboardGroups(); + leaderboardGroupsRefresher.fillLeaderboardGroups(); + } + if (leaderboardsCreated > 0) { + leaderboardsRefresher.fillLeaderboards(); } Set overwrittenRegattas = creationCount.getOverwrittenRegattaNames(); showSuccessAlert(leaderboardsCreated, leaderboardGroupsCreated, eventsCreated, regattasCreated, diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/polarsheets/PolarSheetsEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/polarsheets/PolarSheetsEntryPoint.java index 8ca80ae3240..ae8f8715d4e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/polarsheets/PolarSheetsEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/polarsheets/PolarSheetsEntryPoint.java @@ -9,7 +9,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.ServiceDefTarget; import com.google.gwt.user.client.ui.RootLayoutPanel; import com.sap.sailing.gwt.ui.client.AbstractEntryPoint; -import com.sap.sailing.gwt.ui.client.RegattaDisplayer; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.RegattaRefresher; import com.sap.sailing.gwt.ui.client.RemoteServiceMappingConstants; import com.sap.sailing.gwt.ui.client.SailingService; @@ -18,7 +18,7 @@ import com.sap.sailing.gwt.ui.shared.RegattaDTO; public class PolarSheetsEntryPoint extends AbstractEntryPoint implements RegattaRefresher { - private Set regattaDisplayers; + private Set regattaDisplayers; private final SailingServiceAsync sailingService = GWT.create(SailingService.class); @@ -28,7 +28,7 @@ public class PolarSheetsEntryPoint extends AbstractEntryPoint implements Regatta registerASyncService((ServiceDefTarget) sailingService, RemoteServiceMappingConstants.sailingServiceRemotePath); - regattaDisplayers = new HashSet(); + regattaDisplayers = new HashSet(); createUI(); fillRegattas(); } @@ -46,7 +46,7 @@ public class PolarSheetsEntryPoint extends AbstractEntryPoint implements Regatta sailingService.getRegattas(new AsyncCallback>() { @Override public void onSuccess(List result) { - for (RegattaDisplayer regattaDisplayer : regattaDisplayers) { + for (RegattasDisplayer regattaDisplayer : regattaDisplayers) { regattaDisplayer.fillRegattas(result); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/polarsheets/PolarSheetsPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/polarsheets/PolarSheetsPanel.java index 43227986d95..23d428e4c61 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/polarsheets/PolarSheetsPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/polarsheets/PolarSheetsPanel.java @@ -30,7 +30,7 @@ import com.sap.sailing.domain.common.impl.PolarSheetGenerationSettingsImpl; import com.sap.sailing.gwt.ui.client.ErrorReporter; import com.sap.sailing.gwt.ui.client.RaceSelectionChangeListener; import com.sap.sailing.gwt.ui.client.RaceSelectionModel; -import com.sap.sailing.gwt.ui.client.RegattaDisplayer; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.shared.components.Component; @@ -45,7 +45,7 @@ import com.sap.sailing.gwt.ui.shared.RegattaDTO; * @author d054528 Frederik Petersen * */ -public class PolarSheetsPanel extends SplitLayoutPanel implements RaceSelectionChangeListener, RegattaDisplayer, Component { +public class PolarSheetsPanel extends SplitLayoutPanel implements RaceSelectionChangeListener, RegattasDisplayer, Component { public static final String POLARSHEETS_STYLE = "polarSheets"; 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 94e90871dc9..4424fc0bcc9 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 @@ -35,7 +35,7 @@ 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.RegattaDisplayer; +import com.sap.sailing.gwt.ui.client.RegattasDisplayer; import com.sap.sailing.gwt.ui.client.SailingServiceAsync; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.media.MediaSelector; @@ -81,7 +81,7 @@ import com.sap.sse.gwt.client.useragent.UserAgentDetails; * @author Frank Mittag, Axel Uhl (d043530) * */ -public class RaceBoardPanel extends SimplePanel implements RegattaDisplayer, RaceSelectionChangeListener { +public class RaceBoardPanel extends SimplePanel implements RegattasDisplayer, RaceSelectionChangeListener { private final SailingServiceAsync sailingService; private final MediaServiceAsync mediaService; private final UserDTO user;