package com.breakersoft.plow.dao.pgsql;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.breakersoft.plow.Filter;
import com.breakersoft.plow.FilterE;
import com.breakersoft.plow.Project;
import com.breakersoft.plow.dao.AbstractDao;
import com.breakersoft.plow.dao.FilterDao;
import com.breakersoft.plow.util.JdbcUtils;
@Repository
public class FilterDaoImpl extends AbstractDao implements FilterDao {
private static final String INSERT =
JdbcUtils.Insert(
"plow.filter",
"pk_filter",
"pk_project",
"str_name",
"int_order",
"bool_enabled");
@Override
public Filter create(Project project, String name) {
final UUID id = UUID.randomUUID();
jdbc.update(INSERT, id, project.getProjectId(), name, -1, true);
FilterE filter = new FilterE();
filter.setFilterId(id);
return filter;
}
public static final RowMapper<Filter> MAPPER = new RowMapper<Filter>() {
@Override
public Filter mapRow(ResultSet rs, int rowNum)
throws SQLException {
FilterE filter = new FilterE();
filter.setFilterId((UUID) rs.getObject(1));
return filter;
}
};
private static final String GET =
"SELECT " +
"pk_filter " +
"FROM " +
"plow.filter " +
"WHERE " +
"pk_project = ? " +
"AND " +
"int_order::integer = ?";
@Override
public Filter get(Project project, int order) {
return jdbc.queryForObject(GET, MAPPER, project.getProjectId(), order);
}
private static final String GET_BY_ID =
"SELECT " +
"pk_filter " +
"FROM " +
"plow.filter " +
"WHERE " +
"pk_filter = ?";
@Override
public Filter get(UUID id) {
return jdbc.queryForObject(GET_BY_ID, MAPPER, id);
}
@Override
public void setName(Filter filter, String name) {
jdbc.update("UPDATE plow.filter SET str_name=? WHERE pk_filter=?", name, filter.getFilterId());
}
@Override
public boolean delete(Filter filter) {
return jdbc.update(
"DELETE FROM plow.filter WHERE pk_filter=?", filter.getFilterId()) == 1;
}
@Override
public void reorder(Project project) {
jdbc.batchUpdate("UPDATE plow.filter SET int_order=? WHERE pk_filter=?",
jdbc.query("SELECT row_number() OVER (ORDER BY int_order ASC), pk_filter FROM plow.filter WHERE pk_project=?",
JdbcUtils.OBJECT_ARRAY_MAPPER, project.getProjectId()));
}
@Override
public void setOrder(Filter filter, int order) {
float _order = order + .5f;
jdbc.update("UPDATE plow.filter SET int_order=? WHERE pk_filter=?", _order, filter.getFilterId());
}
@Override
public void increaseOrder(Filter filter) {
jdbc.update("UPDATE plow.filter SET int_order=int_order+1.5 WHERE pk_filter=?", filter.getFilterId());
}
@Override
public void decreaseOrder(Filter filter) {
jdbc.update("UPDATE plow.filter SET int_order=int_order-1.5 WHERE pk_filter=?", filter.getFilterId());
}
}