package org.ovirt.engine.core.dao; import static org.ovirt.engine.core.dao.VmDaoImpl.vmRowMapper; import java.util.List; import javax.inject.Named; import javax.inject.Singleton; 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.common.businessentities.VmPoolType; import org.ovirt.engine.core.compat.Guid; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; /** * {@code VmPoolDaoImpl} provides an implementation of {@link VmPoolDao}. */ @Named @Singleton public class VmPoolDaoImpl extends BaseDao implements VmPoolDao { @Override public void removeVmFromVmPool(Guid id) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_guid", id); getCallsHandler().executeModification("DeleteVm_pool_map", parameterSource); } @Override public VmPool get(Guid id) { return get(id, null, false); } @Override public VmPool get(Guid id, Guid userID, boolean isFiltered) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_pool_id", id).addValue("user_id", userID).addValue("is_filtered", isFiltered); return getCallsHandler().executeRead("GetVm_poolsByvm_pool_id", vmPoolFullRowMapper, parameterSource); } @Override public VmPool getByName(String name) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_pool_name", name); return getCallsHandler().executeRead("GetVm_poolsByvm_pool_name", vmPoolNonFullRowMapper, parameterSource); } @Override public List<VmPool> getAll() { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource(); return getCallsHandler().executeReadList("GetAllFromVm_pools", vmPoolFullRowMapper, parameterSource); } @Override public List<VmPool> getAllForUser(Guid id) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("user_id", id); return getCallsHandler().executeReadList("GetAllVm_poolsByUser_id_with_groups_and_UserRoles", vmPoolNonFullRowMapper, parameterSource); } @Override public List<VmPool> getAllWithQuery(String query) { return getJdbcTemplate().query(query, vmPoolFullRowMapper); } @Override public void save(VmPool pool) { Guid id = pool.getVmPoolId(); if (Guid.isNullOrEmpty(id)) { id = Guid.newGuid(); pool.setVmPoolId(id); } MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_pool_description", pool.getVmPoolDescription()) .addValue("vm_pool_comment", pool.getComment()) .addValue("vm_pool_id", pool.getVmPoolId()) .addValue("vm_pool_name", pool.getName()) .addValue("vm_pool_type", pool.getVmPoolType()) .addValue("stateful", pool.isStateful()) .addValue("parameters", pool.getParameters()) .addValue("prestarted_vms", pool.getPrestartedVms()) .addValue("cluster_id", pool.getClusterId()) .addValue("max_assigned_vms_per_user", pool.getMaxAssignedVmsPerUser()) .addValue("spice_proxy", pool.getSpiceProxy()) .addValue("is_being_destroyed", pool.isBeingDestroyed()) .addValue("is_auto_storage_select", pool.isAutoStorageSelect()); getCallsHandler().executeModification("InsertVm_pools", parameterSource); } @Override public void update(VmPool pool) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_pool_description", pool.getVmPoolDescription()) .addValue("vm_pool_comment", pool.getComment()) .addValue("vm_pool_id", pool.getVmPoolId()) .addValue("vm_pool_name", pool.getName()) .addValue("vm_pool_type", pool.getVmPoolType()) .addValue("stateful", pool.isStateful()) .addValue("parameters", pool.getParameters()) .addValue("prestarted_vms", pool.getPrestartedVms()) .addValue("cluster_id", pool.getClusterId()) .addValue("max_assigned_vms_per_user", pool.getMaxAssignedVmsPerUser()) .addValue("spice_proxy", pool.getSpiceProxy()) .addValue("is_being_destroyed", pool.isBeingDestroyed()) .addValue("is_auto_storage_select", pool.isAutoStorageSelect()); getCallsHandler().executeModification("UpdateVm_pools", parameterSource); } @Override public void remove(Guid id) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_pool_id", id); getCallsHandler().executeModification("DeleteVm_pools", parameterSource); } @Override public void setBeingDestroyed(Guid vmPoolId, boolean beingDestroyed) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_pool_id", vmPoolId) .addValue("is_being_destroyed", beingDestroyed); getCallsHandler().executeModification("SetVmPoolBeingDestroyed", parameterSource); } @Override public void addVmToPool(VmPoolMap map) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("vm_guid", map.getVmId()) .addValue("vm_pool_id", map.getVmPoolId()); getCallsHandler().executeModification("InsertVm_pool_map", parameterSource); } @Override public List<VmPoolMap> getVmPoolsMapByVmPoolId(Guid vmPoolId) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("vm_pool_id", vmPoolId); return getCallsHandler().executeReadList("GetVm_pool_mapByvm_pool_id", vmPoolMapRowMapper, parameterSource); } @Override public List<VmPoolMap> getVmMapsInVmPoolByVmPoolIdAndStatus(Guid vmPoolId, VMStatus vmStatus) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("vm_pool_id", vmPoolId).addValue("status", vmStatus.getValue()); return getCallsHandler().executeReadList("getVmMapsInVmPoolByVmPoolIdAndStatus", vmPoolMapRowMapper, parameterSource); } @Override public void boundVmPoolPrestartedVms(Guid vmPoolId) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("vm_pool_id", vmPoolId); getCallsHandler().executeModification("BoundVmPoolPrestartedVms", parameterSource); } private static final RowMapper<VmPool> vmPoolFullRowMapper = (rs, rowNum) -> { final VmPool entity = new VmPool(); entity.setVmPoolDescription(rs.getString("vm_pool_description")); entity.setVmPoolId(getGuidDefaultEmpty(rs, "vm_pool_id")); entity.setComment(rs.getString("vm_pool_comment")); entity.setName(rs.getString("vm_pool_name")); entity.setVmPoolType(VmPoolType.forValue(rs.getInt("vm_pool_type"))); entity.setStateful(rs.getBoolean("stateful")); entity.setParameters(rs.getString("parameters")); entity.setPrestartedVms(rs.getInt("prestarted_vms")); entity.setClusterId(getGuidDefaultEmpty(rs, "cluster_id")); entity.setClusterName(rs.getString("cluster_name")); entity.setAssignedVmsCount(rs.getInt("assigned_vm_count")); entity.setRunningVmsCount(rs.getInt("vm_running_count")); entity.setMaxAssignedVmsPerUser(rs.getInt("max_assigned_vms_per_user")); entity.setSpiceProxy(rs.getString("spice_proxy")); entity.setBeingDestroyed(rs.getBoolean("is_being_destroyed")); entity.setAutoStorageSelect(rs.getBoolean("is_auto_storage_select")); return entity; }; private static final RowMapper<VmPool> vmPoolNonFullRowMapper = (rs, rowNum) -> { final VmPool entity = new VmPool(); entity.setVmPoolDescription(rs.getString("vm_pool_description")); entity.setVmPoolId(getGuidDefaultEmpty(rs, "vm_pool_id")); entity.setComment(rs.getString("vm_pool_comment")); entity.setName(rs.getString("vm_pool_name")); entity.setVmPoolType(VmPoolType.forValue(rs.getInt("vm_pool_type"))); entity.setStateful(rs.getBoolean("stateful")); entity.setParameters(rs.getString("parameters")); entity.setPrestartedVms(rs.getInt("prestarted_vms")); entity.setClusterId(getGuidDefaultEmpty(rs, "cluster_id")); entity.setClusterName(rs.getString("cluster_name")); entity.setMaxAssignedVmsPerUser(rs.getInt("max_assigned_vms_per_user")); entity.setSpiceProxy(rs.getString("spice_proxy")); entity.setBeingDestroyed(rs.getBoolean("is_being_destroyed")); entity.setAutoStorageSelect(rs.getBoolean("is_auto_storage_select")); return entity; }; private static final RowMapper<VmPoolMap> vmPoolMapRowMapper = (rs, nowNum) -> { VmPoolMap entity = new VmPoolMap(); entity.setVmId(getGuidDefaultEmpty(rs, "vm_guid")); entity.setVmPoolId(getGuidDefaultEmpty(rs, "vm_pool_id")); return entity; }; @Override public VM getVmDataFromPoolByPoolGuid(Guid vmPoolId, Guid userID, boolean isFiltered) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("pool_id", vmPoolId).addValue("user_id", userID).addValue("is_filtered", isFiltered); return getCallsHandler().executeRead("GetVmDataFromPoolByPoolId", vmRowMapper, parameterSource); } }