SABSTariffRepositoryImpl.java
/*
* To change this template, choose Tools | Templates and open the template in
* the editor.
*/
package com.tradecloud.repository.sabs;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.tradecloud.domain.base.utils.ObjectUtil;
import com.tradecloud.domain.sabs.AbstractSABSTariff;
import com.tradecloud.domain.sabs.SABSTariff;
import com.tradecloud.domain.sabs.SABSTariffSearch;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import com.tradecloud.repository.impl.ConsignmentRepositoryImpl;
/**
* Implement SABS Tariff search functionality.
*/
@Repository(value = "sabsTariffRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class SABSTariffRepositoryImpl extends RepositoryBaseImpl<SABSTariff, SABSTariffSearch> implements SABSTariffRepository {
private static final Logger log = Logger.getLogger(ConsignmentRepositoryImpl.class);
private static final long serialVersionUID = 1L;
private final static String DESCRIPTION = "description";
private final static String CATEGORY = "category";
private final static String CODE = "code";
private final static String EFFECTIVE_DATE = "effectiveDate";
private final static String CREATED = "created";
@Override
public SABSTariff findById(long id) {
List<SABSTariff> sabsTariffs = (List<SABSTariff>) findByNamedQueryAndNamedParam("findSabsTariffById", "id", id);
return ObjectUtil.first(sabsTariffs);
}
@Override
public List<SABSTariff> search(SABSTariffSearch search) {
log.debug("Search. " + search);
DetachedCriteria searchCriteria = DetachedCriteria.forClass(SABSTariff.class, "sabstariff");
if (search.getDescription() != null) {
searchCriteria.add(Restrictions.like(DESCRIPTION, LIKE + search.getDescription() + LIKE));
}
if (search.getCategory() != null) {
searchCriteria.add(Restrictions.like(CATEGORY, LIKE + search.getCategory() + LIKE));
}
if (search.getCode() != null) {
searchCriteria.add(Restrictions.like(CODE, LIKE + search.getCode() + LIKE));
}
if (search.getCurrency() != null) {
}
if (search.getEffectiveDateFrom() != null && search.getEffectiveDateTo() != null) {
searchCriteria.add(Restrictions.between(EFFECTIVE_DATE, search.getEffectiveDateFrom(), search.getEffectiveDateTo()));
}
searchCriteria.addOrder(Order.desc(CREATED));
// ensure distinct results, no duplicates when joining to Orders
// table that can have multiple results for each Consignment
searchCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
//SearchMetaParams metaParams = new SearchMetaParams(0, 10, CREATED, false);
//search.setSearchMetaParams(metaParams);
List<SABSTariff> tariffList = getExecutableCriteriaList(searchCriteria, search.getSearchMetaParams());
return tariffList;
}
@Override
public SABSTariff findByDescription(String sabsTariffDescription) {
Criteria searchCriteria = getSessionCustom().createCriteria(AbstractSABSTariff.class);
searchCriteria.add(Restrictions.like(DESCRIPTION, sabsTariffDescription));
return (SABSTariff) searchCriteria.uniqueResult();
}
@Override
public List<SABSTariff> findEffectiveTariffs() {
@SuppressWarnings("unchecked")
List<SABSTariff> results = getSessionCustom().createSQLQuery(
"select st.* from sabstariff st inner join "
+ "(select code, max(effectivedate) as maxeffectivedate from sabstariff group by code) groupedst "
+ "on st.code = groupedst.code and st.effectivedate = groupedst.maxeffectivedate order by st.code")
.addEntity(SABSTariff.class).list();
return results;
}
/**
* Method performs a full search (no duplicates) without page filtering/pagination, ie: row count or index start.
* TODO. Use search(null)
* @param search
* @return
*/
@Deprecated
@Override
public List<SABSTariff> fullSearch(SABSTariffSearch search) {
log.debug("Search. " + search);
DetachedCriteria searchCriteria = DetachedCriteria.forClass(getPersistentClass(), "consignment");
if (search.getDescription() != null) {
searchCriteria.add(Restrictions.like(DESCRIPTION, search.getDescription()));
}
if (search.getDescription() != null) {
searchCriteria.add(Restrictions.like(CATEGORY, search.getCategory()));
}
if (search.getDescription() != null) {
searchCriteria.add(Restrictions.like(CODE, search.getCode()));
}
if (search.getCurrency() != null) {
}
if (search.getEffectiveDateFrom() != null && search.getEffectiveDateTo() != null) {
searchCriteria.add(Restrictions.between(EFFECTIVE_DATE, search.getEffectiveDateFrom(), search.getEffectiveDateTo()));
}
searchCriteria.addOrder(Order.desc(CREATED));
// ensure distinct results, no duplicates when joining to Orders
// table that can have multiple results for each Consignment
// below line of code has been moved from currency search block to ensure unique results
searchCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return getExecutableCriteriaList(searchCriteria, null);
}
}