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

Reply via email to