package com.breakersoft.plow.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 com.breakersoft.plow.Filter;
import com.breakersoft.plow.Matcher;
import com.breakersoft.plow.MatcherE;
import com.breakersoft.plow.MatcherFull;
import com.breakersoft.plow.Project;
import com.breakersoft.plow.dao.AbstractDao;
import com.breakersoft.plow.dao.MatcherDao;
import com.breakersoft.plow.thrift.MatcherField;
import com.breakersoft.plow.thrift.MatcherType;
import com.breakersoft.plow.util.JdbcUtils;
@Repository
public class MatcherDaoImpl extends AbstractDao implements MatcherDao {
private static final String INSERT =
JdbcUtils.Insert(
"plow.matcher",
"pk_matcher",
"pk_filter",
"int_field",
"int_type",
"str_value");
@Override
public Matcher create(Filter filter, MatcherField field, MatcherType type, String value) {
final UUID id = UUID.randomUUID();
jdbc.update(INSERT, id, filter.getFilterId(), field.ordinal(), type.ordinal(), value);
MatcherE matcher = new MatcherE();
matcher.setFilterId(filter.getFilterId());
matcher.setMatcherId(id);
return matcher;
}
public static final RowMapper<Matcher> MAPPER = new RowMapper<Matcher>() {
@Override
public Matcher mapRow(ResultSet rs, int rowNum)
throws SQLException {
MatcherE matcher = new MatcherE();
matcher.setMatcherId((UUID) rs.getObject("pk_matcher"));
matcher.setFilterId((UUID) rs.getObject("pk_filter"));
return matcher;
}
};
public static final RowMapper<MatcherFull> MAPPER_ALL = new RowMapper<MatcherFull>() {
@Override
public MatcherFull mapRow(ResultSet rs, int rowNum)
throws SQLException {
MatcherFull matcher = new MatcherFull();
matcher.setMatcherId((UUID) rs.getObject("pk_matcher"));
matcher.setFilterId((UUID) rs.getObject("pk_filter"));
matcher.field = MatcherField.findByValue(rs.getInt("int_field"));
matcher.type = MatcherType.findByValue(rs.getInt("int_type"));
matcher.value = rs.getString("str_value");
matcher.attr = rs.getString("str_attr");
return matcher;
}
};
private static final String GET =
"SELECT " +
"pk_filter, " +
"pk_matcher " +
"FROM " +
"plow.matcher " +
"WHERE " +
"pk_matcher = ? ";
@Override
public Matcher get(UUID id) {
return jdbc.queryForObject(GET, MAPPER, id);
}
private static final String GET_FULL =
"SELECT " +
"filter.pk_filter, " +
"matcher.pk_matcher, " +
"matcher.int_field, " +
"matcher.int_type, " +
"matcher.str_value, " +
"matcher.str_attr " +
"FROM " +
"plow.filter INNER JOIN matcher ON matcher.pk_filter = filter.pk_filter ";
private static final String GET_FULL_ALL =
GET_FULL +
"WHERE " +
"filter.pk_project = ? " +
"ORDER BY " +
"filter.int_order ASC ";
@Override
public List<MatcherFull> getAllFull(Project project) {
return jdbc.query(GET_FULL_ALL, MAPPER_ALL, project.getProjectId());
}
@Override
public MatcherFull getFull(Matcher matcher) {
return jdbc.queryForObject(GET_FULL + " WHERE matcher.pk_matcher=?", MAPPER_ALL, matcher.getMatcherId());
}
@Override
public boolean delete(Matcher matcher) {
return jdbc.update("DELETE FROM matcher WHERE pk_matcher=?", matcher.getMatcherId()) == 1;
}
@Override
public void setValue(Matcher matcher, String value) {
jdbc.update("UPDATE matcher SET str_value=? WHERE pk_matcher=?", value, matcher.getMatcherId());
}
@Override
public void setField(Matcher matcher, MatcherField field) {
jdbc.update("UPDATE matcher SET int_field=? WHERE pk_matcher=?", field.ordinal(),
matcher.getMatcherId());
}
@Override
public void setType(Matcher matcher, MatcherType type) {
jdbc.update("UPDATE matcher SET int_type=? WHERE pk_matcher=?", type.ordinal(),
matcher.getMatcherId());
}
private static final String UPDATE =
"UPDATE " +
"matcher " +
"SET " +
"int_field=?,"+
"int_type=?,"+
"str_value=? "+
"WHERE " +
"pk_matcher=?";
@Override
public void update(Matcher matcher, MatcherField field, MatcherType type, String value) {
jdbc.update(UPDATE, field.ordinal(), type.ordinal(), value, matcher.getMatcherId());
}
}