package org.ovirt.engine.ui.uicommonweb.models.storage; import java.util.ArrayList; import java.util.List; 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.StorageDomain; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.ImageStatus; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.Linq; 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.SearchableListModel; import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel; import org.ovirt.engine.ui.uicommonweb.models.vms.RemoveDiskModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; public class StorageDiskListModel extends SearchableListModel<StorageDomain, DiskImage> { private UICommand removeCommand; public UICommand getRemoveCommand() { return removeCommand; } private void setRemoveCommand(UICommand value) { removeCommand = value; } private UICommand privateUploadCommand; public UICommand getUploadCommand() { return privateUploadCommand; } private void setUploadCommand(UICommand value) { privateUploadCommand= value; } private UICommand privateCancelUploadCommand; public UICommand getCancelUploadCommand() { return privateCancelUploadCommand; } private void setCancelUploadCommand(UICommand value) { privateCancelUploadCommand = value; } private UICommand privatePauseUploadCommand; public UICommand getPauseUploadCommand() { return privatePauseUploadCommand; } private void setPauseUploadCommand(UICommand value) { privatePauseUploadCommand = value; } private UICommand privateResumeUploadCommand; public UICommand getResumeUploadCommand() { return privateResumeUploadCommand; } private void setResumeUploadCommand(UICommand value) { privateResumeUploadCommand = value; } public StorageDiskListModel() { setTitle(ConstantsManager.getInstance().getConstants().disksTitle()); setHelpTag(HelpTag.disks); setHashName("disks"); //$NON-NLS-1$ setRemoveCommand(new UICommand("Remove", this)); //$NON-NLS-1$ setUploadCommand(new UICommand("Upload", this)); //$NON-NLS-1$ setCancelUploadCommand(new UICommand("CancelUpload", this)); //$NON-NLS-1$ setPauseUploadCommand(new UICommand("PauseUpload", this)); //$NON-NLS-1$ setResumeUploadCommand(new UICommand("ResumeUpload", this)); //$NON-NLS-1$ updateActionAvailability(); } @Override protected void onEntityChanged() { super.onEntityChanged(); getSearchCommand().execute(); } @Override protected void onSelectedItemChanged() { super.onSelectedItemChanged(); updateActionAvailability(); } @Override protected void selectedItemsChanged() { super.selectedItemsChanged(); updateActionAvailability(); } @Override public void search() { if (getEntity() != null) { super.search(); } else { setItems(null); } } public void cancel() { setWindow(null); } @Override protected void syncSearch() { if (getEntity() == null) { return; } super.syncSearch(); IdQueryParameters parameters = new IdQueryParameters(getEntity().getId()); parameters.setRefresh(getIsQueryFirstTime()); Frontend.getInstance().runQuery(VdcQueryType.GetAllDisksByStorageDomainId, parameters, new SetItemsAsyncQuery()); } private void updateActionAvailability() { List<DiskImage> disks = getSelectedItems() != null ? getSelectedItems() : new ArrayList<DiskImage>(); getRemoveCommand().setIsExecutionAllowed(disks.size() > 0 && isRemoveCommandAvailable(disks)); getUploadCommand().setIsExecutionAllowed(isUploadCommandAvailable()); getCancelUploadCommand().setIsExecutionAllowed(UploadImageModel.isCancelAllowed(disks)); getPauseUploadCommand().setIsExecutionAllowed(UploadImageModel.isPauseAllowed(disks)); getResumeUploadCommand().setIsExecutionAllowed(UploadImageModel.isResumeAllowed(disks)); } private boolean isRemoveCommandAvailable(List<DiskImage> disks) { for (DiskImage disk : disks) { boolean isImageLocked = disk.getImageStatus() == ImageStatus.LOCKED; if (isImageLocked) { return false; } } return true; } private boolean isUploadCommandAvailable() { return getEntity() != null && Linq.isDataActiveStorageDomain(getEntity()); } private void remove() { if (getWindow() != null) { return; } RemoveDiskModel model = new RemoveDiskModel(); setWindow(model); model.setTitle(ConstantsManager.getInstance().getConstants().removeDisksTitle()); model.setHelpTag(HelpTag.remove_disk); model.setHashName("remove_disk"); //$NON-NLS-1$ model.getLatch().setIsAvailable(false); ArrayList<DiskModel> items = new ArrayList<>(); for (Object item : getSelectedItems()) { DiskImage disk = (DiskImage) item; DiskModel diskModel = new DiskModel(); diskModel.setDisk(disk); items.add(diskModel); } model.setItems(items); UICommand onRemoveCommand = UICommand.createDefaultOkUiCommand("OnRemove", this); //$NON-NLS-1$ model.getCommands().add(onRemoveCommand); UICommand cancelCommand = UICommand.createCancelUiCommand("Cancel", this); //$NON-NLS-1$ model.getCommands().add(cancelCommand); } private void onRemove() { RemoveDiskModel model = (RemoveDiskModel) getWindow(); ArrayList<VdcActionParametersBase> paramerterList = new ArrayList<>(); for (Object item : getSelectedItems()) { DiskImage disk = (DiskImage) item; VdcActionParametersBase parameters = new RemoveDiskParameters(disk.getId(), getEntity().getId()); paramerterList.add(parameters); } model.startProgress(); Frontend.getInstance().runMultipleAction(VdcActionType.RemoveDisk, paramerterList, result -> { StorageDiskListModel localModel = (StorageDiskListModel) result.getState(); localModel.stopProgress(); cancel(); }, this); } private void upload() { if (getWindow() != null) { return; } UploadImageModel.showUploadDialog( this, HelpTag.upload_disk_image_to_domain, getEntity().getId(), null); } private void resumeUpload() { if (getSelectedItem() == null || getWindow() != null) { return; } UploadImageModel.showUploadDialog( this, HelpTag.resume_upload_image_to_domain, getEntity().getId(), getSelectedItem()); } private void cancelUpload() { UploadImageModel.showCancelUploadDialog(this, HelpTag.cancel_upload_image_to_domain, getSelectedItems()); } private void onCancelUpload() { UploadImageModel.onCancelUpload((ConfirmationModel) getWindow(), getSelectedItems()); } private void pauseUpload() { if (getWindow() != null) { return; } UploadImageModel.pauseUploads(getSelectedItems()); } @Override public void executeCommand(UICommand command) { super.executeCommand(command); if (command == getRemoveCommand()) { remove(); } else if ("OnRemove".equals(command.getName())) { //$NON-NLS-1$ onRemove(); } else if ("Upload".equals(command.getName())) { //$NON-NLS-1$ upload(); } else if ("CancelUpload".equals(command.getName())) { //$NON-NLS-1$ cancelUpload(); } else if ("OnCancelUpload".equals(command.getName())) { //$NON-NLS-1$ onCancelUpload(); } else if ("PauseUpload".equals(command.getName())) { //$NON-NLS-1$ pauseUpload(); } else if ("ResumeUpload".equals(command.getName())) { //$NON-NLS-1$ resumeUpload(); } else if ("Cancel".equals(command.getName())) { //$NON-NLS-1$ cancel(); } } @Override protected String getListName() { return "StorageDiskListModel"; //$NON-NLS-1$ } }