diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventListComposite.java index 694d85881c0..a0c57bec5ba 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventListComposite.java @@ -1,5 +1,6 @@ package com.sap.sailing.gwt.ui.adminconsole; +import static com.sap.sailing.domain.common.security.SecuredDomainType.EVENT; 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; @@ -20,8 +21,6 @@ import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.SafeHtmlCell; import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.safehtml.client.SafeHtmlTemplates; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; @@ -32,17 +31,15 @@ import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler; import com.google.gwt.user.cellview.client.TextColumn; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; -import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.view.client.ListDataProvider; import com.google.gwt.view.client.SelectionChangeEvent; -import com.sap.sailing.domain.common.security.SecuredDomainType; import com.sap.sailing.gwt.ui.adminconsole.LeaderboardGroupDialog.LeaderboardGroupDescriptor; import com.sap.sailing.gwt.ui.client.EntryPointLinkFactory; import com.sap.sailing.gwt.ui.client.EventsRefresher; @@ -71,9 +68,9 @@ 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.gwt.client.panels.LabeledAbstractFilterablePanel; -import com.sap.sse.security.shared.HasPermissions; import com.sap.sse.security.ui.client.UserService; import com.sap.sse.security.ui.client.component.AccessControlledActionsColumn; +import com.sap.sse.security.ui.client.component.AccessControlledButtonPanel; import com.sap.sse.security.ui.client.component.EditOwnershipDialog; import com.sap.sse.security.ui.client.component.EditOwnershipDialog.DialogConfig; import com.sap.sse.security.ui.client.component.SecuredObjectOwnerColumn; @@ -89,18 +86,13 @@ public class EventListComposite extends Composite implements EventsRefresher, Le private final UserService userService; private final ErrorReporter errorReporter; private final StringMessages stringMessages; - - private CellTable eventTable; + private final CellTable eventTable; private final RefreshableMultiSelectionModel refreshableEventSelectionModel; - private ListDataProvider eventListDataProvider; - private List allEvents; - private LabeledAbstractFilterablePanel filterTextbox; - private Button removeEventsButton; + private final ListDataProvider eventListDataProvider; + private final List allEvents; + private final LabeledAbstractFilterablePanel filterTextbox; private final Label noEventsLabel; - private final SimplePanel mainPanel; - private final VerticalPanel panel; - private Iterable availableLeaderboardGroups; public static class AnchorCell extends AbstractCell { @@ -132,63 +124,38 @@ public class EventListComposite extends Composite implements EventsRefresher, Le this.regattaRefresher = regattaRefresher; this.eventsRefresher = eventsRefresher; this.handleTabSelectable = handleTabSelectable; - availableLeaderboardGroups = Collections.emptyList(); - allEvents = new ArrayList(); + this.availableLeaderboardGroups = Collections.emptyList(); + this.allEvents = new ArrayList(); - mainPanel = new SimplePanel(); - panel = new VerticalPanel(); - mainPanel.setWidget(panel); + final VerticalPanel panel = new VerticalPanel(); + final AccessControlledButtonPanel buttonPanel = new AccessControlledButtonPanel(userService, EVENT); + panel.add(buttonPanel); - HorizontalPanel eventControlsPanel = new HorizontalPanel(); - eventControlsPanel.setSpacing(5); - panel.add(eventControlsPanel); + final Button refresh = buttonPanel.addUnsecuredAction(stringMessages.refresh(), this::fillEvents); + refresh.ensureDebugId("RefreshEventsButton"); - Button refreshButton = new Button(stringMessages.refresh()); - refreshButton.ensureDebugId("RefreshEventsButton"); - refreshButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - fillEvents(); - } - }); - eventControlsPanel.add(refreshButton); + final Button create = buttonPanel.addCreateAction(stringMessages.actionAddEvent(), this::openCreateEventDialog); + create.ensureDebugId("CreateEventButton"); - Button createEventBtn = new Button(stringMessages.actionAddEvent()); - createEventBtn.ensureDebugId("CreateEventButton"); - createEventBtn.addClickHandler(new ClickHandler() { + final Button remove = buttonPanel.addRemoveAction(stringMessages.remove(), new Command() { @Override - public void onClick(ClickEvent event) { - openCreateEventDialog(); - } - }); - eventControlsPanel.add(createEventBtn); - if (!userService.hasCurrentUserPermissionToCreateObjectOfType(SecuredDomainType.EVENT)) { - createEventBtn.setVisible(false); - } - - removeEventsButton = new Button(stringMessages.remove()); - removeEventsButton.ensureDebugId("RemoveEventsButton"); - removeEventsButton.setEnabled(false); - removeEventsButton.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - if(askUserForConfirmation()){ + public void execute() { + if (askUserForConfirmation()) { removeEvents(refreshableEventSelectionModel.getSelectedSet()); } } private boolean askUserForConfirmation() { - if(refreshableEventSelectionModel.itemIsSelectedButNotVisible(eventTable.getVisibleItems())){ - final String eventNames = refreshableEventSelectionModel.getSelectedSet().stream().map(e -> e.getName()).collect(Collectors.joining("\n")); + if (refreshableEventSelectionModel.itemIsSelectedButNotVisible(eventTable.getVisibleItems())) { + final String eventNames = refreshableEventSelectionModel.getSelectedSet().stream() + .map(EventDTO::getName).collect(Collectors.joining("\n")); return Window.confirm(stringMessages.doYouReallyWantToRemoveNonVisibleEvents(eventNames)); } return Window.confirm(stringMessages.doYouReallyWantToRemoveEvents()); } }); - eventControlsPanel.add(removeEventsButton); - if (!userService.hasCurrentUserPermissionToDeleteAnyObjectOfType(SecuredDomainType.EVENT)) { - removeEventsButton.setVisible(false); - } + remove.setEnabled(false); + remove.ensureDebugId("RemoveEventsButton"); eventListDataProvider = new ListDataProvider(); filterTextbox = new LabeledAbstractFilterablePanel(new Label(stringMessages.filterEventsByName()), @@ -222,10 +189,10 @@ public class EventListComposite extends Composite implements EventsRefresher, Le this.refreshableEventSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { - final boolean somethingSelected = !refreshableEventSelectionModel.getSelectedSet().isEmpty(); - removeEventsButton.setEnabled(somethingSelected); + remove.setEnabled(!refreshableEventSelectionModel.getSelectedSet().isEmpty()); final int numberOfItemsSelected = refreshableEventSelectionModel.getSelectedSet().size(); - removeEventsButton.setText(numberOfItemsSelected <= 1 ? stringMessages.remove() : stringMessages.removeNumber(numberOfItemsSelected)); + remove.setText(numberOfItemsSelected <= 1 ? stringMessages.remove() + : stringMessages.removeNumber(numberOfItemsSelected)); } }); panel.add(filterTextbox); @@ -235,7 +202,7 @@ public class EventListComposite extends Composite implements EventsRefresher, Le noEventsLabel.setWordWrap(false); panel.add(noEventsLabel); fillEvents(); - initWidget(mainPanel); + initWidget(panel); } private CellTable createEventTable(UserDTO user) { @@ -362,17 +329,16 @@ public class EventListComposite extends Composite implements EventsRefresher, Le final SecuredObjectOwnerColumn groupColumn = SecuredObjectOwnerColumn.getGroupOwnerColumn(); final SecuredObjectOwnerColumn userColumn = SecuredObjectOwnerColumn.getUserOwnerColumn(); - final HasPermissions type = SecuredDomainType.EVENT; final Function idFactory = event -> event.id.toString(); final AccessControlledActionsColumn actionsColumn = new AccessControlledActionsColumn<>( - new EventConfigImagesBarCell(stringMessages), userService, type, idFactory); + new EventConfigImagesBarCell(stringMessages), userService, EVENT, idFactory); actionsColumn.addAction(EventConfigImagesBarCell.ACTION_UPDATE, UPDATE, this::openEditEventDialog); actionsColumn.addAction(EventConfigImagesBarCell.ACTION_DELETE, DELETE, event -> { if (Window.confirm(stringMessages.doYouReallyWantToRemoveEvent(event.getName()))) { removeEvent(event); } }); - final DialogConfig config = EditOwnershipDialog.create(userService.getUserManagementService(), type, + final DialogConfig config = EditOwnershipDialog.create(userService.getUserManagementService(), EVENT, idFactory, event -> fillEvents(), stringMessages); actionsColumn.addAction(EventConfigImagesBarCell.ACTION_CHANGE_OWNERSHIP, CHANGE_OWNERSHIP, config::openDialog);