package org.ovirt.engine.core.dao.gluster; import java.util.Collection; import java.util.List; import javax.inject.Named; import javax.inject.Singleton; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.gluster.GlusterSnapshotStatus; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSnapshotEntity; import org.ovirt.engine.core.common.utils.EnumUtils; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.MapSqlParameterMapper; import org.ovirt.engine.core.dao.MassOperationsGenericDao; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; @Named @Singleton public class GlusterVolumeSnapshotDaoImpl extends MassOperationsGenericDao<GlusterVolumeSnapshotEntity, Guid> implements GlusterVolumeSnapshotDao { private static final RowMapper<GlusterVolumeSnapshotEntity> snapshotRowMapper = (rs, rowNum) -> { GlusterVolumeSnapshotEntity entity = new GlusterVolumeSnapshotEntity(); entity.setSnapshotId(getGuidDefaultEmpty(rs, "snapshot_id")); entity.setClusterId(getGuidDefaultEmpty(rs, "cluster_id")); entity.setVolumeId(getGuidDefaultEmpty(rs, "volume_id")); entity.setSnapshotName(rs.getString("snapshot_name")); entity.setCreatedAt(rs.getTimestamp("_create_date")); entity.setDescription(rs.getString("description")); entity.setStatus(GlusterSnapshotStatus.from(rs.getString("status"))); return entity; }; public GlusterVolumeSnapshotDaoImpl() { super("GlusterVolumeSnapshot"); setProcedureNameForGet("GetGlusterVolumeSnapshotById"); } @Override public void save(GlusterVolumeSnapshotEntity snapshot) { getCallsHandler().executeModification("InsertGlusterVolumeSnapshot", createFullParametersMapper(snapshot)); } @Override public void saveAll(List<GlusterVolumeSnapshotEntity> snapshots) { snapshots.forEach(this::save); } @Override public GlusterVolumeSnapshotEntity getById(Guid id) { return getCallsHandler().executeRead("GetGlusterVolumeSnapshotById", snapshotRowMapper, createSnapshotIdParams(id)); } @Override public GlusterVolumeSnapshotEntity getByName(Guid volumeId, String snapshotName) { return getCallsHandler().executeRead("GetGlusterVolumeSnapshotByName", snapshotRowMapper, getCustomMapSqlParameterSource() .addValue("volume_id", volumeId) .addValue("snapshot_name", snapshotName)); } @Override public List<GlusterVolumeSnapshotEntity> getAllByVolumeId(Guid volumeId) { return getCallsHandler().executeReadList("GetGlusterVolumeSnapshotsByVolumeId", snapshotRowMapper, getCustomMapSqlParameterSource() .addValue("volume_id", volumeId)); } @Override public List<GlusterVolumeSnapshotEntity> getAllByClusterId(Guid clusterId) { return getCallsHandler().executeReadList("GetGlusterVolumeSnapshotsByClusterId", snapshotRowMapper, getCustomMapSqlParameterSource().addValue("cluster_Id", clusterId)); } @Override public void remove(Guid id) { getCallsHandler().executeModification("DeleteGlusterVolumeSnapshotByGuid", createSnapshotIdParams(id)); } @Override public void removeAllByVolumeId(Guid volumeId) { getCallsHandler().executeModification("DeleteGlusterVolumeSnapshotsByVolumeId", getCustomMapSqlParameterSource() .addValue("volume_id", volumeId)); } @Override public void removeByName(Guid volumeId, String snapshotName) { getCallsHandler().executeModification("DeleteGlusterVolumeSnapshotByName", getCustomMapSqlParameterSource() .addValue("volume_id", volumeId) .addValue("snapshot_name", snapshotName)); } @Override public void removeAll(Collection<Guid> ids) { getCallsHandler().executeModification("DeleteGlusterVolumesSnapshotByIds", getCustomMapSqlParameterSource().addValue("snapshot_ids", StringUtils.join(ids, ','))); } @Override public void updateSnapshotStatus(Guid snapshotId, GlusterSnapshotStatus status) { getCallsHandler().executeModification("UpdateGlusterVolumeSnapshotStatus", createSnapshotIdParams(snapshotId).addValue("status", EnumUtils.nameOrNull(status))); } @Override public void updateSnapshotStatusByName(Guid volumeId, String snapshotName, GlusterSnapshotStatus status) { getCallsHandler().executeModification("UpdateGlusterVolumeSnapshotStatusByName", getCustomMapSqlParameterSource() .addValue("volume_id", volumeId) .addValue("snapshot_name", snapshotName) .addValue("status", EnumUtils.nameOrNull(status))); } @Override public List<GlusterVolumeSnapshotEntity> getAllWithQuery(String query) { return getJdbcTemplate().query(query, snapshotRowMapper); } @Override protected MapSqlParameterSource createFullParametersMapper(GlusterVolumeSnapshotEntity snapshot) { return getCustomMapSqlParameterSource() .addValue("snapshot_id", snapshot.getSnapshotId()) .addValue("snapshot_name", snapshot.getSnapshotName()) .addValue("volume_id", snapshot.getVolumeId()) .addValue("description", snapshot.getDescription()) .addValue("status", EnumUtils.nameOrNull(snapshot.getStatus())) .addValue("_create_date", snapshot.getCreatedAt()); } private MapSqlParameterSource createSnapshotIdParams(Guid id) { return getCustomMapSqlParameterSource().addValue("snapshot_id", id); } @Override protected MapSqlParameterSource createIdParameterMapper(Guid id) { return createSnapshotIdParams(id); } @Override protected RowMapper<GlusterVolumeSnapshotEntity> createEntityRowMapper() { return snapshotRowMapper; } @Override public void updateAllInBatch(List<GlusterVolumeSnapshotEntity> snapshots) { updateAllInBatch("UpdateGlusterVolumeSnapshotStatus", snapshots, getBatchMapper()); } @Override public MapSqlParameterMapper<GlusterVolumeSnapshotEntity> getBatchMapper() { return entity -> new MapSqlParameterSource() .addValue("snapshot_id", entity.getId()) .addValue("snapshot_name", entity.getSnapshotName()) .addValue("volume_id", entity.getVolumeId()) .addValue("description", entity.getDescription()) .addValue("status", EnumUtils.nameOrNull(entity.getStatus())) .addValue("_create_date", entity.getCreatedAt()); } }