package org.ovirt.engine.ui.uicommonweb.models.vms; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.storage.DiskInterface; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.UIConstants; public class VirtioScsiUtil { private final UIConstants constants = ConstantsManager.getInstance().getConstants(); private VirtioScasiEnablingFinished finishedCallback; private UnitVmModel model; public VirtioScsiUtil(UnitVmModel model) { this.model = model; } public void updateVirtioScsiEnabled(final Guid vmId, int osId) { this.updateVirtioScsiEnabled(vmId, osId, new VirtioScasiEnablingFinished() { @Override public void beforeUpdates() { } @Override public void afterUpdates() { } }); } public void updateVirtioScsiEnabled(final Guid vmId, int osId, VirtioScasiEnablingFinished finishedCallback) { this.finishedCallback = finishedCallback; final Cluster cluster = model.getSelectedCluster(); if (cluster == null) { return; } AsyncDataProvider.getInstance().getDiskInterfaceList(osId, cluster.getCompatibilityVersion(), model.asyncQuery(diskInterfaces -> { boolean isOsSupportVirtioScsi = diskInterfaces.contains(DiskInterface.VirtIO_SCSI); callBeforeUpdates(); model.getIsVirtioScsiEnabled().setIsChangeable(isOsSupportVirtioScsi); if (!isOsSupportVirtioScsi) { model.getIsVirtioScsiEnabled().setEntity(false); model.getIsVirtioScsiEnabled().setChangeProhibitionReason(constants.cannotEnableVirtioScsiForOs()); callAfterUpdates(); } else { AsyncDataProvider.getInstance().isVirtioScsiEnabledForVm(model.asyncQuery(returnValue -> { model.getIsVirtioScsiEnabled().setEntity(returnValue); callAfterUpdates(); }), vmId); } })); } public void callBeforeUpdates() { if (finishedCallback != null) { finishedCallback.beforeUpdates(); } } public void callAfterUpdates() { if (finishedCallback != null) { finishedCallback.afterUpdates(); } } public static interface VirtioScasiEnablingFinished { void beforeUpdates(); void afterUpdates(); } }