package org.ovirt.engine.core.dao; import java.util.Date; import java.util.List; import javax.inject.Named; import javax.inject.Singleton; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.job.Job; import org.ovirt.engine.core.common.job.JobExecutionStatus; import org.ovirt.engine.core.common.utils.EnumUtils; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.SingleColumnRowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; @Named @Singleton public class JobDaoImpl extends DefaultGenericDao<Job, Guid> implements JobDao { private static final RowMapper<Job> jobRowMapper = (rs, rowNum) -> { Job job = new Job(); job.setId(getGuidDefaultEmpty(rs, "job_id")); job.setActionType(VdcActionType.valueOf(rs.getString("action_type"))); job.setDescription(rs.getString("description")); job.setStatus(JobExecutionStatus.valueOf(rs.getString("status"))); job.setOwnerId(getGuid(rs, "owner_id")); job.setEngineSessionSeqId(rs.getLong("engine_session_seq_id")); job.setVisible(rs.getBoolean("visible")); job.setStartTime(DbFacadeUtils.fromDate(rs.getTimestamp("start_time"))); job.setEndTime(DbFacadeUtils.fromDate(rs.getTimestamp("end_time"))); job.setLastUpdateTime(DbFacadeUtils.fromDate(rs.getTimestamp("last_update_time"))); job.setCorrelationId(rs.getString("correlation_id")); job.setExternal(rs.getBoolean("is_external")); job.setAutoCleared(rs.getBoolean("is_auto_cleared")); return job; }; public JobDaoImpl() { super("Job"); setProcedureNameForGetAll("GetAllJobs"); } @Override protected MapSqlParameterSource createIdParameterMapper(Guid id) { return getCustomMapSqlParameterSource().addValue("job_id", id); } @Override protected MapSqlParameterSource createFullParametersMapper(Job entity) { return createIdParameterMapper(entity.getId()) .addValue("action_type", EnumUtils.nameOrNull(entity.getActionType())) .addValue("description", entity.getDescription()) .addValue("status", EnumUtils.nameOrNull(entity.getStatus())) .addValue("owner_id", entity.getOwnerId()) .addValue("engine_session_seq_id", entity.getEngineSessionSeqId()) .addValue("visible", entity.isVisible()) .addValue("start_time", entity.getStartTime()) .addValue("end_time", entity.getEndTime()) .addValue("last_update_time", entity.getLastUpdateTime()) .addValue("correlation_id", entity.getCorrelationId()) .addValue("is_external", entity.isExternal()) .addValue("is_auto_cleared", entity.isAutoCleared()); } @Override protected RowMapper<Job> createEntityRowMapper() { return jobRowMapper; } @Override public boolean exists(Guid id) { return get(id) != null; } @Override public List<Job> getJobsByOffsetAndPageSize(int offset, int pageSize) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("position", offset) .addValue("page_size", pageSize); return getCallsHandler().executeReadList("GetJobsByOffsetAndPageSize", createEntityRowMapper(), parameterSource); } @Override public List<Job> getJobsByCorrelationId(String correlationId) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("correlation_id", correlationId); return getCallsHandler().executeReadList("GetJobsByCorrelationId", createEntityRowMapper(), parameterSource); } @Override public List<Job> getJobsBySessionSeqIdAndStatus(long engineSessionSeqId, JobExecutionStatus status) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("engine_session_seq_id", engineSessionSeqId) .addValue("status", EnumUtils.nameOrNull(status)); return getCallsHandler().executeReadList("GetJobsByEngineSessionSeqIdAndStatus", createEntityRowMapper(), parameterSource); } @Override public void updateJobLastUpdateTime(Guid jobId, Date lastUpdateTime) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("job_id", jobId) .addValue("last_update_time", lastUpdateTime); getCallsHandler().executeModification("UpdateJobLastUpdateTime", parameterSource); } @Override public void deleteJobOlderThanDateWithStatus(Date sinceDate, List<JobExecutionStatus> statusesList) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("end_time", sinceDate) .addValue("status", StringUtils.join(statusesList, ",")); getCallsHandler().executeModification("DeleteJobOlderThanDateWithStatus", parameterSource); } @Override public void updateStartedExecutionEntitiesToUnknown(Date updateTime) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("end_time", updateTime); getCallsHandler().executeModification("UpdateStartedExecutionEntitiesToUnknown", parameterSource); } @Override public void deleteRunningJobsOfTasklessCommands() { getCallsHandler().executeModification("DeleteRunningJobsOfTasklessCommands", getCustomMapSqlParameterSource()); } @Override public void deleteCompletedJobs(Date succeededJobs, Date failedJobs) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("succeeded_end_time", succeededJobs) .addValue("failed_end_time", failedJobs); getCallsHandler().executeModification("DeleteCompletedJobsOlderThanDate", parameterSource); } @Override public boolean checkIfJobHasTasks(Guid jobId) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("job_id", jobId); return getCallsHandler().executeRead ("CheckIfJobHasTasks", SingleColumnRowMapper.newInstance(Boolean.class), parameterSource); } }