Gilad Chaplik has uploaded a new change for review.

Change subject: webadmin: introduce cpu QoS
......................................................................

webadmin: introduce cpu QoS

Change-Id: I66d2c322158fd05f3a6beabac71d28ca8b179a63
Signed-off-by: Gilad Chaplik <[email protected]>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
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/help/HelpTag.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/CpuQosParametersModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/DataCenterCpuQosListModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/EditCpuQosModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/NewCpuQosModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/RemoveCpuQosModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.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/DataCenterModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/CpuQosPopupPresenterWidget.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/datacenter/DataCenterQosSubTabPanelPresenter.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/datacenter/SubTabDataCenterCpuQosPresenter.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.ui.xml
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/datacenter/SubTabDataCenterCpuQosView.java
23 files changed, 668 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/26/31626/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
index 8ea6bf8..f16d24a 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
@@ -146,7 +146,8 @@
     MaxWriteThroughputUpperBoundQosValue,
     MaxIopsUpperBoundQosValue,
     MaxReadIopsUpperBoundQosValue,
-    MaxWriteIopsUpperBoundQosValue;
+    MaxWriteIopsUpperBoundQosValue,
+    MaxCpuLimitQosValue;
 
     public static enum ConfigAuthType {
         Admin,
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 28fdda0..21c5481 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
@@ -1718,6 +1718,9 @@
     @DefaultStringValue("Unlimited")
     String UnlimitedStorageQos();
 
+    @DefaultStringValue("Unlimited")
+    String UnlimitedCpuQos();
+
     @DefaultStringValue("Password")
     String hostPasswordLabel();
 
@@ -1899,6 +1902,9 @@
     @DefaultStringValue("QoS Name")
     String storageQosName();
 
+    @DefaultStringValue("QoS Name")
+    String cpuQosName();
+
     @DefaultStringValue("New")
     String newDiskProfile();
 
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 af70ac1..ebfcf5f 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
@@ -148,6 +148,8 @@
 
     edit_storage_qos("edit_storage_qos", HelpTagType.WEBADMIN, "'Data Centers' 
main tab -> 'Storage QoS' sub-tab -> 'Edit Storage QoS' dialog"), //$NON-NLS-1$ 
//$NON-NLS-2$
 
+    edit_cpu_qos("edit_cpu_qos", HelpTagType.WEBADMIN, "'Data Centers' main 
tab -> 'Cpu QoS' sub-tab -> 'Edit Cpu QoS' dialog"), //$NON-NLS-1$ //$NON-NLS-2$
+
     edit_pool("edit_pool", HelpTagType.COMMON, "Pools Tab > Edit Pool"), 
//$NON-NLS-1$ //$NON-NLS-2$
 
     edit_provider("edit_provider", HelpTagType.WEBADMIN, "[Neutron 
integration] 'Providers' main tab -> 'Edit Provider' dialog"), //$NON-NLS-1$ 
//$NON-NLS-2$
@@ -296,6 +298,8 @@
 
     new_storage_qos("new_storage_qos", HelpTagType.WEBADMIN, "'Data Centers' 
main tab -> 'Storage QoS' sub-tab -> 'New Storage QoS' dialog"), //$NON-NLS-1$ 
//$NON-NLS-2$
 
+    new_cpu_qos("new_cpu_qos", HelpTagType.WEBADMIN, "'Data Centers' main tab 
-> 'Cpu QoS' sub-tab -> 'New Cpu QoS' dialog"), //$NON-NLS-1$ //$NON-NLS-2$
+
     new_pool("new_pool", HelpTagType.WEBADMIN, "Pools Tab > New Pool"), 
//$NON-NLS-1$ //$NON-NLS-2$
 
     new_quota("new_quota", HelpTagType.WEBADMIN, "Quota Tab > New Quota"), 
//$NON-NLS-1$ //$NON-NLS-2$
@@ -363,6 +367,8 @@
     remove_network_qos("remove_network_qos", HelpTagType.WEBADMIN, "'Data 
Centers' main tab -> 'Network QoS' sub-tab -> 'Remove Network QoS' confirmation 
dialog."), //$NON-NLS-1$ //$NON-NLS-2$
 
     remove_storage_qos("remove_storage_qos", HelpTagType.WEBADMIN, "'Data 
Centers' main tab -> 'Storage QoS' sub-tab -> 'Remove Storage QoS' confirmation 
dialog."), //$NON-NLS-1$ //$NON-NLS-2$
+
+    remove_cpu_qos("remove_cpu_qos", HelpTagType.WEBADMIN, "'Data Centers' 
main tab -> 'Cpu QoS' sub-tab -> 'Remove Cpu QoS' confirmation dialog."), 
//$NON-NLS-1$ //$NON-NLS-2$
 
     remove_permission("remove_permission", HelpTagType.COMMON, "Each Main Tab 
> Permissions Sub-Tab > Remove Permission"), //$NON-NLS-1$ //$NON-NLS-2$
 
@@ -494,6 +500,8 @@
 
     storage_qos("storage_qos", HelpTagType.UNKNOWN), //$NON-NLS-1$
 
+    cpu_qos("storage_qos", HelpTagType.UNKNOWN), //$NON-NLS-1$
+
     disk_profiles("disk profiles", HelpTagType.UNKNOWN), //$NON-NLS-1$
 
     new_disk_profile("new_disk_profile", HelpTagType.WEBADMIN, "Storage Tab > 
Disk Profiles sub-tab -> New Disk Profile dialog"), //$NON-NLS-1$ //$NON-NLS-2$
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
index d2b2a83..ac27898 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
@@ -50,9 +50,10 @@
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType;
 import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.DataCenterCpuQosListModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.DataCenterStorageQosListModel;
 import org.ovirt.engine.ui.uicommonweb.models.macpool.NewSharedMacPoolModel;
 import org.ovirt.engine.ui.uicommonweb.models.macpool.SharedMacPoolModel;
-import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.DataCenterStorageQosListModel;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
 import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult;
@@ -253,6 +254,7 @@
         list.add(quotaListModel);
         list.add(new DataCenterNetworkQoSListModel());
         list.add(new DataCenterStorageQosListModel());
+        list.add(new DataCenterCpuQosListModel());
         list.add(new PermissionListModel());
         list.add(new DataCenterEventListModel());
         setDetailModels(list);
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/CpuQosParametersModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/CpuQosParametersModel.java
new file mode 100644
index 0000000..ae02c49
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/CpuQosParametersModel.java
@@ -0,0 +1,50 @@
+package org.ovirt.engine.ui.uicommonweb.models.datacenters.qos;
+
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
+import org.ovirt.engine.core.common.queries.ConfigurationValues;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
+import org.ovirt.engine.ui.uicommonweb.validation.IntegerValidation;
+import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation;
+
+
+public class CpuQosParametersModel extends QosParametersModel<CpuQos> {
+    private EntityModel<Integer> cpuLimit;
+
+    public CpuQosParametersModel() {
+        setCpuLimit(new EntityModel<Integer>());
+    }
+
+    @Override
+    public void init(CpuQos qos) {
+        getCpuLimit().setEntity(qos.getCpuLimit());
+    }
+
+    @Override
+    public void flush(CpuQos cpuQos) {
+        cpuQos.setCpuLimit(getCpuLimit().getEntity());
+    }
+
+    public boolean validate() {
+        if (!getIsAvailable()) {
+            return true;
+        }
+
+        getCpuLimit().validateEntity(new IValidation[] {
+                new NotEmptyValidation(),
+                new IntegerValidation(0, (Integer) 
AsyncDataProvider.getInstance()
+                        
.getConfigValuePreConverted(ConfigurationValues.MaxCpuLimitQosValue)) });
+
+        setIsValid(getCpuLimit().getIsValid());
+        return getIsValid();
+    }
+
+    public EntityModel<Integer> getCpuLimit() {
+        return cpuLimit;
+    }
+
+    public void setCpuLimit(EntityModel<Integer> cpuLimit) {
+        this.cpuLimit = cpuLimit;
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/DataCenterCpuQosListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/DataCenterCpuQosListModel.java
new file mode 100644
index 0000000..7dd938f
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/DataCenterCpuQosListModel.java
@@ -0,0 +1,49 @@
+package org.ovirt.engine.ui.uicommonweb.models.datacenters.qos;
+
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
+import org.ovirt.engine.core.common.businessentities.qos.QosType;
+import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+
+public class DataCenterCpuQosListModel extends DataCenterQosListModel<CpuQos, 
CpuQosParametersModel> {
+    @Override
+    protected String getQosTitle() {
+        return ConstantsManager.getInstance().getConstants().cpuQosTitle();
+    }
+
+    @Override
+    protected String getQosHashName() {
+        return "cpu_qos"; //$NON-NLS-1$
+    }
+
+    @Override
+    protected HelpTag getQosHelpTag() {
+        return HelpTag.cpu_qos;
+    }
+
+    @Override
+    protected QosType getQosType() {
+        return QosType.CPU;
+    }
+
+    @Override
+    protected NewQosModel<CpuQos, CpuQosParametersModel> getNewQosModel() {
+        return new NewCpuQosModel(this, getEntity());
+    }
+
+    @Override
+    protected EditQosModel<CpuQos, CpuQosParametersModel> 
getEditQosModel(CpuQos qoS) {
+        return new EditCpuQosModel((CpuQos) getSelectedItem(), this, 
getEntity());
+    }
+
+    @Override
+    protected RemoveQosModel<CpuQos> getRemoveQosModel() {
+        return new RemoveCpuQosModel(this);
+    }
+
+    @Override
+    protected String getListName() {
+        return "DataCenterCpuQosModel"; //$NON-NLS-1$
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/EditCpuQosModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/EditCpuQosModel.java
new file mode 100644
index 0000000..b86cfb9
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/EditCpuQosModel.java
@@ -0,0 +1,54 @@
+package org.ovirt.engine.ui.uicommonweb.models.datacenters.qos;
+
+import org.ovirt.engine.core.common.action.QosParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
+import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
+import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+
+public class EditCpuQosModel extends EditQosModel<CpuQos, 
CpuQosParametersModel> {
+
+    public EditCpuQosModel(CpuQos qos, Model sourceModel, StoragePool 
dataCenter) {
+        super(qos, sourceModel, dataCenter);
+    }
+
+    @Override
+    protected VdcActionType getVdcAction() {
+        return VdcActionType.UpdateCpuQos;
+    }
+
+    @Override
+    protected QosParametersBase<CpuQos> getParameters() {
+        QosParametersBase<CpuQos> qosParametersBase = new 
QosParametersBase<CpuQos>();
+        qosParametersBase.setQos(getQos());
+        qosParametersBase.setQosId(getQos().getId());
+        return qosParametersBase;
+    }
+
+    @Override
+    public void init(CpuQos qos) {
+        super.init(qos);
+
+        setQosParametersModel(new CpuQosParametersModel());
+        getQosParametersModel().init(qos);
+    }
+
+    @Override
+    public String getTitle() {
+        return 
ConstantsManager.getInstance().getConstants().editStorageQoSTitle();
+    }
+
+    @Override
+    public HelpTag getHashTag() {
+        return HelpTag.edit_cpu_qos;
+    }
+
+    @Override
+    public String getHashName() {
+        return "edit_cpu_qos"; //$NON-NLS-1$
+    }
+
+}
+
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/NewCpuQosModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/NewCpuQosModel.java
new file mode 100644
index 0000000..82694a9
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/NewCpuQosModel.java
@@ -0,0 +1,52 @@
+package org.ovirt.engine.ui.uicommonweb.models.datacenters.qos;
+
+import org.ovirt.engine.core.common.action.QosParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
+import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
+import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+
+public class NewCpuQosModel extends NewQosModel<CpuQos, CpuQosParametersModel> 
{
+
+    public NewCpuQosModel(Model sourceModel, StoragePool dataCenter) {
+        super(sourceModel, dataCenter);
+        init(new CpuQos());
+    }
+
+    @Override
+    protected VdcActionType getVdcAction() {
+        return VdcActionType.AddCpuQos;
+    }
+
+    @Override
+    protected QosParametersBase<CpuQos> getParameters() {
+        QosParametersBase<CpuQos> qosParametersBase = new 
QosParametersBase<CpuQos>();
+        qosParametersBase.setQos(getQos());
+        return qosParametersBase;
+    }
+
+    @Override
+    public void init(CpuQos qos) {
+        setQos(qos);
+        setQosParametersModel(new CpuQosParametersModel());
+        getQosParametersModel().init(qos);
+    }
+
+    @Override
+    public String getTitle() {
+        return ConstantsManager.getInstance().getConstants().newCpuQoSTitle();
+    }
+
+    @Override
+    public HelpTag getHashTag() {
+        return HelpTag.new_cpu_qos;
+    }
+
+    @Override
+    public String getHashName() {
+        return "new_cpu_qos"; //$NON-NLS-1$;
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/RemoveCpuQosModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/RemoveCpuQosModel.java
new file mode 100644
index 0000000..3dcc6db
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/qos/RemoveCpuQosModel.java
@@ -0,0 +1,47 @@
+package org.ovirt.engine.ui.uicommonweb.models.datacenters.qos;
+
+
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+
+public class RemoveCpuQosModel extends RemoveQosModel<CpuQos> {
+
+    public RemoveCpuQosModel(ListModel<CpuQos> sourceListModel) {
+        super(sourceListModel);
+    }
+
+    @Override
+    public String getTitle() {
+        return 
ConstantsManager.getInstance().getConstants().removeCpuQoSTitle();
+    }
+
+    @Override
+    protected VdcQueryType getProfilesByQosIdQueryType() {
+        return VdcQueryType.GetCpuProfilesByCpuQosId;
+    }
+
+    @Override
+    protected String getRemoveQosMessage(int size) {
+        return 
ConstantsManager.getInstance().getMessages().removeCpuQoSMessage(size);
+    }
+
+    @Override
+    protected String getRemoveQosHashName() {
+        return "remove_cpu_qos"; //$NON-NLS-1$
+    }
+
+    @Override
+    protected HelpTag getRemoveQosHelpTag() {
+        return HelpTag.remove_cpu_qos;
+    }
+
+    @Override
+    protected VdcActionType getRemoveActionType() {
+        return VdcActionType.RemoveCpuQos;
+    }
+
+}
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 05b6c1d..a45686d 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
@@ -266,6 +266,9 @@
     @DefaultStringValue("Storage QoS")
     String storageQosTitle();
 
+    @DefaultStringValue("CPU QoS")
+    String cpuQosTitle();
+
     @DefaultStringValue("Volumes")
     String volumesTitle();
 
@@ -2137,18 +2140,27 @@
     @DefaultStringValue("Remove Storage QoS")
     String removeStorageQoSTitle();
 
+    @DefaultStringValue("Remove CPU QoS")
+    String removeCpuQoSTitle();
+
     @DefaultStringValue("Edit Network QoS")
     String editNetworkQoSTitle();
 
     @DefaultStringValue("Edit Storage QoS")
     String editStorageQoSTitle();
 
+    @DefaultStringValue("Edit CPU QoS")
+    String editCpuQoSTitle();
+
     @DefaultStringValue("New Network QoS")
     String newNetworkQoSTitle();
 
     @DefaultStringValue("New Storage QoS")
     String newStorageQoSTitle();
 
+    @DefaultStringValue("New CPU QoS")
+    String newCpuQoSTitle();
+
     @DefaultStringValue("Are you sure you want to remove this Network QoS")
     String removeNetworkQoSMessage();
 
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
index f1951e2..42c154f 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java
@@ -307,6 +307,9 @@
     @DefaultMessage("This Storage QoS is used by {0} Disk Profiles.\nAre you 
sure you want to remove this Storage QoS?\n\n Profiles using this QoS:\n")
     String removeStorageQoSMessage(int numOfProfiles);
 
+    @DefaultMessage("This CPU QoS is used by {0} CPU Profiles.\nAre you sure 
you want to remove this CPU QoS?\n\n Profiles using this QoS:\n")
+    String removeCpuQoSMessage(int numOfProfiles);
+
     @DefaultMessage("{0} ({1} Socket(s), {2} Core(s) per Socket)")
     String cpuInfoMessage(int numOfCpus, int sockets, int coresPerSocket);
 
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 225d7c0..cdb878c 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
@@ -184,6 +184,9 @@
     @DefaultStringValue("Storage")
     String dataCenterStorageQosSubTabLabel();
 
+    @DefaultStringValue("CPU")
+    String dataCenterCpuQosSubTabLabel();
+
     @DefaultStringValue("QoS")
     String dataCenterQosSubTabLabel();
 
@@ -2822,6 +2825,7 @@
     @DefaultStringValue("ID")
     String idDisk();
 
+    @Override
     @DefaultStringValue("Quota")
     String quotaDisk();
 
@@ -3841,8 +3845,17 @@
     @DefaultStringValue("Remove")
     String removeStorageQos();
 
+    @DefaultStringValue("New")
+    String newCpuQos();
+
+    @DefaultStringValue("Edit")
+    String editCpuQos();
+
+    @DefaultStringValue("Remove")
+    String removeCpuQos();
+
     @DefaultStringValue("Data Center")
-    String dataCenterStorageQosPopup();
+    String dataCenterQosPopup();
 
     @DefaultStringValue("Description")
     String storageQosDescription();
@@ -3876,4 +3889,10 @@
 
     @DefaultStringValue("Storage Domain")
     String diskProfileStorageDomainLabel();
+
+    @DefaultStringValue("Limit")
+    String cpuQosCpuLimit();
+
+    @DefaultStringValue("Description")
+    String cpuQosDescription();
 }
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 08e416b..43e8a44 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
@@ -34,6 +34,7 @@
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.businessentities.network.VnicProfileView;
 import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
 import org.ovirt.engine.core.common.businessentities.qos.StorageQos;
 import org.ovirt.engine.core.common.scheduling.AffinityGroup;
 import org.ovirt.engine.core.common.utils.PairQueryable;
@@ -59,6 +60,7 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.DataCenterNetworkQoSListModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.DataCenterQuotaListModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.DataCenterStorageListModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.DataCenterCpuQosListModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.DataCenterStorageQosListModel;
 import org.ovirt.engine.ui.uicommonweb.models.disks.DiskGeneralModel;
 import org.ovirt.engine.ui.uicommonweb.models.disks.DiskListModel;
@@ -215,6 +217,8 @@
 
     SearchableDetailModelProvider<StorageQos, DataCenterListModel, 
DataCenterStorageQosListModel> getSubTabDataCenterStorageQosModelProvider();
 
+    SearchableDetailModelProvider<CpuQos, DataCenterListModel, 
DataCenterCpuQosListModel> getSubTabDataCenterCpuQosModelProvider();
+
     SearchableDetailModelProvider<Permissions, DataCenterListModel, 
PermissionListModel> getSubTabDataCenterPermissionModelProvider();
 
     SearchableDetailModelProvider<AuditLog, DataCenterListModel, 
DataCenterEventListModel> getSubTabDataCenterEventModelProvider();
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 a6b8c74..e213a7a 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
@@ -13,6 +13,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.ReportPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.SearchPanelPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.AssignTagsPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.CpuQosPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.DetachConfirmationPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.NetworkQoSPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget;
@@ -141,6 +142,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.DataCenterQosSubTabPanelPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.DataCenterSubTabPanelPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterClusterPresenter;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterCpuQosPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterEventPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterIscsiBondPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterNetworkPresenter;
@@ -306,6 +308,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.ExternalSubnetPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.ImportNetworksPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.ProviderPopupView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.qos.CpuQosPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.qos.StorageQosPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.ChangeQuotaPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.EditQuotaClusterPopupView;
@@ -377,6 +380,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.DataCenterQosSubTabPanelView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.DataCenterSubTabPanelView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.SubTabDataCenterClusterView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.SubTabDataCenterCpuQosView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.SubTabDataCenterEventView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.SubTabDataCenterIscsiBondView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.SubTabDataCenterNetworkQoSView;
@@ -633,6 +637,10 @@
                 SubTabDataCenterStorageQosPresenter.ViewDef.class,
                 SubTabDataCenterStorageQosView.class,
                 SubTabDataCenterStorageQosPresenter.ProxyDef.class);
+        bindPresenter(SubTabDataCenterCpuQosPresenter.class,
+                SubTabDataCenterCpuQosPresenter.ViewDef.class,
+                SubTabDataCenterCpuQosView.class,
+                SubTabDataCenterCpuQosPresenter.ProxyDef.class);
         bindPresenter(SubTabDataCenterClusterPresenter.class,
                 SubTabDataCenterClusterPresenter.ViewDef.class,
                 SubTabDataCenterClusterView.class,
@@ -1370,6 +1378,11 @@
                 StorageQosPopupPresenterWidget.ViewDef.class,
                 StorageQosPopupView.class);
 
+        // Cpu QoS
+        bindPresenterWidget(CpuQosPopupPresenterWidget.class,
+                CpuQosPopupPresenterWidget.ViewDef.class,
+                CpuQosPopupView.class);
+
         bindPresenterWidget(EditQuotaClusterPopupPresenterWidget.class,
                 EditQuotaClusterPopupPresenterWidget.ViewDef.class,
                 EditQuotaClusterPopupView.class);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DataCenterModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DataCenterModule.java
index d6f6eb5..05ff609 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DataCenterModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DataCenterModule.java
@@ -9,6 +9,7 @@
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.businessentities.network.NetworkQoS;
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
 import org.ovirt.engine.core.common.businessentities.qos.StorageQos;
 import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
 import org.ovirt.engine.ui.common.presenter.ModelBoundPresenterWidget;
@@ -32,8 +33,10 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.DataCenterNetworkQoSListModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.DataCenterQuotaListModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.DataCenterStorageListModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.DataCenterCpuQosListModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.DataCenterStorageQosListModel;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.ReportPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.CpuQosPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.NetworkQoSPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.StorageQosPopupPresenterWidget;
@@ -305,6 +308,40 @@
 
     @Provides
     @Singleton
+    public SearchableDetailModelProvider<CpuQos, DataCenterListModel, 
DataCenterCpuQosListModel> getDataCenterCpuQosListProvider(EventBus eventBus,
+            Provider<DefaultConfirmationPopupPresenterWidget> 
defaultConfirmPopupProvider,
+            final Provider<CpuQosPopupPresenterWidget> CpuQosPopupProvider,
+            final Provider<RemoveConfirmationPopupPresenterWidget> 
removeConfirmPopupProvider) {
+        return new SearchableDetailTabModelProvider<CpuQos, 
DataCenterListModel, DataCenterCpuQosListModel>(
+                eventBus, defaultConfirmPopupProvider,
+                DataCenterListModel.class,
+                DataCenterCpuQosListModel.class) {
+            @Override
+            public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> 
getModelPopup(DataCenterCpuQosListModel source,
+                    UICommand lastExecutedCommand,
+                    Model windowModel) {
+                if (lastExecutedCommand.equals(getModel().getNewCommand())
+                        || 
lastExecutedCommand.equals(getModel().getEditCommand())) {
+                    return CpuQosPopupProvider.get();
+                } else {
+                    return super.getModelPopup(source, lastExecutedCommand, 
windowModel);
+                }
+            }
+
+            @Override
+            public AbstractModelBoundPopupPresenterWidget<? extends 
ConfirmationModel, ?> getConfirmModelPopup(DataCenterCpuQosListModel source,
+                    UICommand lastExecutedCommand) {
+                if (lastExecutedCommand.equals(getModel().getRemoveCommand())) 
{
+                    return removeConfirmPopupProvider.get();
+                } else {
+                    return super.getConfirmModelPopup(source, 
lastExecutedCommand);
+                }
+            }
+        };
+    }
+
+    @Provides
+    @Singleton
     public SearchableDetailModelProvider<Permissions, DataCenterListModel, 
PermissionListModel> getPermissionListProvider(EventBus eventBus,
             Provider<DefaultConfirmationPopupPresenterWidget> 
defaultConfirmPopupProvider,
             final Provider<PermissionsPopupPresenterWidget> popupProvider,
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java
index 60ecb07..a18a3c5 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java
@@ -72,6 +72,9 @@
     public static final String dataCenterStorageQosSubTabPlace = 
dataCenterMainTabPlace + SUB_TAB_PREFIX
             + "storage_qos"; //$NON-NLS-1$
 
+    public static final String dataCenterCpuQosSubTabPlace = 
dataCenterMainTabPlace + SUB_TAB_PREFIX
+            + "Cpu_qos"; //$NON-NLS-1$
+
     public static final String dataCenterPermissionSubTabPlace = 
dataCenterMainTabPlace + SUB_TAB_PREFIX
             + "permissions"; //$NON-NLS-1$
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/CpuQosPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/CpuQosPopupPresenterWidget.java
new file mode 100644
index 0000000..9768854
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/CpuQosPopupPresenterWidget.java
@@ -0,0 +1,22 @@
+package org.ovirt.engine.ui.webadmin.section.main.presenter.popup;
+
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
+import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.CpuQosParametersModel;
+import org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.QosModel;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+
+
+public class CpuQosPopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<QosModel<CpuQos, CpuQosParametersModel>, 
CpuQosPopupPresenterWidget.ViewDef> {
+
+    public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<QosModel<CpuQos, 
CpuQosParametersModel>> {
+    }
+
+    @Inject
+    public CpuQosPopupPresenterWidget(EventBus eventBus, ViewDef view) {
+        super(eventBus, view);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/datacenter/DataCenterQosSubTabPanelPresenter.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/datacenter/DataCenterQosSubTabPanelPresenter.java
index 2038525..4fb2b86 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/datacenter/DataCenterQosSubTabPanelPresenter.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/datacenter/DataCenterQosSubTabPanelPresenter.java
@@ -66,7 +66,8 @@
     public void setInSlot(Object slot, PresenterWidget<?> content) {
         super.setInSlot(slot, content);
         if (content instanceof SubTabDataCenterStorageQosPresenter
-                || content instanceof SubTabDataCenterNetworkQoSPresenter) {
+                || content instanceof SubTabDataCenterNetworkQoSPresenter
+                || content instanceof SubTabDataCenterCpuQosPresenter) {
             lastPresenter = (Presenter<?, ?>) content;
         }
         TabContentProxy<?> proxy = (TabContentProxy<?>) 
lastPresenter.getProxy();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/datacenter/SubTabDataCenterCpuQosPresenter.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/datacenter/SubTabDataCenterCpuQosPresenter.java
new file mode 100644
index 0000000..7f1302f
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/datacenter/SubTabDataCenterCpuQosPresenter.java
@@ -0,0 +1,62 @@
+package org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter;
+
+import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
+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.datacenters.DataCenterListModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.DataCenterCpuQosListModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.place.ApplicationPlaces;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.DataCenterSelectionChangeEvent;
+
+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.client.proxy.PlaceRequest;
+import com.gwtplatform.mvp.client.proxy.TabContentProxyPlace;
+
+public class SubTabDataCenterCpuQosPresenter extends 
AbstractSubTabPresenter<StoragePool, DataCenterListModel,
+        DataCenterCpuQosListModel, SubTabDataCenterCpuQosPresenter.ViewDef,
+        SubTabDataCenterCpuQosPresenter.ProxyDef> {
+
+    @ProxyCodeSplit
+    @NameToken(ApplicationPlaces.dataCenterCpuQosSubTabPlace)
+    public interface ProxyDef extends 
TabContentProxyPlace<SubTabDataCenterCpuQosPresenter> {
+    }
+
+    public interface ViewDef extends 
AbstractSubTabPresenter.ViewDef<StoragePool> {
+    }
+
+    @TabInfo(container = DataCenterQosSubTabPanelPresenter.class)
+    static TabData getTabData(ApplicationConstants applicationConstants,
+            SearchableDetailModelProvider<CpuQos, DataCenterListModel, 
DataCenterCpuQosListModel> modelProvider) {
+        return new 
ModelBoundTabData(applicationConstants.dataCenterCpuQosSubTabLabel(), 2, 
modelProvider);
+    }
+
+    @Inject
+    public SubTabDataCenterCpuQosPresenter(EventBus eventBus, ViewDef view, 
ProxyDef proxy,
+            PlaceManager placeManager,
+            SearchableDetailModelProvider<CpuQos, DataCenterListModel, 
DataCenterCpuQosListModel> modelProvider) {
+        super(eventBus, view, proxy, placeManager, modelProvider,
+                DataCenterQosSubTabPanelPresenter.TYPE_SetTabContent);
+    }
+
+    @Override
+    protected PlaceRequest getMainTabRequest() {
+        return 
PlaceRequestFactory.get(ApplicationPlaces.dataCenterMainTabPlace);
+    }
+
+    @ProxyEvent
+    public void onDataCenterSelectionChange(DataCenterSelectionChangeEvent 
event) {
+        updateMainTabSelection(event.getSelectedItems());
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.java
new file mode 100644
index 0000000..51c9529
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.java
@@ -0,0 +1,99 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.qos;
+
+import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
+import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
+import org.ovirt.engine.ui.common.idhandler.WithElementId;
+import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
+import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
+import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
+import 
org.ovirt.engine.ui.common.widget.editor.generic.IntegerEntityModelTextBoxEditor;
+import 
org.ovirt.engine.ui.common.widget.editor.generic.StringEntityModelTextBoxEditor;
+import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.CpuQosParametersModel;
+import org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.QosModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationResources;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.CpuQosPopupPresenterWidget;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.inject.Inject;
+
+public class CpuQosPopupView extends 
AbstractModelBoundPopupView<QosModel<CpuQos, CpuQosParametersModel>>
+        implements CpuQosPopupPresenterWidget.ViewDef {
+
+    @UiField(provided = true)
+    @Path(value = "dataCenters.selectedItem")
+    @WithElementId
+    ListModelListBoxEditor<StoragePool> dataCenterEditor;
+
+    @UiField
+    @Path(value = "name.entity")
+    @WithElementId
+    StringEntityModelTextBoxEditor nameEditor;
+
+    @UiField
+    @Path(value = "description.entity")
+    @WithElementId
+    StringEntityModelTextBoxEditor descriptionEditor;
+
+    @UiField
+    @Path(value = "qosParametersModel.cpuLimit.entity")
+    @WithElementId
+    IntegerEntityModelTextBoxEditor cpuLimitEditor;
+
+    interface Driver extends SimpleBeanEditorDriver<QosModel<CpuQos, 
CpuQosParametersModel>, CpuQosPopupView> {
+    }
+
+    interface ViewUiBinder extends UiBinder<SimpleDialogPanel, 
CpuQosPopupView> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    interface ViewIdHandler extends ElementIdHandler<CpuQosPopupView> {
+        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
+    }
+
+    private final Driver driver = GWT.create(Driver.class);
+
+    @Inject
+    public CpuQosPopupView(EventBus eventBus, ApplicationResources resources, 
ApplicationConstants constants) {
+        super(eventBus, resources);
+        initListBoxEditors();
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        ViewIdHandler.idHandler.generateAndSetIds(this);
+
+        localize(constants);
+        driver.initialize(this);
+    }
+
+    private void initListBoxEditors() {
+        dataCenterEditor = new ListModelListBoxEditor<StoragePool>(new 
NullSafeRenderer<StoragePool>() {
+            @Override
+            public String renderNullSafe(StoragePool dataCenter) {
+                return dataCenter.getName();
+            }
+        });
+    }
+
+    private void localize(ApplicationConstants constants) {
+        nameEditor.setLabel(constants.storageQosName());
+        descriptionEditor.setLabel(constants.storageQosDescription());
+        dataCenterEditor.setLabel(constants.dataCenterQosPopup());
+        cpuLimitEditor.setLabel(constants.cpuQosCpuLimit());
+    }
+
+    @Override
+    public void edit(QosModel<CpuQos, CpuQosParametersModel> object) {
+        driver.edit(object);
+    }
+
+    @Override
+    public QosModel<CpuQos, CpuQosParametersModel> flush() {
+        return driver.flush();
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.ui.xml
new file mode 100644
index 0000000..0d00e63
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/CpuQosPopupView.ui.xml
@@ -0,0 +1,29 @@
+<?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:d="urn:import:org.ovirt.engine.ui.common.widget.dialog"
+       xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor"
+       xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic">
+
+       <ui:style>
+               .topDecorator {
+                       background-color: #D3D3D3;
+                       margin: 5px;
+               }
+       </ui:style>
+
+       <d:SimpleDialogPanel width="400px" height="200px">
+               <d:content>
+                       <g:FlowPanel>
+                               <g:FlowPanel 
addStyleNames="{style.topDecorator}">
+                                       <e:ListModelListBoxEditor 
ui:field="dataCenterEditor" />
+                                       <ge:StringEntityModelTextBoxEditor 
ui:field="nameEditor" />
+                                       <ge:StringEntityModelTextBoxEditor 
ui:field="descriptionEditor" />
+                               </g:FlowPanel>
+                               <ge:IntegerEntityModelTextBoxEditor 
ui:field="cpuLimitEditor" />
+                       </g:FlowPanel>
+               </d:content>
+       </d:SimpleDialogPanel>
+
+</ui:UiBinder>
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.java
index 8268776..6457a04 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/qos/StorageQosPopupView.java
@@ -82,7 +82,7 @@
     private void localize(ApplicationConstants constants) {
         nameEditor.setLabel(constants.storageQosName());
         descriptionEditor.setLabel(constants.storageQosDescription());
-        dataCenterEditor.setLabel(constants.dataCenterStorageQosPopup());
+        dataCenterEditor.setLabel(constants.dataCenterQosPopup());
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/datacenter/SubTabDataCenterCpuQosView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/datacenter/SubTabDataCenterCpuQosView.java
new file mode 100644
index 0000000..41b3ee3
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/datacenter/SubTabDataCenterCpuQosView.java
@@ -0,0 +1,90 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter;
+
+import javax.inject.Inject;
+
+import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.qos.CpuQos;
+import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
+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.uicommonweb.models.datacenters.DataCenterListModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.qos.DataCenterCpuQosListModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterCpuQosPresenter;
+import org.ovirt.engine.ui.webadmin.section.main.view.AbstractSubTabTableView;
+import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition;
+
+import com.google.gwt.core.client.GWT;
+
+public class SubTabDataCenterCpuQosView extends 
AbstractSubTabTableView<StoragePool,
+        CpuQos, DataCenterListModel, DataCenterCpuQosListModel>
+        implements SubTabDataCenterCpuQosPresenter.ViewDef {
+
+    interface ViewIdHandler extends 
ElementIdHandler<SubTabDataCenterCpuQosView> {
+        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
+    }
+
+    @Inject
+    public SubTabDataCenterCpuQosView(SearchableDetailModelProvider<CpuQos,
+            DataCenterListModel, DataCenterCpuQosListModel> modelProvider,
+            ApplicationConstants constants) {
+        super(modelProvider);
+        ViewIdHandler.idHandler.generateAndSetIds(this);
+        initTable(constants);
+        initWidget(getTable());
+    }
+
+    void initTable(final ApplicationConstants constants) {
+        getTable().enableColumnResizing();
+
+        TextColumnWithTooltip<CpuQos> nameColumn = new 
TextColumnWithTooltip<CpuQos>() {
+            @Override
+            public String getValue(CpuQos object) {
+                return object.getName() == null ? "" : object.getName(); 
//$NON-NLS-1$
+            }
+        };
+        nameColumn.makeSortable();
+        getTable().addColumn(nameColumn, constants.cpuQosName(), "200px"); 
//$NON-NLS-1$
+
+        TextColumnWithTooltip<CpuQos> descColumn = new 
TextColumnWithTooltip<CpuQos>() {
+            @Override
+            public String getValue(CpuQos object) {
+                return object.getDescription() == null ? "" : 
object.getDescription(); //$NON-NLS-1$
+            }
+        };
+        descColumn.makeSortable();
+        getTable().addColumn(descColumn, constants.cpuQosDescription(), 
"150px"); //$NON-NLS-1$
+
+        TextColumnWithTooltip<CpuQos> cpuLimitColumn = new 
TextColumnWithTooltip<CpuQos>() {
+            @Override
+            public String getValue(CpuQos object) {
+                return object.getCpuLimit() == null ? 
constants.UnlimitedCpuQos()
+                        : object.getCpuLimit().toString();
+            }
+        };
+        cpuLimitColumn.makeSortable();
+        getTable().addColumn(cpuLimitColumn, constants.cpuQosCpuLimit(), 
"105px"); //$NON-NLS-1$
+
+        getTable().addActionButton(new 
WebAdminButtonDefinition<CpuQos>(constants.newCpuQos()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getDetailModel().getNewCommand();
+            }
+        });
+
+        getTable().addActionButton(new 
WebAdminButtonDefinition<CpuQos>(constants.editCpuQos()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getDetailModel().getEditCommand();
+            }
+        });
+
+        getTable().addActionButton(new 
WebAdminButtonDefinition<CpuQos>(constants.removeStorageQos()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getDetailModel().getRemoveCommand();
+            }
+        });
+    }
+}


-- 
To view, visit http://gerrit.ovirt.org/31626
To unsubscribe, visit http://gerrit.ovirt.org/settings

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

Reply via email to