package com.opentravelsoft.providers.hibernate;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.LockMode;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;
import com.opentravelsoft.entity.Sight;
import com.opentravelsoft.entity.SightPhoto;
import com.opentravelsoft.entity.product.SightTrait;
import com.opentravelsoft.providers.SightDao;
import com.opentravelsoft.util.PaginationSupport;
import com.opentravelsoft.util.StringUtil;
@Repository("SightDao")
public class SightDaoImpl extends GenericDaoHibernate<Sight, String> implements
SightDao {
public SightDaoImpl() {
super(Sight.class);
}
@SuppressWarnings("unchecked")
public List<SightTrait> getSightPicMangeList(String sightNo) {
StringBuilder sql = new StringBuilder();
sql.append("from Sight ");
sql.append("where sightNo = ? ");
sql.append("order by recNo ");
Object[] params = { sightNo };
List<SightPhoto> list = getHibernateTemplate().find(sql.toString(), params);
List<SightTrait> lineSightTrait = new ArrayList<SightTrait>();
SightTrait sighttrait = null;
for (SightPhoto ooj : list) {
sighttrait = new SightTrait();
sighttrait.setRecNo(ooj.getRecNo());
sighttrait.setSightNo(sightNo);
sighttrait.setMapAddress(ooj.getMapAddress());
sighttrait.setNote(ooj.getNote());
lineSightTrait.add(sighttrait);
}
return lineSightTrait;
}
@SuppressWarnings("unchecked")
public List<Sight> getSightList(String province, String country,
String sightName, String districtNo) {
DetachedCriteria criteria = DetachedCriteria.forClass(Sight.class, "d");
criteria.createAlias("d.country", "c");
criteria.createAlias("d.district", "t");
criteria.createAlias("d.province", "p", CriteriaSpecification.LEFT_JOIN);
if (StringUtil.hasLength(sightName))
criteria.add(Restrictions.like("d.name", sightName, MatchMode.ANYWHERE));
if (StringUtil.hasLength(country))
criteria.add(Restrictions.eq("c.countryId", country));
if (StringUtil.hasLength(province))
criteria.add(Restrictions.eq("p.code", province));
if (StringUtil.hasLength(districtNo))
criteria.add(Restrictions.eq("t.districtNo", districtNo));
criteria.addOrder(Order.asc("d.name"));
criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
return getHibernateTemplate().findByCriteria(criteria);
}
public int editSight(Sight sight, String method) {
HibernateTemplate template = getHibernateTemplate();
Sight tfa023 = (Sight) template.get(Sight.class, sight.getSightNo(),
LockMode.PESSIMISTIC_WRITE);
if (null == tfa023 && method.equals("update")) {
return -1;
}
if (method.equals("insert")) {
tfa023 = new Sight();
}
tfa023.setSightNo(sight.getSightNo());
tfa023.setName(sight.getName());
tfa023.setEnName(sight.getEnName());
tfa023.setCnNote(sight.getCnNote());
tfa023.setEnNote(sight.getEnNote());
tfa023.setHeadAdd(sight.getHeadAdd());
tfa023.setMapAdd(sight.getMapAdd());
tfa023.setCountry(sight.getCountry());
tfa023.setProvince(sight.getProvince());
tfa023.setDistrict(sight.getDistrict());
tfa023.setDistrict(sight.getDistrict());
tfa023.setSightType(sight.getSightType());
template.saveOrUpdate(tfa023);
return 0;
}
public PaginationSupport getSightList(String country, String province,
String sightName, int fromRecord, int pageSize) {
DetachedCriteria criteria = DetachedCriteria.forClass(Sight.class, "b");
criteria.createAlias("b.province", "c");
criteria.createAlias("b.country", "n");
if (StringUtil.hasLength(country))
criteria.add(Restrictions.eq("n.countryId", country));
if (StringUtil.hasLength(province))
criteria.add(Restrictions.eq("c.code", province));
if (StringUtil.hasLength(sightName))
criteria.add(Restrictions.like("b.name", sightName, MatchMode.ANYWHERE));
PaginationSupport support = findPageByCriteria(criteria, pageSize,
fromRecord);
return support;
}
}