From edf06530cdc50dcae29cd3201daa38b045467be5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Sch=C3=A4fer?= Date: Thu, 27 Sep 2018 12:15:09 +0200 Subject: [PATCH] Implemented AccessControlledActionsColumn for LeaderboardConfigPanel --- .../AbstractLeaderboardConfigPanel.java | 11 +- .../adminconsole/AdminConsoleEntryPoint.java | 4 +- .../LeaderboardConfigImagesBarCell.java | 13 +- .../adminconsole/LeaderboardConfigPanel.java | 167 +++++++++++------- .../ui/adminconsole/SecuredObjectUtils.java | 5 + ...martphoneTrackingEventManagementPanel.java | 7 +- 6 files changed, 125 insertions(+), 82 deletions(-) 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 b352420c170..5c3ea613f64 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 @@ -60,6 +60,7 @@ import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel; import com.sap.sse.gwt.client.celltable.SelectionCheckboxColumn; import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel; +import com.sap.sse.security.ui.client.UserService; public abstract class AbstractLeaderboardConfigPanel extends FormPanel implements SelectedLeaderboardProvider, RegattasDisplayer, TrackedRaceChangedListener, LeaderboardsDisplayer { @@ -137,9 +138,9 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement } } - public AbstractLeaderboardConfigPanel(final SailingServiceAsync sailingService, RegattaRefresher regattaRefresher, - LeaderboardsRefresher leaderboardsRefresher, final ErrorReporter errorReporter, - StringMessages theStringConstants, boolean multiSelection) { + public AbstractLeaderboardConfigPanel(final SailingServiceAsync sailingService, final UserService userService, + RegattaRefresher regattaRefresher, LeaderboardsRefresher leaderboardsRefresher, + final ErrorReporter errorReporter, StringMessages theStringConstants, boolean multiSelection) { this.stringMessages = theStringConstants; this.sailingService = sailingService; filteredLeaderboardList = new ListDataProvider(); @@ -181,7 +182,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement leaderboardsPanel.add(filterLeaderboardPanel); leaderboardTable.ensureDebugId("AvailableLeaderboardsTable"); - addColumnsToLeaderboardTableAndSetSelectionModel(leaderboardTable, tableRes, + addColumnsToLeaderboardTableAndSetSelectionModel(userService, leaderboardTable, tableRes, filterLeaderboardPanel.getAllListDataProvider()); @SuppressWarnings("unchecked") RefreshableMultiSelectionModel multiSelectionModel = (RefreshableMultiSelectionModel) leaderboardTable @@ -321,7 +322,7 @@ public abstract class AbstractLeaderboardConfigPanel extends FormPanel implement protected abstract void addLeaderboardControls(Panel controlsPanel); protected abstract void addSelectedLeaderboardRacesControls(Panel racesPanel); - protected abstract void addColumnsToLeaderboardTableAndSetSelectionModel(FlushableCellTable leaderboardTable, + protected abstract void addColumnsToLeaderboardTableAndSetSelectionModel(UserService userService, FlushableCellTable leaderboardTable, AdminConsoleTableResources tableRes, ListDataProvider listDataProvider); protected abstract void addColumnsToRacesTable(CellTable racesTable); 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 433b24f9691..411f0c46790 100755 --- 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 @@ -125,7 +125,7 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements /* LEADERBOARDS */ final HorizontalTabLayoutPanel leaderboardTabPanel = panel.addVerticalTab(getStringMessages().leaderboards(), "LeaderboardPanel"); - final LeaderboardConfigPanel leaderboardConfigPanel = new LeaderboardConfigPanel(getSailingService(), this, this, + final LeaderboardConfigPanel leaderboardConfigPanel = new LeaderboardConfigPanel(getSailingService(), getUserService(), this, this, getStringMessages(), /* showRaceDetails */true, this); leaderboardConfigPanel.ensureDebugId("LeaderboardConfiguration"); panel.addToTabPanel(leaderboardTabPanel, new DefaultRefreshableAdminConsolePanel(leaderboardConfigPanel) { @@ -241,7 +241,7 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements regattasDisplayers.add(swisstimingEventManagementPanel); final SmartphoneTrackingEventManagementPanel raceLogTrackingEventManagementPanel = new SmartphoneTrackingEventManagementPanel( - getSailingService(), this, this, this, getStringMessages()); + getSailingService(), getUserService(), this, this, this, getStringMessages()); raceLogTrackingEventManagementPanel.ensureDebugId("SmartphoneTrackingPanel"); panel.addToTabPanel(connectorsTabPanel, new DefaultRefreshableAdminConsolePanel(raceLogTrackingEventManagementPanel) { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigImagesBarCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigImagesBarCell.java index 3a59e9f37d7..67c1036f858 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigImagesBarCell.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LeaderboardConfigImagesBarCell.java @@ -1,18 +1,17 @@ package com.sap.sailing.gwt.ui.adminconsole; -import java.util.Arrays; +import java.util.Arrays; import com.google.gwt.core.client.GWT; import com.google.gwt.text.shared.SafeHtmlRenderer; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sse.gwt.client.IconResources; import com.sap.sse.gwt.client.celltable.ImagesBarCell; +import com.sap.sse.security.shared.HasPermissions.DefaultActions; public class LeaderboardConfigImagesBarCell extends ImagesBarCell { - public static final String ACTION_REMOVE = "ACTION_REMOVE"; public static final String ACTION_EDIT_SCORES = "ACTION_EDIT_SCORES"; public static final String ACTION_EDIT_COMPETITORS = "ACTION_EDIT_COMPETITORS"; - public static final String ACTION_EDIT = "ACTION_EDIT"; public static final String ACTION_CONFIGURE_URL = "ACTION_CONFIGURE_URL"; public static final String ACTION_EXPORT_XML = "ACTION_EXPORT_XML"; public static final String ACTION_OPEN_COACH_DASHBOARD = "ACTION_OPEN_COACH_DASHBOARD"; @@ -35,11 +34,15 @@ public class LeaderboardConfigImagesBarCell extends ImagesBarCell { @Override protected Iterable getImageSpecs() { return Arrays.asList( - new ImageSpec(ACTION_EDIT, stringMessages.actionEdit(), makeImagePrototype(IconResources.INSTANCE.editIcon())), + new ImageSpec(DefaultActions.UPDATE.name(), stringMessages.actionEdit(), + makeImagePrototype(IconResources.INSTANCE.editIcon())), new ImageSpec(ACTION_EDIT_SCORES, stringMessages.actionEditScores(), makeImagePrototype(resources.scoresIcon())), new ImageSpec(ACTION_EDIT_COMPETITORS, stringMessages.actionEditCompetitors(), makeImagePrototype(resources.competitorsIcon())), new ImageSpec(ACTION_CONFIGURE_URL, stringMessages.actionConfigureUrl(), makeImagePrototype(resources.settingsActionIcon())), - new ImageSpec(ACTION_REMOVE, stringMessages.actionRemove(), makeImagePrototype(IconResources.INSTANCE.removeIcon())), + new ImageSpec(DefaultActions.DELETE.name(), stringMessages.actionRemove(), + makeImagePrototype(IconResources.INSTANCE.removeIcon())), + new ImageSpec(DefaultActions.CHANGE_OWNERSHIP.name(), stringMessages.changeOwnership(), + makeImagePrototype(resources.competitorsIcon())), new ImageSpec(ACTION_EXPORT_XML, stringMessages.actionExportXML(), makeImagePrototype(resources.exportXMLIcon())), new ImageSpec(ACTION_OPEN_COACH_DASHBOARD, stringMessages.actionOpenDashboard(), makeImagePrototype(resources.openCoachDashboard())), new ImageSpec(ACTION_SHOW_REGATTA_LOG, stringMessages.regattaLog(), makeImagePrototype(resources.flagIcon())), 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 55a1b1b1377..6442afca634 100644 --- 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 @@ -1,5 +1,9 @@ package com.sap.sailing.gwt.ui.adminconsole; +import static com.sap.sse.security.shared.HasPermissions.DefaultActions.CHANGE_OWNERSHIP; +import static com.sap.sse.security.shared.HasPermissions.DefaultActions.DELETE; +import static com.sap.sse.security.shared.HasPermissions.DefaultActions.UPDATE; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -9,6 +13,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -44,6 +49,7 @@ import com.sap.sailing.domain.common.dto.CompetitorWithBoatDTO; import com.sap.sailing.domain.common.dto.FleetDTO; import com.sap.sailing.domain.common.dto.PairingListTemplateDTO; import com.sap.sailing.domain.common.dto.RaceColumnDTO; +import com.sap.sailing.domain.common.security.SecuredDomainType; import com.sap.sailing.gwt.settings.client.EntryPointWithSettingsLinkFactory; import com.sap.sailing.gwt.settings.client.leaderboard.AbstractLeaderboardPerspectiveLifecycle; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardContextDefinition; @@ -53,6 +59,7 @@ import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettingsDialogComponent; import com.sap.sailing.gwt.settings.client.leaderboard.MetaLeaderboardPerspectiveLifecycle; import com.sap.sailing.gwt.ui.adminconsole.DisablableCheckboxCell.IsEnabled; +import com.sap.sailing.gwt.ui.adminconsole.EditOwnershipDialog.DialogConfig; import com.sap.sailing.gwt.ui.client.EntryPointLinkFactory; import com.sap.sailing.gwt.ui.client.LeaderboardsDisplayer; import com.sap.sailing.gwt.ui.client.LeaderboardsRefresher; @@ -81,6 +88,8 @@ import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; import com.sap.sse.gwt.client.shared.components.LinkWithSettingsGenerator; import com.sap.sse.gwt.client.shared.components.SettingsDialogForLinkSharing; import com.sap.sse.gwt.client.shared.perspective.PerspectiveCompositeSettings; +import com.sap.sse.security.shared.HasPermissions; +import com.sap.sse.security.ui.client.UserService; public class LeaderboardConfigPanel extends AbstractLeaderboardConfigPanel implements SelectedLeaderboardProvider, RegattasDisplayer, TrackedRaceChangedListener, LeaderboardsDisplayer { @@ -106,10 +115,10 @@ TrackedRaceChangedListener, LeaderboardsDisplayer { SafeHtml cell(SafeUri url, String displayName); } - public LeaderboardConfigPanel(final SailingServiceAsync sailingService, RegattaRefresher regattaRefresher, - final ErrorReporter errorReporter, StringMessages theStringConstants, final boolean showRaceDetails, - LeaderboardsRefresher leaderboardsRefresher) { - super(sailingService, regattaRefresher, leaderboardsRefresher, errorReporter, theStringConstants, + public LeaderboardConfigPanel(final SailingServiceAsync sailingService, final UserService userService, + RegattaRefresher regattaRefresher, final ErrorReporter errorReporter, StringMessages theStringConstants, + final boolean showRaceDetails, LeaderboardsRefresher leaderboardsRefresher) { + super(sailingService, userService, regattaRefresher, leaderboardsRefresher, errorReporter, theStringConstants, /* multi-selection */ false); this.showRaceDetails = showRaceDetails; leaderboardTable.ensureDebugId("LeaderboardsCellTable"); @@ -170,7 +179,7 @@ TrackedRaceChangedListener, LeaderboardsDisplayer { } @Override - protected void addColumnsToLeaderboardTableAndSetSelectionModel(final FlushableCellTable leaderboardTable, + protected void addColumnsToLeaderboardTableAndSetSelectionModel(final UserService userService, final FlushableCellTable leaderboardTable, AdminConsoleTableResources tableResources, ListDataProvider listDataProvider) { ListHandler leaderboardColumnListHandler = new ListHandler( filteredLeaderboardList.getList()); @@ -311,60 +320,65 @@ TrackedRaceChangedListener, LeaderboardsDisplayer { } }); - ImagesBarColumn leaderboardActionColumn = new ImagesBarColumn( - new LeaderboardConfigImagesBarCell(stringMessages)); - leaderboardActionColumn.setFieldUpdater(new FieldUpdater() { - @Override - public void update(int index, StrippedLeaderboardDTO leaderboardDTO, String value) { - if (LeaderboardConfigImagesBarCell.ACTION_REMOVE.equals(value)) { - if (Window.confirm(stringMessages.doYouReallyWantToRemoveLeaderboard(leaderboardDTO.getName()))) { - removeLeaderboard(leaderboardDTO); - } - } else if (LeaderboardConfigImagesBarCell.ACTION_EDIT.equals(value)) { - editLeaderboard(leaderboardDTO); - } else if (LeaderboardConfigImagesBarCell.ACTION_EDIT_SCORES.equals(value)) { - String leaderboardEditingUrl = EntryPointWithSettingsLinkFactory.createLeaderboardEditingLink(leaderboardDTO.getName()); - Window.open(leaderboardEditingUrl, "_blank", null); - } else if (LeaderboardConfigImagesBarCell.ACTION_EDIT_COMPETITORS.equals(value)) { - EditCompetitorsDialog editCompetitorsDialog = new EditCompetitorsDialog(sailingService, leaderboardDTO.getName(), stringMessages, - errorReporter, new DialogCallback>() { - @Override - public void cancel() { - } - - @Override - public void ok(final List result) { - } - }); - editCompetitorsDialog.show(); - } else if (LeaderboardConfigImagesBarCell.ACTION_CONFIGURE_URL.equals(value)) { - sailingService.getAvailableDetailTypesForLeaderboard(leaderboardDTO.getName(), null, new AsyncCallback>() { - - @Override - public void onFailure(Throwable caught) { - logger.log(Level.WARNING, "Could not load detailtypes for leaderboard", caught); - } - - @Override - public void onSuccess(Iterable result) { - openLeaderboardUrlConfigDialog(leaderboardDTO, result); - } - }); - } else if (LeaderboardConfigImagesBarCell.ACTION_EXPORT_XML.equals(value)) { - Window.open(UriUtils.fromString("/export/xml?domain=leaderboard&name=" + leaderboardDTO.getName()).asString(), "", null); - } else if (LeaderboardConfigImagesBarCell.ACTION_OPEN_COACH_DASHBOARD.equals(value)) { - Map dashboardURLParameters = new HashMap(); - dashboardURLParameters.put("leaderboardName", leaderboardDTO.getName()); - Window.open(EntryPointLinkFactory.createDashboardLink(dashboardURLParameters), "", null); - } else if (LeaderboardConfigImagesBarCell.ACTION_SHOW_REGATTA_LOG.equals(value)) { - showRegattaLog(); - } else if (LeaderboardConfigImagesBarCell.ACTION_CREATE_PAIRINGLIST.equals(value)) { - createPairingListTemplate(leaderboardDTO); - } else if (LeaderboardConfigImagesBarCell.ACTION_PRINT_PAIRINGLIST.equals(value)) { - openPairingListEntryPoint(leaderboardDTO); - } + final HasPermissions type = SecuredDomainType.LEADERBOARD; + final Function idFactory = SecuredObjectUtils::getTypeRelativeObjectIdentifier; + final AccessControlledActionsColumn leaderboardActionColumn = new AccessControlledActionsColumn<>( + new LeaderboardConfigImagesBarCell(stringMessages), userService, type, idFactory); + + leaderboardActionColumn.addAction(UPDATE.name(), UPDATE, this::editLeaderboard); + leaderboardActionColumn.addAction(DELETE.name(), DELETE, leaderboardDTO -> { + if (Window.confirm(stringMessages.doYouReallyWantToRemoveLeaderboard(leaderboardDTO.getName()))) { + removeLeaderboard(leaderboardDTO); } }); + leaderboardActionColumn.addAction(LeaderboardConfigImagesBarCell.ACTION_EDIT_SCORES, leaderboardDTO -> { + String leaderboardEditingUrl = EntryPointWithSettingsLinkFactory.createLeaderboardEditingLink(leaderboardDTO.getName()); + Window.open(leaderboardEditingUrl, "_blank", null); + }); + leaderboardActionColumn.addAction(LeaderboardConfigImagesBarCell.ACTION_EDIT_COMPETITORS, UPDATE, leaderboardDTO -> { + EditCompetitorsDialog editCompetitorsDialog = new EditCompetitorsDialog(sailingService, leaderboardDTO.getName(), stringMessages, + errorReporter, new DialogCallback>() { + @Override + public void cancel() { + } + + @Override + public void ok(final List result) { + } + }); + editCompetitorsDialog.show(); + }); + leaderboardActionColumn.addAction(LeaderboardConfigImagesBarCell.ACTION_CONFIGURE_URL, leaderboardDTO -> { + sailingService.getAvailableDetailTypesForLeaderboard(leaderboardDTO.getName(), null, new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + logger.log(Level.WARNING, "Could not load detailtypes for leaderboard", caught); + } + + @Override + public void onSuccess(Iterable result) { + openLeaderboardUrlConfigDialog(leaderboardDTO, result); + } + }); + }); + leaderboardActionColumn.addAction(LeaderboardConfigImagesBarCell.ACTION_EXPORT_XML, leaderboardDTO -> + Window.open(UriUtils.fromString("/export/xml?domain=leaderboard&name=" + leaderboardDTO.getName()).asString(), "", null) + ); + leaderboardActionColumn.addAction(LeaderboardConfigImagesBarCell.ACTION_OPEN_COACH_DASHBOARD, leaderboardDTO -> { + Map dashboardURLParameters = new HashMap(); + dashboardURLParameters.put("leaderboardName", leaderboardDTO.getName()); + Window.open(EntryPointLinkFactory.createDashboardLink(dashboardURLParameters), "", null); + }); + leaderboardActionColumn.addAction(LeaderboardConfigImagesBarCell.ACTION_SHOW_REGATTA_LOG, leaderboardDTO -> showRegattaLog()); + leaderboardActionColumn.addAction(LeaderboardConfigImagesBarCell.ACTION_CREATE_PAIRINGLIST, this::createPairingListTemplate); + leaderboardActionColumn.addAction(LeaderboardConfigImagesBarCell.ACTION_PRINT_PAIRINGLIST, this::openPairingListEntryPoint); + + final DialogConfig config = EditOwnershipDialog.create(userService.getUserManagementService(), type, + idFactory, leaderboardDTO -> reloadLeaderboardForTable(leaderboardDTO.getName()), + leaderboardDTO -> errorReporter.reportError(stringMessages.errorUpdatingOwnership(leaderboardDTO.getName()))); + leaderboardActionColumn.addAction(CHANGE_OWNERSHIP.name(), CHANGE_OWNERSHIP, config::openDialog); + leaderboardTable.addColumn(selectionCheckboxColumn, selectionCheckboxColumn.getHeader()); leaderboardTable.addColumn(linkColumn, stringMessages.name()); leaderboardTable.addColumn(leaderboardDisplayNameColumn, stringMessages.displayName()); @@ -1002,19 +1016,38 @@ TrackedRaceChangedListener, LeaderboardsDisplayer { @Override public void onSuccess(StrippedLeaderboardDTO updatedLeaderboard) { - int indexOfLeaderboard = 0; - for (int i = 0; i < filteredLeaderboardList.getList().size(); i++) { - StrippedLeaderboardDTO dao = filteredLeaderboardList.getList().get(i); - if (dao.getName().equals(oldLeaderboardName)) { - indexOfLeaderboard = i; - break; - } - } - filteredLeaderboardList.getList().set(indexOfLeaderboard, updatedLeaderboard); - filteredLeaderboardList.refresh(); + refreshLeaderboardInTable(oldLeaderboardName, updatedLeaderboard); } }); } + + private void reloadLeaderboardForTable(final String leaderboardName) { + sailingService.getLeaderboard(leaderboardName, new AsyncCallback() { + @Override + public void onSuccess(StrippedLeaderboardDTO result) { + refreshLeaderboardInTable(leaderboardName, result); + } + + @Override + public void onFailure(Throwable caught) { + errorReporter.reportError("Error trying to load leaderboard " + leaderboardName + ": " + + caught.getMessage()); + } + }); + } + + private void refreshLeaderboardInTable(final String oldLeaderboardName, StrippedLeaderboardDTO updatedLeaderboard) { + int indexOfLeaderboard = 0; + for (int i = 0; i < filteredLeaderboardList.getList().size(); i++) { + StrippedLeaderboardDTO dao = filteredLeaderboardList.getList().get(i); + if (dao.getName().equals(oldLeaderboardName)) { + indexOfLeaderboard = i; + break; + } + } + filteredLeaderboardList.getList().set(indexOfLeaderboard, updatedLeaderboard); + filteredLeaderboardList.refresh(); + } private void removeLeaderboards(final Collection leaderboards) { if (!leaderboards.isEmpty()) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SecuredObjectUtils.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SecuredObjectUtils.java index 388920e35cf..fa0e6e0fd06 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SecuredObjectUtils.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SecuredObjectUtils.java @@ -13,6 +13,7 @@ import com.sap.sailing.domain.common.dto.NamedSecuredObjectDTO; import com.sap.sailing.gwt.ui.shared.EventDTO; 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.sse.common.Named; import com.sap.sse.security.shared.Ownership; import com.sap.sse.security.ui.client.i18n.StringMessages; @@ -32,6 +33,10 @@ public class SecuredObjectUtils { public static String getTypeRelativeObjectIdentifier(final LeaderboardGroupDTO securedObject) { return securedObject.getId().toString(); } + + public static String getTypeRelativeObjectIdentifier(final StrippedLeaderboardDTO securedObject) { + return securedObject.getName(); + } /** * Adds sort-able {@link Column column}s to the provided {@link AbstractCellTable cell table} showing group owner diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java index 3016537a7c2..c525753dc98 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/SmartphoneTrackingEventManagementPanel.java @@ -74,6 +74,7 @@ import com.sap.sse.gwt.client.celltable.ImagesBarColumn; import com.sap.sse.gwt.client.celltable.SelectionCheckboxColumn; import com.sap.sse.gwt.client.dialog.DataEntryDialog; import com.sap.sse.gwt.client.dialog.DataEntryDialog.DialogCallback; +import com.sap.sse.security.ui.client.UserService; /** * Allows the user to start and stop tracking of races using the RaceLog-tracking connector. @@ -87,10 +88,10 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC protected boolean regattaHasCompetitors = false; private Map, Pair> raceWithStartAndEndOfTrackingTime = new HashMap<>(); - public SmartphoneTrackingEventManagementPanel(SailingServiceAsync sailingService, + public SmartphoneTrackingEventManagementPanel(SailingServiceAsync sailingService, UserService userService, RegattaRefresher regattaRefresher, LeaderboardsRefresher leaderboardsRefresher, ErrorReporter errorReporter, StringMessages stringMessages) { - super(sailingService, regattaRefresher, leaderboardsRefresher, errorReporter, + super(sailingService, userService, regattaRefresher, leaderboardsRefresher, errorReporter, stringMessages, /* multiSelection */ true); // add upload panel CaptionPanel importPanel = new CaptionPanel(stringMessages.importFixes()); @@ -124,7 +125,7 @@ public class SmartphoneTrackingEventManagementPanel extends AbstractLeaderboardC } @Override - protected void addColumnsToLeaderboardTableAndSetSelectionModel(FlushableCellTable leaderboardTable, + protected void addColumnsToLeaderboardTableAndSetSelectionModel(UserService userService, FlushableCellTable leaderboardTable, AdminConsoleTableResources tableResources, ListDataProvider listDataProvider) { ListHandler leaderboardColumnListHandler = new ListHandler( filteredLeaderboardList.getList());