package org.ovirt.engine.core.dao;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.VmDevice;
import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
import org.ovirt.engine.core.common.businessentities.VmDeviceId;
import org.ovirt.engine.core.compat.Guid;
public interface VmDeviceDao extends GenericDao<VmDevice, VmDeviceId>, MassOperationsDao<VmDevice, VmDeviceId> {
/**
* Check if the {@link VmDevice} with the given id exists or not.
* @param id
* The device id.
* @return Does the device exist or not.
*/
boolean exists(VmDeviceId id);
List<VmDevice> getVmDeviceByVmId(Guid vmId);
List<VmDevice> getVmDeviceByVmId(Guid vmId, Guid userID, boolean isFiltered);
List<VmDevice> getVmDevicesByDeviceId(Guid deviceId, Guid vmId);
List<VmDevice> getVmDeviceByVmIdAndType(Guid vmId, VmDeviceGeneralType type);
/**
* @param vmBaseId VM or template id
*/
List<VmDevice> getVmDeviceByVmIdTypeAndDevice(Guid vmBaseId, VmDeviceGeneralType type, String device);
List<VmDevice> getVmDeviceByVmIdTypeAndDevice(Guid vmId,
VmDeviceGeneralType type,
String device,
Guid userID,
boolean isFiltered);
List<VmDevice> getVmDeviceByTypeAndDevice(List<Guid> vmsIds,
VmDeviceGeneralType type,
String device,
Guid userID,
boolean isFiltered);
List<VmDevice> getVmDeviceByType(VmDeviceGeneralType type);
List<VmDevice> getUnmanagedDevicesByVmId(Guid vmId);
boolean existsVmDeviceByVmIdAndType(Guid vmId, VmDeviceGeneralType type);
boolean isMemBalloonEnabled(Guid vmId);
void removeAll(List<VmDeviceId> removedDeviceIds);
void removeVmDevicesByVmIdAndType(Guid vmId, VmDeviceGeneralType type);
void saveAll(List<VmDevice> newVmDevices);
/**
* Clear the device address kept for this device. When A VM is started, devices with empty addresses are allocated
* with new one. Device addresses are fetched by the engine from each host per each VM periodically so once a VM is
* up, its devices map is fetched and saved to DB.
* Use this method when the address is not used anymore or is not valid e.g when changing a disk interface type from
* IDE to VirtIO.
*/
void clearDeviceAddress(Guid deviceId);
/**
* Clear addresses of all devices associated with the given VM.
*
* @see #clearDeviceAddress
*/
void clearAllDeviceAddressesByVmId(Guid vmId);
/**
* Runs an update for the device according to fields that were updated during
* VdsUpdateRuntimeInfo periodic call
*/
void updateRuntimeInfo(VmDevice vmDevice);
/**
* Runs an update for the device according to fields that were updated during
* HotPlugDisk
*/
void updateHotPlugDisk(VmDevice vmDevice);
}