Tomas Jelinek has uploaded a new change for review. Change subject: webadmin: Warning when deleting an instance type which is attached to a VM ......................................................................
webadmin: Warning when deleting an instance type which is attached to a VM Frontend part: when deleting an instance type which has VMs based on it, the user will be warned and he/she will have to explicitly approve it. Change-Id: I14bf7cecee9e9a2caa43c51e4f3e4682b63e0a1e Signed-off-by: Tomas Jelinek <[email protected]> --- 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/configure/instancetypes/InstanceTypeListModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/InstanceTypeModelProvider.java 4 files changed, 72 insertions(+), 29 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/05/27005/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java index c4dcae4..b371538 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 @@ -362,7 +362,7 @@ remove_template("remove_template", HelpTagType.COMMON, "Templates Tab > Remove Template(s)"), //$NON-NLS-1$ //$NON-NLS-2$ - remove_instance_type("remove_instance_type", HelpTagType.WEBADMIN, "Configure' dialog -> 'Instance Types' section -> 'Remove Instance Type(s)'"), //$NON-NLS-1$ //$NON-NLS-2$ + remove_instance_type("remove_instance_type", HelpTagType.WEBADMIN, "Configure' dialog -> 'Instance Types' section -> 'Remove Instance Type'"), //$NON-NLS-1$ //$NON-NLS-2$ remove_template_disks("remove_template_disks", HelpTagType.WEBADMIN, "Templates Tab > Storage Sub-Tab > Remove Disk Instance From Storage"), //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java index db2c5cb..33c1627 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java @@ -2,7 +2,6 @@ import org.ovirt.engine.core.common.action.AddVmTemplateParameters; import org.ovirt.engine.core.common.action.UpdateVmTemplateParameters; -import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VmTemplateParametersBase; import org.ovirt.engine.core.common.businessentities.InstanceType; @@ -14,7 +13,9 @@ import org.ovirt.engine.core.common.businessentities.VmWatchdogAction; import org.ovirt.engine.core.common.businessentities.VmWatchdogType; import org.ovirt.engine.core.common.interfaces.SearchType; +import org.ovirt.engine.core.common.queries.IdQueryParameters; 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.common.utils.ObjectUtils; import org.ovirt.engine.core.compat.Guid; @@ -42,11 +43,13 @@ import org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.InstanceTypeInterfaceCreatingManager; import org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.NewInstanceTypeModelBehavior; import org.ovirt.engine.ui.uicompat.ConstantsManager; -import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult; -import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback; +import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult; +import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback; import org.ovirt.engine.ui.uicompat.ObservableCollection; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; public class InstanceTypeListModel extends ListWithDetailsModel { @@ -119,17 +122,44 @@ return; } - ConfirmationModel window = new ConfirmationModel(); - setWindow(window); - window.setTitle(ConstantsManager.getInstance().getConstants().removeInstanceTypeTitle()); + final ConfirmationModel window = new ConfirmationModel(); + setConfirmWindow(window); + window.startProgress(null); + window.setHelpTag(HelpTag.remove_instance_type); window.setHashName("remove_instance_type"); //$NON-NLS-1$ - List<String> instanceTypeNames = new ArrayList<String>(); - for (InstanceType instanceType : (List<InstanceType>) getSelectedItems()) { - instanceTypeNames.add(instanceType.getName()); - } - window.setItems(instanceTypeNames); + final Guid instanceTypeId = ((InstanceType) getSelectedItem()).getId(); + Frontend.getInstance().runQuery(VdcQueryType.GetVmsByInstanceTypeId, + new IdQueryParameters(instanceTypeId), new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object parentModel, Object returnValue) { + List<VM> vmsAttachedToInstanceType = ((VdcQueryReturnValue) returnValue).getReturnValue(); + if (vmsAttachedToInstanceType == null || vmsAttachedToInstanceType.size() == 0) { + window.setTitle(ConstantsManager.getInstance().getConstants().removeInstanceTypeTitle()); + window.setItems(Arrays.asList(((InstanceType) getSelectedItem()).getName())); + } else { + List<String> attachedVmsNames = new ArrayList<String>(); + for (VM vm : vmsAttachedToInstanceType) { + attachedVmsNames.add(vm.getName()); + } + + Collections.sort(attachedVmsNames); + + window.setItems(attachedVmsNames); + + window.getLatch().setIsAvailable(true); + window.getLatch().setIsChangable(true); + window.setNote(ConstantsManager.getInstance().getConstants().vmsAttachedToInstanceTypeNote()); + + window.setMessage(ConstantsManager.getInstance().getConstants().vmsAttachedToInstanceTypeWarningMessage()); + } + + window.stopProgress(); + } + })); + + UICommand tempVar = new UICommand("OnDeleteInstanceType", this); //$NON-NLS-1$ tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok()); @@ -243,28 +273,26 @@ } private void onDeleteInstanceType() { - final ConfirmationModel model = (ConfirmationModel) getWindow(); + final ConfirmationModel model = (ConfirmationModel) getConfirmWindow(); - if (model.getProgress() != null) { + boolean latchChecked = !model.validate(); + + if (model.getProgress() != null || latchChecked) { return; - } - - ArrayList<VdcActionParametersBase> list = new ArrayList<VdcActionParametersBase>(); - for (InstanceType instanceType : (List<InstanceType>) getSelectedItems()) { - list.add(new VmTemplateParametersBase(instanceType.getId())); } model.startProgress(null); - Frontend.getInstance().runMultipleAction(VdcActionType.RemoveVmTemplate, list, - new IFrontendMultipleActionAsyncCallback() { + Guid instanceTypeId = ((InstanceType) getSelectedItem()).getId(); + + Frontend.getInstance().runAction(VdcActionType.RemoveVmTemplate, new VmTemplateParametersBase(instanceTypeId), + new IFrontendActionAsyncCallback() { @Override - public void executed(FrontendMultipleActionAsyncResult result) { + public void executed(FrontendActionAsyncResult result) { model.stopProgress(); cancel(); - } - }, model); + }, this); } private void createWindow(VmModelBehaviorBase<UnitVmModel> behavior, String hashName, String onOkAction, boolean isNew, String title, HelpTag helpTag) { @@ -299,13 +327,14 @@ private void cancel() { setWindow(null); + setConfirmWindow(null); } protected void updateActionAvailability() { int numOfSelectedItems = getSelectedItems() != null ? getSelectedItems().size() : 0; getEditInstanceTypeCommand().setIsExecutionAllowed(numOfSelectedItems == 1); - getDeleteInstanceTypeCommand().setIsExecutionAllowed(numOfSelectedItems > 0); + getDeleteInstanceTypeCommand().setIsExecutionAllowed(numOfSelectedItems == 1); } @Override 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 658a110..0f909fd 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 @@ -2245,7 +2245,7 @@ @DefaultStringValue("Edit Instance Type") String editInstanceTypeTitle(); - @DefaultStringValue("Remove Instance Type(s)") + @DefaultStringValue("Remove Instance Type") String removeInstanceTypeTitle(); @DefaultStringValue("Custom") @@ -2253,5 +2253,11 @@ @DefaultStringValue("No instance type - if selected the instance will be attached to no instance type") String customInstanceTypeDescription(); + + @DefaultStringValue("There are VMs attached to this instance type-this will make them attached to 'Custom'") + String vmsAttachedToInstanceTypeNote(); + + @DefaultStringValue("The following VMs are attached to the instance type") + String vmsAttachedToInstanceTypeWarningMessage(); } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/InstanceTypeModelProvider.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/InstanceTypeModelProvider.java index 964ab40..69bd3dc 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/InstanceTypeModelProvider.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/uicommon/model/InstanceTypeModelProvider.java @@ -6,6 +6,7 @@ import org.ovirt.engine.core.common.businessentities.InstanceType; import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; import org.ovirt.engine.ui.common.presenter.popup.DefaultConfirmationPopupPresenterWidget; +import org.ovirt.engine.ui.common.presenter.popup.RemoveConfirmationPopupPresenterWidget; import org.ovirt.engine.ui.common.uicommon.model.SearchableTabModelProvider; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; @@ -17,12 +18,16 @@ private final Provider<InstanceTypesPopupPresenterWidget> instanceTypePopupProvider; + private final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider; + @Inject public InstanceTypeModelProvider(EventBus eventBus, final Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, - final Provider<InstanceTypesPopupPresenterWidget> instanceTypePopupProvider) { + final Provider<InstanceTypesPopupPresenterWidget> instanceTypePopupProvider, + final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider) { super(eventBus, defaultConfirmPopupProvider); this.instanceTypePopupProvider = instanceTypePopupProvider; + this.removeConfirmPopupProvider = removeConfirmPopupProvider; } @Override @@ -43,8 +48,11 @@ @Override public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, ?> getConfirmModelPopup(InstanceTypeListModel source, UICommand lastExecutedCommand) { - return super.getConfirmModelPopup(source, lastExecutedCommand); - + if (lastExecutedCommand == getModel().getDeleteInstanceTypeCommand()) { + return removeConfirmPopupProvider.get(); + } else { + return super.getConfirmModelPopup(source, lastExecutedCommand); + } } } -- To view, visit http://gerrit.ovirt.org/27005 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I14bf7cecee9e9a2caa43c51e4f3e4682b63e0a1e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tomas Jelinek <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
