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