Moved EditOwnershipDialog to sse.security / added reusable ImagesBarCell

for default actions
This commit is contained in:
Benjamin Barth committed 2018-10-25 10:11:25 +02:00
1 parent d900636c2e
commit 1cfe18b780
14 files changed
+108 -27

No files matched your search

@@ -371,8 +371,7 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
}
});
final DialogConfig<EventDTO> config = EditOwnershipDialog.create(userService.getUserManagementService(), type,
idFactory, event -> updateEvent(event, event),
event -> errorReporter.reportError(stringMessages.errorUpdatingOwnership(event.getName())));
idFactory, event -> updateEvent(event, event), stringMessages);
actionsColumn.addAction(CHANGE_OWNERSHIP.name(), CHANGE_OWNERSHIP, config::openDialog);
eventNameColumn.setSortable(true);
@@ -397,8 +396,8 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
table.addColumn(leaderboardGroupsColumn, stringMessages.leaderboardGroups());
table.addColumn(imagesColumn, stringMessages.images());
table.addColumn(videosColumn, stringMessages.videos());
table.addColumn(groupColumn, com.sap.sse.security.ui.client.i18n.StringMessages.INSTANCE.group());
table.addColumn(userColumn, com.sap.sse.security.ui.client.i18n.StringMessages.INSTANCE.user());
table.addColumn(groupColumn, stringMessages.group());
table.addColumn(userColumn, stringMessages.user());
table.addColumn(actionsColumn, stringMessages.actions());
table.setSelectionModel(eventSelectionCheckboxColumn.getSelectionModel(), eventSelectionCheckboxColumn.getSelectionManager());
@@ -378,8 +378,7 @@ TrackedRaceChangedListener, LeaderboardsDisplayer {
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())));
idFactory, leaderboardDTO -> reloadLeaderboardForTable(leaderboardDTO.getName()), stringMessages);
leaderboardActionColumn.addAction(CHANGE_OWNERSHIP.name(), CHANGE_OWNERSHIP, config::openDialog);
leaderboardTable.addColumn(selectionCheckboxColumn, selectionCheckboxColumn.getHeader());
@@ -624,7 +624,7 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
group.isHasOverallLeaderboard(), group.getOverallLeaderboardDiscardThresholds(),
group.getOverallLeaderboardScoringSchemeType());
updateGroup(group.getName(), group, descriptor);
}, group -> errorReporter.reportError(stringMessages.errorUpdatingOwnership(group.getName())));
}, stringMessages);
actionsColumn.addAction(CHANGE_OWNERSHIP.name(), CHANGE_OWNERSHIP, config::openDialog);
SelectionCheckboxColumn<LeaderboardGroupDTO> leaderboardTableSelectionColumn =
@@ -253,8 +253,7 @@ public class RegattaListComposite extends Composite implements RegattasDisplayer
}
});
final DialogConfig<RegattaDTO> config = EditOwnershipDialog.create(userService.getUserManagementService(), type,
idFactory, this::commitEditedRegatta,
regatta -> errorReporter.reportError(stringMessages.errorUpdatingOwnership(regatta.getName())));
idFactory, this::commitEditedRegatta, stringMessages);
actionsColumn.addAction(CHANGE_OWNERSHIP.name(), CHANGE_OWNERSHIP, config::openDialog);
table.addColumn(regattaSelectionCheckboxColumn, regattaSelectionCheckboxColumn.getHeader());
@@ -11,6 +11,7 @@ import com.sap.sse.gwt.client.DefaultRule_1_0n;
@DefaultLocale("en")
public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
com.sap.sse.security.ui.client.i18n.StringMessages,
com.sap.sse.gwt.adminconsole.StringMessages, CommonStringMessages {
public static final StringMessages INSTANCE = GWT.create(StringMessages.class);
Binary file not shown.

After

Width:  |  Height:  |  Size: 788 B

@@ -8,6 +8,9 @@ public interface IconResources extends ClientBundle {
public static final IconResources INSTANCE = GWT.create(IconResources.class);
@Source("images/change-ownership.png")
ImageResource changeOwnershipIcon();
@Source("images/remove.png")
ImageResource removeIcon();
@@ -40,18 +40,26 @@ public abstract class ImagesBarCell extends AbstractSafeHtmlCell<String> {
private final AbstractImagePrototype imagePrototype;
private final String actionName;
private final String tooltip;
public ImageSpec(String actionName, String tooltip, ImageResource imageResource) {
this(actionName, tooltip, AbstractImagePrototype.create(imageResource));
}
public ImageSpec(String actionName, String tooltip, AbstractImagePrototype imagePrototype) {
super();
this.imagePrototype = imagePrototype;
this.actionName = actionName;
this.tooltip = tooltip;
}
public AbstractImagePrototype getImagePrototype() {
return imagePrototype;
}
public String getActionName() {
return actionName;
}
public String getTooltip() {
return tooltip;
}
@@ -0,0 +1,49 @@
package com.sap.sse.security.ui.client.component;
import java.util.Arrays;
import com.sap.sse.gwt.client.IconResources;
import com.sap.sse.gwt.client.celltable.ImagesBarCell;
import com.sap.sse.security.shared.HasPermissions.DefaultActions;
import com.sap.sse.security.ui.client.i18n.StringMessages;
public class DefaultActionsImagesBarCell extends ImagesBarCell {
public static final String ACTION_DELETE = DefaultActions.DELETE.name();
public static final String ACTION_UPDATE = DefaultActions.UPDATE.name();
public static final String ACTION_CHANGE_OWNERSHIP = DefaultActions.CHANGE_OWNERSHIP.name();
private final StringMessages stringMessages;
public DefaultActionsImagesBarCell(final StringMessages stringMessages) {
this.stringMessages = stringMessages;
}
@Override
protected Iterable<ImageSpec> getImageSpecs() {
return Arrays.asList(getUpdateImageSpec(), getDeleteImageSpec(), getChangeOwnershipImageSpec());
}
/**
* @return {@link ImageSpec} for {@link DefaultActions#UPDATE update} action
*/
protected ImageSpec getUpdateImageSpec() {
return new ImageSpec(ACTION_DELETE, stringMessages.actionEdit(), IconResources.INSTANCE.editIcon());
}
/**
* @return {@link ImageSpec} for {@link DefaultActions#DELETE delete} action
*/
protected ImageSpec getDeleteImageSpec() {
return new ImageSpec(ACTION_DELETE, stringMessages.actionRemove(), IconResources.INSTANCE.removeIcon());
}
/**
* @return {@link ImageSpec} for {@link DefaultActions#CHANGE_OWNERSHIP change ownership} action
*/
protected ImageSpec getChangeOwnershipImageSpec() {
return new ImageSpec(ACTION_CHANGE_OWNERSHIP, stringMessages.actionChangeOwnership(),
IconResources.INSTANCE.changeOwnershipIcon());
}
}
@@ -1,5 +1,7 @@
package com.sap.sse.security.ui.client.component;
import static com.sap.sse.gwt.client.Notification.NotificationType.ERROR;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -9,13 +11,14 @@ import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.domain.common.security.SecuredDomainType;
import com.sap.sse.common.Named;
import com.sap.sse.gwt.client.Notification;
import com.sap.sse.gwt.client.Notification.NotificationType;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.security.shared.HasPermissions;
import com.sap.sse.security.shared.NamedSecuredObjectDTO;
import com.sap.sse.security.shared.Ownership;
import com.sap.sse.security.shared.QualifiedObjectIdentifier;
import com.sap.sse.security.shared.SecuredObject;
import com.sap.sse.security.shared.SecurityUser;
import com.sap.sse.security.shared.UserGroup;
import com.sap.sse.security.shared.impl.OwnershipImpl;
@@ -164,7 +167,7 @@ public class EditOwnershipDialog extends DataEntryDialog<OwnershipDialogResult>
/**
* Creates a new {@link DialogConfig dialog configuration} instance which be (re-)used to
* {@link DialogConfig#openDialog(NamedSecuredObjectDTO) open} a {@link EditOwnershipDialog dialog}.
* {@link DialogConfig#openDialog(Named) open} a {@link EditOwnershipDialog dialog}.
*
* @param userManagementService
* {@link UserManagementServiceAsync} to use to the secured object's ownership
@@ -177,33 +180,34 @@ public class EditOwnershipDialog extends DataEntryDialog<OwnershipDialogResult>
* @param errorCallback
* {@link Consumer callback} to execute when the dialog is confirmed and ownership update fails
*/
public static <T extends NamedSecuredObjectDTO> DialogConfig<T> create(
public static <T extends Named & SecuredObject> DialogConfig<T> create(
final UserManagementServiceAsync userManagementService, final HasPermissions type,
final Function<T, String> typeRelativeIdFactory, final Consumer<T> updateCallback,
final Consumer<T> errorCallback) {
return new DialogConfig<>(userManagementService, type, typeRelativeIdFactory, updateCallback, errorCallback);
final StringMessages stringMessages) {
return new DialogConfig<>(userManagementService, type, typeRelativeIdFactory, updateCallback, stringMessages);
}
public static class DialogConfig<T extends NamedSecuredObjectDTO> {
public static class DialogConfig<T extends Named & SecuredObject> {
private final UserManagementServiceAsync userManagementService;
private final Consumer<T> updateCallback, errorCallback;
private final Consumer<T> updateCallback;
private final Function<T, QualifiedObjectIdentifier> identifierFactory;
private final StringMessages stringMessages;
private DialogConfig(final UserManagementServiceAsync userManagementService, final HasPermissions type,
final Function<T, String> idFactory, final Consumer<T> updateCallback,
final Consumer<T> errorCallback) {
final StringMessages stringMessages) {
this.userManagementService = userManagementService;
this.identifierFactory = idFactory.andThen(type::getQualifiedObjectIdentifier);
this.updateCallback = updateCallback;
this.errorCallback = errorCallback;
this.stringMessages = stringMessages;
}
/**
* Opens a {@link EditOwnershipDialog dialog} to edit ownerships for the provided secured object instance.
*
* @param securedObject
* {@link NamedSecuredObjectDTO secured object} instance to edit ownerships for
* {@link Named} {@link SecuredObject} instance to edit ownerships for
*/
public void openDialog(final T securedObject) {
new EditOwnershipDialog(userManagementService, securedObject.getOwnership(),
@@ -245,7 +249,7 @@ public class EditOwnershipDialog extends DataEntryDialog<OwnershipDialogResult>
@Override
public final void onFailure(Throwable caught) {
errorCallback.accept(securedObject);
Notification.notify(stringMessages.errorUpdatingOwnership(securedObject.getName()), ERROR);
}
}
}
@@ -120,6 +120,8 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages {
String actions();
String actionEdit();
String actionRemove();
String actionChangeOwnership();
String errorUpdatingOwnership(String name);
String doYouReallyWantToRemoveRole(String name);
String errorTryingToDeleteRole(String rolename, String message);
String pleaseEnterARoleName();
@@ -125,6 +125,8 @@ filterRoles=Filter roles
actions=Actions
actionEdit=Edit
actionRemove=Remove
actionChangeOwnership=Change ownership
errorUpdatingOwnership=Error updating ownership of object {0}
doYouReallyWantToRemoveRole=Do you really want to remove role(s) "{0}"?
errorTryingToDeleteRole=Error trying to delete role "{0}": {1}
pleaseEnterARoleName=Please enter a role name
@@ -125,6 +125,8 @@ filterRoles=Rollen filtern
actions=Aktionen
actionEdit=Bearbeiten
actionRemove=Löschen
actionChangeOwnership=Besitzer wechseln
errorUpdatingOwnership=Fehler beim Setzen des Eigners für Objekt {0}
doYouReallyWantToRemoveRole=Rolle(n) "{0}" wirklich löschen?
errorTryingToDeleteRole=Fehler beim Löschen der Rolle "{0}": {1}
pleaseEnterARoleName=Bitte einen Rollennamen eingeben
@@ -1,11 +1,19 @@
package com.sap.sse.security.ui.client.usermanagement;
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 static com.sap.sse.security.ui.client.component.DefaultActionsImagesBarCell.ACTION_CHANGE_OWNERSHIP;
import static com.sap.sse.security.ui.client.component.DefaultActionsImagesBarCell.ACTION_DELETE;
import static com.sap.sse.security.ui.client.component.DefaultActionsImagesBarCell.ACTION_UPDATE;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.function.Function;
import com.google.gwt.cell.client.SafeHtmlCell;
import com.google.gwt.core.client.Callback;
@@ -32,7 +40,6 @@ import com.sap.sse.gwt.client.celltable.TableWrapper;
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.shared.HasPermissions.DefaultActions;
import com.sap.sse.security.shared.Role;
import com.sap.sse.security.shared.UserGroup;
import com.sap.sse.security.shared.WildcardPermission;
@@ -40,7 +47,9 @@ import com.sap.sse.security.shared.impl.SecuredSecurityTypes;
import com.sap.sse.security.ui.client.UserManagementServiceAsync;
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.EditAndRemoveImagesBarCell;
import com.sap.sse.security.ui.client.component.DefaultActionsImagesBarCell;
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;
import com.sap.sse.security.ui.client.i18n.StringMessages;
import com.sap.sse.security.ui.shared.SuccessInfo;
@@ -148,11 +157,12 @@ extends TableWrapper<UserDTO, S, StringMessages, TR> {
}
});
final AccessControlledActionsColumn<UserDTO, EditAndRemoveImagesBarCell> userActionColumn = new AccessControlledActionsColumn<>(
new EditAndRemoveImagesBarCell(stringMessages), userService, SecuredSecurityTypes.USER, UserDTO::getName);
userActionColumn.addAction(EditAndRemoveImagesBarCell.ACTION_EDIT, DefaultActions.UPDATE,
user -> editUser(user, additionalPermissions));
userActionColumn.addAction(EditAndRemoveImagesBarCell.ACTION_REMOVE, DefaultActions.DELETE, user -> {
final HasPermissions type = SecuredSecurityTypes.USER;
final Function<UserDTO, String> idFactory = UserDTO::getName;
final AccessControlledActionsColumn<UserDTO, DefaultActionsImagesBarCell> userActionColumn = new AccessControlledActionsColumn<>(
new DefaultActionsImagesBarCell(stringMessages), userService, type, idFactory);
userActionColumn.addAction(ACTION_UPDATE, UPDATE, user -> editUser(user, additionalPermissions));
userActionColumn.addAction(ACTION_DELETE, DELETE, user -> {
if (Window.confirm(stringMessages.doYouReallyWantToRemoveUser(user.getName()))) {
getUserManagementService().deleteUser(user.getName(), new AsyncCallback<SuccessInfo>() {
@Override
@@ -175,6 +185,9 @@ extends TableWrapper<UserDTO, S, StringMessages, TR> {
});
}
});
final DialogConfig<UserDTO> config = EditOwnershipDialog.create(userService.getUserManagementService(), type,
idFactory, user -> Window.alert("TODO Updating user ownership ..."), stringMessages);
userActionColumn.addAction(ACTION_CHANGE_OWNERSHIP, CHANGE_OWNERSHIP, config::openDialog);
filterField = new LabeledAbstractFilterablePanel<UserDTO>(new Label(stringMessages.filterUsers()),
new ArrayList<UserDTO>(), dataProvider) {