consolidated loading of leaderboards and leaderboard groups across AdminConsole

This commit is contained in:
Axel Uhl committed 2014-05-29 16:16:04 +02:00
1 parent 8f77b877e7
commit d44529b0b7
24 files changed
+295 -162

No files matched your search

@@ -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<RaceColumnDTO, FleetDTO> {
private static final long serialVersionUID = -8742476113296862662L;
@@ -113,14 +118,15 @@ TrackedRaceChangedListener {
}
}
public AbstractLeaderboardConfigPanel(final SailingServiceAsync sailingService, AdminConsoleEntryPoint adminConsole,
final ErrorReporter errorReporter, StringMessages theStringConstants,
SetSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality> raceColumnTableSelectionModel) {
public AbstractLeaderboardConfigPanel(final SailingServiceAsync sailingService, RegattaRefresher regattaRefresher,
LeaderboardsRefresher leaderboardsRefresher, final ErrorReporter errorReporter,
StringMessages theStringConstants, SetSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality> raceColumnTableSelectionModel) {
this.stringMessages = theStringConstants;
this.sailingService = sailingService;
leaderboardList = new ListDataProvider<StrippedLeaderboardDTO>();
allRegattas = new ArrayList<RegattaDTO>();
this.errorReporter = errorReporter;
this.leaderboardsRefresher = leaderboardsRefresher;
this.availableLeaderboardList = new ArrayList<StrippedLeaderboardDTO>();
mainPanel = new VerticalPanel();
mainPanel.setWidth("100%");
@@ -141,7 +147,8 @@ TrackedRaceChangedListener {
AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
leaderboardTable = new CellTable<StrippedLeaderboardDTO>(/* pageSize */10000, tableRes);
filterLeaderboardPanel = new LabeledAbstractFilterablePanel<StrippedLeaderboardDTO>(lblFilterEvents, availableLeaderboardList, leaderboardTable, leaderboardList) {
filterLeaderboardPanel = new LabeledAbstractFilterablePanel<StrippedLeaderboardDTO>(lblFilterEvents,
availableLeaderboardList, leaderboardTable, leaderboardList) {
@Override
public List<String> getSearchableStrings(StrippedLeaderboardDTO t) {
List<String> strings = new ArrayList<String>();
@@ -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<StrippedLeaderboardDTO> leaderboardTable);
protected abstract void addColumnsToRacesTable(CellTable<RaceColumnDTOAndFleetDTOWithNameBasedEquality> racesTable);
public void loadLeaderboards() {
sailingService.getLeaderboards(new MarkedAsyncCallback<List<StrippedLeaderboardDTO>>(
new AsyncCallback<List<StrippedLeaderboardDTO>>() {
@Override
public void onSuccess(List<StrippedLeaderboardDTO> 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<StrippedLeaderboardDTO> 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;
}
}
@@ -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<TrackedRacesSettings>,
RegattaDisplayer, RaceSelectionChangeListener {
RegattasDisplayer, RaceSelectionChangeListener {
protected final long DEFAULT_LIVE_DELAY_IN_MILLISECONDS = 5000;
@@ -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<RegattaDisplayer> regattaDisplayers;
public class AdminConsoleEntryPoint extends AbstractEntryPoint implements RegattaRefresher, LeaderboardsRefresher, LeaderboardGroupsRefresher {
private Set<RegattasDisplayer> regattasDisplayers;
private Set<LeaderboardsDisplayer> leaderboardsDisplayers;
private Set<LeaderboardGroupsDisplayer> 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<RegattaDisplayer>();
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<Integer> 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<List<StrippedLeaderboardDTO>>(
new AsyncCallback<List<StrippedLeaderboardDTO>>() {
@Override
public void onSuccess(List<StrippedLeaderboardDTO> 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<StrippedLeaderboardDTO> updatedLeaderboards, LeaderboardsDisplayer origin) {
for (LeaderboardsDisplayer leaderboardsDisplayer : leaderboardsDisplayers) {
if (leaderboardsDisplayer != origin) {
leaderboardsDisplayer.fillLeaderboards(updatedLeaderboards);
}
}
}
@Override
public void fillLeaderboardGroups() {
sailingService.getLeaderboardGroups(false /*withGeoLocationData*/,
new MarkedAsyncCallback<List<LeaderboardGroupDTO>>(
new AsyncCallback<List<LeaderboardGroupDTO>>() {
@Override
public void onSuccess(List<LeaderboardGroupDTO> 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<LeaderboardGroupDTO> 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<List<RegattaDTO>>() {
@Override
public void onSuccess(List<RegattaDTO> result) {
for (RegattaDisplayer regattaDisplayer : regattaDisplayers) {
for (RegattasDisplayer regattaDisplayer : regattasDisplayers) {
regattaDisplayer.fillRegattas(result);
}
}
@@ -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<LeaderboardGroupDTO> leaderboardGroups) {
// TODO Auto-generated method stub
}
}
@@ -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<RaceColumnDTOAndFleetDTOWithNameBasedEquality>());
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<RaceColumnDTOAndFleetDTOWithNameBasedEquality>());
this.showRaceDetails = showRaceDetails;
leaderboardTable.ensureDebugId("LeaderboardsCellTable");
}
@@ -857,12 +861,9 @@ TrackedRaceChangedListener {
leaderboardNames.add(leaderboard.name);
}
sailingService.removeLeaderboards(leaderboardNames, new AsyncCallback<Void>() {
@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);
}
}));
}
@@ -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("<a href=\"{0}\">{1}</a>")
@@ -95,13 +99,18 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
private ArrayList<LeaderboardGroupDTO> availableLeaderboardGroups;
private ArrayList<StrippedLeaderboardDTO> 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<LeaderboardGroupDTO>();
availableLeaderboards = new ArrayList<StrippedLeaderboardDTO>();
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<List<LeaderboardGroupDTO>>(
new AsyncCallback<List<LeaderboardGroupDTO>>() {
@Override
public void onSuccess(List<LeaderboardGroupDTO> 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<LeaderboardGroupDTO> groups) {
availableLeaderboardGroups.clear();
if (groups != null) {
Util.addAll(groups, availableLeaderboardGroups);
}
groupsProvider.getList().clear();
groupsProvider.getList().addAll(availableLeaderboardGroups);
}
private void loadLeaderboards() {
sailingService.getLeaderboards(new MarkedAsyncCallback<List<StrippedLeaderboardDTO>>(
new AsyncCallback<List<StrippedLeaderboardDTO>>() {
@Override
public void onFailure(Throwable t) {
errorReporter.reportError("Error trying to obtain list of leaderboards: " + t.getMessage());
}
@Override
public void onSuccess(List<StrippedLeaderboardDTO> leaderboards) {
availableLeaderboards.clear();
if (leaderboards != null) {
availableLeaderboards.addAll(leaderboards);
}
leaderboardsProvider.getList().clear();
leaderboardsProvider.getList().addAll(availableLeaderboards);
}
}));
@Override
public void fillLeaderboards(Iterable<StrippedLeaderboardDTO> 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();
}
}
@@ -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<RaceColumnDTOAndFleetDTOWithNameBasedEquality>());
super(sailingService, regattaRefresher, leaderboardsRefresher, errorReporter,
stringMessages, new MultiSelectionModel<RaceColumnDTOAndFleetDTOWithNameBasedEquality>());
//add upload panel
CaptionPanel importPanel = new CaptionPanel(stringMessages.importFixes());
@@ -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<RaceDTO> raceList;
private final ListBox raceListBox;
private final RegattaRefresher regattaRefresher;
@@ -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<RegattaDTO> regattaSelectionModel;
private final CellTable<RegattaDTO> regattaTable;
@@ -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;
@@ -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 {
@@ -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";
@@ -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));
@@ -1,7 +1,5 @@
package com.sap.sailing.gwt.ui.client;
public interface EventRefresher {
public interface EventsRefresher {
void fillEvents();
}
@@ -1,7 +0,0 @@
package com.sap.sailing.gwt.ui.client;
public interface LeaderboardGroupRefresher {
void fillLeaderboardGroups();
}
@@ -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<LeaderboardGroupDTO> leaderboardGroups);
}
@@ -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 <code>origin</code> and hence no notification is required.
*/
void updateLeaderboardGroups(Iterable<LeaderboardGroupDTO> updatedLeaderboardGroups, LeaderboardGroupsDisplayer origin);
}
@@ -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<StrippedLeaderboardDTO> leaderboards);
}
@@ -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 <code>origin</code> and hence no notification is required.
*/
void updateLeaderboards(Iterable<StrippedLeaderboardDTO> updatedLeaderboards, LeaderboardsDisplayer origin);
}
@@ -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<RegattaDTO> result);
}
@@ -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<String> overwrittenRegattas = creationCount.getOverwrittenRegattaNames();
showSuccessAlert(leaderboardsCreated, leaderboardGroupsCreated, eventsCreated, regattasCreated,
@@ -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<RegattaDisplayer> regattaDisplayers;
private Set<RegattasDisplayer> 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<RegattaDisplayer>();
regattaDisplayers = new HashSet<RegattasDisplayer>();
createUI();
fillRegattas();
}
@@ -46,7 +46,7 @@ public class PolarSheetsEntryPoint extends AbstractEntryPoint implements Regatta
sailingService.getRegattas(new AsyncCallback<List<RegattaDTO>>() {
@Override
public void onSuccess(List<RegattaDTO> result) {
for (RegattaDisplayer regattaDisplayer : regattaDisplayers) {
for (RegattasDisplayer regattaDisplayer : regattaDisplayers) {
regattaDisplayer.fillRegattas(result);
}
}
@@ -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<PolarSheetGenerationSettings> {
public class PolarSheetsPanel extends SplitLayoutPanel implements RaceSelectionChangeListener, RegattasDisplayer, Component<PolarSheetGenerationSettings> {
public static final String POLARSHEETS_STYLE = "polarSheets";
@@ -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;