Tal Nisan has uploaded a new change for review.

Change subject: webadmin: Allow remove of a VM without removing its disks
......................................................................

webadmin: Allow remove of a VM without removing its disks

Change-Id: Iba531f7a87295564e20bd99763d185f78e483a44
Bug-Url: https://bugzilla.redhat.com/881024
Signed-off-by: Tal Nisan <tni...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RemoveVmParameters.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmRemoveConfimationPopup.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelCheckBoxWidget.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelCheckBoxWidget.ui.xml
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/Constants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRemovePopupPresenterWidget.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRemovePopupView.java
11 files changed, 346 insertions(+), 23 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/76/10376/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java
index 22cf1d7..979d459 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java
@@ -18,12 +18,15 @@
 import org.ovirt.engine.core.common.action.RemoveVmParameters;
 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.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.LunDisk;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.locks.LockingGroup;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.NGuid;
 import org.ovirt.engine.core.dal.VdcBllMessages;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
@@ -70,11 +73,11 @@
         hasImages = vm.getDiskList().size() > 0;
 
         removeVmInSpm(vm.getStoragePoolId(), vmId);
-        if (hasImages && !removeVmImages(null)) {
+        if (getParameters().isRemoveDisks() && hasImages && 
!removeVmImages(null)) {
             return false;
         }
 
-        if (!hasImages) {
+        if (!(hasImages && getParameters().isRemoveDisks())) {
             TransactionSupport.executeInNewTransaction(new 
TransactionMethod<Void>() {
                 @Override
                 public Void runInTransaction() {
@@ -102,6 +105,10 @@
 
         // TODO: Why is this needed? Legacy? Workaround?
         setDescription(getVmName());
+
+        if (!getParameters().isRemoveDisks() && !canRemoveVmWithDetachDisks()) 
{
+            return false;
+        }
 
         return true;
     }
@@ -169,6 +176,28 @@
         return true;
     }
 
+    private boolean canRemoveVmWithDetachDisks() {
+        if (!NGuid.Empty.equals(getVm().getVmtGuid())) {
+            // return failCanDoAction(message)
+        }
+
+        boolean isSnapshotsPresent = false;
+        for (Disk disk : getVm().getDiskList()) {
+            if (disk.getDiskStorageType() == DiskStorageType.IMAGE) {
+                if (((DiskImage) disk).getSnapshots().size() > 1) {
+                    isSnapshotsPresent = true;
+                    break;
+                }
+            }
+        }
+
+        if (isSnapshotsPresent) {
+            // return failCanDoAction(message);
+        }
+
+        return true;
+    }
+
     protected boolean removeVmImages(List<DiskImage> images) {
         RemoveAllVmImagesParameters tempVar = new 
RemoveAllVmImagesParameters(getVmId(), images);
         tempVar.setParentCommand(getActionType());
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RemoveVmParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RemoveVmParameters.java
index c073571..be9edfd 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RemoveVmParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RemoveVmParameters.java
@@ -1,17 +1,27 @@
 package org.ovirt.engine.core.common.action;
 
-import org.ovirt.engine.core.compat.*;
+import org.ovirt.engine.core.compat.Guid;
 
 public class RemoveVmParameters extends VmOperationParameterBase implements 
java.io.Serializable {
     private static final long serialVersionUID = -6256468461166321723L;
-    private boolean privateForce;
+    private boolean force;
+    private boolean removeDisks = true;
+
 
     public boolean getForce() {
-        return privateForce;
+        return force;
     }
 
-    private void setForce(boolean value) {
-        privateForce = value;
+    private void setForce(boolean force) {
+        this.force = force;
+    }
+
+    public boolean isRemoveDisks() {
+        return removeDisks;
+    }
+
+    public void setRemoveDisks(boolean removeDisks) {
+        this.removeDisks = removeDisks;
     }
 
     public RemoveVmParameters(Guid vmId, boolean force) {
@@ -19,6 +29,12 @@
         setForce(force);
     }
 
+    public RemoveVmParameters(Guid vmId, boolean force, boolean removeDisks) {
+        super(vmId);
+        setForce(force);
+        setRemoveDisks(removeDisks);
+    }
+
     public RemoveVmParameters() {
     }
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmRemoveConfimationPopup.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmRemoveConfimationPopup.java
new file mode 100644
index 0000000..7db98a7
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmRemoveConfimationPopup.java
@@ -0,0 +1,35 @@
+package org.ovirt.engine.ui.common.view.popup;
+
+import java.util.Map.Entry;
+
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.ui.common.CommonApplicationConstants;
+import org.ovirt.engine.ui.common.CommonApplicationMessages;
+import org.ovirt.engine.ui.common.CommonApplicationResources;
+import org.ovirt.engine.ui.common.widget.Align;
+import org.ovirt.engine.ui.common.widget.EntityModelCheckBoxWidget;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+
+import com.google.gwt.event.shared.EventBus;
+
+public class AbstractVmRemoveConfimationPopup extends 
RemoveConfirmationPopupView {
+    public AbstractVmRemoveConfimationPopup(EventBus eventBus,
+            CommonApplicationResources resources,
+            CommonApplicationMessages messages,
+            CommonApplicationConstants constants) {
+        super(eventBus, resources, messages, constants);
+        itemPanel.setHeight("80%"); //$NON-NLS-1$
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    void addItemText(Object item) {
+        Entry<Guid, EntityModel> entry = (Entry<Guid, EntityModel>) item;
+        EntityModelCheckBoxWidget cb =
+                new EntityModelCheckBoxWidget(Align.RIGHT,
+                        "- " + entry.getValue().getMessage(), 
entry.getValue().getTitle()); //$NON-NLS-1$
+
+        cb.edit(entry.getValue());
+        itemPanel.add(cb);
+    }
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelCheckBoxWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelCheckBoxWidget.java
new file mode 100644
index 0000000..add3e06
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelCheckBoxWidget.java
@@ -0,0 +1,69 @@
+package org.ovirt.engine.ui.common.widget;
+
+import org.ovirt.engine.ui.common.CommonApplicationConstants;
+import org.ovirt.engine.ui.common.idhandler.HasElementId;
+import org.ovirt.engine.ui.common.utils.ElementIdUtils;
+import org.ovirt.engine.ui.common.view.popup.FocusableComponentsContainer;
+import org.ovirt.engine.ui.common.widget.editor.EntityModelCheckBoxEditor;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.Widget;
+
+public class EntityModelCheckBoxWidget extends Composite implements 
HasEditorDriver<EntityModel>, HasElementId, FocusableComponentsContainer {
+
+    interface Driver extends SimpleBeanEditorDriver<EntityModel, 
EntityModelCheckBoxWidget> {
+        Driver driver = GWT.create(Driver.class);
+    }
+
+    interface ViewUiBinder extends UiBinder<Widget, EntityModelCheckBoxWidget> 
{
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    @Ignore
+    @UiField
+    Label checkBoxTitle;
+
+    @Path(value = "entity")
+    @UiField(provided = true)
+    EntityModelCheckBoxEditor checkBoxEditor;
+
+    CommonApplicationConstants constants;
+
+    public EntityModelCheckBoxWidget(Align align, String title, String label) {
+        checkBoxEditor = new EntityModelCheckBoxEditor(align);
+        checkBoxEditor.setLabel(label);
+
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        Driver.driver.initialize(this);
+
+        checkBoxTitle.setText(title);
+    }
+
+    @Override
+    public int setTabIndexes(int nextTabIndex) {
+        checkBoxEditor.setTabIndex(nextTabIndex++);
+        return nextTabIndex;
+    }
+
+    @Override
+    public void setElementId(String elementId) {
+        checkBoxEditor.setElementId(ElementIdUtils.createElementId(elementId, 
"checkBox")); //$NON-NLS-1$
+    }
+
+    @Override
+    public void edit(EntityModel object) {
+        Driver.driver.edit(object);
+    }
+
+    @Override
+    public EntityModel flush() {
+        return Driver.driver.flush();
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelCheckBoxWidget.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelCheckBoxWidget.ui.xml
new file mode 100644
index 0000000..5705109
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelCheckBoxWidget.ui.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
xmlns:g="urn:import:com.google.gwt.user.client.ui"
+       xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor">
+
+       <ui:style>
+               .checkBox {
+                       float: right;
+                       text-align:right;
+               }
+       </ui:style>
+
+       <g:HorizontalPanel width="100%" verticalAlignment="middle">
+               <g:Label ui:field="checkBoxTitle"/>
+               <e:EntityModelCheckBoxEditor ui:field="checkBoxEditor" 
addStyleNames="{style.checkBox}"/>
+       </g:HorizontalPanel>
+
+</ui:UiBinder>
\ No newline at end of file
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 617c3ac..cf01d0e 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
@@ -6,6 +6,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import org.ovirt.engine.core.common.VdcActionUtils;
 import org.ovirt.engine.core.common.action.AddVmFromScratchParameters;
@@ -29,6 +30,8 @@
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.action.VmManagementParametersBase;
 import org.ovirt.engine.core.common.action.VmOperationParameterBase;
+import org.ovirt.engine.core.common.businessentities.Disk;
+import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
@@ -46,8 +49,10 @@
 import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.interfaces.SearchType;
 import org.ovirt.engine.core.common.mode.ApplicationMode;
+import org.ovirt.engine.core.common.queries.GetAllDisksByVmIdParameters;
 import org.ovirt.engine.core.common.queries.GetVmByVmIdParameters;
 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.Event;
@@ -82,8 +87,10 @@
 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.FrontendMultipleQueryAsyncResult;
 import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback;
 import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback;
+import org.ovirt.engine.ui.uicompat.IFrontendMultipleQueryAsyncCallback;
 import org.ovirt.engine.ui.uicompat.ResourceManager;
 
 public class VmListModel extends VmBaseListModel<VM> implements 
ISupportSystemTreeContext
@@ -867,6 +874,8 @@
         model.getCommands().add(tempVar2);
     }
 
+    private Map<Guid, EntityModel> vmsRemoveMap;
+
     private void remove()
     {
         if (getWindow() != null)
@@ -874,29 +883,117 @@
             return;
         }
 
-        ConfirmationModel model = new ConfirmationModel();
-        setWindow(model);
-        
model.setTitle(ConstantsManager.getInstance().getConstants().removeVirtualMachinesTitle());
-        model.setHashName("remove_virtual_machine"); //$NON-NLS-1$
-        
model.setMessage(ConstantsManager.getInstance().getConstants().virtualMachinesMsg());
+        ConfirmationModel window = new ConfirmationModel();
+        setWindow(window);
+        
window.setTitle(ConstantsManager.getInstance().getConstants().removeVirtualMachinesTitle());
+        window.setHashName("remove_virtual_machine"); //$NON-NLS-1$
+        
window.setMessage(ConstantsManager.getInstance().getConstants().virtualMachinesMsg());
 
-        // model.Items = SelectedItems.Cast<VM>().Select(a => a.vm_name);
-        ArrayList<String> list = new ArrayList<String>();
+        vmsRemoveMap = new HashMap<Guid, EntityModel>();
+
         for (Object selectedItem : getSelectedItems())
         {
-            VM a = (VM) selectedItem;
-            list.add(a.getVmName());
+            VM vm = (VM) selectedItem;
+            EntityModel removeDisksCheckbox = new EntityModel(true);
+            
removeDisksCheckbox.setTitle(ConstantsManager.getInstance().getConstants().removeDisksTitle());
+            removeDisksCheckbox.setMessage(vm.getVmName());
+            if (!NGuid.Empty.equals(vm.getVmtGuid())) {
+                updateRemoveDisksCheckBox(removeDisksCheckbox, true, false, 
ConstantsManager.getInstance()
+                        .getConstants()
+                        .removeVmDisksTemplateMsg());
+            }
+            vmsRemoveMap.put(vm.getId(), removeDisksCheckbox);
         }
-        model.setItems(list);
+        window.setItems(vmsRemoveMap.entrySet());
+        initRemoveDisksCheckboxes(vmsRemoveMap);
 
         UICommand tempVar = new UICommand("OnRemove", this); //$NON-NLS-1$
         tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok());
         tempVar.setIsDefault(true);
-        model.getCommands().add(tempVar);
+        window.getCommands().add(tempVar);
         UICommand tempVar2 = new UICommand("Cancel", this); //$NON-NLS-1$
         
tempVar2.setTitle(ConstantsManager.getInstance().getConstants().cancel());
         tempVar2.setIsCancel(true);
-        model.getCommands().add(tempVar2);
+        window.getCommands().add(tempVar2);
+    }
+
+    private void updateRemoveDisksCheckBox(EntityModel model,
+            boolean deleteDisks,
+            boolean isChangable,
+            String changeProhibitionReason) {
+
+        model.setEntity(deleteDisks);
+        if (!isChangable && changeProhibitionReason != null) {
+            model.getChangeProhibitionReasons().add(changeProhibitionReason);
+        }
+        model.setIsChangable(isChangable);
+    }
+
+    private void initRemoveDisksCheckboxes(final Map<Guid, EntityModel> 
vmsMap) {
+        ArrayList<VdcQueryParametersBase> params = new 
ArrayList<VdcQueryParametersBase>();
+        ArrayList<VdcQueryType> queries = new ArrayList<VdcQueryType>();
+
+        for (Entry<Guid, EntityModel> entry : vmsMap.entrySet()) {
+            if (entry.getValue().getIsChangable()) { // No point in fetching 
VM disks from ones that already determined
+                                                     // is unchangeable since 
they are already initialized
+                params.add(new GetAllDisksByVmIdParameters(entry.getKey()));
+                queries.add(VdcQueryType.GetAllDisksByVmId);
+            }
+        }
+
+        // TODO: There's no point in creating a VdcQueryType list when you 
wanna run the same query for all parameters,
+        // revise when refactoring org.ovirt.engine.ui.Frontend to support 
runMultipleQuery with a single query
+        if (!params.isEmpty()) {
+            Frontend.RunMultipleQueries(queries, params, new 
IFrontendMultipleQueryAsyncCallback() {
+                @Override
+                public void Executed(FrontendMultipleQueryAsyncResult result) {
+                    for (int i = 0; i < result.getReturnValues().size(); i++) {
+                        if (result.getReturnValues().get(i).getSucceeded()) {
+                            Guid vmId = ((GetAllDisksByVmIdParameters) 
result.getParameters().get(i)).getVmId();
+                            initRemoveDisksChecboxesPost(vmId, (List<Disk>) 
result.getReturnValues().get(i).getReturnValue());
+                        }
+                    }
+                }
+            });
+        }
+    }
+
+    private void initRemoveDisksChecboxesPost(Guid vmId, List<Disk> disks) {
+        EntityModel model = vmsRemoveMap.get(vmId);
+        if (disks.isEmpty()) {
+            updateRemoveDisksCheckBox(model, false, false, 
ConstantsManager.getInstance()
+                    .getConstants()
+                    .removeVmDisksNoDisksMsg());
+            return;
+        }
+
+        boolean isOnlySharedDisks = true;
+        boolean isSnapshotExists = false;
+        for (Disk disk : disks) {
+            if (!disk.isShareable()) {
+                isOnlySharedDisks = false;
+                if (disk.getDiskStorageType() == DiskStorageType.IMAGE) {
+                    if (((DiskImage) disk).getSnapshots().size() > 1) {
+                        isSnapshotExists = true;
+                        break;
+                    }
+                }
+            }
+        }
+
+        if (isSnapshotExists) {
+            updateRemoveDisksCheckBox(model, true, false, 
ConstantsManager.getInstance()
+                    .getConstants()
+                    .removeVmDisksSnapshotsMsg());
+            return;
+        }
+
+        if (isOnlySharedDisks) {
+            updateRemoveDisksCheckBox(model, false, false, 
ConstantsManager.getInstance()
+                    .getConstants()
+                    .removeVmDisksAllSharedMsg());
+            return;
+        }
     }
 
     private void Move()
@@ -2018,10 +2115,9 @@
         }
 
         ArrayList<VdcActionParametersBase> list = new 
ArrayList<VdcActionParametersBase>();
-        for (Object item : getSelectedItems())
+        for (Entry<Guid, EntityModel> entry : vmsRemoveMap.entrySet())
         {
-            VM a = (VM) item;
-            list.add(new RemoveVmParameters(a.getId(), false));
+            list.add(new RemoveVmParameters(entry.getKey(), false, (Boolean) 
entry.getValue().getEntity()));
         }
 
         model.StartProgress(null);
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 6a3e5ae..43e7360 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
@@ -1624,6 +1624,21 @@
     @DefaultStringValue("Unattached")
     String unattachedHost();
 
+    @DefaultStringValue("Remove VM Disk(s)")
+    String removeVmDisksMsg();
+
+    @DefaultStringValue("VM is created from template thus disks must be 
removed")
+    String removeVmDisksTemplateMsg();
+
+    @DefaultStringValue("VM has no disks")
+    String removeVmDisksNoDisksMsg();
+
+    @DefaultStringValue("Cannot remove VM with detaching disks - VM has 
snapshots")
+    String removeVmDisksSnapshotsMsg();
+
+    @DefaultStringValue("All VM disks are sharable and cannot be removed")
+    String removeVmDisksAllSharedMsg();
+
     // Network
     @DefaultStringValue("VM")
     String vmNetworkRole();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
index 76e1b25..79e6ed7 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
@@ -258,6 +258,8 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmInterfacePopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmMakeTemplatePopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmMigratePopupView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmRemovePopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmRemovePopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmRunOncePopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmServerNewPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmSnapshotCreatePopupView;
@@ -1017,6 +1019,11 @@
                 VmExportPopupPresenterWidget.ViewDef.class,
                 VmExportPopupView.class);
 
+        // VM Remove
+        bindPresenterWidget(VmRemovePopupPresenterWidget.class,
+                VmRemovePopupPresenterWidget.ViewDef.class,
+                VmRemovePopupView.class);
+
         // VM VNC info
         bindPresenterWidget(VncInfoPopupPresenterWidget.class,
                 VncInfoPopupPresenterWidget.ViewDef.class,
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 bd8d919..817628e 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
@@ -51,6 +51,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmServerNewPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmSnapshotCreatePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VncInfoPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmRemovePopupPresenterWidget;
 
 import com.google.gwt.inject.client.AbstractGinModule;
 import com.google.inject.Provider;
@@ -74,7 +75,7 @@
             final Provider<VmDesktopNewPopupPresenterWidget> 
newDesktopVmPopupProvider,
             final Provider<VmServerNewPopupPresenterWidget> 
newServerVmPopupProvider,
             final Provider<GuidePopupPresenterWidget> guidePopupProvider,
-            final Provider<RemoveConfirmationPopupPresenterWidget> 
removeConfirmPopupProvider,
+            final Provider<VmRemovePopupPresenterWidget> 
removeConfirmPopupProvider,
             final Provider<ReportPresenterWidget> reportWindowProvider,
             final Provider<VncInfoPopupPresenterWidget> vncWindoProvider) {
         return new MainTabModelProvider<VM, VmListModel>(ginjector, 
VmListModel.class) {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRemovePopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRemovePopupPresenterWidget.java
new file mode 100644
index 0000000..9ce3fb3
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRemovePopupPresenterWidget.java
@@ -0,0 +1,17 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.vm;
+
+import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
+import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+
+public class VmRemovePopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<ConfirmationModel, 
VmRemovePopupPresenterWidget.ViewDef> {
+    public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<ConfirmationModel> {
+    }
+
+    @Inject
+    public VmRemovePopupPresenterWidget(EventBus eventBus, ViewDef view) {
+        super(eventBus, view);
+    }
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRemovePopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRemovePopupView.java
new file mode 100644
index 0000000..6b536cc
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmRemovePopupView.java
@@ -0,0 +1,20 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.vm;
+
+import org.ovirt.engine.ui.common.CommonApplicationConstants;
+import org.ovirt.engine.ui.common.CommonApplicationMessages;
+import org.ovirt.engine.ui.common.CommonApplicationResources;
+import org.ovirt.engine.ui.common.view.popup.AbstractVmRemoveConfimationPopup;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+
+public class VmRemovePopupView extends AbstractVmRemoveConfimationPopup 
implements VmRemovePopupPresenterWidget.ViewDef {
+
+    @Inject
+    public VmRemovePopupView(EventBus eventBus,
+            CommonApplicationResources resources,
+            CommonApplicationMessages messages,
+            CommonApplicationConstants constants) {
+        super(eventBus, resources, messages, constants);
+    }
+}


--
To view, visit http://gerrit.ovirt.org/10376
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iba531f7a87295564e20bd99763d185f78e483a44
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tal Nisan <tni...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to