From 717a735ab060599dc1af288d8e42a08ee73b39fa Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Fri, 14 Sep 2018 16:40:08 +0200 Subject: [PATCH] renamed Permission to HasPermissions Change-Id: I6332d43f222d0f55717abb8ce4b5c3d8aa55af91 --- .../domain/common/security/Permission.java | 12 +++--- .../AccessControlledActionsColumn.java | 2 +- .../adminconsole/AdminConsoleEntryPoint.java | 2 +- .../EventConfigImagesBarCell.java | 2 +- .../ui/adminconsole/EventListComposite.java | 2 +- .../gwt/ui/raceboard/SliceRaceHandler.java | 2 +- .../gwt/ui/server/DataMiningServiceImpl.java | 2 +- .../gwt/ui/server/MediaServiceImpl.java | 2 +- .../gwt/ui/server/SailingServiceImpl.java | 2 +- .../rc/AddEntryToRaceLogJsonPostServlet.java | 2 +- .../gateway/jaxrs/api/EventsResource.java | 2 +- .../jaxrs/api/LeaderboardsResource.java | 2 +- .../gateway/jaxrs/api/MarkRessource.java | 2 +- .../gateway/jaxrs/api/RegattasResource.java | 2 +- .../gateway/jaxrs/api/WindResource.java | 2 +- .../gwt/adminconsole/AdminConsolePanel.java | 38 +++++++++---------- .../{Permission.java => HasPermissions.java} | 4 +- .../sse/security/shared/RolePrototype.java | 6 +-- .../com/sap/sse/security/shared/UserRole.java | 4 +- .../shared/impl/DefaultPermissions.java | 12 +++--- .../security/shared/impl/PermissionImpl.java | 4 +- .../impl/PermissionToObjectIdConverter.java | 4 +- .../security/test/PermissionCheckerTest.java | 2 +- .../decorator/AuthorizedContentDecorator.java | 4 +- .../client/usermanagement/UserEditDialog.java | 6 +-- .../usermanagement/UserManagementPanel.java | 6 +-- .../usermanagement/UserTableWrapper.java | 6 +-- 27 files changed, 68 insertions(+), 68 deletions(-) rename java/com.sap.sse.security.common/src/com/sap/sse/security/shared/{Permission.java => HasPermissions.java} (97%) diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/security/Permission.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/security/Permission.java index 448e13957c7..cef11a8493d 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/security/Permission.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/security/Permission.java @@ -10,7 +10,7 @@ import com.sap.sse.security.shared.WildcardPermission; import com.sap.sse.security.shared.impl.QualifiedObjectIdentifierImpl; import com.sap.sse.security.shared.impl.WildcardPermissionEncoder; -public enum Permission implements com.sap.sse.security.shared.Permission { +public enum Permission implements com.sap.sse.security.shared.HasPermissions { // AdminConsole permissions MANAGE_EVENTS, MANAGE_PAIRING_LISTS, @@ -72,14 +72,14 @@ public enum Permission implements com.sap.sse.security.shared.Permission { // TODO once we can use Java8 here, move this up into a "default" method on the Permission interface @Override - public String getStringPermission(com.sap.sse.security.shared.Permission.Mode... modes) { + public String getStringPermission(com.sap.sse.security.shared.HasPermissions.Mode... modes) { final String result; if (modes==null || modes.length==0) { result = name(); } else { final StringBuilder modesString = new StringBuilder(); boolean first = true; - for (com.sap.sse.security.shared.Permission.Mode mode : modes) { + for (com.sap.sse.security.shared.HasPermissions.Mode mode : modes) { if (first) { first = false; } else { @@ -93,13 +93,13 @@ public enum Permission implements com.sap.sse.security.shared.Permission { } @Override - public WildcardPermission getPermission(com.sap.sse.security.shared.Permission.Mode... modes) { + public WildcardPermission getPermission(com.sap.sse.security.shared.HasPermissions.Mode... modes) { return new WildcardPermission(getStringPermission(modes)); } // TODO once we can use Java8 here, move this up into a "default" method on the Permission interface @Override - public String getStringPermissionForObjects(com.sap.sse.security.shared.Permission.Mode mode, String... objectIdentifiers) { + public String getStringPermissionForObjects(com.sap.sse.security.shared.HasPermissions.Mode mode, String... objectIdentifiers) { final WildcardPermissionEncoder permissionEncoder = new WildcardPermissionEncoder(); final StringBuilder result = new StringBuilder(getStringPermission(mode)); if (objectIdentifiers!=null && objectIdentifiers.length>0) { @@ -123,7 +123,7 @@ public enum Permission implements com.sap.sse.security.shared.Permission { } @Override - public WildcardPermission getPermissionForObjects(com.sap.sse.security.shared.Permission.Mode mode, String... objectIdentifiers) { + public WildcardPermission getPermissionForObjects(com.sap.sse.security.shared.HasPermissions.Mode mode, String... objectIdentifiers) { return new WildcardPermission(getStringPermissionForObjects(mode, objectIdentifiers)); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AccessControlledActionsColumn.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AccessControlledActionsColumn.java index 57f0e94b0ba..21b0d8191ea 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AccessControlledActionsColumn.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AccessControlledActionsColumn.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import com.sap.sse.gwt.client.celltable.ImagesBarCell; import com.sap.sse.gwt.client.celltable.ImagesBarColumn; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; public abstract class AccessControlledActionsColumn extends ImagesBarColumn { public AccessControlledActionsColumn(S imagesBarCell) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java index 4529b6b3ef0..5615d2152fd 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/AdminConsoleEntryPoint.java @@ -296,7 +296,7 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements getStringMessages().localServer(), Permission.MANAGE_LOCAL_SERVER_INSTANCE); final UserManagementPanel userManagementPanel = new UserManagementPanel<>(getUserService(), StringMessages.INSTANCE, - Arrays.asList(Permission.values()), this, tableResources); + Arrays.asList(Permission.values()), this, tableResources); panel.addToTabPanel(advancedTabPanel, new DefaultRefreshableAdminConsolePanel>(userManagementPanel) { @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventConfigImagesBarCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventConfigImagesBarCell.java index 1ee448c50a0..ad831a9c979 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventConfigImagesBarCell.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/EventConfigImagesBarCell.java @@ -6,7 +6,7 @@ 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.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; public class EventConfigImagesBarCell extends ImagesBarCell { private final StringMessages stringMessages; 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 f2bdf7c36ae..44db9aaabbb 100755 --- 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 @@ -67,7 +67,7 @@ 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.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; import com.sap.sse.security.ui.client.UserService; import com.sap.sse.security.ui.shared.UserDTO; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/SliceRaceHandler.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/SliceRaceHandler.java index d8f9d4c7594..b4897892a11 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/SliceRaceHandler.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/SliceRaceHandler.java @@ -25,7 +25,7 @@ import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.common.impl.TimeRangeImpl; import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.dialog.DataEntryDialog; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; import com.sap.sse.security.ui.client.UserService; import com.sap.sse.security.ui.client.UserStatusEventHandler; import com.sap.sse.security.ui.shared.UserDTO; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java index 4a1f17abb63..13b72cc30f9 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/DataMiningServiceImpl.java @@ -50,7 +50,7 @@ import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; import com.sap.sse.datamining.shared.impl.dto.ReducedDimensionsDTO; import com.sap.sse.datamining.ui.client.DataMiningService; import com.sap.sse.i18n.ResourceBundleStringMessages; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; public class DataMiningServiceImpl extends RemoteServiceServlet implements DataMiningService { private static final long serialVersionUID = -7951930891674894528L; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/MediaServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/MediaServiceImpl.java index 3e0f1ee4e74..a6daec26252 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/MediaServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/MediaServiceImpl.java @@ -57,7 +57,7 @@ import com.sap.sailing.gwt.ui.client.MediaService; import com.sap.sailing.server.RacingEventService; import com.sap.sse.common.Duration; import com.sap.sse.common.impl.MillisecondsDurationImpl; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; public class MediaServiceImpl extends RemoteServiceServlet implements MediaService { private String YOUTUBE_V3_API_KEY = "AIzaSyBzCJ9cxb9_PPzuYfrHIEdSRtR631b64Xs"; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java index 095cf26b7cf..466a84d82c7 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/server/SailingServiceImpl.java @@ -579,7 +579,7 @@ import com.sap.sse.security.SecurityService; import com.sap.sse.security.SessionUtils; import com.sap.sse.security.shared.AccessControlListAnnotation; import com.sap.sse.security.shared.OwnershipAnnotation; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; import com.sap.sse.security.shared.SecurityUser; import com.sap.sse.security.shared.UserGroup; import com.sap.sse.security.ui.server.SecurityDTOFactory; diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddEntryToRaceLogJsonPostServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddEntryToRaceLogJsonPostServlet.java index 297c72eff76..fe2bf053911 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddEntryToRaceLogJsonPostServlet.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/impl/rc/AddEntryToRaceLogJsonPostServlet.java @@ -38,7 +38,7 @@ import com.sap.sailing.server.gateway.serialization.racelog.impl.RaceLogEventSer import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler; import com.sap.sailing.server.gateway.serialization.racelog.tracking.impl.PlaceHolderDeviceIdentifierJsonHandler; import com.sap.sse.common.TypeBasedServiceFinder; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; public class AddEntryToRaceLogJsonPostServlet extends AbstractJsonHttpServlet { private static final long serialVersionUID = 7704668926551060433L; diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java index e8b32214858..a2efcce53ff 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/EventsResource.java @@ -89,7 +89,7 @@ import com.sap.sse.common.Util.Triple; import com.sap.sse.common.impl.MillisecondsDurationImpl; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.security.SecurityService; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; import com.sap.sse.security.shared.SecurityUser; import com.sap.sse.shared.media.ImageDescriptor; import com.sap.sse.shared.media.VideoDescriptor; diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java index ac5256396db..365ae0fcc0a 100755 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/LeaderboardsResource.java @@ -130,7 +130,7 @@ import com.sap.sse.common.Util.Pair; import com.sap.sse.common.impl.DegreeBearingImpl; import com.sap.sse.common.impl.MillisecondsTimePoint; import com.sap.sse.util.impl.UUIDHelper; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; @Path("/v1/leaderboards") public class LeaderboardsResource extends AbstractLeaderboardsResource { diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/MarkRessource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/MarkRessource.java index b2713d5cf8d..1b5b8745fb0 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/MarkRessource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/MarkRessource.java @@ -65,7 +65,7 @@ import com.sap.sailing.server.gateway.serialization.coursedata.impl.WaypointJson import com.sap.sse.common.Util; import com.sap.sse.common.Util.Pair; import com.sap.sse.common.impl.MillisecondsTimePoint; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; @Path("/v1/mark") public class MarkRessource extends AbstractSailingServerResource { diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java index 5073087dedb..cc2b5194a8a 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/RegattasResource.java @@ -123,7 +123,7 @@ import com.sap.sse.common.impl.RGBColor; import com.sap.sse.common.util.RoundingUtil; import com.sap.sse.datamining.shared.impl.PredefinedQueryIdentifier; import com.sap.sse.security.SecurityService; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; import com.sap.sse.security.shared.User; @Path("/v1/regattas") diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/WindResource.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/WindResource.java index 0686536bd14..f572fe6b528 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/WindResource.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/jaxrs/api/WindResource.java @@ -25,7 +25,7 @@ import com.sap.sailing.server.gateway.deserialization.impl.Helpers; import com.sap.sailing.server.gateway.deserialization.impl.PositionJsonDeserializer; import com.sap.sailing.server.gateway.deserialization.impl.WindJsonDeserializer; import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; @Path("/v1/wind") public class WindResource extends AbstractSailingServerResource { diff --git a/java/com.sap.sse.gwt.adminconsole/src/com/sap/sse/gwt/adminconsole/AdminConsolePanel.java b/java/com.sap.sse.gwt.adminconsole/src/com/sap/sse/gwt/adminconsole/AdminConsolePanel.java index 8b3a6155b0d..50d381362be 100755 --- a/java/com.sap.sse.gwt.adminconsole/src/com/sap/sse/gwt/adminconsole/AdminConsolePanel.java +++ b/java/com.sap.sse.gwt.adminconsole/src/com/sap/sse/gwt/adminconsole/AdminConsolePanel.java @@ -26,7 +26,7 @@ import com.sap.sse.gwt.client.ServerInfoRetriever; import com.sap.sse.gwt.client.panels.AbstractTabLayoutPanel; import com.sap.sse.gwt.client.panels.HorizontalTabLayoutPanel; import com.sap.sse.gwt.client.panels.VerticalTabLayoutPanel; -import com.sap.sse.security.shared.Permission; +import com.sap.sse.security.shared.HasPermissions; import com.sap.sse.security.shared.PermissionChecker; import com.sap.sse.security.shared.WildcardPermission; import com.sap.sse.security.ui.client.UserService; @@ -43,11 +43,11 @@ import com.sap.sse.security.ui.shared.UserDTO; * * After constructing an instance of this class, there are three ways for adding widgets: *
    - *
  • {@link #addToVerticalTabPanel(RefreshableAdminConsolePanel, String, Permission)} adds a widget as a content + *
  • {@link #addToVerticalTabPanel(RefreshableAdminConsolePanel, String, HasPermissions)} adds a widget as a content * element of a vertical tab
  • - *
  • {@link #addVerticalTab(String, String, Permission)} creates a horizontal tab panel and adds it as a content + *
  • {@link #addVerticalTab(String, String, HasPermissions)} creates a horizontal tab panel and adds it as a content * element of a vertical tab
  • - *
  • {@link #addToTabPanel(TabLayoutPanel, RefreshableAdminConsolePanel, String, Permission)} adds a widget as a + *
  • {@link #addToTabPanel(TabLayoutPanel, RefreshableAdminConsolePanel, String, HasPermissions)} adds a widget as a * content element of a horizontal tab
  • *
* @@ -60,7 +60,7 @@ import com.sap.sse.security.ui.shared.UserDTO; * roles. The {@link #initUI()} method must be called each time more widgets have been added dynamically. *

* - * For each widget added, a {@link Permission set of permissions} needs to be specified, any of which is sufficient to + * For each widget added, a {@link HasPermissions set of permissions} needs to be specified, any of which is sufficient to * get to see the widget. When the user changes or has his/her permissions updated the set of tabs visible will be * adjusted according to the new roles available for the logged-in user. *

@@ -73,14 +73,14 @@ public class AdminConsolePanel extends HeaderPanel implements HandleTabSelectabl /** * The administration console's UI depends on the user's roles. When the roles change then so shall the display of - * tabs. Required {@link Permission}s tell when they are to be made available based on the user's actual + * tabs. Required {@link HasPermissions}s tell when they are to be made available based on the user's actual * permissions. This map keeps track of the dependencies and allows the UI to adjust to role changes.

* * The values are the permissions, at least one of which is required from the user to be able to see the widget. */ private final LinkedHashSet> roleSpecificTabs; - private final Map> permissionsAnyOfWhichIsRequiredToSeeWidget; + private final Map> permissionsAnyOfWhichIsRequiredToSeeWidget; private final SelectionHandler tabSelectionHandler; @@ -99,14 +99,14 @@ public class AdminConsolePanel extends HeaderPanel implements HandleTabSelectabl /** * If {@code null}, any permission will be accepted by - * {@link #remeberWidgetLocationAndPermissions(VerticalOrHorizontalTabLayoutPanel, Widget, String, Permission...)} + * {@link #remeberWidgetLocationAndPermissions(VerticalOrHorizontalTabLayoutPanel, Widget, String, HasPermissions...)} * which is used by all methods that add a panel and optionally specify permissions required to see that panel. * If this field holds a valid permission collection, only permissions from this collection will be accepted. * This can be used to keep a central repository of all such permissions which in turn may be used to * automatically create a role that implies all those permissions for users to have full access to the * admin console and its panels. */ - private final Iterable acceptablePermissionsRequiredToSeeWidgets; + private final Iterable acceptablePermissionsRequiredToSeeWidgets; /** * Generic selection handler that forwards selected tabs to a refresher that ensures that data gets reloaded. If @@ -169,7 +169,7 @@ public class AdminConsolePanel extends HeaderPanel implements HandleTabSelectabl public AdminConsolePanel(UserService userService, ServerInfoRetriever buildVersionRetriever, String releaseNotesAnchorLabel, String releaseNotesURL, ErrorReporter errorReporter, LoginPanelCss loginPanelCss, StringMessages stringMessages, - Iterable acceptablePermissionsRequiredToSeeWidgets) { + Iterable acceptablePermissionsRequiredToSeeWidgets) { this.acceptablePermissionsRequiredToSeeWidgets = acceptablePermissionsRequiredToSeeWidgets; this.permissionsAnyOfWhichIsRequiredToSeeWidget = new HashMap<>(); this.userService = userService; @@ -272,7 +272,7 @@ public class AdminConsolePanel extends HeaderPanel implements HandleTabSelectabl * @return the horizontal tab panel that was created and added to the top-level vertical tab panel; the panel returned can be specified * as argument to {@link #addToTabPanel(TabLayoutPanel, Widget, String, AdminConsoleFeatures)}. */ - public HorizontalTabLayoutPanel addVerticalTab(String tabTitle, String tabDebugId, Permission... requiresAnyOfThesePermissions) { + public HorizontalTabLayoutPanel addVerticalTab(String tabTitle, String tabDebugId, HasPermissions... requiresAnyOfThesePermissions) { final HorizontalTabLayoutPanel newTabPanel = new HorizontalTabLayoutPanel(2.5, Unit.EM); AbstractEntryPoint.setTabPanelSize(newTabPanel, "100%", "100%"); newTabPanel.addSelectionHandler(tabSelectionHandler); @@ -286,7 +286,7 @@ public class AdminConsolePanel extends HeaderPanel implements HandleTabSelectabl * This is useful for panels that form a top-level category of its own but don't require multiple panels to represent this * top-level category. */ - public void addToVerticalTabPanel(final RefreshableAdminConsolePanel panelToAdd, String tabTitle, Permission... requiresAnyOfThesePermissions) { + public void addToVerticalTabPanel(final RefreshableAdminConsolePanel panelToAdd, String tabTitle, HasPermissions... requiresAnyOfThesePermissions) { addToTabPanel(topLevelTabPanelWrapper, panelToAdd, tabTitle, requiresAnyOfThesePermissions); } @@ -297,7 +297,7 @@ public class AdminConsolePanel extends HeaderPanel implements HandleTabSelectabl return scrollPanel; } - public void addToTabPanel(final HorizontalTabLayoutPanel tabPanel, RefreshableAdminConsolePanel panelToAdd, String tabTitle, Permission... requiresAnyOfThesePermissions) { + public void addToTabPanel(final HorizontalTabLayoutPanel tabPanel, RefreshableAdminConsolePanel panelToAdd, String tabTitle, HasPermissions... requiresAnyOfThesePermissions) { VerticalOrHorizontalTabLayoutPanel wrapper = new VerticalOrHorizontalTabLayoutPanel() { @Override public void add(Widget child, String text, boolean asHtml) { @@ -339,7 +339,7 @@ public class AdminConsolePanel extends HeaderPanel implements HandleTabSelectabl * a hook so that when the panelToAdd's widget is selected then the {@link RefreshableAdminConsolePanel#refreshAfterBecomingVisible()} * method can be called. */ - private void addToTabPanel(VerticalOrHorizontalTabLayoutPanel tabPanel, RefreshableAdminConsolePanel panelToAdd, String tabTitle, Permission... requiresAnyOfThesePermissions) { + private void addToTabPanel(VerticalOrHorizontalTabLayoutPanel tabPanel, RefreshableAdminConsolePanel panelToAdd, String tabTitle, HasPermissions... requiresAnyOfThesePermissions) { remeberWidgetLocationAndPermissions(tabPanel, wrapInScrollPanel(panelToAdd.getWidget()), tabTitle, requiresAnyOfThesePermissions); panelsByWidget.put(panelToAdd.getWidget(), panelToAdd); } @@ -357,9 +357,9 @@ public class AdminConsolePanel extends HeaderPanel implements HandleTabSelectabl * regardless their actual permissions. */ private void remeberWidgetLocationAndPermissions(VerticalOrHorizontalTabLayoutPanel tabPanel, Widget widgetToAdd, - String tabTitle, Permission... requiresAnyOfThesePermissions) { + String tabTitle, HasPermissions... requiresAnyOfThesePermissions) { if (acceptablePermissionsRequiredToSeeWidgets != null) { - for (final Permission requiredPermission : requiresAnyOfThesePermissions) { + for (final HasPermissions requiredPermission : requiresAnyOfThesePermissions) { if (!Util.contains(acceptablePermissionsRequiredToSeeWidgets, requiredPermission)) { throw new RuntimeException("Internal error: permission "+requiredPermission+ " missing from the set of acceptable admin console permissions "+acceptablePermissionsRequiredToSeeWidgets); @@ -367,9 +367,9 @@ public class AdminConsolePanel extends HeaderPanel implements HandleTabSelectabl } } roleSpecificTabs.add(new Triple(tabPanel, widgetToAdd, tabTitle)); - final HashSet permissionsAsSet = new HashSet<>(Arrays.asList(requiresAnyOfThesePermissions)); + final HashSet permissionsAsSet = new HashSet<>(Arrays.asList(requiresAnyOfThesePermissions)); permissionsAnyOfWhichIsRequiredToSeeWidget.put(widgetToAdd, permissionsAsSet); - Set permissionsForTabPanel = permissionsAnyOfWhichIsRequiredToSeeWidget.get(tabPanel.getPanel()); + Set permissionsForTabPanel = permissionsAnyOfWhichIsRequiredToSeeWidget.get(tabPanel.getPanel()); if (permissionsForTabPanel == null) { permissionsForTabPanel = new HashSet<>(); permissionsAnyOfWhichIsRequiredToSeeWidget.put(tabPanel.getPanel(), permissionsForTabPanel); @@ -469,7 +469,7 @@ public class AdminConsolePanel extends HeaderPanel implements HandleTabSelectabl * is also implied. */ private boolean userHasPermissionsToSeeWidget(UserDTO user, Widget widget) { - for (Permission requiredStringPermission : permissionsAnyOfWhichIsRequiredToSeeWidget.get(widget)) { + for (HasPermissions requiredStringPermission : permissionsAnyOfWhichIsRequiredToSeeWidget.get(widget)) { WildcardPermission requiredPermission = requiredStringPermission.getPermission(); if (PermissionChecker.isPermitted(requiredPermission, user, user.getUserGroups(), /* ownership */ null, /* acl */ null)) { return true; diff --git a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/Permission.java b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/HasPermissions.java similarity index 97% rename from java/com.sap.sse.security.common/src/com/sap/sse/security/shared/Permission.java rename to java/com.sap.sse.security.common/src/com/sap/sse/security/shared/HasPermissions.java index 1d238fde03b..b4b0ca6e20c 100755 --- a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/Permission.java +++ b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/HasPermissions.java @@ -11,7 +11,7 @@ package com.sap.sse.security.shared; * @author Axel Uhl (d043530) * */ -public interface Permission { +public interface HasPermissions { String name(); /** @@ -30,7 +30,7 @@ public interface Permission { /** * Produces a string permission for this permission, the mode specified as the second wildcard * permission segment, and the objectIdentifier as the third wildcard permission segment. The object - * identifiers must be unique within the scope defined by this {@link Permission} which represents an object + * identifiers must be unique within the scope defined by this {@link HasPermissions} which represents an object * category or type, such as, e.g., "LEADERBOARD." * * @param objectIdentifiers diff --git a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/RolePrototype.java b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/RolePrototype.java index 65403b8d59b..bc5d400ec9b 100755 --- a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/RolePrototype.java +++ b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/RolePrototype.java @@ -13,14 +13,14 @@ public abstract class RolePrototype implements RoleDefinition { private final String name; private final Set permissions; - protected RolePrototype(String name, String uuidAsString, Iterable permissions) { + protected RolePrototype(String name, String uuidAsString, Iterable permissions) { this(name, uuidAsString, getWildcardPermissions(permissions)); } - private static WildcardPermission[] getWildcardPermissions(Iterable permissions) { + private static WildcardPermission[] getWildcardPermissions(Iterable permissions) { final WildcardPermission[] result = new WildcardPermission[Util.size(permissions)]; int i=0; - for (final Permission p : permissions) { + for (final HasPermissions p : permissions) { result[i++] = p.getPermission(); } return result; diff --git a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/UserRole.java b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/UserRole.java index e8aed5772fa..91db94863b3 100755 --- a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/UserRole.java +++ b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/UserRole.java @@ -9,8 +9,8 @@ public class UserRole extends RolePrototype { UserRole() { super("user", "ad1d5148-b13d-4464-90c4-7c396e4d4e2e", - new WildcardPermission(DefaultPermissions.USER.getStringPermission(Permission.DefaultModes.UPDATE)), - new WildcardPermission(DefaultPermissions.USER.getStringPermission(Permission.DefaultModes.READ))); + new WildcardPermission(DefaultPermissions.USER.getStringPermission(HasPermissions.DefaultModes.UPDATE)), + new WildcardPermission(DefaultPermissions.USER.getStringPermission(HasPermissions.DefaultModes.READ))); } public static UserRole getInstance() { diff --git a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/DefaultPermissions.java b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/DefaultPermissions.java index e1540183208..40d9f97c7b0 100755 --- a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/DefaultPermissions.java +++ b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/DefaultPermissions.java @@ -3,7 +3,7 @@ package com.sap.sse.security.shared.impl; import com.sap.sse.security.shared.QualifiedObjectIdentifier; import com.sap.sse.security.shared.WildcardPermission; -public enum DefaultPermissions implements com.sap.sse.security.shared.Permission { +public enum DefaultPermissions implements com.sap.sse.security.shared.HasPermissions { // back-end permissions USER, USER_GROUP, @@ -11,14 +11,14 @@ public enum DefaultPermissions implements com.sap.sse.security.shared.Permission // TODO once we can use Java8 here, move this up into a "default" method on the Permission interface @Override - public String getStringPermission(com.sap.sse.security.shared.Permission.Mode... modes) { + public String getStringPermission(com.sap.sse.security.shared.HasPermissions.Mode... modes) { final String result; if (modes==null || modes.length==0) { result = name(); } else { final StringBuilder modesString = new StringBuilder(); boolean first = true; - for (com.sap.sse.security.shared.Permission.Mode mode : modes) { + for (com.sap.sse.security.shared.HasPermissions.Mode mode : modes) { if (first) { first = false; } else { @@ -32,13 +32,13 @@ public enum DefaultPermissions implements com.sap.sse.security.shared.Permission } @Override - public WildcardPermission getPermission(com.sap.sse.security.shared.Permission.Mode... modes) { + public WildcardPermission getPermission(com.sap.sse.security.shared.HasPermissions.Mode... modes) { return new WildcardPermission(getStringPermission(modes)); } // TODO once we can use Java8 here, move this up into a "default" method on the Permission interface @Override - public String getStringPermissionForObjects(com.sap.sse.security.shared.Permission.Mode mode, String... objectIdentifiers) { + public String getStringPermissionForObjects(com.sap.sse.security.shared.HasPermissions.Mode mode, String... objectIdentifiers) { final WildcardPermissionEncoder permissionEncoder = new WildcardPermissionEncoder(); final StringBuilder result = new StringBuilder(getStringPermission(mode)); if (objectIdentifiers!=null && objectIdentifiers.length>0) { @@ -62,7 +62,7 @@ public enum DefaultPermissions implements com.sap.sse.security.shared.Permission } @Override - public WildcardPermission getPermissionForObjects(com.sap.sse.security.shared.Permission.Mode mode, String... objectIdentifiers) { + public WildcardPermission getPermissionForObjects(com.sap.sse.security.shared.HasPermissions.Mode mode, String... objectIdentifiers) { return new WildcardPermission(getStringPermissionForObjects(mode, objectIdentifiers)); } } diff --git a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/PermissionImpl.java b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/PermissionImpl.java index 12e34716761..4ac59ac5548 100755 --- a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/PermissionImpl.java +++ b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/PermissionImpl.java @@ -1,10 +1,10 @@ package com.sap.sse.security.shared.impl; -import com.sap.sse.security.shared.Permission; +import com.sap.sse.security.shared.HasPermissions; import com.sap.sse.security.shared.QualifiedObjectIdentifier; import com.sap.sse.security.shared.WildcardPermission; -public class PermissionImpl implements Permission { +public class PermissionImpl implements HasPermissions { private final String permissionTypeName; private PermissionImpl(String permissionTypeName) { diff --git a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/PermissionToObjectIdConverter.java b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/PermissionToObjectIdConverter.java index 0be46e39f21..7913ad3244c 100755 --- a/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/PermissionToObjectIdConverter.java +++ b/java/com.sap.sse.security.common/src/com/sap/sse/security/shared/impl/PermissionToObjectIdConverter.java @@ -4,11 +4,11 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; -import com.sap.sse.security.shared.Permission; +import com.sap.sse.security.shared.HasPermissions; import com.sap.sse.security.shared.WildcardPermission; /** - * Can convert Shiro {@link Permission} objects into {@link WildcardPermission} objects and can extract an object ID as + * Can convert Shiro {@link HasPermissions} objects into {@link WildcardPermission} objects and can extract an object ID as * {@link String} from either such permission which can then be used to parameterize the {@link AccessControlStore}, * e.g., to look up ownership and ACL information for an object for which permissions are requested. *

diff --git a/java/com.sap.sse.security.test/src/com/sap/sse/security/test/PermissionCheckerTest.java b/java/com.sap.sse.security.test/src/com/sap/sse/security/test/PermissionCheckerTest.java index 9393d6b9eb3..c7e13e724bf 100755 --- a/java/com.sap.sse.security.test/src/com/sap/sse/security/test/PermissionCheckerTest.java +++ b/java/com.sap.sse.security.test/src/com/sap/sse/security/test/PermissionCheckerTest.java @@ -24,7 +24,7 @@ import com.sap.sse.security.UsernamePasswordRealm; import com.sap.sse.security.shared.AccessControlList; import com.sap.sse.security.shared.AdminRole; import com.sap.sse.security.shared.Ownership; -import com.sap.sse.security.shared.Permission.DefaultModes; +import com.sap.sse.security.shared.HasPermissions.DefaultModes; import com.sap.sse.security.shared.PermissionChecker; import com.sap.sse.security.shared.RoleDefinition; import com.sap.sse.security.shared.RoleDefinitionImpl; diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/AuthorizedContentDecorator.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/AuthorizedContentDecorator.java index f81c0c84ec7..3fd47150317 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/AuthorizedContentDecorator.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/AuthorizedContentDecorator.java @@ -8,7 +8,7 @@ import com.google.gwt.user.client.ui.ProvidesResize; import com.google.gwt.user.client.ui.RequiresResize; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; -import com.sap.sse.security.shared.Permission; +import com.sap.sse.security.shared.HasPermissions; import com.sap.sse.security.ui.authentication.app.AuthenticationContext; import com.sap.sse.security.ui.authentication.app.NeedsAuthenticationContext; import com.sap.sse.security.ui.client.i18n.StringMessages; @@ -127,7 +127,7 @@ public class AuthorizedContentDecorator extends Composite implements RequiresRes * * @param permissionToCheck the permission to check */ - public void setPermissionToCheck(Permission permissionToCheck) { + public void setPermissionToCheck(HasPermissions permissionToCheck) { setPermissionToCheck(permissionToCheck.getStringPermission()); } } diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserEditDialog.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserEditDialog.java index 0f8b709c270..d4e6d78da68 100755 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserEditDialog.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserEditDialog.java @@ -31,7 +31,7 @@ import com.sap.sse.gwt.client.Notification.NotificationType; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; import com.sap.sse.gwt.client.controls.listedit.StringListEditorComposite; import com.sap.sse.gwt.client.dialog.DataEntryDialog; -import com.sap.sse.security.shared.Permission; +import com.sap.sse.security.shared.HasPermissions; import com.sap.sse.security.shared.Role; import com.sap.sse.security.shared.RoleDefinition; import com.sap.sse.security.shared.RoleImpl; @@ -84,7 +84,7 @@ public class UserEditDialog extends DataEntryDialog>>> callback, - UserService userService, Iterable additionalPermissions, ErrorReporter errorReporter) { + UserService userService, Iterable additionalPermissions, ErrorReporter errorReporter) { super(stringMessages.editUser(), null, stringMessages.ok(), stringMessages .cancel(), /* validator */ null, /* animationEnabled */true, callback); this.ensureDebugId("UserEditDialog"); @@ -99,7 +99,7 @@ public class UserEditDialog extends DataEntryDialog defaultPermissionNames = new ArrayList<>(); - for (Permission permission : additionalPermissions) { + for (HasPermissions permission : additionalPermissions) { defaultPermissionNames.add(permission.getStringPermission()); } permissionsEditor = new StringListEditorComposite(userToEdit==null?Collections.emptySet():userToEdit.getStringPermissions(), stringMessages, diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserManagementPanel.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserManagementPanel.java index 90a77146de6..a181e8824a9 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserManagementPanel.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserManagementPanel.java @@ -27,7 +27,7 @@ import com.sap.sse.gwt.client.celltable.CellTableWithCheckboxResources; import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel; import com.sap.sse.gwt.client.panels.LabeledAbstractFilterablePanel; import com.sap.sse.security.shared.AccessControlListAnnotation; -import com.sap.sse.security.shared.Permission; +import com.sap.sse.security.shared.HasPermissions; import com.sap.sse.security.ui.client.UserManagementServiceAsync; import com.sap.sse.security.ui.client.UserService; import com.sap.sse.security.ui.client.component.AccessControlListListDataProvider; @@ -51,11 +51,11 @@ public class UserManagementPanel exte public UserManagementPanel(final UserService userService, final StringMessages stringMessages, ErrorReporter errorReporter, TR tableResources) { - this(userService, stringMessages, Collections.emptySet(), errorReporter, tableResources); + this(userService, stringMessages, Collections.emptySet(), errorReporter, tableResources); } public UserManagementPanel(final UserService userService, final StringMessages stringMessages, - Iterable additionalPermissions, ErrorReporter errorReporter, TR tableResources) { + Iterable additionalPermissions, ErrorReporter errorReporter, TR tableResources) { final UserManagementServiceAsync userManagementService = userService.getUserManagementService(); VerticalPanel west = new VerticalPanel(); HorizontalPanel buttonPanel = new HorizontalPanel(); diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserTableWrapper.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserTableWrapper.java index 8d42f00857d..c736da7c989 100755 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserTableWrapper.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/usermanagement/UserTableWrapper.java @@ -32,7 +32,7 @@ import com.sap.sse.gwt.client.celltable.RefreshableSelectionModel; 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.Permission; +import com.sap.sse.security.shared.HasPermissions; import com.sap.sse.security.shared.Role; import com.sap.sse.security.shared.UserGroup; import com.sap.sse.security.shared.WildcardPermission; @@ -59,7 +59,7 @@ extends TableWrapper { private final UserService userService; public UserTableWrapper(UserService userService, - Iterable additionalPermissions, StringMessages stringMessages, + Iterable additionalPermissions, StringMessages stringMessages, ErrorReporter errorReporter, boolean multiSelection, boolean enablePager, TR tableResources) { super(stringMessages, errorReporter, multiSelection, enablePager, new EntityIdentityComparator() { @@ -243,7 +243,7 @@ extends TableWrapper { filterField.updateAll(result); } - private void editUser(final UserDTO originalUser, Iterable additionalPermissions) { + private void editUser(final UserDTO originalUser, Iterable additionalPermissions) { final UserEditDialog dialog = new UserEditDialog(originalUser, new DialogCallback>>>() { @Override public void ok(final Pair>> userAndRoles) {