package edu.harvard.i2b2.crc.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import edu.harvard.i2b2.crc.datavo.db.AnalysisJob;
import edu.harvard.i2b2.crc.datavo.db.StatusEnum;
public class CRCQueueDAO extends CRCDAO implements ICRCQueueDAO {
JdbcTemplate jdbcTemplate = null;
AnalysisJobRowMapper analysisJobMapper = new AnalysisJobRowMapper();
public CRCQueueDAO(DataSource dataSource, String schemaName) {
setDataSource(dataSource);
setDbSchemaName(schemaName);
jdbcTemplate = new JdbcTemplate(dataSource);
}
public void addJob(AnalysisJob analysisJob) {
String sql = "insert into "
+ getDbSchemaName()
+ "CRC_ANALYSIS_JOB(job_id, queue_name, status_type_id,domain_id, project_id, user_id, request_xml, create_date) "
+ " values(?,?,?,?,?,?,?,?)";
Object[] params = new Object[] { analysisJob.getJobId(),
analysisJob.getQueueName(), analysisJob.getStatusTypeId(),
analysisJob.getDomainId(), analysisJob.getProjectId(),
analysisJob.getUserId(), analysisJob.getRequestXml(),
analysisJob.getCreateDate() };
jdbcTemplate.update(sql, params);
}
public List<AnalysisJob> getJob(String jobId, String projectId) {
String sql = "select * from " + getDbSchemaName()
+ "CRC_ANALYSIS_JOB where job_id = ? and project_id = ? ";
List<AnalysisJob> analysisJobList = jdbcTemplate.query(sql,
new Object[] { jobId, projectId }, analysisJobMapper);
return analysisJobList;
}
public void moveJob(String jobId, String projectId, String queueName,
String statusType) {
String sql = "update "
+ getDbSchemaName()
+ "CRC_ANALYSIS_JOB set status_type_id = ?, queue_name = ? where job_id = ? and project_id = ?";
StatusEnum statusEnum = StatusEnum.valueOf(statusType);
jdbcTemplate.update(sql, new Object[] { statusEnum.ordinal(),
queueName, jobId });
}
public void updateStatus(String jobId, String projectId, String statusType) {
String sql = "update "
+ getDbSchemaName()
+ "CRC_ANALYSIS_JOB set status_type_id = ? where job_id = ? and project_id =? ";
StatusEnum statusEnum = StatusEnum.valueOf(statusType);
jdbcTemplate.update(sql, new Object[] { statusEnum.ordinal(), jobId,
projectId });
}
public List<AnalysisJob> getJobListByQueuedStatus(String queueName,
int maxReturnSize) {
int QUEUED_STATUS_TYPE_ID = StatusEnum.QUEUED.ordinal();
JdbcTemplate localJdbcTemplate = new JdbcTemplate(getDataSource());
String sql = " select * from "
+ getDbSchemaName()
+ "CRC_ANALYSIS_JOB where queue_name = ? and status_type_id = ? order by create_date";
localJdbcTemplate.setMaxRows(maxReturnSize);
List<AnalysisJob> analysisJobList = localJdbcTemplate.query(sql,
new Object[] { queueName, QUEUED_STATUS_TYPE_ID },
analysisJobMapper);
return analysisJobList;
}
private class AnalysisJobRowMapper implements RowMapper {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
AnalysisJob analysisJob = new AnalysisJob();
analysisJob.setJobId(rs.getString("JOB_ID"));
analysisJob.setQueueName(rs.getString("QUEUE_NAME"));
analysisJob.setStatusTypeId(rs.getInt("STATUS_TYPE_ID"));
analysisJob.setDomainId(rs.getString("DOMAIN_ID"));
analysisJob.setProjectId(rs.getString("PROJECT_ID"));
analysisJob.setUserId(rs.getString("USER_ID"));
analysisJob.setRequestXml(rs.getString("REQUEST_XML"));
analysisJob.setCreateDate(rs.getTimestamp("CREATE_DATE"));
analysisJob.setUpdateDate(rs.getTime("UPDATE_DATE"));
return analysisJob;
}
}
}