Daniel Erez has uploaded a new change for review. Change subject: webadmin: VMs main-tab - create snapshot action ......................................................................
webadmin: VMs main-tab - create snapshot action Adding 'Create Snapshot' action on VMs main-tab. Change-Id: I555695fd0239d966268bc245bd7e7574d6a34f30 Bug-Url: https://bugzilla.redhat.com/909930 Signed-off-by: Daniel Erez <[email protected]> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcActionUtils.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotCreatePopupWidget.ui.xml M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SnapshotModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.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/ApplicationConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java 10 files changed, 273 insertions(+), 81 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/26/11926/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcActionUtils.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcActionUtils.java index ebc49d0..0fb9aa1 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcActionUtils.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/VdcActionUtils.java @@ -140,7 +140,7 @@ VdcActionType.HibernateVm, VdcActionType.MigrateVm, VdcActionType.ExportVm, VdcActionType.MoveVm, VdcActionType.ImportVm, VdcActionType.ChangeDisk, VdcActionType.AddVmInterface, VdcActionType.UpdateVmInterface, - VdcActionType.RemoveVmInterface))); + VdcActionType.RemoveVmInterface, VdcActionType.CreateAllSnapshotsFromVm))); vmMatrix.put( VMStatus.PoweredDown, new HashSet<VdcActionType>(Arrays.asList(VdcActionType.HibernateVm, @@ -195,7 +195,7 @@ VdcActionType.RunVmOnce, VdcActionType.StopVm, VdcActionType.ShutdownVm, VdcActionType.HibernateVm, VdcActionType.MigrateVm, VdcActionType.AddVmTemplate, VdcActionType.ExportVm, VdcActionType.MoveVm, VdcActionType.ImportVm, VdcActionType.ChangeDisk, - VdcActionType.AddVmInterface, VdcActionType.UpdateVmInterface, + VdcActionType.AddVmInterface, VdcActionType.UpdateVmInterface, VdcActionType.CreateAllSnapshotsFromVm, VdcActionType.RemoveVmInterface, VdcActionType.CancelMigrateVm))); vmMatrix.put( VMStatus.ImageLocked, @@ -203,7 +203,7 @@ VdcActionType.RunVmOnce, VdcActionType.StopVm, VdcActionType.ShutdownVm, VdcActionType.HibernateVm, VdcActionType.MigrateVm, VdcActionType.RemoveVm, VdcActionType.AddVmTemplate, VdcActionType.ExportVm, VdcActionType.MoveVm, - VdcActionType.ImportVm, VdcActionType.ChangeDisk, + VdcActionType.ImportVm, VdcActionType.ChangeDisk, VdcActionType.CreateAllSnapshotsFromVm, VdcActionType.AddVmInterface, VdcActionType.UpdateVmInterface, VdcActionType.RemoveVmInterface, VdcActionType.CancelMigrateVm))); vmMatrix.put( @@ -221,7 +221,7 @@ VdcActionType.RunVmOnce, VdcActionType.StopVm, VdcActionType.ShutdownVm, VdcActionType.HibernateVm, VdcActionType.MigrateVm, VdcActionType.RemoveVm, VdcActionType.AddVmTemplate, VdcActionType.ExportVm, VdcActionType.MoveVm, - VdcActionType.ImportVm, VdcActionType.ChangeDisk, + VdcActionType.ImportVm, VdcActionType.ChangeDisk, VdcActionType.CreateAllSnapshotsFromVm, VdcActionType.AddVmInterface, VdcActionType.UpdateVmInterface, VdcActionType.RemoveVmInterface, VdcActionType.CancelMigrateVm))); vmMatrix.put( @@ -230,7 +230,7 @@ VdcActionType.RunVmOnce, VdcActionType.StopVm, VdcActionType.ShutdownVm, VdcActionType.HibernateVm, VdcActionType.MigrateVm, VdcActionType.RemoveVm, VdcActionType.AddVmTemplate, VdcActionType.ExportVm, VdcActionType.MoveVm, - VdcActionType.ImportVm, VdcActionType.ChangeDisk, + VdcActionType.ImportVm, VdcActionType.ChangeDisk, VdcActionType.CreateAllSnapshotsFromVm, VdcActionType.AddVmInterface, VdcActionType.UpdateVmInterface, VdcActionType.RemoveVmInterface, VdcActionType.CancelMigrateVm))); _matrix.put(VM.class, vmMatrix); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotCreatePopupWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotCreatePopupWidget.ui.xml index 327fbf4..18a158f 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotCreatePopupWidget.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotCreatePopupWidget.ui.xml @@ -13,8 +13,9 @@ .messagePanel { color: #CD2127; - margin-top: 10px; margin-left: 5px; + margin-right: 5px; + text-align: center; } </ui:style> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java index 351aaf5..65e7c8c 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java @@ -26,6 +26,7 @@ import org.ovirt.engine.core.common.businessentities.RepoFileMetaData; import org.ovirt.engine.core.common.businessentities.Role; import org.ovirt.engine.core.common.businessentities.ServerCpu; +import org.ovirt.engine.core.common.businessentities.Snapshot; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.core.common.businessentities.StorageType; @@ -55,6 +56,7 @@ import org.ovirt.engine.core.common.queries.CommandVersionsInfo; import org.ovirt.engine.core.common.queries.ConfigurationValues; import org.ovirt.engine.core.common.queries.GetAllAttachableDisks; +import org.ovirt.engine.core.common.queries.GetAllVmSnapshotsByVmIdParameters; import org.ovirt.engine.core.common.queries.InterfaceAndIdQueryParameters; import org.ovirt.engine.core.common.queries.GetAllDisksByVmIdParameters; import org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParameters; @@ -1916,6 +1918,18 @@ Frontend.RunQuery(VdcQueryType.GetVmInterfacesByVmId, new IdQueryParameters(id), aQuery); } + public static void GetVmSnapshotList(AsyncQuery aQuery, Guid id) { + aQuery.converterCallback = new IAsyncConverter() { + @Override + public Object Convert(Object source, AsyncQuery _asyncQuery) + { + return source != null ? (ArrayList<Snapshot>) source : new ArrayList<Snapshot>(); + } + }; + + Frontend.RunQuery(VdcQueryType.GetAllVmSnapshotsByVmId, new GetAllVmSnapshotsByVmIdParameters(id), aQuery); + } + public static void GetVmDiskList(AsyncQuery aQuery, Guid id) { aQuery.converterCallback = new IAsyncConverter() { @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SnapshotModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SnapshotModel.java index 411ff37..d25ed3f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SnapshotModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SnapshotModel.java @@ -4,15 +4,23 @@ import java.util.Arrays; import java.util.List; +import org.ovirt.engine.core.common.action.CreateAllSnapshotsFromVmParameters; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Snapshot; +import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotStatus; +import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; +import org.ovirt.engine.core.compat.StringHelper; 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.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; @@ -20,6 +28,8 @@ import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; import org.ovirt.engine.ui.uicommonweb.validation.SpecialAsciiI18NOrNoneValidation; 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.external.StringUtils; public class SnapshotModel extends EntityModel @@ -112,6 +122,36 @@ isPropertiesUpdated = value; } + private boolean validateByVmSnapshots; + + public boolean isValidateByVmSnapshots() { + return validateByVmSnapshots; + } + + public void setValidateByVmSnapshots(boolean validateByVmSnapshots) { + this.validateByVmSnapshots = validateByVmSnapshots; + } + + private UICommand cancelCommand; + + public void setCancelCommand(UICommand cancelCommand) { + this.cancelCommand = cancelCommand; + } + + public UICommand getCancelCommand() { + return cancelCommand; + } + + private UICommand closeCommand; + + public void setCloseCommand(UICommand closeCommand) { + this.closeCommand = closeCommand; + } + + public UICommand getCloseCommand() { + return closeCommand; + } + public SnapshotModel() { setDescription(new EntityModel()); @@ -121,6 +161,57 @@ setIsPropertiesUpdated(new EntityModel()); getIsPropertiesUpdated().setEntity(false); + } + + @Override + public void Initialize() + { + super.Initialize(); + + StartProgress(null); + initMessages(); + } + + private void initMessages() { + if (isValidateByVmSnapshots()) { + initVmSnapshots(); + } + else { + initVmDisks(); + } + } + + private void initVmSnapshots() { + AsyncDataProvider.GetVmSnapshotList(new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void OnSuccess(Object target, Object returnValue) { + SnapshotModel snapshotModel = (SnapshotModel) target; + ArrayList<Snapshot> snapshots = (ArrayList<Snapshot>) returnValue; + + if (snapshotModel.showWarningForByVmSnapshotsValidation(snapshots)) { + snapshotModel.getCommands().add(getCloseCommand()); + snapshotModel.StopProgress(); + } + else { + snapshotModel.initVmDisks(); + } + } + }), vm.getId()); + } + + private void initVmDisks() { + AsyncDataProvider.GetVmDiskList(new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void OnSuccess(Object target, Object returnValue) { + SnapshotModel snapshotModel = (SnapshotModel) target; + ArrayList<Disk> disks = (ArrayList<Disk>) returnValue; + + snapshotModel.showWarningForNonExportableDisks(disks); + snapshotModel.getCommands().add(getOnSaveCommand()); + snapshotModel.getCommands().add(getCancelCommand()); + snapshotModel.StopProgress(); + } + }), vm.getId()); } public void UpdateVmConfiguration() @@ -157,7 +248,7 @@ } // send warning message, if a disk which doesn't allow snapshot is detected (e.g. LUN) - void sendWarningForNonExportableDisks(ArrayList<Disk> disks) { + private boolean showWarningForNonExportableDisks(ArrayList<Disk> disks) { // filter non-exportable disks final List<String> list = new ArrayList<String>(); for (Disk disk : disks) { @@ -170,7 +261,88 @@ final String s = StringUtils.join(list, ", "); //$NON-NLS-1$ // append warning message setMessage(ConstantsManager.getInstance().getMessages().disksWillNotBePartOfTheExportedVMSnapshot(s)); + return true; } + + return false; + } + + private boolean showWarningForByVmSnapshotsValidation(ArrayList<Snapshot> snapshots) { + for (Snapshot snapshot : snapshots) { + if (!validateNewSnapshotByStatus(snapshot.getStatus()) || !validateNewSnapshotByType(snapshot.getType())) { + getDescription().setIsAvailable(false); + return true; + } + } + + return false; + } + + private boolean validateNewSnapshotByStatus(SnapshotStatus snapshotStatus) { + switch (snapshotStatus) { + case LOCKED: + setMessage(ConstantsManager.getInstance().getConstants().snapshotCannotBeCreatedLockedSnapshotMsg()); + return false; + case IN_PREVIEW: + setMessage(ConstantsManager.getInstance().getConstants().snapshotCannotBeCreatedPreviewSnapshotMsg()); + return false; + default: + return true; + } + } + + private boolean validateNewSnapshotByType(SnapshotType snapshotType) { + switch (snapshotType) { + case STATELESS: + setMessage(ConstantsManager.getInstance().getConstants().snapshotCannotBeCreatedStatelessSnapshotMsg()); + return false; + case PREVIEW: + setMessage(ConstantsManager.getInstance().getConstants().snapshotCannotBeCreatedPreviewSnapshotMsg()); + return false; + default: + return true; + } + } + + private UICommand getOnSaveCommand() { + UICommand onSaveCommand = new UICommand("OnSave", this); //$NON-NLS-1$ + onSaveCommand.setTitle(ConstantsManager.getInstance().getConstants().ok()); + onSaveCommand.setIsDefault(true); + + return onSaveCommand; + } + + @Override + public void ExecuteCommand(UICommand command) { + super.ExecuteCommand(command); + + if (StringHelper.stringsEqual(command.getName(), "OnSave")) { //$NON-NLS-1$ + onSave(); + } + } + + public void onSave() { + if (getProgress() != null || !Validate()) { + return; + } + StartProgress(null); + + VM vm = getVm(); + ArrayList<VdcActionParametersBase> params = new ArrayList<VdcActionParametersBase>(); + CreateAllSnapshotsFromVmParameters param = + new CreateAllSnapshotsFromVmParameters(vm.getId(), (String) getDescription().getEntity()); + param.setQuotaId(vm.getQuotaId()); + params.add(param); + + Frontend.RunMultipleAction(VdcActionType.CreateAllSnapshotsFromVm, params, + new IFrontendMultipleActionAsyncCallback() { + @Override + public void Executed(FrontendMultipleActionAsyncResult result) { + SnapshotModel localModel = (SnapshotModel) result.getState(); + localModel.StopProgress(); + getCancelCommand().Execute(); + } + }, this); } } 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 8a471ec..87f2a21 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 @@ -248,6 +248,18 @@ privateExportCommand = value; } + private UICommand privateCreateSnapshotCommand; + + public UICommand getCreateSnapshotCommand() + { + return privateCreateSnapshotCommand; + } + + private void setCreateSnapshotCommand(UICommand value) + { + privateCreateSnapshotCommand = value; + } + private UICommand privateMoveCommand; public UICommand getMoveCommand() @@ -451,6 +463,7 @@ setNewTemplateCommand(new UICommand("NewTemplate", this)); //$NON-NLS-1$ setRunOnceCommand(new UICommand("RunOnce", this)); //$NON-NLS-1$ setExportCommand(new UICommand("Export", this)); //$NON-NLS-1$ + setCreateSnapshotCommand(new UICommand("CreateSnapshot", this)); //$NON-NLS-1$ setMoveCommand(new UICommand("Move", this)); //$NON-NLS-1$ setGuideCommand(new UICommand("Guide", this)); //$NON-NLS-1$ setRetrieveIsoImagesCommand(new UICommand("RetrieveIsoImages", this)); //$NON-NLS-1$ @@ -981,6 +994,32 @@ .removeVmDisksAllSharedMsg()); return; } + } + + private void CreateSnapshot() { + VM vm = (VM) getSelectedItem(); + if (vm == null || getWindow() != null) { + return; + } + + SnapshotModel model = new SnapshotModel(); + setWindow(model); + model.setTitle(ConstantsManager.getInstance().getConstants().createSnapshotTitle()); + model.setHashName("create_snapshot"); //$NON-NLS-1$ + + model.setVm(vm); + model.setValidateByVmSnapshots(true); + model.Initialize(); + + UICommand cancelCommand = new UICommand("Cancel", this); //$NON-NLS-1$ + cancelCommand.setTitle(ConstantsManager.getInstance().getConstants().cancel()); + cancelCommand.setIsCancel(true); + UICommand closeCommand = new UICommand("Cancel", this); //$NON-NLS-1$ + closeCommand.setTitle(ConstantsManager.getInstance().getConstants().close()); + closeCommand.setIsCancel(true); + + model.setCancelCommand(cancelCommand); + model.setCloseCommand(closeCommand); } private void Move() @@ -2781,6 +2820,8 @@ && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.RunVmOnce)); getExportCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.ExportVm)); + getCreateSnapshotCommand().setIsExecutionAllowed(items.size() == 1 + && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.CreateAllSnapshotsFromVm)); getMoveCommand().setIsExecutionAllowed(items.size() == 1 && VdcActionUtils.CanExecute(items, VM.class, VdcActionType.MoveVm)); getRetrieveIsoImagesCommand().setIsExecutionAllowed(items.size() == 1 @@ -2870,6 +2911,10 @@ { Export(ConstantsManager.getInstance().getConstants().exportVirtualMachineTitle()); } + else if (command == getCreateSnapshotCommand()) + { + CreateSnapshot(); + } else if (command == getMoveCommand()) { Move(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java index 54a4584..c87507a 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java @@ -1,19 +1,18 @@ package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.ovirt.engine.core.common.VdcActionUtils; import org.ovirt.engine.core.common.action.AddVmFromSnapshotParameters; -import org.ovirt.engine.core.common.action.CreateAllSnapshotsFromVmParameters; import org.ovirt.engine.core.common.action.RemoveSnapshotParameters; import org.ovirt.engine.core.common.action.RestoreAllSnapshotsParameters; import org.ovirt.engine.core.common.action.TryBackToAllSnapshotsOfVmParameters; -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.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.MigrationSupport; @@ -49,9 +48,7 @@ import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult; -import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult; import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback; -import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback; @SuppressWarnings("unused") public class VmSnapshotListModel extends SearchableListModel @@ -451,70 +448,18 @@ model.setTitle(ConstantsManager.getInstance().getConstants().createSnapshotTitle()); model.setHashName("create_snapshot"); //$NON-NLS-1$ - model.StartProgress(null); - AsyncDataProvider.GetVmDiskList(new AsyncQuery(this, - new INewAsyncCallback() { - @Override - public void OnSuccess(Object target, Object returnValue) { - VmSnapshotListModel vmSnapshotListModel = (VmSnapshotListModel) target; - SnapshotModel snapshotModel = (SnapshotModel) vmSnapshotListModel.getWindow(); - ArrayList<Disk> disks = (ArrayList<Disk>) returnValue; + model.setVm(vm); + model.Initialize(); - vmSnapshotListModel.PostNew(disks); - // show message - snapshotModel.sendWarningForNonExportableDisks(disks); - snapshotModel.StopProgress(); - } - }), - vm.getId()); - } + UICommand cancelCommand = new UICommand("Cancel", this); //$NON-NLS-1$ + cancelCommand.setTitle(ConstantsManager.getInstance().getConstants().cancel()); + cancelCommand.setIsCancel(true); + UICommand closeCommand = new UICommand("Cancel", this); //$NON-NLS-1$ + closeCommand.setTitle(ConstantsManager.getInstance().getConstants().close()); + closeCommand.setIsCancel(true); - public void PostNew(ArrayList<Disk> disks) { - SnapshotModel model = (SnapshotModel) getWindow(); - UICommand tempVar2 = new UICommand("OnNew", this); //$NON-NLS-1$ - tempVar2.setTitle(ConstantsManager.getInstance().getConstants().ok()); - tempVar2.setIsDefault(true); - model.getCommands().add(tempVar2); - UICommand tempVar3 = new UICommand("Cancel", this); //$NON-NLS-1$ - tempVar3.setTitle(ConstantsManager.getInstance().getConstants().cancel()); - tempVar3.setIsCancel(true); - model.getCommands().add(tempVar3); - } - - private void OnNew() { - - VM vm = (VM) getEntity(); - if (vm == null) { - return; - } - - SnapshotModel model = (SnapshotModel) getWindow(); - - if (model.getProgress() != null) { - return; - } - - if (!model.Validate()) { - return; - } - - model.StartProgress(null); - - ArrayList<VdcActionParametersBase> params = new ArrayList<VdcActionParametersBase>(); - CreateAllSnapshotsFromVmParameters param = new CreateAllSnapshotsFromVmParameters(vm.getId(), (String) model.getDescription().getEntity()); - param.setQuotaId(vm.getQuotaId()); - params.add(param); - - Frontend.RunMultipleAction(VdcActionType.CreateAllSnapshotsFromVm, params, - new IFrontendMultipleActionAsyncCallback() { - @Override - public void Executed(FrontendMultipleActionAsyncResult result) { - - VmSnapshotListModel localModel = (VmSnapshotListModel) result.getState(); - localModel.PostOnNew(result.getReturnValue()); - - } - }, this); + model.setCancelCommand(cancelCommand); + model.setCloseCommand(closeCommand); } public void PostOnNew(List<VdcReturnValueBase> returnValues) { @@ -732,7 +677,8 @@ boolean isStateless = getIsStateless(); boolean isCloneVmSupported = getIsCloneVmSupported(); - getCanSelectSnapshot().setEntity(!isPreviewing && !isLocked && !isVmImageLocked && !isStateless); + getCanSelectSnapshot().setEntity(!isPreviewing && !isLocked && !isStateless + && VdcActionUtils.CanExecute(Arrays.asList(vm), VM.class, VdcActionType.CreateAllSnapshotsFromVm)); getNewCommand().setIsExecutionAllowed(!isPreviewing && !isLocked && !isVmImageLocked && !isStateless); getPreviewCommand().setIsExecutionAllowed(isSelected && !isLocked && !isPreviewing && isVmDown && !isStateless); getCommitCommand().setIsExecutionAllowed(isPreviewing && isVmDown && !isStateless); @@ -871,10 +817,6 @@ else if (StringHelper.stringsEqual(command.getName(), "Cancel")) //$NON-NLS-1$ { Cancel(); - } - else if (StringHelper.stringsEqual(command.getName(), "OnNew")) //$NON-NLS-1$ - { - OnNew(); } else if (StringHelper.stringsEqual(command.getName(), "OnCloneVM")) //$NON-NLS-1$ { 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 3c8f660..e107ff1 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 @@ -737,8 +737,14 @@ @DefaultStringValue("Disk(s)") String disksMsg(); - @DefaultStringValue("Snapshot cannot be created since the VM has no Virtual Disks") - String snapshotCannotBeCreatedSinceTheVMHasNoDisksMsg(); + @DefaultStringValue("Snapshot cannot be created since the VM is performing an operation on a Snapshot.") + String snapshotCannotBeCreatedLockedSnapshotMsg(); + + @DefaultStringValue("Snapshot cannot be created since the VM is previewing a Snapshot.") + String snapshotCannotBeCreatedPreviewSnapshotMsg(); + + @DefaultStringValue("Snapshot cannot be created since the VM contains a stateless Snapshot.") + String snapshotCannotBeCreatedStatelessSnapshotMsg(); @DefaultStringValue("At least one disk must be marked.") String atLeastOneDiskMustBeMarkedMsg(); 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 b419aea..7053d03 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 @@ -1326,6 +1326,9 @@ @DefaultStringValue("Export") String exportVm(); + @DefaultStringValue("Create Snapshot") + String createSnapshotVM(); + @DefaultStringValue("Move") String moveVm(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java index e4ef627..b5eb8ea 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java @@ -71,6 +71,7 @@ final Provider<VmRunOncePopupPresenterWidget> runOncePopupProvider, final Provider<VmChangeCDPopupPresenterWidget> changeCDPopupProvider, final Provider<VmExportPopupPresenterWidget> exportPopupProvider, + final Provider<VmSnapshotCreatePopupPresenterWidget> createSnapshotPopupProvider, final Provider<VmMigratePopupPresenterWidget> migratePopupProvider, final Provider<DisksAllocationPopupPresenterWidget> movePopupProvider, final Provider<VmDesktopNewPopupPresenterWidget> newDesktopVmPopupProvider, @@ -94,6 +95,8 @@ return changeCDPopupProvider.get(); } else if (lastExecutedCommand == getModel().getExportCommand()) { return exportPopupProvider.get(); + } else if (lastExecutedCommand == getModel().getCreateSnapshotCommand()) { + return createSnapshotPopupProvider.get(); } else if (lastExecutedCommand == getModel().getMigrateCommand()) { return migratePopupProvider.get(); } else if (lastExecutedCommand == getModel().getMoveCommand()) { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java index aa2a180..900b455 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java @@ -244,6 +244,12 @@ return getMainModel().getExportCommand(); } }); + getTable().addActionButton(new WebAdminButtonDefinition<VM>(constants.createSnapshotVM()) { + @Override + protected UICommand resolveCommand() { + return getMainModel().getCreateSnapshotCommand(); + } + }); getTable().addActionButton(new WebAdminButtonDefinition<VM>(constants.cheangeCdVm()) { @Override protected UICommand resolveCommand() { -- To view, visit http://gerrit.ovirt.org/11926 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I555695fd0239d966268bc245bd7e7574d6a34f30 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
