package org.ovirt.engine.core.dao; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.BootSequence; import org.ovirt.engine.core.common.businessentities.ConsoleDisconnectAction; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.MigrationSupport; import org.ovirt.engine.core.common.businessentities.NumaTuneMode; import org.ovirt.engine.core.common.businessentities.OriginType; import org.ovirt.engine.core.common.businessentities.SerialNumberPolicy; import org.ovirt.engine.core.common.businessentities.SsoMethod; import org.ovirt.engine.core.common.businessentities.UsbPolicy; import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.common.businessentities.VmType; import org.ovirt.engine.core.common.utils.customprop.VmPropertiesUtils; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils; import org.ovirt.engine.core.utils.GuidUtils; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; public abstract class VmBaseDao<T extends VmBase> extends DefaultGenericDao<T, Guid> { public static final String SMALL_ICON_ID_COLUMN = "small_icon_id"; public static final String LARGE_ICON_ID_COLUMN = "large_icon_id"; public VmBaseDao(String entityStoredProcedureName) { super(entityStoredProcedureName); } protected MapSqlParameterSource createBaseParametersMapper(T entity) { return createIdParameterMapper(entity.getId()) .addValue("description", entity.getDescription()) .addValue("free_text_comment", entity.getComment()) .addValue("creation_date", entity.getCreationDate()) .addValue("mem_size_mb", entity.getMemSizeMb()) .addValue("max_memory_size_mb", entity.getMaxMemorySizeMb()) .addValue("num_of_io_threads", entity.getNumOfIoThreads()) .addValue("vnc_keyboard_layout", entity.getVncKeyboardLayout()) .addValue("tunnel_migration", entity.getTunnelMigration()) .addValue("cluster_id", entity.getClusterId()) .addValue("num_of_sockets", entity.getNumOfSockets()) .addValue("cpu_per_socket", entity.getCpuPerSocket()) .addValue("threads_per_cpu", entity.getThreadsPerCpu()) .addValue("os", entity.getOsId()) .addValue("num_of_monitors", entity.getNumOfMonitors()) .addValue("single_qxl_pci", entity.getSingleQxlPci()) .addValue("allow_console_reconnect", entity.isAllowConsoleReconnect()) .addValue("vm_type", entity.getVmType()) .addValue("priority", entity.getPriority()) .addValue("auto_startup", entity.isAutoStartup()) .addValue("is_stateless", entity.isStateless()) .addValue("is_smartcard_enabled", entity.isSmartcardEnabled()) .addValue("is_delete_protected", entity.isDeleteProtected()) .addValue("sso_method", entity.getSsoMethod().toString()) .addValue("iso_path", entity.getIsoPath()) .addValue("usb_policy", entity.getUsbPolicy()) .addValue("time_zone", entity.getTimeZone()) .addValue("fail_back", entity.isFailBack()) .addValue("nice_level", entity.getNiceLevel()) .addValue("cpu_shares", entity.getCpuShares()) .addValue("default_boot_sequence", entity.getDefaultBootSequence()) .addValue("default_display_type", entity.getDefaultDisplayType()) .addValue("origin", entity.getOrigin()) .addValue("initrd_url", entity.getInitrdUrl()) .addValue("kernel_url", entity.getKernelUrl()) .addValue("kernel_params", entity.getKernelParams()) .addValue("quota_id", entity.getQuotaId()) .addValue("migration_support", entity.getMigrationSupport().getValue()) .addValue("dedicated_vm_for_vds", entity.getDedicatedVmForVdsList().isEmpty() ? null : StringUtils.join(entity.getDedicatedVmForVdsList(), BaseDao.SEPARATOR)) .addValue("min_allocated_mem", entity.getMinAllocatedMem()) .addValue("is_run_and_pause", entity.isRunAndPause()) .addValue("created_by_user_id", entity.getCreatedByUserId()) .addValue("migration_downtime", entity.getMigrationDowntime()) .addValue("serial_number_policy", entity.getSerialNumberPolicy() == null ? null : entity.getSerialNumberPolicy().getValue()) .addValue("custom_serial_number", entity.getCustomSerialNumber()) .addValue("is_boot_menu_enabled", entity.isBootMenuEnabled()) .addValue("is_spice_file_transfer_enabled", entity.isSpiceFileTransferEnabled()) .addValue("is_spice_copy_paste_enabled", entity.isSpiceCopyPasteEnabled()) .addValue("cpu_profile_id", entity.getCpuProfileId()) .addValue("numatune_mode", entity.getNumaTuneMode().getValue()) .addValue("is_auto_converge", entity.getAutoConverge()) .addValue("is_migrate_compressed", entity.getMigrateCompressed()) .addValue("predefined_properties", entity.getPredefinedProperties()) .addValue("userdefined_properties", entity.getUserDefinedProperties()) .addValue("custom_emulated_machine", entity.getCustomEmulatedMachine()) .addValue("custom_cpu_name", entity.getCustomCpuName()) .addValue(SMALL_ICON_ID_COLUMN, entity.getSmallIconId()) .addValue(LARGE_ICON_ID_COLUMN, entity.getLargeIconId()) .addValue("console_disconnect_action", entity.getConsoleDisconnectAction().toString()) .addValue("custom_compatibility_version", entity.getCustomCompatibilityVersion()) .addValue("migration_policy_id", entity.getMigrationPolicyId()) .addValue("lease_sd_id", entity.getLeaseStorageDomainId()); } /** * The common basic rowmapper for properties in VmBase. * @param <T> a subclass of VmBase. */ protected abstract static class AbstractVmRowMapper<T extends VmBase> implements RowMapper<T> { protected final void map(final ResultSet rs, final T entity) throws SQLException { entity.setMemSizeMb(rs.getInt("mem_size_mb")); entity.setMaxMemorySizeMb(rs.getInt("max_memory_size_mb")); entity.setNumOfIoThreads(rs.getInt("num_of_io_threads")); entity.setOsId(rs.getInt("os")); entity.setNumOfMonitors(rs.getInt("num_of_monitors")); entity.setAllowConsoleReconnect(rs.getBoolean("allow_console_reconnect")); entity.setSingleQxlPci(rs.getBoolean("single_qxl_pci")); entity.setDefaultDisplayType(DisplayType.forValue(rs.getInt("default_display_type"))); entity.setDescription(rs.getString("description")); entity.setComment(rs.getString("free_text_comment")); entity.setCreationDate(DbFacadeUtils.fromDate(rs.getTimestamp("creation_date"))); entity.setNumOfSockets(rs.getInt("num_of_sockets")); entity.setCpuPerSocket(rs.getInt("cpu_per_socket")); entity.setThreadsPerCpu(rs.getInt("threads_per_cpu")); entity.setTimeZone(rs.getString("time_zone")); entity.setVmType(VmType.forValue(rs.getInt("vm_type"))); entity.setUsbPolicy(UsbPolicy.forValue(rs.getInt("usb_policy"))); entity.setFailBack(rs.getBoolean("fail_back")); entity.setDefaultBootSequence(BootSequence.forValue(rs.getInt("default_boot_sequence"))); entity.setNiceLevel(rs.getInt("nice_level")); entity.setCpuShares(rs.getInt("cpu_shares")); entity.setPriority(rs.getInt("priority")); entity.setAutoStartup(rs.getBoolean("auto_startup")); entity.setStateless(rs.getBoolean("is_stateless")); entity.setDbGeneration(rs.getLong("db_generation")); entity.setIsoPath(rs.getString("iso_path")); entity.setOrigin(OriginType.forValue(rs.getInt("origin"))); entity.setKernelUrl(rs.getString("kernel_url")); entity.setKernelParams(rs.getString("kernel_params")); entity.setInitrdUrl(rs.getString("initrd_url")); entity.setSmartcardEnabled(rs.getBoolean("is_smartcard_enabled")); entity.setDeleteProtected(rs.getBoolean("is_delete_protected")); entity.setSsoMethod(SsoMethod.fromString(rs.getString("sso_method"))); entity.setTunnelMigration((Boolean) rs.getObject("tunnel_migration")); entity.setVncKeyboardLayout(rs.getString("vnc_keyboard_layout")); entity.setRunAndPause(rs.getBoolean("is_run_and_pause")); entity.setCreatedByUserId(Guid.createGuidFromString(rs.getString("created_by_user_id"))); entity.setMigrationDowntime((Integer) rs.getObject("migration_downtime")); entity.setSerialNumberPolicy(SerialNumberPolicy.forValue((Integer) rs.getObject("serial_number_policy"))); entity.setCustomSerialNumber(rs.getString("custom_serial_number")); entity.setBootMenuEnabled(rs.getBoolean("is_boot_menu_enabled")); entity.setSpiceFileTransferEnabled(rs.getBoolean("is_spice_file_transfer_enabled")); entity.setSpiceCopyPasteEnabled(rs.getBoolean("is_spice_copy_paste_enabled")); entity.setMigrationSupport(MigrationSupport.forValue(rs.getInt("migration_support"))); entity.setDedicatedVmForVdsList(GuidUtils.getGuidListFromString(rs.getString("dedicated_vm_for_vds"))); entity.setMinAllocatedMem(rs.getInt("min_allocated_mem")); entity.setQuotaId(getGuid(rs, "quota_id")); entity.setCpuProfileId(getGuid(rs, "cpu_profile_id")); entity.setNumaTuneMode(NumaTuneMode.forValue(rs.getString("numatune_mode"))); entity.setAutoConverge((Boolean) rs.getObject("is_auto_converge")); entity.setMigrateCompressed((Boolean) rs.getObject("is_migrate_compressed")); String predefinedProperties = rs.getString("predefined_properties"); String userDefinedProperties = rs.getString("userdefined_properties"); entity.setPredefinedProperties(predefinedProperties); entity.setUserDefinedProperties(userDefinedProperties); entity.setCustomProperties(VmPropertiesUtils.getInstance().customProperties(predefinedProperties, userDefinedProperties)); entity.setCustomEmulatedMachine(rs.getString("custom_emulated_machine")); entity.setCustomCpuName(rs.getString("custom_cpu_name")); entity.setSmallIconId(getGuid(rs, SMALL_ICON_ID_COLUMN)); entity.setLargeIconId(getGuid(rs, LARGE_ICON_ID_COLUMN)); entity.setConsoleDisconnectAction(ConsoleDisconnectAction.fromDbString(rs.getString("console_disconnect_action"))); entity.setCustomCompatibilityVersion(new VersionRowMapper("custom_compatibility_version").mapRow(rs, 0)); entity.setLeaseStorageDomainId(getGuid(rs, "lease_sd_id")); entity.setMigrationPolicyId(getGuid(rs, "migration_policy_id")); } } }