package org.ovirt.engine.core.dao; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import java.util.List; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.simple.ParameterizedRowMapper; import org.ovirt.engine.core.common.businessentities.FileTypeExtension; import org.ovirt.engine.core.common.businessentities.RepoFileMetaData; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.compat.Guid; /** * <code>StorageDomainDAODbFacadeImpl</code> provides an implementation of {@link StorageDomainDAO} based on code from * {@link org.ovirt.engine.core.dal.dbbroker.DbFacade}. Responsible for managing the repository files meta data via the * persistent layer. * */ public class RepoFileMetaDataDAODbFacadeImpl extends BaseDAODbFacade implements RepoFileMetaDataDAO { @Override public void removeRepoDomainFileList(Guid id,FileTypeExtension filetype) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("repo_domain_id", id).addValue("file_type", filetype.getValue()); getCallsHandler().executeModification("DeleteRepo_domain_file_list", parameterSource); } @Override public void addRepoFileMap(RepoFileMetaData map) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("repo_domain_id", map.getRepoDomainId()) .addValue("repo_file_name", map.getRepoFileName()).addValue("size", map.getSize()) .addValue("date_created", map.getDateCreated()).addValue("last_refreshed", map.getLastRefreshed()) .addValue("file_type", map.getFileType().getValue()); getCallsHandler().executeModification("InsertRepo_domain_file_meta_data", parameterSource); } @SuppressWarnings("unchecked") @Override /** * Returns a list of repository files with specific file extension from storage domain id with specific status. */ public List<RepoFileMetaData> getRepoListForStorageDomainAndStoragePool(Guid storagePoolId, Guid storageDomainId, FileTypeExtension fileType) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("storage_pool_id", storagePoolId); parameterSource.addValue("storage_domain_id", storageDomainId); parameterSource.addValue("file_type", fileType.getValue()); ParameterizedRowMapper<RepoFileMetaData> mapper = new ParameterizedRowMapper<RepoFileMetaData>() { @Override public RepoFileMetaData mapRow(ResultSet rs, int rowNum) throws SQLException { RepoFileMetaData entity = new RepoFileMetaData(); entity.setStoragePoolId(Guid.createGuidFromString(rs.getString("storage_pool_id"))); entity.setRepoDomainId(Guid.createGuidFromString(rs.getString("storage_domain_id"))); entity.setRepoFileName(rs.getString("repo_file_name")); entity.setStoragePoolStatus(StoragePoolStatus.forValue(rs.getInt("storage_pool_status"))); entity.setVdsStatus(VDSStatus.forValue(rs.getInt("vds_status"))); entity.setSize(rs.getLong("size")); entity.setStorageDomainStatus(StorageDomainStatus.forValue(rs.getInt("storage_domain_status"))); entity.setDateCreated((Date) rs.getObject("date_created")); entity.setLastRefreshed(rs.getLong("last_refreshed")); return entity; } }; return getCallsHandler().executeReadList("GetRepo_files_by_storage_domain_and_storage_pool", mapper, parameterSource); } @SuppressWarnings("unchecked") @Override /** * Returns a list of repository files with specific file extension from storage domain id.<BR/> If * no repository found, will return an empty list. */ public List<RepoFileMetaData> getRepoListForStorageDomain(Guid storageDomainId, FileTypeExtension fileType) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("storage_domain_id", storageDomainId); parameterSource.addValue("file_type", fileType.getValue()); ParameterizedRowMapper<RepoFileMetaData> mapper = new ParameterizedRowMapper<RepoFileMetaData>() { @Override public RepoFileMetaData mapRow(ResultSet rs, int rowNum) throws SQLException { RepoFileMetaData entity = new RepoFileMetaData(); entity.setRepoDomainId(Guid.createGuidFromString(rs.getString("repo_domain_id"))); entity.setRepoFileName(rs.getString("repo_file_name")); entity.setSize(rs.getLong("size")); entity.setDateCreated((Date) rs.getObject("date_created")); entity.setLastRefreshed(rs.getLong("last_refreshed")); return entity; } }; return getCallsHandler().executeReadList("GetRepo_files_by_storage_domain", mapper, parameterSource); } @SuppressWarnings("unchecked") @Override /** * Returns a list of all repository files with specific file extension from all the storage pools, * which meets the same status, type and SPM status. */ public List<RepoFileMetaData> getAllRepoFilesForAllStoragePools(StorageDomainType storageDomainType, StoragePoolStatus storagePoolStatus, StorageDomainStatus storageDomainStatus, VDSStatus vdsStatus) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("storage_domain_type", storageDomainType.getValue()); parameterSource.addValue("storage_pool_status", storagePoolStatus.getValue()); parameterSource.addValue("vds_status", vdsStatus.getValue()); parameterSource.addValue("storage_domain_status", storageDomainStatus.getValue()); ParameterizedRowMapper<RepoFileMetaData> mapper = new ParameterizedRowMapper<RepoFileMetaData>() { @Override public RepoFileMetaData mapRow(ResultSet rs, int rowNum) throws SQLException { RepoFileMetaData entity = new RepoFileMetaData(); entity.setRepoDomainId(Guid.createGuidFromString(rs.getString("storage_domain_id"))); entity.setLastRefreshed(rs.getLong("last_refreshed")); entity.setFileType(FileTypeExtension.forValue(rs.getInt("file_type"))); return entity; } }; return getCallsHandler().executeReadList("GetRepo_files_in_all_storage_pools", mapper, parameterSource); } }