ofri masad has uploaded a new change for review.

Change subject: webadmin: Add no-quota notification and quota buttons
......................................................................

webadmin: Add no-quota notification and quota buttons

Sub-tab quota under the main-tab Data Center had no action button (to
add, edit, copy or remove quota).

When a Data Center with no defined quotas was moved to enabled mode
the user was not notify this may cause blocking of some actions.

A notification was added in cases the user move a Data Center with no
defined quotas to enabled mode (Audit/Enforcing).

DataCenterQuotaListModel was changed to inherit QuotaListModel in order
to include all CRUD actions.

Change-Id: Ie5d360af1329df9f274f9e9651e3c0d9a8053f1b
Bug-Url: https://bugzilla.redhat.com/851476
Bug-Url: https://bugzilla.redhat.com/845022
Bug-Url: https://bugzilla.redhat.com/855630
Signed-off-by: Ofri Masad <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterQuotaListModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.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/section/main/view/tab/datacenter/SubTabDataCenterQuotaView.java
5 files changed, 120 insertions(+), 36 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/20/10520/1

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 cc14b38..b10b21f 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
@@ -6,6 +6,7 @@
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
+import org.ovirt.engine.core.common.businessentities.Quota;
 import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum;
 import org.ovirt.engine.core.common.businessentities.StorageDomainSharedStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
@@ -15,7 +16,9 @@
 import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.interfaces.SearchType;
 import org.ovirt.engine.core.common.mode.ApplicationMode;
+import 
org.ovirt.engine.core.common.queries.GetQuotaByStoragePoolIdQueryParameters;
 import org.ovirt.engine.core.common.queries.SearchParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.NotifyCollectionChangedEventArgs;
@@ -28,6 +31,7 @@
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.Cloner;
+import org.ovirt.engine.ui.uicommonweb.ICommandTarget;
 import org.ovirt.engine.ui.uicommonweb.Linq;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
@@ -633,12 +637,54 @@
             tempVar2.setIsCancel(true);
             confirmModel.getCommands().add(tempVar2);
         }
+        else if (((storage_pool) getSelectedItem()).getQuotaEnforcementType() 
== QuotaEnforcementTypeEnum.DISABLED
+                && model.getQuotaEnforceTypeListModel().getSelectedItem() != 
QuotaEnforcementTypeEnum.DISABLED) {
+            promptNoQuotaAvailable(model.getEntity(), this);
+        }
         else
         {
             OnSaveInternal();
         }
     }
 
+    private void promptNoQuotaAvailable(storage_pool storage_pool, final 
ICommandTarget commandTarget) {
+        GetQuotaByStoragePoolIdQueryParameters parameters = new 
GetQuotaByStoragePoolIdQueryParameters();
+        parameters.setRefresh(getIsQueryFirstTime());
+        parameters.setStoragePoolId(storage_pool.getId());
+        Frontend.RunQuery(VdcQueryType.GetQuotaByStoragePoolId,
+                parameters,
+                new AsyncQuery(
+                        quotaListModel,
+                        new INewAsyncCallback() {
+
+                            @Override
+                            public void OnSuccess(Object model, Object 
returnValue) {
+                                if (((ArrayList<Quota>) ((VdcQueryReturnValue) 
returnValue).getReturnValue()).size() == 0) {
+                                    ConfirmationModel confirmModel = new 
ConfirmationModel();
+                                    setConfirmWindow(confirmModel);
+                                    
confirmModel.setTitle(ConstantsManager.getInstance()
+                                            .getConstants()
+                                            
.changeDCQuotaEnforcementModeTitle());
+                                    
confirmModel.setHashName("change_data_center_quota_enforcement_mode"); 
//$NON-NLS-1$
+                                    
confirmModel.setMessage(ConstantsManager.getInstance()
+                                            .getConstants()
+                                            
.youAreAboutChangeDCQuotaEnforcementMsg());
+
+                                    UICommand tempVar = new 
UICommand("OnSaveInternal", commandTarget); //$NON-NLS-1$
+                                    
tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok());
+                                    tempVar.setIsDefault(true);
+                                    
getConfirmWindow().getCommands().add(tempVar);
+                                    UICommand tempVar2 = new 
UICommand("CancelConfirmation", commandTarget); //$NON-NLS-1$
+                                    
tempVar2.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+                                    tempVar2.setIsCancel(true);
+                                    
getConfirmWindow().getCommands().add(tempVar2);
+                                } else {
+                                    OnSaveInternal();
+                                }
+                            }
+                        }));
+    }
+
     public void OnSaveInternal()
     {
         DataCenterModel model = (DataCenterModel) getWindow();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterQuotaListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterQuotaListModel.java
index 35627a8..0d53c6e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterQuotaListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterQuotaListModel.java
@@ -11,11 +11,11 @@
 import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
-import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
+import org.ovirt.engine.ui.uicommonweb.models.quota.QuotaListModel;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 
 @SuppressWarnings("unused")
-public class DataCenterQuotaListModel extends SearchableListModel
+public class DataCenterQuotaListModel extends QuotaListModel
 {
     public DataCenterQuotaListModel() {
         setTitle(ConstantsManager.getInstance().getConstants().quotaTitle());
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
index 4a16f5b8..069391d 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
@@ -61,6 +61,9 @@
     @DefaultStringValue("Change Cluster Compatibility Version")
     String changeClusterCompatibilityVersionTitle();
 
+    @DefaultStringValue("Change Data Center Quota Enforcement Mode")
+    String changeDCQuotaEnforcementModeTitle();
+
     @DefaultStringValue("Disable CPU Thread Support")
     String disableClusterCpuThreadSupportTitle();
 
@@ -579,6 +582,11 @@
     @DefaultStringValue("You are about to change the Cluster Compatibility 
Version. Are you sure you want to continue?")
     String youAreAboutChangeClusterCompatibilityVersionMsg();
 
+    @DefaultStringValue("You are about to enable the Data Center Quota 
Enforcement. Since No Quota is defined for this Data Center you could not run 
VMs or create new Disk.\n\n" +
+            "You can define new Quota instances by selecting the Quota sub-tab 
or main-tab and click the add button (This can also be done after the Data 
Center Quota Enforcement was enabled).\n\n" +
+            "Are you sure you want to continue?")
+    String youAreAboutChangeDCQuotaEnforcementMsg();
+
     @DefaultStringValue("You are about to disable CPU thread support for this 
cluster. Disabling this can affect the ability to run VMs with certain CPU 
configurations.\n\n" +
             "Please ensure there are no VMs in this cluster making use of 
specific CPU settings such as CPU-pinning which may be affected by this 
change.\n\n" +
             "Are you sure you want to continue?")
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 aa8101c..5e18ebd 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
@@ -41,6 +41,7 @@
 import com.google.inject.Provider;
 import com.google.inject.Provides;
 import com.google.inject.Singleton;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.QuotaPopupPresenterWidget;
 
 public class DataCenterModule extends AbstractGinModule {
 
@@ -178,10 +179,35 @@
 
     @Provides
     @Singleton
-    public SearchableDetailModelProvider<Quota, DataCenterListModel, 
DataCenterQuotaListModel> getDataCenterQuotaListProvider(ClientGinjector 
ginjector) {
+    public SearchableDetailModelProvider<Quota, DataCenterListModel, 
DataCenterQuotaListModel> getDataCenterQuotaListProvider(ClientGinjector 
ginjector,
+            final Provider<QuotaPopupPresenterWidget> quotaPopupProvider,
+            final Provider<RemoveConfirmationPopupPresenterWidget> 
removeConfirmPopupProvider) {
         return new SearchableDetailTabModelProvider<Quota, 
DataCenterListModel, DataCenterQuotaListModel>(ginjector,
                 DataCenterListModel.class,
-                DataCenterQuotaListModel.class);
+                DataCenterQuotaListModel.class) {
+            @Override
+            public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> 
getModelPopup(DataCenterQuotaListModel source,
+                    UICommand lastExecutedCommand,
+                    Model windowModel) {
+                if 
(lastExecutedCommand.equals(getModel().getCreateQuotaCommand())
+                        || 
lastExecutedCommand.equals(getModel().getEditQuotaCommand())
+                        || 
lastExecutedCommand.equals(getModel().getCloneQuotaCommand())) {
+                    return quotaPopupProvider.get();
+                } else {
+                    return super.getModelPopup(source, lastExecutedCommand, 
windowModel);
+                }
+            }
+
+            @Override
+            public AbstractModelBoundPopupPresenterWidget<? extends 
ConfirmationModel, ?> getConfirmModelPopup(DataCenterQuotaListModel source,
+                    UICommand lastExecutedCommand) {
+                if 
(lastExecutedCommand.equals(getModel().getRemoveQuotaCommand())) {
+                    return removeConfirmPopupProvider.get();
+                } else {
+                    return super.getConfirmModelPopup(source, 
lastExecutedCommand);
+                }
+            }
+        };
     }
 
     @Provides
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/datacenter/SubTabDataCenterQuotaView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/datacenter/SubTabDataCenterQuotaView.java
index 378c35b..f8f6464 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/datacenter/SubTabDataCenterQuotaView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/datacenter/SubTabDataCenterQuotaView.java
@@ -2,24 +2,33 @@
 
 import javax.inject.Inject;
 
+import com.google.gwt.core.client.GWT;
 import org.ovirt.engine.core.common.businessentities.Quota;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
+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.DataCenterQuotaListModel;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterQuotaPresenter;
 import org.ovirt.engine.ui.webadmin.section.main.view.AbstractSubTabTableView;
+import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition;
 import org.ovirt.engine.ui.webadmin.widget.table.column.QuotaDcStatusColumn;
 
 public class SubTabDataCenterQuotaView extends 
AbstractSubTabTableView<storage_pool, Quota, DataCenterListModel, 
DataCenterQuotaListModel>
         implements SubTabDataCenterQuotaPresenter.ViewDef {
 
+    interface ViewIdHandler extends 
ElementIdHandler<SubTabDataCenterQuotaView> {
+        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
+    }
+
     @Inject
-    public SubTabDataCenterQuotaView(SearchableDetailModelProvider<Quota, 
DataCenterListModel, DataCenterQuotaListModel> modelProvider, 
ApplicationConstants contants) {
+    public SubTabDataCenterQuotaView(SearchableDetailModelProvider<Quota, 
DataCenterListModel, DataCenterQuotaListModel> modelProvider, 
ApplicationConstants constants) {
         super(modelProvider);
-        initTable(contants);
+        ViewIdHandler.idHandler.generateAndSetIds(this);
+        initTable(constants);
         initWidget(getTable());
     }
 
@@ -39,36 +48,31 @@
                 return object.getDescription() == null ? "" : 
object.getDescription(); //$NON-NLS-1$
             }
         }, constants.descriptionQuota());
-//        getTable().addColumn(new TextColumnWithTooltip<Quota>() {
-//            @Override
-//            public String getValue(Quota object) {
-//                return object.getStoragePoolName() == null ? "" : 
object.getStoragePoolName(); //$NON-NLS-1$
-//            }
-//        }, constants.dcQuota());
-//        getTable().addColumn(new TextColumnWithTooltip<Quota>() {
-//            @Override
-//            public String getValue(Quota object) {
-//                return (object.getMemSizeMBUsage() == null ? "0" : 
object.getMemSizeMBUsage().toString()) + "/" //$NON-NLS-1$ //$NON-NLS-2$
-//                        + (object.getMemSizeMB() == null ? "*" : 
object.getMemSizeMB().toString()) + " GB"; //$NON-NLS-1$ //$NON-NLS-2$
-//            }
-//        },
-//                constants.usedMemoryQuota());
-//        getTable().addColumn(new TextColumnWithTooltip<Quota>() {
-//            @Override
-//            public String getValue(Quota object) {
-//                return (object.getVirtualCpuUsage() == null ? "0" : 
object.getVirtualCpuUsage().toString()) + "/" //$NON-NLS-1$ //$NON-NLS-2$
-//                        + (object.getVirtualCpu() == null ? "*" : 
object.getVirtualCpu().toString()); //$NON-NLS-1$
-//            }
-//        },
-//                constants.runningCpuQuota());
-//        getTable().addColumn(new TextColumnWithTooltip<Quota>() {
-//            @Override
-//            public String getValue(Quota object) {
-//                return (object.getStorageSizeGBUsage() == null ? "0" : 
object.getStorageSizeGBUsage().toString()) + "/" //$NON-NLS-1$ //$NON-NLS-2$
-//                        + (object.getStorageSizeGB() == null ? "*" : 
object.getStorageSizeGB().toString()) + " GB"; //$NON-NLS-1$ //$NON-NLS-2$
-//            }
-//        },
-//                constants.usedStorageQuota());
+
+        getTable().addActionButton(new 
WebAdminButtonDefinition<Quota>(constants.addQuota()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getDetailModel().getCreateQuotaCommand();
+            }
+        });
+        getTable().addActionButton(new 
WebAdminButtonDefinition<Quota>(constants.editQuota()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getDetailModel().getEditQuotaCommand();
+            }
+        });
+        getTable().addActionButton(new 
WebAdminButtonDefinition<Quota>(constants.copyQuota()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getDetailModel().getCloneQuotaCommand();
+            }
+        });
+        getTable().addActionButton(new 
WebAdminButtonDefinition<Quota>(constants.removeQuota()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getDetailModel().getRemoveQuotaCommand();
+            }
+        });
     }
 
 }


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

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

Reply via email to