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
