Omer Frenkel has uploaded a new change for review.

Change subject: frontend: add vm-devices sub tab
......................................................................

frontend: add vm-devices sub tab

show the vm devices per vm in a new sub tab

http://www.ovirt.org/Features/Expose_VM_Devices

Change-Id: I73ab7de18bd05ef2f19a6abb0c9afbc7d88ff6e4
Signed-off-by: Omer Frenkel <[email protected]>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmDevicesListModelTable.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterVmListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolVmListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateVmListModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDevicesListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/place/WebAdminApplicationPlaces.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
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/ClientGinjectorExtension.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineAffinityGroupPresenter.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachinePermissionPresenter.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineSessionsPresenter.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineVmDevicePresenter.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/virtualMachine/SubTabVirtualMachineVmDevicesView.java
20 files changed, 355 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/95/39795/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 19a3a92..7ba2d27 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
@@ -2089,4 +2089,28 @@
 
     @DefaultStringValue("Creation Date")
     String permissionsCreationDate();
+
+    @DefaultStringValue("General Device Type")
+    String deviceGeneralType();
+
+    @DefaultStringValue("Device Type")
+    String deviceType();
+
+    @DefaultStringValue("Address")
+    String deviceAddress();
+
+    @DefaultStringValue("Read Only")
+    String deviceReadOnlyAlias();
+
+    @DefaultStringValue("Plugged")
+    String devicePluggedAlias();
+
+    @DefaultStringValue("Boot Order")
+    String deviceBootOrderAlias();
+
+    @DefaultStringValue("Managed")
+    String deviceManagedAlias();
+
+    @DefaultStringValue("Spec Params")
+    String deviceSpecParamsAlias();
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmDevicesListModelTable.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmDevicesListModelTable.java
new file mode 100644
index 0000000..3fc0a6f
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmDevicesListModelTable.java
@@ -0,0 +1,146 @@
+package org.ovirt.engine.ui.common.widget.uicommon.vm;
+
+import com.google.gwt.event.shared.EventBus;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
+import org.ovirt.engine.ui.common.CommonApplicationConstants;
+import org.ovirt.engine.ui.common.gin.AssetProvider;
+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.AbstractCheckboxColumn;
+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.vms.VmDevicesListModel;
+
+public class VmDevicesListModelTable extends 
AbstractModelBoundTableWidget<VmDevice, VmDevicesListModel<VM>> {
+    private final static CommonApplicationConstants constants = 
AssetProvider.getConstants();
+
+    public VmDevicesListModelTable(
+            SearchableTableModelProvider<VmDevice, VmDevicesListModel<VM>> 
modelProvider,
+            EventBus eventBus, ClientStorage clientStorage) {
+        super(modelProvider, eventBus, clientStorage, false);
+    }
+
+    @Override
+    public void initTable() {
+        getTable().enableColumnResizing();
+
+        addGeneralTypeColumn();
+        addDeviceTypeColumn();
+        addAddressColumn();
+        addBootOrderColumn();
+        addReadOnlyColumn();
+        addPluggedColumn();
+        addManagedColumn();
+        addSpecParamsColumn();
+    }
+
+    private void addGeneralTypeColumn() {
+        // TODO: replace with icon
+        final AbstractTextColumn<VmDevice> deviceGeneralTypeColumn = new 
AbstractTextColumn<VmDevice>() {
+            @Override
+            public String getValue(VmDevice device) {
+                return device.getType().name();
+            }
+        };
+        deviceGeneralTypeColumn.makeSortable();
+        getTable().addColumn(deviceGeneralTypeColumn, 
constants.deviceGeneralType(), "120px"); //$NON-NLS-1$
+    }
+
+    private void addDeviceTypeColumn() {
+        final AbstractTextColumn<VmDevice> deviceTypeColumn = new 
AbstractTextColumn<VmDevice>() {
+            @Override
+            public String getValue(VmDevice device) {
+                return device.getDevice();
+            }
+        };
+        deviceTypeColumn.makeSortable();
+        getTable().addColumn(deviceTypeColumn, constants.deviceType(), 
"70px"); //$NON-NLS-1$
+    }
+
+    private void addAddressColumn() {
+        final AbstractTextColumn<VmDevice> deviceAddressColumn = new 
AbstractTextColumn<VmDevice>() {
+            @Override
+            public String getValue(VmDevice device) {
+                return device.getAddress();
+            }
+        };
+        deviceAddressColumn.makeSortable();
+        getTable().addColumn(deviceAddressColumn, constants.deviceAddress(), 
"395px"); //$NON-NLS-1$
+    }
+
+    private void addReadOnlyColumn() {
+        final AbstractCheckboxColumn<VmDevice> readonlyColumn = new 
AbstractCheckboxColumn<VmDevice>() {
+            @Override
+            public Boolean getValue(VmDevice object) {
+                return object.getIsReadOnly();
+            }
+
+            @Override
+            protected boolean canEdit(VmDevice object) {
+                return false;
+            }
+        };
+        readonlyColumn.makeSortable();
+        getTable().addColumn(readonlyColumn, constants.deviceReadOnlyAlias(), 
"70px"); //$NON-NLS-1$
+    }
+
+    private void addPluggedColumn() {
+        final AbstractCheckboxColumn<VmDevice> pluggedColumn = new 
AbstractCheckboxColumn<VmDevice>() {
+            @Override
+            public Boolean getValue(VmDevice object) {
+                return object.getIsPlugged();
+            }
+
+            @Override
+            protected boolean canEdit(VmDevice object) {
+                return false;
+            }
+        };
+        pluggedColumn.makeSortable();
+        getTable().addColumn(pluggedColumn, constants.devicePluggedAlias(), 
"70px"); //$NON-NLS-1$
+    }
+
+    private void addManagedColumn() {
+        final AbstractCheckboxColumn<VmDevice> managedColumn = new 
AbstractCheckboxColumn<VmDevice>() {
+            @Override
+            public Boolean getValue(VmDevice object) {
+                return object.getIsManaged();
+            }
+
+            @Override
+            protected boolean canEdit(VmDevice object) {
+                return false;
+            }
+        };
+        managedColumn.makeSortable();
+        getTable().addColumn(managedColumn, constants.deviceManagedAlias(), 
"70px"); //$NON-NLS-1$
+    }
+
+    private void addBootOrderColumn() {
+        final AbstractTextColumn<VmDevice> bootOrderColumn = new 
AbstractTextColumn<VmDevice>() {
+            @Override
+            public String getValue(VmDevice device) {
+                if (device.getBootOrder() != 0) {
+                    return String.valueOf(device.getBootOrder());
+                } else {
+                    return ""; //$NON-NLS-1$
+                }
+            }
+        };
+        bootOrderColumn .makeSortable();
+        getTable().addColumn(bootOrderColumn , 
constants.deviceBootOrderAlias(), "70px"); //$NON-NLS-1$
+    }
+
+    private void addSpecParamsColumn() {
+        final AbstractTextColumn<VmDevice> specParamsColumn = new 
AbstractTextColumn<VmDevice>() {
+            @Override
+            public String getValue(VmDevice device) {
+                return device.getSpecParams().toString();
+            }
+        };
+        specParamsColumn .makeSortable();
+        getTable().addColumn(specParamsColumn , 
constants.deviceSpecParamsAlias(), "300px"); //$NON-NLS-1$
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
index 53e67de..81d8fa6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
@@ -34,6 +34,8 @@
 
     applications("applications", HelpTagType.UNKNOWN), //$NON-NLS-1$
 
+    vm_devices("vm_devices", HelpTagType.UNKNOWN), //$NON-NLS-1$
+
     assign_network("assign_network", HelpTagType.WEBADMIN, "Networks main tab 
-> Clusters sub-tab -> Manage Network"), //$NON-NLS-1$ //$NON-NLS-2$
 
     assign_networks("assign_networks", HelpTagType.WEBADMIN, "Cluster Tab > 
Logical Network Sub-Tab > Manage Networks"), //$NON-NLS-1$ //$NON-NLS-2$
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterVmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterVmListModel.java
index 89ce963..82884f0 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterVmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterVmListModel.java
@@ -9,6 +9,7 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.configure.scheduling.affinity_groups.list.VmAffinityGroupListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.ImportVmsModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmAppListModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmDevicesListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmDiskListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmEventListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmGeneralModel;
@@ -33,7 +34,8 @@
             PermissionListModel<VM> permissionListModel,
             VmAffinityGroupListModel vmAffinityGroupListModel,
             VmSessionsModel vmSessionsModel,
-            Provider<ImportVmsModel> importVmsModelProvider) {
+            Provider<ImportVmsModel> importVmsModelProvider,
+            VmDevicesListModel vmDevicesListModel) {
         super(vmGeneralModel,
                 vmInterfaceListModel,
                 vmDiskListModel,
@@ -43,7 +45,8 @@
                 permissionListModel,
                 vmAffinityGroupListModel,
                 vmSessionsModel,
-                importVmsModelProvider);
+                importVmsModelProvider,
+                vmDevicesListModel);
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java
index 7f761ee..e27bfe6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java
@@ -11,6 +11,7 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.configure.scheduling.affinity_groups.list.VmAffinityGroupListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.ImportVmsModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmAppListModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmDevicesListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmDiskListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmEventListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmGeneralModel;
@@ -34,9 +35,11 @@
             PermissionListModel<VM> permissionListModel,
             VmAffinityGroupListModel vmAffinityGroupListModel,
             VmSessionsModel vmSessionsModel,
-            Provider<ImportVmsModel> importVmsModelProvider) {
+            Provider<ImportVmsModel> importVmsModelProvider,
+            VmDevicesListModel vmDevicesListModel) {
         super(vmGeneralModel, vmInterfaceListModel, vmDiskListModel, 
vmSnapshotListModel, vmEventListModel,
-                vmAppListModel, permissionListModel, vmAffinityGroupListModel, 
vmSessionsModel, importVmsModelProvider);
+                vmAppListModel, permissionListModel, vmAffinityGroupListModel, 
vmSessionsModel, importVmsModelProvider,
+                vmDevicesListModel);
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolVmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolVmListModel.java
index 5060383..4c335d7 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolVmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolVmListModel.java
@@ -18,6 +18,7 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.configure.scheduling.affinity_groups.list.VmAffinityGroupListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.ImportVmsModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmAppListModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmDevicesListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmDiskListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmEventListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmGeneralModel;
@@ -50,9 +51,11 @@
             final VmDiskListModel vmDiskListModel, final VmSnapshotListModel 
vmSnapshotListModel,
             final VmEventListModel vmEventListModel, final VmAppListModel<VM> 
vmAppListModel,
             final PermissionListModel<VM> permissionListModel, final 
VmAffinityGroupListModel vmAffinityGroupListModel,
-            final VmSessionsModel vmSessionsModel, final 
Provider<ImportVmsModel> importVmsModelProvider) {
+            final VmSessionsModel vmSessionsModel, final 
Provider<ImportVmsModel> importVmsModelProvider,
+            final VmDevicesListModel vmDevicesListModel) {
         super(vmGeneralModel, vmInterfaceListModel, vmDiskListModel, 
vmSnapshotListModel, vmEventListModel,
-                vmAppListModel, permissionListModel, vmAffinityGroupListModel, 
vmSessionsModel, importVmsModelProvider);
+                vmAppListModel, permissionListModel, vmAffinityGroupListModel, 
vmSessionsModel, importVmsModelProvider,
+                vmDevicesListModel);
         
setTitle(ConstantsManager.getInstance().getConstants().virtualMachinesTitle());
         setHelpTag(HelpTag.virtual_machines);
         setHashName("virtual_machines"); //$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateVmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateVmListModel.java
index d73bd0c..091a08c 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateVmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateVmListModel.java
@@ -7,6 +7,7 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.configure.scheduling.affinity_groups.list.VmAffinityGroupListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.ImportVmsModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmAppListModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmDevicesListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmDiskListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmEventListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmGeneralModel;
@@ -27,9 +28,10 @@
             final VmEventListModel vmEventListModel, final VmAppListModel<VM> 
vmAppListModel,
             final PermissionListModel<VM> permissionListModel,
             final VmAffinityGroupListModel vmAffinityGroupListModel, final 
VmSessionsModel vmSessionsModel,
-            Provider<ImportVmsModel> importVmsModelProvider) {
+            Provider<ImportVmsModel> importVmsModelProvider, final 
VmDevicesListModel vmDevicesListModel) {
         super(vmGeneralModel, vmInterfaceListModel, vmDiskListModel, 
vmSnapshotListModel, vmEventListModel,
-                vmAppListModel, permissionListModel, vmAffinityGroupListModel, 
vmSessionsModel, importVmsModelProvider);
+                vmAppListModel, permissionListModel, vmAffinityGroupListModel, 
vmSessionsModel, importVmsModelProvider,
+                vmDevicesListModel);
         
setTitle(ConstantsManager.getInstance().getConstants().virtualMachinesTitle());
         setHelpTag(HelpTag.virtual_machines);
         setHashName("virtual_machines"); //$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDevicesListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDevicesListModel.java
new file mode 100644
index 0000000..a8dc2c8
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDevicesListModel.java
@@ -0,0 +1,37 @@
+package org.ovirt.engine.ui.uicommonweb.models.vms;
+
+import org.ovirt.engine.core.common.businessentities.BusinessEntity;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
+import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+
+public class VmDevicesListModel <E extends BusinessEntity<Guid>> extends 
SearchableListModel<E, VmDevice> {
+    public VmDevicesListModel() {
+        
setTitle(ConstantsManager.getInstance().getConstants().vmDevicesTitle());
+        setHelpTag(HelpTag.vm_devices);
+        setHashName("vm_devices"); //$NON-NLS-1$
+    }
+
+    @Override
+    protected void onEntityChanged() {
+        super.onEntityChanged();
+        getSearchCommand().execute();
+    }
+
+
+    @Override
+    protected void syncSearch() {
+        if (getEntity() != null) {
+            super.syncSearch(VdcQueryType.GetVmDevicesForVm, new 
IdQueryParameters(getEntity().getId()));
+        }
+    }
+
+    @Override
+    protected String getListName() {
+        return "VmDevicesListModel"; //$NON-NLS-1$
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
index 16c450c..51fb4d1 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
@@ -444,9 +444,10 @@
             final VmDiskListModel vmDiskListModel, final VmSnapshotListModel 
vmSnapshotListModel,
             final VmEventListModel vmEventListModel, final VmAppListModel<VM> 
vmAppListModel,
             final PermissionListModel<VM> permissionListModel, final 
VmAffinityGroupListModel vmAffinityGroupListModel,
-            final VmSessionsModel vmSessionsModel, final 
Provider<ImportVmsModel> importVmsModelProvider) {
+            final VmSessionsModel vmSessionsModel, final 
Provider<ImportVmsModel> importVmsModelProvider,
+            final VmDevicesListModel vmDevicesListModel) {
         setDetailList(vmGeneralModel, vmInterfaceListModel, vmDiskListModel, 
vmSnapshotListModel, vmEventListModel,
-                vmAppListModel, permissionListModel, vmAffinityGroupListModel, 
vmSessionsModel);
+                vmAppListModel, permissionListModel, vmAffinityGroupListModel, 
vmSessionsModel, vmDevicesListModel);
         this.importVmsModelProvider = importVmsModelProvider;
         
setTitle(ConstantsManager.getInstance().getConstants().virtualMachinesTitle());
         setHelpTag(HelpTag.virtual_machines);
@@ -509,7 +510,7 @@
             final VmDiskListModel vmDiskListModel, final VmSnapshotListModel 
vmSnapshotListModel,
             final VmEventListModel vmEventListModel, final VmAppListModel<VM> 
vmAppListModel,
             final PermissionListModel<VM> permissionListModel, final 
VmAffinityGroupListModel vmAffinityGroupListModel,
-            final VmSessionsModel vmSessionsModel) {
+            final VmSessionsModel vmSessionsModel, final VmDevicesListModel 
vmDevicesListModel) {
         List<HasEntity<VM>> list = new ArrayList<>();
         list.add(vmGeneralModel);
         list.add(vmInterfaceListModel);
@@ -518,6 +519,7 @@
         list.add(vmSnapshotListModel);
         list.add(vmEventListModel);
         list.add(vmAppListModel);
+        list.add(vmDevicesListModel);
         list.add(permissionListModel);
         list.add(vmAffinityGroupListModel);
         list.add(vmSessionsModel);
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 6d17aca..8f8c7b4 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
@@ -182,6 +182,9 @@
     public static final String virtualMachineApplicationSubTabPlace = 
virtualMachineMainTabPlace + SUB_TAB_PREFIX
             + "applications"; //$NON-NLS-1$
 
+    public static final String virtualMachineVmDeviceSubTabPlace = 
virtualMachineMainTabPlace + SUB_TAB_PREFIX
+            + "vm_devices"; //$NON-NLS-1$
+
     public static final String virtualMachineAffinityGroupsSubTabPlace = 
virtualMachineMainTabPlace + SUB_TAB_PREFIX
             + "affinity_groups"; //$NON-NLS-1$
 
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index 0447ce7..8d6f717 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -2697,4 +2697,7 @@
 
     @DefaultStringValue("Warning : Recommendations for geo-replication not met 
-")
     String geoReplicationRecommendedConfigViolation();
+
+    @DefaultStringValue("VM Devices")
+    String vmDevicesTitle();
 }
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 3808af5..3e92840 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
@@ -4263,4 +4263,7 @@
 
     @DefaultStringValue("Warning : Recommendations for geo-replication not met 
-")
     String geoReplicationRecommendedConfigViolation();
+
+    @DefaultStringValue("Vm Devices")
+    String virtualMachineVmDevicesSubTabLabel();
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ClientGinjectorExtension.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ClientGinjectorExtension.java
index 9ae6166..747e678 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ClientGinjectorExtension.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ClientGinjectorExtension.java
@@ -15,6 +15,7 @@
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
 import org.ovirt.engine.core.common.businessentities.VmPool;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.event_subscriber;
@@ -151,6 +152,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.users.UserQuotaListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmAppListModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmDevicesListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmDiskListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmEventListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmGeneralModel;
@@ -301,6 +303,8 @@
 
     SearchableDetailModelProvider<String, VmListModel<Void>, 
VmAppListModel<VM>> getSubTabVirtualMachineApplicationModelProvider();
 
+    SearchableDetailModelProvider<VmDevice, VmListModel<Void>, 
VmDevicesListModel<VM>> getSubTabVirtualMachineVmDeviceModelProvider();
+
     SearchableDetailModelProvider<AffinityGroup, VmListModel<Void>, 
VmAffinityGroupListModel> getSubTabVirtualMachineAffinityGroupModelProvider();
 
     SearchableDetailModelProvider<Permission, VmListModel<Void>, 
PermissionListModel<VM>> getSubTabVirtualMachinePermissionModelProvider();
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 3b3e576..55bce8b 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
@@ -260,6 +260,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine.SubTabVirtualMachineSessionsPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine.SubTabVirtualMachineSnapshotPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine.SubTabVirtualMachineVirtualDiskPresenter;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine.SubTabVirtualMachineVmDevicePresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine.VirtualMachineSubTabPanelPresenter;
 import org.ovirt.engine.ui.webadmin.section.main.view.AboutPopupView;
 import org.ovirt.engine.ui.webadmin.section.main.view.HeaderView;
@@ -518,6 +519,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.virtualMachine.SubTabVirtualMachineSessionsView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.virtualMachine.SubTabVirtualMachineSnapshotView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.virtualMachine.SubTabVirtualMachineVirtualDiskView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.virtualMachine.SubTabVirtualMachineVmDevicesView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.virtualMachine.VirtualMachineSubTabPanelView;
 
 /**
@@ -901,6 +903,10 @@
                 SubTabVirtualMachineApplicationPresenter.ViewDef.class,
                 SubTabVirtualMachineApplicationView.class,
                 SubTabVirtualMachineApplicationPresenter.ProxyDef.class);
+        bindPresenter(SubTabVirtualMachineVmDevicePresenter.class,
+                SubTabVirtualMachineVmDevicePresenter.ViewDef.class,
+                SubTabVirtualMachineVmDevicesView.class,
+                SubTabVirtualMachineVmDevicePresenter.ProxyDef.class);
         bindPresenter(SubTabVirtualMachineAffinityGroupPresenter.class,
                 SubTabVirtualMachineAffinityGroupPresenter.ViewDef.class,
                 SubTabVirtualMachineAffinityGroupView.class,
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
index 48b1ea2..ea63c68 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
@@ -4,6 +4,7 @@
 import org.ovirt.engine.core.common.businessentities.Permission;
 import org.ovirt.engine.core.common.businessentities.Snapshot;
 import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.businessentities.storage.Disk;
 import org.ovirt.engine.core.common.scheduling.AffinityGroup;
@@ -32,6 +33,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.vms.EditDiskModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.NewDiskModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmAppListModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmDevicesListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmDiskListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmEventListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmGeneralModel;
@@ -386,6 +388,7 @@
         bind(VmAffinityGroupListModel.class).in(Singleton.class);
         bind(new TypeLiteral<VmAppListModel<VM>>() {}).in(Singleton.class);
         bind(new TypeLiteral<PermissionListModel<VM>>(){}).in(Singleton.class);
+        bind(new TypeLiteral<VmDevicesListModel<VM>>() {}).in(Singleton.class);
 
         // Form Detail Models
         bind(new TypeLiteral<DetailModelProvider<VmListModel<Void>, 
VmGeneralModel>>(){})
@@ -399,6 +402,9 @@
         // Permission Detail Model
         bind(new TypeLiteral<SearchableDetailModelProvider<Permission, 
VmListModel<Void>, PermissionListModel<VM>>>(){})
            .to(new TypeLiteral<PermissionModelProvider<VM, 
VmListModel<Void>>>() {}).in(Singleton.class);
+        bind(new TypeLiteral<SearchableDetailModelProvider<VmDevice, 
VmListModel<Void>, VmDevicesListModel<VM>>>(){})
+                .to(new TypeLiteral<SearchableDetailTabModelProvider<VmDevice, 
VmListModel<Void>, VmDevicesListModel<VM>>>(){})
+                .in(Singleton.class);
     }
 
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineAffinityGroupPresenter.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineAffinityGroupPresenter.java
index 2298027..0933d16 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineAffinityGroupPresenter.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineAffinityGroupPresenter.java
@@ -39,7 +39,7 @@
     @TabInfo(container = VirtualMachineSubTabPanelPresenter.class)
     static TabData getTabData(
             SearchableDetailModelProvider<AffinityGroup, VmListModel<Void>, 
VmAffinityGroupListModel> modelProvider) {
-        return new ModelBoundTabData(constants.affinityGroupSubTabLabel(), 6, 
modelProvider);
+        return new ModelBoundTabData(constants.affinityGroupSubTabLabel(), 7, 
modelProvider);
     }
 
     @Inject
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachinePermissionPresenter.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachinePermissionPresenter.java
index c50a0cc..a824731 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachinePermissionPresenter.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachinePermissionPresenter.java
@@ -41,7 +41,7 @@
     @TabInfo(container = VirtualMachineSubTabPanelPresenter.class)
     static TabData getTabData(
             SearchableDetailModelProvider<Permission, VmListModel<Void>, 
PermissionListModel<VM>> modelProvider) {
-        return new 
ModelBoundTabData(constants.virtualMachinePermissionSubTabLabel(), 7, 
modelProvider);
+        return new 
ModelBoundTabData(constants.virtualMachinePermissionSubTabLabel(), 8, 
modelProvider);
     }
 
     @Inject
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineSessionsPresenter.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineSessionsPresenter.java
index c358f6e..3082957 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineSessionsPresenter.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineSessionsPresenter.java
@@ -40,7 +40,7 @@
     @TabInfo(container = VirtualMachineSubTabPanelPresenter.class)
     static TabData getTabData(
             DetailModelProvider<VmListModel<Void>, VmSessionsModel> 
modelProvider) {
-        return new 
ModelBoundTabData(constants.virtualMachineSessionsSubTabLabel(), 7, 
modelProvider);
+        return new 
ModelBoundTabData(constants.virtualMachineSessionsSubTabLabel(), 9, 
modelProvider);
     }
 
     @Inject
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineVmDevicePresenter.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineVmDevicePresenter.java
new file mode 100644
index 0000000..f1a83f1
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/virtualMachine/SubTabVirtualMachineVmDevicePresenter.java
@@ -0,0 +1,62 @@
+package org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine;
+
+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.ProxyEvent;
+import com.gwtplatform.mvp.client.annotations.TabInfo;
+import com.gwtplatform.mvp.client.proxy.PlaceManager;
+import com.gwtplatform.mvp.shared.proxy.PlaceRequest;
+import com.gwtplatform.mvp.client.proxy.TabContentProxyPlace;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
+import org.ovirt.engine.ui.common.place.PlaceRequestFactory;
+import org.ovirt.engine.ui.common.presenter.AbstractSubTabPresenter;
+import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider;
+import org.ovirt.engine.ui.common.widget.tab.ModelBoundTabData;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmDevicesListModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmListModel;
+import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.gin.AssetProvider;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.VirtualMachineSelectionChangeEvent;
+
+public class SubTabVirtualMachineVmDevicePresenter extends 
AbstractSubTabPresenter<VM, VmListModel<Void>,
+        VmDevicesListModel<VM>, SubTabVirtualMachineVmDevicePresenter.ViewDef,
+        SubTabVirtualMachineVmDevicePresenter.ProxyDef> {
+
+    private final static ApplicationConstants constants = 
AssetProvider.getConstants();
+
+    @ProxyCodeSplit
+    @NameToken(WebAdminApplicationPlaces.virtualMachineVmDeviceSubTabPlace)
+    public interface ProxyDef extends 
TabContentProxyPlace<SubTabVirtualMachineVmDevicePresenter> {
+    }
+
+    public interface ViewDef extends AbstractSubTabPresenter.ViewDef<VM> {
+    }
+
+    @TabInfo(container = VirtualMachineSubTabPanelPresenter.class)
+    static TabData getTabData(
+            SearchableDetailModelProvider<VmDevice, VmListModel<Void>, 
VmDevicesListModel<VM>> modelProvider) {
+        return new 
ModelBoundTabData(constants.virtualMachineVmDevicesSubTabLabel(), 6, 
modelProvider);
+    }
+
+    @Inject
+    public SubTabVirtualMachineVmDevicePresenter(EventBus eventBus, ViewDef 
view, ProxyDef proxy,
+            PlaceManager placeManager, SearchableDetailModelProvider<VmDevice, 
VmListModel<Void>, VmDevicesListModel<VM>> modelProvider) {
+        super(eventBus, view, proxy, placeManager, modelProvider,
+                VirtualMachineSubTabPanelPresenter.TYPE_SetTabContent);
+    }
+
+    @Override
+    protected PlaceRequest getMainTabRequest() {
+        return 
PlaceRequestFactory.get(WebAdminApplicationPlaces.virtualMachineMainTabPlace);
+    }
+
+    @ProxyEvent
+    public void 
onVirtualMachineSelectionChange(VirtualMachineSelectionChangeEvent event) {
+        updateMainTabSelection(event.getSelectedItems());
+    }
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/virtualMachine/SubTabVirtualMachineVmDevicesView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/virtualMachine/SubTabVirtualMachineVmDevicesView.java
new file mode 100644
index 0000000..21ad9ab
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/virtualMachine/SubTabVirtualMachineVmDevicesView.java
@@ -0,0 +1,32 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.tab.virtualMachine;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
+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.view.AbstractSubTabTableWidgetView;
+import org.ovirt.engine.ui.common.widget.uicommon.vm.VmDevicesListModelTable;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmDevicesListModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmListModel;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine.SubTabVirtualMachineVmDevicePresenter;
+
+public class SubTabVirtualMachineVmDevicesView extends 
AbstractSubTabTableWidgetView<VM, VmDevice, VmListModel<Void>, 
VmDevicesListModel<VM>>
+        implements SubTabVirtualMachineVmDevicePresenter.ViewDef {
+    interface ViewIdHandler extends 
ElementIdHandler<SubTabVirtualMachineVmDevicesView> {
+        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
+    }
+
+    @Inject
+    public SubTabVirtualMachineVmDevicesView(
+            SearchableDetailModelProvider<VmDevice, VmListModel<Void>, 
VmDevicesListModel<VM>> modelProvider,
+            EventBus eventBus, ClientStorage clientStorage) {
+        super(new VmDevicesListModelTable(modelProvider, eventBus, 
clientStorage));
+        ViewIdHandler.idHandler.generateAndSetIds(this);
+        initTable();
+        initWidget(getModelBoundTableWidget());
+    }
+}


-- 
To view, visit https://gerrit.ovirt.org/39795
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I73ab7de18bd05ef2f19a6abb0c9afbc7d88ff6e4
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Omer Frenkel <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to