Implemented AccessControlledActionsColumn for LeaderboardConfigPanel

This commit is contained in:
Steffen Schäfer committed 2018-09-27 12:25:44 +02:00
1 parent abc3dc9b09
commit edf06530cd
6 files changed
+125 -82

No files matched your search

@@ -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<StrippedLeaderboardDTO>();
@@ -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<StrippedLeaderboardDTO> multiSelectionModel = (RefreshableMultiSelectionModel<StrippedLeaderboardDTO>) 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<StrippedLeaderboardDTO> leaderboardTable,
protected abstract void addColumnsToLeaderboardTableAndSetSelectionModel(UserService userService, FlushableCellTable<StrippedLeaderboardDTO> leaderboardTable,
AdminConsoleTableResources tableRes, ListDataProvider<StrippedLeaderboardDTO> listDataProvider);
protected abstract void addColumnsToRacesTable(CellTable<RaceColumnDTOAndFleetDTOWithNameBasedEquality> racesTable);
@@ -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>(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<SmartphoneTrackingEventManagementPanel>(raceLogTrackingEventManagementPanel) {
@Override
@@ -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<ImageSpec> 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())),
@@ -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<StrippedLeaderboardDTO> leaderboardTable,
protected void addColumnsToLeaderboardTableAndSetSelectionModel(final UserService userService, final FlushableCellTable<StrippedLeaderboardDTO> leaderboardTable,
AdminConsoleTableResources tableResources, ListDataProvider<StrippedLeaderboardDTO> listDataProvider) {
ListHandler<StrippedLeaderboardDTO> leaderboardColumnListHandler = new ListHandler<StrippedLeaderboardDTO>(
filteredLeaderboardList.getList());
@@ -311,60 +320,65 @@ TrackedRaceChangedListener, LeaderboardsDisplayer {
}
});
ImagesBarColumn<StrippedLeaderboardDTO, LeaderboardConfigImagesBarCell> leaderboardActionColumn = new ImagesBarColumn<StrippedLeaderboardDTO, LeaderboardConfigImagesBarCell>(
new LeaderboardConfigImagesBarCell(stringMessages));
leaderboardActionColumn.setFieldUpdater(new FieldUpdater<StrippedLeaderboardDTO, String>() {
@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<List<CompetitorWithBoatDTO>>() {
@Override
public void cancel() {
}
@Override
public void ok(final List<CompetitorWithBoatDTO> result) {
}
});
editCompetitorsDialog.show();
} else if (LeaderboardConfigImagesBarCell.ACTION_CONFIGURE_URL.equals(value)) {
sailingService.getAvailableDetailTypesForLeaderboard(leaderboardDTO.getName(), null, new AsyncCallback<Iterable<DetailType>>() {
@Override
public void onFailure(Throwable caught) {
logger.log(Level.WARNING, "Could not load detailtypes for leaderboard", caught);
}
@Override
public void onSuccess(Iterable<DetailType> 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<String, String> dashboardURLParameters = new HashMap<String, String>();
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<StrippedLeaderboardDTO, String> idFactory = SecuredObjectUtils::getTypeRelativeObjectIdentifier;
final AccessControlledActionsColumn<StrippedLeaderboardDTO, LeaderboardConfigImagesBarCell> 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<List<CompetitorWithBoatDTO>>() {
@Override
public void cancel() {
}
@Override
public void ok(final List<CompetitorWithBoatDTO> result) {
}
});
editCompetitorsDialog.show();
});
leaderboardActionColumn.addAction(LeaderboardConfigImagesBarCell.ACTION_CONFIGURE_URL, leaderboardDTO -> {
sailingService.getAvailableDetailTypesForLeaderboard(leaderboardDTO.getName(), null, new AsyncCallback<Iterable<DetailType>>() {
@Override
public void onFailure(Throwable caught) {
logger.log(Level.WARNING, "Could not load detailtypes for leaderboard", caught);
}
@Override
public void onSuccess(Iterable<DetailType> 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<String, String> dashboardURLParameters = new HashMap<String, String>();
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<StrippedLeaderboardDTO> 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<StrippedLeaderboardDTO>() {
@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<StrippedLeaderboardDTO> leaderboards) {
if (!leaderboards.isEmpty()) {
@@ -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
@@ -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<Triple<String, String, String>, Pair<TimePointSpecificationFoundInLog, TimePointSpecificationFoundInLog>> 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<StrippedLeaderboardDTO> leaderboardTable,
protected void addColumnsToLeaderboardTableAndSetSelectionModel(UserService userService, FlushableCellTable<StrippedLeaderboardDTO> leaderboardTable,
AdminConsoleTableResources tableResources, ListDataProvider<StrippedLeaderboardDTO> listDataProvider) {
ListHandler<StrippedLeaderboardDTO> leaderboardColumnListHandler = new ListHandler<StrippedLeaderboardDTO>(
filteredLeaderboardList.getList());