package org.ovirt.engine.core.dao; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.stream.Collectors; import javax.inject.Named; import javax.inject.Singleton; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.compat.Guid; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.SingleColumnRowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; @Named @Singleton public class VmStaticDaoImpl extends VmBaseDao<VmStatic> implements VmStaticDao { public static final Integer USE_LATEST_VERSION_NUMBER_INDICATOR = null; public static final Integer DONT_USE_LATEST_VERSION_NUMBER_INDICATOR = 1; public VmStaticDaoImpl() { super("VmStatic"); setProcedureNameForGet("GetVmStaticByVmGuid"); } @Override public List<VmStatic> getAll() { throw new UnsupportedOperationException(); } @Override protected MapSqlParameterSource createFullParametersMapper(VmStatic vm) { return createBaseParametersMapper(vm) .addValue("vm_name", vm.getName()) .addValue("vmt_guid", vm.getVmtGuid()) .addValue("is_initialized", vm.isInitialized()) .addValue("cpu_pinning", vm.getCpuPinning()) .addValue("host_cpu_flags", vm.isUseHostCpuFlags()) .addValue("instance_type_id", vm.getInstanceTypeId()) .addValue("image_type_id", vm.getImageTypeId()) .addValue("original_template_name", vm.getOriginalTemplateName()) .addValue("original_template_id", vm.getOriginalTemplateGuid()) .addValue("template_version_number", vm.isUseLatestVersion() ? USE_LATEST_VERSION_NUMBER_INDICATOR : DONT_USE_LATEST_VERSION_NUMBER_INDICATOR) .addValue("provider_id", vm.getProviderId()); } @Override protected RowMapper<VmStatic> createEntityRowMapper() { return VMStaticRowMapper.instance; } @Override public void remove(Guid id) { remove(id, true); } public void remove(Guid id, boolean removePermissions) { getCallsHandler().executeModification("DeleteVmStatic", createIdParameterMapper(id) .addValue("remove_permissions", removePermissions)); } public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(Guid storagePoolId, boolean shareableDisks) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("storage_pool_id", storagePoolId) .addValue("shareable", shareableDisks); return getCallsHandler().executeReadList("GetVmsAndTemplatesIdsWithoutAttachedImageDisks", createGuidMapper(), parameterSource); } @Override protected MapSqlParameterSource createIdParameterMapper(Guid id) { return getCustomMapSqlParameterSource().addValue("vm_guid", id); } @Override public List<VmStatic> getAllByName(String name) { return getCallsHandler().executeReadList("GetVmStaticByName", VMStaticRowMapper.instance, getCustomMapSqlParameterSource() .addValue("vm_name", name)); } @Override public List<VmStatic> getAllByStoragePoolId(Guid spId) { return getCallsHandler().executeReadList("GetAllFromVmStaticByStoragePoolId", VMStaticRowMapper.instance, getCustomMapSqlParameterSource() .addValue("sp_id", spId)); } @Override public List<VmStatic> getAllByCluster(Guid cluster) { return getCallsHandler().executeReadList("GetVmStaticByCluster", VMStaticRowMapper.instance, getCustomMapSqlParameterSource() .addValue("cluster_id", cluster)); } @Override public List<VmStatic> getAllWithFailbackByVds(Guid vds) { return getCallsHandler().executeReadList("GetVmStaticWithFailbackByVdsId", VMStaticRowMapper.instance, getCustomMapSqlParameterSource() .addValue("vds_id", vds)); } @Override public List<VmStatic> getAllByGroupAndNetworkName(Guid group, String name) { return getCallsHandler().executeReadList("GetvmStaticByGroupIdAndNetwork", VMStaticRowMapper.instance, getCustomMapSqlParameterSource() .addValue("groupId", group).addValue("networkName", name)); } @Override public List<String> getAllNamesPinnedToHost(Guid host) { RowMapper<String> mapper = (rs, rowNum) -> rs.getString("vm_name"); return getCallsHandler().executeReadList("GetNamesOfVmStaticDedicatedToVds", mapper, getCustomMapSqlParameterSource() .addValue("vds_id", host)); } @Override public void incrementDbGenerationForAllInStoragePool(Guid storagePoolId) { getCallsHandler().executeModification("IncrementDbGenerationForAllInStoragePool", getCustomMapSqlParameterSource() .addValue("storage_pool_id", storagePoolId)); } @Override public void incrementDbGeneration(Guid id) { getCallsHandler().executeModification("IncrementDbGeneration", getCustomMapSqlParameterSource() .addValue("vm_guid", id)); } @Override public void incrementDbGenerationForVms(List<Guid> guids) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_guids", createArrayOfUUIDs(guids)); getCallsHandler().executeModification( "IncrementDbGenerationForVms", parameterSource); } @Override public Long getDbGeneration(Guid id) { return getCallsHandler().executeRead("GetDbGeneration", SingleColumnRowMapper.newInstance(Long.class), getCustomMapSqlParameterSource().addValue("vm_guid", id)); } public List<Guid> getOrderedVmGuidsForRunMultipleActions(List<Guid> guids) { return getCallsHandler().executeReadList("GetOrderedVmGuidsForRunMultipleActions", createGuidMapper() , getCustomMapSqlParameterSource().addValue("vm_guids", guids.stream().map(s -> "'" + s + "'").collect(Collectors.joining(",")))); } @Override public void updateVmCpuProfileIdForClusterId(Guid clusterId, Guid cpuProfileId) { getCallsHandler().executeModification("UpdateVmCpuProfileIdForClusterId", getCustomMapSqlParameterSource() .addValue("cluster_id", clusterId) .addValue("cpu_profile_id", cpuProfileId)); } @Override public List<VmStatic> getAllWithoutIcon() { return getCallsHandler().executeReadList("GetVmStaticWithoutIcon", getRowMapper(), getCustomMapSqlParameterSource()); } @Override public List<VmStatic> getAllRunningWithLeaseOnStorageDomain(Guid storageDomainId) { return getCallsHandler().executeReadList("GetActiveVmsWithLeaseOnStorageDomain", getRowMapper(), getCustomMapSqlParameterSource().addValue("storage_domain_id", storageDomainId)); } @Override public List<VmStatic> getAllWithLeaseOnStorageDomain(Guid storageDomainId) { return getCallsHandler().executeReadList("GetVmsAndTemplatesWithLeaseOnStorageDomain", getRowMapper(), getCustomMapSqlParameterSource().addValue("storage_domain_id", storageDomainId)); } @Override public List<VmStatic> getAllRunningForVds(Guid id) { return getCallsHandler().executeReadList("GetVmsStaticRunningOnVds", getRowMapper(), getCustomMapSqlParameterSource().addValue("vds_id", id)); } /** * JDBC row mapper for VM static */ private static class VMStaticRowMapper extends AbstractVmRowMapper<VmStatic> { public static final VMStaticRowMapper instance = new VMStaticRowMapper(); @Override public VmStatic mapRow(ResultSet rs, int rowNum) throws SQLException { final VmStatic entity = new VmStatic(); map(rs, entity); entity.setId(getGuidDefaultEmpty(rs, "vm_guid")); entity.setClusterId(getGuidDefaultEmpty(rs, "cluster_id")); entity.setName(rs.getString("vm_name")); entity.setVmtGuid(getGuidDefaultEmpty(rs, "vmt_guid")); entity.setInitialized(rs.getBoolean("is_initialized")); entity.setCpuPinning(rs.getString("cpu_pinning")); entity.setUseHostCpuFlags(rs.getBoolean("host_cpu_flags")); entity.setInstanceTypeId(Guid.createGuidFromString(rs.getString("instance_type_id"))); entity.setImageTypeId(Guid.createGuidFromString(rs.getString("image_type_id"))); entity.setOriginalTemplateName(rs.getString("original_template_name")); entity.setOriginalTemplateGuid(getGuid(rs, "original_template_id")); // if template_version_number is null it means use latest version entity.setUseLatestVersion(rs.getObject("template_version_number") == USE_LATEST_VERSION_NUMBER_INDICATOR); entity.setProviderId(getGuid(rs, "provider_id")); return entity; } } public static RowMapper<VmStatic> getRowMapper() { return VMStaticRowMapper.instance; } }