package org.joedayz.corespringtest.dao.impl;
import java.util.List;
import org.hibernate.SessionFactory;
import org.joedayz.corespringtest.dao.ProductDao;
import org.joedayz.corespringtest.model.Category;
import org.joedayz.corespringtest.model.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.stereotype.Repository;
@Repository
public class ProductDaoImpl implements ProductDao {
private HibernateTemplate hibernateTemplate;
private JdbcTemplate jdbcTemplate;
@Autowired
public ProductDaoImpl(SessionFactory sessionFactory) {
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
this.jdbcTemplate = new JdbcTemplate(SessionFactoryUtils.getDataSource(sessionFactory));
}
public void deleteProduct(Integer idProduct) {
Product product = getProductById(idProduct);
hibernateTemplate.delete(product);
}
public Product getProductById(Integer idProduct) {
Product product = (Product) hibernateTemplate.get(Product.class, idProduct);
return product;
}
@SuppressWarnings("unchecked")
public List<Product> getProductsList(Product product) {
StringBuffer query = new StringBuffer(" from Product ");
if(product != null && product.getName() != null
&& product.getName().length() > 0){
query.append(" where upper(name) like '%").append(product.getName().
toUpperCase()).append("%' ");
}
List<Product> list = (List<Product>)
hibernateTemplate.find(query.toString());
return list;
}
public void saveProduct(Product product) {
hibernateTemplate.saveOrUpdate(product);
}
@SuppressWarnings("unchecked")
public List<Category> getCategoriesTypesList() {
List<Category> list = (List<Category>) hibernateTemplate.
find("from Category");
return list;
}
public boolean isRepeatDescription(String name, Integer idProduct){
StringBuffer query = new StringBuffer();
query.append("select count(*) from product ");
query.append(" where upper(trim(name)) = '").append(name.trim().
toUpperCase()).append("' ");
if(idProduct != null){
query.append(" and id_product != ").append(idProduct);
}
int count = jdbcTemplate.queryForInt(query.toString());
if(count > 0){
return true;
}
return false;
}
}