package org.ovirt.engine.ui.uicommonweb.models.storage; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.comparators.UnregisteredDiskByDiskAliasComparator; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.UnregisteredDisk; import org.ovirt.engine.core.common.queries.IdAndBooleanQueryParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; public class StorageRegisterDiskImageListModel extends SearchableListModel<StorageDomain, Disk> { private UICommand registerCommand; public UICommand getRegisterCommand() { return registerCommand; } private void setRegisterCommand(UICommand value) { registerCommand = value; } public StorageRegisterDiskImageListModel() { setTitle(ConstantsManager.getInstance().getConstants().disksImportTitle()); setHashName("disk_image_register"); //$NON-NLS-1$ setRegisterCommand(new UICommand("ImportDiskImage", this)); //$NON-NLS-1$ } @Override protected void onEntityChanged() { super.onEntityChanged(); getSearchCommand().execute(); if (getEntity() != null) { updateActionAvailability(); } } @Override protected void onSelectedItemChanged() { super.onSelectedItemChanged(); updateActionAvailability(); } @Override protected void selectedItemsChanged() { super.selectedItemsChanged(); updateActionAvailability(); } @Override public void search() { if (getEntity() == null) { setItems(null); return; } super.search(); } public void cancel() { setWindow(null); } @Override protected void syncSearch() { if (getEntity() == null) { setItems(null); return; } IdQueryParameters parameters = new IdAndBooleanQueryParameters(getEntity().getId(), true); parameters.setRefresh(getIsQueryFirstTime()); Frontend.getInstance().runQuery(VdcQueryType.GetUnregisteredDisksFromDB, parameters, new AsyncQuery<VdcQueryReturnValue>(returnValue -> { List<UnregisteredDisk> unregisteredDisks = returnValue.getReturnValue(); Collections.sort(unregisteredDisks, new UnregisteredDiskByDiskAliasComparator()); ArrayList<Disk> diskItems = new ArrayList<>(); for (UnregisteredDisk unregisteredDisk : unregisteredDisks) { diskItems.add(unregisteredDisk.getDiskImage()); } setItems(diskItems); })); } private void updateActionAvailability() { List<Disk> disks = getSelectedItems() != null ? getSelectedItems() : new ArrayList<Disk>(); getRegisterCommand().setIsExecutionAllowed(disks.size() > 0 && getEntity().getStatus() == StorageDomainStatus.Active); } private void register() { if (getWindow() != null) { return; } final RegisterDiskModel registerDiskModel = new RegisterDiskModel(); registerDiskModel.setTargetAvailable(false); setWindow(registerDiskModel); // noinspection unchecked registerDiskModel.setEntity(this); registerDiskModel.init(); registerDiskModel.setTitle(ConstantsManager.getInstance().getConstants().importDisksTitle()); registerDiskModel.setHelpTag(HelpTag.import_disks); registerDiskModel.setHashName("import_disks"); //$NON-NLS-1$ registerDiskModel.startProgress(); AsyncDataProvider.getInstance().getDataCenterById(new AsyncQuery<>(dataCenter -> { registerDiskModel.setQuotaEnforcementType(dataCenter.getQuotaEnforcementType()); registerDiskModel.setDisks(DiskModel.disksToDiskModelList(getSelectedItems())); registerDiskModel.updateStorageDomain(getEntity()); registerDiskModel.stopProgress(); }), getEntity().getStoragePoolId()); } @Override public void executeCommand(UICommand command) { super.executeCommand(command); if (command == getRegisterCommand()) { register(); } else if ("Cancel".equals(command.getName())) { //$NON-NLS-1$ cancel(); } } @Override protected String getListName() { return "StorageRegisterDiskImageListModel"; //$NON-NLS-1$ } }