LeadTimeRepositoryImpl.java
package com.tradecloud.repository.impl;
import com.tradecloud.domain.common.LeadTime;
import com.tradecloud.domain.infrastructure.persistence.CriteriaBuilder;
import com.tradecloud.dto.rate.LeadTimeSearch;
import com.tradecloud.repository.LeadTimeRepository;
import com.tradecloud.repository.base.impl.CriteriaValue;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.apache.log4j.Logger;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.List;
@Repository(value = "leadTimeRepository")
public class LeadTimeRepositoryImpl extends RepositoryBaseImpl<LeadTime, LeadTimeSearch> implements LeadTimeRepository {
private static final long serialVersionUID = 1L;
private static Logger log = Logger.getLogger(LeadTimeRepositoryImpl.class);
@Override
public List<LeadTime> search(LeadTimeSearch search) {
// return searchByCriteria(search);
DetachedCriteria criteria = getDetachedCriteria(search, false);
return getExecutableCriteriaList(criteria, search.getSearchMetaParams());
}
// @Override
// public LeadTime findBy(PlaceOfLoading placeOfLoading, PlaceOfDischarge placeOfDischarge, ShippingMode shippingMode, City city) {
// DetachedCriteria criteria = DetachedCriteria.forClass(LeadTime.class);
// CriteriaBuilder.addEqRestriction(criteria, "placeOfLoading", placeOfLoading);
// CriteriaBuilder.addEqRestriction(criteria, "placeOfDischarge", placeOfDischarge);
// CriteriaBuilder.addEqRestriction(criteria, "shippingMode", shippingMode);
// if(city!=null){
// CriteriaBuilder.addEqOrNullRestriction(criteria, "city", city);
//
// }
// List<LeadTime> leadTimes = criteria.getExecutableCriteria(getSessionCustom()).list();
// if (!leadTimes.isEmpty()) {
// return leadTimes.get(0);
// } else {
// return null;
// }
// }
@Override
protected Collection<CriteriaValue> mapFieldsToValues(LeadTimeSearch search) {
// log.debug("mapFieldsToValues " + search.toString());
// Collection<CriteriaValue> fields = new LinkedHashSet<CriteriaValue>();
// fields.add(new CriteriaValue(CriteriaOperation.EQUALS, "shippingMode", search.getShippingMode()));
// fields.add(new CriteriaValue(CriteriaOperation.EQUALS, "placeOfLoading", search.getPlaceOfLoading()));
// fields.add(new CriteriaValue(CriteriaOperation.EQUALS, "placeOfDischarge", search.getPlaceOfDischarge()));
// if(search.isIncludeBlankCity()){
// fields.add(new CriteriaValue(CriteriaOperation.IN, "city", new Object[]{search.getCity(), null}));
// }else {
// fields.add(new CriteriaValue(CriteriaOperation.EQUALS, "city", search.getCity()));
// }
// return fields;
return null;
}
@Override
public long count(LeadTimeSearch search) {
log.debug("Search. " + search);
DetachedCriteria criteria = getDetachedCriteria(search, false);
return getExecutableCriteriaCount(criteria);
}
@Override
public LeadTime lookup(LeadTimeSearch search) {
DetachedCriteria criteria = getDetachedCriteria(search, true);
List<LeadTime> leadTimes = getExecutableCriteriaList(criteria, search.getSearchMetaParams());
if (!leadTimes.isEmpty()) {
return leadTimes.get(0);
} else {
return null;
}
}
private DetachedCriteria getDetachedCriteria(LeadTimeSearch search, boolean includeBlankCity) {
DetachedCriteria criteria = DetachedCriteria.forClass(LeadTime.class);
CriteriaBuilder.addEqRestriction(criteria, "placeOfLoading", search.getPlaceOfLoading());
if (search.getCountry() != null) {
criteria.createAlias("placeOfLoading", "pl");
criteria.createAlias("pl.country", "c");
CriteriaBuilder.addEqRestriction(criteria, "c.code", search.getCountry().getCode());
}
CriteriaBuilder.addEqRestriction(criteria, "placeOfDischarge", search.getPlaceOfDischarge());
CriteriaBuilder.addEqRestriction(criteria, "shippingMode", search.getShippingMode());
if (includeBlankCity) {
CriteriaBuilder.addDisjunction(criteria, "city", search.getCity());
} else {
CriteriaBuilder.addEqRestriction(criteria, "city", search.getCity());
}
return criteria;
}
}