package org.ovirt.engine.core.dao;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
import org.ovirt.engine.core.compat.Guid;
/**
* {@code DiskImageDao} defines a type for performing CRUD operations on instances of {@link DiskImage}.
*/
public interface DiskImageDao extends ReadDao<DiskImage, Guid> {
/**
* Retrieves the snapshot with the specified id.
*
* @param id
* the id
* @return the snapshot
*/
DiskImage getSnapshotById(Guid id);
/**
* Retrieves all snapshots with the given parent id.
*
* @param id
* the parent id
* @return the list of snapshots
*/
List<DiskImage> getAllSnapshotsForParent(Guid id);
/**
* Retrieves all snapshots by a given image id
* (ordered by the images chain).
*
* @param id
* the parent id
* @return the list of snapshots
*/
List<DiskImage> getAllSnapshotsForLeaf(Guid id);
/**
* Retrieves all snapshots associated with the given storage domain.
*
* @param id
* the storage domain id
* @return the list of snapshots
*/
List<DiskImage> getAllSnapshotsForStorageDomain(Guid id);
/**
* Retrieves all snapshots associated with given snapshot id.
*
* @param id
* the snapshot id
* @return the list of snapshots
*/
List<DiskImage> getAllSnapshotsForVmSnapshot(Guid id);
/**
* Retrieves the disk image with the image information for the given vm snapshot id.
*
* @param diskId
* the disk id
* @param vmSnapshotId
* the snapshot id
* @return the list of snapshots
*/
DiskImage getDiskSnapshotForVmSnapshot(Guid diskId, Guid vmSnapshotId);
/**
* Retrieves all snapshots associated with the given image group.
*
* @param id
* the image group id
* @return the list of snapshots
*/
List<DiskImage> getAllSnapshotsForImageGroup(Guid id);
/**
* Retrieves the disk snapshots attached to the VM with the specified id.
*
* @param vmId
* the VM id
* @param isPlugged
* boolean indicating whether to query according to the plugged state,
* when null is provided - both plugged and unplugged disk snapshots
* would be queried.
* @return attached disks snapshots to the VM with the specified id.
*/
List<DiskImage> getAttachedDiskSnapshotsToVm(Guid vmId, Boolean isPlugged);
/**
* Retrieves the ancestor of the given image (or the image itself, if it has no ancestors).
*
* @param id
* The id of the image to get the ancestor for.
* @return The ancestral image.
*/
DiskImage getAncestor(Guid id);
/**
* Retrieves the ancestor of the given image (or the image itself, if it has no ancestors).
*
* @param id
* the id of the image to get the ancestor for.
* @param userID
* the ID of the user requesting the information
* @param isFiltered
* Whether the results should be filtered according to the user's permissions
* @return The ancestral image.
*/
DiskImage getAncestor(Guid id, Guid userID, boolean isFiltered);
/**
* Return all images that don't have a Disk entity in the DB and are part of a snapshot of the given VM ID.
*
* @param vmId
* The VM to look up snapshots for.
* @return List of images (empty if none found).
*/
List<DiskImage> getImagesWithNoDisk(Guid vmId);
/**
* Return all images that resides on the Storage Domain.
*
* @param storageDomainId
* The Storage Domain to be fetched entities from.
* @return List of DiskImages related to the Storage Domain.
*/
List<DiskImage> getAllForStorageDomain(Guid storageDomainId);
/**
* Return all images that attached to disk profile.
*
* @param diskProfileIds
* List of Disk Profile Id attached to disks.
* @return List of DiskImages
*/
List<DiskImage> getAllForDiskProfiles(Collection<Guid> diskProfileIds);
/**
* Return all children snapshots for a list of parents
*
* @param parentIds List of parent image guids
* @return List of child snpashots
*/
Set<DiskImage> getAllSnapshotsForParents(Collection<Guid> parentIds);
}