From 62b2088397f0814eb92f20a098d5e5d9ca0f529e Mon Sep 17 00:00:00 2001 From: Radoslaw Szwajkowski Date: Fri, 4 Mar 2022 10:32:27 +0100 Subject: [PATCH] webadmin: add Account Settings sub-tab Add a new sub-tab under Administration -> Users -> {user} that allows viewing user settings. The settings are displayed unformated as JSON or plain text depending on the property type. Only remove operation is supported. Main use case is troubleshooting problems related to user settings. With the new view, the admin is able to restore the default configuration by removing incorrect user properties. --- .../ui/common/CommonApplicationConstants.java | 2 + .../users/UserSettingsModelTable.java | 66 ++++++++++ .../CommonApplicationConstants.properties | 1 + .../models/users/UserListModel.java | 10 +- .../models/users/UserSettingsModel.java | 121 ++++++++++++++++++ .../place/WebAdminApplicationPlaces.java | 1 + .../ui/webadmin/gin/PresenterModule.java | 9 ++ .../ui/webadmin/gin/uicommon/UserModule.java | 17 +++ .../presenter/tab/DetailTabDataIndex.java | 12 +- .../tab/user/SubTabUserSettingsPresenter.java | 47 +++++++ .../tab/user/UserSubTabPanelPresenter.java | 1 + .../view/tab/user/SubTabUserSettingsView.java | 32 +++++ .../tab/user/UserSettingsActionPanel.java | 39 ++++++ 13 files changed, 352 insertions(+), 6 deletions(-) create mode 100644 frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/users/UserSettingsModelTable.java create mode 100644 frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserSettingsModel.java create mode 100644 frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/SubTabUserSettingsPresenter.java create mode 100644 frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/user/SubTabUserSettingsView.java create mode 100644 frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/user/UserSettingsActionPanel.java diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index 686488f4368..7d6eddd378d 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -1960,4 +1960,6 @@ public interface CommonApplicationConstants extends Constants { String configChangesPending(); String permissionFilter(); + + String propertyId(); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/users/UserSettingsModelTable.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/users/UserSettingsModelTable.java new file mode 100644 index 00000000000..3a325be32ea --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/users/UserSettingsModelTable.java @@ -0,0 +1,66 @@ +package org.ovirt.engine.ui.common.widget.uicommon.users; + +import org.ovirt.engine.core.common.businessentities.UserProfileProperty; +import org.ovirt.engine.core.common.businessentities.aaa.DbUser; +import org.ovirt.engine.ui.common.CommonApplicationConstants; +import org.ovirt.engine.ui.common.gin.AssetProvider; +import org.ovirt.engine.ui.common.presenter.DetailActionPanelPresenterWidget; +import org.ovirt.engine.ui.common.system.ClientStorage; +import org.ovirt.engine.ui.common.uicommon.model.SearchableTableModelProvider; +import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; +import org.ovirt.engine.ui.common.widget.uicommon.AbstractModelBoundTableWidget; +import org.ovirt.engine.ui.uicommonweb.models.users.UserListModel; +import org.ovirt.engine.ui.uicommonweb.models.users.UserSettingsModel; + +import com.google.gwt.event.shared.EventBus; + +public class UserSettingsModelTable extends AbstractModelBoundTableWidget { + + private static final CommonApplicationConstants constants = AssetProvider.getConstants(); + + public UserSettingsModelTable(SearchableTableModelProvider modelProvider, + EventBus eventBus, + DetailActionPanelPresenterWidget actionPanel, + ClientStorage clientStorage) { + super(modelProvider, eventBus, actionPanel, clientStorage, false); + } + + @Override + public void initTable() { + getTable().enableColumnResizing(); + + AbstractTextColumn nameColumn = new AbstractTextColumn() { + @Override + public String getValue(UserProfileProperty property) { + return property.getName(); + } + }; + nameColumn.makeSortable(); + getTable().addColumn(nameColumn, constants.name(), "200px"); //$NON-NLS-1$ + + AbstractTextColumn idColumn = new AbstractTextColumn() { + @Override + public String getValue(UserProfileProperty property) { + return property.getPropertyId().toString(); + } + }; + getTable().addColumn(idColumn, constants.propertyId(), "250px"); //$NON-NLS-1$ + + AbstractTextColumn typeColumn = new AbstractTextColumn() { + @Override + public String getValue(UserProfileProperty property) { + return property.getType().name(); + } + }; + typeColumn.makeSortable(); + getTable().addColumn(typeColumn, constants.typePermission(), "110px"); //$NON-NLS-1$ + + AbstractTextColumn contentColumn = new AbstractTextColumn() { + @Override + public String getValue(UserProfileProperty property) { + return property.getContent(); + } + }; + getTable().addColumn(contentColumn, constants.contentDisk(), "50%"); //$NON-NLS-1$ + } +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants.properties b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants.properties index 4ffbf62ceea..676d9def608 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants.properties +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/CommonApplicationConstants.properties @@ -608,6 +608,7 @@ profileDescriptionLabel=Description profileNameInterface=Profile Name profileNameLabel=Name profileNetworkInterfacePopup=Profile +propertyId=Property ID providerLabel=Provider provisionedSizeDisk=Virtual Size provisionedSizeVmDiskTable=Virtual Size diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserListModel.java index 812b7a8a76e..7d8ba296385 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserListModel.java @@ -76,6 +76,8 @@ private void setAssignTagsCommand(UICommand value) { privateAssignTagsCommand = value; } + + private final UserSettingsModel userSettingsModel; private final UserGroupListModel groupListModel; private final UserEventNotifierListModel eventNotifierListModel; private final UserGeneralModel generalModel; @@ -89,7 +91,8 @@ public UserListModel(final UserGroupListModel userGroupListModel, final UserGeneralModel userGeneralModel, final UserQuotaListModel userQuotaListModel, final UserPermissionListModel userPermissionListModel, - final UserEventListModel userEventListModel) { + final UserEventListModel userEventListModel, + final UserSettingsModel userSettingsModel) { setIsTimerDisabled(true); this.groupListModel = userGroupListModel; this.eventNotifierListModel = userEventNotifierListModel; @@ -97,6 +100,7 @@ public UserListModel(final UserGroupListModel userGroupListModel, this.permissionListModel = userPermissionListModel; this.quotaListModel = userQuotaListModel; this.eventListModel = userEventListModel; + this.userSettingsModel = userSettingsModel; setDetailList(); setTitle(ConstantsManager.getInstance().getConstants().usersTitle()); setApplicationPlace(WebAdminApplicationPlaces.userMainPlace); @@ -118,6 +122,7 @@ public UserListModel(final UserGroupListModel userGroupListModel, private void setDetailList() { List> list = new ArrayList<>(); list.add(generalModel); + list.add(userSettingsModel); list.add(quotaListModel); list.add(permissionListModel); list.add(eventListModel); @@ -567,4 +572,7 @@ public UserEventListModel getEventListModel() { return eventListModel; } + public UserSettingsModel getUserSettingsModel() { + return userSettingsModel; + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserSettingsModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserSettingsModel.java new file mode 100644 index 00000000000..d87642d1b62 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/UserSettingsModel.java @@ -0,0 +1,121 @@ +package org.ovirt.engine.ui.uicommonweb.models.users; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +import org.ovirt.engine.core.common.businessentities.UserProfileProperty; +import org.ovirt.engine.core.common.businessentities.aaa.DbUser; +import org.ovirt.engine.core.common.queries.QueryType; +import org.ovirt.engine.core.common.queries.UserProfilePropertyIdQueryParameters; +import org.ovirt.engine.ui.frontend.Frontend; +import org.ovirt.engine.ui.frontend.NotificationStatus; +import org.ovirt.engine.ui.frontend.UserProfileManager; +import org.ovirt.engine.ui.uicommonweb.BaseCommandTarget; +import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; +import org.ovirt.engine.ui.uicompat.ConstantsManager; +import org.ovirt.engine.ui.uicompat.UIConstants; + +public class UserSettingsModel extends SearchableListModel { + + private static final UIConstants constants = ConstantsManager.getInstance().getConstants(); + + private final UICommand removeCommand; + + public UserSettingsModel() { + setTitle(ConstantsManager.getInstance().getConstants().accountSettings()); + setHashName("user_settings"); //$NON-NLS-1$ + + removeCommand = new UICommand("Remove", new BaseCommandTarget() {//$NON-NLS-1$ + @Override + public void executeCommand(UICommand uiCommand) { + removeUserProfileProperty(); + } + }); + + updateActionAvailability(); + } + + private void removeUserProfileProperty() { + List selected = getSelectedItems(); + if (selected == null || selected.isEmpty()) { + return; + } + + List results = new ArrayList<>(); + Consumer markAsDone = result -> { + results.add(result); + if (results.size() >= selected.size()) { + syncSearch(); + } + }; + + for (UserProfileProperty prop : selected) { + Frontend.getInstance() + .getUserProfileManager() + .deleteProperty( + prop, + property -> markAsDone.accept(true), + error -> { + String validationMessage = + String.join("\n", error.getReturnValue().getValidationMessages()); //$NON-NLS-1$ + String faultMessage = error.getReturnValue().getFault().getMessage(); + String toastMessage = error.getReturnValue().isValid() ? faultMessage + : validationMessage.isEmpty() ? constants.noValidateMessage() + : validationMessage; + Frontend.getInstance() + .showToast( + toastMessage, + NotificationStatus.DANGER); + markAsDone.accept(false); + }, + (remote, local) -> UserProfileManager.BaseConflictResolutionStrategy.REPORT_ERROR, + this, + false); + } + } + + private void updateActionAvailability() { + getRemoveCommand().setIsExecutionAllowed(getSelectedItems() != null && getSelectedItems().size() > 0); + } + + public UICommand getRemoveCommand() { + return removeCommand; + } + + @Override + protected String getListName() { + return "UserSettingsModel"; //$NON-NLS-1$ + } + + @Override + protected void onEntityChanged() { + super.onEntityChanged(); + + getSearchCommand().execute(); + updateActionAvailability(); + } + + @Override + protected void syncSearch() { + DbUser user = getEntity(); + if (user != null) { + super.syncSearch(QueryType.GetUserProfilePropertiesByUserId, + new UserProfilePropertyIdQueryParameters(user.getId(), null)); + } + } + + @Override + protected void onSelectedItemChanged() { + super.onSelectedItemChanged(); + updateActionAvailability(); + } + + @Override + protected void selectedItemsChanged() { + super.selectedItemsChanged(); + updateActionAvailability(); + } + +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/place/WebAdminApplicationPlaces.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/place/WebAdminApplicationPlaces.java index b6bb5459c1f..148e9533ddb 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/place/WebAdminApplicationPlaces.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/place/WebAdminApplicationPlaces.java @@ -127,6 +127,7 @@ public final class WebAdminApplicationPlaces { // User public static final String userGeneralSubTabPlace = userMainPlace + SUB_TAB_PREFIX + "general"; //$NON-NLS-1$ + public static final String userSettingsSubTabPlace= userMainPlace + SUB_TAB_PREFIX + "settings"; //$NON-NLS-1$ public static final String userQuotaSubTabPlace = userMainPlace + SUB_TAB_PREFIX + "quota"; //$NON-NLS-1$ public static final String userGroupSubTabPlace = userMainPlace + SUB_TAB_PREFIX + "directory_groups"; //$NON-NLS-1$ public static final String userEventNotifierSubTabPlace = userMainPlace + SUB_TAB_PREFIX + "event_notifier"; //$NON-NLS-1$ diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java index 29080ac96b7..77dee959679 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java @@ -17,6 +17,7 @@ import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainDR; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.UserProfileProperty; import org.ovirt.engine.core.common.businessentities.UserSession; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VM; @@ -365,6 +366,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.user.SubTabUserGroupPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.user.SubTabUserPermissionPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.user.SubTabUserQuotaPresenter; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.user.SubTabUserSettingsPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.user.UserSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine.SubTabVirtualMachineAffinityGroupPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine.SubTabVirtualMachineAffinityLabelPresenter; @@ -652,6 +654,7 @@ import org.ovirt.engine.ui.webadmin.section.main.view.tab.user.SubTabUserGroupView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.user.SubTabUserPermissionView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.user.SubTabUserQuotaView; +import org.ovirt.engine.ui.webadmin.section.main.view.tab.user.SubTabUserSettingsView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.user.UserSubTabPanelView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.virtualMachine.SubTabVirtualMachineAffinityGroupView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.virtualMachine.SubTabVirtualMachineAffinityLabelView; @@ -1238,6 +1241,10 @@ protected void configure() { SubTabUserGeneralPresenter.ViewDef.class, SubTabUserGeneralView.class, SubTabUserGeneralPresenter.ProxyDef.class); + bindPresenter(SubTabUserSettingsPresenter.class, + SubTabUserSettingsPresenter.ViewDef.class, + SubTabUserSettingsView.class, + SubTabUserSettingsPresenter.ProxyDef.class); bindPresenter(SubTabUserPermissionPresenter.class, SubTabUserPermissionPresenter.ViewDef.class, SubTabUserPermissionView.class, @@ -1270,6 +1277,8 @@ protected void configure() { new TypeLiteral>(){}); bindActionPanel(new TypeLiteral>(){}, new TypeLiteral>(){}); + bindActionPanel(new TypeLiteral>(){}, + new TypeLiteral>(){}); // Quota bindPresenter(QuotaSubTabPanelPresenter.class, diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/UserModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/UserModule.java index aaeb6916f64..20a2299aeb8 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/UserModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/UserModule.java @@ -4,6 +4,7 @@ import org.ovirt.engine.core.common.businessentities.EventSubscriber; import org.ovirt.engine.core.common.businessentities.Permission; import org.ovirt.engine.core.common.businessentities.Quota; +import org.ovirt.engine.core.common.businessentities.UserProfileProperty; import org.ovirt.engine.core.common.businessentities.aaa.DbUser; import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; import org.ovirt.engine.ui.common.presenter.popup.DefaultConfirmationPopupPresenterWidget; @@ -26,6 +27,7 @@ import org.ovirt.engine.ui.uicommonweb.models.users.UserListModel; import org.ovirt.engine.ui.uicommonweb.models.users.UserPermissionListModel; import org.ovirt.engine.ui.uicommonweb.models.users.UserQuotaListModel; +import org.ovirt.engine.ui.uicommonweb.models.users.UserSettingsModel; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.AssignTagsPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.event.EventPopupPresenterWidget; @@ -173,6 +175,20 @@ public SearchableDetailModelProvider getUseSettingsModelProvider( + EventBus eventBus, + Provider defaultConfirmPopupProvider, + final Provider mainModelProvider, + final Provider modelProvider) { + SearchableDetailTabModelProvider result = + new SearchableDetailTabModelProvider<>(eventBus, defaultConfirmPopupProvider); + result.setMainModelProvider(mainModelProvider); + result.setModelProvider(modelProvider); + return result; + } + @Override protected void configure() { bind(UserListModel.class).in(Singleton.class); @@ -182,6 +198,7 @@ protected void configure() { bind(UserQuotaListModel.class).in(Singleton.class); bind(UserEventListModel.class).in(Singleton.class); bind(UserGroupListModel.class).in(Singleton.class); + bind(UserSettingsModel.class).in(Singleton.class); bind(UserMainSelectedItems.class).asEagerSingleton(); // Form Detail Models diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/DetailTabDataIndex.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/DetailTabDataIndex.java index a0488125888..a025d076dc1 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/DetailTabDataIndex.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/DetailTabDataIndex.java @@ -270,14 +270,16 @@ public final class DetailTabDataIndex { public static final TabData USER_GENERAL = new GroupedTabData(constants.userGeneralSubTabLabel(), 0); //$NON-NLS-1$ - public static final TabData USER_PERMISSION = new GroupedTabData(constants.userPermissionSubTabLabel(), 1); //$NON-NLS-1$ + public static final TabData USER_SETTINGS = new GroupedTabData(constants.accountSettings(), 1); //$NON-NLS-1$ - public static final TabData USER_QUOTA = new GroupedTabData(constants.userQuotaSubTabLabel(), 2); //$NON-NLS-1$ + public static final TabData USER_PERMISSION = new GroupedTabData(constants.userPermissionSubTabLabel(), 2); //$NON-NLS-1$ - public static final TabData USER_GROUP = new GroupedTabData(constants.userGroupsSubTabLabel(), 3); //$NON-NLS-1$ + public static final TabData USER_QUOTA = new GroupedTabData(constants.userQuotaSubTabLabel(), 3); //$NON-NLS-1$ - public static final TabData USER_EVENT_NOTIFIER = new GroupedTabData(constants.userEventNotifierSubTabLabel(), 4); //$NON-NLS-1$ + public static final TabData USER_GROUP = new GroupedTabData(constants.userGroupsSubTabLabel(), 4); //$NON-NLS-1$ - public static final TabData USER_EVENT = new GroupedTabData(constants.userEventSubTabLabel(), 5); //$NON-NLS-1$ + public static final TabData USER_EVENT_NOTIFIER = new GroupedTabData(constants.userEventNotifierSubTabLabel(), 5); //$NON-NLS-1$ + + public static final TabData USER_EVENT = new GroupedTabData(constants.userEventSubTabLabel(), 6); //$NON-NLS-1$ } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/SubTabUserSettingsPresenter.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/SubTabUserSettingsPresenter.java new file mode 100644 index 00000000000..0f7aab8c83f --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/SubTabUserSettingsPresenter.java @@ -0,0 +1,47 @@ +package org.ovirt.engine.ui.webadmin.section.main.presenter.tab.user; + +import org.ovirt.engine.core.common.businessentities.UserProfileProperty; +import org.ovirt.engine.core.common.businessentities.aaa.DbUser; +import org.ovirt.engine.ui.common.presenter.AbstractSubTabPresenter; +import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider; +import org.ovirt.engine.ui.uicommonweb.models.users.UserListModel; +import org.ovirt.engine.ui.uicommonweb.models.users.UserSettingsModel; +import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.DetailTabDataIndex; +import org.ovirt.engine.ui.webadmin.section.main.view.tab.user.SubTabUserSettingsView; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; +import com.gwtplatform.mvp.client.TabData; +import com.gwtplatform.mvp.client.annotations.NameToken; +import com.gwtplatform.mvp.client.annotations.ProxyCodeSplit; +import com.gwtplatform.mvp.client.annotations.TabInfo; +import com.gwtplatform.mvp.client.proxy.PlaceManager; +import com.gwtplatform.mvp.client.proxy.TabContentProxyPlace; + +public class SubTabUserSettingsPresenter + extends AbstractSubTabUserPresenter { + + @ProxyCodeSplit + @NameToken(WebAdminApplicationPlaces.userSettingsSubTabPlace) + public interface ProxyDef extends TabContentProxyPlace { + } + + public interface ViewDef extends AbstractSubTabPresenter.ViewDef { + } + + @TabInfo(container = UserSubTabPanelPresenter.class) + static TabData getTabData() { + return DetailTabDataIndex.USER_SETTINGS; + } + + @Inject + public SubTabUserSettingsPresenter(EventBus eventBus, SubTabUserSettingsView view, SubTabUserSettingsPresenter.ProxyDef proxy, + PlaceManager placeManager, UserMainSelectedItems selectedItems, + SearchableDetailModelProvider modelProvider) { + super(eventBus, view, proxy, placeManager, modelProvider, selectedItems, null, + UserSubTabPanelPresenter.TYPE_SetTabContent); + } + +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/UserSubTabPanelPresenter.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/UserSubTabPanelPresenter.java index 46091904b6c..9c9b4bb77d2 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/UserSubTabPanelPresenter.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/user/UserSubTabPanelPresenter.java @@ -53,6 +53,7 @@ public UserSubTabPanelPresenter(EventBus eventBus, ViewDef view, ProxyDef proxy, protected void initDetailTabToModelMapping(Map mapping) { UserListModel mainModel = modelProvider.getModel(); mapping.put(DetailTabDataIndex.USER_GENERAL, mainModel.getGeneralModel()); + mapping.put(DetailTabDataIndex.USER_SETTINGS, mainModel.getUserSettingsModel()); mapping.put(DetailTabDataIndex.USER_PERMISSION, mainModel.getPermissionListModel()); mapping.put(DetailTabDataIndex.USER_QUOTA, mainModel.getQuotaListModel()); mapping.put(DetailTabDataIndex.USER_GROUP, mainModel.getGroupListModel()); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/user/SubTabUserSettingsView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/user/SubTabUserSettingsView.java new file mode 100644 index 00000000000..220895d8255 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/user/SubTabUserSettingsView.java @@ -0,0 +1,32 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.tab.user; + +import org.ovirt.engine.core.common.businessentities.UserProfileProperty; +import org.ovirt.engine.core.common.businessentities.aaa.DbUser; +import org.ovirt.engine.ui.common.system.ClientStorage; +import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider; +import org.ovirt.engine.ui.common.view.AbstractSubTabTableWidgetView; +import org.ovirt.engine.ui.common.widget.uicommon.users.UserSettingsModelTable; +import org.ovirt.engine.ui.uicommonweb.models.users.UserListModel; +import org.ovirt.engine.ui.uicommonweb.models.users.UserSettingsModel; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.user.SubTabUserSettingsPresenter; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + +public class SubTabUserSettingsView extends AbstractSubTabTableWidgetView implements SubTabUserSettingsPresenter.ViewDef { + + @Inject + public SubTabUserSettingsView( + SearchableDetailModelProvider modelProvider, + EventBus eventBus, + UserSettingsActionPanel actionPanel, + ClientStorage clientStorage) { + super(new UserSettingsModelTable(modelProvider, + eventBus, + actionPanel, + clientStorage)); + initTable(); + initWidget(getModelBoundTableWidget()); + } + +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/user/UserSettingsActionPanel.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/user/UserSettingsActionPanel.java new file mode 100644 index 00000000000..b3522b7245a --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/user/UserSettingsActionPanel.java @@ -0,0 +1,39 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.tab.user; + +import org.ovirt.engine.core.common.businessentities.UserProfileProperty; +import org.ovirt.engine.core.common.businessentities.aaa.DbUser; +import org.ovirt.engine.ui.common.CommonApplicationConstants; +import org.ovirt.engine.ui.common.gin.AssetProvider; +import org.ovirt.engine.ui.common.presenter.DetailActionPanelPresenterWidget; +import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider; +import org.ovirt.engine.ui.common.widget.action.UiCommandButtonDefinition; +import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.models.users.UserListModel; +import org.ovirt.engine.ui.uicommonweb.models.users.UserSettingsModel; + +import com.google.inject.Inject; + +class UserSettingsActionPanel extends DetailActionPanelPresenterWidget { + + private static final CommonApplicationConstants constants = AssetProvider.getConstants(); + + @Inject + public UserSettingsActionPanel(com.google.web.bindery.event.shared.EventBus eventBus, + DetailActionPanelPresenterWidget.ViewDef view, + SearchableDetailModelProvider dataProvider) { + super(eventBus, view, dataProvider); + } + + @Override + protected void initializeButtons() { + + addActionButton(new UiCommandButtonDefinition(getSharedEventBus(), + constants.removeProfile()) { + @Override + protected UICommand resolveCommand() { + return getDetailModel().getRemoveCommand(); + } + }); + + } +}