RouteRepositoryImpl.java
/*
* To change this template, choose Tools | Templates and open the template in
* the editor.
*/
package com.tradecloud.repository.impl;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Query;
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.place.Route;
import com.tradecloud.dto.place.RouteSearch;
import com.tradecloud.repository.RouteRepository;
import com.tradecloud.repository.base.impl.CriteriaValue;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
/**
* Implement SABS Tariff search functionality.
*/
@Repository(value = "routeRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class RouteRepositoryImpl extends RepositoryBaseImpl<Route, RouteSearch>
implements RouteRepository {
private static Logger log = Logger.getLogger(ConsignmentRepositoryImpl.class);
private static final long serialVersionUID = 1L;
private static final String LIKE = "%";
private final static String CREATED = "created";
private final static String SHIPPING_MODE = "shippingMode";
private final static String PLACE_OF_DISCHARGE = "placeOfDischarge";
private final static String PLACE_OF_LOADING = "placeOfLoading";
private final static String DESTINATION_COUNTRY = "placeOfDischarge.country";
private final static String ORIGIN_COUNTRY = "placeOfLoading.country";
private final static String ORIGIN_REGION = "placeOfLoading.region";
private final static String CARRIER = "carrier";
@Override
public Route findById(long id) {
List<Route> sabsTariffs = (List<Route>) findByNamedQueryAndNamedParam("findRouteById", "id", id);
return ObjectUtil.first(sabsTariffs);
}
/*
@Override
public List<Route> search(RouteSearch search) {
log.debug("Search. " + search);
DetachedCriteria searchCriteria = DetachedCriteria.forClass(getPersistentClass(), "route");
if (search.getShippingMode() != null) {
searchCriteria.add(Restrictions.eq(SHIPPING_MODE, search.getShippingMode() ));
}
if (search.getPlaceOfDischarge() != null) {
searchCriteria.add(Restrictions.eq(PLACE_OF_DISCHARGE, search.getPlaceOfDischarge()));
}
if (search.getPlaceOfLoading() != null) {
searchCriteria.add(Restrictions.eq(PLACE_OF_LOADING, search.getPlaceOfLoading()));
}
if (search.getCarrier() != null) {
searchCriteria.add(Restrictions.eq(CARRIER, search.getCarrier()));
}
if (search.getOriginCountry() != null) {
searchCriteria.add(Restrictions.eq(ORIGIN_COUNTRY, search.getOriginCountry()));
}
if (search.getDestinationCountry() != null) {
searchCriteria.add(Restrictions.eq(DESTINATION_COUNTRY, search.getDestinationCountry()));
}
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<Route> tariffList = getExecutableCriteriaList(searchCriteria, search.getSearchMetaParams());
return tariffList;
} */
/**
* Method performs a full search (no duplicates) without page filtering/pagination, ie: row count or index start.
*
* @param search
* @return
*/
public List<Route> fullSearch(RouteSearch search) {
log.debug("Full Search. " + search);
DetachedCriteria searchCriteria = DetachedCriteria.forClass(getPersistentClass(), "route");
if (search.getShippingMode() != null) {
searchCriteria.add(Restrictions.eq(SHIPPING_MODE, search.getShippingMode()));
}
if (search.getPlaceOfDischarge() != null) {
searchCriteria.add(Restrictions.eq(PLACE_OF_DISCHARGE, search.getPlaceOfDischarge()));
}
if (search.getPlaceOfLoading() != null) {
searchCriteria.add(Restrictions.eq(PLACE_OF_LOADING, search.getPlaceOfLoading()));
}
if (search.getCarrier() != null) {
searchCriteria.add(Restrictions.eq(CARRIER, search.getCarrier()));
}
if (search.getOriginCountry() != null) {
searchCriteria.add(Restrictions.eq(ORIGIN_COUNTRY, search.getOriginCountry()));
}
if (search.getDestinationCountry() != null) {
searchCriteria.add(Restrictions.eq(DESTINATION_COUNTRY, search.getDestinationCountry()));
}
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);
}
// ++++++++++++++++++++++++
protected Collection<CriteriaValue> routeSearchCriteriaValues(RouteSearch search) {
Collection<CriteriaValue> fields = new LinkedHashSet<CriteriaValue>();
Date now = Calendar.getInstance().getTime();
fields.add(CriteriaValue.eq(SHIPPING_MODE, search.getShippingMode()));
fields.add(CriteriaValue.eq(PLACE_OF_DISCHARGE, search.getPlaceOfDischarge()));
fields.add(CriteriaValue.eq(PLACE_OF_LOADING, search.getPlaceOfLoading()));
fields.add(CriteriaValue.eq(CARRIER, search.getCarrier()));
fields.add(CriteriaValue.eq(ORIGIN_COUNTRY, search.getOriginCountry()));
fields.add(CriteriaValue.gt(DESTINATION_COUNTRY, search.getDestinationCountry()));
fields.add(CriteriaValue.gt(ORIGIN_REGION, search.getOriginRegion()));
return fields;
}
@Override
public List<Route> search(RouteSearch search) {
Query query = createQuery(search, false, routeSearchCriteriaValues(search));
return getQueryList(query, search.getSearchMetaParams());
}
//@Override
public long countRoutes(RouteSearch search) {
Query query = createQuery(search, true, routeSearchCriteriaValues(search));
return getQueryCount(query);
}
}