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.UUID;
import org.slf4j.Logger;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.breakersoft.plow.Cluster;
import com.breakersoft.plow.ClusterE;
import com.breakersoft.plow.dao.AbstractDao;
import com.breakersoft.plow.dao.ClusterDao;
import com.breakersoft.plow.util.JdbcUtils;
@Repository
public class ClusterDaoImpl extends AbstractDao implements ClusterDao {
@SuppressWarnings("unused")
private static final Logger logger =
org.slf4j.LoggerFactory.getLogger(ClusterDaoImpl.class);
public static final RowMapper<Cluster> MAPPER = new RowMapper<Cluster>() {
@Override
public Cluster mapRow(ResultSet rs, int rowNum)
throws SQLException {
ClusterE cluster = new ClusterE();
cluster.setClusterId((UUID) rs.getObject(1));
cluster.setName(rs.getString(2));
return cluster;
}
};
private static final String GET =
"SELECT " +
"pk_cluster, " +
"str_name " +
"FROM " +
"plow.cluster " +
"WHERE " +
"pk_cluster = ?";
@Override
public Cluster get(UUID id) {
return jdbc.queryForObject(GET, MAPPER, id);
}
private static final String GET_BY_NAME =
"SELECT " +
"pk_cluster, " +
"str_name " +
"FROM " +
"plow.cluster " +
"WHERE " +
"str_name = ?";
@Override
public Cluster get(String name) {
return jdbc.queryForObject(GET_BY_NAME, MAPPER, name);
}
private static final String INSERT =
JdbcUtils.Insert("plow.cluster",
"pk_cluster",
"str_name",
"str_tags");
@Override
public Cluster create(final String name, final String[] tags) {
final UUID id = UUID.randomUUID();
jdbc.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(final Connection conn) throws SQLException {
final PreparedStatement ret = conn.prepareStatement(INSERT);
ret.setObject(1, id);
ret.setString(2, name);
ret.setArray(3, conn.createArrayOf("text", tags));
return ret;
}
});
ClusterE cluster = new ClusterE();
cluster.setClusterId(id);
return cluster;
}
private static final String GET_BY_DEFAULT =
"SELECT " +
"pk_cluster, " +
"str_name " +
"FROM " +
"plow.cluster " +
"WHERE " +
"bool_default = 't' " +
"LIMIT 1";
@Override
public Cluster getDefault() {
return jdbc.queryForObject(GET_BY_DEFAULT, MAPPER);
}
@Override
public void setDefault(Cluster cluster) {
jdbc.update("UPDATE cluster SET bool_default='f' WHERE bool_default='t'");
jdbc.update("UPDATE cluster SET bool_default='t' WHERE pk_cluster=?", cluster.getClusterId());
}
@Override
public boolean delete(Cluster c) {
return jdbc.update("DELETE FROM plow.cluster WHERE pk_cluster=?", c.getClusterId()) == 1;
}
@Override
public boolean setLocked(Cluster c, boolean value) {
return jdbc.update("UPDATE plow.cluster SET bool_locked=? WHERE pk_cluster=? AND bool_locked=?",
value, c.getClusterId(), !value) == 1;
}
@Override
public void setName(Cluster c, String name) {
jdbc.update("UPDATE plow.cluster SET str_name=? WHERE pk_cluster=?", name, c.getClusterId());
}
private static final String UPDATE_TAGS =
"UPDATE " +
"plow.cluster "+
"SET " +
"str_tags=? " +
"WHERE " +
"pk_cluster=?";
@Override
public void setTags(final Cluster c, final String[] tags) {
jdbc.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(final Connection conn) throws SQLException {
final PreparedStatement ret = conn.prepareStatement(UPDATE_TAGS);
ret.setArray(1, conn.createArrayOf("text", tags));
ret.setObject(2, c.getClusterId());
return ret;
}
});
}
}