package com.ejie.x38.rup.jqgrid.filter.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.support.lob.DefaultLobHandler;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.ejie.x38.rup.jqgrid.filter.model.Filter;
@Repository
@Transactional
public class FilterDaoImpl implements FilterDao{
private Logger logger = LoggerFactory.getLogger(FilterDaoImpl.class);
private NamedParameterJdbcTemplate jdbcTemplate;
private String db_filterTableName;
private String col_filterId;
private String col_filterSelector;
private String col_filterValue;
private String col_filterName;
private String col_filterUser;
private String col_filterDefault;
private String filterSeq;
private DefaultLobHandler defaultLobHandler;
private RowMapper<Filter> filterRowMapper = new RowMapper<Filter>() {
public Filter mapRow(ResultSet resultSet, int rowNum) throws SQLException
{
Filter filtro = new Filter();
filtro.setFilterId(resultSet.getInt(col_filterId));
filtro.setFilterSelector(resultSet.getString(col_filterSelector));
filtro.setFilterName(defaultLobHandler.getClobAsString(resultSet,col_filterName));
filtro.setFilterUser(resultSet.getString(col_filterUser));
filtro.setFilterDefault(resultSet.getBoolean(col_filterDefault));
filtro.setFilterValue(defaultLobHandler.getClobAsString(resultSet,
col_filterValue));
return filtro;
}
};
@Override
public Filter insert(Filter filtro) {
StringBuilder query = new StringBuilder();
query.append("SELECT ").append(filterSeq).append(".NEXTVAL FROM DUAL");
SqlParameterSource beanParameterSource = new BeanPropertySqlParameterSource(filtro);
filtro.setFilterId(jdbcTemplate.queryForInt(query.toString(), beanParameterSource));
beanParameterSource= new BeanPropertySqlParameterSource(filtro);
query = new StringBuilder();
query.append("INSERT INTO ").append(db_filterTableName).append(" ");
query.append("(").append(col_filterId).append(",").append(col_filterSelector).append(",").append(col_filterName).append(",")
.append(col_filterDefault).append(",").append(col_filterValue).append(',').append(col_filterUser).append(")");
query.append(" VALUES (:filterId, :filterSelector, :filterName, :filterDefault, :filterValue, :filterUser)");
logger.debug("FilterDaoImpl.insert()");
logger.debug("\tSQL: " +query.toString());
logger.debug("\tparams: " +filtro.toString());
jdbcTemplate.update(query.toString(), beanParameterSource);
return filtro;
}
@Override
public Filter update(Filter filtro) {
StringBuilder query = new StringBuilder();
query.append("UPDATE ").append(db_filterTableName).append(" ");
query.append(" SET ").append(col_filterDefault).append("=:filterDefault,").append(col_filterValue).append("=:filterValue");
query.append(" WHERE ").append(getWhereFieldsNameAndSelector());
SqlParameterSource beanParameterSource = new BeanPropertySqlParameterSource(filtro);
logger.debug("FilterDaoImpl.update()");
logger.debug("\tSQL: " +query.toString());
logger.debug("\tparams: " +filtro.toString());
jdbcTemplate.update(query.toString(), beanParameterSource);
return filtro;
}
@Override
public Filter delete(Filter filtro) {
StringBuilder query = new StringBuilder();
query.append("DELETE FROM ").append(db_filterTableName).append(" ");
query.append(" WHERE ").append(getWhereFieldsNameAndSelector());
SqlParameterSource beanParameterSource = new BeanPropertySqlParameterSource(filtro);
logger.debug("FilterDaoImpl.delete()");
logger.debug("\tSQL: " +query.toString());
logger.debug("\tparams: " +filtro.toString());
jdbcTemplate.update(query.toString(), beanParameterSource);
return filtro;
}
@Override
public Filter getBySelectorAndName(String selector, String name, String user) {
StringBuilder query = new StringBuilder();
query.append("SELECT ").append(getSelectFildsName());
query.append(" FROM ").append(db_filterTableName);
query.append(" WHERE ").append(getWhereFieldsNameAndSelector());
MapSqlParameterSource mapParameterSource = new MapSqlParameterSource();
mapParameterSource.addValue("filterName", name);
mapParameterSource.addValue("filterSelector", selector);
mapParameterSource.addValue("filterUser", user);
logger.debug("FilterDaoImpl.getBySelectorAndName()");
logger.debug("\tSQL: " +query.toString());
logger.debug("\tparams: {filterName: " +name + ", filterSelector: "+selector+"}");
//return jdbcTemplate.queryForObject(query.toString(), mapParameterSource, filterRowMapper);
List<Filter> respuesta= jdbcTemplate.query(query.toString(), mapParameterSource, filterRowMapper);
return (Filter)DataAccessUtils.uniqueResult(respuesta);
}
@Override
public Filter getById(String filterId) {
StringBuilder query = new StringBuilder();
query.append("SELECT ").append(getSelectFildsName());
query.append(" FROM ").append(db_filterTableName);
query.append(" WHERE ").append(col_filterId).append(":=filterId");
MapSqlParameterSource mapParameterSource = new MapSqlParameterSource();
mapParameterSource.addValue("filterId", filterId);
logger.debug("FilterDaoImpl.getById()");
logger.debug("\tSQL: " +query.toString());
logger.debug("\tparams: {filterId: " +filterId +"}");
//return jdbcTemplate.queryForObject(query.toString(), mapParameterSource, filterRowMapper);
List<Filter> respuesta= jdbcTemplate.query(query.toString(), mapParameterSource, filterRowMapper);
return (Filter)DataAccessUtils.uniqueResult(respuesta);
}
// @Override
// public boolean isDefaultAsigned(String selector)
// {
//
// StringBuilder query = new StringBuilder();
//
// query.append("SELECT count(1) ");
// query.append(" FROM ").append(db_filterTableName);
// query.append(" WHERE ").append(col_filterSelector).append("=:filterSelector AND ").append(col_filterDefault).append("=1");
//
// MapSqlParameterSource mapParameterSource = new MapSqlParameterSource();
// mapParameterSource.addValue("filterSelector", selector);
//
// logger.debug("FilterDaoImpl.isDefaultAsigned()");
// logger.debug("\tSQL: " +query.toString());
// logger.debug("\tparams: { filterSelector: "+selector+"}");
//
// return jdbcTemplate.queryForObject(query.toString(), mapParameterSource,Integer.class)>0;
// }
/* public boolean isNameRepeated(String selector, String name)
{
StringBuilder query = new StringBuilder();
query.append("SELECT count(1) ");
query.append(" FROM ").append(db_filterTableName);
query.append(" WHERE ").append(getWhereFieldsNameAndSelector());
MapSqlParameterSource mapParameterSource = new MapSqlParameterSource();
mapParameterSource.addValue("filterSelector", selector);
mapParameterSource.addValue("filterName", name);
logger.debug("FilterDaoImpl.isNameRepeated()");
logger.debug("\tSQL: " +query.toString());
logger.debug("\tparams: { filterSelector: "+selector+"}");
return jdbcTemplate.queryForObject(query.toString(), mapParameterSource,Integer.class)>0;
}*/
@Override
public void setDefaultAsigned(String selector, String name,
boolean pDefault, String user) {
StringBuilder query = new StringBuilder();
int pred=0;
query.append("UPDATE ").append(db_filterTableName).append(" ");
query.append("SET ").append(col_filterDefault).append("=:filterDefault");
query.append(" WHERE ").append(getWhereFieldsNameAndSelector());
if (pDefault){
pred=1;
}
MapSqlParameterSource mapParameterSource = new MapSqlParameterSource();
mapParameterSource.addValue("filterDefault",pred);
mapParameterSource.addValue("filterSelector", selector);
mapParameterSource.addValue("filterName", name);
mapParameterSource.addValue("filterUser", user);
logger.debug("FilterDaoImpl.setDefaultAsigned()");
logger.debug("\tSQL: " +query.toString());
logger.debug("\tparams: {filterDefault: "+pred+" filterName: " +name+ ", filterSelector: "+selector+"}");
jdbcTemplate.update(query.toString(), mapParameterSource);
}
@Override
public Filter getDefaultAsigned(String selector, String user)
{
StringBuilder query = new StringBuilder();
query.append("SELECT ").append(getSelectFildsName());
query.append(" FROM ").append(db_filterTableName);
query.append(" WHERE ").append(col_filterSelector).append("= :filterSelector AND ").append(col_filterUser).append("=:filterUser AND ").append(col_filterDefault).append("=1");
MapSqlParameterSource mapParameterSource = new MapSqlParameterSource();
mapParameterSource.addValue("filterSelector", selector);
mapParameterSource.addValue("filterUser", user);
logger.debug("FilterDaoImpl.getDefaultAsigned()");
logger.debug("\tSQL: " +query.toString());
logger.debug("\tparams: { filterSelector: "+selector+"}");
logger.debug("\tparams: { filterUser: "+user+"}");
//return jdbcTemplate.queryForObject(query.toString(), mapParameterSource, filterRowMapper);
List<Filter> respuesta= jdbcTemplate.query(query.toString(), mapParameterSource, filterRowMapper);
return (Filter)DataAccessUtils.uniqueResult(respuesta);
}
@Override
public List<Filter> getAll(String selector, String user) {
StringBuilder query = new StringBuilder();
query.append("SELECT ").append(getSelectFildsName());
query.append(" FROM ").append(db_filterTableName);
query.append(" WHERE ").append(col_filterSelector).append("= :filterSelector");
query.append(" AND ").append(col_filterUser).append("=:filterUser");
query.append(" ORDER BY ").append(col_filterName);
MapSqlParameterSource mapParameterSource = new MapSqlParameterSource();
mapParameterSource.addValue("filterSelector", selector);
mapParameterSource.addValue("filterUser", user);
logger.debug("FilterDaoImpl.getAll()");
logger.debug("\tSQL: " +query.toString());
logger.debug("\tparams: { filterSelector: "+selector+"}");
logger.debug("\tparams: { filterUser: "+user+"}");
return jdbcTemplate.query(query.toString(), mapParameterSource, filterRowMapper);
}
public void setFilterDataSource(DataSource dataSource) {
this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
this.defaultLobHandler = new DefaultLobHandler();
}
private String getSelectFildsName(){
StringBuilder select =new StringBuilder();
select.append(col_filterName).append(",").append(col_filterId).append(",").append(col_filterSelector).append(",").append(col_filterUser).append(",").append(col_filterValue).append(",").append(col_filterDefault);
return select.toString();
}
private String getWhereFieldsNameAndSelector(){
StringBuilder text =new StringBuilder();
text.append(col_filterSelector).append("=:filterSelector AND ").append(col_filterName).append("=:filterName AND ").append(col_filterUser).append("=:filterUser");
return text.toString();
}
public String getDb_filterTableName() {
return db_filterTableName;
}
public void setDb_filterTableName(String db_filterTableName) {
this.db_filterTableName = db_filterTableName;
}
public String getCol_filterId() {
return col_filterId;
}
public void setCol_filterId(String col_filterId) {
this.col_filterId = col_filterId;
}
public String getCol_filterSelector() {
return col_filterSelector;
}
public void setCol_filterSelector(String col_filterSelector) {
this.col_filterSelector = col_filterSelector;
}
public String getCol_filterValue() {
return col_filterValue;
}
public void setCol_filterValue(String col_filterValue) {
this.col_filterValue = col_filterValue;
}
public String getCol_filterName() {
return col_filterName;
}
public void setCol_filterName(String col_filterName) {
this.col_filterName = col_filterName;
}
public String getCol_filterDefault() {
return col_filterDefault;
}
public void setCol_filterDefault(String col_filterDefault) {
this.col_filterDefault = col_filterDefault;
}
public String getFilterSeq() {
return filterSeq;
}
public void setFilterSeq(String filterSeq) {
this.filterSeq = filterSeq;
}
public String getCol_filterUser() {
return col_filterUser;
}
public void setCol_filterUser(String col_filterUser) {
this.col_filterUser = col_filterUser;
}
}