package com.breakersoft.plow.dao.pgsql;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import java.util.UUID;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.breakersoft.plow.Layer;
import com.breakersoft.plow.Output;
import com.breakersoft.plow.OutputE;
import com.breakersoft.plow.dao.AbstractDao;
import com.breakersoft.plow.dao.OutputDao;
import com.breakersoft.plow.util.JdbcUtils;
@Repository
public class OutputDaoImpl extends AbstractDao implements OutputDao {
private static final String GET_ATTRS =
"SELECT " +
"attrs " +
"FROM " +
"plow.output " +
"WHERE " +
"pk_output=?";
@Override
public Map<String, String> getAttrs(UUID outputId) {
return jdbc.queryForObject(GET_ATTRS,new RowMapper<Map<String,String>>() {
@Override
public Map<String,String> mapRow(ResultSet rs, int rowNum) throws SQLException {
return (Map<String,String>) rs.getObject(1);
}
}, outputId);
}
@Override
public Map<String, String> updateAttrs(UUID outputId,
Map<String, String> attrs) {
jdbc.update("UPDATE plow.output SET attrs = attrs || ? WHERE pk_output=?",
attrs, outputId);
return getAttrs(outputId);
}
@Override
public Map<String, String> setAttrs(UUID outputId,
Map<String, String> attrs) {
jdbc.update("UPDATE plow.output SET attrs = ? WHERE pk_output=?",
attrs, outputId);
return getAttrs(outputId);
}
private static final String INSERT_OUTPUT =
JdbcUtils.Insert("plow.output",
"pk_output", "pk_layer", "pk_job",
"str_path", "attrs");
@Override
public Output addOutput(final Layer layer, final String path, final Map<String,String> attrs) {
final UUID id = UUID.randomUUID();
jdbc.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(final Connection conn) throws SQLException {
final PreparedStatement ret = conn.prepareStatement(INSERT_OUTPUT);
ret.setObject(1, id);
ret.setObject(2, layer.getLayerId());
ret.setObject(3, layer.getJobId());
ret.setString(4, path);
ret.setObject(5, attrs);
return ret;
}
});
OutputE output = new OutputE();
output.setId(id);
output.setPath(path);
output.setAttrs(attrs);
return output;
}
}