Tomas Jelinek has uploaded a new change for review. Change subject: engine,frontend: disable new vm button if no DC is up ......................................................................
engine,frontend: disable new vm button if no DC is up Following changes done to achive this: - created a query to find out if there is at least one UP DC (not doing this on FE to avoid loading all the DCs just to get one boolean) - added a support for setExecuteProhibitionReasons also for action buttons - added a convenient method to set the ExecuteProhibitionReasons not using list but varargs Change-Id: Id537ac56bd2d963999c5c77ea3e92b3987d82525 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=990059 Signed-off-by: Tomas Jelinek <tjeli...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/IsSomeStoragePoolUpByClusterServiceQuery.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractButtonDefinition.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/ActionButtonDefinition.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/UiCommandButtonDefinition.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UICommand.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java 11 files changed, 153 insertions(+), 11 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/85/18885/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/IsSomeStoragePoolUpByClusterServiceQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/IsSomeStoragePoolUpByClusterServiceQuery.java new file mode 100644 index 0000000..cfe59b8 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/IsSomeStoragePoolUpByClusterServiceQuery.java @@ -0,0 +1,32 @@ +package org.ovirt.engine.core.bll.storage; + +import java.util.List; +import org.ovirt.engine.core.bll.QueriesCommandBase; +import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; +import org.ovirt.engine.core.common.queries.GetStoragePoolsByClusterServiceParameters; + +public class IsSomeStoragePoolUpByClusterServiceQuery<P extends GetStoragePoolsByClusterServiceParameters> extends QueriesCommandBase<P> { + + public IsSomeStoragePoolUpByClusterServiceQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + List<StoragePool> storagePools = getDbFacade().getStoragePoolDao() + .getDataCentersByClusterService( + getParameters().isSupportsVirtService(), + getParameters().isSupportsGlusterService()); + + boolean foundUpStoragePool = false; + for (StoragePool storagePool : storagePools) { + if (storagePool.getstatus() == StoragePoolStatus.Up) { + foundUpStoragePool = true; + break; + } + } + + getQueryReturnValue().setReturnValue(foundUpStoragePool); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index cd67bbe..6059111 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -208,6 +208,7 @@ GetStorageDomainByIdAndStoragePoolId, GetStoragePoolsByStorageDomainId, GetStoragePoolsByClusterService(VdcQueryAuthType.User), + IsSomeStoragePoolUpByClusterService(VdcQueryAuthType.User), GetStorageDomainListById, GetLunsByVgId, GetPermittedStorageDomainsByStoragePoolId(VdcQueryAuthType.User), diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java index 1b927cc..49c3763 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractActionPanel.java @@ -287,7 +287,18 @@ void updateActionButton(ActionButton button, ActionButtonDefinition<T> buttonDef) { button.asWidget().setVisible(buttonDef.isAccessible(getSelectedItems()) && buttonDef.isVisible(getSelectedItems())); button.setEnabled(buttonDef.isEnabled(getSelectedItems())); - button.setTitle(buttonDef.getButtonToolTip() != null ? buttonDef.getButtonToolTip() : buttonDef.getTitle()); + String tooltip = buttonDef.getButtonToolTip() != null ? buttonDef.getButtonToolTip() : buttonDef.getTitle(); + if (!buttonDef.isEnabled(getSelectedItems()) && !buttonDef.getDisabledReasons(getSelectedItems()).isEmpty()) { + String reasons = " "; //$NON-NLS-1$ + for(String reason : buttonDef.getDisabledReasons(getSelectedItems())) { + reasons += reason + ", "; //$NON-NLS-1$ + } + + reasons = reasons.substring(0, reasons.length() - 2); + + tooltip = tooltip + reasons; + } + button.setTitle(tooltip); } /** diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractButtonDefinition.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractButtonDefinition.java index 2a1a106..19e0f36 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractButtonDefinition.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/AbstractButtonDefinition.java @@ -1,6 +1,7 @@ package org.ovirt.engine.ui.common.widget.action; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.google.gwt.event.logical.shared.InitializeEvent; @@ -92,6 +93,14 @@ return reg; } + /** + * An empty default implementation + */ + @Override + public List<String> getDisabledReasons(List<T> selectedItems) { + return Collections.emptyList(); + } + @Override public boolean isVisible(List<T> selectedItems) { return true; diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/ActionButtonDefinition.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/ActionButtonDefinition.java index 48efec8..81385ca 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/ActionButtonDefinition.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/ActionButtonDefinition.java @@ -24,6 +24,13 @@ boolean isEnabled(List<T> selectedItems); /** + * If the isEnabled returns false, this may return also the reasons why is this button not enabled or + * an empty list if the reasons are not specified + * If the isEnabled returns true, this will always return an empty list + */ + public List<String> getDisabledReasons(List<T> selectedItems); + + /** * Checks whether or not the current user has the right to access this action button. */ boolean isAccessible(List<T> selectedItems); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/UiCommandButtonDefinition.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/UiCommandButtonDefinition.java index fc2731f..d770414 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/UiCommandButtonDefinition.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/action/UiCommandButtonDefinition.java @@ -1,5 +1,6 @@ package org.ovirt.engine.ui.common.widget.action; +import java.util.Collections; import java.util.List; import org.ovirt.engine.ui.common.uicommon.model.UiCommonInitEvent; @@ -139,6 +140,15 @@ } @Override + public List<String> getDisabledReasons(List<T> selectedItems) { + if (command == null || command.getExecuteProhibitionReasons() == null) { + return Collections.emptyList(); + } + + return command.getExecuteProhibitionReasons(); + } + + @Override public void onClick(List<T> selectedItems) { command.execute(); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UICommand.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UICommand.java index 7a25edb..f9baf67 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UICommand.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/UICommand.java @@ -1,5 +1,7 @@ package org.ovirt.engine.ui.uicommonweb; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.ovirt.engine.ui.uicommonweb.models.Model; @@ -29,8 +31,8 @@ */ public void setIsExecutionAllowed(boolean value) { - if (isExecutionAllowed != value) - { +// if (isExecutionAllowed != value) +// { isExecutionAllowed = value; if (value) { @@ -38,7 +40,7 @@ } onPropertyChanged(new PropertyChangedEventArgs("IsExecutionAllowed")); //$NON-NLS-1$ - } +// } } private List<String> privateExecuteProhibitionReasons; @@ -48,6 +50,11 @@ return privateExecuteProhibitionReasons; } + public void setExecuteProhibitionReasons(String... values) { + // the new ArrayList is to make it a modifiable list + setExecuteProhibitionReasons(new ArrayList<String>(Arrays.asList(values))); + } + public void setExecuteProhibitionReasons(List<String> value) { privateExecuteProhibitionReasons = value; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java index 8f12e80..e3e0614 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java @@ -30,6 +30,9 @@ import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.VmType; import org.ovirt.engine.core.common.businessentities.comparators.NameableComparator; +import org.ovirt.engine.core.common.interfaces.SearchType; +import org.ovirt.engine.core.common.queries.GetStoragePoolsByClusterServiceParameters; +import org.ovirt.engine.core.common.queries.SearchParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -83,8 +86,9 @@ import org.ovirt.engine.ui.uicompat.ObservableCollection; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; -public class UserPortalListModel extends IUserPortalListModel implements IVmPoolResolutionService -{ +public class UserPortalListModel extends IUserPortalListModel implements IVmPoolResolutionService { + + private boolean isSomeDataCenterUp; public static EventDefinition SearchCompletedEventDefinition; private Event privateSearchCompletedEvent; @@ -313,9 +317,31 @@ } @Override - protected void syncSearch() - { + protected void syncSearch() { super.syncSearch(); + + final GetStoragePoolsByClusterServiceParameters parameters = new GetStoragePoolsByClusterServiceParameters(); + parameters.setSupportsVirtService(true); + parameters.setSupportsGlusterService(false); + + AsyncQuery query = new AsyncQuery(this, + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + isSomeDataCenterUp = ((VdcQueryReturnValue) returnValue).getReturnValue(); + + SearchParameters tempVar = new SearchParameters(getSearchString(), SearchType.VM); + tempVar.setMaxCount(getSearchPageSize()); + doUpdateVmsAndPools(); + } + }); + + + + Frontend.RunQuery(VdcQueryType.IsSomeStoragePoolUpByClusterService, parameters, query); + } + + private void doUpdateVmsAndPools() { VdcQueryParametersBase queryParameters = new VdcQueryParametersBase(); queryParameters.setRefresh(getIsQueryFirstTime()); Frontend.RunQuery(VdcQueryType.GetAllVmsAndVmPools, queryParameters, @@ -686,6 +712,12 @@ { UserPortalItemModel selectedItem = (UserPortalItemModel) getSelectedItem(); + if (!isSomeDataCenterUp) { + getNewVmCommand().setExecuteProhibitionReasons(ConstantsManager.getInstance().getConstants().newVmOnlyIfUpDC()); + } + + getNewVmCommand().setIsExecutionAllowed(isSomeDataCenterUp); + getEditCommand().setIsExecutionAllowed(selectedItem != null && !selectedItem.isPool()); getRemoveCommand().setIsExecutionAllowed(selectedItem != null diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java index 2edf060..4048f10 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java @@ -46,6 +46,7 @@ dataCenters.add(a); } } + AsyncDataProvider.getClusterListByService( new AsyncQuery(getModel(), new INewAsyncCallback() { 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 c9f19b8..9a19051 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 @@ -45,9 +45,11 @@ import org.ovirt.engine.core.common.businessentities.VmWatchdogType; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.mode.ApplicationMode; +import org.ovirt.engine.core.common.queries.GetStoragePoolsByClusterServiceParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.SearchParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; +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.StringHelper; @@ -98,6 +100,8 @@ public class VmListModel extends VmBaseListModel<VM> implements ISupportSystemTreeContext, UserSelectedDisplayProtocolManager { + + private boolean isSomeDataCenterUp; public static final Version BALLOON_DEVICE_MIN_VERSION = Version.v3_2; private UICommand newVMCommand; @@ -645,9 +649,27 @@ @Override protected void syncSearch() { - SearchParameters tempVar = new SearchParameters(getSearchString(), SearchType.VM); - tempVar.setMaxCount(getSearchPageSize()); - super.syncSearch(VdcQueryType.Search, tempVar); + final GetStoragePoolsByClusterServiceParameters parameters = new GetStoragePoolsByClusterServiceParameters(); + parameters.setSupportsVirtService(true); + parameters.setSupportsGlusterService(false); + + AsyncQuery query = new AsyncQuery(this, + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + isSomeDataCenterUp = ((VdcQueryReturnValue) returnValue).getReturnValue(); + + SearchParameters tempVar = new SearchParameters(getSearchString(), SearchType.VM); + tempVar.setMaxCount(getSearchPageSize()); + VmListModel.super.syncSearch(VdcQueryType.Search, tempVar); + } + }); + + + + Frontend.RunQuery(VdcQueryType.IsSomeStoragePoolUpByClusterService, parameters, query); + + } private void updateConsoleModels() { @@ -2297,6 +2319,13 @@ getSelectedItems() != null && getSelectedItem() != null ? getSelectedItems() : new ArrayList(); + + if (!isSomeDataCenterUp) { + getNewVmCommand().setExecuteProhibitionReasons(ConstantsManager.getInstance().getConstants().newVmOnlyIfUpDC()); + } + + getNewVmCommand().setIsExecutionAllowed(isSomeDataCenterUp); + getEditCommand().setIsExecutionAllowed(isEditCommandExecutionAllowed(items)); getRemoveCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.RemoveVm)); 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 7f351be..2035d75 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 @@ -114,6 +114,9 @@ @DefaultStringValue("New Virtual Machine") String newVmTitle(); + @DefaultStringValue("Available only if at least one DC is UP.") + String newVmOnlyIfUpDC(); + @DefaultStringValue("Edit Virtual Machine") String editVmTitle(); -- To view, visit http://gerrit.ovirt.org/18885 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id537ac56bd2d963999c5c77ea3e92b3987d82525 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tomas Jelinek <tjeli...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches