package org.ovirt.engine.ui.uicommonweb.models.storage; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainSharedStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.Model; @SuppressWarnings("unused") public abstract class FileStorageModel extends Model implements IStorageModel{ private EntityModel<String> path; protected void setPath(EntityModel<String> value) { path = value; } public EntityModel<String> getPath() { return path; } public boolean isEditable(StorageDomain storage) { return storage.getStatus() == StorageDomainStatus.Maintenance || storage.getStorageDomainSharedStatus() == StorageDomainSharedStatus.Unattached; } protected abstract void prepareConnectionForEditing (StorageServerConnections connection); public void prepareForEdit(StorageDomain storage) { boolean isEditable = isEditable(storage); getPath().setIsChangeable(isEditable); AsyncDataProvider.getInstance().getStorageConnectionById(new AsyncQuery<>(connection -> { getPath().setEntity(connection.getConnection()); prepareConnectionForEditing(connection); }), storage.getStorage(), true); setHostChangeability(isEditable); } protected void setHostChangeability(boolean isPathEditable) { //when storage is active, only SPM can perform actions on it, thus it is set above that host is not changeable. //If storage is editable but not active (maintenance) - any host can perform the edit so the changeable here is set based on that getContainer().getHost().setIsChangeable(isPathEditable); } }