Gilad Chaplik has uploaded a new change for review. Change subject: webadmin: add permission splitter to disk profiles ......................................................................
webadmin: add permission splitter to disk profiles Allow to view and manipulate permissions for disk profile entity within disk profile subtab (regular permission sub tab flow). Change-Id: Iefbcc953a2685406ae4883602e00beff0440f1be Signed-off-by: Gilad Chaplik <gchap...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/DiskProfileListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java M frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/DiskProfilesListModelTable.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/DiskProfilesListModelTable.ui.xml M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/SubTabStorageDiskProfileView.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/DiskProfilePermissionModelProvider.java 13 files changed, 379 insertions(+), 94 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/34/31834/1 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 a06924e..28fdda0 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 @@ -1889,4 +1889,23 @@ @DefaultStringValue("Authorization provider") String authz(); + + @DefaultStringValue("Name") + String diskProfileNameLabel(); + + @DefaultStringValue("Description") + String diskProfileDescriptionLabel(); + + @DefaultStringValue("QoS Name") + String storageQosName(); + + @DefaultStringValue("New") + String newDiskProfile(); + + @DefaultStringValue("Edit") + String editDiskProfile(); + + @DefaultStringValue("Remove") + String removeDiskProfile(); + } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java index 22e6ef1..dba6b42 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java @@ -80,6 +80,7 @@ import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VnicProfile; import org.ovirt.engine.core.common.businessentities.network.VnicProfileView; +import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.mode.ApplicationMode; import org.ovirt.engine.core.common.queries.ArchCapabilitiesParameters.ArchCapabilitiesVerb; @@ -3275,6 +3276,10 @@ { return ((VnicProfile) entity).getId(); } + else if (entity instanceof DiskProfile) + { + return ((DiskProfile) entity).getId(); + } return Guid.Empty; } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java index a501621..7872e19 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java @@ -87,7 +87,7 @@ private SearchableListModel dataCenterList; private SearchableListModel clusterList; private SearchableListModel hostList; - private SearchableListModel storageList; + private StorageListModel storageList; private SearchableListModel vmList; private SearchableListModel poolList; private SearchableListModel templateList; @@ -1104,6 +1104,14 @@ super.setSelectedItem(value); } + public StorageListModel getStorageList() { + return storageList; + } + + public void setStorageList(StorageListModel storageList) { + this.storageList = storageList; + } + public BookmarkListModel getBookmarkList() { return privateBookmarkList; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/DiskProfileListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/DiskProfileListModel.java index 80550b6..63538b8 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/DiskProfileListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/DiskProfileListModel.java @@ -20,16 +20,19 @@ import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; -import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; +import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel; +import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; +import org.ovirt.engine.ui.uicompat.ObservableCollection; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; -public class DiskProfileListModel extends SearchableListModel -{ +public class DiskProfileListModel extends ListWithDetailsModel { private UICommand newCommand; private UICommand editCommand; private UICommand removeCommand; private Map<Guid, StorageQos> qosMap; + PermissionListModel permissionListModel; public DiskProfileListModel() { setTitle(ConstantsManager.getInstance().getConstants().diskProfilesTitle()); @@ -41,6 +44,15 @@ setRemoveCommand(new UICommand("Remove", this)); //$NON-NLS-1$ updateActionAvailability(); + } + + @Override + protected void initDetailModels() { + super.initDetailModels(); + ObservableCollection<EntityModel> list = new ObservableCollection<EntityModel>(); + permissionListModel = new PermissionListModel(); + list.add(permissionListModel); + setDetailModels(list); } public void newProfile() { @@ -225,6 +237,14 @@ return qosMap.get(qosId); } + public PermissionListModel getPermissionListModel() { + return permissionListModel; + } + + public void setPermissionListModel(PermissionListModel permissionListModel) { + this.permissionListModel = permissionListModel; + } + @Override protected String getListName() { return "DiskProfileListModel"; //$NON-NLS-1$ diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java index d7420ba..01a5aa2 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java @@ -198,7 +198,7 @@ private ListModel isoListModel; private ListModel diskListModel; private ListModel snapshotListModel; - private ListModel diskProfileListModel; + private DiskProfileListModel diskProfileListModel; public StorageDomainStatic storageDomain; public TaskContext context; @@ -2307,4 +2307,12 @@ command.setIsDefault(true); return command; } + + public DiskProfileListModel getDiskProfileListModel() { + return diskProfileListModel; + } + + public void setDiskProfileListModel(DiskProfileListModel diskProfileListModel) { + this.diskProfileListModel = diskProfileListModel; + } } diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java index f21a22c..5857172 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java @@ -786,6 +786,8 @@ String VdcObjectType___VnicProfile(); + String VdcObjectType___DiskProfile(); + String VdsSelectionAlgorithm___None(); String VdsSelectionAlgorithm___EvenlyDistribute(); diff --git a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties index 792f020..2d5c6ec 100644 --- a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties +++ b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties @@ -391,6 +391,7 @@ VdcObjectType___AddWatchdog=Add Watchdog VdcObjectType___GlusterService=Gluster Service VdcObjectType___VnicProfile=Vnic Profile +VdcObjectType___DiskProfile=Disk Profile VdsSelectionAlgorithm___None=None VdsSelectionAlgorithm___EvenlyDistribute=Even Distribution VdsSelectionAlgorithm___PowerSave=Power Saving diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java index f06f44f..ee06ea6 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java @@ -3299,9 +3299,6 @@ @DefaultStringValue("Name") String networkQoSName(); - @DefaultStringValue("QoS Name") - String storageQosName(); - @DefaultStringValue("In Average") String networkQoSInboundAverage(); @@ -3836,19 +3833,4 @@ @DefaultStringValue("Storage Domain") String diskProfileStorageDomainLabel(); - - @DefaultStringValue("Name") - String diskProfileNameLabel(); - - @DefaultStringValue("Description") - String diskProfileDescriptionLabel(); - - @DefaultStringValue("New") - String newDiskProfile(); - - @DefaultStringValue("Edit") - String editDiskProfile(); - - @DefaultStringValue("Remove") - String removeDiskProfile(); } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java index 926a676..84b5781 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java @@ -1,6 +1,5 @@ package org.ovirt.engine.ui.webadmin.gin; -import com.google.inject.Singleton; import org.ovirt.engine.ui.common.gin.BaseUiCommonModule; import org.ovirt.engine.ui.uicommonweb.models.LoginModel; import org.ovirt.engine.ui.webadmin.gin.uicommon.ClusterModule; @@ -25,6 +24,7 @@ import org.ovirt.engine.ui.webadmin.uicommon.model.BookmarkModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.ClusterPolicyClusterModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.ClusterPolicyModelProvider; +import org.ovirt.engine.ui.webadmin.uicommon.model.DiskProfilePermissionModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.EventFirstRowModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.EventModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.InstanceTypeGeneralModelProvider; @@ -36,6 +36,8 @@ import org.ovirt.engine.ui.webadmin.uicommon.model.TagModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.TaskFirstRowModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.TaskModelProvider; + +import com.google.inject.Singleton; /** * GIN module containing WebAdmin UiCommon model and integration bindings. @@ -106,6 +108,9 @@ bind(InstanceTypeModelProvider.class).asEagerSingleton(); bind(InstanceTypeGeneralModelProvider.class).asEagerSingleton(); + + // disk profiles permissions + bind(DiskProfilePermissionModelProvider.class).asEagerSingleton(); } void bindIntegration() { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/DiskProfilesListModelTable.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/DiskProfilesListModelTable.java new file mode 100644 index 0000000..7bf9ef8 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/DiskProfilesListModelTable.java @@ -0,0 +1,166 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.tab.storage; + +import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; +import org.ovirt.engine.core.common.businessentities.qos.StorageQos; +import org.ovirt.engine.ui.common.CommonApplicationConstants; +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.TextColumnWithTooltip; +import org.ovirt.engine.ui.common.widget.uicommon.AbstractModelBoundTableWidget; +import org.ovirt.engine.ui.common.widget.uicommon.permissions.PermissionWithInheritedPermissionListModelTable; +import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; +import org.ovirt.engine.ui.uicommonweb.models.profiles.DiskProfileListModel; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; +import org.ovirt.engine.ui.webadmin.uicommon.model.DiskProfilePermissionModelProvider; +import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.SplitLayoutPanel; +import com.google.gwt.user.client.ui.Widget; + +public class DiskProfilesListModelTable extends AbstractModelBoundTableWidget<DiskProfile, DiskProfileListModel> { + + interface WidgetUiBinder extends UiBinder<Widget, DiskProfilesListModelTable> { + WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); + } + + private final PermissionWithInheritedPermissionListModelTable<PermissionListModel> permissionListModelTable; + + @UiField + SplitLayoutPanel splitLayoutPanel; + + @UiField + SimplePanel tableContainer; + + SimplePanel permissionContainer; + + private boolean permissionPanelVisible = false; + + public DiskProfilesListModelTable(SearchableTableModelProvider<DiskProfile, DiskProfileListModel> modelProvider, + DiskProfilePermissionModelProvider diskProfilePermissionModelProvider, + EventBus eventBus, + ClientStorage clientStorage, + CommonApplicationConstants constants) { + super(modelProvider, eventBus, clientStorage, false); + // Create disk profile table + tableContainer.add(getTable()); + + // Create permission panel + permissionListModelTable = + new PermissionWithInheritedPermissionListModelTable<PermissionListModel>(diskProfilePermissionModelProvider, + eventBus, + clientStorage); + permissionListModelTable.initTable(constants); + permissionContainer = new SimplePanel(); + permissionContainer.add(permissionListModelTable); + } + + @Override + protected Widget getWrappedWidget() { + return WidgetUiBinder.uiBinder.createAndBindUi(this); + } + + @Override + public void initTable(final CommonApplicationConstants constants) { + getTable().enableColumnResizing(); + + TextColumnWithTooltip<DiskProfile> nameColumn = + new TextColumnWithTooltip<DiskProfile>() { + @Override + public String getValue(DiskProfile object) { + return object.getName(); + } + }; + getTable().addColumn(nameColumn, constants.diskProfileNameLabel(), "200px"); //$NON-NLS-1$ + nameColumn.makeSortable(); + + TextColumnWithTooltip<DiskProfile> descriptionColumn = + new TextColumnWithTooltip<DiskProfile>() { + @Override + public String getValue(DiskProfile object) { + return object.getDescription(); + } + }; + getTable().addColumn(descriptionColumn, constants.diskProfileDescriptionLabel(), "200px"); //$NON-NLS-1$ + descriptionColumn.makeSortable(); + + TextColumnWithTooltip<DiskProfile> qosColumn = new TextColumnWithTooltip<DiskProfile>() { + @Override + public String getValue(DiskProfile object) { + String name = constants.UnlimitedStorageQos(); + if (object.getQosId() != null) { + StorageQos storageQos = getModel().getStorageQos(object.getQosId()); + if (storageQos != null) { + name = storageQos.getName(); + } + } + return name; + } + }; + getTable().addColumn(qosColumn, constants.storageQosName(), "200px"); //$NON-NLS-1$ + qosColumn.makeSortable(); + + getTable().addActionButton(new WebAdminButtonDefinition<DiskProfile>(constants.newDiskProfile()) { + @Override + protected UICommand resolveCommand() { + return getModel().getNewCommand(); + } + }); + getTable().addActionButton(new WebAdminButtonDefinition<DiskProfile>(constants.editDiskProfile()) { + @Override + protected UICommand resolveCommand() { + return getModel().getEditCommand(); + } + }); + getTable().addActionButton(new WebAdminButtonDefinition<DiskProfile>(constants.removeDiskProfile()) { + @Override + protected UICommand resolveCommand() { + return getModel().getRemoveCommand(); + } + }); + + // Add selection listener + getModel().getSelectedItemChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + updatePermissionPanel(); + } + }); + + getModel().getItemsChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + updatePermissionPanel(); + } + }); + } + + private void updatePermissionPanel() { + final DiskProfile diskProfile = (DiskProfile) getModel().getSelectedItem(); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + + @Override + public void execute() { + if (permissionPanelVisible && diskProfile == null) { + splitLayoutPanel.clear(); + splitLayoutPanel.add(tableContainer); + permissionPanelVisible = false; + } else if (!permissionPanelVisible && diskProfile != null) { + splitLayoutPanel.clear(); + splitLayoutPanel.addEast(permissionContainer, 600); + splitLayoutPanel.add(tableContainer); + permissionPanelVisible = true; + } + } + }); + } +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/DiskProfilesListModelTable.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/DiskProfilesListModelTable.ui.xml new file mode 100644 index 0000000..f49b482 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/DiskProfilesListModelTable.ui.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" + xmlns:g="urn:import:com.google.gwt.user.client.ui" + xmlns:e="urn:import:com.google.gwt.editor.ui.client"> + + <ui:style> + .container { + position: absolute !important; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + } + + @external .gwt-TabLayoutPanel; + @external .gwt-TabLayoutPanel .gwt-TabLayoutPanelTabs; + @external .gwt-TabLayoutPanel .gwt-TabLayoutPanelTab; + @external .gwt-TabLayoutPanel .gwt-TabLayoutPanelTab-selected; + @external .gwt-TabLayoutPanel .gwt-TabLayoutPanelContent; + + .gwt-TabLayoutPanel .gwt-TabLayoutPanelTabs { + background: #CCC; + } + + .gwt-TabLayoutPanel .gwt-TabLayoutPanelTab { + background-image: + url("images/main_tab_middle.png"); + background-repeat: repeat-x; + } + + .gwt-TabLayoutPanel .gwt-TabLayoutPanelTab-selected { + background-image: url("images/tab_middle_selected.png"); + background-repeat: repeat-x; + } + + .gwt-TabLayoutPanel .gwt-TabLayoutPanelContent { + border-width: 0px; + padding: 0px; + } + </ui:style> + + <g:SplitLayoutPanel ui:field="splitLayoutPanel" addStyleNames="{style.container}"> + <g:center> + <g:SimplePanel ui:field="tableContainer"/> + </g:center> + </g:SplitLayoutPanel> + +</ui:UiBinder> \ No newline at end of file diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/SubTabStorageDiskProfileView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/SubTabStorageDiskProfileView.java index 77b4baf..0253e63 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/SubTabStorageDiskProfileView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/storage/SubTabStorageDiskProfileView.java @@ -2,87 +2,44 @@ import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; -import org.ovirt.engine.core.common.businessentities.qos.StorageQos; +import org.ovirt.engine.ui.common.CommonApplicationConstants; +import org.ovirt.engine.ui.common.CommonApplicationMessages; +import org.ovirt.engine.ui.common.CommonApplicationTemplates; +import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; +import org.ovirt.engine.ui.common.system.ClientStorage; import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider; -import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip; -import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.common.view.AbstractSubTabTableWidgetView; import org.ovirt.engine.ui.uicommonweb.models.profiles.DiskProfileListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.StorageListModel; -import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.storage.SubTabStorageDiskProfilePresenter; -import org.ovirt.engine.ui.webadmin.section.main.view.AbstractSubTabTableView; -import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition; +import org.ovirt.engine.ui.webadmin.uicommon.model.DiskProfilePermissionModelProvider; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.shared.EventBus; import com.google.inject.Inject; -public class SubTabStorageDiskProfileView extends AbstractSubTabTableView<StorageDomain, DiskProfile, StorageListModel, DiskProfileListModel> +public class SubTabStorageDiskProfileView extends AbstractSubTabTableWidgetView<StorageDomain, DiskProfile, StorageListModel, DiskProfileListModel> implements SubTabStorageDiskProfilePresenter.ViewDef { + + interface ViewIdHandler extends ElementIdHandler<SubTabStorageDiskProfileView> { + ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); + } @Inject public SubTabStorageDiskProfileView(SearchableDetailModelProvider<DiskProfile, StorageListModel, DiskProfileListModel> modelProvider, - ApplicationConstants constants) { - super(modelProvider); + DiskProfilePermissionModelProvider permissionModelProvider, + EventBus eventBus, + ClientStorage clientStorage, + CommonApplicationConstants constants, + CommonApplicationMessages messages, + CommonApplicationTemplates templates) { + super(new DiskProfilesListModelTable(modelProvider, + permissionModelProvider, + eventBus, + clientStorage, + constants)); + ViewIdHandler.idHandler.generateAndSetIds(this); initTable(constants); - initWidget(getTable()); + initWidget(getModelBoundTableWidget()); } - - void initTable(final ApplicationConstants constants) { - getTable().enableColumnResizing(); - - TextColumnWithTooltip<DiskProfile> nameColumn = - new TextColumnWithTooltip<DiskProfile>() { - @Override - public String getValue(DiskProfile object) { - return object.getName(); - } - }; - nameColumn.makeSortable(); - getTable().addColumn(nameColumn, constants.diskProfileNameLabel(), "200px"); //$NON-NLS-1$ - - TextColumnWithTooltip<DiskProfile> descriptionColumn = - new TextColumnWithTooltip<DiskProfile>() { - @Override - public String getValue(DiskProfile object) { - return object.getDescription(); - } - }; - descriptionColumn.makeSortable(); - getTable().addColumn(descriptionColumn, constants.diskProfileDescriptionLabel(), "200px"); //$NON-NLS-1$ - - TextColumnWithTooltip<DiskProfile> qosColumn = new TextColumnWithTooltip<DiskProfile>() { - @Override - public String getValue(DiskProfile object) { - String name = constants.UnlimitedStorageQos(); - if (object.getQosId() != null) { - StorageQos storageQos = getDetailModel().getStorageQos(object.getQosId()); - if (storageQos != null) { - name = storageQos.getName(); - } - } - return name; - } - }; - qosColumn.makeSortable(); - getTable().addColumn(qosColumn, constants.storageQosName(), "200px"); //$NON-NLS-1$ - - getTable().addActionButton(new WebAdminButtonDefinition<DiskProfile>(constants.newDiskProfile()) { - @Override - protected UICommand resolveCommand() { - return getDetailModel().getNewCommand(); - } - }); - getTable().addActionButton(new WebAdminButtonDefinition<DiskProfile>(constants.editDiskProfile()) { - @Override - protected UICommand resolveCommand() { - return getDetailModel().getEditCommand(); - } - }); - getTable().addActionButton(new WebAdminButtonDefinition<DiskProfile>(constants.removeDiskProfile()) { - @Override - protected UICommand resolveCommand() { - return getDetailModel().getRemoveCommand(); - } - }); - } - } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/DiskProfilePermissionModelProvider.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/DiskProfilePermissionModelProvider.java new file mode 100644 index 0000000..b6ed53e --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/DiskProfilePermissionModelProvider.java @@ -0,0 +1,63 @@ +package org.ovirt.engine.ui.webadmin.uicommon.model; + +import org.ovirt.engine.core.common.businessentities.Permissions; +import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; +import org.ovirt.engine.ui.common.presenter.popup.DefaultConfirmationPopupPresenterWidget; +import org.ovirt.engine.ui.common.presenter.popup.RolePermissionsRemoveConfirmationPopupPresenterWidget; +import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailTabModelProvider; +import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; +import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; +import org.ovirt.engine.ui.uicommonweb.models.profiles.DiskProfileListModel; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; +import com.google.inject.Provider; + +public class DiskProfilePermissionModelProvider extends SearchableDetailTabModelProvider<Permissions, DiskProfileListModel, PermissionListModel> { + + private final Provider<PermissionsPopupPresenterWidget> popupProvider; + private final Provider<RolePermissionsRemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider; + + @Inject + public DiskProfilePermissionModelProvider(EventBus eventBus, + Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, + final Provider<PermissionsPopupPresenterWidget> popupProvider, + final Provider<RolePermissionsRemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider) { + super(eventBus, defaultConfirmPopupProvider, DiskProfileListModel.class, PermissionListModel.class); + this.popupProvider = popupProvider; + this.removeConfirmPopupProvider = removeConfirmPopupProvider; + } + + @Override + public PermissionListModel getModel() { + return getCommonModel().getStorageList().getDiskProfileListModel().getPermissionListModel(); + } + + @Override + protected DiskProfileListModel getMainModel() { + return getCommonModel().getStorageList().getDiskProfileListModel(); + } + + @Override + public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(PermissionListModel source, + UICommand lastExecutedCommand, Model windowModel) { + if (lastExecutedCommand.equals(getModel().getAddCommand())) { + return popupProvider.get(); + } else { + return super.getModelPopup(source, lastExecutedCommand, windowModel); + } + } + + @Override + public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(PermissionListModel source, + UICommand lastExecutedCommand) { + if (lastExecutedCommand.equals(getModel().getRemoveCommand())) { + return removeConfirmPopupProvider.get(); + } else { + return super.getConfirmModelPopup(source, lastExecutedCommand); + } + } +} -- To view, visit http://gerrit.ovirt.org/31834 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iefbcc953a2685406ae4883602e00beff0440f1be Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches