mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-10 21:02:40 +00:00
enable multi-selection in UserGroup table in AdminConsole
This commit is contained in:
1 parent
b295e80344
commit
90fa548bd5
13 files changed
+189
-167
No files matched your search
+2
-2
@@ -40,8 +40,6 @@ import com.sap.sailing.domain.common.orc.ImpliedWindSource;
|
||||
import com.sap.sailing.gwt.ui.adminconsole.RaceColumnInLeaderboardDialog.RaceColumnDescriptor;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardsDisplayer;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardsRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.ParallelExecutionCallback;
|
||||
import com.sap.sailing.gwt.ui.client.ParallelExecutionHolder;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
import com.sap.sailing.gwt.ui.client.RegattasDisplayer;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
@@ -58,6 +56,8 @@ import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.Notification;
|
||||
import com.sap.sse.gwt.client.Notification.NotificationType;
|
||||
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||
import com.sap.sse.gwt.client.async.ParallelExecutionCallback;
|
||||
import com.sap.sse.gwt.client.async.ParallelExecutionHolder;
|
||||
import com.sap.sse.gwt.client.celltable.FlushableCellTable;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
|
||||
|
||||
+2
-2
@@ -17,14 +17,14 @@ import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.base.CompetitorAndBoatStore;
|
||||
import com.sap.sailing.domain.common.CompetitorDescriptor;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.client.ParallelExecutionCallback;
|
||||
import com.sap.sailing.gwt.ui.client.ParallelExecutionHolder;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorProviderDTO;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||
import com.sap.sse.gwt.client.async.ParallelExecutionCallback;
|
||||
import com.sap.sse.gwt.client.async.ParallelExecutionHolder;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyDisplay;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator;
|
||||
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
|
||||
|
||||
+2
-2
@@ -22,11 +22,11 @@ import com.sap.sailing.domain.common.dto.CompetitorAndBoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorWithToolTipDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.gwt.ui.client.ParallelExecutionCallback;
|
||||
import com.sap.sailing.gwt.ui.client.ParallelExecutionHolder;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.async.ParallelExecutionCallback;
|
||||
import com.sap.sse.gwt.client.async.ParallelExecutionHolder;
|
||||
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
|
||||
import com.sap.sse.security.ui.client.UserService;
|
||||
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
package com.sap.sse.gwt.client.async;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||
|
||||
/**
|
||||
* The class is used together with the {@link ParallelExecutionHolder} when two or more asynchronous service calls
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
package com.sap.sse.gwt.client.async;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
|
||||
@@ -42,12 +42,12 @@ public abstract class ParallelExecutionHolder {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called only when all parallel callbacks have been completed.
|
||||
* Called only when all parallel callbacks have been completed successfully
|
||||
*/
|
||||
protected abstract void handleSuccess();
|
||||
|
||||
/**
|
||||
* Called when one of the parallel callbacks has returned with a failure.
|
||||
* Called when one of the parallel callbacks has returned with a failure
|
||||
*/
|
||||
protected abstract void handleFailure(Throwable t);
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.HasRows;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.Range;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
@@ -156,4 +157,13 @@ public abstract class TableWrapper<T, S extends RefreshableSelectionModel<T>, SM
|
||||
protected TR getTableRes() {
|
||||
return tableRes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@code null} if no or multiple objects are currently selected; the single selected object otherwise; this
|
||||
* can be useful if certain actions are enabled with this table only if a single object is selected.
|
||||
*/
|
||||
public static <X> X getSingleSelectedUserGroup(MultiSelectionModel<X> selectionModel) {
|
||||
return selectionModel.getSelectedSet() != null && selectionModel.getSelectedSet().size() == 1 ?
|
||||
selectionModel.getSelectedSet().iterator().next() : null;
|
||||
}
|
||||
}
|
||||
+50
-30
@@ -2,8 +2,13 @@ package com.sap.sse.security.ui.client.component;
|
||||
|
||||
import static com.sap.sse.security.shared.impl.SecuredSecurityTypes.USER_GROUP;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
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.CaptionPanel;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
@@ -11,8 +16,13 @@ import com.google.gwt.user.client.ui.ScrollPanel;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.async.ParallelExecutionCallback;
|
||||
import com.sap.sse.gwt.client.async.ParallelExecutionHolder;
|
||||
import com.sap.sse.gwt.client.celltable.CellTableWithCheckboxResources;
|
||||
import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel;
|
||||
import com.sap.sse.gwt.client.celltable.TableWrapper;
|
||||
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
|
||||
import com.sap.sse.security.shared.HasPermissions;
|
||||
import com.sap.sse.security.shared.dto.UserGroupDTO;
|
||||
@@ -39,64 +49,74 @@ public class UserGroupManagementPanel extends Composite {
|
||||
CellTableWithCheckboxResources tableResources) {
|
||||
final UserManagementServiceAsync userManagementService = userService.getUserManagementService();
|
||||
final VerticalPanel mainPanel = new VerticalPanel();
|
||||
mainPanel.add(createButtonPanel(userService, stringMessages, userManagementService));
|
||||
|
||||
userGroupListDataProvider = new UserGroupListDataProvider(userManagementService, new TextBox());
|
||||
userGroupTableWrapper = new UserGroupTableWrapper(userService, additionalPermissions, stringMessages,
|
||||
errorReporter, /* enablePager */ true, tableResources, () -> updateUserGroups());
|
||||
|
||||
mainPanel.add(createButtonPanel(userService, stringMessages, userManagementService, userGroupTableWrapper.getSelectionModel()));
|
||||
final LabeledAbstractFilterablePanel<UserGroupDTO> userGroupfilterBox = userGroupTableWrapper.getFilterField();
|
||||
userGroupfilterBox.getElement().setPropertyString("placeholder", stringMessages.filterUserGroups());
|
||||
mainPanel.add(userGroupfilterBox);
|
||||
mainPanel.add(new ScrollPanel(userGroupTableWrapper.asWidget()));
|
||||
|
||||
mainPanel.add(createUserGroupDetailsPanel(stringMessages, userManagementService,
|
||||
userService, additionalPermissions, errorReporter, tableResources));
|
||||
initWidget(mainPanel);
|
||||
}
|
||||
|
||||
/** Creates the button bar with add/remove/refresh buttons. */
|
||||
/** Creates the button bar with add/remove/refresh buttons.
|
||||
* @param userGroupSelectionModel */
|
||||
private Widget createButtonPanel(final UserService userService, final StringMessages stringMessages,
|
||||
final UserManagementServiceAsync userManagementService) {
|
||||
final UserManagementServiceAsync userManagementService, RefreshableSelectionModel<UserGroupDTO> userGroupSelectionModel) {
|
||||
final AccessControlledButtonPanel buttonPanel = new AccessControlledButtonPanel(userService, USER_GROUP);
|
||||
buttonPanel.addUnsecuredAction(stringMessages.refresh(), () -> updateUserGroups());
|
||||
buttonPanel.addCreateActionWithoutServerCreateObjectPermissionCheck(stringMessages.createUserGroup(),
|
||||
() -> new CreateUserGroupDialog(stringMessages,
|
||||
userService, userManagementService, userGroupListDataProvider, () -> updateUserGroups()).show());
|
||||
buttonPanel.addRemoveAction(stringMessages.removeUserGroup(), () -> {
|
||||
UserGroupDTO userGroup = userGroupTableWrapper.getSelectionModel().getSelectedObject();
|
||||
if (userGroup == null) {
|
||||
final Button removeButton = buttonPanel.addRemoveAction(stringMessages.removeUserGroup(), () -> {
|
||||
Set<UserGroupDTO> userGroups = userGroupTableWrapper.getSelectionModel().getSelectedSet();
|
||||
if (userGroups == null || userGroups.isEmpty()) {
|
||||
Window.alert(stringMessages.youHaveToSelectAUserGroup());
|
||||
} else if (Window.confirm(stringMessages.doYouReallyWantToRemoveUserGroup(userGroup.getName()))) {
|
||||
userManagementService.deleteUserGroup(userGroup.getId().toString(), new AsyncCallback<SuccessInfo>() {
|
||||
@Override
|
||||
public void onSuccess(SuccessInfo result) {
|
||||
userGroupListDataProvider.updateDisplays();
|
||||
Window.alert(result.getMessage());
|
||||
updateUserGroups();
|
||||
} else {
|
||||
final String userGroupNames = String.join(", ", Util.map(userGroups, g->g.getName()));
|
||||
if (Window.confirm(stringMessages.doYouReallyWantToRemoveUserGroup(userGroupNames))) {
|
||||
final Map<UserGroupDTO, ParallelExecutionCallback<SuccessInfo>> callbacks = new HashMap<>();
|
||||
for (final UserGroupDTO userGroup : userGroups) {
|
||||
callbacks.put(userGroup, new ParallelExecutionCallback<>());
|
||||
}
|
||||
new ParallelExecutionHolder(callbacks.values().toArray(new ParallelExecutionCallback<?>[0])) {
|
||||
@Override
|
||||
public void handleSuccess() {
|
||||
userGroupListDataProvider.updateDisplays();
|
||||
Window.alert(stringMessages.successMessageRemovedUserGroup(userGroupNames));
|
||||
updateUserGroups();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert(stringMessages.couldNotDeleteUserGroup());
|
||||
@Override
|
||||
public void handleFailure(Throwable caught) {
|
||||
Window.alert(stringMessages.couldNotDeleteUserGroup());
|
||||
}
|
||||
};
|
||||
for (final Entry<UserGroupDTO, ParallelExecutionCallback<SuccessInfo>> groupAndCallback : callbacks.entrySet()) {
|
||||
userManagementService.deleteUserGroup(groupAndCallback.getKey().getId().toString(), groupAndCallback.getValue());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
userGroupSelectionModel.addSelectionChangeHandler(event -> {
|
||||
removeButton.setText(stringMessages.remove() + " (" + userGroupSelectionModel.getSelectedSet().size() + ")");
|
||||
removeButton.setEnabled(userGroupSelectionModel.getSelectedSet().size() >= 1);
|
||||
});
|
||||
return buttonPanel;
|
||||
}
|
||||
|
||||
/** Creates the UserGroupDetailsPanel which contains details about the selected user group
|
||||
* @param userService
|
||||
* @param additionalPermissions
|
||||
* @param errorReporter
|
||||
* @param tableResources */
|
||||
/**
|
||||
* Creates the UserGroupDetailsPanel which contains details about the selected user group
|
||||
*/
|
||||
private HorizontalPanel createUserGroupDetailsPanel(final StringMessages stringMessages,
|
||||
final UserManagementServiceAsync userManagementService, UserService userService, Iterable<HasPermissions> additionalPermissions, ErrorReporter errorReporter, CellTableWithCheckboxResources tableResources) {
|
||||
final UserManagementServiceAsync userManagementService, UserService userService,
|
||||
Iterable<HasPermissions> additionalPermissions, ErrorReporter errorReporter,
|
||||
CellTableWithCheckboxResources tableResources) {
|
||||
userGroupDetailPanel = new UserGroupDetailPanel(userGroupTableWrapper.getSelectionModel(),
|
||||
userGroupListDataProvider, userService, stringMessages, errorReporter, tableResources);
|
||||
|
||||
|
||||
userGroupRoleDefinitionPanel = new UserGroupRoleDefinitionPanel(userService,
|
||||
stringMessages, additionalPermissions, errorReporter, tableResources,
|
||||
userGroupTableWrapper.getSelectionModel(), userGroupListDataProvider);
|
||||
@@ -116,7 +136,7 @@ public class UserGroupManagementPanel extends Composite {
|
||||
listsWrapper.add(roleCaption);
|
||||
listsWrapper.setVisible(false);
|
||||
userGroupTableWrapper.getSelectionModel().addSelectionChangeHandler(
|
||||
h -> listsWrapper.setVisible(userGroupTableWrapper.getSelectionModel().getSelectedObject() != null));
|
||||
h -> listsWrapper.setVisible(TableWrapper.getSingleSelectedUserGroup(userGroupTableWrapper.getSelectionModel()) != null));
|
||||
return listsWrapper;
|
||||
}
|
||||
|
||||
|
||||
+4
-7
@@ -18,7 +18,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.HasPermissions;
|
||||
@@ -36,14 +36,14 @@ import com.sap.sse.security.ui.shared.SuccessInfo;
|
||||
* associated ACL.
|
||||
*/
|
||||
public class UserGroupTableWrapper extends
|
||||
TableWrapper<UserGroupDTO, RefreshableSingleSelectionModel<UserGroupDTO>, StringMessages, CellTableWithCheckboxResources> {
|
||||
TableWrapper<UserGroupDTO, RefreshableMultiSelectionModel<UserGroupDTO>, StringMessages, CellTableWithCheckboxResources> {
|
||||
private final LabeledAbstractFilterablePanel<UserGroupDTO> filterField;
|
||||
private final UserService userService;
|
||||
|
||||
public UserGroupTableWrapper(UserService userService, Iterable<HasPermissions> additionalPermissions,
|
||||
StringMessages stringMessages, ErrorReporter errorReporter, boolean enablePager,
|
||||
CellTableWithCheckboxResources tableResources, Runnable refresher) {
|
||||
super(stringMessages, errorReporter, false, enablePager, new EntityIdentityComparator<UserGroupDTO>() {
|
||||
super(stringMessages, errorReporter, /* multi selection */ true, enablePager, new EntityIdentityComparator<UserGroupDTO>() {
|
||||
@Override
|
||||
public boolean representSameEntity(UserGroupDTO dto1, UserGroupDTO dto2) {
|
||||
return dto1.getId().toString().equals(dto2.getId().toString());
|
||||
@@ -56,14 +56,11 @@ public class UserGroupTableWrapper extends
|
||||
}, tableResources);
|
||||
this.userService = userService;
|
||||
final ListHandler<UserGroupDTO> userColumnListHandler = getColumnSortHandler();
|
||||
|
||||
// users table
|
||||
// user groups table
|
||||
final TextColumn<UserGroupDTO> userGroupUUidColumn = new AbstractSortableTextColumn<UserGroupDTO>(
|
||||
group -> group.getId() == null ? "<null>" : group.getId().toString(), userColumnListHandler);
|
||||
|
||||
final TextColumn<UserGroupDTO> UserGroupWithSecurityDTONameColumn = new AbstractSortableTextColumn<UserGroupDTO>(
|
||||
UserGroupDTO -> UserGroupDTO.getName(), userColumnListHandler);
|
||||
|
||||
final HasPermissions type = SecuredSecurityTypes.USER_GROUP;
|
||||
final AccessControlledActionsColumn<UserGroupDTO, DefaultActionsImagesBarCell> actionColumn = create(
|
||||
new DefaultActionsImagesBarCell(stringMessages), userService);
|
||||
|
||||
+7
-7
@@ -11,7 +11,7 @@ import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.AbstractSortableTextColumn;
|
||||
@@ -35,12 +35,12 @@ public class RoleDefinitionTableWrapper extends
|
||||
TableWrapper<Pair<StrippedRoleDefinitionDTO, Boolean>, RefreshableSingleSelectionModel<Pair<StrippedRoleDefinitionDTO, Boolean>>, StringMessages, CellTableWithCheckboxResources> {
|
||||
|
||||
private final LabeledAbstractFilterablePanel<Pair<StrippedRoleDefinitionDTO, Boolean>> filterField;
|
||||
private final SingleSelectionModel<UserGroupDTO> userGroupSelectionModel;
|
||||
private final MultiSelectionModel<UserGroupDTO> userGroupSelectionModel;
|
||||
|
||||
public RoleDefinitionTableWrapper(UserService userService, Iterable<HasPermissions> additionalPermissions,
|
||||
StringMessages stringMessages, ErrorReporter errorReporter, boolean enablePager,
|
||||
CellTableWithCheckboxResources tableResources, Runnable refresher,
|
||||
SingleSelectionModel<UserGroupDTO> userGroupSelectionModel) {
|
||||
MultiSelectionModel<UserGroupDTO> userGroupSelectionModel) {
|
||||
super(stringMessages, errorReporter, false, enablePager,
|
||||
new EntityIdentityComparator<Pair<StrippedRoleDefinitionDTO, Boolean>>() {
|
||||
@Override
|
||||
@@ -64,9 +64,9 @@ public class RoleDefinitionTableWrapper extends
|
||||
dto -> dto.getA().getName(), userColumnListHandler);
|
||||
final AccessControlledActionsColumn<Pair<StrippedRoleDefinitionDTO, Boolean>, RoleDefinitionImagesBarCell> actionsColumn = AccessControlledActionsColumn
|
||||
.create(new RoleDefinitionImagesBarCell(stringMessages), userService,
|
||||
role -> userGroupSelectionModel.getSelectedObject());
|
||||
role -> TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel));
|
||||
actionsColumn.addAction(RoleDefinitionImagesBarCell.ACTION_UPDATE, UPDATE, rolePair -> {
|
||||
final UserGroupDTO selectedObject = userGroupSelectionModel.getSelectedObject();
|
||||
final UserGroupDTO selectedObject = TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel);
|
||||
final boolean value = !rolePair.getB().booleanValue();
|
||||
if (selectedObject != null) {
|
||||
userService.getUserManagementService().putRoleDefintionToUserGroup(selectedObject.getId().toString(),
|
||||
@@ -87,7 +87,7 @@ public class RoleDefinitionTableWrapper extends
|
||||
});
|
||||
|
||||
actionsColumn.addAction(RoleDefinitionImagesBarCell.ACTION_DELETE, UPDATE, rolePair -> {
|
||||
final UserGroupDTO selectedObject = userGroupSelectionModel.getSelectedObject();
|
||||
final UserGroupDTO selectedObject = TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel);
|
||||
if (selectedObject != null) {
|
||||
if (Window.confirm(stringMessages.doYouReallyWantToRemoveRole(rolePair.getA().getName()))) {
|
||||
userService.getUserManagementService().removeRoleDefinitionFromUserGroup(
|
||||
@@ -152,7 +152,7 @@ public class RoleDefinitionTableWrapper extends
|
||||
}
|
||||
|
||||
public void refreshRoleList() {
|
||||
UserGroupDTO selectedObject = userGroupSelectionModel.getSelectedObject();
|
||||
UserGroupDTO selectedObject = TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel);
|
||||
if (selectedObject != null) {
|
||||
filterField.updateAll(selectedObject.getRoleDefinitions());
|
||||
}
|
||||
|
||||
+8
-11
@@ -16,12 +16,13 @@ import com.google.gwt.user.client.ui.ScrollPanel;
|
||||
import com.google.gwt.user.client.ui.SuggestBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.CellTableWithCheckboxResources;
|
||||
import com.sap.sse.gwt.client.celltable.TableWrapper;
|
||||
import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel;
|
||||
import com.sap.sse.security.shared.HasPermissions;
|
||||
import com.sap.sse.security.shared.dto.StrippedRoleDefinitionDTO;
|
||||
@@ -37,7 +38,7 @@ public class UserGroupRoleDefinitionPanel extends Composite
|
||||
implements Handler, ChangeHandler, KeyUpHandler, UserGroupListDataProviderChangeHandler {
|
||||
|
||||
private final RoleDefinitionTableWrapper roleDefinitionTableWrapper;
|
||||
private final SingleSelectionModel<UserGroupDTO> userGroupSelectionModel;
|
||||
private final MultiSelectionModel<UserGroupDTO> userGroupSelectionModel;
|
||||
private final SuggestBox suggestRole;
|
||||
private final UserGroupRoleResources userGroupRoleResources = GWT.create(UserGroupRoleResources.class);
|
||||
private final RoleDefinitionSuggestOracle oracle;
|
||||
@@ -45,29 +46,25 @@ public class UserGroupRoleDefinitionPanel extends Composite
|
||||
public UserGroupRoleDefinitionPanel(final UserService userService, final StringMessages stringMessages,
|
||||
Iterable<HasPermissions> additionalPermissions, ErrorReporter errorReporter,
|
||||
CellTableWithCheckboxResources tableResources,
|
||||
final SingleSelectionModel<UserGroupDTO> userGroupSelectionModel,
|
||||
final MultiSelectionModel<UserGroupDTO> userGroupSelectionModel,
|
||||
UserGroupListDataProvider userGroupListDataProvider) {
|
||||
this.userGroupSelectionModel = userGroupSelectionModel;
|
||||
final VerticalPanel mainPanel = new VerticalPanel();
|
||||
|
||||
oracle = new RoleDefinitionSuggestOracle(userService.getUserManagementService(), stringMessages);
|
||||
suggestRole = new SuggestBox(
|
||||
oracle);
|
||||
userGroupRoleResources.css().ensureInjected();
|
||||
suggestRole.addStyleName(userGroupRoleResources.css().roleDefinitionSuggest());
|
||||
suggestRole.getElement().setPropertyString("placeholder", stringMessages.enterRoleName());
|
||||
|
||||
|
||||
// create UserGroup Table
|
||||
userGroupListDataProvider.addChangeHandler(this);
|
||||
roleDefinitionTableWrapper = new RoleDefinitionTableWrapper(userService, additionalPermissions, stringMessages,
|
||||
errorReporter, /* enablePager */ true, tableResources, () -> updateUserGroups(),
|
||||
userGroupSelectionModel);
|
||||
|
||||
// create button bar
|
||||
final Widget buttonPanel = createButtonPanel(userService, stringMessages);
|
||||
this.userGroupSelectionModel.addSelectionChangeHandler(event -> {
|
||||
final UserGroupDTO selectedUserGroup = this.userGroupSelectionModel.getSelectedObject();
|
||||
final UserGroupDTO selectedUserGroup = TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel);
|
||||
buttonPanel.setVisible(userService.hasPermission(selectedUserGroup, UPDATE));
|
||||
});
|
||||
mainPanel.add(buttonPanel);
|
||||
@@ -90,7 +87,7 @@ public class UserGroupRoleDefinitionPanel extends Composite
|
||||
* has changed.
|
||||
*/
|
||||
private void updateOracle() {
|
||||
UserGroupDTO selectedObject = this.userGroupSelectionModel.getSelectedObject();
|
||||
UserGroupDTO selectedObject = TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel);
|
||||
if (selectedObject != null) {
|
||||
((RoleDefinitionSuggestOracle) suggestRole.getSuggestOracle())
|
||||
.resetAndRemoveExistingRoles(selectedObject.getRoleDefinitionMap().keySet());
|
||||
@@ -106,7 +103,7 @@ public class UserGroupRoleDefinitionPanel extends Composite
|
||||
final AccessControlledButtonPanel buttonPanel = new AccessControlledButtonPanel(userService, USER_GROUP);
|
||||
final UserManagementServiceAsync userManagementService = userService.getUserManagementService();
|
||||
buttonPanel.addUpdateAction(stringMessages.addRole(), () -> {
|
||||
final UserGroupDTO selectedObject = userGroupSelectionModel.getSelectedObject();
|
||||
final UserGroupDTO selectedObject = TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel);
|
||||
if (selectedObject != null) {
|
||||
StrippedRoleDefinitionDTO role = ((RoleDefinitionSuggestOracle) suggestRole.getSuggestOracle())
|
||||
.fromString(suggestRole.getValue());
|
||||
@@ -136,7 +133,7 @@ public class UserGroupRoleDefinitionPanel extends Composite
|
||||
if (selectedRole == null) {
|
||||
Window.alert(stringMessages.youHaveToSelectAUserGroup());
|
||||
} else if (Window.confirm(stringMessages.doYouReallyWantToRemoveRole(selectedRole.getA().getName()))) {
|
||||
UserGroupDTO selectedObject = userGroupSelectionModel.getSelectedObject();
|
||||
UserGroupDTO selectedObject = TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel);
|
||||
if (selectedObject != null) {
|
||||
userManagementService.removeRoleDefinitionFromUserGroup(selectedObject.getId().toString(),
|
||||
selectedRole.getA().getId().toString(), new AsyncCallback<Void>() {
|
||||
|
||||
+72
-69
@@ -27,13 +27,14 @@ import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.google.gwt.view.client.AbstractDataProvider;
|
||||
import com.google.gwt.view.client.HasData;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.Range;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
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.ui.client.UserManagementServiceAsync;
|
||||
@@ -47,14 +48,13 @@ public class UserGroupDetailPanel extends Composite
|
||||
implements Handler, ChangeHandler, KeyUpHandler, UserGroupListDataProviderChangeHandler {
|
||||
|
||||
private final UserGroupUserResources userGroupUserResources = GWT.create(UserGroupUserResources.class);
|
||||
private final SingleSelectionModel<UserGroupDTO> userGroupSelectionModel;
|
||||
private final MultiSelectionModel<UserGroupDTO> userGroupSelectionModel;
|
||||
private final UserGroupUsersTableWrapper tenantUsersTable;
|
||||
private final TenantUsersListDataProvider tenantUsersListDataProvider;
|
||||
|
||||
private UserGroupSuggestOracle oracle;
|
||||
|
||||
private class TenantUsersListDataProvider extends AbstractDataProvider<StrippedUserDTO> {
|
||||
|
||||
private final TextBox filterBox;
|
||||
|
||||
private TenantUsersListDataProvider(TextBox filterBox) {
|
||||
@@ -63,14 +63,20 @@ public class UserGroupDetailPanel extends Composite
|
||||
|
||||
@Override
|
||||
protected void onRangeChanged(HasData<StrippedUserDTO> display) {
|
||||
final UserGroupDTO tenant = userGroupSelectionModel.getSelectedObject();
|
||||
final Set<UserGroupDTO> selectedUserGroups = userGroupSelectionModel.getSelectedSet();
|
||||
final UserGroupDTO selectedUserGroup;
|
||||
if (selectedUserGroups != null && selectedUserGroups.size() == 1) {
|
||||
selectedUserGroup = selectedUserGroups.iterator().next();
|
||||
} else {
|
||||
selectedUserGroup = null;
|
||||
}
|
||||
final List<StrippedUserDTO> result = new ArrayList<>();
|
||||
final List<StrippedUserDTO> show = new ArrayList<>();
|
||||
final Range range = display.getVisibleRange();
|
||||
int start = range.getStart();
|
||||
int end = range.getStart() + range.getLength();
|
||||
if (tenant != null) {
|
||||
for (final StrippedUserDTO user : tenant.getUsers()) {
|
||||
if (selectedUserGroup != null) {
|
||||
for (final StrippedUserDTO user : selectedUserGroup.getUsers()) {
|
||||
if (user.getName().contains(filterBox.getText())) {
|
||||
result.add(user);
|
||||
}
|
||||
@@ -79,7 +85,6 @@ public class UserGroupDetailPanel extends Composite
|
||||
final StrippedUserDTO username = result.get(i);
|
||||
show.add(username);
|
||||
}
|
||||
|
||||
}
|
||||
updateRowData(start, show);
|
||||
updateRowCount(result.size(), true);
|
||||
@@ -90,11 +95,10 @@ public class UserGroupDetailPanel extends Composite
|
||||
}
|
||||
}
|
||||
|
||||
public UserGroupDetailPanel(SingleSelectionModel<UserGroupDTO> refreshableSelectionModel,
|
||||
public UserGroupDetailPanel(MultiSelectionModel<UserGroupDTO> refreshableSelectionModel,
|
||||
UserGroupListDataProvider tenantListDataProvider, UserService userService, StringMessages stringMessages,
|
||||
ErrorReporter errorReporter, CellTableWithCheckboxResources tableResources) {
|
||||
userGroupUserResources.css().ensureInjected();
|
||||
|
||||
// setup filter
|
||||
final HorizontalPanel filterPanel = new HorizontalPanel();
|
||||
filterPanel.setSpacing(5);
|
||||
@@ -103,32 +107,25 @@ public class UserGroupDetailPanel extends Composite
|
||||
filterBox.addChangeHandler(this);
|
||||
filterBox.addKeyUpHandler(this);
|
||||
final Label labelFilter = new Label(stringMessages.filterUsers());
|
||||
|
||||
filterPanel.add(labelFilter);
|
||||
filterPanel.add(filterBox);
|
||||
|
||||
refreshableSelectionModel.addSelectionChangeHandler(this);
|
||||
this.userGroupSelectionModel = refreshableSelectionModel;
|
||||
tenantListDataProvider.addChangeHandler(this);
|
||||
|
||||
this.tenantUsersTable = new UserGroupUsersTableWrapper(stringMessages, errorReporter, tableResources,
|
||||
userService, userGroupSelectionModel, () -> updateUserList());
|
||||
|
||||
tenantUsersListDataProvider = new TenantUsersListDataProvider(filterBox);
|
||||
tenantUsersListDataProvider.addDataDisplay(tenantUsersTable.getTable());
|
||||
|
||||
// add buttons, filter and listbox to panel
|
||||
final VerticalPanel addUserToGroupPanel = new VerticalPanel();
|
||||
final Widget buttonPanel = createButtonPanel(userService, stringMessages);
|
||||
this.userGroupSelectionModel.addSelectionChangeHandler(event -> {
|
||||
final UserGroupDTO selectedUserGroup = this.userGroupSelectionModel.getSelectedObject();
|
||||
buttonPanel.setVisible(userService.hasPermission(selectedUserGroup, UPDATE));
|
||||
buttonPanel.setVisible(userService.hasPermission(TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel), UPDATE));
|
||||
});
|
||||
addUserToGroupPanel.add(buttonPanel);
|
||||
addUserToGroupPanel.add(filterPanel);
|
||||
// addUserToGroupPanel.add(tenantUsersPanelCaption);
|
||||
addUserToGroupPanel.add(tenantUsersTable);
|
||||
|
||||
initWidget(addUserToGroupPanel);
|
||||
}
|
||||
|
||||
@@ -141,67 +138,68 @@ public class UserGroupDetailPanel extends Composite
|
||||
final SuggestBox suggestUser = new SuggestBox(oracle);
|
||||
suggestUser.addStyleName(userGroupUserResources.css().userDefinitionSuggest());
|
||||
suggestUser.getElement().setPropertyString("placeholder", stringMessages.enterUsername());
|
||||
|
||||
// add suggest
|
||||
buttonPanel.insertWidgetAtPosition(suggestUser, 0);
|
||||
|
||||
// add add button
|
||||
buttonPanel.addUpdateAction(stringMessages.addUser(), () -> {
|
||||
final String selectedUsername = suggestUser.getValue();
|
||||
if (!getSelectedUserGroupUsernames().contains(selectedUsername)) {
|
||||
final UserGroupDTO tenant = userGroupSelectionModel.getSelectedObject();
|
||||
userManagementService.addUserToUserGroup(tenant.getId().toString(), selectedUsername,
|
||||
new AsyncCallback<Void>() {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert(stringMessages.couldNotAddUserToUserGroup(selectedUsername,
|
||||
tenant.getName(), caught.getMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
tenant.add(new StrippedUserDTO(selectedUsername));
|
||||
updateUserList();
|
||||
suggestUser.setText("");
|
||||
}
|
||||
});
|
||||
final UserGroupDTO selectedUserGroup = TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel);
|
||||
if (selectedUserGroup != null) {
|
||||
userManagementService.addUserToUserGroup(selectedUserGroup.getId().toString(), selectedUsername,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert(stringMessages.couldNotAddUserToUserGroup(selectedUsername,
|
||||
selectedUserGroup.getName(), caught.getMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
selectedUserGroup.add(new StrippedUserDTO(selectedUsername));
|
||||
updateUserList();
|
||||
suggestUser.setText("");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// add remove button
|
||||
final Button removeButton = buttonPanel.addUpdateAction(stringMessages.actionRemove(), () -> {
|
||||
UserGroupDTO tenant = userGroupSelectionModel.getSelectedObject();
|
||||
Set<StrippedUserDTO> users = tenantUsersTable.getSelectionModel().getSelectedSet();
|
||||
if (tenant == null) {
|
||||
Window.alert(stringMessages.youHaveToSelectAUserGroup());
|
||||
return;
|
||||
}
|
||||
for (StrippedUserDTO user : users) {
|
||||
final String username = user.getName();
|
||||
userManagementService.removeUserFromUserGroup(tenant.getId().toString(), username,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert(stringMessages.couldNotRemoveUserFromUserGroup(username, tenant.getName(),
|
||||
caught.getMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
StrippedUserDTO userToRemoveFromTenant = null;
|
||||
for (final StrippedUserDTO userInTenant : tenant.getUsers()) {
|
||||
if (Util.equalsWithNull(userInTenant.getName(), username)) {
|
||||
userToRemoveFromTenant = userInTenant;
|
||||
break;
|
||||
final Set<UserGroupDTO> selectedUserGroups = userGroupSelectionModel.getSelectedSet();
|
||||
if (selectedUserGroups != null && selectedUserGroups.size() == 1) {
|
||||
final UserGroupDTO selectedUserGroup = selectedUserGroups.iterator().next();
|
||||
Set<StrippedUserDTO> users = tenantUsersTable.getSelectionModel().getSelectedSet();
|
||||
if (selectedUserGroups == null || selectedUserGroups.isEmpty()) {
|
||||
Window.alert(stringMessages.youHaveToSelectAUserGroup());
|
||||
return;
|
||||
}
|
||||
for (StrippedUserDTO user : users) {
|
||||
final String username = user.getName();
|
||||
userManagementService.removeUserFromUserGroup(selectedUserGroup.getId().toString(), username,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert(stringMessages.couldNotRemoveUserFromUserGroup(username, selectedUserGroup.getName(),
|
||||
caught.getMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
StrippedUserDTO userToRemoveFromTenant = null;
|
||||
for (final StrippedUserDTO userInTenant : selectedUserGroup.getUsers()) {
|
||||
if (Util.equalsWithNull(userInTenant.getName(), username)) {
|
||||
userToRemoveFromTenant = userInTenant;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (userToRemoveFromTenant != null) {
|
||||
selectedUserGroup.remove(userToRemoveFromTenant);
|
||||
}
|
||||
updateUserList();
|
||||
}
|
||||
if (userToRemoveFromTenant != null) {
|
||||
tenant.remove(userToRemoveFromTenant);
|
||||
}
|
||||
updateUserList();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
tenantUsersTable.getSelectionModel().addSelectionChangeHandler(
|
||||
@@ -240,8 +238,13 @@ public class UserGroupDetailPanel extends Composite
|
||||
}
|
||||
|
||||
private List<String> getSelectedUserGroupUsernames() {
|
||||
final UserGroupDTO tenant = userGroupSelectionModel.getSelectedObject();
|
||||
return tenant == null ? Collections.emptyList()
|
||||
: Util.asList(tenant.getUsers()).stream().map(StrippedUserDTO::getName).collect(Collectors.toList());
|
||||
final List<String> result;
|
||||
final UserGroupDTO tenant = TableWrapper.getSingleSelectedUserGroup(userGroupSelectionModel);
|
||||
if (tenant != null) {
|
||||
result = Util.asList(tenant.getUsers()).stream().map(StrippedUserDTO::getName).collect(Collectors.toList());
|
||||
} else {
|
||||
result = Collections.emptyList();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+28
-28
@@ -5,7 +5,7 @@ import static com.sap.sse.security.shared.HasPermissions.DefaultActions.UPDATE;
|
||||
import com.google.gwt.user.cellview.client.TextColumn;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.celltable.AbstractSortableTextColumn;
|
||||
@@ -24,7 +24,7 @@ public class UserGroupUsersTableWrapper extends
|
||||
|
||||
public UserGroupUsersTableWrapper(StringMessages stringMessages, ErrorReporter errorReporter,
|
||||
CellTableWithCheckboxResources tableResources, UserService userService,
|
||||
SingleSelectionModel<UserGroupDTO> userGroupSelectionModel, Runnable refresher) {
|
||||
MultiSelectionModel<UserGroupDTO> userGroupSelectionModel, Runnable refresher) {
|
||||
super(stringMessages, errorReporter, true, true, new EntityIdentityComparator<StrippedUserDTO>() {
|
||||
@Override
|
||||
public boolean representSameEntity(StrippedUserDTO user1, StrippedUserDTO user2) {
|
||||
@@ -41,38 +41,38 @@ public class UserGroupUsersTableWrapper extends
|
||||
StrippedUserDTO::getName, getColumnSortHandler());
|
||||
final AccessControlledActionsColumn<StrippedUserDTO, UserGroupUsersImagesBarCell> actionColumns = AccessControlledActionsColumn
|
||||
.create(new UserGroupUsersImagesBarCell(stringMessages), userService,
|
||||
user -> userGroupSelectionModel.getSelectedObject());
|
||||
user -> getSingleSelectedUserGroup(userGroupSelectionModel));
|
||||
actionColumns.addAction(UserGroupUsersImagesBarCell.ACTION_DELETE, UPDATE, user -> {
|
||||
final UserGroupDTO tenant = userGroupSelectionModel.getSelectedObject();
|
||||
final String username = user.getName();
|
||||
userService.getUserManagementService().removeUserFromUserGroup(tenant.getId().toString(), username,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert(stringMessages.couldNotRemoveUserFromUserGroup(username, tenant.getName(),
|
||||
caught.getMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
StrippedUserDTO userToRemoveFromTenant = null;
|
||||
for (final StrippedUserDTO userInTenant : tenant.getUsers()) {
|
||||
if (Util.equalsWithNull(userInTenant.getName(), username)) {
|
||||
userToRemoveFromTenant = userInTenant;
|
||||
break;
|
||||
final UserGroupDTO tenant = getSingleSelectedUserGroup(userGroupSelectionModel);
|
||||
if (tenant != null) {
|
||||
final String username = user.getName();
|
||||
userService.getUserManagementService().removeUserFromUserGroup(tenant.getId().toString(), username,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert(stringMessages.couldNotRemoveUserFromUserGroup(username, tenant.getName(),
|
||||
caught.getMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(Void result) {
|
||||
StrippedUserDTO userToRemoveFromTenant = null;
|
||||
for (final StrippedUserDTO userInTenant : tenant.getUsers()) {
|
||||
if (Util.equalsWithNull(userInTenant.getName(), username)) {
|
||||
userToRemoveFromTenant = userInTenant;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (userToRemoveFromTenant != null) {
|
||||
tenant.remove(userToRemoveFromTenant);
|
||||
}
|
||||
refresher.run();
|
||||
}
|
||||
if (userToRemoveFromTenant != null) {
|
||||
tenant.remove(userToRemoveFromTenant);
|
||||
}
|
||||
refresher.run();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
table.addColumn(usernameColumn, stringMessages.username());
|
||||
table.addColumn(actionColumns);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
-4
@@ -132,20 +132,16 @@ public class UserManagementPanel<TR extends CellTableWithCheckboxResources> exte
|
||||
}
|
||||
});
|
||||
updateUsers();
|
||||
|
||||
final HorizontalPanel detailsPanel = new HorizontalPanel();
|
||||
|
||||
// add details panel for user roles
|
||||
userRoleDefinitionPanel = new UserRoleDefinitionPanel(userService, stringMessages,
|
||||
errorReporter,
|
||||
tableResources, userList.getSelectionModel(), () -> updateUsers());
|
||||
detailsPanel.add(userRoleDefinitionPanel);
|
||||
|
||||
// add details panel for user permissions
|
||||
final WildcardPermissionPanel userPermissionPanel = new WildcardPermissionPanel(userService, stringMessages,
|
||||
errorReporter, tableResources, userList.getSelectionModel(), () -> updateUsers());
|
||||
detailsPanel.add(userPermissionPanel);
|
||||
|
||||
west.add(detailsPanel);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user