package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.common.action.AttachDetachVmDiskParameters; import org.ovirt.engine.core.common.action.RemoveDiskParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskVmElement; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.ICommandTarget; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; @SuppressWarnings("unused") public class RemoveDiskModel extends ConfirmationModel { public static final String ON_REMOVE = "OnRemoveDisk"; public static final String CANCEL_REMOVE = "CancelRemoveDisk"; private VM vm; private List<Disk> disksToRemove; private UICommand cancelCommand; public RemoveDiskModel() { setLatch(new EntityModel<Boolean>()); getLatch().setIsAvailable(true); } public void initialize(VM vm, List<Disk> disksToRemove, ICommandTarget target) { // the VM can be null if the disks do not belong to a specific VM this.vm = vm; this.disksToRemove = disksToRemove; setTitle(ConstantsManager.getInstance().getConstants().removeDisksTitle()); setHelpTag(HelpTag.remove_disk); setHashName("remove_disk"); //$NON-NLS-1$ getLatch().setEntity(false); ArrayList<DiskModel> items = new ArrayList<>(); for (Disk disk : disksToRemove) { DiskModel diskModel = new DiskModel(); diskModel.setDisk(disk); diskModel.setVm(vm); items.add(diskModel); // A shared disk or a disk snapshot can only be detached if (disk.getNumberOfVms() > 1) { getLatch().setIsChangeable(false); } } setItems(items); UICommand tempVar = UICommand.createDefaultOkUiCommand(ON_REMOVE, target); getCommands().add(tempVar); cancelCommand = UICommand.createCancelUiCommand(CANCEL_REMOVE, target); getCommands().add(cancelCommand); } public void onRemove(final ICommandTarget target) { boolean removeDisk = getLatch().getEntity(); VdcActionType actionType = removeDisk ? VdcActionType.RemoveDisk : VdcActionType.DetachDiskFromVm; ArrayList<VdcActionParametersBase> paramerterList = new ArrayList<>(); for (Disk disk : disksToRemove) { VdcActionParametersBase parameters = removeDisk ? new RemoveDiskParameters(disk.getId()) : new AttachDetachVmDiskParameters(new DiskVmElement(disk.getId(), vm.getId())); paramerterList.add(parameters); } startProgress(); Frontend.getInstance().runMultipleAction(actionType, paramerterList, result -> { stopProgress(); target.executeCommand(cancelCommand); }, this); } @Override public boolean validate() { return true; } }