/* * Licensed to csti consulting * You may obtain a copy of the License at * * http://www.csticonsulting.com * Copyright (c) 2006-Aug 24, 2010 Consultation CS-TI inc. * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package com.salesmanager.core.service.customer.impl.dao; import java.util.Collection; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Criteria; import org.hibernate.Hibernate; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; import com.salesmanager.core.entity.customer.Customer; import com.salesmanager.core.entity.customer.CustomerBasket; import com.salesmanager.core.entity.customer.CustomerBasketAttribute; import com.salesmanager.core.entity.customer.SearchCustomerCriteria; import com.salesmanager.core.entity.customer.SearchCustomerResponse; @Repository public class CustomerDao extends HibernateDaoSupport implements ICustomerDao { private static final Log log = LogFactory.getLog(CustomerDao.class); @Autowired public CustomerDao(SessionFactory sessionFactory) { super.setSessionFactory(sessionFactory); } /* * (non-Javadoc) * * @see * com.salesmanager.core.service.customer.impl.ICustomerDao#saveShoppingCart * (com.salesmanager.core.entity.customer.CustomerBasket) */ public void saveShoppingCart(CustomerBasket transientInstance) { try { super.getHibernateTemplate().persist(transientInstance); } catch (RuntimeException re) { log.error("persist failed", re); throw re; } } /* * (non-Javadoc) * * @seecom.salesmanager.core.service.customer.impl.ICustomerDao# * saveShoppingCartAttributes * (com.salesmanager.core.entity.customer.CustomerBasketAttribute) */ public void saveShoppingCartAttributes( CustomerBasketAttribute transientInstance) { try { super.getHibernateTemplate().persist(transientInstance); } catch (RuntimeException re) { log.error("persist failed", re); throw re; } } public void persist(Customer transientInstance) { try { super.getHibernateTemplate().persist(transientInstance); } catch (RuntimeException re) { log.error("persist failed", re); throw re; } } public void saveOrUptade(Customer instance) { try { super.getHibernateTemplate().saveOrUpdate(instance); } catch (RuntimeException re) { log.error("attach failed", re); throw re; } } public Customer merge(Customer detachedInstance) { try { Customer result = (Customer) super.getHibernateTemplate().merge( detachedInstance); return result; } catch (RuntimeException re) { log.error("merge failed", re); throw re; } } public void delete(Customer persistentInstance) { try { super.getHibernateTemplate().delete(persistentInstance); } catch (RuntimeException re) { log.error("delete failed", re); throw re; } } public void deleteAll(Collection<Customer> customers) { try { super.getHibernateTemplate().deleteAll(customers); } catch (RuntimeException re) { log.error("deleteAll failed", re); throw re; } } public Customer findById(long id) { try { Customer instance = (Customer) super.getHibernateTemplate().get( "com.salesmanager.core.entity.customer.Customer", id); return instance; } catch (RuntimeException re) { log.error("get failed", re); throw re; } } public Collection<Customer> findByMerchantId(int merchantId) { try { List list = super.getSession().createCriteria(Customer.class).add( Restrictions.eq("merchantId", merchantId)).list(); return list; } catch (RuntimeException re) { log.error("get failed", re); throw re; } } public Customer findByUserNameAndPassword(String userName, String password) { try { Customer customer = (Customer) super .getSession() .createQuery( "select c from Customer c where c.customerNick=:cId and c.customerPassword=:pId") .setString("cId", userName).setString("pId", password) .uniqueResult(); return customer; } catch (Exception e) { log.error("get failed", e); throw new RuntimeException(e); } } public Customer findByUserNameAndPasswordByMerchantId(String userName, String password, int merchantId) { try { Customer customer = (Customer) super.getSession().createCriteria( Customer.class).add( Restrictions.eq("customerNick", userName)).add( Restrictions.eq("customerPassword", password)).add( Restrictions.eq("merchantId", merchantId)).uniqueResult(); return customer; } catch (RuntimeException re) { log.error("get failed", re); throw re; } } public Collection<Customer> findByCompanyName(String companyName, int merchantId) { try { List l = super.getSession().createCriteria(Customer.class).add( Restrictions.eq("customerCompany", companyName)).add( Restrictions.eq("merchantId", merchantId)).list(); return l; } catch (RuntimeException re) { log.error("get failed", re); throw re; } } public Collection<Customer> findCustomersHavingCompany(int merchantId) { try { List l = super.getSession().createCriteria(Customer.class).add( Restrictions.isNotNull("customerCompany")).add( (Restrictions.eq("merchantId", merchantId))).list(); return l; } catch (RuntimeException re) { log.error("get failed", re); throw re; } } public List<String> findUniqueCompanyName(int merchantId) { try { Query q = super .getSession() .createSQLQuery( "select distinct c.customers_company from customers c where c.merchantId=:p and c.customers_company IS NOT NULL order by c.customers_company asc") .addScalar("customers_company", Hibernate.STRING) .setParameter("p", merchantId); List entries = q.list(); return entries; } catch (RuntimeException re) { log.error("get failed", re); throw re; } } @SuppressWarnings("unchecked") public Customer findCustomerbyEmail(final String email) { Customer c = (Customer) super.getSession().createCriteria( Customer.class).add( Restrictions.eq("customerEmailAddress", email)).uniqueResult(); return c; } public SearchCustomerResponse findCustomers( SearchCustomerCriteria searchCriteria) { Criteria criteria = super.getSession().createCriteria(Customer.class) .add( Restrictions.eq("merchantId", searchCriteria .getMerchantId())).addOrder( org.hibernate.criterion.Order.desc("customerLastname")) .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); Criteria query = super.getSession().createCriteria(Customer.class).add( Restrictions.eq("merchantId", searchCriteria.getMerchantId())) .addOrder( org.hibernate.criterion.Order.desc("customerLastname")) .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); if (searchCriteria != null) { if (!StringUtils.isBlank(searchCriteria.getCustomerName())) { criteria.add(Restrictions.like("customerLastname", "%" + searchCriteria.getCustomerName() + "%")); query.add(Restrictions.like("customerLastname", "%" + searchCriteria.getCustomerName() + "%")); } if (!StringUtils.isBlank(searchCriteria.getEmail())) { criteria.add(Restrictions.like("customerEmailAddress", "%" + searchCriteria.getEmail() + "%")); query.add(Restrictions.like("customerEmailAddress", "%" + searchCriteria.getEmail() + "%")); } if (!StringUtils.isBlank(searchCriteria.getCompanyName())) { criteria.add(Restrictions.like("customerCompany", "%" + searchCriteria.getCompanyName() + "%")); query.add(Restrictions.like("customerCompany", "%" + searchCriteria.getCompanyName() + "%")); } } criteria.setProjection(Projections.rowCount()); Integer count = (Integer) criteria.uniqueResult(); criteria.setProjection(null); int max = searchCriteria.getQuantity(); List list = null; if (count > 0) { query.setMaxResults(searchCriteria.getUpperLimit(count)); query.setFirstResult(searchCriteria.getLowerLimit()); } list = query.list(); SearchCustomerResponse response = new SearchCustomerResponse(); response.setCount(count); response.setCustomers(list); return response; } public Customer findCustomerbyUserName(final String userName, final int merchantId) { Customer c = (Customer) super.getSession().createCriteria( Customer.class).add(Restrictions.eq("customerNick", userName)) .add(Restrictions.eq("merchantId", merchantId)).uniqueResult(); return c; } }