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.StorageDomainDR;
import org.ovirt.engine.core.compat.Guid;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
/**
* {@code StorageDomainDRDaoImpl} provides an implementation of {@link StorageDomainDRDao}.
*/
@Named
@Singleton
@SuppressWarnings("synthetic-access")
public class StorageDomainDRDaoImpl extends BaseDao implements StorageDomainDRDao {
/**
* Row mapper to map a returned row to a {@link StorageDomainDR} object.
*/
private static final RowMapper<StorageDomainDR> storageDomainDRRowMapper = (rs, rowNum) -> {
final StorageDomainDR entity = new StorageDomainDR();
entity.setStorageDomainId(getGuidDefaultEmpty(rs, "storage_domain_id"));
entity.setGeoRepSessionId(getGuidDefaultEmpty(rs, "georep_session_id"));
entity.setScheduleCronExpression(rs.getString("sync_schedule"));
entity.setJobId(rs.getString("qrtz_job_id"));
return entity;
};
private MapSqlParameterSource createFullParametersSource(StorageDomainDR storageDomainDR) {
return getCustomMapSqlParameterSource().addValue("storage_domain_id", storageDomainDR.getStorageDomainId())
.addValue("georep_session_id", storageDomainDR.getGeoRepSessionId())
.addValue("sync_schedule", storageDomainDR.getScheduleCronExpression())
.addValue("qrtz_job_id", storageDomainDR.getJobId());
}
@Override
public StorageDomainDR get(Guid storageDomainId, Guid georepSessionId) {
return getCallsHandler().executeRead(
"GetStorageDomainDR", storageDomainDRRowMapper,
getCustomMapSqlParameterSource().addValue("storage_domain_id", storageDomainId)
.addValue("georep_session_id", georepSessionId));
}
@Override
public List<StorageDomainDR> getAllForStorageDomain(Guid storageDomainId) {
return getCallsHandler().executeReadList(
"GetStorageDomainDRList", storageDomainDRRowMapper,
getCustomMapSqlParameterSource().addValue("storage_domain_id", storageDomainId));
}
@Override
public List<StorageDomainDR> getWithGeoRepSession(Guid geoRepSessionId) {
return getCallsHandler().executeReadList(
"GetStorageDomainDRWithGeoRep", storageDomainDRRowMapper,
getCustomMapSqlParameterSource().addValue("georep_session_id", geoRepSessionId));
}
@Override
public void save(StorageDomainDR storageDomainDR) {
getCallsHandler().executeModification("InsertStorageDomainDR", createFullParametersSource(storageDomainDR));
}
@Override
public void update(StorageDomainDR storageDomainDR) {
getCallsHandler().executeModification("UpdateStorageDomainDR", createFullParametersSource(storageDomainDR));
}
@Override
public void saveOrUpdate(StorageDomainDR storageDomainDR) {
if (get(storageDomainDR.getStorageDomainId(), storageDomainDR.getGeoRepSessionId()) != null) {
update(storageDomainDR);
} else {
save(storageDomainDR);
}
}
@Override
public void remove(Guid storageDomainId, Guid georepSessionId) {
getCallsHandler().executeModification("DeleteStorageDomainDR",
getCustomMapSqlParameterSource().addValue("storage_domain_id", storageDomainId)
.addValue("georep_session_id", georepSessionId));
}
}