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.ServiceT;
import com.breakersoft.plow.thrift.dao.ThriftServiceDao;
import com.breakersoft.plow.util.JdbcUtils;
@Repository
@Transactional(readOnly=true)
public class ThriftServiceDaoImpl extends AbstractDao implements ThriftServiceDao {
public static final RowMapper<ServiceT> MAPPER = new RowMapper<ServiceT>() {
@Override
public ServiceT mapRow(ResultSet rs, int rowNum) throws SQLException {
final ServiceT service = new ServiceT();
service.setId(rs.getString("pk_service"));
service.setName(rs.getString("str_name"));
if (rs.getBoolean("isset_int_cores_min")) {
service.setMinCores(rs.getInt("int_cores_min"));
}
if (rs.getBoolean("isset_int_cores_max")) {
service.setMaxCores(rs.getInt("int_cores_max"));
}
if (rs.getBoolean("isset_int_ram_min")) {
service.setMinCores(rs.getInt("int_ram_min"));
}
if (rs.getBoolean("isset_int_ram_max")) {
service.setMinRam(rs.getInt("int_ram_max"));
}
if (rs.getBoolean("isset_int_ram_min")) {
service.setMaxRam(rs.getInt("int_ram_min"));
}
if (rs.getBoolean("isset_bool_threadable")) {
service.setThreadable(rs.getBoolean("bool_threadable"));
}
if (rs.getBoolean("isset_str_tags")) {
service.setTags(JdbcUtils.toList(rs.getArray("str_tags")));
}
if (rs.getBoolean("isset_int_retries_max")) {
service.setMaxRetries(rs.getInt("int_retries_max"));
}
return service;
}
};
private static final String GET =
"SELECT " +
"pk_service,"+
"str_name,"+
"int_cores_max,"+
"int_cores_min,"+
"int_ram_min,"+
"int_ram_max,"+
"int_retries_max, "+
"str_tags, " +
"bool_threadable," +
"isset_int_cores_min,"+
"isset_int_cores_max,"+
"isset_int_ram_min,"+
"isset_int_ram_max,"+
"isset_str_tags,"+
"isset_bool_threadable,"+
"isset_int_retries_max " +
"FROM " +
"plow.service ";
@Override
public ServiceT getService(String name) {
return jdbc.queryForObject(GET + " WHERE str_name=?", MAPPER, name);
}
@Override
public ServiceT getService(UUID id) {
return jdbc.queryForObject(GET + " WHERE pk_service=?", MAPPER, id);
}
@Override
public List<ServiceT> getServices() {
return jdbc.query(GET, MAPPER);
}
}