package org.ovirt.engine.core.dao; import java.util.List; import javax.inject.Named; import javax.inject.Singleton; import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.UnregisteredDisk; import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat; import org.ovirt.engine.core.common.businessentities.storage.VolumeType; 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; @Named @Singleton public class UnregisteredDisksDaoImpl extends BaseDao implements UnregisteredDisksDao { @Override public List<UnregisteredDisk> getByDiskIdAndStorageDomainId(Guid diskId, Guid storageDomainId) { List<UnregisteredDisk> unregisteredDisks = getCallsHandler().executeReadList("GetDiskByDiskIdAndStorageDomainId", unregisteredDiskRowMapper, getCustomMapSqlParameterSource() .addValue("disk_id", diskId) .addValue("storage_domain_id", storageDomainId)); for (UnregisteredDisk unregDisk : unregisteredDisks) { List<VmBase> vms = getCallsHandler().executeReadList("GetEntitiesByDiskId", vmsForUnregisteredDiskRowMapper, getCustomMapSqlParameterSource().addValue("disk_id", unregDisk.getId())); unregDisk.getVms().addAll(vms); } return unregisteredDisks; } @Override public void removeUnregisteredDisk(Guid diskId, Guid storageDomainId) { getCallsHandler().executeModification("RemoveDiskFromUnregistered", getCustomMapSqlParameterSource() .addValue("disk_id", diskId) .addValue("storage_domain_id", storageDomainId)); } @Override public void removeUnregisteredDiskRelatedToVM(Guid vmId, Guid storageDomainId) { getCallsHandler().executeModification("RemoveDiskFromUnregisteredRelatedToVM", getCustomMapSqlParameterSource() .addValue("vm_id", vmId) .addValue("storage_domain_id", storageDomainId)); } @Override public void saveUnregisteredDisk(UnregisteredDisk disk) { // OVF data is not included since it is being updated in the stored procedure. getCallsHandler().executeModification("InsertUnregisteredDisk", getCustomMapSqlParameterSource() .addValue("disk_id", disk.getDiskImage().getId()) .addValue("image_id", disk.getDiskImage().getImageId()) .addValue("disk_alias", disk.getDiskImage().getDiskAlias()) .addValue("disk_description", disk.getDiskImage().getDiskDescription()) .addValue("creation_date", disk.getDiskImage().getCreationDate()) .addValue("last_modified", disk.getDiskImage().getLastModified()) .addValue("volume_type", disk.getDiskImage().getVolumeType()) .addValue("volume_format", disk.getDiskImage().getVolumeFormat()) .addValue("actual_size", disk.getDiskImage().getActualSize()) .addValue("size", disk.getDiskImage().getSize()) .addValue("storage_domain_id", disk.getDiskImage().getStorageIds().get(0))); for (VmBase vmBase : disk.getVms()) { getCallsHandler().executeModification("InsertUnregisteredDisksToVms", getCustomMapSqlParameterSource() .addValue("disk_id", disk.getDiskImage().getId()) .addValue("entity_id", vmBase.getId()) .addValue("entity_name", vmBase.getName()) .addValue("storage_domain_id", disk.getDiskImage().getStorageIds().get(0))); } } private static final RowMapper<UnregisteredDisk> unregisteredDiskRowMapper = (rs, rowNum) -> { UnregisteredDisk entity = new UnregisteredDisk(); DiskImage diskImage = new DiskImage(); diskImage.setId(getGuid(rs, "disk_id")); diskImage.setImageId(getGuid(rs, "image_id")); diskImage.setDiskAlias(rs.getString("disk_alias")); diskImage.setDiskDescription(rs.getString("disk_description")); diskImage.setActualSizeInBytes(rs.getLong("actual_size")); diskImage.setSize(rs.getLong("size")); diskImage.setCreationDate(DbFacadeUtils.fromDate(rs.getTimestamp("creation_date"))); diskImage.setLastModified(DbFacadeUtils.fromDate(rs.getTimestamp("last_modified"))); diskImage.setStorageIds(GuidUtils.getGuidListFromString(rs.getString("storage_domain_id"))); diskImage.setVolumeType(VolumeType.forValue(rs.getInt("volume_type"))); diskImage.setVolumeFormat(VolumeFormat.forValue(rs.getInt("volume_format"))); entity.setDiskImage(diskImage); return entity; }; private static final RowMapper<VmBase> vmsForUnregisteredDiskRowMapper = (rs, rowNum) -> { VmBase vmBase = new VmBase(); vmBase.setId(getGuidDefaultEmpty(rs, "entity_id")); vmBase.setName(rs.getString("entity_name")); return vmBase; }; }