mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-16 10:48:47 +00:00
bug6239: fix the selenium test + groupdefinitionpanel/usergroupdetailpanel remove buttons update with counter and check for update permission
This commit is contained in:
+24
-5
@@ -13,6 +13,7 @@ import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SetSelectionModel;
|
||||
import com.sap.sse.common.Named;
|
||||
import com.sap.sse.security.shared.HasPermissions;
|
||||
@@ -108,18 +109,36 @@ public class AccessControlledButtonPanel extends Composite {
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a secured action button, which is only visible if the current user has any
|
||||
* {@link UserService#hasCurrentUserPermissionToDeleteAnyObjectOfType(HasPermissions) delete permission} for the
|
||||
* {@link HasPermissions type} provided in this {@link AccessControlledButtonPanel}'s constructor.
|
||||
* Like {@link #addRemoveAction(String, SetSelectionModel, boolean, Command)} but for rows that are not
|
||||
* {@link SecuredDTO} instances themselves — use this when the permission to remove entries is governed by a parent
|
||||
* secured object (e.g. UPDATE permission on the owning {@link UserGroup}) rather than per-row permissions. The
|
||||
* button is {@link Button#setEnabled(boolean) enabled} when the selection is non-empty and the current user has
|
||||
* {@link DefaultActions#UPDATE UPDATE} permission on the object supplied by {@code parentSecuredObject}; it shows
|
||||
* the selected count in its label.
|
||||
*
|
||||
* @param text
|
||||
* the {@link String text} to show on the button
|
||||
* @param selectionModel
|
||||
* the {@link MultiSelectionModel} of the sub-table; drives the count shown in the button label and the
|
||||
* enabled state
|
||||
* @param parentSecuredObject
|
||||
* supplies the parent {@link SecuredDTO} whose UPDATE permission gates the button; may return
|
||||
* {@code null} when nothing is selected, which disables the button
|
||||
* @param callback
|
||||
* the {@link Command callback} to execute on button click, if permission is granted
|
||||
* @return the created {@link Button} instance
|
||||
*/
|
||||
public Button addRemoveAction(final String text, final Command callback) {
|
||||
return addAction(text, removePermissionCheck, callback);
|
||||
public <T> Button addRemoveAction(final String text, final MultiSelectionModel<T> selectionModel,
|
||||
final Supplier<SecuredDTO> parentSecuredObject, final Command callback) {
|
||||
final Button button = resolveButtonVisibility(removePermissionCheck,
|
||||
new Button(text, wrap(removePermissionCheck, callback)));
|
||||
selectionModel.addSelectionChangeHandler(event -> {
|
||||
final int count = selectionModel.getSelectedSet().size();
|
||||
button.setText(count > 0 ? text + " (" + count + ")" : text);
|
||||
button.setEnabled(count > 0 && userService.hasPermission(parentSecuredObject.get(), DefaultActions.UPDATE));
|
||||
});
|
||||
button.setEnabled(false);
|
||||
return button;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+4
-6
@@ -110,12 +110,10 @@ public class RoleDefinitionsPanel extends VerticalPanel {
|
||||
this::createRoleDefinition);
|
||||
createButton.ensureDebugId("CreateRoleButton");
|
||||
final Button removeButton = buttonPanel.addRemoveAction(stringMessages.remove(), roleSelectionModel, true,
|
||||
() -> {final String roles = String.join(", ", Util.map(getSelectedRoleDefinitions(), RoleDefinitionDTO::getName));
|
||||
if (Window.confirm(stringMessages.doYouReallyWantToRemoveRole(roles))) {
|
||||
final Set<RoleDefinitionDTO> selectedRoles = new HashSet<>(getSelectedRoleDefinitions());
|
||||
filterablePanelRoleDefinitions.removeAll(selectedRoles);
|
||||
}
|
||||
});
|
||||
() -> {
|
||||
final Set<RoleDefinitionDTO> selectedRoles = new HashSet<>(getSelectedRoleDefinitions());
|
||||
filterablePanelRoleDefinitions.removeAll(selectedRoles);
|
||||
});
|
||||
removeButton.ensureDebugId("RemoveRoleButton");
|
||||
add(buttonPanel);
|
||||
add(filterablePanelRoleDefinitions);
|
||||
|
||||
+5
-6
@@ -26,6 +26,7 @@ import com.sap.sse.gwt.client.celltable.TableWrapper;
|
||||
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
|
||||
import com.sap.sse.security.shared.dto.StrippedRoleDefinitionDTO;
|
||||
import com.sap.sse.security.shared.dto.UserGroupDTO;
|
||||
import com.sap.sse.security.shared.dto.SecuredDTO;
|
||||
import com.sap.sse.security.ui.client.UserManagementWriteServiceAsync;
|
||||
import com.sap.sse.security.ui.client.UserService;
|
||||
import com.sap.sse.security.ui.client.component.AccessControlledButtonPanel;
|
||||
@@ -122,9 +123,10 @@ public class GroupRoleDefinitionPanel extends Composite
|
||||
}
|
||||
});
|
||||
addButton.ensureDebugId("AddGroupUserButton");
|
||||
final Button removeButton = buttonPanel.addUpdateAction(stringMessages.removeRole(), () -> {
|
||||
Pair<StrippedRoleDefinitionDTO, Boolean> selectedRole = roleDefinitionTableWrapper.getSelectionModel()
|
||||
.getSelectedObject();
|
||||
buttonPanel.addRemoveAction(stringMessages.removeRole(),
|
||||
roleDefinitionTableWrapper.getSelectionModel(),
|
||||
() -> (SecuredDTO) TableWrapper.getSingleSelectedObjectOrNull(userGroupSelectionModel), () -> {
|
||||
final Pair<StrippedRoleDefinitionDTO, Boolean> selectedRole = TableWrapper.getSingleSelectedObjectOrNull(roleDefinitionTableWrapper.getSelectionModel());
|
||||
if (selectedRole == null) {
|
||||
Window.alert(stringMessages.youHaveToSelectAUserGroup());
|
||||
} else if (Window.confirm(stringMessages.doYouReallyWantToRemoveRole(selectedRole.getA().getName()))) {
|
||||
@@ -148,9 +150,6 @@ public class GroupRoleDefinitionPanel extends Composite
|
||||
}
|
||||
}
|
||||
});
|
||||
roleDefinitionTableWrapper.getSelectionModel().addSelectionChangeHandler(event -> removeButton
|
||||
.setEnabled(!roleDefinitionTableWrapper.getSelectionModel().getSelectedSet().isEmpty()));
|
||||
removeButton.setEnabled(false);
|
||||
buttonPanel.insertWidgetAtPosition(suggestRole, 0);
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
+3
-3
@@ -17,7 +17,7 @@ import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.AbstractSortableTextColumn;
|
||||
import com.sap.sse.gwt.client.celltable.CellTableWithCheckboxResources;
|
||||
import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSingleSelectionModel;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.celltable.TableWrapper;
|
||||
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
|
||||
import com.sap.sse.security.shared.dto.StrippedRoleDefinitionDTO;
|
||||
@@ -31,7 +31,7 @@ import com.sap.sse.security.ui.client.i18n.StringMessages;
|
||||
* Name and whether the role is enabled for all users. There is also an options to delete the group.
|
||||
*/
|
||||
public class RoleDefinitionTableWrapper extends
|
||||
TableWrapper<Pair<StrippedRoleDefinitionDTO, Boolean>, RefreshableSingleSelectionModel<Pair<StrippedRoleDefinitionDTO, Boolean>>, StringMessages, CellTableWithCheckboxResources> {
|
||||
TableWrapper<Pair<StrippedRoleDefinitionDTO, Boolean>, RefreshableMultiSelectionModel<Pair<StrippedRoleDefinitionDTO, Boolean>>, StringMessages, CellTableWithCheckboxResources> {
|
||||
|
||||
private final LabeledAbstractFilterablePanel<Pair<StrippedRoleDefinitionDTO, Boolean>> filterField;
|
||||
private final MultiSelectionModel<UserGroupDTO> userGroupSelectionModel;
|
||||
@@ -39,7 +39,7 @@ public class RoleDefinitionTableWrapper extends
|
||||
public RoleDefinitionTableWrapper(UserService userService, StringMessages stringMessages,
|
||||
ErrorReporter errorReporter, boolean enablePager, CellTableWithCheckboxResources tableResources,
|
||||
Runnable refresher, MultiSelectionModel<UserGroupDTO> userGroupSelectionModel) {
|
||||
super(stringMessages, errorReporter, false, enablePager,
|
||||
super(stringMessages, errorReporter, /* multiSelection */ true, enablePager,
|
||||
new EntityIdentityComparator<Pair<StrippedRoleDefinitionDTO, Boolean>>() {
|
||||
@Override
|
||||
public boolean representSameEntity(Pair<StrippedRoleDefinitionDTO, Boolean> dto1,
|
||||
|
||||
+4
-4
@@ -25,6 +25,7 @@ import com.sap.sse.gwt.client.celltable.CellTableWithCheckboxResources;
|
||||
import com.sap.sse.gwt.client.celltable.TableWrapper;
|
||||
import com.sap.sse.security.shared.dto.StrippedUserDTO;
|
||||
import com.sap.sse.security.shared.dto.UserGroupDTO;
|
||||
import com.sap.sse.security.shared.dto.SecuredDTO;
|
||||
import com.sap.sse.security.ui.client.UserManagementWriteServiceAsync;
|
||||
import com.sap.sse.security.ui.client.UserService;
|
||||
import com.sap.sse.security.ui.client.component.AccessControlledButtonPanel;
|
||||
@@ -97,7 +98,9 @@ public class UserGroupDetailPanel extends Composite
|
||||
});
|
||||
addButton.ensureDebugId("AddUserButton");
|
||||
// add remove button
|
||||
final Button removeButton = buttonPanel.addUpdateAction(stringMessages.actionRemove(), () -> {
|
||||
buttonPanel.addRemoveAction(stringMessages.actionRemove(),
|
||||
tenantUsersTable.getSelectionModel(),
|
||||
() -> (SecuredDTO) TableWrapper.getSingleSelectedObjectOrNull(userGroupSelectionModel), () -> {
|
||||
final Set<UserGroupDTO> selectedUserGroups = userGroupSelectionModel.getSelectedSet();
|
||||
if (selectedUserGroups != null && selectedUserGroups.size() == 1) {
|
||||
final UserGroupDTO selectedUserGroup = selectedUserGroups.iterator().next();
|
||||
@@ -134,9 +137,6 @@ public class UserGroupDetailPanel extends Composite
|
||||
}
|
||||
}
|
||||
});
|
||||
tenantUsersTable.getSelectionModel().addSelectionChangeHandler(
|
||||
event -> removeButton.setEnabled(!tenantUsersTable.getSelectionModel().getSelectedSet().isEmpty()));
|
||||
removeButton.setEnabled(false);
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user