package com.breakersoft.plow.thrift.dao.pgsql; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.UUID; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import com.breakersoft.plow.dao.AbstractDao; import com.breakersoft.plow.thrift.DependT; import com.breakersoft.plow.thrift.DependType; import com.breakersoft.plow.thrift.dao.ThriftDependDao; @Repository @Transactional(readOnly=true) public class ThriftDependDaoImpl extends AbstractDao implements ThriftDependDao { public static final RowMapper<DependT> MAPPER = new RowMapper<DependT>() { @Override public DependT mapRow(ResultSet rs, int rowNum) throws SQLException { final DependT depend = new DependT(); depend.setId(rs.getString("pk_depend")); depend.setActive(rs.getBoolean("bool_active")); depend.setType(DependType.findByValue(rs.getInt("int_type"))); depend.setDependentJobId(rs.getString("pk_dependent_job")); depend.setDependOnJobId(rs.getString("pk_dependon_job")); depend.setDependentJobName(rs.getString("str_dependent_job_name")); depend.setDependOnJobName(rs.getString("str_dependon_job_name")); depend.setCreatedTime(rs.getLong("time_created")); depend.setSatisfiedTime(rs.getLong("time_satisfied")); if (depend.getType().equals(DependType.JOB_ON_JOB)) { return depend; } depend.setDependentLayerId(rs.getString("pk_dependent_layer")); depend.setDependOnLayerId(rs.getString("pk_dependon_layer")); depend.setDependentLayerName(rs.getString("str_dependent_layer_name")); depend.setDependOnLayerName(rs.getString("str_dependon_layer_name")); switch (depend.getType()) { case LAYER_ON_TASK: depend.setDependOnTaskId(rs.getString("pk_dependon_task")); depend.setDependOnTaskName(rs.getString("str_dependon_task_name")); break; case TASK_ON_LAYER: depend.setDependentTaskId(rs.getString("pk_dependent_task")); depend.setDependentTaskName(rs.getString("str_dependent_task_name")); break; case TASK_ON_TASK: depend.setDependentTaskId(rs.getString("pk_dependent_task")); depend.setDependOnTaskId(rs.getString("pk_dependon_task")); depend.setDependentTaskName(rs.getString("str_dependent_task_name")); depend.setDependOnTaskName(rs.getString("str_dependon_task_name")); break; } return depend; } }; private static final String GET = "SELECT " + "pk_depend,"+ "int_type,"+ "bool_active,"+ "pk_dependent_job," + "pk_dependon_job," + "pk_dependent_layer," + "pk_dependon_layer," + "pk_dependent_task," + "pk_dependon_task," + "str_dependent_job_name," + "str_dependon_job_name," + "str_dependent_layer_name," + "str_dependon_layer_name," + "str_dependent_task_name," + "str_dependon_task_name," + "time_created," + "time_satisfied " + "FROM " + "plow.depend "; @Override public DependT getDepend(UUID dependId) { return jdbc.queryForObject(GET + " WHERE pk_depend=?", MAPPER, dependId); } @Override public List<DependT> getWhatDependsOnJob(UUID jobId) { return jdbc.query(GET + " WHERE pk_dependon_job=? AND int_type = ?", MAPPER, jobId, DependType.JOB_ON_JOB.ordinal()); } @Override public List<DependT> getWhatDependsOnLayer(UUID layerId) { return jdbc.query(GET + " WHERE pk_dependon_layer=? AND int_type IN (?,?)", MAPPER, layerId, DependType.LAYER_ON_LAYER.ordinal(), DependType.TASK_ON_LAYER.ordinal()); } @Override public List<DependT> getWhatDependsOnTask(UUID taskId) { return jdbc.query(GET + " WHERE pk_dependon_task=? AND int_type IN (?,?)", MAPPER, taskId, DependType.LAYER_ON_TASK.ordinal(), DependType.TASK_ON_TASK.ordinal()); } @Override public List<DependT> getWhatJobDependsOn(UUID jobId) { return jdbc.query(GET + " WHERE pk_dependent_job=? AND int_type = ?", MAPPER, jobId, DependType.JOB_ON_JOB.ordinal()); } @Override public List<DependT> getWhatLayerDependsOn(UUID layerId) { return jdbc.query(GET + " WHERE pk_dependent_layer=? AND int_type IN (?,?)", MAPPER, layerId, DependType.LAYER_ON_LAYER.ordinal(), DependType.LAYER_ON_TASK.ordinal()); } @Override public List<DependT> getWhatTaskDependsOn(UUID taskId) { return jdbc.query(GET + " WHERE pk_dependent_task=? AND int_type IN (?,?)", MAPPER, taskId, DependType.TASK_ON_LAYER.ordinal(), DependType.TASK_ON_TASK.ordinal()); } }