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.VmBlockJob;
import org.ovirt.engine.core.common.businessentities.VmBlockJobType;
import org.ovirt.engine.core.common.businessentities.VmJob;
import org.ovirt.engine.core.common.businessentities.VmJobState;
import org.ovirt.engine.core.common.businessentities.VmJobType;
import org.ovirt.engine.core.compat.Guid;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@Named
@Singleton
public class VmJobDaoImpl extends MassOperationsGenericDao<VmJob, Guid> implements VmJobDao {
public VmJobDaoImpl() {
super("VmJobs");
}
@Override
public VmJob get(Guid id) {
throw new UnsupportedOperationException();
}
@Override
public List<VmJob> getAll() {
return getCallsHandler().executeReadList("GetAllVmJobs",
vmJobRowMapper,
getCustomMapSqlParameterSource());
}
@Override
protected MapSqlParameterSource createIdParameterMapper(Guid id) {
return getCustomMapSqlParameterSource().addValue("vm_job_id", id);
}
@Override
protected MapSqlParameterSource createFullParametersMapper(VmJob entity) {
MapSqlParameterSource mapper = createIdParameterMapper(entity.getId());
mapper.addValue("vm_id", entity.getVmId());
mapper.addValue("job_state", entity.getJobState().getValue());
mapper.addValue("job_type", entity.getJobType().getValue());
if (entity.getJobType() == VmJobType.BLOCK) {
VmBlockJob blockJob = (VmBlockJob) entity;
mapper.addValue("block_job_type", blockJob.getBlockJobType().getValue());
mapper.addValue("bandwidth", blockJob.getBandwidth());
mapper.addValue("cursor_cur", blockJob.getCursorCur());
mapper.addValue("cursor_end", blockJob.getCursorEnd());
mapper.addValue("image_group_id", blockJob.getImageGroupId());
} else {
mapper.addValue("block_job_type", null);
mapper.addValue("bandwidth", null);
mapper.addValue("cursor_cur", null);
mapper.addValue("cursor_end", null);
mapper.addValue("image_group_id", null);
}
return mapper;
}
@Override
protected RowMapper<VmJob> createEntityRowMapper() {
return vmJobRowMapper;
}
private static final RowMapper<VmJob> vmJobRowMapper = (rs, rowNum) -> {
VmJob entity;
VmJobType jobType = VmJobType.forValue(rs.getInt("job_type"));
switch (jobType) {
case BLOCK:
VmBlockJob blockJob = new VmBlockJob();
blockJob.setBlockJobType(VmBlockJobType.forValue(rs.getInt("block_job_type")));
blockJob.setBandwidth(rs.getLong("bandwidth"));
blockJob.setCursorCur(rs.getLong("cursor_cur"));
blockJob.setCursorEnd(rs.getLong("cursor_end"));
blockJob.setImageGroupId(getGuidDefaultEmpty(rs, "image_group_id"));
entity = blockJob;
break;
default:
entity = new VmJob();
break;
}
entity.setId(getGuidDefaultEmpty(rs, "vm_job_id"));
entity.setVmId(getGuidDefaultEmpty(rs, "vm_id"));
entity.setJobState(VmJobState.forValue(rs.getInt("job_state")));
entity.setJobType(jobType);
return entity;
};
}