package org.ovirt.engine.core.bll.storage.repoimage;
import javax.inject.Inject;
import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
import org.ovirt.engine.core.common.queries.GetImagesListByStoragePoolIdParameters;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.StorageDomainDao;
import org.ovirt.engine.core.dao.StoragePoolDao;
/**
* This query retrieves repo files for a storage pool.
* Note that there are no permissions on non-data storage domains, so this query is filtered according to the permissions of the storage pool
*/
public class GetImagesListByStoragePoolIdQuery<P extends GetImagesListByStoragePoolIdParameters> extends GetImagesListQueryBase<P> {
@Inject
private StorageDomainDao storageDomainDao;
@Inject
private StoragePoolDao storagePoolDao;
public GetImagesListByStoragePoolIdQuery(P parameters) {
super(parameters);
}
/**
* @return The storage domain to get the images from
*/
@Override
protected Guid getStorageDomainIdForQuery() {
if (doesUserHavePermissionsOnStoragePool()) {
return storageDomainDao.getIsoStorageDomainIdForPool(getStoragePoolId(), StorageDomainStatus.Active);
}
return null;
}
/**
* Checks if the user have query permissions on the storage <b>pool</b>.
* @return <code>true</code> if the user has permissions on the storage pool, <code>false</code> if not.
*/
private boolean doesUserHavePermissionsOnStoragePool() {
return storagePoolDao.get(getStoragePoolId(), getUserID(), getParameters().isFiltered()) != null;
}
/**
* @return The Storage Pool ID from the parameters
*/
private Guid getStoragePoolId() {
return getParameters().getStoragePoolId();
}
}