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

Reply via email to