package org.ovirt.engine.core.dao;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VMStatus;
import org.ovirt.engine.core.common.businessentities.VmPool;
import org.ovirt.engine.core.common.businessentities.VmPoolMap;
import org.ovirt.engine.core.compat.Guid;
/**
* {@code VmPoolDao} defines a type that performs CRUD operations on instances of {@link VmPool}.
*/
public interface VmPoolDao extends Dao, SearchDao<VmPool> {
/**
* Removes the specified VM from the pool.
*
* @param vm
* the VM id
*/
void removeVmFromVmPool(Guid vm);
/**
* Retrieves the VM pool with the specified ID.
*
* @param id
* the pool id
* @return the VM pool
*/
VmPool get(Guid id);
/**
* Retrieves the VM pool with the specified ID with optional filtering
*
* @param id
* the pool id
* @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 VM pool
*/
VmPool get(Guid id, Guid userID, boolean isFiltered);
/**
* Retrieves the VM pool with the given name.
*
* @param name
* the pool name
* @return the VM pool
*/
VmPool getByName(String name);
/**
* Gets all defined VM pools.
*
* @return the list of VM pools
*/
List<VmPool> getAll();
/**
* Gets all pools for the specified user.
*
* @param user
* the user id
* @return the list of VM pools
*/
List<VmPool> getAllForUser(Guid user);
/**
* Saves the specified pool.
*
* @param pool
* the VM pool
*/
void save(VmPool pool);
/**
* Updates the specified pool.
*
* @param pool
* the VM pool
*/
void update(VmPool pool);
/**
* Removes the VM pool with the specified id.
*
* @param vmPool
* the pool id
*/
void remove(Guid vmPool);
/**
* Sets beingDestroyed flag of the given pool.
*/
void setBeingDestroyed(Guid vmPoolId, boolean beingDestroyed);
void addVmToPool(VmPoolMap map);
List<VmPoolMap> getVmPoolsMapByVmPoolId(Guid vmPoolId);
/**
* Gets the maps of the given pool, for the Vms that are in the given status
*/
List<VmPoolMap> getVmMapsInVmPoolByVmPoolIdAndStatus(Guid vmPoolId, VMStatus vmStatus);
/**
* Returns a single VM from the vm pool with the specified id, with optional filtering.
*
* @param vmPoolId
* the vm pool id
* @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 a single VM from the pool
*/
VM getVmDataFromPoolByPoolGuid(Guid vmPoolId, Guid userID, boolean isFiltered);
/**
* If number of prestarted VMs in the pool is greater than total number of VMs, set
* the number of prestarted VMs to be equal to the total number of VMs. Otherwise, leave
* the number of prestarted VMs untouched.
*
* @param vmPoolId
* the VM pool ID
*/
void boundVmPoolPrestartedVms(Guid vmPoolId);
}